From cf66f97758003a41737602d4b1b1051b266d4f81 Mon Sep 17 00:00:00 2001 From: Sebastian Mateos Nicolajsen <80953876+sebastiannicolajsen@users.noreply.github.com> Date: Fri, 10 Sep 2021 13:57:34 +0200 Subject: [PATCH] feat: update and cancel swaps, claims, and returns (#310) --- .../api/__tests__/admin/draft-order.js | 346 ++++--- .../api/__tests__/admin/order.js | 222 +++++ .../store/__snapshots__/swaps.js.snap | 2 +- integration-tests/api/helpers/call-helpers.js | 100 ++ integration-tests/api/helpers/claim-seeder.js | 118 +++ integration-tests/api/helpers/order-seeder.js | 137 +++ integration-tests/api/helpers/swap-seeder.js | 71 +- integration-tests/api/medusa-config.js | 6 +- integration-tests/api/yarn.lock | 879 +++++++++--------- .../src/services/webshipper-fulfillment.js | 5 +- packages/medusa-plugin-wishlist/yarn.lock | 81 -- packages/medusa-telemetry/package.json | 3 +- .../admin/orders/__tests__/cancel-claim.js | 64 ++ .../__tests__/cancel-fulfillment-claim.js | 92 ++ .../__tests__/cancel-fulfillment-swap.js | 92 ++ .../orders/__tests__/cancel-fulfillment.js | 64 ++ .../admin/orders/__tests__/cancel-swap.js | 64 ++ .../admin/orders/__tests__/get-order.js | 1 + .../api/routes/admin/orders/cancel-claim.js | 51 + .../admin/orders/cancel-fulfillment-claim.js | 61 ++ .../admin/orders/cancel-fulfillment-swap.js | 62 ++ .../routes/admin/orders/cancel-fulfillment.js | 51 + .../api/routes/admin/orders/cancel-order.js | 6 +- .../api/routes/admin/orders/cancel-swap.js | 51 + .../src/api/routes/admin/orders/index.js | 41 + .../api/routes/admin/orders/request-return.js | 11 +- .../api/routes/admin/returns/cancel-return.js | 50 + .../src/api/routes/admin/returns/index.js | 5 + .../routes/admin/returns/receive-return.js | 2 +- .../routes/admin/swaps/__tests__/get-swap.js | 2 +- .../store/carts/__tests__/complete-cart.js | 2 +- .../src/api/routes/store/swaps/index.js | 3 +- packages/medusa/src/index.js | 3 +- ...513367-ensure_cancellation_fields_exist.ts | 48 + packages/medusa/src/models/claim-order.ts | 4 + packages/medusa/src/models/return.ts | 3 +- packages/medusa/src/models/swap.ts | 7 + .../medusa/src/services/__mocks__/claim.js | 23 + .../src/services/__mocks__/fulfillment.js | 26 + .../medusa/src/services/__mocks__/order.js | 5 + .../medusa/src/services/__mocks__/swap.js | 15 + .../medusa/src/services/__tests__/claim.js | 205 ++-- .../src/services/__tests__/fulfillment.js | 74 +- .../medusa/src/services/__tests__/order.js | 356 ++++++- .../medusa/src/services/__tests__/return.js | 184 +++- .../medusa/src/services/__tests__/swap.js | 287 +++++- packages/medusa/src/services/claim.js | 118 ++- packages/medusa/src/services/fulfillment.js | 39 +- packages/medusa/src/services/inventory.js | 1 - packages/medusa/src/services/order.js | 128 ++- .../medusa/src/services/payment-provider.js | 1 - packages/medusa/src/services/return.js | 63 ++ packages/medusa/src/services/swap.js | 157 +++- packages/medusa/yarn.lock | 90 +- yarn.lock | 387 ++++++-- 55 files changed, 3962 insertions(+), 1007 deletions(-) create mode 100644 integration-tests/api/helpers/call-helpers.js create mode 100644 integration-tests/api/helpers/claim-seeder.js create mode 100644 packages/medusa/src/api/routes/admin/orders/__tests__/cancel-claim.js create mode 100644 packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-claim.js create mode 100644 packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-swap.js create mode 100644 packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment.js create mode 100644 packages/medusa/src/api/routes/admin/orders/__tests__/cancel-swap.js create mode 100644 packages/medusa/src/api/routes/admin/orders/cancel-claim.js create mode 100644 packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js create mode 100644 packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js create mode 100644 packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js create mode 100644 packages/medusa/src/api/routes/admin/orders/cancel-swap.js create mode 100644 packages/medusa/src/api/routes/admin/returns/cancel-return.js create mode 100644 packages/medusa/src/migrations/1625560513367-ensure_cancellation_fields_exist.ts create mode 100644 packages/medusa/src/services/__mocks__/claim.js create mode 100644 packages/medusa/src/services/__mocks__/fulfillment.js diff --git a/integration-tests/api/__tests__/admin/draft-order.js b/integration-tests/api/__tests__/admin/draft-order.js index bbe1174b08..2f267969fb 100644 --- a/integration-tests/api/__tests__/admin/draft-order.js +++ b/integration-tests/api/__tests__/admin/draft-order.js @@ -1,49 +1,49 @@ -const path = require("path"); +const path = require("path") -const setupServer = require("../../../helpers/setup-server"); -const { useApi } = require("../../../helpers/use-api"); -const { initDb, useDb } = require("../../../helpers/use-db"); +const setupServer = require("../../../helpers/setup-server") +const { useApi } = require("../../../helpers/use-api") +const { initDb, useDb } = require("../../../helpers/use-db") -const draftOrderSeeder = require("../../helpers/draft-order-seeder"); -const adminSeeder = require("../../helpers/admin-seeder"); +const draftOrderSeeder = require("../../helpers/draft-order-seeder") +const adminSeeder = require("../../helpers/admin-seeder") -jest.setTimeout(30000); +jest.setTimeout(30000) describe("/admin/draft-orders", () => { - let medusaProcess; - let dbConnection; + let medusaProcess + let dbConnection beforeAll(async () => { - const cwd = path.resolve(path.join(__dirname, "..", "..")); - dbConnection = await initDb({ cwd }); - medusaProcess = await setupServer({ cwd }); - }); + const cwd = path.resolve(path.join(__dirname, "..", "..")) + dbConnection = await initDb({ cwd }) + medusaProcess = await setupServer({ cwd }) + }) afterAll(async () => { - const db = useDb(); - await db.shutdown(); + const db = useDb() + await db.shutdown() - medusaProcess.kill(); - }); + medusaProcess.kill() + }) describe("POST /admin/draft-orders", () => { beforeEach(async () => { try { - await adminSeeder(dbConnection); - await draftOrderSeeder(dbConnection); + await adminSeeder(dbConnection) + await draftOrderSeeder(dbConnection) } catch (err) { - console.log(err); - throw err; + console.log(err) + throw err } - }); + }) afterEach(async () => { - const db = useDb(); - await db.teardown(); - }); + const db = useDb() + await db.teardown() + }) it("creates a draft order cart", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -62,7 +62,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -71,13 +71,13 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); - expect(response.status).toEqual(200); - }); + console.log(err) + }) + expect(response.status).toEqual(200) + }) it("creates a draft order cart and creates new user", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "non-existing@test.dk", @@ -96,7 +96,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -105,19 +105,19 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) - const draftOrder = response.data.draft_order; + const draftOrder = response.data.draft_order - expect(draftOrder.cart.customer_id).toBeDefined(); - expect(draftOrder.cart.email).toEqual("non-existing@test.dk"); - }); + expect(draftOrder.cart.customer_id).toBeDefined() + expect(draftOrder.cart.email).toEqual("non-existing@test.dk") + }) it("fails to create a draft order with option requirement", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -136,7 +136,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option-req", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -145,13 +145,13 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - return err.response; - }); - expect(response.status).toEqual(400); - }); + return err.response + }) + expect(response.status).toEqual(400) + }) it("creates a draft order with option requirement", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -175,7 +175,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option-req", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -184,13 +184,13 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); - expect(response.status).toEqual(200); - }); + console.log(err) + }) + expect(response.status).toEqual(200) + }) it("creates a draft order with custom item", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -214,7 +214,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -223,13 +223,13 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); - expect(response.status).toEqual(200); - }); + console.log(err) + }) + expect(response.status).toEqual(200) + }) it("creates a draft order with product variant with custom price and custom item price set to 0", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -255,7 +255,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -264,8 +264,8 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) const created = await api .get(`/admin/draft-orders/${response.data.draft_order.id}`, { @@ -274,10 +274,10 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) expect(created.data.draft_order.cart.items).toEqual( expect.arrayContaining([ expect.objectContaining({ @@ -288,17 +288,17 @@ describe("/admin/draft-orders", () => { unit_price: 0, }), ]) - ); + ) // Check that discount is applied expect(created.data.draft_order.cart.discounts[0]).toEqual( expect.objectContaining({ code: "TEST", }) - ); - }); + ) + }) it("creates a draft order with created shipping address", async () => { - const api = useApi(); + const api = useApi() const payload = { email: "oli@test.dk", @@ -329,7 +329,7 @@ describe("/admin/draft-orders", () => { option_id: "test-option", }, ], - }; + } const response = await api .post("/admin/draft-orders", payload, { @@ -338,13 +338,13 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); - expect(response.status).toEqual(200); - }); + console.log(err) + }) + expect(response.status).toEqual(200) + }) it("creates a draft order and registers manual payment", async () => { - const api = useApi(); + const api = useApi() // register system payment for draft order const orderResponse = await api.post( @@ -355,7 +355,7 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) const createdOrder = await api.get( `/admin/orders/${orderResponse.data.order.id}`, @@ -364,7 +364,7 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) const updatedDraftOrder = await api.get( `/admin/draft-orders/test-draft-order`, @@ -373,40 +373,38 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) - expect(orderResponse.status).toEqual(200); + expect(orderResponse.status).toEqual(200) // expect newly created order to have id of draft order and system payment - expect(createdOrder.data.order.draft_order_id).toEqual( - "test-draft-order" - ); + expect(createdOrder.data.order.draft_order_id).toEqual("test-draft-order") expect(createdOrder.data.order.payments).toEqual( expect.arrayContaining([ expect.objectContaining({ provider_id: "system" }), ]) - ); + ) // expect draft order to be complete - expect(updatedDraftOrder.data.draft_order.status).toEqual("completed"); - expect(updatedDraftOrder.data.draft_order.completed_at).not.toEqual(null); - }); - }); + expect(updatedDraftOrder.data.draft_order.status).toEqual("completed") + expect(updatedDraftOrder.data.draft_order.completed_at).not.toEqual(null) + }) + }) describe("GET /admin/draft-orders", () => { beforeEach(async () => { try { - await adminSeeder(dbConnection); - await draftOrderSeeder(dbConnection); + await adminSeeder(dbConnection) + await draftOrderSeeder(dbConnection) } catch (err) { - throw err; + throw err } - }); + }) afterEach(async () => { - const db = useDb(); - await db.teardown(); - }); + const db = useDb() + await db.teardown() + }) it("lists draft orders", async () => { - const api = useApi(); + const api = useApi() const response = await api .get("/admin/draft-orders", { @@ -415,20 +413,20 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) expect(response.data.draft_orders).toEqual( expect.arrayContaining([ expect.objectContaining({ id: "test-draft-order" }), ]) - ); - }); + ) + }) it("lists draft orders with query", async () => { - const api = useApi(); + const api = useApi() const response = await api .get("/admin/draft-orders?q=oli@test", { @@ -437,10 +435,10 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) expect(response.data.draft_orders).toEqual( expect.arrayContaining([ @@ -448,11 +446,11 @@ describe("/admin/draft-orders", () => { cart: expect.objectContaining({ email: "oli@test.dk" }), }), ]) - ); - }); + ) + }) it("lists no draft orders on query for non-existing email", async () => { - const api = useApi(); + const api = useApi() const response = await api .get("/admin/draft-orders?q=heyo@heyo.dk", { @@ -461,34 +459,34 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) - expect(response.data.draft_orders).toEqual([]); - expect(response.data.count).toEqual(0); - }); - }); + expect(response.data.draft_orders).toEqual([]) + expect(response.data.count).toEqual(0) + }) + }) describe("DELETE /admin/draft-orders/:id", () => { beforeEach(async () => { try { - await adminSeeder(dbConnection); - await draftOrderSeeder(dbConnection); + await adminSeeder(dbConnection) + await draftOrderSeeder(dbConnection) } catch (err) { - console.log(err); - throw err; + console.log(err) + throw err } - }); + }) afterEach(async () => { - const db = useDb(); - await db.teardown(); - }); + const db = useDb() + await db.teardown() + }) it("deletes a draft order", async () => { - const api = useApi(); + const api = useApi() const response = await api .delete("/admin/draft-orders/test-draft-order", { @@ -497,36 +495,36 @@ describe("/admin/draft-orders", () => { }, }) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) expect(response.data).toEqual({ id: "test-draft-order", object: "draft-order", deleted: true, - }); - }); - }); + }) + }) + }) describe("POST /admin/draft-orders/:id/line-items/:line_id", () => { beforeEach(async () => { try { - await adminSeeder(dbConnection); - await draftOrderSeeder(dbConnection, { status: "open" }); + await adminSeeder(dbConnection) + await draftOrderSeeder(dbConnection, { status: "open" }) } catch (err) { - throw err; + throw err } - }); + }) afterEach(async () => { - const db = useDb(); - await db.teardown(); - }); + const db = useDb() + await db.teardown() + }) it("updates a line item on the draft order", async () => { - const api = useApi(); + const api = useApi() const response = await api .post( @@ -542,10 +540,10 @@ describe("/admin/draft-orders", () => { } ) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) const updatedDraftOrder = await api.get( `/admin/draft-orders/test-draft-order`, @@ -554,16 +552,16 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) - const item = updatedDraftOrder.data.draft_order.cart.items[0]; + const item = updatedDraftOrder.data.draft_order.cart.items[0] - expect(item.title).toEqual("Update title"); - expect(item.unit_price).toEqual(1000); - }); + expect(item.title).toEqual("Update title") + expect(item.unit_price).toEqual(1000) + }) it("removes the line item, if quantity is 0", async () => { - const api = useApi(); + const api = useApi() const response = await api .post( @@ -579,10 +577,10 @@ describe("/admin/draft-orders", () => { } ) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) const updatedDraftOrder = await api.get( `/admin/draft-orders/test-draft-order`, @@ -591,31 +589,31 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) - const items = updatedDraftOrder.data.draft_order.cart.items; + const items = updatedDraftOrder.data.draft_order.cart.items - expect(items).toEqual([]); - }); - }); + expect(items).toEqual([]) + }) + }) describe("POST /admin/draft-orders/:id", () => { beforeEach(async () => { try { - await adminSeeder(dbConnection); - await draftOrderSeeder(dbConnection, { status: "open" }); + await adminSeeder(dbConnection) + await draftOrderSeeder(dbConnection, { status: "open" }) } catch (err) { - throw err; + throw err } - }); + }) afterEach(async () => { - const db = useDb(); - await db.teardown(); - }); + const db = useDb() + await db.teardown() + }) it("updates a line item on the draft order", async () => { - const api = useApi(); + const api = useApi() const response = await api .post( @@ -647,10 +645,10 @@ describe("/admin/draft-orders", () => { } ) .catch((err) => { - console.log(err); - }); + console.log(err) + }) - expect(response.status).toEqual(200); + expect(response.status).toEqual(200) const updatedDraftOrder = await api.get( `/admin/draft-orders/test-draft-order`, @@ -659,14 +657,14 @@ describe("/admin/draft-orders", () => { Authorization: "Bearer test_token", }, } - ); + ) - const dorder = updatedDraftOrder.data.draft_order; + const dorder = updatedDraftOrder.data.draft_order - expect(dorder.cart.email).toEqual("lebron@james.com"); - expect(dorder.cart.billing_address.first_name).toEqual("lebron"); - expect(dorder.cart.shipping_address.last_name).toEqual("james"); - expect(dorder.cart.discounts[0].code).toEqual("TEST"); - }); - }); -}); + expect(dorder.cart.email).toEqual("lebron@james.com") + expect(dorder.cart.billing_address.first_name).toEqual("lebron") + expect(dorder.cart.shipping_address.last_name).toEqual("james") + expect(dorder.cart.discounts[0].code).toEqual("TEST") + }) + }) +}) diff --git a/integration-tests/api/__tests__/admin/order.js b/integration-tests/api/__tests__/admin/order.js index d21591b963..863b151551 100644 --- a/integration-tests/api/__tests__/admin/order.js +++ b/integration-tests/api/__tests__/admin/order.js @@ -13,6 +13,14 @@ const { initDb, useDb } = require("../../../helpers/use-db"); const orderSeeder = require("../../helpers/order-seeder"); const swapSeeder = require("../../helpers/swap-seeder"); const adminSeeder = require("../../helpers/admin-seeder"); +const claimSeeder = require("../../helpers/claim-seeder"); + +const { + expectPostCallToReturn, + expectAllPostCallsToReturn, + callGet, + partial, +} = require("../../helpers/call-helpers"); jest.setTimeout(30000); @@ -70,6 +78,8 @@ describe("/admin/orders", () => { try { await adminSeeder(dbConnection); await orderSeeder(dbConnection); + await swapSeeder(dbConnection); + await claimSeeder(dbConnection); } catch (err) { console.log(err); throw err; @@ -217,6 +227,7 @@ describe("/admin/orders", () => { try { await adminSeeder(dbConnection); await orderSeeder(dbConnection); + await claimSeeder(dbConnection); } catch (err) { console.log(err); throw err; @@ -411,6 +422,7 @@ describe("/admin/orders", () => { }, } ); + expect(response.status).toEqual(200); expect(response.data.order.claims[0].claim_items).toEqual( @@ -738,6 +750,58 @@ describe("/admin/orders", () => { ]); }); + it("Only allow canceling claim after canceling fulfillments", async () => { + const order_id = "order-with-claim"; + + const order = await callGet({ + path: `/admin/orders/${order_id}`, + get: "order", + }); + + const claim = order.claims.filter((s) => s.id === "claim-w-f")[0]; + const claim_id = claim.id; + + const expectCancelToReturn = partial(expectPostCallToReturn, { + path: `/admin/orders/${order_id}/claims/${claim_id}/cancel`, + }); + + await expectCancelToReturn({ code: 400 }); + + await expectAllPostCallsToReturn({ + code: 200, + col: claim.fulfillments, + pathf: (f) => + `/admin/orders/${order_id}/claims/${claim_id}/fulfillments/${f.id}/cancel`, + }); + + await expectCancelToReturn({ code: 200 }); + }); + + it("Only allow canceling claim after canceling returns", async () => { + const order_id = "order-with-claim"; + + const order = await callGet({ + path: `/admin/orders/${order_id}`, + get: "order", + }); + + const claim = order.claims.filter((c) => c.id === "claim-w-r")[0]; + const claim_id = claim.id; + + const expectCancelToReturn = partial(expectPostCallToReturn, { + path: `/admin/orders/${order_id}/claims/${claim_id}/cancel`, + }); + + await expectCancelToReturn({ code: 400 }); + + await expectPostCallToReturn({ + code: 200, + path: `/admin/returns/${claim.return_order.id}/cancel`, + }); + + await expectCancelToReturn({ code: 200 }); + }); + it("fails to creates a claim due to no stock on additional items", async () => { const api = useApi(); try { @@ -935,6 +999,20 @@ describe("/admin/orders", () => { expect.objectContaining({ id: "test-order", }), + + expect.objectContaining({ + id: "test-order-w-c", + }), + + expect.objectContaining({ + id: "test-order-w-s", + }), + expect.objectContaining({ + id: "test-order-w-f", + }), + expect.objectContaining({ + id: "test-order-w-r", + }), ]); }); @@ -955,6 +1033,19 @@ describe("/admin/orders", () => { expect.objectContaining({ id: "test-order", }), + expect.objectContaining({ + id: "test-order-w-c", + }), + + expect.objectContaining({ + id: "test-order-w-s", + }), + expect.objectContaining({ + id: "test-order-w-f", + }), + expect.objectContaining({ + id: "test-order-w-r", + }), ]); }); @@ -991,6 +1082,19 @@ describe("/admin/orders", () => { expect.objectContaining({ id: "test-order", }), + expect.objectContaining({ + id: "test-order-w-c", + }), + + expect.objectContaining({ + id: "test-order-w-s", + }), + expect.objectContaining({ + id: "test-order-w-f", + }), + expect.objectContaining({ + id: "test-order-w-r", + }), ]); }); @@ -1027,8 +1131,72 @@ describe("/admin/orders", () => { expect.objectContaining({ id: "test-order", }), + expect.objectContaining({ + id: "test-order-w-c", + }), + + expect.objectContaining({ + id: "test-order-w-s", + }), + expect.objectContaining({ + id: "test-order-w-f", + }), + expect.objectContaining({ + id: "test-order-w-r", + }), ]); }); + + it.each([ + [ + "returns", + "test-order-w-r", + (o) => o.returns, + (r) => `/admin/returns/${r.id}/cancel`, + ], + [ + "swaps", + "test-order-w-s", + (o) => o.swaps, + (s) => `/admin/orders/test-order-w-s/swaps/${s.id}/cancel`, + ], + [ + "claims", + "test-order-w-c", + (o) => o.claims, + (c) => `/admin/orders/test-order-w-c/claims/${c.id}/cancel`, + ], + [ + "fulfillments", + "test-order-w-f", + (o) => o.fulfillments, + (f) => `/admin/orders/test-order-w-f/fulfillments/${f.id}/cancel`, + ], + ])( + "Only allows canceling order after canceling %s", + async (id, o, of, pf) => { + const order_id = o; + + const order = await callGet({ + path: `/admin/orders/${order_id}`, + get: "order", + }); + + const expectCanceltoReturn = partial(expectPostCallToReturn, { + path: `/admin/orders/${order_id}/cancel`, + }); + + await expectCanceltoReturn({ code: 400 }); + + await expectAllPostCallsToReturn({ + code: 200, + col: of(order), + pathf: pf, + }); + + await expectCanceltoReturn({ code: 200 }); + } + ); }); describe("POST /admin/orders/:id/swaps", () => { @@ -1290,5 +1458,59 @@ describe("/admin/orders", () => { expect(received.status).toEqual(200); }); + + it("Only allows canceling swap after canceling fulfillments", async () => { + try { + const swap_id = "swap-w-f"; + + const swap = await callGet({ + path: `/admin/swaps/${swap_id}`, + get: "swap", + }); + + const { order_id } = swap; + + const expectCancelToReturn = partial(expectPostCallToReturn, { + path: `/admin/orders/${order_id}/swaps/${swap_id}/cancel`, + }); + + await expectCancelToReturn({ code: 400 }); + + await expectAllPostCallsToReturn({ + code: 200, + col: swap.fulfillments, + pathf: (f) => + `/admin/orders/${order_id}/swaps/${swap_id}/fulfillments/${f.id}/cancel`, + }); + + await expectCancelToReturn({ code: 200 }); + } catch (e) { + console.log(e); + } + }); + + it("Only allows canceling swap after canceling return", async () => { + const swap_id = "swap-w-r"; + + const swap = await callGet({ + path: `/admin/swaps/${swap_id}`, + get: "swap", + }); + + const { order_id } = swap; + + const expectCancelToReturn = partial(expectPostCallToReturn, { + path: `/admin/orders/${order_id}/swaps/${swap_id}/cancel`, + }); + + await expectCancelToReturn({ code: 400 }); + + await expectPostCallToReturn({ + code: 200, + path: `/admin/returns/${swap.return_order.id}/cancel`, + }); + + await expectCancelToReturn({ code: 200 }); + }); }); }); diff --git a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap b/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap index 1fbf422ef2..befb1e4768 100644 --- a/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap +++ b/integration-tests/api/__tests__/store/__snapshots__/swaps.js.snap @@ -283,7 +283,7 @@ Object { "created_at": Any, "currency_code": "usd", "customer_id": "test-customer", - "display_id": 2, + "display_id": 6, "draft_order_id": null, "email": "test@email.com", "fulfillment_status": "fulfilled", diff --git a/integration-tests/api/helpers/call-helpers.js b/integration-tests/api/helpers/call-helpers.js new file mode 100644 index 0000000000..9ecc592811 --- /dev/null +++ b/integration-tests/api/helpers/call-helpers.js @@ -0,0 +1,100 @@ +const { useApi } = require("../../helpers/use-api"); + +const header = { + headers: { + authorization: "Bearer test_token", + }, +}; + +const resolveCall = async (path, payload, header) => { + const api = useApi(); + let res; + try { + const resp = await api.post(path, payload, header); + res = resp.status; + } catch (expectedException) { + try { + res = expectedException.response.status; + } catch (_) { + console.error(expectedException); + } + } + return res; +}; + +const determineFail = (actual, expected, path) => { + if (expected !== actual) { + console.log(`failed at path : ${path}`); + } + expect(actual).toEqual(expected); +}; + +/** + * Allows you to wrap a Call function so that you may reuse some input values. + * @param {Function} fun - the function to call with partial information + * @param {Object} input - the constant input which we want to supply now + * @returns + */ +module.exports.partial = function (fun, input = {}) { + return async (remaining) => await fun({ ...remaining, ...input }); +}; + +/** + * Allows you to assert a specific code result from a POST call. + * @param {Object} input - the information needed to make the call + * (path & payload) and the expected code (code) + */ +module.exports.expectPostCallToReturn = async function ( + input = { + code, + path, + payload: {}, + } +) { + const res = await resolveCall(input.path, input.payload, header); + determineFail(res, input.code, input.path); +}; + +/** + * Allows you to assert a specific code result from multiple POST + * calls. + * @param {Object} input - the collection of objects to execute + * calls from (col), a function which yields the path (pathf), + * and another one which provides the payload (payloadf), as + * well as the code (code) which we want to assert. + */ +module.exports.expectAllPostCallsToReturn = async function ( + input = { + code, + col, + pathf, + payloadf, + } +) { + for (const i of input.col) { + const res = await resolveCall( + input.pathf(i), + input.payloadf ? input.payloadf(i) : {}, + header + ); + determineFail(res, input.code, input.pathf(i)); + } +}; + +/** + * Allows you to retrieve a specific object the response + * from get call, + * and simultaneously assert that the call was successful. + * @param {Object} param0 - contains the path which to + * call (path), and the object within the response.data (get) + * we want to retrieve. + * @returns {Object} found within response.data corresponding + * to the get parameter provided. + */ +module.exports.callGet = async function ({ path, get }) { + const api = useApi(); + const res = await api.get(path, header); + + determineFail(res.status, 200, path); + return res?.data[get]; +}; diff --git a/integration-tests/api/helpers/claim-seeder.js b/integration-tests/api/helpers/claim-seeder.js new file mode 100644 index 0000000000..7c34d987e8 --- /dev/null +++ b/integration-tests/api/helpers/claim-seeder.js @@ -0,0 +1,118 @@ +const { + ClaimOrder, + Order, + LineItem, + Fulfillment, + Return, +} = require("@medusajs/medusa"); + +module.exports = async (connection, data = {}) => { + const manager = connection.manager; + + let orderWithClaim = manager.create(Order, { + id: "order-with-claim", + customer_id: "test-customer", + email: "test@email.com", + payment_status: "captured", + fulfillment_status: "fulfilled", + billing_address: { + id: "test-billing-address", + first_name: "lebron", + }, + shipping_address: { + id: "test-shipping-address", + first_name: "lebron", + country_code: "us", + }, + region_id: "test-region", + currency_code: "usd", + tax_rate: 0, + discounts: [], + payments: [ + { + id: "test-payment-for-claim-order", + amount: 10000, + currency_code: "usd", + amount_refunded: 0, + provider_id: "test-pay", + data: {}, + }, + ], + items: [], + ...data, + }); + + await manager.save(orderWithClaim); + + const li = manager.create(LineItem, { + id: "test-item-co-2", + fulfilled_quantity: 1, + title: "Line Item", + description: "Line Item Desc", + thumbnail: "https://test.js/1234", + unit_price: 8000, + quantity: 1, + variant_id: "test-variant", + order_id: orderWithClaim.id, + }); + + await manager.save(li); + + const li2 = manager.create(LineItem, { + id: "test-item-co-3", + fulfilled_quantity: 4, + title: "Line Item", + description: "Line Item Desc", + thumbnail: "https://test.js/1234", + unit_price: 8000, + quantity: 4, + variant_id: "test-variant", + order_id: orderWithClaim.id, + }); + + await manager.save(li2); + + const claimWithFulfillment = manager.create(ClaimOrder, { + id: "claim-w-f", + type: "replace", + payment_status: "na", + fulfillment_status: "not_fulfilled", + order_id: "order-with-claim", + ...data, + }); + + const ful1 = manager.create(Fulfillment, { + id: "fulfillment-co-1", + data: {}, + provider_id: "test-ful", + }); + + const ful2 = manager.create(Fulfillment, { + id: "fulfillment-co-2", + data: {}, + provider_id: "test-ful", + }); + + claimWithFulfillment.fulfillments = [ful1, ful2]; + + await manager.save(claimWithFulfillment); + + const claimWithReturn = manager.create(ClaimOrder, { + id: "claim-w-r", + type: "replace", + payment_status: "na", + fulfillment_status: "not_fulfilled", + order_id: "order-with-claim", + ...data, + }); + + await manager.save(claimWithReturn); + + await manager.insert(Return, { + id: "return-id-2", + claim_order_id: "claim-w-r", + status: "requested", + refund_amount: 0, + data: {}, + }); +}; diff --git a/integration-tests/api/helpers/order-seeder.js b/integration-tests/api/helpers/order-seeder.js index cd891180fd..ac3bde962c 100644 --- a/integration-tests/api/helpers/order-seeder.js +++ b/integration-tests/api/helpers/order-seeder.js @@ -9,6 +9,7 @@ const { Product, ProductVariant, Region, + Payment, Order, Swap, } = require("@medusajs/medusa"); @@ -183,4 +184,140 @@ module.exports = async (connection, data = {}) => { price: 1000, data: {}, }); + + const orderTemplate = () => { + return { + customer_id: "test-customer", + email: "test@gmail.com", + payment_status: "not_paid", + fulfillment_status: "not_fulfilled", + region_id: "test-region", + currency_code: "usd", + tax_rate: 0, + ...data, + }; + }; + + const paymentTemplate = () => { + return { + amount: 10000, + currency_code: "usd", + provider_id: "test-pay", + data: {}, + }; + }; + + const orderWithClaim = manager.create(Order, { + id: "test-order-w-c", + claims: [ + { + type: "replace", + id: "claim-1", + payment_status: "na", + fulfillment_status: "not_fulfilled", + payment_provider: "test-pay", + }, + ], + ...orderTemplate(), + }); + + await manager.save(orderWithClaim); + + await manager.insert(Payment, { + order_id: "test-order-w-c", + id: "o-pay1", + ...paymentTemplate(), + }); + + const orderWithSwap = manager.create(Order, { + id: "test-order-w-s", + ...orderTemplate(), + }); + + await manager.save(orderWithSwap); + + await manager.insert(Payment, { + order_id: "test-order-w-s", + id: "o-pay2", + ...paymentTemplate(), + }); + + const swap1 = manager.create(Swap, { + id: "swap-1", + order_id: "test-order-w-s", + fulfillment_status: "not_fulfilled", + payment_status: "not_paid", + }); + + const pay1 = manager.create(Payment, { + id: "pay1", + ...paymentTemplate(), + }); + + swap1.payment = pay1; + + const swap2 = manager.create(Swap, { + id: "swap-2", + order_id: "test-order-w-s", + fulfillment_status: "not_fulfilled", + payment_status: "not_paid", + }); + + const pay2 = manager.create(Payment, { + id: "pay2", + ...paymentTemplate(), + }); + + swap2.payment = pay2; + + await manager.save(swap1); + await manager.save(swap2); + + const orderWithFulfillment = manager.create(Order, { + id: "test-order-w-f", + fulfillments: [ + { + id: "fulfillment-on-order-1", + data: {}, + provider_id: "test-ful", + }, + { + id: "fulfillment-on-order-2", + data: {}, + provider_id: "test-ful", + }, + ], + ...orderTemplate(), + }); + + await manager.save(orderWithFulfillment); + + await manager.insert(Payment, { + order_id: "test-order-w-f", + id: "o-pay3", + ...paymentTemplate(), + }); + + const orderWithReturn = manager.create(Order, { + id: "test-order-w-r", + returns: [ + { + id: "return-on-order-1", + refund_amount: 0, + }, + { + id: "return-on-order-2", + refund_amount: 0, + }, + ], + ...orderTemplate(), + }); + + await manager.save(orderWithReturn); + + await manager.insert(Payment, { + order_id: "test-order-w-r", + id: "o-pay4", + ...paymentTemplate(), + }); }; diff --git a/integration-tests/api/helpers/swap-seeder.js b/integration-tests/api/helpers/swap-seeder.js index 6d744421ed..7fcc9e6395 100644 --- a/integration-tests/api/helpers/swap-seeder.js +++ b/integration-tests/api/helpers/swap-seeder.js @@ -9,6 +9,7 @@ const { Product, ProductVariant, Region, + Payment, Order, Swap, Cart, @@ -43,7 +44,7 @@ module.exports = async (connection, data = {}) => { amount: 10000, currency_code: "usd", amount_refunded: 0, - provider_id: "test", + provider_id: "test-pay", data: {}, }, ], @@ -80,7 +81,7 @@ module.exports = async (connection, data = {}) => { amount: 10000, currency_code: "usd", amount_refunded: 0, - provider_id: "test", + provider_id: "test-pay", data: {}, }, additional_items: [ @@ -100,6 +101,70 @@ module.exports = async (connection, data = {}) => { await manager.save(swap); + const cartTemplate = async (cartId) => { + const cart = manager.create(Cart, { + id: cartId, + customer_id: "test-customer", + email: "test-customer@email.com", + shipping_address_id: "test-shipping-address", + billing_address_id: "test-billing-address", + region_id: "test-region", + type: "swap", + metadata: {}, + ...data, + }); + + await manager.save(cart); + }; + + const swapTemplate = async (cartId) => { + await cartTemplate(cartId); + return { + order_id: orderWithSwap.id, + fulfillment_status: "fulfilled", + payment_status: "not_paid", + cart_id: cartId, + payment: { + amount: 5000, + currency_code: "usd", + amount_refunded: 0, + provider_id: "test-pay", + data: {}, + }, + ...data, + }; + }; + + const swapWithFulfillments = manager.create(Swap, { + id: "swap-w-f", + fulfillments: [ + { + id: "fulfillment-1", + data: {}, + provider_id: "test-ful", + }, + { + id: "fulfillment-2", + data: {}, + provider_id: "test-ful", + }, + ], + ...(await swapTemplate("sc-w-f")), + }); + + await manager.save(swapWithFulfillments); + + const swapWithReturn = manager.create(Swap, { + id: "swap-w-r", + return_order: { + id: "return-id", + status: "requested", + refund_amount: 0, + }, + ...(await swapTemplate("sc-w-r")), + }); + + await manager.save(swapWithReturn); const li = manager.create(LineItem, { id: "return-item-1", fulfilled_quantity: 1, @@ -175,7 +240,7 @@ module.exports = async (connection, data = {}) => { amount: 10000, currency_code: "usd", amount_refunded: 0, - provider_id: "test", + provider_id: "test-pay", data: {}, }, additional_items: [ diff --git a/integration-tests/api/medusa-config.js b/integration-tests/api/medusa-config.js index 08a9f4e0c8..9c7ac0424e 100644 --- a/integration-tests/api/medusa-config.js +++ b/integration-tests/api/medusa-config.js @@ -1,5 +1,5 @@ -const DB_USERNAME = process.env.DB_USERNAME || "postgres"; -const DB_PASSWORD = process.env.DB_PASSWORD || ""; +const DB_USERNAME = process.env.DB_USERNAME || "postgres" +const DB_PASSWORD = process.env.DB_PASSWORD || "" module.exports = { plugins: [], @@ -8,4 +8,4 @@ module.exports = { database_url: `postgres://${DB_USERNAME}:${DB_PASSWORD}@localhost/medusa-integration`, database_type: "postgres", }, -}; +} diff --git a/integration-tests/api/yarn.lock b/integration-tests/api/yarn.lock index 3c62cf0662..5278229f41 100644 --- a/integration-tests/api/yarn.lock +++ b/integration-tests/api/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.12.10": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.5.tgz#9551b194f02360729de6060785bbdcce52c69f0a" - integrity sha512-poegjhRvXHWO0EAsnYajwYZuqcz7gyfxwfaecUESxDujrqOivf3zrjFbub8IJkrqEaz3fvJWh001EzxBub54fg== + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.14.8.tgz#fac73c0e2328a8af9fd3560c06b096bfa3730933" + integrity sha512-lcy6Lymft9Rpfqmrqdd4oTDdUx9ZwaAhAfywVrHG4771Pa6PPT0danJ1kDHBXYqh4HHSmIdA+nlmfxfxSDPtBg== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -25,25 +25,25 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== "@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.0.tgz#749e57c68778b73ad8082775561f67f5196aafa8" + integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" + "@babel/generator" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" + "@babel/helper-module-transforms" "^7.15.0" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.15.0" "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -51,12 +51,12 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== +"@babel/generator@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15" + integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.0" jsesc "^2.5.1" source-map "^0.5.0" @@ -75,26 +75,26 @@ "@babel/helper-explode-assignable-expression" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818" + integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== dependencies: - "@babel/compat-data" "^7.14.5" + "@babel/compat-data" "^7.15.0" "@babel/helper-validator-option" "^7.14.5" browserslist "^4.16.6" semver "^6.3.0" "@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7" + integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q== dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.0" "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" "@babel/helper-split-export-declaration" "^7.14.5" "@babel/helper-create-regexp-features-plugin@^7.14.5": @@ -149,12 +149,12 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== +"@babel/helper-member-expression-to-functions@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b" + integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.0" "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": version "7.14.5" @@ -163,19 +163,19 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08" + integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== dependencies: "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.0" + "@babel/helper-simple-access" "^7.14.8" "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" @@ -198,22 +198,22 @@ "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4" + integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.15.0" "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.14.8" "@babel/helper-skip-transparent-expression-wrappers@^7.14.5": version "7.14.5" @@ -229,10 +229,10 @@ dependencies: "@babel/types" "^7.14.5" -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== "@babel/helper-validator-option@^7.14.5": version "7.14.5" @@ -249,14 +249,14 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== +"@babel/helpers@^7.14.8": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.3.tgz#c96838b752b95dcd525b4e741ed40bb1dc2a1357" + integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== dependencies: "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/traverse" "^7.15.0" + "@babel/types" "^7.15.0" "@babel/highlight@^7.14.5": version "7.14.5" @@ -268,21 +268,21 @@ js-tokens "^4.0.0" "@babel/node@^7.12.10": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.14.7.tgz#0090e83e726027ea682240718ca39e4b625b15ad" - integrity sha512-QghINtVgOUCrSpE7z4IXPTGJfRYyjoY7ny5Qz0cuUlsThQv6WSn1xJk217WlEDucPLP2o5HwGXPSkxD4LWOZxQ== + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.14.9.tgz#c15b1c8ecb33c079cb7666c8b4861791150c7aa1" + integrity sha512-7QJvGn3ID2TjoFst3UdLu3LOxn/Q6Nhr/mo0MENstbPHehl/0wnod2gmVDB+zDxRL6pFFS7z0WeBK3b94k4CLg== dependencies: "@babel/register" "^7.14.5" commander "^4.0.1" - core-js "^3.15.0" + core-js "^3.16.0" node-environment-flags "^1.0.5" regenerator-runtime "^0.13.4" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.15.0": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" + integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" @@ -293,10 +293,10 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" - integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== +"@babel/plugin-proposal-async-generator-functions@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a" + integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" @@ -573,16 +573,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.5", "@babel/plugin-transform-classes@^7.9.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.9", "@babel/plugin-transform-classes@^7.9.5": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" + integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" @@ -674,14 +674,14 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== +"@babel/plugin-transform-modules-commonjs@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281" + integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.15.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.14.5": @@ -703,10 +703,10 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" - integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" @@ -754,9 +754,9 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" - integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3" + integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw== dependencies: "@babel/helper-module-imports" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" @@ -818,23 +818,23 @@ "@babel/polyfill@^7.8.7": version "7.12.1" - resolved "http://localhost:4873/@babel%2fpolyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" integrity sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g== dependencies: core-js "^2.6.5" regenerator-runtime "^0.13.4" "@babel/preset-env@^7.12.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.0.tgz#e2165bf16594c9c05e52517a194bf6187d6fe464" + integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q== dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.7" + "@babel/plugin-proposal-async-generator-functions" "^7.14.9" "@babel/plugin-proposal-class-properties" "^7.14.5" "@babel/plugin-proposal-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import" "^7.14.5" @@ -867,7 +867,7 @@ "@babel/plugin-transform-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions" "^7.14.5" "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.9" "@babel/plugin-transform-computed-properties" "^7.14.5" "@babel/plugin-transform-destructuring" "^7.14.7" "@babel/plugin-transform-dotall-regex" "^7.14.5" @@ -878,10 +878,10 @@ "@babel/plugin-transform-literals" "^7.14.5" "@babel/plugin-transform-member-expression-literals" "^7.14.5" "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.15.0" "@babel/plugin-transform-modules-systemjs" "^7.14.5" "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" "@babel/plugin-transform-new-target" "^7.14.5" "@babel/plugin-transform-object-super" "^7.14.5" "@babel/plugin-transform-parameters" "^7.14.5" @@ -896,11 +896,11 @@ "@babel/plugin-transform-unicode-escapes" "^7.14.5" "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.0" babel-plugin-polyfill-corejs2 "^0.2.2" babel-plugin-polyfill-corejs3 "^0.2.2" babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.15.0" + core-js-compat "^3.16.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": @@ -915,9 +915,9 @@ esutils "^2.0.2" "@babel/register@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.14.5.tgz#d0eac615065d9c2f1995842f85d6e56c345f3233" - integrity sha512-TjJpGz/aDjFGWsItRBQMOFTrmTI9tr79CHOK+KIvLeCkbxuOAk2M5QHjvruIMGoo9OuccMh5euplPzc5FjAKGg== + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752" + integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -925,17 +925,10 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.8.4": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.9.6": - version "7.14.8" - resolved "http://localhost:4873/@babel%2fruntime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" - integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== +"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== dependencies: regenerator-runtime "^0.13.4" @@ -948,27 +941,27 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" + integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== dependencies: "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" + "@babel/generator" "^7.15.0" "@babel/helper-function-name" "^7.14.5" "@babel/helper-hoist-variables" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" + "@babel/parser" "^7.15.0" + "@babel/types" "^7.15.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== +"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" + integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1329,7 +1322,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "http://localhost:4873/@nodelib%2ffs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1337,12 +1330,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "http://localhost:4873/@nodelib%2ffs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "http://localhost:4873/@nodelib%2ffs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -1350,7 +1343,7 @@ "@oclif/command@^1", "@oclif/command@^1.5.20", "@oclif/command@^1.6.0": version "1.8.0" - resolved "http://localhost:4873/@oclif%2fcommand/-/command-1.8.0.tgz#c1a499b10d26e9d1a611190a81005589accbb339" + resolved "https://registry.yarnpkg.com/@oclif/command/-/command-1.8.0.tgz#c1a499b10d26e9d1a611190a81005589accbb339" integrity sha512-5vwpq6kbvwkQwKqAoOU3L72GZ3Ta8RRrewKj9OJRolx28KLJJ8Dg9Rf7obRwt5jQA9bkYd8gqzMTrI7H3xLfaw== dependencies: "@oclif/config" "^1.15.1" @@ -1362,7 +1355,7 @@ "@oclif/config@^1", "@oclif/config@^1.15.1": version "1.17.0" - resolved "http://localhost:4873/@oclif%2fconfig/-/config-1.17.0.tgz#ba8639118633102a7e481760c50054623d09fcab" + resolved "https://registry.yarnpkg.com/@oclif/config/-/config-1.17.0.tgz#ba8639118633102a7e481760c50054623d09fcab" integrity sha512-Lmfuf6ubjQ4ifC/9bz1fSCHc6F6E653oyaRXxg+lgT4+bYf9bk+nqrUpAbrXyABkCqgIBiFr3J4zR/kiFdE1PA== dependencies: "@oclif/errors" "^1.3.3" @@ -1374,7 +1367,7 @@ "@oclif/errors@^1.2.1", "@oclif/errors@^1.2.2", "@oclif/errors@^1.3.3": version "1.3.5" - resolved "http://localhost:4873/@oclif%2ferrors/-/errors-1.3.5.tgz#a1e9694dbeccab10fe2fe15acb7113991bed636c" + resolved "https://registry.yarnpkg.com/@oclif/errors/-/errors-1.3.5.tgz#a1e9694dbeccab10fe2fe15acb7113991bed636c" integrity sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ== dependencies: clean-stack "^3.0.0" @@ -1385,12 +1378,12 @@ "@oclif/linewrap@^1.0.0": version "1.0.0" - resolved "http://localhost:4873/@oclif%2flinewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" + resolved "https://registry.yarnpkg.com/@oclif/linewrap/-/linewrap-1.0.0.tgz#aedcb64b479d4db7be24196384897b5000901d91" integrity sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw== "@oclif/parser@^3.8.0", "@oclif/parser@^3.8.3": version "3.8.5" - resolved "http://localhost:4873/@oclif%2fparser/-/parser-3.8.5.tgz#c5161766a1efca7343e1f25d769efbefe09f639b" + resolved "https://registry.yarnpkg.com/@oclif/parser/-/parser-3.8.5.tgz#c5161766a1efca7343e1f25d769efbefe09f639b" integrity sha512-yojzeEfmSxjjkAvMRj0KzspXlMjCfBzNRPkWw8ZwOSoNWoJn+OCS/m/S+yfV6BvAM4u2lTzX9Y5rCbrFIgkJLg== dependencies: "@oclif/errors" "^1.2.2" @@ -1399,9 +1392,9 @@ tslib "^1.9.3" "@oclif/plugin-help@^3": - version "3.2.2" - resolved "http://localhost:4873/@oclif%2fplugin-help/-/plugin-help-3.2.2.tgz#063ee08cee556573a5198fbdfdaa32796deba0ed" - integrity sha512-SPZ8U8PBYK0n4srFjCLedk0jWU4QlxgEYLCXIBShJgOwPhTTQknkUlsEwaMIevvCU4iCQZhfMX+D8Pz5GZjFgA== + version "3.2.3" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.2.3.tgz#cd24010e7eb326782843d3aa6d6b5a4affebb2c3" + integrity sha512-l2Pd0lbOMq4u/7xsl9hqISFqyR9gWEz/8+05xmrXFr67jXyS6EUCQB+mFBa0wepltrmJu0sAFg9AvA2mLaMMqQ== dependencies: "@oclif/command" "^1.5.20" "@oclif/config" "^1.15.1" @@ -1416,7 +1409,7 @@ "@oclif/screen@^1.0.3": version "1.0.4" - resolved "http://localhost:4873/@oclif%2fscreen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" + resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" integrity sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw== "@sideway/address@^4.1.0": @@ -1520,14 +1513,14 @@ "@types/istanbul-lib-report" "*" "@types/lodash@^4.14.168": - version "4.14.171" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.171.tgz#f01b3a5fe3499e34b622c362a46a609fdb23573b" - integrity sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg== + version "4.14.172" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.172.tgz#aad774c28e7bfd7a67de25408e03ee5a8c3d028a" + integrity sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw== "@types/node@*": - version "16.3.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.3.2.tgz#655432817f83b51ac869c2d51dd8305fb8342e16" - integrity sha512-jJs9ErFLP403I+hMLGnqDRWT0RYKSvArxuBVh2veudHV7ifEC1WAmjJADacZ7mRbA2nWgHtn8xyECMAot0SkAw== + version "16.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.6.1.tgz#aee62c7b966f55fc66c7b6dfa1d58db2a616da61" + integrity sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1556,7 +1549,7 @@ dependencies: "@types/yargs-parser" "*" -"@types/zen-observable@^0.8.2": +"@types/zen-observable@0.8.3": version "0.8.3" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== @@ -1606,14 +1599,14 @@ agent-base@6: ansi-align@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: string-width "^3.0.0" ansi-escapes@^3.1.0: version "3.2.0" - resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: @@ -1630,12 +1623,12 @@ ansi-regex@^2.0.0: ansi-regex@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-regex@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: @@ -1664,7 +1657,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: ansicolors@~0.3.2: version "0.3.2" - resolved "http://localhost:4873/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= any-promise@^1.0.0: @@ -1732,7 +1725,7 @@ array-flatten@1.1.1: array-union@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-unique@^0.3.2: @@ -1751,9 +1744,9 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" - integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + version "3.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" + integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== asynckit@^0.4.0: version "0.4.0" @@ -1775,14 +1768,14 @@ awilix@^4.2.3: axios-retry@^3.1.9: version "3.1.9" - resolved "http://localhost:4873/axios-retry/-/axios-retry-3.1.9.tgz#6c30fc9aeb4519aebaec758b90ef56fa03fe72e8" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.1.9.tgz#6c30fc9aeb4519aebaec758b90ef56fa03fe72e8" integrity sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA== dependencies: is-retry-allowed "^1.1.0" axios@^0.21.1: version "0.21.1" - resolved "http://localhost:4873/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== dependencies: follow-redirects "^1.10.0" @@ -1839,9 +1832,9 @@ babel-plugin-polyfill-corejs2@^0.2.2: semver "^6.1.1" babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== + version "0.2.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" + integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" @@ -1943,7 +1936,7 @@ binary-extensions@^2.0.0: bl@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1968,7 +1961,7 @@ body-parser@1.19.0, body-parser@^1.19.0: boxen@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: ansi-align "^3.0.0" @@ -2016,16 +2009,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.16.6, browserslist@^4.16.7: + version "4.16.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" + integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== dependencies: - caniuse-lite "^1.0.30001219" + caniuse-lite "^1.0.30001248" colorette "^1.2.2" - electron-to-chromium "^1.3.723" + electron-to-chromium "^1.3.793" escalade "^3.1.1" - node-releases "^1.1.71" + node-releases "^1.1.73" bser@2.1.1: version "2.1.1" @@ -2040,9 +2033,9 @@ buffer-equal-constant-time@1.0.1: integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-writer@2.0.0: version "2.0.0" @@ -2051,7 +2044,7 @@ buffer-writer@2.0.0: buffer@^5.5.0: version "5.7.1" - resolved "http://localhost:4873/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -2066,9 +2059,9 @@ buffer@^6.0.3: ieee754 "^1.2.1" bull@^3.12.1: - version "3.25.2" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.25.2.tgz#4d9c78f6e2b3ddc60e3005b44f3492345aa0d214" - integrity sha512-R9LWZaZaQyhuliYwMIytaopMQiq/mextyfwVVPDlZSvmpaxl3uWY31yos8glvBx2buf24q6eUs5tWy9NK1PSrA== + version "3.28.1" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.28.1.tgz#33bc7bbe640e71258a2a800935a692a24a2d7236" + integrity sha512-TasVWD1410Q8druRG6SIAN5hwAT3F4QICcGszReD859qAerq+VwbW3vPg6lV60reJkWyWBK11FHa2FsQ8iDBmQ== dependencies: cron-parser "^2.13.0" debuglog "^1.0.0" @@ -2140,10 +2133,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001219: - version "1.0.30001245" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" - integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== +caniuse-lite@^1.0.30001248: + version "1.0.30001251" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" + integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== capture-exit@^2.0.0: version "2.0.0" @@ -2154,7 +2147,7 @@ capture-exit@^2.0.0: cardinal@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" integrity sha1-fMEFXYItISlU0HsIXeolHMe8VQU= dependencies: ansicolors "~0.3.2" @@ -2180,17 +2173,9 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" - resolved "http://localhost:4873/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -2203,7 +2188,7 @@ char-regex@^1.0.2: chardet@^0.7.0: version "0.7.0" - resolved "http://localhost:4873/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^3.4.0, chokidar@^3.4.2: @@ -2228,7 +2213,7 @@ ci-info@^2.0.0: ci-info@^3.2.0: version "3.2.0" - resolved "http://localhost:4873/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== cjs-module-lexer@^0.6.0: @@ -2248,24 +2233,24 @@ class-utils@^0.3.5: clean-stack@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== dependencies: escape-string-regexp "4.0.0" cli-boxes@^2.2.1: version "2.2.1" - resolved "http://localhost:4873/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-cursor@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" -cli-highlight@^2.1.10: +cli-highlight@^2.1.11: version "2.1.11" resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== @@ -2279,7 +2264,7 @@ cli-highlight@^2.1.10: cli-progress@^3.4.0: version "3.9.0" - resolved "http://localhost:4873/cli-progress/-/cli-progress-3.9.0.tgz#25db83447deb812e62d05bac1af9aec5387ef3d4" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.9.0.tgz#25db83447deb812e62d05bac1af9aec5387ef3d4" integrity sha512-g7rLWfhAo/7pF+a/STFH/xPyosaL1zgADhI0OM83hl3c7S43iGvJWEAV2QuDOnQ8i6EMBj/u4+NTd0d5L+4JfA== dependencies: colors "^1.1.2" @@ -2287,12 +2272,12 @@ cli-progress@^3.4.0: cli-spinners@^2.5.0: version "2.6.0" - resolved "http://localhost:4873/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== cli-ux@^5.4.9: version "5.6.3" - resolved "http://localhost:4873/cli-ux/-/cli-ux-5.6.3.tgz#eecdb2e0261171f2b28f2be6b18c490291c3a287" + resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.3.tgz#eecdb2e0261171f2b28f2be6b18c490291c3a287" integrity sha512-/oDU4v8BiDjX2OKcSunGH0iGDiEtj2rZaGyqNuv9IT4CgcSMyVWAMfn0+rEHaOc4n9ka78B0wo1+N1QX89f7mw== dependencies: "@oclif/command" "^1.6.0" @@ -2324,7 +2309,7 @@ cli-ux@^5.4.9: cli-width@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^6.0.0: @@ -2356,7 +2341,7 @@ clone-deep@^4.0.1: clone@^1.0.2: version "1.0.4" - resolved "http://localhost:4873/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= cluster-key-slot@^1.1.0: @@ -2407,9 +2392,9 @@ color-name@^1.0.0, color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.5.2: - version "1.5.5" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== dependencies: color-name "^1.0.0" simple-swizzle "^0.2.2" @@ -2423,9 +2408,9 @@ color@3.0.x: color-string "^1.5.2" colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + version "1.3.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" + integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== colors@^1.1.2, colors@^1.2.1: version "1.4.0" @@ -2479,7 +2464,7 @@ concat-stream@^1.5.2: configstore@5.0.1: version "5.0.1" - resolved "http://localhost:4873/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: dot-prop "^5.2.0" @@ -2541,23 +2526,23 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.14.0, core-js-compat@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" - integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== +core-js-compat@^3.14.0, core-js-compat@^3.16.0: + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d" + integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ== dependencies: - browserslist "^4.16.6" + browserslist "^4.16.7" semver "7.0.0" core-js@^2.6.5: version "2.6.12" - resolved "http://localhost:4873/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.15.0, core-js@^3.6.5, core-js@^3.7.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" - integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== +core-js@^3.16.0, core-js@^3.6.5, core-js@^3.7.0: + version "3.16.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.1.tgz#f4485ce5c9f3c6a7cb18fa80488e08d362097249" + integrity sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw== core-util-is@~1.0.0: version "1.0.2" @@ -2602,7 +2587,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: crypto-random-string@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== cssom@^0.4.4: @@ -2647,7 +2632,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: debug@^3.1.0: version "3.2.7" - resolved "http://localhost:4873/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -2684,14 +2669,14 @@ deepmerge@^4.2.2: defaults@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" define-lazy-prop@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== define-properties@^1.1.3: @@ -2768,11 +2753,16 @@ diff-sequences@^26.6.2: dir-glob@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" +dom-walk@^0.1.0: + version "0.1.2" + resolved "http://localhost:4873/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -2782,7 +2772,7 @@ domexception@^2.0.1: dot-prop@^5.2.0: version "5.3.0" - resolved "http://localhost:4873/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" @@ -2804,10 +2794,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.723: - version "1.3.778" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.778.tgz#bf01048736c95b78f2988e88005e0ebb385942a4" - integrity sha512-Lw04qJaPtWdq0d7qKHJTgkam+FhFi3hm/scf1EyqJWdjO3ZIGUJhNmZJRXWb7yb/bRYXQyVGSpa9RqVpjjWMQw== +electron-to-chromium@^1.3.793: + version "1.3.807" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.807.tgz#c2eb803f4f094869b1a24151184ffbbdbf688b1f" + integrity sha512-p8uxxg2a23zRsvQ2uwA/OOI+O4BQxzaR7YKMIGGGQCpYmkFX2CVF5f0/hxLMV7yCr7nnJViCwHLhPfs52rIYCA== emittery@^0.7.1: version "0.7.2" @@ -2816,7 +2806,7 @@ emittery@^0.7.1: emoji-regex@^7.0.1: version "7.0.3" - resolved "http://localhost:4873/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: @@ -2849,9 +2839,9 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + version "1.18.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" + integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -2859,11 +2849,12 @@ es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.2: get-intrinsic "^1.1.1" has "^1.0.3" has-symbols "^1.0.2" + internal-slot "^1.0.3" is-callable "^1.2.3" is-negative-zero "^2.0.1" is-regex "^1.1.3" is-string "^1.0.6" - object-inspect "^1.10.3" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" @@ -2891,7 +2882,7 @@ escape-html@~1.0.3: escape-string-regexp@4.0.0: version "4.0.0" - resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: @@ -2943,7 +2934,7 @@ exec-sh@^0.3.2: execa@^0.10.0: version "0.10.0" - resolved "http://localhost:4873/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== dependencies: cross-spawn "^6.0.0" @@ -2984,7 +2975,7 @@ execa@^4.0.0: execa@^5.1.1: version "5.1.1" - resolved "http://localhost:4873/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -3094,7 +3085,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: external-editor@^3.0.3: version "3.1.0" - resolved "http://localhost:4873/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -3117,12 +3108,12 @@ extglob@^2.0.4: extract-stack@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" + resolved "https://registry.yarnpkg.com/extract-stack/-/extract-stack-2.0.0.tgz#11367bc865bfcd9bc0db3123e5edb57786f11f9b" integrity sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ== fast-glob@^3.1.1: version "3.2.7" - resolved "http://localhost:4873/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -3148,7 +3139,7 @@ fast-safe-stringify@^2.0.4: fastq@^1.6.0: version "1.11.1" - resolved "http://localhost:4873/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== dependencies: reusify "^1.0.4" @@ -3166,13 +3157,13 @@ fecha@^4.2.0: integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== figlet@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" - integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== figures@^3.0.0: version "3.2.0" - resolved "http://localhost:4873/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" @@ -3238,7 +3229,7 @@ fn.name@1.x.x: follow-redirects@^1.10.0: version "1.14.1" - resolved "http://localhost:4873/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== for-each@^0.3.3: @@ -3286,7 +3277,7 @@ fs-exists-cached@^1.0.0: fs-extra@^10.0.0: version "10.0.0" - resolved "http://localhost:4873/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== dependencies: graceful-fs "^4.2.0" @@ -3295,7 +3286,7 @@ fs-extra@^10.0.0: fs-extra@^8.1: version "8.1.0" - resolved "http://localhost:4873/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" @@ -3332,7 +3323,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -3353,7 +3344,7 @@ get-port@^5.1.1: get-stream@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-stream@^4.0.0: @@ -3372,7 +3363,7 @@ get-stream@^5.0.0: get-stream@^6.0.0: version "6.0.1" - resolved "http://localhost:4873/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-value@^2.0.3, get-value@^2.0.6: @@ -3399,6 +3390,14 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global@^4.4.0: + version "4.4.0" + resolved "http://localhost:4873/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3406,7 +3405,7 @@ globals@^11.1.0: globby@^11.0.1: version "11.0.4" - resolved "http://localhost:4873/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" @@ -3417,9 +3416,9 @@ globby@^11.0.1: slash "^3.0.0" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== growly@^1.3.0: version "1.3.0" @@ -3453,6 +3452,13 @@ has-symbols@^1.0.1, has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -3510,7 +3516,7 @@ hosted-git-info@^2.1.4: hosted-git-info@^4.0.2: version "4.0.2" - resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" @@ -3573,12 +3579,12 @@ human-signals@^1.1.1: human-signals@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== hyperlinker@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== iconv-lite@0.4.24, iconv-lite@^0.4.24: @@ -3595,7 +3601,7 @@ ieee754@^1.1.13, ieee754@^1.2.1: ignore@^5.1.4: version "5.1.8" - resolved "http://localhost:4873/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-local@^3.0.2: @@ -3613,7 +3619,7 @@ imurmurhash@^0.1.4: indent-string@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: @@ -3636,7 +3642,7 @@ inherits@2.0.3: inquirer@^8.0.0: version "8.1.2" - resolved "http://localhost:4873/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.2.tgz#65b204d2cd7fb63400edd925dfe428bafd422e3d" integrity sha512-DHLKJwLPNgkfwNmsuEUKSejJFbkv0FMO9SMiQbjI3n5NQuCrSIBqP66ggqyz2a6t2qEolKrMjhQ3+W/xXgUQ+Q== dependencies: ansi-escapes "^4.2.1" @@ -3654,16 +3660,26 @@ inquirer@^8.0.0: strip-ansi "^6.0.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + ioredis@^4.17.3, ioredis@^4.27.0: - version "4.27.6" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.27.6.tgz#a53d427d3fe75fbd10ed7ad150ce00559df8dcf8" - integrity sha512-6W3ZHMbpCa8ByMyC1LJGOi7P2WiOKP9B3resoZOVLDhi+6dDBOW+KNsRq3yI36Hmnb2sifCxHX+YSarTeXh48A== + version "4.27.7" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.27.7.tgz#11bf2947e23a0e8055931afa7c2da89fc48c8ff3" + integrity sha512-lqvFFmUyGIHlrNyDvBoakzy1+ioJzNyoP6CP97GWtdTjWq9IOAnv6l0HUTsqhvd/z9etGgtrDHZ4kWCMAwNkug== dependencies: cluster-key-slot "^1.1.0" debug "^4.3.1" denque "^1.1.0" lodash.defaults "^4.2.0" lodash.flatten "^4.4.0" + lodash.isarguments "^3.1.0" p-map "^2.1.0" redis-commands "1.7.0" redis-errors "^1.2.0" @@ -3700,9 +3716,11 @@ is-arrayish@^0.3.1: integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" @@ -3719,11 +3737,12 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@^1.1.5: version "1.1.6" @@ -3731,9 +3750,9 @@ is-buffer@^1.1.5: integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-ci@^2.0.0: version "2.0.0" @@ -3764,9 +3783,11 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" @@ -3805,7 +3826,7 @@ is-extendable@^1.0.1: is-extglob@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-extglob@^2.1.1: @@ -3815,7 +3836,7 @@ is-extglob@^2.1.1: is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: @@ -3830,7 +3851,7 @@ is-generator-fn@^2.0.0: is-glob@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" @@ -3844,12 +3865,12 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: is-interactive@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-invalid-path@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ= dependencies: is-glob "^2.0.0" @@ -3868,9 +3889,11 @@ is-negative-zero@^2.0.1: integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" @@ -3891,7 +3914,7 @@ is-number@^7.0.0: is-obj@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-plain-object@^2.0.3, is-plain-object@^2.0.4: @@ -3907,16 +3930,16 @@ is-potential-custom-element-name@^1.0.1: integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" + has-tostringtag "^1.0.0" is-retry-allowed@^1.1.0: version "1.2.0" - resolved "http://localhost:4873/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-stream@^1.1.0: @@ -3925,14 +3948,16 @@ is-stream@^1.1.0: integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" @@ -3948,12 +3973,12 @@ is-typedarray@^1.0.0: is-unicode-supported@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-valid-path@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8= dependencies: is-invalid-path "^0.1.0" @@ -4422,9 +4447,9 @@ joi-objectid@^3.0.1: integrity sha512-V/3hbTlGpvJ03Me6DJbdBI08hBTasFOmipsauOsxOSnsF1blxV537WTl1zPwbfcKle4AK0Ma4OPnzMH4LlvTpQ== joi@^17.3.0: - version "17.4.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.1.tgz#15d2f23c8cbe4d1baded2dd190c58f8dbe11cca0" - integrity sha512-gDPOwQ5sr+BUxXuPDGrC1pSNcVR/yGGcTI0aCnjYxZEa3za60K/iCQ+OFIkEHWZGVCUcUlXlFKvMmrlmxrG6UQ== + version "17.4.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" + integrity sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -4453,9 +4478,9 @@ js-yaml@^4.0.0: argparse "^2.0.1" jsdom@^16.4.0: - version "16.6.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.6.0.tgz#f79b3786682065492a3da6a60a4695da983805ac" - integrity sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg== + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: abab "^2.0.5" acorn "^8.2.4" @@ -4482,7 +4507,7 @@ jsdom@^16.4.0: whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^8.5.0" - ws "^7.4.5" + ws "^7.4.6" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -4509,14 +4534,14 @@ json5@^2.1.2: jsonfile@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "http://localhost:4873/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -4625,7 +4650,7 @@ locate-path@^5.0.0: lodash._reinterpolate@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= lodash.debounce@^4.0.8: @@ -4648,6 +4673,11 @@ lodash.includes@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= +lodash.isarguments@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" @@ -4680,7 +4710,7 @@ lodash.once@^4.0.0: lodash.template@^4.4.0: version "4.5.0" - resolved "http://localhost:4873/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== dependencies: lodash._reinterpolate "^3.0.0" @@ -4688,7 +4718,7 @@ lodash.template@^4.4.0: lodash.templatesettings@^4.0.0: version "4.2.0" - resolved "http://localhost:4873/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== dependencies: lodash._reinterpolate "^3.0.0" @@ -4700,7 +4730,7 @@ lodash@^4.17.11, lodash@^4.17.21, lodash@^4.7.0: log-symbols@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -4772,7 +4802,7 @@ math-random@^1.0.1: meant@^1.0.1: version "1.0.3" - resolved "http://localhost:4873/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== media-typer@0.3.0: @@ -4838,7 +4868,7 @@ merge-stream@^2.0.0: merge2@^1.3.0: version "1.4.1" - resolved "http://localhost:4873/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: @@ -4895,6 +4925,13 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +min-document@^2.19.0: + version "2.19.0" + resolved "http://localhost:4873/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -4915,7 +4952,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1: +mkdirp@^0.5.4: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -4971,14 +5008,14 @@ ms@^2.1.1: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multer@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" - integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== + version "1.4.3" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.3.tgz#4db352d6992e028ac0eacf7be45c6efd0264297b" + integrity sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg== dependencies: append-field "^1.0.0" busboy "^0.2.11" concat-stream "^1.5.2" - mkdirp "^0.5.1" + mkdirp "^0.5.4" object-assign "^4.1.1" on-finished "^2.3.0" type-is "^1.6.4" @@ -4986,7 +5023,7 @@ multer@^1.4.2: mute-stream@0.0.8: version "0.0.8" - resolved "http://localhost:4873/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mz@^2.4.0: @@ -5022,7 +5059,7 @@ natural-compare@^1.4.0: natural-orderby@^2.0.1: version "2.0.3" - resolved "http://localhost:4873/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== negotiator@0.6.2: @@ -5032,7 +5069,7 @@ negotiator@0.6.2: netrc-parser@^3.1.6: version "3.1.6" - resolved "http://localhost:4873/netrc-parser/-/netrc-parser-3.1.6.tgz#7243c9ec850b8e805b9bdc7eae7b1450d4a96e72" + resolved "https://registry.yarnpkg.com/netrc-parser/-/netrc-parser-3.1.6.tgz#7243c9ec850b8e805b9bdc7eae7b1450d4a96e72" integrity sha512-lY+fmkqSwntAAjfP63jB4z5p5WbuZwyMCD3pInT7dpHU/Gc6Vv90SAC6A0aNiqaRGHiuZFBtiwu+pu8W/Eyotw== dependencies: debug "^3.1.0" @@ -5081,10 +5118,10 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.1.73: + version "1.1.74" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" + integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== normalize-package-data@^2.5.0: version "2.5.0" @@ -5141,7 +5178,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.10.3: +object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== @@ -5153,7 +5190,7 @@ object-keys@^1.0.12, object-keys@^1.1.1: object-treeify@^1.1.4: version "1.1.33" - resolved "http://localhost:4873/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== object-visit@^1.0.0: @@ -5224,7 +5261,7 @@ onetime@^5.1.0, onetime@^5.1.2: open@^8.0.6: version "8.2.1" - resolved "http://localhost:4873/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af" + resolved "https://registry.yarnpkg.com/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af" integrity sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ== dependencies: define-lazy-prop "^2.0.0" @@ -5245,7 +5282,7 @@ optionator@^0.8.1: ora@^5.3.0, ora@^5.4.1: version "5.4.1" - resolved "http://localhost:4873/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -5260,7 +5297,7 @@ ora@^5.3.0, ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "http://localhost:4873/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-each-series@^2.1.0: @@ -5408,7 +5445,7 @@ passport@^0.4.0: password-prompt@^1.1.2: version "1.1.2" - resolved "http://localhost:4873/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== dependencies: ansi-escapes "^3.1.0" @@ -5451,7 +5488,7 @@ path-to-regexp@0.1.7: path-type@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pause@0.0.1: @@ -5466,7 +5503,7 @@ pg-connection-string@^2.5.0: pg-god@^1.0.11: version "1.0.11" - resolved "http://localhost:4873/pg-god/-/pg-god-1.0.11.tgz#5bc73a5ccb0fc5b439177462d9712ef4d1b83c9a" + resolved "https://registry.yarnpkg.com/pg-god/-/pg-god-1.0.11.tgz#5bc73a5ccb0fc5b439177462d9712ef4d1b83c9a" integrity sha512-bW14qUfEt3jDruac0Pq9O1Pi6vH5cgLKVx3l8IdBrJS7GX0wBS4b6rlfTrU8373MCAXauP6x8VkD0rNE3mTxCw== dependencies: "@oclif/command" "^1" @@ -5481,14 +5518,9 @@ pg-int8@1.0.1: resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.3.0.tgz#12d5c7f65ea18a6e99ca9811bd18129071e562fc" - integrity sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg== - pg-pool@^3.4.1: version "3.4.1" - resolved "http://localhost:4873/pg-pool/-/pg-pool-3.4.1.tgz#0e71ce2c67b442a5e862a9c182172c37eda71e9c" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.4.1.tgz#0e71ce2c67b442a5e862a9c182172c37eda71e9c" integrity sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ== pg-protocol@^1.5.0: @@ -5507,9 +5539,9 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.3.0: +pg@^8.3.0, pg@^8.5.1: version "8.7.1" - resolved "http://localhost:4873/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.1.tgz#9ea9d1ec225980c36f94e181d009ab9f4ce4c471" integrity sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA== dependencies: buffer-writer "2.0.0" @@ -5520,19 +5552,6 @@ pg@^8.3.0: pg-types "^2.1.0" pgpass "1.x" -pg@^8.5.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.6.0.tgz#e222296b0b079b280cce106ea991703335487db2" - integrity sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.3.0" - pg-protocol "^1.5.0" - pg-types "^2.1.0" - pgpass "1.x" - pgpass@1.x: version "1.0.4" resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" @@ -5618,6 +5637,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "http://localhost:4873/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + promise.prototype.finally@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" @@ -5658,7 +5682,7 @@ pump@^3.0.0: punycode@1.3.2: version "1.3.2" - resolved "http://localhost:4873/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^2.1.1: @@ -5673,12 +5697,12 @@ qs@6.7.0: querystring@0.2.0: version "0.2.0" - resolved "http://localhost:4873/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= queue-microtask@^1.2.2: version "1.2.3" - resolved "http://localhost:4873/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== random-bytes@~1.0.0: @@ -5784,7 +5808,7 @@ readdirp@~3.6.0: redeyed@~2.1.0: version "2.1.1" - resolved "http://localhost:4873/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" integrity sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs= dependencies: esprima "~4.0.0" @@ -5833,14 +5857,9 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-runtime@^0.13.5: +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: version "0.13.9" - resolved "http://localhost:4873/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-transform@^0.14.2: @@ -5889,7 +5908,7 @@ remove-trailing-separator@^1.0.1: remove-trailing-slash@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" + resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d" integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== repeat-element@^1.1.2: @@ -5946,7 +5965,7 @@ resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1: restore-cursor@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -5959,7 +5978,7 @@ ret@~0.1.10: reusify@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.0: @@ -5976,19 +5995,19 @@ rsvp@^4.8.4: run-async@^2.4.0: version "2.4.1" - resolved "http://localhost:4873/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "http://localhost:4873/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.2.0: version "7.3.0" - resolved "http://localhost:4873/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== dependencies: tslib "~2.1.0" @@ -6162,6 +6181,15 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -6280,9 +6308,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -6348,7 +6376,7 @@ string-length@^4.0.1: string-width@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" @@ -6356,7 +6384,7 @@ string-width@^2.1.1: string-width@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" @@ -6416,14 +6444,14 @@ strip-ansi@^3.0.0: strip-ansi@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-ansi@^5.1.0: version "5.2.0" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" @@ -6471,7 +6499,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: supports-color@^8.1.0: version "8.1.1" - resolved "http://localhost:4873/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -6532,12 +6560,12 @@ throat@^5.0.0: through@^2.3.6: version "2.3.8" - resolved "http://localhost:4873/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.33: version "0.0.33" - resolved "http://localhost:4873/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" @@ -6612,17 +6640,17 @@ triple-beam@^1.2.0, triple-beam@^1.3.0: tslib@^1, tslib@^1.9.3: version "1.14.1" - resolved "http://localhost:4873/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tslib@~2.1.0: version "2.1.0" - resolved "http://localhost:4873/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== type-check@~0.3.2: @@ -6639,7 +6667,7 @@ type-detect@4.0.8: type-fest@^0.20.2: version "0.20.2" - resolved "http://localhost:4873/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: @@ -6678,15 +6706,15 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typeorm@^0.2.31: - version "0.2.34" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.34.tgz#637b3cec2de54ee7f423012b813a2022c0aacc8b" - integrity sha512-FZAeEGGdSGq7uTH3FWRQq67JjKu0mgANsSZ04j3kvDYNgy9KwBl/6RFgMVgiSgjf7Rqd7NrhC2KxVT7I80qf7w== + version "0.2.37" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.37.tgz#1a5e59216077640694d27c04c99ed3f968d15dc8" + integrity sha512-7rkW0yCgFC24I5T0f3S/twmLSuccPh1SQmxET/oDWn2sSDVzbyWdnItSdKy27CdJGTlKHYtUVeOcMYw5LRsXVw== dependencies: "@sqltools/formatter" "^1.2.2" app-root-path "^3.0.0" buffer "^6.0.3" chalk "^4.1.0" - cli-highlight "^2.1.10" + cli-highlight "^2.1.11" debug "^4.3.1" dotenv "^8.2.0" glob "^7.1.6" @@ -6697,7 +6725,7 @@ typeorm@^0.2.31: tslib "^2.1.0" xml2js "^0.4.23" yargonaut "^1.1.4" - yargs "^16.2.0" + yargs "^17.0.1" zen-observable-ts "^1.0.0" uid-safe@~2.1.5: @@ -6757,7 +6785,7 @@ union-value@^1.0.0: unique-string@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" @@ -6769,7 +6797,7 @@ universalify@^0.1.0, universalify@^0.1.2: universalify@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0, unpipe@~1.0.0: @@ -6797,7 +6825,7 @@ urix@^0.1.0: url@^0.11.0: version "0.11.0" - resolved "http://localhost:4873/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" @@ -6886,7 +6914,7 @@ walker@^1.0.7, walker@~1.0.5: wcwidth@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" @@ -6954,7 +6982,7 @@ which@^2.0.1, which@^2.0.2: widest-line@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" @@ -6989,7 +7017,7 @@ word-wrap@~1.2.3: wrap-ansi@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-4.0.0.tgz#b3570d7c70156159a2d42be5cc942e957f7b1131" integrity sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg== dependencies: ansi-styles "^3.2.0" @@ -7029,14 +7057,14 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.4.5: +ws@^7.4.6: version "7.5.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== xdg-basedir@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^3.0.0: @@ -7121,7 +7149,7 @@ yargs@^15.3.1, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.0, yargs@^16.2.0: +yargs@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -7134,15 +7162,28 @@ yargs@^16.0.0, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -zen-observable-ts@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.0.0.tgz#30d1202b81d8ba4c489e3781e8ca09abf0075e70" - integrity sha512-KmWcbz+9kKUeAQ8btY8m1SsEFgBcp7h/Uf3V5quhan7ZWdjGsf0JcGLULQiwOZibbFWnHkYq8Nn2AZbJabovQg== +yargs@^17.0.1: + version "17.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" + integrity sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ== dependencies: - "@types/zen-observable" "^0.8.2" - zen-observable "^0.8.15" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" -zen-observable@^0.8.15: +zen-observable-ts@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable@0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js b/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js index 308c1d4edb..2cf02de38e 100644 --- a/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js +++ b/packages/medusa-fulfillment-webshipper/src/services/webshipper-fulfillment.js @@ -582,7 +582,10 @@ class WebshipperFulfillmentService extends FulfillmentService { } if (order) { - if (order.data.attributes.status !== "pending") { + if ( + order.data.attributes.status !== "pending" && + order.data.attributes.status !== "missing_rate" + ) { if (order.data.attributes.status === "cancelled") { return Promise.resolve(order) } diff --git a/packages/medusa-plugin-wishlist/yarn.lock b/packages/medusa-plugin-wishlist/yarn.lock index f9c400aabb..237ba56c39 100644 --- a/packages/medusa-plugin-wishlist/yarn.lock +++ b/packages/medusa-plugin-wishlist/yarn.lock @@ -953,18 +953,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@hapi/hoek@^9.0.0": - version "9.2.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.0.tgz#f3933a44e365864f4dad5db94158106d511e8131" - integrity sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1166,23 +1154,6 @@ readdirp "^2.2.1" upath "^1.1.1" -"@sideway/address@^4.1.0": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" - integrity sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" - integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -3144,11 +3115,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -3642,22 +3608,6 @@ jest@^25.5.2: import-local "^3.0.2" jest-cli "^25.5.4" -joi-objectid@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/joi-objectid/-/joi-objectid-3.0.1.tgz#63ace7860f8e1a993a28d40c40ffd8eff01a3668" - integrity sha512-V/3hbTlGpvJ03Me6DJbdBI08hBTasFOmipsauOsxOSnsF1blxV537WTl1zPwbfcKle4AK0Ma4OPnzMH4LlvTpQ== - -joi@^17.3.0: - version "17.4.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" - integrity sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.0" - "@sideway/formula" "^3.0.0" - "@sideway/pinpoint" "^2.0.0" - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3878,33 +3828,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medusa-core-utils@^1.1.20: - version "1.1.20" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.20.tgz#676c0dc863a206b80cc53299a984c532d07df65f" - integrity sha512-gf+/L5eeqHea3xgjwD7YZEzfUGlxbjfvaeiiGWi3Wfu0dLa+G1B4S0TsX+upR+oVeWPmk66VMqWC80h3e4csqw== - dependencies: - joi "^17.3.0" - joi-objectid "^3.0.1" - -medusa-test-utils@^1.1.23: - version "1.1.23" - resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.23.tgz#e8380df499979cd0b97a5bb87779662f4da9d722" - integrity sha512-okyUgB4t7bqDieE0XO+HkbVVemn6hE1tTAtF9PXRi2igmKmcnyW/Ljk3lqrKYVhjei4z3Z/b+K2b0oNwhopbGQ== - dependencies: - "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "^1.1.20" - randomatic "^3.1.1" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -4451,15 +4379,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -randomatic@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" diff --git a/packages/medusa-telemetry/package.json b/packages/medusa-telemetry/package.json index 0f6abb4c3b..c90671e741 100644 --- a/packages/medusa-telemetry/package.json +++ b/packages/medusa-telemetry/package.json @@ -16,7 +16,7 @@ "devDependencies": { "@babel/cli": "^7.14.3", "@babel/core": "^7.14.3", - "@babel/preset-typescript": "^7.13.0", + "@babel/preset-typescript": "^7.15.0", "babel-preset-medusa-package": "^1.1.13", "cross-env": "^5.2.1", "eslint": "^6.8.0", @@ -40,6 +40,7 @@ "boxen": "^5.0.1", "ci-info": "^3.2.0", "configstore": "5.0.1", + "global": "^4.4.0", "is-docker": "^2.2.1", "remove-trailing-slash": "^0.1.1", "uuid": "^8.3.2" diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-claim.js b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-claim.js new file mode 100644 index 0000000000..8d74d62504 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-claim.js @@ -0,0 +1,64 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { ClaimServiceMock } from "../../../../../services/__mocks__/claim" + +describe("POST /admin/orders/:id/claims/:claim_id/cancel", () => { + describe("successfully cancels a claim", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/claims/${IdMap.getId( + "test-claim" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls ClaimService cancel", () => { + expect(ClaimServiceMock.cancel).toHaveBeenCalledTimes(1) + expect(ClaimServiceMock.cancel).toHaveBeenCalledWith( + IdMap.getId("test-claim") + ) + }) + }) + + describe("Trying to cancel a claim unrelated to the order fails", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order2")}/claims/${IdMap.getId( + "test-claim" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-claim.js b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-claim.js new file mode 100644 index 0000000000..9e612909b1 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-claim.js @@ -0,0 +1,92 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { ClaimServiceMock } from "../../../../../services/__mocks__/claim" + +describe("POST /admin/orders/:id/claims/:claim_id/fulfillments/:fulfillment_id/cancel", () => { + describe("successfully cancels a fulfillment", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/claims/${IdMap.getId( + "test-claim" + )}/fulfillments/${IdMap.getId("claim-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls claimService cancelFulfillment", () => { + expect(ClaimServiceMock.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(ClaimServiceMock.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("claim-fulfillment") + ) + }) + }) + + describe("Trying to cancel a fulfillment unrelated to the claim fails", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/claims/${IdMap.getId( + "claim-fulfillment2" + )}/fulfillments/${IdMap.getId("claim-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) + + describe("Trying to cancel a fulfillment, where claim and order are unrelated", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order2")}/claims/${IdMap.getId( + "test-claim" + )}/fulfillments/${IdMap.getId("claim-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-swap.js b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-swap.js new file mode 100644 index 0000000000..797b1c1713 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment-swap.js @@ -0,0 +1,92 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { SwapServiceMock } from "../../../../../services/__mocks__/swap" + +describe("POST /admin/orders/:id/swaps/:swap_id/fulfillments/:fulfillment_id/cancel", () => { + describe("successfully cancels a fulfillment", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/swaps/${IdMap.getId( + "test-swap" + )}/fulfillments/${IdMap.getId("swap-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls SwapService cancelFulfillment", () => { + expect(SwapServiceMock.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(SwapServiceMock.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("swap-fulfillment") + ) + }) + }) + + describe("Trying to cancel a fulfillment unrelated to the swap fails", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/swaps/${IdMap.getId( + "swap-fulfillment2" + )}/fulfillments/${IdMap.getId("swap-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) + + describe("Trying to cancel a fulfillment, where swap and order are unrelated", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order2")}/swaps/${IdMap.getId( + "test-swap" + )}/fulfillments/${IdMap.getId("swap-fulfillment")}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment.js b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment.js new file mode 100644 index 0000000000..cfc27e1fc9 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-fulfillment.js @@ -0,0 +1,64 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { OrderServiceMock } from "../../../../../services/__mocks__/order" + +describe("POST /admin/orders/:id/fulfillments/:fulfillment_id/cancel", () => { + describe("successfully cancels a fulfillment", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/fulfillments/${IdMap.getId( + "order-fulfillment" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls OrderService cancelFulfillment", () => { + expect(OrderServiceMock.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(OrderServiceMock.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("order-fulfillment") + ) + }) + }) + + describe("Trying to cancel a fulfillment unrelated to the order fails", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order2")}/fulfillments/${IdMap.getId( + "order-fulfillment" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-swap.js b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-swap.js new file mode 100644 index 0000000000..72b5ec77fe --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/cancel-swap.js @@ -0,0 +1,64 @@ +import { IdMap } from "medusa-test-utils" +import { request } from "../../../../../helpers/test-request" +import { SwapServiceMock } from "../../../../../services/__mocks__/swap" + +describe("POST /admin/orders/:id/swaps/:swap_id/cancel", () => { + describe("successfully cancels a claim", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order")}/swaps/${IdMap.getId( + "test-swap" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls SwapService cancel", () => { + expect(SwapServiceMock.cancel).toHaveBeenCalledTimes(1) + expect(SwapServiceMock.cancel).toHaveBeenCalledWith( + IdMap.getId("test-swap") + ) + }) + }) + + describe("Trying to cancel a claim unrelated to the order fails", () => { + let subject + + beforeAll(async () => { + subject = await request( + "POST", + `/admin/orders/${IdMap.getId("test-order2")}/swaps/${IdMap.getId( + "test-swap" + )}/cancel`, + { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + } + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("returns error", () => { + expect(subject.status).toEqual(404) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js b/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js index 57cb1db7ea..4a00dbbd89 100644 --- a/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js +++ b/packages/medusa/src/api/routes/admin/orders/__tests__/get-order.js @@ -19,6 +19,7 @@ const defaultRelations = [ "gift_card_transactions", "claims", "claims.return_order", + "claims.return_order.shipping_method", "claims.shipping_methods", "claims.shipping_address", "claims.additional_items", diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-claim.js b/packages/medusa/src/api/routes/admin/orders/cancel-claim.js new file mode 100644 index 0000000000..880b6d5481 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/cancel-claim.js @@ -0,0 +1,51 @@ +import { MedusaError } from "medusa-core-utils" +import { defaultRelations, defaultFields } from "." + +/** + * @oas [post] /orders/{id}/claims/{claim_id}/cancel + * operationId: "PostOrdersClaimCancel" + * summary: "Cancels a Claim" + * description: "Cancels a Claim" + * parameters: + * - (path) id=* {string} The id of the Order. + * . (path) claim_id=* {string} The id of the Claim. + * tags: + * - Claim + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/claim" + */ +export default async (req, res) => { + const { id, claim_id } = req.params + + try { + const claimService = req.scope.resolve("claimService") + const orderService = req.scope.resolve("orderService") + + const claim = await claimService.retrieve(claim_id) + + if (claim.order_id !== id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no claim was found with the id: ${claim_id} related to order: ${id}` + ) + } + + await claimService.cancel(claim_id) + + const order = await orderService.retrieve(id, { + select: defaultFields, + relations: defaultRelations, + }) + + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js new file mode 100644 index 0000000000..5b04b3984c --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js @@ -0,0 +1,61 @@ +import { MedusaError } from "medusa-core-utils" +import { defaultRelations, defaultFields } from "." + +/** + * @oas [post] orders//{id}/claims/{claim_id}/fulfillments/{fulfillment_id}/cancel + * operationId: "PostOrdersClaimFulfillmentsCancel" + * summary: "Cancels a fulfilmment related to a Claim" + * description: "Registers a Fulfillment as canceled." + * parameters: + * - (path) id=* {string} The id of the Order which the Claim relates to. + * - (path) claim_id=* {string} The id of the Claim which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The id of the Fulfillment. + * tags: + * - Fulfillment + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * fulfillment: + * $ref: "#/components/schemas/fulfillment" + */ +export default async (req, res) => { + const { id, claim_id, fulfillment_id } = req.params + + try { + const fulfillmentService = req.scope.resolve("fulfillmentService") + const claimService = req.scope.resolve("claimService") + const orderService = req.scope.resolve("orderService") + + const fulfillment = await fulfillmentService.retrieve(fulfillment_id) + + if (fulfillment.claim_order_id !== claim_id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no fulfillment was found with the id: ${fulfillment_id} related to claim: ${claim_id}` + ) + } + + const claim = await claimService.retrieve(claim_id) + + if (claim.order_id !== id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no claim was found with the id: ${claim_id} related to order: ${id}` + ) + } + + await claimService.cancelFulfillment(fulfillment_id) + + const order = await orderService.retrieve(id, { + select: defaultFields, + relations: defaultRelations, + }) + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js new file mode 100644 index 0000000000..1f1be5fa1f --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js @@ -0,0 +1,62 @@ +import { MedusaError } from "medusa-core-utils" +import { defaultRelations, defaultFields } from "." + +/** + * @oas [post] /orders/{id}/swaps/{swap_id}/fulfillments/{fulfillment_id}/cancel + * operationId: "PostOrdersSwapFulfillmentsCancel" + * summary: "Cancels a fulfilmment related to a Swap" + * description: "Registers a Fulfillment as canceled." + * parameters: + * - (path) id=* {string} The id of the Order which the Swap relates to. + * - (path) swap_id=* {string} The id of the Swap which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The id of the Fulfillment. + * tags: + * - Fulfillment + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * fulfillment: + * $ref: "#/components/schemas/fulfillment" + */ +export default async (req, res) => { + const { id, swap_id, fulfillment_id } = req.params + + try { + const fulfillmentService = req.scope.resolve("fulfillmentService") + const swapService = req.scope.resolve("swapService") + const orderService = req.scope.resolve("orderService") + + const fulfillment = await fulfillmentService.retrieve(fulfillment_id) + + if (fulfillment.swap_id !== swap_id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no fulfillment was found with the id: ${fulfillment_id} related to swap: ${id}` + ) + } + + const swap = await swapService.retrieve(swap_id) + + if (swap.order_id !== id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no swap was found with the id: ${swap_id} related to order: ${id}` + ) + } + + await swapService.cancelFulfillment(fulfillment_id) + + const order = await orderService.retrieve(id, { + select: defaultFields, + relations: defaultRelations, + }) + + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js new file mode 100644 index 0000000000..dc5c32562a --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js @@ -0,0 +1,51 @@ +import { MedusaError } from "medusa-core-utils" +import { defaultRelations, defaultFields } from "." + +/** + * @oas [post] /orders/{id}/fulfillments/{fulfillment_id}/cancel + * operationId: "PostOrdersOrderFulfillmentsCancel" + * summary: "Cancels a fulfilmment" + * description: "Registers a Fulfillment as canceled." + * parameters: + * - (path) id=* {string} The id of the Order which the Fulfillment relates to. + * - (path) fulfillment_id=* {string} The id of the Fulfillment + * tags: + * - Fulfillment + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * fulfillment: + * $ref: "#/components/schemas/fulfillment" + */ +export default async (req, res) => { + const { id, fulfillment_id } = req.params + + try { + const fulfillmentService = req.scope.resolve("fulfillmentService") + const orderService = req.scope.resolve("orderService") + + const fulfillment = await fulfillmentService.retrieve(fulfillment_id) + + if (fulfillment.order_id !== id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no fulfillment was found with the id: ${fulfillment_id} related to order: ${id}` + ) + } + + await orderService.cancelFulfillment(fulfillment_id) + + const order = await orderService.retrieve(id, { + select: defaultFields, + relations: defaultRelations, + }) + + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-order.js b/packages/medusa/src/api/routes/admin/orders/cancel-order.js index 8501195208..be32b97f2c 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-order.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-order.js @@ -1,3 +1,5 @@ +import { defaultFields, defaultRelations } from "." + /** * @oas [post] /orders/{id}/cancel * operationId: "PostOrdersOrderCancel" @@ -22,11 +24,11 @@ export default async (req, res) => { try { const orderService = req.scope.resolve("orderService") - await orderService.cancel(id) const order = await orderService.retrieve(id, { - relations: ["region", "customer", "swaps"], + select: defaultFields, + relations: defaultRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-swap.js b/packages/medusa/src/api/routes/admin/orders/cancel-swap.js new file mode 100644 index 0000000000..4ff1a9c45d --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/cancel-swap.js @@ -0,0 +1,51 @@ +import { MedusaError } from "medusa-core-utils" +import { defaultRelations, defaultFields } from "." + +/** + * @oas [post] /orders/{id}/swaps/{swap_id}/cancel + * operationId: "PostOrdersSwapCancel" + * summary: "Cancels a Swap" + * description: "Cancels a Swap" + * parameters: + * - (path) id=* {string} The id of the Order. + * . (path) swap_id=* {string} The id of the Swap. + * tags: + * - Swap + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/swap" + */ +export default async (req, res) => { + const { id, swap_id } = req.params + + try { + const swapService = req.scope.resolve("swapService") + const orderService = req.scope.resolve("orderService") + + const swap = await swapService.retrieve(swap_id) + + if (swap.order_id !== id) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `no swap was found with the id: ${swap_id} related to order: ${id}` + ) + } + + await swapService.cancel(swap_id) + + const order = await orderService.retrieve(id, { + select: defaultFields, + relations: defaultRelations, + }) + + res.json({ order }) + } catch (error) { + throw error + } +} diff --git a/packages/medusa/src/api/routes/admin/orders/index.js b/packages/medusa/src/api/routes/admin/orders/index.js index 29ce86e109..0a6f64ddfe 100644 --- a/packages/medusa/src/api/routes/admin/orders/index.js +++ b/packages/medusa/src/api/routes/admin/orders/index.js @@ -62,6 +62,30 @@ export default app => { middlewares.wrap(require("./create-fulfillment").default) ) + /** + * Cancel a fulfillment related to an order. + */ + route.post( + "/:id/fulfillments/:fulfillment_id/cancel", + middlewares.wrap(require("./cancel-fulfillment").default) + ) + + /** + * Cancel a fulfillment related to a swap. + */ + route.post( + "/:id/swaps/:swap_id/fulfillments/:fulfillment_id/cancel", + middlewares.wrap(require("./cancel-fulfillment-swap").default) + ) + + /** + * Cancel a fulfillment related to a claim. + */ + route.post( + "/:id/claims/:claim_id/fulfillments/:fulfillment_id/cancel", + middlewares.wrap(require("./cancel-fulfillment-claim").default) + ) + /** * Create a shipment. */ @@ -104,6 +128,14 @@ export default app => { */ route.post("/:id/swaps", middlewares.wrap(require("./create-swap").default)) + /** + * Cancels a swap. + */ + route.post( + "/:id/swaps/:swap_id/cancel", + middlewares.wrap(require("./cancel-swap").default) + ) + /** * Receives the inventory to return from a swap */ @@ -141,6 +173,14 @@ export default app => { */ route.post("/:id/claims", middlewares.wrap(require("./create-claim").default)) + /** + * Cancels a claim + */ + route.post( + "/:id/claims/:claim_id/cancel", + middlewares.wrap(require("./cancel-claim").default) + ) + /** * Updates a claim */ @@ -193,6 +233,7 @@ export const defaultRelations = [ "gift_card_transactions", "claims", "claims.return_order", + "claims.return_order.shipping_method", "claims.shipping_methods", "claims.shipping_address", "claims.additional_items", diff --git a/packages/medusa/src/api/routes/admin/orders/request-return.js b/packages/medusa/src/api/routes/admin/orders/request-return.js index 1d3e0c0da0..4c477205f8 100644 --- a/packages/medusa/src/api/routes/admin/orders/request-return.js +++ b/packages/medusa/src/api/routes/admin/orders/request-return.js @@ -140,7 +140,7 @@ export default async (req, res) => { if (typeof value.refund !== "undefined" && value.refund < 0) { returnObj.refund_amount = 0 } else { - if (value.refund) { + if (value.refund >= 0) { returnObj.refund_amount = value.refund } } @@ -149,7 +149,10 @@ export default async (req, res) => { .withTransaction(manager) .retrieve(id) - const evaluatedNoNotification = value.no_notification !== undefined ? value.no_notification : order.no_notification + const evaluatedNoNotification = + value.no_notification !== undefined + ? value.no_notification + : order.no_notification returnObj.no_notification = evaluatedNoNotification const createdReturn = await returnService @@ -161,13 +164,13 @@ export default async (req, res) => { .withTransaction(manager) .fulfill(createdReturn.id) } - + await eventBus .withTransaction(manager) .emit("order.return_requested", { id, return_id: createdReturn.id, - no_notification: evaluatedNoNotification + no_notification: evaluatedNoNotification, }) return { diff --git a/packages/medusa/src/api/routes/admin/returns/cancel-return.js b/packages/medusa/src/api/routes/admin/returns/cancel-return.js new file mode 100644 index 0000000000..c80ad6ddfc --- /dev/null +++ b/packages/medusa/src/api/routes/admin/returns/cancel-return.js @@ -0,0 +1,50 @@ +import { result } from "lodash" +import { MedusaError, Validator } from "medusa-core-utils" +import { defaultFields, defaultRelations } from "../orders" + +/** + * @oas [post] /returns/{id}/cancel + * operationId: "PostReturnsReturnCancel" + * summary: "Cancel a Return" + * description: "Registers a Return as canceled." + * parameters: + * - (path) id=* {string} The id of the Return. + * tags: + * - Return + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * return: + * $ref: "#/components/schemas/order" + */ +export default async (req, res) => { + const { id } = req.params + + try { + const returnService = req.scope.resolve("returnService") + const orderService = req.scope.resolve("orderService") + + let result = await returnService.cancel(id) + + if (result.swap_id) { + const swapService = req.scope.resolve("swapService") + result = await swapService.retrieve(result.swap_id) + } else if (result.claim_order_id) { + const claimService = req.scope.resolve("claimService") + result = await claimService.retrieve(result.claim_order_id) + } + + const order = await orderService.retrieve(result.order_id, { + select: defaultFields, + relations: defaultRelations, + }) + + res.status(200).json({ order }) + } catch (err) { + throw err + } +} diff --git a/packages/medusa/src/api/routes/admin/returns/index.js b/packages/medusa/src/api/routes/admin/returns/index.js index 9de879b716..49db9ca7bb 100644 --- a/packages/medusa/src/api/routes/admin/returns/index.js +++ b/packages/medusa/src/api/routes/admin/returns/index.js @@ -16,5 +16,10 @@ export default app => { middlewares.wrap(require("./receive-return").default) ) + route.post( + "/:id/cancel", + middlewares.wrap(require("./cancel-return").default) + ) + return app } diff --git a/packages/medusa/src/api/routes/admin/returns/receive-return.js b/packages/medusa/src/api/routes/admin/returns/receive-return.js index 5baadcc5d6..3d4974d41e 100644 --- a/packages/medusa/src/api/routes/admin/returns/receive-return.js +++ b/packages/medusa/src/api/routes/admin/returns/receive-return.js @@ -1,7 +1,7 @@ import { MedusaError, Validator } from "medusa-core-utils" /** - * @oas [post] /returns/{id}receive + * @oas [post] /returns/{id}/receive * operationId: "PostReturnsReturnReceive" * summary: "Receive a Return" * description: "Registers a Return as received. Updates statuses on Orders and Swaps accordingly." diff --git a/packages/medusa/src/api/routes/admin/swaps/__tests__/get-swap.js b/packages/medusa/src/api/routes/admin/swaps/__tests__/get-swap.js index 34273ce7ac..e1f0fb673d 100644 --- a/packages/medusa/src/api/routes/admin/swaps/__tests__/get-swap.js +++ b/packages/medusa/src/api/routes/admin/swaps/__tests__/get-swap.js @@ -72,7 +72,7 @@ describe("GET /admin/swaps/:id", () => { it("returns swap", () => { expect(subject.status).toEqual(200) - expect(subject.body.swap.id).toEqual(IdMap.getId("test-swap")) + expect(subject.body.swap.id).toEqual("test-swap") }) }) }) diff --git a/packages/medusa/src/api/routes/store/carts/__tests__/complete-cart.js b/packages/medusa/src/api/routes/store/carts/__tests__/complete-cart.js index 80e98067b3..643940cd05 100644 --- a/packages/medusa/src/api/routes/store/carts/__tests__/complete-cart.js +++ b/packages/medusa/src/api/routes/store/carts/__tests__/complete-cart.js @@ -78,7 +78,7 @@ describe("POST /store/carts/:id", () => { }) it("returns the created order", () => { - expect(subject.body.data.id).toEqual(IdMap.getId("test-swap")) + expect(subject.body.data.id).toEqual("test-swap") }) }) diff --git a/packages/medusa/src/api/routes/store/swaps/index.js b/packages/medusa/src/api/routes/store/swaps/index.js index 605b967d20..165040294c 100644 --- a/packages/medusa/src/api/routes/store/swaps/index.js +++ b/packages/medusa/src/api/routes/store/swaps/index.js @@ -3,7 +3,7 @@ import middlewares from "../../../middlewares" const route = Router() -export default (app) => { +export default app => { app.use("/swaps", route) route.get( @@ -19,6 +19,7 @@ export const defaultRelations = [ "order", "additional_items", "return_order", + "return_order.shipping_method", "fulfillments", "payment", "shipping_address", diff --git a/packages/medusa/src/index.js b/packages/medusa/src/index.js index e9088f2917..effb629ac7 100644 --- a/packages/medusa/src/index.js +++ b/packages/medusa/src/index.js @@ -4,11 +4,13 @@ export { Cart } from "./models/cart" export { ClaimImage } from "./models/claim-image" export { ClaimItem } from "./models/claim-item" export { ClaimTag } from "./models/claim-tag" +export { ClaimOrder } from "./models/claim-order" export { Country } from "./models/country" export { Currency } from "./models/currency" export { Customer } from "./models/customer" export { DiscountRule } from "./models/discount-rule" export { Discount } from "./models/discount" +export { Fulfillment } from "./models/fulfillment" export { FulfillmentItem } from "./models/fulfillment-item" export { FulfillmentProvider } from "./models/fulfillment-provider" export { GiftCardTransaction } from "./models/gift-card-transaction" @@ -43,4 +45,3 @@ export { Swap } from "./models/swap" export { User } from "./models/user" export { DraftOrder } from "./models/draft-order" export { ReturnReason } from "./models/return-reason" - diff --git a/packages/medusa/src/migrations/1625560513367-ensure_cancellation_fields_exist.ts b/packages/medusa/src/migrations/1625560513367-ensure_cancellation_fields_exist.ts new file mode 100644 index 0000000000..7c1a0d0425 --- /dev/null +++ b/packages/medusa/src/migrations/1625560513367-ensure_cancellation_fields_exist.ts @@ -0,0 +1,48 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +export class ensureCancellationFieldsExist1625560513367 + implements MigrationInterface { + name = "ensureCancellationFieldsExist1625560513367" + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "swap" ADD "canceled_at" TIMESTAMP WITH TIME ZONE` + ) + await queryRunner.query( + `ALTER TYPE "return_status_enum" RENAME TO "return_status_enum_old"` + ) + await queryRunner.query( + `CREATE TYPE "return_status_enum" AS ENUM('requested', 'received', 'requires_action', 'canceled')` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" DROP DEFAULT` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" TYPE "return_status_enum" USING "status"::"text"::"return_status_enum"` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" SET DEFAULT 'requested'` + ) + await queryRunner.query(`DROP TYPE "return_status_enum_old"`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TYPE "return_status_enum_old" AS ENUM('requested', 'received', 'requires_action')` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" DROP DEFAULT` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" TYPE "return_status_enum_old" USING "status"::"text"::"return_status_enum_old"` + ) + await queryRunner.query( + `ALTER TABLE "return" ALTER COLUMN "status" SET DEFAULT 'requested'` + ) + await queryRunner.query(`DROP TYPE "return_status_enum"`) + await queryRunner.query( + `ALTER TYPE "return_status_enum_old" RENAME TO "return_status_enum"` + ) + await queryRunner.query(`ALTER TABLE "swap" DROP COLUMN "canceled_at"`) + } +} diff --git a/packages/medusa/src/models/claim-order.ts b/packages/medusa/src/models/claim-order.ts index 4a497f63c5..f16956d33d 100644 --- a/packages/medusa/src/models/claim-order.ts +++ b/packages/medusa/src/models/claim-order.ts @@ -218,6 +218,10 @@ export class ClaimOrder { * refund_amount: * description: "The amount that will be refunded in conjunction with the claim" * type: integer + * canceled_at: + * description: "The date with timezone at which the Swap was canceled." + * type: string + * format: date-time * created_at: * type: string * format: date-time diff --git a/packages/medusa/src/models/return.ts b/packages/medusa/src/models/return.ts index 400b3fc41f..7774938901 100644 --- a/packages/medusa/src/models/return.ts +++ b/packages/medusa/src/models/return.ts @@ -28,6 +28,7 @@ export enum ReturnStatus { REQUESTED = "requested", RECEIVED = "received", REQUIRES_ACTION = "requires_action", + CANCELED = "canceled", } @Entity() @@ -85,7 +86,7 @@ export class Return { @OneToOne( () => ShippingMethod, method => method.return_order, - { eager: true, cascade: true } + { cascade: true } ) shipping_method: ShippingMethod diff --git a/packages/medusa/src/models/swap.ts b/packages/medusa/src/models/swap.ts index 8672ae054d..9628c81732 100644 --- a/packages/medusa/src/models/swap.ts +++ b/packages/medusa/src/models/swap.ts @@ -131,6 +131,9 @@ export class Swap { @DeleteDateColumn({ type: resolveDbType("timestamptz") }) deleted_at: Date + @Column({ type: resolveDbType("timestamptz"), nullable: true }) + canceled_at: Date + @Column({ type: "boolean", nullable: true }) no_notification: Boolean @@ -228,6 +231,10 @@ export class Swap { * description: "The date with timezone at which the resource was last updated." * type: string * format: date-time + * canceled_at: + * description: "The date with timezone at which the Swap was canceled." + * type: string + * format: date-time * no_notification: * description: "If set to true, no notification will be sent related to this swap" * type: boolean diff --git a/packages/medusa/src/services/__mocks__/claim.js b/packages/medusa/src/services/__mocks__/claim.js new file mode 100644 index 0000000000..a378d1c71d --- /dev/null +++ b/packages/medusa/src/services/__mocks__/claim.js @@ -0,0 +1,23 @@ +import { IdMap } from "medusa-test-utils" +export const ClaimServiceMock = { + withTransaction: function() { + return this + }, + retrieve: jest.fn().mockImplementation(data => { + return Promise.resolve({ order_id: IdMap.getId("test-order") }) + }), + + cancel: jest.fn().mockImplementation(f => { + return Promise.resolve({ f }) + }), + + cancelFulfillment: jest.fn().mockImplementation(f => { + return Promise.resolve({ f }) + }), +} + +const mock = jest.fn().mockImplementation(() => { + return ClaimServiceMock +}) + +export default mock diff --git a/packages/medusa/src/services/__mocks__/fulfillment.js b/packages/medusa/src/services/__mocks__/fulfillment.js new file mode 100644 index 0000000000..b71eb79526 --- /dev/null +++ b/packages/medusa/src/services/__mocks__/fulfillment.js @@ -0,0 +1,26 @@ +import { IdMap } from "medusa-test-utils" + +export const FulfillmentServiceMock = { + withTransaction: function() { + return this + }, + retrieve: jest.fn().mockImplementation(data => { + switch (data) { + case IdMap.getId("order-fulfillment"): + return Promise.resolve({ order_id: IdMap.getId("test-order") }) + case IdMap.getId("swap-fulfillment"): + return Promise.resolve({ swap_id: IdMap.getId("test-swap") }) + case IdMap.getId("claim-fulfillment"): + return Promise.resolve({ claim_order_id: IdMap.getId("test-claim") }) + } + }), + cancelFulfillment: jest.fn().mockImplementation(data => { + return Promise.resolve({ order_id: IdMap.getId("test-order") }) + }), +} + +const mock = jest.fn().mockImplementation(() => { + return FulfillmentServiceMock +}) + +export default mock diff --git a/packages/medusa/src/services/__mocks__/order.js b/packages/medusa/src/services/__mocks__/order.js index 5779f64e3b..114298abf3 100644 --- a/packages/medusa/src/services/__mocks__/order.js +++ b/packages/medusa/src/services/__mocks__/order.js @@ -182,6 +182,11 @@ export const OrderServiceMock = { } return Promise.resolve(undefined) }), + + cancelFulfillment: jest.fn().mockImplementation(f => { + return Promise.resolve({ f }) + }), + archive: jest.fn().mockImplementation(order => { if (order === IdMap.getId("processed-order")) { orders.processedOrder.status = "archived" diff --git a/packages/medusa/src/services/__mocks__/swap.js b/packages/medusa/src/services/__mocks__/swap.js index 6234ddd04e..c99bddd1ee 100644 --- a/packages/medusa/src/services/__mocks__/swap.js +++ b/packages/medusa/src/services/__mocks__/swap.js @@ -11,6 +11,21 @@ export const SwapServiceMock = { return Promise.resolve() }), retrieve: jest.fn().mockImplementation(data => { + switch (data) { + case IdMap.getId("test-swap"): + return Promise.resolve({ + id: "test-swap", + order_id: IdMap.getId("test-order"), + }) + default: + return Promise.resolve({ id: "test-swap" }) + } + }), + cancel: jest.fn().mockImplementation(f => { + return Promise.resolve({ f }) + }), + + cancelFulfillment: jest.fn().mockImplementation(f => { return Promise.resolve({ id: IdMap.getId("test-swap") }) }), list: jest.fn().mockImplementation((...args) => { diff --git a/packages/medusa/src/services/__tests__/claim.js b/packages/medusa/src/services/__tests__/claim.js index ab0585a39a..5385b14599 100644 --- a/packages/medusa/src/services/__tests__/claim.js +++ b/packages/medusa/src/services/__tests__/claim.js @@ -1,4 +1,3 @@ -import _ from "lodash" import { IdMap, MockRepository, MockManager } from "medusa-test-utils" import ClaimService from "../claim" import { InventoryServiceMock } from "../__mocks__/inventory" @@ -68,6 +67,7 @@ describe("ClaimService", () => { const lineItemService = { generate: jest.fn((d, _, q) => ({ variant_id: d, quantity: q })), + retrieve: () => Promise.resolve({}), withTransaction: function() { withTransactionMock("lineItem") return this @@ -338,6 +338,7 @@ describe("ClaimService", () => { const lineItemService = { update: jest.fn(), + retrieve: () => Promise.resolve({}), withTransaction: function() { withTransactionMock("lineItem") return this @@ -407,6 +408,16 @@ describe("ClaimService", () => { ).rejects.toThrow(`Cannot fulfill a claim without a shipping method.`) }) + it("fails if claim is canceled", async () => { + claimRepo.setFindOne(() => + Promise.resolve({ ...claim, canceled_at: new Date() }) + ) + + await expect( + claimService.createFulfillment("claim_id", {}) + ).rejects.toThrow("Canceled claim cannot be fulfilled") + }) + it("fails if already fulfilled", async () => { claimRepo.setFindOne(() => Promise.resolve({ ...claim, fulfillment_status: "fulfilled" }) @@ -426,6 +437,76 @@ describe("ClaimService", () => { }) }) + describe("cancelFulfillment", () => { + const claimRepo = MockRepository({ + findOne: () => Promise.resolve({}), + save: f => Promise.resolve(f), + }) + + const fulfillmentService = { + cancelFulfillment: jest.fn().mockImplementation(f => { + switch (f) { + case IdMap.getId("no-claim"): + return Promise.resolve({}) + default: + return Promise.resolve({ + claim_order_id: IdMap.getId("claim-id"), + }) + } + }), + withTransaction: function() { + return this + }, + } + + const claimService = new ClaimService({ + manager: MockManager, + claimRepository: claimRepo, + fulfillmentService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully cancels fulfillment and corrects claim status", async () => { + await claimService.cancelFulfillment(IdMap.getId("claim")) + + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("claim") + ) + + expect(claimRepo.save).toHaveBeenCalledTimes(1) + expect(claimRepo.save).toHaveBeenCalledWith({ + fulfillment_status: "canceled", + }) + }) + + it("fails to cancel fulfillment when not related to a claim", async () => { + await expect( + claimService.cancelFulfillment(IdMap.getId("no-claim")) + ).rejects.toThrow(`Fufillment not related to a claim`) + }) + }) + + describe("processRefund", () => { + const claimRepo = MockRepository({ + findOne: () => Promise.resolve({ canceled_at: new Date() }), + }) + + const claimService = new ClaimService({ + manager: MockManager, + claimRepository: claimRepo, + }) + + it("fails when claim is canceled", async () => { + await expect( + claimService.processRefund(IdMap.getId("claim-id")) + ).rejects.toThrow("Canceled claim cannot be processed") + }) + }) + describe("createShipment", () => { const fulfillmentService = { createShipment: jest.fn(() => { @@ -446,6 +527,7 @@ describe("ClaimService", () => { const lineItemService = { update: jest.fn(), + retrieve: () => Promise.resolve({}), withTransaction: function() { withTransactionMock("lineItem") return this @@ -507,6 +589,35 @@ describe("ClaimService", () => { shipped_quantity: 1, }) }) + + it("fails if claim is canceled", async () => { + claimRepo.setFindOne(() => Promise.resolve({ canceled_at: new Date() })) + + await expect( + claimService.createShipment("claim", "ful_123", ["track1234"], {}) + ).rejects.toThrow("Canceled claim cannot be fulfilled as shipped") + }) + }) + + describe("update", () => { + const claimRepo = MockRepository({ + findOne: () => Promise.resolve({ canceled_at: new Date() }), + }) + + const claimService = new ClaimService({ + manager: MockManager, + claimRepository: claimRepo, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("fails when claim is canceled", async () => { + await expect( + claimService.update(IdMap.getId("claim-id")) + ).rejects.toThrow("Canceled claim cannot be updated") + }) }) describe("cancel", () => { @@ -526,7 +637,31 @@ describe("ClaimService", () => { }, } - const claimRepo = MockRepository() + const now = new Date() + const ret_order = { id: "ret", status: "canceled" } + const fulfillment = { id: "ful_21", canceled_at: now } + + const claimRepo = MockRepository({ + findOne: q => { + const claim = { + return_order: { ...ret_order }, + fulfillments: [{ ...fulfillment }], + } + switch (q.where.id) { + case IdMap.getId("fail-fulfillment"): + claim.fulfillments[0].canceled_at = undefined + return Promise.resolve(claim) + case IdMap.getId("fail-return"): + claim.return_order.status = "requested" + return Promise.resolve(claim) + case IdMap.getId("fail-refund"): + claim.refund_amount = 123 + return Promise.resolve(claim) + default: + return Promise.resolve(claim) + } + }, + }) const claimService = new ClaimService({ manager: MockManager, @@ -540,62 +675,26 @@ describe("ClaimService", () => { jest.clearAllMocks() }) - it("calls fulfillment service", async () => { - claimRepo.setFindOne(() => - Promise.resolve({ - return_order: { - id: "ret", - status: "requested", - }, - fulfillments: [ - { - id: "ful_21", - }, - ], - }) - ) - - await claimService.cancel("claim") - - expect(withTransactionMock).toHaveBeenCalledTimes(3) - expect(withTransactionMock).toHaveBeenCalledWith("fulfillment") - expect(withTransactionMock).toHaveBeenCalledWith("return") - expect(withTransactionMock).toHaveBeenCalledWith("eventBus") - - expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledTimes(1) - expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledWith({ - id: "ful_21", - }) - - expect(returnService.cancel).toHaveBeenCalledTimes(1) - expect(returnService.cancel).toHaveBeenCalledWith("ret") - }) - - it("fails if fulfillment is shipped", async () => { - claimRepo.setFindOne(() => - Promise.resolve({ - fulfillment_status: "shipped", - }) - ) - - await expect(claimService.cancel("id")).rejects.toThrow( - "Cannot cancel a claim that has been shipped." + it("fails if fulfillment isn't canceled", async () => { + await expect( + claimService.cancel(IdMap.getId("fail-fulfillment")) + ).rejects.toThrow( + "All fulfillments must be canceled before the claim can be canceled" ) }) - it("fails if return is received", async () => { - claimRepo.setFindOne(() => - Promise.resolve({ - return_order: { - id: "ret", - status: "received", - }, - }) + it("fails if return isn't canceled", async () => { + await expect( + claimService.cancel(IdMap.getId("fail-return")) + ).rejects.toThrow( + "Return must be canceled before the claim can be canceled" ) + }) - await expect(claimService.cancel("id")).rejects.toThrow( - "Cannot cancel a claim that has a received return." - ) + it("fails if associated with a refund", async () => { + await expect( + claimService.cancel(IdMap.getId("fail-refund")) + ).rejects.toThrow("Claim with a refund cannot be canceled") }) }) }) diff --git a/packages/medusa/src/services/__tests__/fulfillment.js b/packages/medusa/src/services/__tests__/fulfillment.js index 2c178ad705..2a4f465a37 100644 --- a/packages/medusa/src/services/__tests__/fulfillment.js +++ b/packages/medusa/src/services/__tests__/fulfillment.js @@ -94,10 +94,72 @@ describe("FulfillmentService", () => { }) }) + describe("cancelFulfillment", () => { + const fulfillmentRepository = MockRepository({ + findOne: () => + Promise.resolve({ + canceled_at: new Date(), + items: [{ item_id: 1, quantity: 2 }], + }), + save: f => f, + }) + + const lineItemService = { + retrieve: jest + .fn() + .mockImplementation(() => + Promise.resolve({ id: 1, fulfilled_quantity: 2 }) + ), + update: jest.fn(), + withTransaction: function() { + return this + }, + } + + const fulfillmentProviderService = { + cancelFulfillment: f => f, + } + + const fulfillmentService = new FulfillmentService({ + manager: MockManager, + fulfillmentProviderService, + fulfillmentRepository, + lineItemService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("correctly cancels fulfillment", async () => { + await fulfillmentService.cancelFulfillment(IdMap.getId("fulfillment")) + + expect(fulfillmentRepository.save).toHaveBeenCalledTimes(1) + expect(fulfillmentRepository.save).toHaveBeenCalledWith({ + canceled_at: expect.any(Date), + items: expect.any(Array), + }) + + expect(lineItemService.retrieve).toHaveBeenCalledTimes(1) + expect(lineItemService.retrieve).toHaveBeenCalledWith(1) + expect(lineItemService.update).toHaveBeenCalledTimes(1) + expect(lineItemService.update).toHaveBeenCalledWith(1, { + fulfilled_quantity: 0, + }) + }) + }) + describe("createShipment", () => { const trackingLinkRepository = MockRepository({ create: c => c }) const fulfillmentRepository = MockRepository({ - findOne: () => Promise.resolve({ id: IdMap.getId("fulfillment") }), + findOne: q => { + switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ canceled_at: new Date() }) + default: + return Promise.resolve({ id: IdMap.getId("fulfillment") }) + } + }, }) const fulfillmentService = new FulfillmentService({ @@ -130,5 +192,15 @@ describe("FulfillmentService", () => { shipped_at: now, }) }) + + it("fails when status is canceled", async () => { + await expect( + fulfillmentService.createShipment( + IdMap.getId("canceled"), + [({ tracking_number: "1234" }, { tracking_number: "2345" })], + {} + ) + ).rejects.toThrow("Fulfillment has been canceled") + }) }) }) diff --git a/packages/medusa/src/services/__tests__/order.js b/packages/medusa/src/services/__tests__/order.js index c13df7cbc9..5da04f644e 100644 --- a/packages/medusa/src/services/__tests__/order.js +++ b/packages/medusa/src/services/__tests__/order.js @@ -524,6 +524,10 @@ describe("OrderService", () => { payment_status: "awaiting", status: "pending", }) + case IdMap.getId("canceled-order"): + return Promise.resolve({ + status: "canceled", + }) default: return Promise.resolve({ fulfillment_status: "not_fulfilled", @@ -593,9 +597,17 @@ describe("OrderService", () => { "Can't update shipping, billing, items and payment method when order is processed" ) }) + + it("throws if order is canceled", async () => { + await expect( + orderService.update(IdMap.getId("canceled-order"), {}) + ).rejects.toThrow("A canceled order cannot be updated") + }) }) describe("cancel", () => { + const now = new Date() + const orderRepo = MockRepository({ findOneWithRelations: (rel, q) => { switch (q.where.id) { @@ -610,7 +622,7 @@ describe("OrderService", () => { fulfillment_status: "not_fulfilled", payment_status: "awaiting", status: "pending", - fulfillments: [{ id: "fulfillment_test" }], + fulfillments: [{ id: "fulfillment_test", canceled_at: now }], payments: [{ id: "payment_test" }], items: [ { id: "item_1", variant_id: "variant-1", quantity: 12 }, @@ -665,11 +677,6 @@ describe("OrderService", () => { id: "payment_test", }) - expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledTimes(1) - expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledWith({ - id: "fulfillment_test", - }) - expect(inventoryService.adjustInventory).toHaveBeenCalledTimes(2) expect(inventoryService.adjustInventory).toHaveBeenCalledWith( "variant-1", @@ -685,7 +692,7 @@ describe("OrderService", () => { fulfillment_status: "canceled", payment_status: "canceled", status: "canceled", - fulfillments: [{ id: "fulfillment_test" }], + fulfillments: [{ id: "fulfillment_test", canceled_at: now }], payments: [{ id: "payment_test" }], items: [ { @@ -701,12 +708,6 @@ describe("OrderService", () => { ], }) }) - - it("throws if order payment is captured", async () => { - await expect( - orderService.cancel(IdMap.getId("paid-order")) - ).rejects.toThrow("Can't cancel an order with a processed payment") - }) }) describe("capturePayment", () => { @@ -718,7 +719,8 @@ describe("OrderService", () => { payment_status: "awaiting", payments: [{ id: "payment_fail", captured_at: null }], }) - + case IdMap.getId("canceled"): + return Promise.resolve({ status: "canceled" }) default: return Promise.resolve({ fulfillment_status: "not_fulfilled", @@ -790,6 +792,12 @@ describe("OrderService", () => { payments: [{ id: "payment_fail", captured_at: null }], }) }) + + it("fails if order is canceled", async () => { + await expect( + orderService.capturePayment(IdMap.getId("canceled")) + ).rejects.toThrow("A canceled order cannot capture payment") + }) }) describe("createFulfillment", () => { @@ -828,6 +836,8 @@ describe("OrderService", () => { switch (q.where.id) { case "partial": return Promise.resolve(partialOrder) + case "canceled": + return Promise.resolve({ status: "canceled", ...order }) default: return Promise.resolve(order) } @@ -963,6 +973,16 @@ describe("OrderService", () => { }) }) + it("fails if order is canceled", async () => { + await expect( + orderService.createFulfillment("canceled", [ + { + item_id: "item_1", + quantity: 1, + }, + ]) + ).rejects.toThrow("A canceled order cannot be fulfilled") + }) it.each([ [true, true], [false, false], @@ -989,6 +1009,60 @@ describe("OrderService", () => { ) }) + describe("cancelFulfillment", () => { + const orderRepo = MockRepository({ + findOneWithRelations: () => Promise.resolve({}), + save: f => Promise.resolve(f), + }) + + const fulfillmentService = { + cancelFulfillment: jest.fn().mockImplementation(f => { + switch (f) { + case IdMap.getId("no-order"): + return Promise.resolve({}) + default: + return Promise.resolve({ + order_id: IdMap.getId("order-id"), + }) + } + }), + withTransaction: function() { + return this + }, + } + + const orderService = new OrderService({ + manager: MockManager, + orderRepository: orderRepo, + fulfillmentService, + eventBusService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully cancels fulfillment and corrects order status", async () => { + await orderService.cancelFulfillment(IdMap.getId("order")) + + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("order") + ) + + expect(orderRepo.save).toHaveBeenCalledTimes(1) + expect(orderRepo.save).toHaveBeenCalledWith({ + fulfillment_status: "canceled", + }) + }) + + it("fails to cancel fulfillment when not related to an order", async () => { + await expect( + orderService.cancelFulfillment(IdMap.getId("no-order")) + ).rejects.toThrow(`Fufillment not related to an order`) + }) + }) + describe("registerReturnReceived", () => { const order = { items: [ @@ -1007,6 +1081,8 @@ describe("OrderService", () => { const orderRepo = MockRepository({ findOneWithRelations: (rel, q) => { switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ status: "canceled", ...order }) default: return Promise.resolve(order) } @@ -1077,6 +1153,179 @@ describe("OrderService", () => { "return" ) }) + + it("fails when order is canceled", async () => { + await expect( + orderService.registerReturnReceived(IdMap.getId("canceled"), {}) + ).rejects.toThrow("A canceled order cannot be registered as received") + }) + }) + + describe("completeOrder", () => { + const orderRepo = MockRepository({ + findOneWithRelations: (rel, q) => { + switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ status: "canceled" }) + default: + return Promise.resolve({ id: IdMap.getId("order") }) + } + }, + save: jest.fn().mockImplementation(f => f), + }) + + const eventBus = { + emit: () => + Promise.resolve({ + finished: () => Promise.resolve({}), + }), + } + + const orderService = new OrderService({ + manager: MockManager, + orderRepository: orderRepo, + eventBusService: eventBus, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully creates order", async () => { + await orderService.completeOrder(IdMap.getId("order")) + + expect(orderRepo.save).toHaveBeenCalledTimes(1) + expect(orderRepo.save).toHaveBeenCalledWith({ + id: IdMap.getId("order"), + status: "completed", + }) + }) + + it("fails when order is canceled", async () => { + await expect( + orderService.completeOrder(IdMap.getId("canceled")) + ).rejects.toThrow("A canceled order cannot be completed") + }) + }) + + describe("addShippingMethod", () => { + const orderRepo = MockRepository({ + findOneWithRelations: (rel, q) => { + switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ status: "canceled" }) + default: + return Promise.resolve({ + id: IdMap.getId("order"), + shipping_methods: [ + { shipping_option: { profile_id: IdMap.getId("method1") } }, + ], + }) + } + }, + save: jest.fn().mockImplementation(f => f), + }) + + const optionService = { + createShippingMethod: jest + .fn() + .mockImplementation((optionId, data, config) => + Promise.resolve({ shipping_option: { profile_id: optionId } }) + ), + deleteShippingMethod: jest + .fn() + .mockImplementation(() => Promise.resolve({})), + + withTransaction: function() { + return this + }, + } + + const orderService = new OrderService({ + manager: MockManager, + orderRepository: orderRepo, + eventBusService: eventBusService, + shippingOptionService: optionService, + totalsService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully adds shipping method", async () => { + await orderService.addShippingMethod( + IdMap.getId("order"), + IdMap.getId("option"), + { some: "data" }, + {} + ) + + expect(optionService.createShippingMethod).toHaveBeenCalledTimes(1) + expect(optionService.createShippingMethod).toHaveBeenCalledWith( + IdMap.getId("option"), + { some: "data" }, + { + order: { + id: IdMap.getId("order"), + shipping_methods: [ + { + shipping_option: { + profile_id: IdMap.getId("method1"), + }, + }, + ], + subtotal: 0, + }, + } + ) + + expect(optionService.deleteShippingMethod).not.toHaveBeenCalled() + }) + + it("successfully removes shipping method if same option profile", async () => { + await orderService.addShippingMethod( + IdMap.getId("order"), + IdMap.getId("method1"), + { some: "data" } + ) + + expect(optionService.createShippingMethod).toHaveBeenCalledTimes(1) + expect(optionService.createShippingMethod).toHaveBeenCalledWith( + IdMap.getId("method1"), + { some: "data" }, + { + order: { + id: IdMap.getId("order"), + shipping_methods: [ + { + shipping_option: { + profile_id: IdMap.getId("method1"), + }, + }, + ], + subtotal: 0, + }, + } + ) + + expect(optionService.deleteShippingMethod).toHaveBeenCalledTimes(1) + expect(optionService.deleteShippingMethod).toHaveBeenCalledWith({ + shipping_option: { + profile_id: IdMap.getId("method1"), + }, + }) + }) + + it("fails if order is canceled", async () => { + await expect( + orderService.addShippingMethod( + IdMap.getId("canceled"), + IdMap.getId("option"), + { some: "data" } + ) + ).rejects.toThrow("A shipping method cannot be added to a canceled order") + }) }) describe("createShipment", () => { @@ -1111,6 +1360,8 @@ describe("OrderService", () => { switch (q.where.id) { case IdMap.getId("partial"): return Promise.resolve(partialOrder) + case IdMap.getId("canceled"): + return Promise.resolve({ status: "canceled" }) default: return Promise.resolve(order) } @@ -1184,6 +1435,18 @@ describe("OrderService", () => { }) }) + it("fails when order is canceled", async () => { + await expect( + orderService.createShipment( + IdMap.getId( + "canceled", + IdMap.getId("fulfillment"), + [{ tracking_number: "1234" }], + {} + ) + ) + ).rejects.toThrow("A canceled order cannot be fulfilled as shipped") + }) it.each([ [true, true], [false, false], @@ -1213,32 +1476,37 @@ describe("OrderService", () => { const orderRepo = MockRepository({ findOneWithRelations: (rel, q) => { - if (q.where.id === IdMap.getId("cannot")) { - return Promise.resolve({ - id: IdMap.getId("order"), - payments: [ - { - id: "payment", - }, - ], - total: 100, - refunded_total: 100, - }) + switch (q.where.id) { + case IdMap.getId("cannot"): + return Promise.resolve({ + id: IdMap.getId("order"), + payments: [ + { + id: "payment", + }, + ], + total: 100, + refunded_total: 100, + }) + case IdMap.getId("canceled"): + return Promise.resolve({ + status: "canceled", + }) + default: + return Promise.resolve({ + id: IdMap.getId("order_123"), + payments: [ + { + id: "payment", + }, + ], + total: 100, + paid_total: 100, + refundable_amount: 100, + refunded_total: 0, + no_notification: true, + }) } - - return Promise.resolve({ - id: IdMap.getId("order_123"), - payments: [ - { - id: "payment", - }, - ], - total: 100, - paid_total: 100, - refundable_amount: 100, - refunded_total: 0, - no_notification: true, - }) }, }) @@ -1286,6 +1554,16 @@ describe("OrderService", () => { ) ).rejects.toThrow("Cannot refund more than the original order amount") }) + it("fails when order is canceled", async () => { + await expect( + orderService.createRefund( + IdMap.getId("canceled"), + 100, + "discount", + "note" + ) + ).rejects.toThrow("A canceled order cannot be refunded") + }) it.each([ [false, false], diff --git a/packages/medusa/src/services/__tests__/return.js b/packages/medusa/src/services/__tests__/return.js index 8ebe7b9605..c0bd389baa 100644 --- a/packages/medusa/src/services/__tests__/return.js +++ b/packages/medusa/src/services/__tests__/return.js @@ -145,39 +145,45 @@ describe("ReturnService", () => { describe("receive", () => { const returnRepository = MockRepository({ findOne: query => { - if (query.where.id === IdMap.getId("test-return-2")) { - return Promise.resolve({ - id: IdMap.getId("test-return-2"), - status: "requested", - order: { - id: IdMap.getId("test-order"), - items: [ - { id: IdMap.getId("test-line"), quantity: 10 }, - { id: IdMap.getId("test-line-2"), quantity: 10 }, - ], - }, - items: [ - { - item_id: IdMap.getId("test-line"), - quantity: 10, + switch (query.where.id) { + case IdMap.getId("test-return-2"): + return Promise.resolve({ + id: IdMap.getId("test-return-2"), + status: "requested", + order: { + id: IdMap.getId("test-order"), + items: [ + { id: IdMap.getId("test-line"), quantity: 10 }, + { id: IdMap.getId("test-line-2"), quantity: 10 }, + ], }, - ], - }) + items: [ + { + item_id: IdMap.getId("test-line"), + quantity: 10, + }, + ], + }) + case IdMap.getId("test-return-3"): + return Promise.resolve({ + status: "canceled", + }) + default: + return Promise.resolve({ + id: IdMap.getId("test-return"), + status: "requested", + order: { + id: IdMap.getId("test-order"), + items: [{ id: IdMap.getId("test-line"), quantity: 10 }], + }, + items: [ + { + item_id: IdMap.getId("test-line"), + quantity: 10, + }, + ], + }) } - return Promise.resolve({ - id: IdMap.getId("test-return"), - status: "requested", - order: { - id: IdMap.getId("test-order"), - items: [{ id: IdMap.getId("test-line"), quantity: 10 }], - }, - items: [ - { - item_id: IdMap.getId("test-line"), - quantity: 10, - }, - ], - }) }, }) @@ -349,5 +355,121 @@ describe("ReturnService", () => { received_at: expect.anything(), }) }) + + it("fails to receive a return which has been canceled", async () => { + await expect( + returnService.receive(IdMap.getId("test-return-3"), [ + { item_id: IdMap.getId("test-line"), quantity: 10 }, + { item_id: IdMap.getId("test-line-2"), quantity: 10 }, + ]) + ).rejects.toThrow("Cannot receive a canceled return") + }) + }) + + describe("canceled", () => { + const returnRepository = MockRepository({ + findOne: query => { + switch (query.where.id) { + case IdMap.getId("test-return"): + return Promise.resolve({ + status: "pending", + refund_amount: 0, + }) + case IdMap.getId("test-return-2"): + return Promise.resolve({ + status: "received", + refund_amount: 0, + }) + default: + return Promise.resolve({}) + } + }, + save: f => f, + }) + + const returnService = new ReturnService({ + manager: MockManager, + returnRepository, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully cancels return", async () => { + await returnService.cancel(IdMap.getId("test-return")) + + expect(returnRepository.save).toHaveBeenCalledTimes(1) + expect(returnRepository.save).toHaveBeenCalledWith({ + status: "canceled", + refund_amount: 0, + }) + }) + + it("fails to cancel return when already received", async () => { + await expect( + returnService.cancel(IdMap.getId("test-return-2")) + ).rejects.toThrow("Can't cancel a return which has been returned") + }) + }) + + describe("fulfilled", () => { + const returnRepository = MockRepository({ + findOne: query => { + switch (query.where.id) { + case IdMap.getId("test-return"): + return Promise.resolve({ + status: "canceled", + }) + default: + return Promise.resolve({}) + } + }, + }) + + const returnService = new ReturnService({ + manager: MockManager, + returnRepository, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("fails to fulfill when return is canceled", async () => { + await expect( + returnService.fulfill(IdMap.getId("test-return")) + ).rejects.toThrow("Cannot fulfill a canceled return") + }) + }) + + describe("update", () => { + const returnRepository = MockRepository({ + findOne: query => { + switch (query.where.id) { + case IdMap.getId("test-return"): + return Promise.resolve({ + status: "canceled", + }) + default: + return Promise.resolve({}) + } + }, + }) + + const returnService = new ReturnService({ + manager: MockManager, + returnRepository, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("fails to update when return is canceled", async () => { + await expect( + returnService.update(IdMap.getId("test-return"), {}) + ).rejects.toThrow("Cannot update a canceled return") + }) }) }) diff --git a/packages/medusa/src/services/__tests__/swap.js b/packages/medusa/src/services/__tests__/swap.js index 447e9f0814..ebf9c2fd47 100644 --- a/packages/medusa/src/services/__tests__/swap.js +++ b/packages/medusa/src/services/__tests__/swap.js @@ -1,3 +1,4 @@ +import paymentService from "medusa-interfaces/dist/payment-service" import { IdMap, MockRepository, MockManager } from "medusa-test-utils" import SwapService from "../swap" import { InventoryServiceMock } from "../__mocks__/inventory" @@ -172,6 +173,7 @@ describe("SwapService", () => { const lineItemService = { create: jest.fn().mockImplementation(d => Promise.resolve(d)), update: jest.fn().mockImplementation(d => Promise.resolve(d)), + retrieve: () => Promise.resolve({}), withTransaction: function() { return this }, @@ -241,26 +243,42 @@ describe("SwapService", () => { other: "data", } + const swapRepo = MockRepository({ + findOneWithRelations: (_, query) => { + switch (query.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ + canceled_at: new Date(), + }) + default: + return Promise.resolve({ + ...existing, + order_id: IdMap.getId("test"), + cart_id: IdMap.getId("swap-cart"), + }) + } + }, + }) + + const swapService = new SwapService({ + manager: MockManager, + eventBusService, + swapRepository: swapRepo, + }) + it("fails if cart already created", async () => { - const swapRepo = MockRepository({ - findOneWithRelations: () => - Promise.resolve({ - ...existing, - order_id: IdMap.getId("test"), - cart_id: IdMap.getId("swap-cart"), - }), - }) - const swapService = new SwapService({ - manager: MockManager, - eventBusService, - swapRepository: swapRepo, - }) const res = swapService.createCart(IdMap.getId("swap-1")) await expect(res).rejects.toThrow( "A cart has already been created for the swap" ) }) + + it("fails if swap is canceled", async () => { + await expect( + swapService.createCart(IdMap.getId("canceled")) + ).rejects.toThrow("Canceled swap cannot be used to create a cart") + }) }) }) @@ -280,6 +298,7 @@ describe("SwapService", () => { quantity, } }), + retrieve: () => Promise.resolve({}), } const swapRepo = MockRepository() const returnService = { @@ -441,8 +460,16 @@ describe("SwapService", () => { } const swapRepo = MockRepository({ - findOneWithRelations: (rels, q) => - Promise.resolve(q.where.id === IdMap.getId("empty") ? {} : existing), + findOneWithRelations: (rels, q) => { + switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ canceled_at: new Date() }) + case IdMap.getId("empty"): + return Promise.resolve({}) + default: + return Promise.resolve(existing) + } + }, }) const swapService = new SwapService({ manager: MockManager, @@ -474,6 +501,12 @@ describe("SwapService", () => { false ) }) + + it("fails to receive return when swap is canceled", async () => { + await expect( + swapService.receiveReturn(IdMap.getId("canceled")) + ).rejects.toThrow("Canceled swap cannot be registered as received") + }) }) }) @@ -511,6 +544,7 @@ describe("SwapService", () => { const lineItemService = { update: jest.fn(), + retrieve: () => Promise.resolve({}), withTransaction: function() { return this }, @@ -563,7 +597,77 @@ describe("SwapService", () => { }) }) - describe("failure", () => {}) + describe("failure", () => { + const swapRepo = MockRepository({ + findOneWithRelations: () => + Promise.resolve({ + canceled_at: new Date(), + }), + }) + const swapService = new SwapService({ + manager: MockManager, + swapRepository: swapRepo, + }) + + it("fails when swap has been canceled", async () => { + await expect( + swapService.createFulfillment(IdMap.getId("swap"), {}) + ).rejects.toThrow("Canceled swap cannot be fulfilled") + }) + }) + }) + + describe("cancelFulfillment", () => { + const swapRepo = MockRepository({ + findOneWithRelations: () => Promise.resolve({}), + save: f => Promise.resolve(f), + }) + + const fulfillmentService = { + cancelFulfillment: jest.fn().mockImplementation(f => { + switch (f) { + case IdMap.getId("no-swap"): + return Promise.resolve({}) + default: + return Promise.resolve({ + swap_id: IdMap.getId("swap-id"), + }) + } + }), + withTransaction: function() { + return this + }, + } + + const swapService = new SwapService({ + manager: MockManager, + swapRepository: swapRepo, + fulfillmentService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully cancels fulfillment and corrects swap status", async () => { + await swapService.cancelFulfillment(IdMap.getId("swap")) + + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledTimes(1) + expect(fulfillmentService.cancelFulfillment).toHaveBeenCalledWith( + IdMap.getId("swap") + ) + + expect(swapRepo.save).toHaveBeenCalledTimes(1) + expect(swapRepo.save).toHaveBeenCalledWith({ + fulfillment_status: "canceled", + }) + }) + + it("fails to cancel fulfillment when not related to a swap", async () => { + await expect( + swapService.cancelFulfillment(IdMap.getId("no-swap")) + ).rejects.toThrow(`Fufillment not related to a swap`) + }) }) describe("createShipment", () => { @@ -631,6 +735,7 @@ describe("SwapService", () => { const lineItemService = { update: jest.fn(), + retrieve: () => Promise.resolve({}), withTransaction: function() { return this }, @@ -677,7 +782,25 @@ describe("SwapService", () => { }) }) - describe("failure", () => {}) + describe("failure", () => { + const swapRepo = MockRepository({ + findOneWithRelations: () => + Promise.resolve({ canceled_at: new Date() }), + }) + + const swapService = new SwapService({ + manager: MockManager, + swapRepository: swapRepo, + }) + + it("fails when swap is canceled", async () => { + await expect( + swapService.createShipment( + IdMap.getId("swap", IdMap.getId("fulfillment"), [], {}) + ) + ).rejects.toThrow("Canceled swap cannot be fulfilled as shipped") + }) + }) }) describe("registerCartCompletion", () => { @@ -794,11 +917,19 @@ describe("SwapService", () => { } const swapRepo = MockRepository({ - findOneWithRelations: () => Promise.resolve(existing), + findOneWithRelations: (rels, q) => { + switch (q.where.id) { + case IdMap.getId("canceled"): + return Promise.resolve({ canceled_at: new Date() }) + default: + return Promise.resolve(existing) + } + }, }) const swapService = new SwapService({ manager: MockManager, + swapRepo: swapRepo, eventBusService, swapRepository: swapRepo, totalsService, @@ -808,6 +939,11 @@ describe("SwapService", () => { inventoryService, }) + it("fails to register cart completion when swap is canceled", async () => { + await expect( + swapService.registerCartCompletion(IdMap.getId("canceled")) + ).rejects.toThrow("Cart related to canceled swap cannot be completed") + }) it("throws an error because inventory is to low", async () => { try { await swapService.registerCartCompletion(IdMap.getId("swap")) @@ -867,6 +1003,8 @@ describe("SwapService", () => { return Promise.resolve(existing(0, false)) case "not_conf": return Promise.resolve(existing(1, false, false)) + case "canceled": + return Promise.resolve({ canceled_at: new Date() }) default: return Promise.resolve(existing(1, false)) } @@ -938,6 +1076,12 @@ describe("SwapService", () => { }) }) + it("fails as swap is canceled", async () => { + await expect(swapService.processDifference("canceled")).rejects.toThrow( + "Canceled swap cannot be processed" + ) + }) + it("zero", async () => { await swapService.processDifference("0") expect(swapRepo.save).toHaveBeenCalledWith({ @@ -980,6 +1124,10 @@ describe("SwapService", () => { order_id: IdMap.getId("order"), return_order: { status: "received" }, }) + case "canceled": + return Promise.resolve({ + canceled_at: new Date(), + }) default: return Promise.resolve() } @@ -1002,6 +1150,109 @@ describe("SwapService", () => { expect(eventBusService.emit).toHaveBeenCalledTimes(1) }) + + it("fails to register as received when swap is canceled", async () => { + await expect(swapService.registerReceived("canceled")).rejects.toThrow( + "Canceled swap cannot be registered as received" + ) + }) }) }) + + describe("cancel", () => { + const now = new Date() + const payment = { id: IdMap.getId("payment") } + const return_order = { status: "canceled" } + const fulfillment = { canceled_at: now } + + const paymentProviderService = { + cancelPayment: jest.fn(() => Promise.resolve({})), + withTransaction: function() { + return this + }, + } + + const swapRepo = MockRepository({ + findOneWithRelations: (_, q) => { + const swap = { + payment: { ...payment }, + return_order: { ...return_order }, + fulfillments: [{ ...fulfillment }, { ...fulfillment }], + } + switch (q.where.id) { + case IdMap.getId("fail-fulfillment"): + swap.fulfillments[1].canceled_at = undefined + return Promise.resolve(swap) + case IdMap.getId("fail-return"): + swap.return_order.status = "received" + return Promise.resolve(swap) + case IdMap.getId("fail-refund-1"): + swap.payment_status = "difference_refunded" + return Promise.resolve(swap) + case IdMap.getId("fail-refund-2"): + swap.payment_status = "partially_refunded" + return Promise.resolve(swap) + case IdMap.getId("fail-refund-3"): + swap.payment_status = "refunded" + return Promise.resolve(swap) + default: + return Promise.resolve(swap) + } + }, + save: f => f, + }) + + const swapService = new SwapService({ + manager: MockManager, + swapRepository: swapRepo, + paymentProviderService, + }) + + beforeEach(async () => { + jest.clearAllMocks() + }) + + it("successfully cancels valid swap", async () => { + await swapService.cancel(IdMap.getId("complete")) + + expect(swapRepo.save).toHaveBeenCalledTimes(1) + expect(swapRepo.save).toHaveBeenCalledWith({ + payment_status: "canceled", + fulfillment_status: "canceled", + canceled_at: expect.any(Date), + fulfillments: expect.anything(), + payment: expect.anything(), + return_order: expect.anything(), + }) + expect(paymentProviderService.cancelPayment).toHaveBeenCalledTimes(1) + expect(paymentProviderService.cancelPayment).toHaveBeenCalledWith({ + id: IdMap.getId("payment"), + }) + }) + + it("fails to cancel swap when fulfillment not canceled", async () => { + await expect( + swapService.cancel(IdMap.getId("fail-fulfillment")) + ).rejects.toThrow( + "All fulfillments must be canceled before the swap can be canceled" + ) + }) + + it("fails to cancel swap when return not canceled", async () => { + await expect( + swapService.cancel(IdMap.getId("fail-return")) + ).rejects.toThrow( + "Return must be canceled before the swap can be cancele" + ) + }) + + it.each([["fail-refund-1"], ["fail-refund-2"], ["fail-refund-3"]])( + "fails to cancel swap when contains refund", + async input => { + await expect(swapService.cancel(IdMap.getId(input))).rejects.toThrow( + "Swap with a refund cannot be canceled" + ) + } + ) + }) }) diff --git a/packages/medusa/src/services/claim.js b/packages/medusa/src/services/claim.js index 0a1e334675..9d60a28626 100644 --- a/packages/medusa/src/services/claim.js +++ b/packages/medusa/src/services/claim.js @@ -106,7 +106,20 @@ class ClaimService extends BaseService { const claimRepo = manager.getCustomRepository(this.claimRepository_) const claim = await this.retrieve(id, { relations: ["shipping_methods"] }) - const { claim_items, shipping_methods, metadata, no_notification } = data + if (claim.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled claim cannot be updated" + ) + } + + const { + claim_items, + shipping_methods, + metadata, + fulfillment_status, + no_notification, + } = data if (metadata) { claim.metadata = this.setMetadata_(claim, metadata) @@ -189,6 +202,23 @@ class ClaimService extends BaseService { ...rest } = data + for (const item of claim_items) { + const line = await this.lineItemService_.retrieve(item.item_id, { + relations: ["order", "swap", "claim_order"], + }) + + if ( + line.order?.canceled_at || + line.swap?.canceled_at || + line.claim_order?.canceled_at + ) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot create a claim on a canceled item.` + ) + } + } + let addressId = shipping_address_id || order.shipping_address_id if (shipping_address) { const addressRepo = manager.getCustomRepository(this.addressRepo_) @@ -345,9 +375,19 @@ class ClaimService extends BaseService { ], }) + if (claim.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled claim cannot be fulfilled" + ) + } + const order = claim.order - if (claim.fulfillment_status !== "not_fulfilled") { + if ( + claim.fulfillment_status !== "not_fulfilled" && + claim.fulfillment_status !== "canceled" + ) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, "The claim has already been fulfilled." @@ -444,12 +484,42 @@ class ClaimService extends BaseService { }) } + async cancelFulfillment(fulfillmentId) { + return this.atomicPhase_(async manager => { + const canceled = await this.fulfillmentService_ + .withTransaction(manager) + .cancelFulfillment(fulfillmentId) + + if (!canceled.claim_order_id) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + `Fufillment not related to a claim` + ) + } + + const claim = await this.retrieve(canceled.claim_order_id) + + claim.fulfillment_status = "canceled" + + const claimRepo = manager.getCustomRepository(this.claimRepository_) + const updated = await claimRepo.save(claim) + return updated + }) + } + async processRefund(id) { return this.atomicPhase_(async manager => { const claim = await this.retrieve(id, { relations: ["order", "order.payments"], }) + if (claim.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled claim cannot be processed" + ) + } + if (claim.type !== "refund") { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, @@ -495,6 +565,12 @@ class ClaimService extends BaseService { relations: ["additional_items"], }) + if (claim.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled claim cannot be fulfilled as shipped" + ) + } const evaluatedNoNotification = no_notification !== undefined ? no_notification : claim.no_notification @@ -543,39 +619,35 @@ class ClaimService extends BaseService { async cancel(id) { return this.atomicPhase_(async manager => { const claim = await this.retrieve(id, { - relations: ["return_order", "fulfillments"], + relations: ["return_order", "fulfillments", "order", "order.refunds"], }) - - if ( - claim.fulfillment_status === "shipped" || - claim.fulfillment_status === "partially_shipped" - ) { + if (claim.refund_amount) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, - `Cannot cancel a claim that has been shipped.` + "Claim with a refund cannot be canceled" ) } - if (claim?.return_order?.status === "received") { + if (claim.fulfillments) { + for (const f of claim.fulfillments) { + if (!f.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "All fulfillments must be canceled before the claim can be canceled" + ) + } + } + } + + if (claim.return_order && claim.return_order.status !== "canceled") { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, - `Cannot cancel a claim that has a received return.` + "Return must be canceled before the claim can be canceled" ) } - if (claim.return_order) { - await this.returnService_ - .withTransaction(manager) - .cancel(claim.return_order.id) - } - - await Promise.all( - claim.fulfillments.map(f => - this.fulfillmentService_.withTransaction(manager).cancelFulfillment(f) - ) - ) - claim.fulfillment_status = "canceled" + claim.canceled_at = new Date() const claimRepo = manager.getCustomRepository(this.claimRepository_) const result = await claimRepo.save(claim) diff --git a/packages/medusa/src/services/fulfillment.js b/packages/medusa/src/services/fulfillment.js index 64183e6aca..ed0b4e4f80 100644 --- a/packages/medusa/src/services/fulfillment.js +++ b/packages/medusa/src/services/fulfillment.js @@ -195,6 +195,7 @@ class FulfillmentService extends BaseService { }) let result = await fulfillmentRepository.save(ful) + result.data = await this.fulfillmentProviderService_.createFulfillment( shipping_method, items, @@ -211,7 +212,9 @@ class FulfillmentService extends BaseService { } /** - * Cancels a fulfillment with the fulfillment provider. + * Cancels a fulfillment with the fulfillment provider. Will decrement the + * fulfillment_quantity on the line items associated with the fulfillment. + * Throws if the fulfillment has already been shipped. * @param {Fulfillment|string} fulfillmentOrId - the fulfillment object or id. * @return {Promise} the result of the save operation * @@ -222,17 +225,36 @@ class FulfillmentService extends BaseService { if (typeof fulfillmentOrId === "object") { id = fulfillmentOrId.id } - const fulfillment = await this.retrieve(id) + const fulfillment = await this.retrieve(id, { + relations: ["items", "claim_order", "swap"], + }) + + if (fulfillment.shipped_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + `The fulfillment has already been shipped. Shipped fulfillments cannot be canceled` + ) + } await this.fulfillmentProviderService_.cancelFulfillment(fulfillment) - fulfillment.status = "canceled" + fulfillment.canceled_at = new Date() + + const lineItemService = this.lineItemService_.withTransaction(manager) + + for (const fItem of fulfillment.items) { + const item = await lineItemService.retrieve(fItem.item_id) + const fulfilledQuantity = item.fulfilled_quantity - fItem.quantity + await lineItemService.update(item.id, { + fulfilled_quantity: fulfilledQuantity, + }) + } const fulfillmentRepo = manager.getCustomRepository( this.fulfillmentRepository_ ) - const result = await fulfillmentRepo.save(fulfillment) - return result + const canceled = await fulfillmentRepo.save(fulfillment) + return canceled }) } @@ -266,6 +288,13 @@ class FulfillmentService extends BaseService { relations: ["items"], }) + if (fulfillment.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Fulfillment has been canceled" + ) + } + const now = new Date() fulfillment.shipped_at = now diff --git a/packages/medusa/src/services/inventory.js b/packages/medusa/src/services/inventory.js index c0c27b59b6..944a7e6ffe 100644 --- a/packages/medusa/src/services/inventory.js +++ b/packages/medusa/src/services/inventory.js @@ -1,6 +1,5 @@ import { BaseService } from "medusa-interfaces" import { MedusaError } from "medusa-core-utils" -const fs = require("fs") class InventoryService extends BaseService { constructor({ manager, productVariantService }) { diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index 6477f4c0db..374689742e 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -10,6 +10,7 @@ class OrderService extends BaseService { PAYMENT_CAPTURE_FAILED: "order.payment_capture_failed", SHIPMENT_CREATED: "order.shipment_created", FULFILLMENT_CREATED: "order.fulfillment_created", + FULFILLMENT_CANCELED: "order.fulfillment_canceled", RETURN_REQUESTED: "order.return_requested", ITEMS_RETURNED: "order.items_returned", RETURN_ACTION_REQUIRED: "order.return_action_required", @@ -408,6 +409,13 @@ class OrderService extends BaseService { return this.atomicPhase_(async manager => { const order = await this.retrieve(orderId) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be completed" + ) + } + // Run all other registered events const completeOrderJob = await this.eventBus_.emit( OrderService.Events.COMPLETED, @@ -618,6 +626,13 @@ class OrderService extends BaseService { const order = await this.retrieve(orderId, { relations: ["items"] }) const shipment = await this.fulfillmentService_.retrieve(fulfillmentId) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be fulfilled as shipped" + ) + } + if (!shipment || shipment.order_id !== orderId) { throw new MedusaError( MedusaError.Types.NOT_FOUND, @@ -773,6 +788,13 @@ class OrderService extends BaseService { }) const { shipping_methods } = order + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A shipping method cannot be added to a canceled order" + ) + } + const newMethod = await this.shippingOptionService_ .withTransaction(manager) .createShippingMethod(optionId, data, { order, ...config }) @@ -814,6 +836,13 @@ class OrderService extends BaseService { return this.atomicPhase_(async manager => { const order = await this.retrieve(orderId) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be updated" + ) + } + if ( (update.payment || update.items) && (order.fulfillment_status !== "not_fulfilled" || @@ -893,23 +922,36 @@ class OrderService extends BaseService { async cancel(orderId) { return this.atomicPhase_(async manager => { const order = await this.retrieve(orderId, { - relations: ["fulfillments", "payments", "items"], + relations: [ + "fulfillments", + "payments", + "returns", + "claims", + "swaps", + "items", + ], }) - if (order.payment_status !== "awaiting") { + if (order.refunds?.length > 0) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, - "Can't cancel an order with a processed payment" + "Order with refund(s) cannot be canceled" ) } - await Promise.all( - order.fulfillments.map(fulfillment => - this.fulfillmentService_ - .withTransaction(manager) - .cancelFulfillment(fulfillment) - ) - ) + const throwErrorIf = (arr, pred, type) => + arr?.filter(pred).find(_ => { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + `All ${type} must be canceled before canceling an order` + ) + }) + const notCanceled = o => !o.canceled_at + + throwErrorIf(order.fulfillments, notCanceled, "fulfillments") + throwErrorIf(order.returns, r => r.status !== "canceled", "returns") + throwErrorIf(order.swaps, notCanceled, "swaps") + throwErrorIf(order.claims, notCanceled, "claims") for (const item of order.items) { await this.inventoryService_ @@ -950,6 +992,13 @@ class OrderService extends BaseService { const orderRepo = manager.getCustomRepository(this.orderRepository_) const order = await this.retrieve(orderId, { relations: ["payments"] }) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot capture payment" + ) + } + const payments = [] for (const p of order.payments) { if (p.captured_at === null) { @@ -1075,6 +1124,13 @@ class OrderService extends BaseService { ], }) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be fulfilled" + ) + } + if (!order.shipping_methods?.length) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, @@ -1124,6 +1180,7 @@ class OrderService extends BaseService { const orderRepo = manager.getCustomRepository(this.orderRepository_) order.fulfillments = [...order.fulfillments, ...fulfillments] + const result = await orderRepo.save(order) const evaluatedNoNotification = @@ -1143,6 +1200,43 @@ class OrderService extends BaseService { }) } + /** + * Cancels a fulfillment (if related to an order) + * @param {string} fulfillmentId - the ID of the fulfillment to cancel + * @returns updated order + */ + async cancelFulfillment(fulfillmentId) { + return this.atomicPhase_(async manager => { + const canceled = await this.fulfillmentService_ + .withTransaction(manager) + .cancelFulfillment(fulfillmentId) + + if (!canceled.order_id) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + `Fufillment not related to an order` + ) + } + + const order = await this.retrieve(canceled.order_id) + + order.fulfillment_status = "canceled" + + const orderRepo = manager.getCustomRepository(this.orderRepository_) + const updated = await orderRepo.save(order) + + await this.eventBus_ + .withTransaction(manager) + .emit(OrderService.Events.FULFILLMENT_CANCELED, { + id: order.id, + fulfillment_id: canceled.id, + no_notification: canceled.no_notification, + }) + + return updated + }) + } + /** * Retrieves the order line items, given an array of items. * @param {Order} order - the order to get line items from @@ -1208,6 +1302,13 @@ class OrderService extends BaseService { relations: ["payments"], }) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be refunded" + ) + } + if (refundAmount > order.refundable_amount) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, @@ -1312,6 +1413,13 @@ class OrderService extends BaseService { relations: ["items", "returns", "payments"], }) + if (order.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "A canceled order cannot be registered as received" + ) + } + if (!receivedReturn || receivedReturn.order_id !== orderId) { throw new MedusaError( MedusaError.Types.NOT_FOUND, diff --git a/packages/medusa/src/services/payment-provider.js b/packages/medusa/src/services/payment-provider.js index 6d2a412392..354985cb17 100644 --- a/packages/medusa/src/services/payment-provider.js +++ b/packages/medusa/src/services/payment-provider.js @@ -321,7 +321,6 @@ class PaymentProviderService extends BaseService { async cancelPayment(paymentObj) { return this.atomicPhase_(async manager => { const payment = await this.retrievePayment(paymentObj.id) - const provider = this.retrieveProvider(payment.provider_id) payment.data = await provider.cancelPayment(payment) diff --git a/packages/medusa/src/services/return.js b/packages/medusa/src/services/return.js index ff62959d5c..23bbca9e08 100644 --- a/packages/medusa/src/services/return.js +++ b/packages/medusa/src/services/return.js @@ -116,6 +116,31 @@ class ReturnService extends BaseService { return returnRepo.find(query) } + /** + * Cancels a return if possible. Returns can be canceled if it has not been received. + * @param {string} returnId - the id of the return to cancel. + * @return {Promise} the updated Return + */ + async cancel(returnId) { + return this.atomicPhase_(async manager => { + const ret = await this.retrieve(returnId) + + if (ret.status === "received") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Can't cancel a return which has been returned" + ) + } + + const retRepo = manager.getCustomRepository(this.returnRepository_) + + ret.status = "canceled" + + const result = retRepo.save(ret) + return result + }) + } + /** * Checks that an order has the statuses necessary to complete a return. * fulfillment_status cannot be not_fulfilled or returned. @@ -236,6 +261,13 @@ class ReturnService extends BaseService { return this.atomicPhase_(async manager => { const ret = await this.retrieve(returnId) + if (ret.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Cannot update a canceled return" + ) + } + const { metadata, ...rest } = update if ("metadata" in update) { @@ -272,6 +304,23 @@ class ReturnService extends BaseService { delete data.order_id } + for (const item of data.items) { + const line = await this.lineItemService_.retrieve(item.item_id, { + relations: ["order", "swap", "claim_order"], + }) + + if ( + line.order?.canceled_at || + line.swap?.canceled_at || + line.claim_order?.canceled_at + ) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot create a return for a canceled item.` + ) + } + } + const order = await this.orderService_ .withTransaction(manager) .retrieve(orderId, { @@ -370,6 +419,13 @@ class ReturnService extends BaseService { ], }) + if (returnOrder.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Cannot fulfill a canceled return" + ) + } + let returnData = { ...returnOrder } const items = await this.lineItemService_.list({ @@ -429,6 +485,13 @@ class ReturnService extends BaseService { relations: ["items", "swap", "swap.additional_items"], }) + if (returnObj.status === "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Cannot receive a canceled return" + ) + } + let orderId = returnObj.order_id // check if return is requested on a swap if (returnObj.swap) { diff --git a/packages/medusa/src/services/swap.js b/packages/medusa/src/services/swap.js index b6244ff589..5559d04e35 100644 --- a/packages/medusa/src/services/swap.js +++ b/packages/medusa/src/services/swap.js @@ -314,6 +314,24 @@ class SwapService extends BaseService { ) } + for (const item of returnItems) { + const line = await this.lineItemService_.retrieve(item.item_id, { + relations: ["order", "swap", "claim_order"], + }) + console.log(line) + + if ( + line.order?.canceled_at || + line.swap?.canceled_at || + line.claim_order?.canceled_at + ) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cannot create a swap on a canceled item.` + ) + } + } + const newItems = await Promise.all( additionalItems.map(({ variant_id, quantity }) => { return this.lineItemService_.generate( @@ -364,6 +382,13 @@ class SwapService extends BaseService { relations: ["payment", "order", "order.payments"], }) + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be processed" + ) + } + if (!swap.confirmed_at) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, @@ -515,6 +540,13 @@ class SwapService extends BaseService { ], }) + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be used to create a cart" + ) + } + if (swap.cart_id) { throw new MedusaError( MedusaError.Types.DUPLICATE_ERROR, @@ -625,6 +657,13 @@ class SwapService extends BaseService { return swap } + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Cart related to canceled swap cannot be completed" + ) + } + const cart = swap.cart const items = swap.cart.items @@ -716,6 +755,13 @@ class SwapService extends BaseService { return this.atomicPhase_(async manager => { const swap = await this.retrieve(swapId, { relations: ["return_order"] }) + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be registered as received" + ) + } + const returnId = swap.return_order && swap.return_order.id if (!returnId) { throw new MedusaError( @@ -739,6 +785,64 @@ class SwapService extends BaseService { }) } + /** + * Cancels a given swap if possible. A swap can only be canceled if all + * related returns, fulfillments, and payments have been canceled. If a swap + * is associated with a refund, it cannot be canceled. + * @param {string} swapId - the id of the swap to cancel. + * @returns {Promise} the canceled swap. + */ + async cancel(swapId) { + return this.atomicPhase_(async manager => { + const swap = await this.retrieve(swapId, { + relations: ["payment", "fulfillments", "return_order"], + }) + + if ( + swap.payment_status === "difference_refunded" || + swap.payment_status === "partially_refunded" || + swap.payment_status === "refunded" + ) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Swap with a refund cannot be canceled" + ) + } + + if (swap.fulfillments) { + for (const f of swap.fulfillments) { + if (!f.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "All fulfillments must be canceled before the swap can be canceled" + ) + } + } + } + + if (swap.return_order && swap.return_order.status !== "canceled") { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Return must be canceled before the swap can be canceled" + ) + } + + swap.payment_status = "canceled" + swap.fulfillment_status = "canceled" + swap.canceled_at = new Date() + + if (swap.payment) { + await this.paymentProviderService_ + .withTransaction(manager) + .cancelPayment(swap.payment) + } + + const swapRepo = manager.getCustomRepository(this.swapRepository_) + const result = await swapRepo.save(swap) + return result + }) + } + /** * Fulfills the addtional items associated with the swap. Will call the * fulfillment providers associated with the shipping methods. @@ -770,7 +874,17 @@ class SwapService extends BaseService { }) const order = swap.order - if (swap.fulfillment_status !== "not_fulfilled") { + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be fulfilled" + ) + } + + if ( + swap.fulfillment_status !== "not_fulfilled" && + swap.fulfillment_status !== "canceled" + ) { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, "The swap was already fulfilled" @@ -861,6 +975,34 @@ class SwapService extends BaseService { }) } + /** + * Cancels a fulfillment (if related to a swap) + * @param {string} fulfillmentId - the ID of the fulfillment to cancel + * @returns updated swap + */ + async cancelFulfillment(fulfillmentId) { + return this.atomicPhase_(async manager => { + const canceled = await this.fulfillmentService_ + .withTransaction(manager) + .cancelFulfillment(fulfillmentId) + + if (!canceled.swap_id) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + `Fufillment not related to a swap` + ) + } + + const swap = await this.retrieve(canceled.swap_id) + + swap.fulfillment_status = "canceled" + + const swapRepo = manager.getCustomRepository(this.swapRepository_) + const updated = await swapRepo.save(swap) + return updated + }) + } + /** * Marks a fulfillment as shipped and attaches tracking numbers. * @param {string} swapId - the id of the swap that has been shipped. @@ -887,6 +1029,12 @@ class SwapService extends BaseService { relations: ["additional_items"], }) + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be fulfilled as shipped" + ) + } const evaluatedNoNotification = no_notification !== undefined ? no_notification : swap.no_notification @@ -969,6 +1117,13 @@ class SwapService extends BaseService { relations: ["return_order", "return_order.items"], }) + if (swap.canceled_at) { + throw new MedusaError( + MedusaError.Types.NOT_ALLOWED, + "Canceled swap cannot be registered as received" + ) + } + if (swap.return_order.status !== "received") { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, diff --git a/packages/medusa/yarn.lock b/packages/medusa/yarn.lock index dbfab973ef..3837d948c1 100644 --- a/packages/medusa/yarn.lock +++ b/packages/medusa/yarn.lock @@ -1407,10 +1407,10 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@medusajs/medusa-cli@^1.1.16": - version "1.1.16" - resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.16.tgz#3ddcd5b16388a387c430116b962bb27a933ee85e" - integrity sha512-QvE7IYkR3NFiy4seZklfX+Xs/dJannVLbKfxLQbxCV2Sso3ZtJbSJt1BpTUwDxYjOFWXyTxRRjO1kEnA1yqCBA== +"@medusajs/medusa-cli@1.1.16-dev-1631019393655": + version "1.1.16-dev-1631019393655" + resolved "http://localhost:4873/@medusajs%2fmedusa-cli/-/medusa-cli-1.1.16-dev-1631019393655.tgz#68fc30f7053df428cd7a4e5a443326371818a20d" + integrity sha512-5wUVfTJahuHBbY4U5iuwSKbE/Dn3S/fC8MWVpP5R/JFNK484zR3On1qBL0I9tXtsUd9CmB+jKI59w6D49wJ29A== dependencies: "@babel/polyfill" "^7.8.7" "@babel/runtime" "^7.9.6" @@ -1428,8 +1428,8 @@ is-valid-path "^0.1.1" joi-objectid "^3.0.1" meant "^1.0.1" - medusa-core-utils "^0.1.27" - medusa-telemetry "^0.0.3" + medusa-core-utils "1.1.20-dev-1631019393655" + medusa-telemetry "0.0.3-dev-1631019393655" netrc-parser "^3.1.6" open "^8.0.6" ora "^5.4.1" @@ -2046,10 +2046,10 @@ babel-preset-jest@^25.5.0: babel-plugin-jest-hoist "^25.5.0" babel-preset-current-node-syntax "^0.1.2" -babel-preset-medusa-package@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.13.tgz#9dc4e64e08436fb7b3536cef0f363a535e126474" - integrity sha512-Q9t06udxwMnfwyx7gyxoUKiZj/dtYSSXBtQ+K4ntY1hzMhOK2hBBInuiTgnLQS1cxc4j+FN2oYYPCpspX/acaw== +babel-preset-medusa-package@1.1.13-dev-1631019393655: + version "1.1.13-dev-1631019393655" + resolved "http://localhost:4873/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.13-dev-1631019393655.tgz#95b20e00ae34b6b1d5a3be2dbd17c4bf45c1895e" + integrity sha512-cpaVSi2+M8LFlZjfcazmp1GHB+lEgDNZNlX8J9RdB5/LWZwWRrqFGVyv//8hXp7AKiFFTtayJmpgBAEFfLhdcA== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -3021,6 +3021,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-walk@^0.1.0: + version "0.1.2" + resolved "http://localhost:4873/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -3868,6 +3873,14 @@ global-dirs@^2.0.1: dependencies: ini "1.3.7" +global@^4.4.0: + version "4.4.0" + resolved "http://localhost:4873/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -5441,50 +5454,43 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medusa-core-utils@^0.1.27: - version "0.1.39" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-0.1.39.tgz#d57816c9bd43f9a92883650c1e66add1665291df" - integrity sha512-R8+U1ile7if+nR6Cjh5exunx0ETV0OfkWUUBUpz1KmHSDv0V0CcvQqU9lcZesPFDEbu3Y2iEjsCqidVA4nG2nQ== - dependencies: - "@hapi/joi" "^16.1.8" - joi-objectid "^3.0.1" - -medusa-core-utils@^1.1.20: - version "1.1.20" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.20.tgz#676c0dc863a206b80cc53299a984c532d07df65f" - integrity sha512-gf+/L5eeqHea3xgjwD7YZEzfUGlxbjfvaeiiGWi3Wfu0dLa+G1B4S0TsX+upR+oVeWPmk66VMqWC80h3e4csqw== +medusa-core-utils@1.1.20-dev-1631019393655: + version "1.1.20-dev-1631019393655" + resolved "http://localhost:4873/medusa-core-utils/-/medusa-core-utils-1.1.20-dev-1631019393655.tgz#edd5e25518677799647eef32ccc8ddb4f244026e" + integrity sha512-Ko+gjpe4pHwQMI6Gv4MxMlzWbQbCL9bnN8MX5eHwLJoGcPzt57y5/RWujJo99nUuNthUDiJ14EFXQHVQu45bmQ== dependencies: joi "^17.3.0" joi-objectid "^3.0.1" -medusa-interfaces@^1.1.21: - version "1.1.21" - resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.21.tgz#ca86808e939b7ecc21a6d316008a4e41f163619f" - integrity sha512-mlHHoMIOFBc+Exs+uVIQsfeEP2C1Pi6IZHcpbm7O00tYBdQdqRjJre9+Z/I/Z37wt5IwA28/TIoVkYG71iQYxw== +medusa-interfaces@1.1.21-dev-1631019393655: + version "1.1.21-dev-1631019393655" + resolved "http://localhost:4873/medusa-interfaces/-/medusa-interfaces-1.1.21-dev-1631019393655.tgz#c2a72b6751a802438ed0f9010ed0cfecff1d1a2d" + integrity sha512-I8BEdvmVKorakTU5myw8IyTLp9OcO40OkNdZmZj29Q4oRU4scwP3i+5bXd6xW0ML5t5hbMUT9TKU9n7oZNIvug== dependencies: - medusa-core-utils "^1.1.20" + medusa-core-utils "1.1.20-dev-1631019393655" -medusa-telemetry@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.3.tgz#c11e5e0f3cc969f3eaee41d1c24f78a5c0715362" - integrity sha512-Qb/sgOwO8t2Sjjo4nKyBa6hKZ/SjniT4eEWenygEaJDqXZhfogVYGhWc5gn4tLlFFNEHXzDTlrqX2LvzfEJWIw== +medusa-telemetry@0.0.3-dev-1631019393655: + version "0.0.3-dev-1631019393655" + resolved "http://localhost:4873/medusa-telemetry/-/medusa-telemetry-0.0.3-dev-1631019393655.tgz#dc6abef74c631520d4d8c81a4175ac795d72fbda" + integrity sha512-I8a8iTTmL0u5/SYnTw02xn3JiFa2PDclRyDL5pAl8gFgCzVCWD+fm+ik51kMMhbNhK7GWobs4h5xxA4W6eCcAQ== dependencies: axios "^0.21.1" axios-retry "^3.1.9" boxen "^5.0.1" ci-info "^3.2.0" configstore "5.0.1" + global "^4.4.0" is-docker "^2.2.1" remove-trailing-slash "^0.1.1" uuid "^8.3.2" -medusa-test-utils@^1.1.23: - version "1.1.23" - resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.23.tgz#e8380df499979cd0b97a5bb87779662f4da9d722" - integrity sha512-okyUgB4t7bqDieE0XO+HkbVVemn6hE1tTAtF9PXRi2igmKmcnyW/Ljk3lqrKYVhjei4z3Z/b+K2b0oNwhopbGQ== +medusa-test-utils@1.1.23-dev-1631019393655: + version "1.1.23-dev-1631019393655" + resolved "http://localhost:4873/medusa-test-utils/-/medusa-test-utils-1.1.23-dev-1631019393655.tgz#1daf3913cfe8a9586863e4b80dabbb7344ebba48" + integrity sha512-5qsKVr2whQi03lGPmy2+/tAD1KuFsqrAcaaEp+u42Jjg6acDV1rrcTgFLj+lplRBOC2qFzMEU0cBFuGKNmYhpg== dependencies: "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "^1.1.20" + medusa-core-utils "1.1.20-dev-1631019393655" randomatic "^3.1.1" merge-descriptors@1.0.1: @@ -5561,6 +5567,13 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +min-document@^2.19.0: + version "2.19.0" + resolved "http://localhost:4873/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6437,6 +6450,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "http://localhost:4873/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" diff --git a/yarn.lock b/yarn.lock index b770f4a52b..21f0331ff7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -171,6 +171,11 @@ dependencies: "@babel/highlight" "^7.14.5" +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.12.7", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" @@ -180,11 +185,6 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/compat-data@^7.12.7", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== - "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" @@ -290,6 +290,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" + integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== + dependencies: + "@babel/types" "^7.15.4" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -304,6 +313,21 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-annotate-as-pure@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f" + integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" @@ -343,6 +367,18 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" @@ -402,6 +438,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-explode-assignable-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c" + integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -420,6 +463,15 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -434,6 +486,20 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + dependencies: + "@babel/types" "^7.15.4" + +"@babel/helper-hoist-variables@^7.10.4", "@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" @@ -469,6 +535,13 @@ dependencies: "@babel/types" "^7.15.0" +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" @@ -490,6 +563,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-transforms@^7.10.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -503,6 +583,20 @@ "@babel/types" "^7.11.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" + integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-module-transforms@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" @@ -546,6 +640,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -563,6 +664,15 @@ dependencies: lodash "^4.17.19" +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" + integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-wrap-function" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-remap-async-to-generator@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" @@ -611,6 +721,16 @@ "@babel/traverse" "^7.15.0" "@babel/types" "^7.15.0" +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -640,6 +760,13 @@ dependencies: "@babel/types" "^7.14.8" +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" @@ -668,6 +795,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -708,6 +842,16 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-wrap-function@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" + integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== + dependencies: + "@babel/helper-function-name" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" @@ -775,6 +919,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== +"@babel/parser@^7.15.4": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" + integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" @@ -1195,7 +1344,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -1216,7 +1365,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.14.5": +"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== @@ -1232,7 +1381,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.14.5": +"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== @@ -1248,7 +1397,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": +"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== @@ -1262,6 +1411,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-block-scoping@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" @@ -1283,7 +1439,7 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.9": +"@babel/plugin-transform-classes@^7.12.1": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f" integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== @@ -1316,7 +1472,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-computed-properties@^7.14.5": +"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== @@ -1330,7 +1486,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.14.7": +"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== @@ -1345,7 +1501,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== @@ -1360,7 +1516,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.14.5": +"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== @@ -1375,7 +1531,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": +"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== @@ -1390,6 +1546,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-for-of@^7.12.1": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" + integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-for-of@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" @@ -1405,7 +1568,7 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.14.5": +"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== @@ -1434,7 +1597,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.14.5": +"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== @@ -1448,7 +1611,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.14.5": +"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== @@ -1464,7 +1627,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.14.5": +"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== @@ -1483,6 +1646,16 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== + dependencies: + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.15.4" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" @@ -1493,16 +1666,6 @@ "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281" - integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== - dependencies: - "@babel/helper-module-transforms" "^7.15.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.8" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-systemjs@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" @@ -1513,6 +1676,17 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" + integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== + dependencies: + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" @@ -1532,7 +1706,7 @@ "@babel/helper-module-transforms" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.14.5": +"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== @@ -1547,6 +1721,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.10.4" +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" @@ -1554,13 +1735,6 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/plugin-transform-new-target@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" @@ -1568,7 +1742,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-new-target@^7.14.5": +"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== @@ -1583,7 +1757,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-object-super@^7.14.5": +"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== @@ -1620,7 +1794,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.14.5": +"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== @@ -1674,7 +1848,7 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.14.5": +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== @@ -1688,7 +1862,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-reserved-words@^7.14.5": +"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== @@ -1734,7 +1908,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.14.5": +"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== @@ -1749,7 +1923,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" -"@babel/plugin-transform-spread@^7.14.6": +"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== @@ -1765,7 +1939,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-sticky-regex@^7.14.5": +"@babel/plugin-transform-sticky-regex@^7.12.7", "@babel/plugin-transform-sticky-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== @@ -1780,7 +1954,7 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.14.5": +"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== @@ -1794,7 +1968,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.14.5": +"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== @@ -1817,7 +1991,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-escapes@^7.14.5": +"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== @@ -1832,7 +2006,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.14.5": +"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== @@ -2168,6 +2342,15 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.7.tgz#572a722408681cef17d6b0bef69ef2e728ca69f1" @@ -2228,6 +2411,21 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" @@ -2253,6 +2451,14 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" +"@babel/types@^7.15.4": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -5079,16 +5285,16 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.75" -browserslist@^4.16.7: - version "4.16.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" - integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== +browserslist@^4.17.0: + version "4.17.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" + integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== dependencies: - caniuse-lite "^1.0.30001248" - colorette "^1.2.2" - electron-to-chromium "^1.3.793" + caniuse-lite "^1.0.30001254" + colorette "^1.3.0" + electron-to-chromium "^1.3.830" escalade "^3.1.1" - node-releases "^1.1.73" + node-releases "^1.1.75" bser@2.1.1: version "2.1.1" @@ -5315,10 +5521,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz#45b941bbd833cb0fa53861ff2bae746b3c6ca5d4" integrity sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA== -caniuse-lite@^1.0.30001248: - version "1.0.30001251" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85" - integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== +caniuse-lite@^1.0.30001124, caniuse-lite@^1.0.30001254: + version "1.0.30001255" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz#f3b09b59ab52e39e751a569523618f47c4298ca0" + integrity sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ== caniuse-lite@^1.0.30001251: version "1.0.30001252" @@ -6055,14 +6261,6 @@ core-js-compat@^3.14.0, core-js-compat@^3.15.0: browserslist "^4.16.6" semver "7.0.0" -core-js-compat@^3.16.0: - version "3.16.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d" - integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ== - dependencies: - browserslist "^4.16.7" - semver "7.0.0" - core-js-compat@^3.6.2: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" @@ -6071,6 +6269,14 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" +core-js-compat@^3.7.0: + version "3.17.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.17.3.tgz#b39c8e4dec71ecdc735c653ce5233466e561324e" + integrity sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA== + dependencies: + browserslist "^4.17.0" + semver "7.0.0" + core-js-pure@^3.15.0: version "3.15.2" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" @@ -6838,16 +7044,16 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.3.562, electron-to-chromium@^1.3.830: + version "1.3.835" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.835.tgz#98fa4402ab7bc6afbe4953a8ca9b63cb3a6bf08b" + integrity sha512-rHQszGg2KLMqOWPNTpwCnlp7Kb85haJa8j089DJCreZueykoSN/in+EMlay3SSDMNKR4VGPvfskxofHV18xVJg== + electron-to-chromium@^1.3.564, electron-to-chromium@^1.3.723: version "1.3.775" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.775.tgz#046517d1f2cea753e06fff549995b9dc45e20082" integrity sha512-EGuiJW4yBPOTj2NtWGZcX93ZE8IGj33HJAx4d3ouE2zOfW2trbWU+t1e0yzLr1qQIw81++txbM3BH52QwSRE6Q== -electron-to-chromium@^1.3.793: - version "1.3.807" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.807.tgz#c2eb803f4f094869b1a24151184ffbbdbf688b1f" - integrity sha512-p8uxxg2a23zRsvQ2uwA/OOI+O4BQxzaR7YKMIGGGQCpYmkFX2CVF5f0/hxLMV7yCr7nnJViCwHLhPfs52rIYCA== - electron-to-chromium@^1.3.811: version "1.3.826" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.826.tgz#dbe356b1546b39d83bcd47e675a9c5f61dadaed2" @@ -7674,7 +7880,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -8680,7 +8886,7 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -invariant@^2.2.2: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -10108,7 +10314,7 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== -loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -10912,21 +11118,16 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" +node-releases@^1.1.60, node-releases@^1.1.75: + version "1.1.75" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" + integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== + node-releases@^1.1.61, node-releases@^1.1.71: version "1.1.73" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== -node-releases@^1.1.73: - version "1.1.74" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e" - integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw== - -node-releases@^1.1.75: - version "1.1.75" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" - integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== - nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -12803,7 +13004,7 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexpu-core@^4.7.1: +regexpu-core@^4.7.0, regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== @@ -15630,14 +15831,14 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -z-schema@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-4.2.3.tgz#85f7eea7e6d4fe59a483462a98f511bd78fe9882" - integrity sha512-zkvK/9TC6p38IwcrbnT3ul9in1UX4cm1y/VZSs4GHKIiDCrlafc+YQBgQBUdDXLAoZHf2qvQ7gJJOo6yT1LH6A== +z-schema@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.1.tgz#f4d4efb1e8763c968b5539e42d11b6a47e91da62" + integrity sha512-Gp8xU2lULhREqTWj9t4BEAeA7M835n4fWJ9KjGWksV3wmLUdOJo2hAr+QYvkVZIGOOTyeN274g1f95dKRsgYgQ== dependencies: lodash.get "^4.4.2" lodash.isequal "^4.5.0" - validator "^12.0.0" + validator "^13.6.0" optionalDependencies: commander "^2.7.1"