From 373532ecbc8196f47e71af95a8cf82a14a4b1f9e Mon Sep 17 00:00:00 2001 From: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> Date: Thu, 18 Nov 2021 15:19:17 +0100 Subject: [PATCH] feat: Typescript for API layer (#817) Co-authored-by: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Co-authored-by: Zakaria El Asri <33696020+zakariaelas@users.noreply.github.com> Co-authored-by: Kasper Fabricius Kristensen <45367945+kasperkristensen@users.noreply.github.com> Co-authored-by: Philip Korsholm Co-authored-by: Sebastian Rindom --- .eslintignore | 15 + .eslintrc.js | 15 +- .../admin/__snapshots__/colllections.js.snap | 204 + .../admin/__snapshots__/product.js.snap | 2 +- .../api/__tests__/admin/colllections.js | 220 + .../api/__tests__/admin/customer.js | 1 - .../api/__tests__/admin/discount.js | 202 +- .../api/__tests__/admin/gift-cards.js | 3 + .../api/__tests__/admin/order.js | 54 +- .../api/__tests__/admin/product.js | 47 +- .../api/__tests__/admin/region.js | 5 + .../store/__snapshots__/auth.js.snap | 2 +- .../store/__snapshots__/collections.js.snap | 2 + integration-tests/api/__tests__/store/auth.js | 6 +- integration-tests/api/__tests__/store/cart.js | 12 +- .../api/__tests__/store/collections.js | 2 + .../api/__tests__/store/customer.js | 30 +- .../api/__tests__/store/return-reason.js | 43 + .../api/__tests__/store/returns.js | 23 + integration-tests/api/package.json | 8 +- integration-tests/api/yarn.lock | 3220 +++++++------- package.json | 2 +- packages/medusa-core-utils/.babelrc | 2 +- packages/medusa-core-utils/package.json | 10 +- .../src/{errors.js => errors.ts} | 19 +- packages/medusa-core-utils/src/index.js | 16 +- packages/medusa-core-utils/tsconfig.json | 22 + packages/medusa-core-utils/yarn.lock | 2845 ++++++------- packages/medusa-interfaces/package.json | 2 +- .../medusa-interfaces/src/base-service.js | 5 + packages/medusa-js/.gitignore | 2 + packages/medusa-js/README.md | 1 + packages/medusa-js/jestconfig.json | 7 + packages/medusa-js/package.json | 34 + packages/medusa-js/src/error.ts | 57 + packages/medusa-js/src/index.ts | 51 + packages/medusa-js/src/request.ts | 199 + packages/medusa-js/src/resources/addresses.ts | 47 + packages/medusa-js/src/resources/auth.ts | 41 + packages/medusa-js/src/resources/base.ts | 9 + packages/medusa-js/src/resources/carts.ts | 160 + .../medusa-js/src/resources/collections.ts | 42 + packages/medusa-js/src/resources/customers.ts | 102 + .../medusa-js/src/resources/gift-cards.ts | 17 + .../medusa-js/src/resources/line-items.ts | 54 + packages/medusa-js/src/resources/orders.ts | 48 + .../src/resources/payment-methods.ts | 16 + .../src/resources/product-variants.ts | 43 + packages/medusa-js/src/resources/products.ts | 55 + packages/medusa-js/src/resources/regions.ts | 26 + .../medusa-js/src/resources/return-reasons.ts | 29 + packages/medusa-js/src/resources/returns.ts | 17 + .../src/resources/shipping-options.ts | 44 + packages/medusa-js/src/resources/swaps.ts | 27 + packages/medusa-js/tsconfig.json | 22 + packages/medusa-js/yarn.lock | 3783 +++++++++++++++++ packages/medusa-plugin-algolia/README.md | 2 +- .../src/services/algolia.js | 6 +- packages/medusa-plugin-algolia/yarn.lock | 60 - .../src/services/__mocks__/permission.js | 15 - .../src/services/__tests__/permission.js | 354 -- packages/medusa/index.d.ts | 1 + packages/medusa/package.json | 15 +- packages/medusa/src/api/index.js | 19 +- .../api/routes/admin/apps/authorize-app.js | 21 - .../api/routes/admin/apps/authorize-app.ts | 63 + .../routes/admin/apps/{index.js => index.ts} | 9 + .../medusa/src/api/routes/admin/apps/list.js | 6 - .../medusa/src/api/routes/admin/apps/list.ts | 26 + .../api/routes/admin/auth/create-session.js | 53 - .../api/routes/admin/auth/create-session.ts | 67 + .../{delete-session.js => delete-session.ts} | 3 +- .../auth/{get-session.js => get-session.ts} | 14 +- .../routes/admin/auth/{index.js => index.ts} | 11 +- .../__tests__/create-collection.js | 4 +- ...ate-collection.js => create-collection.ts} | 49 +- ...ete-collection.js => delete-collection.ts} | 25 +- .../{get-collection.js => get-collection.ts} | 18 +- .../src/api/routes/admin/collections/index.js | 21 - .../src/api/routes/admin/collections/index.ts | 40 + .../admin/collections/list-collections.js | 41 - .../admin/collections/list-collections.ts | 67 + ...ate-collection.js => update-collection.ts} | 48 +- ...{create-customer.js => create-customer.ts} | 41 +- .../{get-customer.js => get-customer.ts} | 5 +- .../admin/customers/{index.js => index.ts} | 17 + .../routes/admin/customers/list-customers.js | 47 - .../routes/admin/customers/list-customers.ts | 75 + ...{update-customer.js => update-customer.ts} | 53 +- .../discounts/__tests__/create-discount.js | 14 +- .../discounts/__tests__/list-discounts.js | 18 +- .../discounts/__tests__/update-discount.js | 6 +- .../{add-region.js => add-region.ts} | 15 +- ...-valid-product.js => add-valid-product.ts} | 19 +- ...{create-discount.js => create-discount.ts} | 131 +- ...dynamic-code.js => create-dynamic-code.ts} | 48 +- ...{delete-discount.js => delete-discount.ts} | 6 +- ...dynamic-code.js => delete-dynamic-code.ts} | 6 +- ...unt-by-code.js => get-discount-by-code.ts} | 13 +- .../{get-discount.js => get-discount.ts} | 12 +- .../admin/discounts/{index.js => index.ts} | 30 +- .../routes/admin/discounts/list-discounts.js | 52 - .../routes/admin/discounts/list-discounts.ts | 93 + .../{remove-region.js => remove-region.ts} | 12 +- ...lid-product.js => remove-valid-product.ts} | 12 +- .../routes/admin/discounts/update-discount.js | 95 - .../routes/admin/discounts/update-discount.ts | 158 + ...e-draft-order.js => create-draft-order.ts} | 178 +- ...reate-line-item.js => create-line-item.ts} | 89 +- ...e-draft-order.js => delete-draft-order.ts} | 6 +- ...elete-line-item.js => delete-line-item.ts} | 26 +- .../admin/draft-orders/get-draft-order.js | 45 - .../admin/draft-orders/get-draft-order.ts | 49 + .../admin/draft-orders/{index.js => index.ts} | 38 +- .../admin/draft-orders/list-draft-orders.js | 47 - .../admin/draft-orders/list-draft-orders.ts | 76 + ...egister-payment.js => register-payment.ts} | 25 +- ...e-draft-order.js => update-draft-order.ts} | 99 +- ...pdate-line-item.js => update-line-item.ts} | 78 +- ...reate-gift-card.js => create-gift-card.ts} | 53 +- ...elete-gift-card.js => delete-gift-card.ts} | 1 + .../{get-gift-card.js => get-gift-card.ts} | 7 +- .../admin/gift-cards/{index.js => index.ts} | 25 +- .../admin/gift-cards/list-gift-cards.js | 43 - .../admin/gift-cards/list-gift-cards.ts | 68 + ...pdate-gift-card.js => update-gift-card.ts} | 51 +- .../notes/{create-note.js => create-note.ts} | 40 +- .../notes/{delete-note.js => delete-note.ts} | 7 +- .../admin/notes/{get-note.js => get-note.ts} | 7 +- .../routes/admin/notes/{index.js => index.ts} | 18 + .../src/api/routes/admin/notes/list-notes.js | 38 - .../src/api/routes/admin/notes/list-notes.ts | 68 + .../notes/{update-note.js => update-note.ts} | 27 +- .../notifications/{index.js => index.ts} | 18 +- .../admin/notifications/list-notifications.js | 79 - .../admin/notifications/list-notifications.ts | 151 + .../notifications/resend-notification.js | 51 - .../notifications/resend-notification.ts | 70 + ...pping-method.js => add-shipping-method.ts} | 58 +- .../api/routes/admin/orders/archive-order.js | 13 - .../api/routes/admin/orders/archive-order.ts | 35 + .../{cancel-claim.js => cancel-claim.ts} | 12 +- ...t-claim.js => cancel-fulfillment-claim.ts} | 19 +- ...ent-swap.js => cancel-fulfillment-swap.ts} | 19 +- ...l-fulfillment.js => cancel-fulfillment.ts} | 13 +- .../{cancel-order.js => cancel-order.ts} | 10 +- .../orders/{cancel-swap.js => cancel-swap.ts} | 12 +- ...{capture-payment.js => capture-payment.ts} | 10 +- .../api/routes/admin/orders/complete-order.js | 13 - .../api/routes/admin/orders/complete-order.ts | 35 + ...m-shipment.js => create-claim-shipment.ts} | 45 +- .../{create-claim.js => create-claim.ts} | 283 +- ...e-fulfillment.js => create-fulfillment.ts} | 77 +- .../api/routes/admin/orders/create-order.js | 42 - .../api/routes/admin/orders/create-order.ts | 203 + ...{create-shipment.js => create-shipment.ts} | 54 +- ...ap-shipment.js => create-swap-shipment.ts} | 59 +- .../orders/{create-swap.js => create-swap.ts} | 167 +- ...{delete-metadata.js => delete-metadata.ts} | 5 +- .../{fulfill-claim.js => fulfill-claim.ts} | 46 +- .../{fulfill-swap.js => fulfill-swap.ts} | 46 +- .../orders/{get-order.js => get-order.ts} | 10 +- .../admin/orders/{index.js => index.ts} | 58 +- .../api/routes/admin/orders/list-orders.js | 80 - .../api/routes/admin/orders/list-orders.ts | 115 + ...wap-payment.js => process-swap-payment.ts} | 15 +- .../{receive-swap.js => receive-swap.ts} | 62 +- .../{refund-payment.js => refund-payment.ts} | 61 +- .../{request-return.js => request-return.ts} | 109 +- .../{update-claim.js => update-claim.ts} | 147 +- .../api/routes/admin/orders/update-order.js | 44 - .../api/routes/admin/orders/update-order.ts | 191 + .../products/__tests__/create-product.js | 4 +- .../admin/products/__tests__/list-products.js | 2 +- .../products/__tests__/update-product.js | 4 +- .../products/__tests__/update-variant.js | 4 +- .../products/{add-option.js => add-option.ts} | 33 +- .../{create-product.js => create-product.ts} | 383 +- .../{create-variant.js => create-variant.ts} | 184 +- .../{delete-option.js => delete-option.ts} | 12 +- .../{delete-product.js => delete-product.ts} | 5 +- .../{delete-variant.js => delete-variant.ts} | 14 +- .../{get-product.js => get-product.ts} | 10 +- .../{get-variants.js => get-variants.ts} | 5 +- .../admin/products/{index.js => index.ts} | 58 +- .../routes/admin/products/list-products.js | 91 - .../routes/admin/products/list-products.ts | 198 + .../admin/products/list-tag-usage-count.js | 7 - .../admin/products/list-tag-usage-count.ts | 9 + .../products/{list-types.js => list-types.ts} | 5 +- .../api/routes/admin/products/set-metadata.js | 28 - .../api/routes/admin/products/set-metadata.ts | 66 + .../{update-option.js => update-option.ts} | 34 +- .../{update-product.js => update-product.ts} | 339 +- .../{update-variant.js => update-variant.ts} | 185 +- .../admin/regions/__tests__/list-regions.js | 44 +- .../{add-country.js => add-country.ts} | 38 +- .../admin/regions/add-fulfillment-provider.js | 50 - .../admin/regions/add-fulfillment-provider.ts | 56 + .../admin/regions/add-payment-provider.js | 50 - .../admin/regions/add-payment-provider.ts | 57 + .../{create-region.js => create-region.ts} | 65 +- ...{delete-metadata.js => delete-metadata.ts} | 13 +- .../{delete-region.js => delete-region.ts} | 7 +- ...-options.js => get-fulfillment-options.ts} | 21 +- .../regions/{get-region.js => get-region.ts} | 14 +- .../admin/regions/{index.js => index.ts} | 26 +- .../api/routes/admin/regions/list-regions.js | 40 - .../api/routes/admin/regions/list-regions.ts | 75 + .../{remove-country.js => remove-country.ts} | 11 +- ...ider.js => remove-fulfillment-provider.ts} | 10 +- ...provider.js => remove-payment-provider.ts} | 13 +- .../api/routes/admin/regions/set-metadata.js | 26 - .../api/routes/admin/regions/set-metadata.ts | 53 + .../{update-region.js => update-region.ts} | 65 +- .../{create-reason.js => create-reason.ts} | 58 +- .../{delete-reason.js => delete-reason.ts} | 7 +- .../{get-reason.js => get-reason.ts} | 15 +- .../return-reasons/{index.js => index.ts} | 15 +- .../{list-reasons.js => list-reasons.ts} | 15 +- .../{update-reason.js => update-reason.ts} | 52 +- .../{cancel-return.js => cancel-return.ts} | 14 +- .../admin/returns/{index.js => index.ts} | 18 + .../api/routes/admin/returns/list-returns.js | 38 - .../api/routes/admin/returns/list-returns.ts | 62 + .../{receive-return.js => receive-return.ts} | 63 +- ...-profile.js => create-shipping-profile.ts} | 27 +- ...-profile.js => delete-shipping-profile.ts} | 7 +- ...ing-profile.js => get-shipping-profile.ts} | 15 +- .../shipping-profiles/{index.js => index.ts} | 24 +- ...-profiles.js => list-shipping-profiles.ts} | 7 +- ...-profile.js => update-shipping-profile.ts} | 28 +- .../admin/store/__tests__/update-store.js | 26 + .../{add-currency.js => add-currency.ts} | 4 +- .../src/api/routes/admin/store/get-store.js | 38 - .../src/api/routes/admin/store/get-store.ts | 41 + .../routes/admin/store/{index.js => index.ts} | 9 + ...providers.js => list-payment-providers.ts} | 6 +- ...{remove-currency.js => remove-currency.ts} | 5 +- .../{update-store.js => update-store.ts} | 45 +- .../admin/swaps/{get-swap.js => get-swap.ts} | 10 +- .../routes/admin/swaps/{index.js => index.ts} | 17 +- .../swaps/{list-swaps.js => list-swaps.ts} | 22 +- .../src/api/routes/admin/users/create-user.js | 22 - .../src/api/routes/admin/users/create-user.ts | 62 + .../src/api/routes/admin/users/delete-user.js | 12 - .../src/api/routes/admin/users/delete-user.ts | 40 + .../src/api/routes/admin/users/get-user.js | 8 - .../src/api/routes/admin/users/get-user.ts | 30 + .../routes/admin/users/{index.js => index.ts} | 0 .../src/api/routes/admin/users/list-users.js | 6 - .../src/api/routes/admin/users/list-users.ts | 28 + .../admin/users/reset-password-token.js | 19 - .../admin/users/reset-password-token.ts | 42 + .../api/routes/admin/users/reset-password.js | 27 - .../api/routes/admin/users/reset-password.ts | 71 + .../src/api/routes/admin/users/update-user.js | 18 - .../src/api/routes/admin/users/update-user.ts | 45 + .../admin/variants/{index.js => index.ts} | 19 +- .../routes/admin/variants/list-variants.js | 43 - .../routes/admin/variants/list-variants.ts | 76 + .../{create-session.js => create-session.ts} | 38 +- .../{delete-session.js => delete-session.ts} | 0 .../store/auth/{exists.js => exists.ts} | 4 +- .../auth/{get-session.js => get-session.ts} | 7 +- .../routes/store/auth/{index.js => index.ts} | 14 + .../store/carts/__tests__/complete-cart.js | 1 - .../store/carts/__tests__/update-cart.js | 8 +- .../store/carts/__tests__/update-line-item.js | 1 - .../carts/__tests__/update-payment-method.js | 1 - .../routes/store/carts/add-shipping-method.js | 66 - .../routes/store/carts/add-shipping-method.ts | 71 + .../api/routes/store/carts/complete-cart.js | 282 -- .../api/routes/store/carts/complete-cart.ts | 286 ++ .../src/api/routes/store/carts/create-cart.js | 143 - .../src/api/routes/store/carts/create-cart.ts | 170 + .../routes/store/carts/create-line-item.js | 75 - .../routes/store/carts/create-line-item.ts | 76 + ...sessions.js => create-payment-sessions.ts} | 21 +- .../api/routes/store/carts/delete-discount.js | 53 - .../api/routes/store/carts/delete-discount.ts | 51 + .../routes/store/carts/delete-line-item.js | 53 - .../routes/store/carts/delete-line-item.ts | 51 + ...t-session.js => delete-payment-session.ts} | 21 +- .../src/api/routes/store/carts/get-cart.js | 54 - .../src/api/routes/store/carts/get-cart.ts | 51 + .../routes/store/carts/{index.js => index.ts} | 23 +- ...-session.js => refresh-payment-session.ts} | 46 +- .../routes/store/carts/set-payment-session.js | 49 - .../routes/store/carts/set-payment-session.ts | 48 + .../carts/{update-cart.js => update-cart.ts} | 134 +- .../routes/store/carts/update-line-item.js | 86 - .../routes/store/carts/update-line-item.ts | 88 + .../store/carts/update-payment-method.js | 30 - .../store/carts/update-payment-method.ts | 63 + .../store/carts/update-payment-session.js | 53 - .../store/carts/update-payment-session.ts | 51 + .../collections/__tests__/list-collections.js | 72 + .../{get-collection.js => get-collection.ts} | 15 +- .../src/api/routes/store/collections/index.js | 16 - .../src/api/routes/store/collections/index.ts | 29 + .../store/collections/list-collections.js | 37 - .../store/collections/list-collections.ts | 62 + .../customers/__tests__/create-customer.js | 10 +- .../__tests__/reset-password-token.js | 1 - .../customers/__tests__/update-customer.js | 40 +- .../routes/store/customers/create-address.js | 53 - .../routes/store/customers/create-address.ts | 60 + ...{create-customer.js => create-customer.ts} | 48 +- .../{delete-address.js => delete-address.ts} | 16 +- .../{get-customer.js => get-customer.ts} | 13 +- ...ment-methods.js => get-payment-methods.ts} | 25 +- .../store/customers/{index.js => index.ts} | 36 +- .../api/routes/store/customers/list-orders.js | 62 - .../api/routes/store/customers/list-orders.ts | 105 + .../store/customers/reset-password-token.js | 31 - .../store/customers/reset-password-token.ts | 39 + .../{reset-password.js => reset-password.ts} | 42 +- .../{update-address.js => update-address.ts} | 37 +- ...{update-customer.js => update-customer.ts} | 62 +- .../{get-gift-card.js => get-gift-card.ts} | 10 +- .../src/api/routes/store/gift-cards/index.js | 20 - .../src/api/routes/store/gift-cards/index.ts | 27 + packages/medusa/src/api/routes/store/index.js | 16 +- .../orders/__tests__/get-order-by-cart.js | 15 +- .../store/orders/__tests__/get-order.js | 7 +- .../store/orders/__tests__/lookup-order.js | 21 + ...-order-by-cart.js => get-order-by-cart.ts} | 9 +- .../orders/{get-order.js => get-order.ts} | 20 +- .../store/orders/{index.js => index.ts} | 16 +- .../api/routes/store/orders/lookup-order.js | 66 - .../api/routes/store/orders/lookup-order.ts | 77 + .../store/products/__tests__/get-product.js | 11 +- .../store/products/__tests__/list-products.js | 10 +- .../routes/store/products/__tests__/search.js | 42 + .../{get-product.js => get-product.ts} | 7 +- .../store/products/{index.js => index.ts} | 21 +- .../routes/store/products/list-products.js | 57 - .../routes/store/products/list-products.ts | 80 + .../src/api/routes/store/products/search.js | 31 - .../src/api/routes/store/products/search.ts | 46 + .../regions/{get-region.js => get-region.ts} | 5 +- .../store/regions/{index.js => index.ts} | 12 + .../{list-regions.js => list-regions.ts} | 21 +- .../{get-reason.js => get-reason.ts} | 26 +- .../return-reasons/{index.js => index.ts} | 16 +- .../store/return-reasons/list-reasons.js | 37 - .../store/return-reasons/list-reasons.ts | 39 + .../{create-return.js => create-return.ts} | 115 +- .../store/returns/{index.js => index.ts} | 7 + .../shipping-options/{index.js => index.ts} | 8 + .../{list-options.js => list-options.ts} | 38 +- ...ng-options.js => list-shipping-options.ts} | 20 +- .../swaps/{create-swap.js => create-swap.ts} | 134 +- ...et-swap-by-cart.js => get-swap-by-cart.ts} | 5 +- .../routes/store/swaps/{index.js => index.ts} | 12 +- .../{get-variant.js => get-variant.ts} | 10 +- .../src/api/routes/store/variants/index.js | 15 - .../src/api/routes/store/variants/index.ts | 28 + .../routes/store/variants/list-variants.js | 48 - .../routes/store/variants/list-variants.ts | 81 + packages/medusa/src/helpers/test-request.js | 29 +- packages/medusa/src/index.js | 28 +- packages/medusa/src/loaders/api.js | 1 - packages/medusa/src/loaders/index.js | 33 +- packages/medusa/src/models/cart.ts | 70 +- packages/medusa/src/models/draft-order.ts | 25 +- packages/medusa/src/models/money-amount.ts | 34 +- packages/medusa/src/models/order.ts | 108 +- .../medusa/src/models/product-option-value.ts | 32 +- packages/medusa/src/repositories/cart.ts | 4 +- packages/medusa/src/repositories/product.ts | 28 +- packages/medusa/src/repositories/swap.ts | 6 +- .../medusa/src/services/__mocks__/customer.js | 16 +- .../medusa/src/services/__mocks__/order.js | 31 +- .../medusa/src/services/__mocks__/search.js | 9 + .../medusa/src/services/__tests__/cart.js | 2 +- .../src/services/__tests__/product-variant.js | 39 - .../medusa/src/services/{auth.js => auth.ts} | 108 +- packages/medusa/src/services/cart.js | 4 +- packages/medusa/src/services/claim.js | 8 +- packages/medusa/src/services/customer.js | 13 +- packages/medusa/src/services/discount.js | 6 +- packages/medusa/src/services/event-bus.js | 8 +- packages/medusa/src/services/index.ts | 37 + packages/medusa/src/services/note.js | 15 +- packages/medusa/src/services/order.js | 16 +- ...{product-variant.js => product-variant.ts} | 227 +- packages/medusa/src/services/product.js | 4 +- packages/medusa/src/services/return.js | 6 +- packages/medusa/src/services/swap.js | 4 +- .../medusa/src/services/{user.js => user.ts} | 99 +- packages/medusa/src/types/auth.ts | 8 + packages/medusa/src/types/common.ts | 161 + packages/medusa/src/types/customers.ts | 7 + packages/medusa/src/types/discount.ts | 9 + packages/medusa/src/types/draft-orders.ts | 1 + packages/medusa/src/types/note.ts | 26 + packages/medusa/src/types/orders.ts | 128 + packages/medusa/src/types/product-variant.ts | 132 + packages/medusa/src/types/user.ts | 30 + packages/medusa/src/types/validators/xor.ts | 21 + packages/medusa/src/utils/db-aware-column.ts | 16 +- .../medusa/src/utils/manual-auto-increment.ts | 16 +- packages/medusa/src/utils/naming-strategy.ts | 6 +- packages/medusa/src/utils/validator.ts | 43 + .../src/utils/validators/date-transform.ts | 2 + .../src/utils/validators/greater-than.ts | 34 + .../medusa/src/utils/validators/is-type.ts | 120 + .../src/utils/validators/iso8601-duration.ts | 26 + packages/medusa/tsconfig.json | 25 +- packages/medusa/yarn.lock | 1970 +++++---- yarn.lock | 1593 ++++--- 413 files changed, 20961 insertions(+), 10353 deletions(-) create mode 100644 integration-tests/api/__tests__/admin/__snapshots__/colllections.js.snap create mode 100644 integration-tests/api/__tests__/admin/colllections.js rename packages/medusa-core-utils/src/{errors.js => errors.ts} (67%) create mode 100644 packages/medusa-core-utils/tsconfig.json create mode 100644 packages/medusa-js/.gitignore create mode 100644 packages/medusa-js/README.md create mode 100644 packages/medusa-js/jestconfig.json create mode 100644 packages/medusa-js/package.json create mode 100644 packages/medusa-js/src/error.ts create mode 100644 packages/medusa-js/src/index.ts create mode 100644 packages/medusa-js/src/request.ts create mode 100644 packages/medusa-js/src/resources/addresses.ts create mode 100644 packages/medusa-js/src/resources/auth.ts create mode 100644 packages/medusa-js/src/resources/base.ts create mode 100644 packages/medusa-js/src/resources/carts.ts create mode 100644 packages/medusa-js/src/resources/collections.ts create mode 100644 packages/medusa-js/src/resources/customers.ts create mode 100644 packages/medusa-js/src/resources/gift-cards.ts create mode 100644 packages/medusa-js/src/resources/line-items.ts create mode 100644 packages/medusa-js/src/resources/orders.ts create mode 100644 packages/medusa-js/src/resources/payment-methods.ts create mode 100644 packages/medusa-js/src/resources/product-variants.ts create mode 100644 packages/medusa-js/src/resources/products.ts create mode 100644 packages/medusa-js/src/resources/regions.ts create mode 100644 packages/medusa-js/src/resources/return-reasons.ts create mode 100644 packages/medusa-js/src/resources/returns.ts create mode 100644 packages/medusa-js/src/resources/shipping-options.ts create mode 100644 packages/medusa-js/src/resources/swaps.ts create mode 100644 packages/medusa-js/tsconfig.json create mode 100644 packages/medusa-js/yarn.lock delete mode 100644 packages/medusa-plugin-permissions/src/services/__mocks__/permission.js delete mode 100644 packages/medusa-plugin-permissions/src/services/__tests__/permission.js create mode 100644 packages/medusa/index.d.ts delete mode 100644 packages/medusa/src/api/routes/admin/apps/authorize-app.js create mode 100644 packages/medusa/src/api/routes/admin/apps/authorize-app.ts rename packages/medusa/src/api/routes/admin/apps/{index.js => index.ts} (71%) delete mode 100644 packages/medusa/src/api/routes/admin/apps/list.js create mode 100644 packages/medusa/src/api/routes/admin/apps/list.ts delete mode 100644 packages/medusa/src/api/routes/admin/auth/create-session.js create mode 100644 packages/medusa/src/api/routes/admin/auth/create-session.ts rename packages/medusa/src/api/routes/admin/auth/{delete-session.js => delete-session.ts} (92%) rename packages/medusa/src/api/routes/admin/auth/{get-session.js => get-session.ts} (53%) rename packages/medusa/src/api/routes/admin/auth/{index.js => index.ts} (66%) rename packages/medusa/src/api/routes/admin/collections/{create-collection.js => create-collection.ts} (56%) rename packages/medusa/src/api/routes/admin/collections/{delete-collection.js => delete-collection.ts} (68%) rename packages/medusa/src/api/routes/admin/collections/{get-collection.js => get-collection.ts} (63%) delete mode 100644 packages/medusa/src/api/routes/admin/collections/index.js create mode 100644 packages/medusa/src/api/routes/admin/collections/index.ts delete mode 100644 packages/medusa/src/api/routes/admin/collections/list-collections.js create mode 100644 packages/medusa/src/api/routes/admin/collections/list-collections.ts rename packages/medusa/src/api/routes/admin/collections/{update-collection.js => update-collection.ts} (57%) rename packages/medusa/src/api/routes/admin/customers/{create-customer.js => create-customer.ts} (53%) rename packages/medusa/src/api/routes/admin/customers/{get-customer.js => get-customer.ts} (79%) rename packages/medusa/src/api/routes/admin/customers/{index.js => index.ts} (51%) delete mode 100644 packages/medusa/src/api/routes/admin/customers/list-customers.js create mode 100644 packages/medusa/src/api/routes/admin/customers/list-customers.ts rename packages/medusa/src/api/routes/admin/customers/{update-customer.js => update-customer.ts} (59%) rename packages/medusa/src/api/routes/admin/discounts/{add-region.js => add-region.ts} (63%) rename packages/medusa/src/api/routes/admin/discounts/{add-valid-product.js => add-valid-product.ts} (55%) rename packages/medusa/src/api/routes/admin/discounts/{create-discount.js => create-discount.ts} (52%) rename packages/medusa/src/api/routes/admin/discounts/{create-dynamic-code.js => create-dynamic-code.ts} (60%) rename packages/medusa/src/api/routes/admin/discounts/{delete-discount.js => delete-discount.ts} (83%) rename packages/medusa/src/api/routes/admin/discounts/{delete-dynamic-code.js => delete-dynamic-code.ts} (84%) rename packages/medusa/src/api/routes/admin/discounts/{get-discount-by-code.js => get-discount-by-code.ts} (65%) rename packages/medusa/src/api/routes/admin/discounts/{get-discount.js => get-discount.ts} (65%) rename packages/medusa/src/api/routes/admin/discounts/{index.js => index.ts} (68%) delete mode 100644 packages/medusa/src/api/routes/admin/discounts/list-discounts.js create mode 100644 packages/medusa/src/api/routes/admin/discounts/list-discounts.ts rename packages/medusa/src/api/routes/admin/discounts/{remove-region.js => remove-region.ts} (72%) rename packages/medusa/src/api/routes/admin/discounts/{remove-valid-product.js => remove-valid-product.ts} (72%) delete mode 100644 packages/medusa/src/api/routes/admin/discounts/update-discount.js create mode 100644 packages/medusa/src/api/routes/admin/discounts/update-discount.ts rename packages/medusa/src/api/routes/admin/draft-orders/{create-draft-order.js => create-draft-order.ts} (59%) rename packages/medusa/src/api/routes/admin/draft-orders/{create-line-item.js => create-line-item.ts} (56%) rename packages/medusa/src/api/routes/admin/draft-orders/{delete-draft-order.js => delete-draft-order.ts} (83%) rename packages/medusa/src/api/routes/admin/draft-orders/{delete-line-item.js => delete-line-item.ts} (63%) delete mode 100644 packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.js create mode 100644 packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts rename packages/medusa/src/api/routes/admin/draft-orders/{index.js => index.ts} (61%) delete mode 100644 packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.js create mode 100644 packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts rename packages/medusa/src/api/routes/admin/draft-orders/{register-payment.js => register-payment.ts} (72%) rename packages/medusa/src/api/routes/admin/draft-orders/{update-draft-order.js => update-draft-order.ts} (57%) rename packages/medusa/src/api/routes/admin/draft-orders/{update-line-item.js => update-line-item.ts} (60%) rename packages/medusa/src/api/routes/admin/gift-cards/{create-gift-card.js => create-gift-card.ts} (63%) rename packages/medusa/src/api/routes/admin/gift-cards/{delete-gift-card.js => delete-gift-card.ts} (97%) rename packages/medusa/src/api/routes/admin/gift-cards/{get-gift-card.js => get-gift-card.ts} (78%) rename packages/medusa/src/api/routes/admin/gift-cards/{index.js => index.ts} (57%) delete mode 100644 packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.js create mode 100644 packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts rename packages/medusa/src/api/routes/admin/gift-cards/{update-gift-card.js => update-gift-card.ts} (64%) rename packages/medusa/src/api/routes/admin/notes/{create-note.js => create-note.ts} (60%) rename packages/medusa/src/api/routes/admin/notes/{delete-note.js => delete-note.ts} (76%) rename packages/medusa/src/api/routes/admin/notes/{get-note.js => get-note.ts} (76%) rename packages/medusa/src/api/routes/admin/notes/{index.js => index.ts} (54%) delete mode 100644 packages/medusa/src/api/routes/admin/notes/list-notes.js create mode 100644 packages/medusa/src/api/routes/admin/notes/list-notes.ts rename packages/medusa/src/api/routes/admin/notes/{update-note.js => update-note.ts} (58%) rename packages/medusa/src/api/routes/admin/notifications/{index.js => index.ts} (57%) delete mode 100644 packages/medusa/src/api/routes/admin/notifications/list-notifications.js create mode 100644 packages/medusa/src/api/routes/admin/notifications/list-notifications.ts delete mode 100644 packages/medusa/src/api/routes/admin/notifications/resend-notification.js create mode 100644 packages/medusa/src/api/routes/admin/notifications/resend-notification.ts rename packages/medusa/src/api/routes/admin/orders/{add-shipping-method.js => add-shipping-method.ts} (55%) delete mode 100644 packages/medusa/src/api/routes/admin/orders/archive-order.js create mode 100644 packages/medusa/src/api/routes/admin/orders/archive-order.ts rename packages/medusa/src/api/routes/admin/orders/{cancel-claim.js => cancel-claim.ts} (71%) rename packages/medusa/src/api/routes/admin/orders/{cancel-fulfillment-claim.js => cancel-fulfillment-claim.ts} (75%) rename packages/medusa/src/api/routes/admin/orders/{cancel-fulfillment-swap.js => cancel-fulfillment-swap.ts} (75%) rename packages/medusa/src/api/routes/admin/orders/{cancel-fulfillment.js => cancel-fulfillment.ts} (73%) rename packages/medusa/src/api/routes/admin/orders/{cancel-order.js => cancel-order.ts} (72%) rename packages/medusa/src/api/routes/admin/orders/{cancel-swap.js => cancel-swap.ts} (71%) rename packages/medusa/src/api/routes/admin/orders/{capture-payment.js => capture-payment.ts} (68%) delete mode 100644 packages/medusa/src/api/routes/admin/orders/complete-order.js create mode 100644 packages/medusa/src/api/routes/admin/orders/complete-order.ts rename packages/medusa/src/api/routes/admin/orders/{create-claim-shipment.js => create-claim-shipment.ts} (54%) rename packages/medusa/src/api/routes/admin/orders/{create-claim.js => create-claim.ts} (60%) rename packages/medusa/src/api/routes/admin/orders/{create-fulfillment.js => create-fulfillment.ts} (55%) delete mode 100644 packages/medusa/src/api/routes/admin/orders/create-order.js create mode 100644 packages/medusa/src/api/routes/admin/orders/create-order.ts rename packages/medusa/src/api/routes/admin/orders/{create-shipment.js => create-shipment.ts} (55%) rename packages/medusa/src/api/routes/admin/orders/{create-swap-shipment.js => create-swap-shipment.ts} (54%) rename packages/medusa/src/api/routes/admin/orders/{create-swap.js => create-swap.ts} (68%) rename packages/medusa/src/api/routes/admin/orders/{delete-metadata.js => delete-metadata.ts} (83%) rename packages/medusa/src/api/routes/admin/orders/{fulfill-claim.js => fulfill-claim.ts} (56%) rename packages/medusa/src/api/routes/admin/orders/{fulfill-swap.js => fulfill-swap.ts} (57%) rename packages/medusa/src/api/routes/admin/orders/{get-order.js => get-order.ts} (65%) rename packages/medusa/src/api/routes/admin/orders/{index.js => index.ts} (80%) delete mode 100644 packages/medusa/src/api/routes/admin/orders/list-orders.js create mode 100644 packages/medusa/src/api/routes/admin/orders/list-orders.ts rename packages/medusa/src/api/routes/admin/orders/{process-swap-payment.js => process-swap-payment.ts} (67%) rename packages/medusa/src/api/routes/admin/orders/{receive-swap.js => receive-swap.ts} (56%) rename packages/medusa/src/api/routes/admin/orders/{refund-payment.js => refund-payment.ts} (56%) rename packages/medusa/src/api/routes/admin/orders/{request-return.js => request-return.ts} (79%) rename packages/medusa/src/api/routes/admin/orders/{update-claim.js => update-claim.ts} (61%) delete mode 100644 packages/medusa/src/api/routes/admin/orders/update-order.js create mode 100644 packages/medusa/src/api/routes/admin/orders/update-order.ts rename packages/medusa/src/api/routes/admin/products/{add-option.js => add-option.ts} (56%) rename packages/medusa/src/api/routes/admin/products/{create-product.js => create-product.ts} (62%) rename packages/medusa/src/api/routes/admin/products/{create-variant.js => create-variant.ts} (61%) rename packages/medusa/src/api/routes/admin/products/{delete-option.js => delete-option.ts} (80%) rename packages/medusa/src/api/routes/admin/products/{delete-product.js => delete-product.ts} (84%) rename packages/medusa/src/api/routes/admin/products/{delete-variant.js => delete-variant.ts} (70%) rename packages/medusa/src/api/routes/admin/products/{get-product.js => get-product.ts} (65%) rename packages/medusa/src/api/routes/admin/products/{get-variants.js => get-variants.ts} (82%) rename packages/medusa/src/api/routes/admin/products/{index.js => index.ts} (71%) delete mode 100644 packages/medusa/src/api/routes/admin/products/list-products.js create mode 100644 packages/medusa/src/api/routes/admin/products/list-products.ts delete mode 100644 packages/medusa/src/api/routes/admin/products/list-tag-usage-count.js create mode 100644 packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts rename packages/medusa/src/api/routes/admin/products/{list-types.js => list-types.ts} (78%) delete mode 100644 packages/medusa/src/api/routes/admin/products/set-metadata.js create mode 100644 packages/medusa/src/api/routes/admin/products/set-metadata.ts rename packages/medusa/src/api/routes/admin/products/{update-option.js => update-option.ts} (57%) rename packages/medusa/src/api/routes/admin/products/{update-product.js => update-product.ts} (66%) rename packages/medusa/src/api/routes/admin/products/{update-variant.js => update-variant.ts} (62%) rename packages/medusa/src/api/routes/admin/regions/{add-country.js => add-country.ts} (50%) delete mode 100644 packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.js create mode 100644 packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts delete mode 100644 packages/medusa/src/api/routes/admin/regions/add-payment-provider.js create mode 100644 packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts rename packages/medusa/src/api/routes/admin/regions/{create-region.js => create-region.ts} (58%) rename packages/medusa/src/api/routes/admin/regions/{delete-metadata.js => delete-metadata.ts} (62%) rename packages/medusa/src/api/routes/admin/regions/{delete-region.js => delete-region.ts} (84%) rename packages/medusa/src/api/routes/admin/regions/{get-fulfillment-options.js => get-fulfillment-options.ts} (61%) rename packages/medusa/src/api/routes/admin/regions/{get-region.js => get-region.ts} (56%) rename packages/medusa/src/api/routes/admin/regions/{index.js => index.ts} (76%) delete mode 100644 packages/medusa/src/api/routes/admin/regions/list-regions.js create mode 100644 packages/medusa/src/api/routes/admin/regions/list-regions.ts rename packages/medusa/src/api/routes/admin/regions/{remove-country.js => remove-country.ts} (72%) rename packages/medusa/src/api/routes/admin/regions/{remove-fulfillment-provider.js => remove-fulfillment-provider.ts} (73%) rename packages/medusa/src/api/routes/admin/regions/{remove-payment-provider.js => remove-payment-provider.ts} (67%) delete mode 100644 packages/medusa/src/api/routes/admin/regions/set-metadata.js create mode 100644 packages/medusa/src/api/routes/admin/regions/set-metadata.ts rename packages/medusa/src/api/routes/admin/regions/{update-region.js => update-region.ts} (62%) rename packages/medusa/src/api/routes/admin/return-reasons/{create-reason.js => create-reason.ts} (52%) rename packages/medusa/src/api/routes/admin/return-reasons/{delete-reason.js => delete-reason.ts} (82%) rename packages/medusa/src/api/routes/admin/return-reasons/{get-reason.js => get-reason.ts} (64%) rename packages/medusa/src/api/routes/admin/return-reasons/{index.js => index.ts} (73%) rename packages/medusa/src/api/routes/admin/return-reasons/{list-reasons.js => list-reasons.ts} (64%) rename packages/medusa/src/api/routes/admin/return-reasons/{update-reason.js => update-reason.ts} (57%) rename packages/medusa/src/api/routes/admin/returns/{cancel-return.js => cancel-return.ts} (72%) rename packages/medusa/src/api/routes/admin/returns/{index.js => index.ts} (55%) delete mode 100644 packages/medusa/src/api/routes/admin/returns/list-returns.js create mode 100644 packages/medusa/src/api/routes/admin/returns/list-returns.ts rename packages/medusa/src/api/routes/admin/returns/{receive-return.js => receive-return.ts} (61%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{create-shipping-profile.js => create-shipping-profile.ts} (57%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{delete-shipping-profile.js => delete-shipping-profile.ts} (83%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{get-shipping-profile.js => get-shipping-profile.ts} (64%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{index.js => index.ts} (55%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{list-shipping-profiles.js => list-shipping-profiles.ts} (76%) rename packages/medusa/src/api/routes/admin/shipping-profiles/{update-shipping-profile.js => update-shipping-profile.ts} (63%) rename packages/medusa/src/api/routes/admin/store/{add-currency.js => add-currency.ts} (82%) delete mode 100644 packages/medusa/src/api/routes/admin/store/get-store.js create mode 100644 packages/medusa/src/api/routes/admin/store/get-store.ts rename packages/medusa/src/api/routes/admin/store/{index.js => index.ts} (77%) rename packages/medusa/src/api/routes/admin/store/{list-payment-providers.js => list-payment-providers.ts} (77%) rename packages/medusa/src/api/routes/admin/store/{remove-currency.js => remove-currency.ts} (82%) rename packages/medusa/src/api/routes/admin/store/{update-store.js => update-store.ts} (55%) rename packages/medusa/src/api/routes/admin/swaps/{get-swap.js => get-swap.ts} (65%) rename packages/medusa/src/api/routes/admin/swaps/{index.js => index.ts} (71%) rename packages/medusa/src/api/routes/admin/swaps/{list-swaps.js => list-swaps.ts} (55%) delete mode 100644 packages/medusa/src/api/routes/admin/users/create-user.js create mode 100644 packages/medusa/src/api/routes/admin/users/create-user.ts delete mode 100644 packages/medusa/src/api/routes/admin/users/delete-user.js create mode 100644 packages/medusa/src/api/routes/admin/users/delete-user.ts delete mode 100644 packages/medusa/src/api/routes/admin/users/get-user.js create mode 100644 packages/medusa/src/api/routes/admin/users/get-user.ts rename packages/medusa/src/api/routes/admin/users/{index.js => index.ts} (100%) delete mode 100644 packages/medusa/src/api/routes/admin/users/list-users.js create mode 100644 packages/medusa/src/api/routes/admin/users/list-users.ts delete mode 100644 packages/medusa/src/api/routes/admin/users/reset-password-token.js create mode 100644 packages/medusa/src/api/routes/admin/users/reset-password-token.ts delete mode 100644 packages/medusa/src/api/routes/admin/users/reset-password.js create mode 100644 packages/medusa/src/api/routes/admin/users/reset-password.ts delete mode 100644 packages/medusa/src/api/routes/admin/users/update-user.js create mode 100644 packages/medusa/src/api/routes/admin/users/update-user.ts rename packages/medusa/src/api/routes/admin/variants/{index.js => index.ts} (60%) delete mode 100644 packages/medusa/src/api/routes/admin/variants/list-variants.js create mode 100644 packages/medusa/src/api/routes/admin/variants/list-variants.ts rename packages/medusa/src/api/routes/store/auth/{create-session.js => create-session.ts} (61%) rename packages/medusa/src/api/routes/store/auth/{delete-session.js => delete-session.ts} (100%) rename packages/medusa/src/api/routes/store/auth/{exists.js => exists.ts} (83%) rename packages/medusa/src/api/routes/store/auth/{get-session.js => get-session.ts} (79%) rename packages/medusa/src/api/routes/store/auth/{index.js => index.ts} (64%) delete mode 100644 packages/medusa/src/api/routes/store/carts/add-shipping-method.js create mode 100644 packages/medusa/src/api/routes/store/carts/add-shipping-method.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/complete-cart.js create mode 100644 packages/medusa/src/api/routes/store/carts/complete-cart.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/create-cart.js create mode 100644 packages/medusa/src/api/routes/store/carts/create-cart.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/create-line-item.js create mode 100644 packages/medusa/src/api/routes/store/carts/create-line-item.ts rename packages/medusa/src/api/routes/store/carts/{create-payment-sessions.js => create-payment-sessions.ts} (60%) delete mode 100644 packages/medusa/src/api/routes/store/carts/delete-discount.js create mode 100644 packages/medusa/src/api/routes/store/carts/delete-discount.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/delete-line-item.js create mode 100644 packages/medusa/src/api/routes/store/carts/delete-line-item.ts rename packages/medusa/src/api/routes/store/carts/{delete-payment-session.js => delete-payment-session.ts} (64%) delete mode 100644 packages/medusa/src/api/routes/store/carts/get-cart.js create mode 100644 packages/medusa/src/api/routes/store/carts/get-cart.ts rename packages/medusa/src/api/routes/store/carts/{index.js => index.ts} (79%) rename packages/medusa/src/api/routes/store/carts/{refresh-payment-session.js => refresh-payment-session.ts} (56%) delete mode 100644 packages/medusa/src/api/routes/store/carts/set-payment-session.js create mode 100644 packages/medusa/src/api/routes/store/carts/set-payment-session.ts rename packages/medusa/src/api/routes/store/carts/{update-cart.js => update-cart.ts} (53%) delete mode 100644 packages/medusa/src/api/routes/store/carts/update-line-item.js create mode 100644 packages/medusa/src/api/routes/store/carts/update-line-item.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/update-payment-method.js create mode 100644 packages/medusa/src/api/routes/store/carts/update-payment-method.ts delete mode 100644 packages/medusa/src/api/routes/store/carts/update-payment-session.js create mode 100644 packages/medusa/src/api/routes/store/carts/update-payment-session.ts rename packages/medusa/src/api/routes/store/collections/{get-collection.js => get-collection.ts} (65%) delete mode 100644 packages/medusa/src/api/routes/store/collections/index.js create mode 100644 packages/medusa/src/api/routes/store/collections/index.ts delete mode 100644 packages/medusa/src/api/routes/store/collections/list-collections.js create mode 100644 packages/medusa/src/api/routes/store/collections/list-collections.ts delete mode 100644 packages/medusa/src/api/routes/store/customers/create-address.js create mode 100644 packages/medusa/src/api/routes/store/customers/create-address.ts rename packages/medusa/src/api/routes/store/customers/{create-customer.js => create-customer.ts} (55%) rename packages/medusa/src/api/routes/store/customers/{delete-address.js => delete-address.ts} (65%) rename packages/medusa/src/api/routes/store/customers/{get-customer.js => get-customer.ts} (64%) rename packages/medusa/src/api/routes/store/customers/{get-payment-methods.js => get-payment-methods.ts} (66%) rename packages/medusa/src/api/routes/store/customers/{index.js => index.ts} (67%) delete mode 100644 packages/medusa/src/api/routes/store/customers/list-orders.js create mode 100644 packages/medusa/src/api/routes/store/customers/list-orders.ts delete mode 100644 packages/medusa/src/api/routes/store/customers/reset-password-token.js create mode 100644 packages/medusa/src/api/routes/store/customers/reset-password-token.ts rename packages/medusa/src/api/routes/store/customers/{reset-password.js => reset-password.ts} (59%) rename packages/medusa/src/api/routes/store/customers/{update-address.js => update-address.ts} (56%) rename packages/medusa/src/api/routes/store/customers/{update-customer.js => update-customer.ts} (56%) rename packages/medusa/src/api/routes/store/gift-cards/{get-gift-card.js => get-gift-card.ts} (77%) delete mode 100644 packages/medusa/src/api/routes/store/gift-cards/index.js create mode 100644 packages/medusa/src/api/routes/store/gift-cards/index.ts create mode 100644 packages/medusa/src/api/routes/store/orders/__tests__/lookup-order.js rename packages/medusa/src/api/routes/store/orders/{get-order-by-cart.js => get-order-by-cart.ts} (70%) rename packages/medusa/src/api/routes/store/orders/{get-order.js => get-order.ts} (58%) rename packages/medusa/src/api/routes/store/orders/{index.js => index.ts} (84%) delete mode 100644 packages/medusa/src/api/routes/store/orders/lookup-order.js create mode 100644 packages/medusa/src/api/routes/store/orders/lookup-order.ts create mode 100644 packages/medusa/src/api/routes/store/products/__tests__/search.js rename packages/medusa/src/api/routes/store/products/{get-product.js => get-product.ts} (72%) rename packages/medusa/src/api/routes/store/products/{index.js => index.ts} (54%) delete mode 100644 packages/medusa/src/api/routes/store/products/list-products.js create mode 100644 packages/medusa/src/api/routes/store/products/list-products.ts delete mode 100644 packages/medusa/src/api/routes/store/products/search.js create mode 100644 packages/medusa/src/api/routes/store/products/search.ts rename packages/medusa/src/api/routes/store/regions/{get-region.js => get-region.ts} (83%) rename packages/medusa/src/api/routes/store/regions/{index.js => index.ts} (60%) rename packages/medusa/src/api/routes/store/regions/{list-regions.js => list-regions.ts} (66%) rename packages/medusa/src/api/routes/store/return-reasons/{get-reason.js => get-reason.ts} (54%) rename packages/medusa/src/api/routes/store/return-reasons/{index.js => index.ts} (61%) delete mode 100644 packages/medusa/src/api/routes/store/return-reasons/list-reasons.js create mode 100644 packages/medusa/src/api/routes/store/return-reasons/list-reasons.ts rename packages/medusa/src/api/routes/store/returns/{create-return.js => create-return.ts} (70%) rename packages/medusa/src/api/routes/store/returns/{index.js => index.ts} (64%) rename packages/medusa/src/api/routes/store/shipping-options/{index.js => index.ts} (63%) rename packages/medusa/src/api/routes/store/shipping-options/{list-options.js => list-options.ts} (58%) rename packages/medusa/src/api/routes/store/shipping-options/{list-shipping-options.js => list-shipping-options.ts} (64%) rename packages/medusa/src/api/routes/store/swaps/{create-swap.js => create-swap.ts} (65%) rename packages/medusa/src/api/routes/store/swaps/{get-swap-by-cart.js => get-swap-by-cart.ts} (83%) rename packages/medusa/src/api/routes/store/swaps/{index.js => index.ts} (76%) rename packages/medusa/src/api/routes/store/variants/{get-variant.js => get-variant.ts} (71%) delete mode 100644 packages/medusa/src/api/routes/store/variants/index.js create mode 100644 packages/medusa/src/api/routes/store/variants/index.ts delete mode 100644 packages/medusa/src/api/routes/store/variants/list-variants.js create mode 100644 packages/medusa/src/api/routes/store/variants/list-variants.ts create mode 100644 packages/medusa/src/services/__mocks__/search.js rename packages/medusa/src/services/{auth.js => auth.ts} (62%) create mode 100644 packages/medusa/src/services/index.ts rename packages/medusa/src/services/{product-variant.js => product-variant.ts} (71%) rename packages/medusa/src/services/{user.js => user.ts} (75%) create mode 100644 packages/medusa/src/types/auth.ts create mode 100644 packages/medusa/src/types/common.ts create mode 100644 packages/medusa/src/types/customers.ts create mode 100644 packages/medusa/src/types/discount.ts create mode 100644 packages/medusa/src/types/draft-orders.ts create mode 100644 packages/medusa/src/types/note.ts create mode 100644 packages/medusa/src/types/orders.ts create mode 100644 packages/medusa/src/types/product-variant.ts create mode 100644 packages/medusa/src/types/user.ts create mode 100644 packages/medusa/src/types/validators/xor.ts create mode 100644 packages/medusa/src/utils/validator.ts create mode 100644 packages/medusa/src/utils/validators/date-transform.ts create mode 100644 packages/medusa/src/utils/validators/greater-than.ts create mode 100644 packages/medusa/src/utils/validators/is-type.ts create mode 100644 packages/medusa/src/utils/validators/iso8601-duration.ts diff --git a/.eslintignore b/.eslintignore index 7f90fce1c3..123b29bdf4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -24,6 +24,21 @@ /packages/medusa/src/api/routes/store/return-reasons /packages/medusa/src/api/routes/store/returns +# JS Client +/packages/medusa-js/src/resources/auth.ts +/packages/medusa-js/src/resources/gift-cards.ts +/packages/medusa-js/src/resources/line-items.ts +/packages/medusa-js/src/resources/payment-methods.ts +/packages/medusa-js/src/resources/product-variants.ts +/packages/medusa-js/src/resources/regions.ts +/packages/medusa-js/src/resources/return-reasons.ts +/packages/medusa-js/src/resources/returns.ts +/packages/medusa-js/src/resources/shipping-options.ts +/packages/medusa-js/src/resources/swaps.ts +/packages/medusa-js/src/resources/collections.ts +/packages/medusa-js/src/types/ +/packages/medusa-js/src/error.ts + # END OF FILES TODO diff --git a/.eslintrc.js b/.eslintrc.js index fc467a5dc3..ea84ca099b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,18 +23,31 @@ module.exports = { node: true, jest: true, }, + ignorePatterns: [`**/models`, `**/repositories`], overrides: [ { files: [`*.ts`], parser: `@typescript-eslint/parser`, plugins: [`@typescript-eslint/eslint-plugin`], extends: [`plugin:@typescript-eslint/recommended`], + rules: { + "@typescript-eslint/explicit-function-return-type": ["error"], + "@typescript-eslint/no-non-null-assertion": ["off"], + }, }, { - files: ["**/api/**/*.js"], + files: ["**/api/**/*.js", "**/api/**/*.ts"], rules: { "valid-jsdoc": ["off"], }, }, + { + files: ["**/api/**/*.ts"], + rules: { + "valid-jsdoc": ["off"], + "@typescript-eslint/explicit-function-return-type": ["off"], + "@typescript-eslint/no-var-requires": ["off"], + }, + }, ], } diff --git a/integration-tests/api/__tests__/admin/__snapshots__/colllections.js.snap b/integration-tests/api/__tests__/admin/__snapshots__/colllections.js.snap new file mode 100644 index 0000000000..6107372f5b --- /dev/null +++ b/integration-tests/api/__tests__/admin/__snapshots__/colllections.js.snap @@ -0,0 +1,204 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`/admin/collections /admin/collections creates a collection 1`] = ` +Object { + "collection": Object { + "created_at": Any, + "deleted_at": null, + "handle": "test-handle-creation", + "id": StringMatching /\\^pcol_\\*/, + "metadata": null, + "title": "test collection creation", + "updated_at": Any, + }, +} +`; + +exports[`/admin/collections /admin/collections lists collections 1`] = ` +Object { + "collections": Array [ + Object { + "handle": "test-collection", + "id": "test-collection", + "products": Array [ + Object { + "collection_id": "test-collection", + "created_at": Any, + "deleted_at": null, + "description": "test-product-description", + "discountable": true, + "handle": "test-product", + "height": null, + "hs_code": null, + "id": "test-product", + "is_giftcard": false, + "length": null, + "material": null, + "metadata": null, + "mid_code": null, + "origin_country": null, + "profile_id": StringMatching /\\^sp_\\*/, + "status": "draft", + "subtitle": null, + "thumbnail": null, + "title": "Test product", + "type_id": "test-type", + "updated_at": Any, + "weight": null, + "width": null, + }, + Object { + "collection_id": "test-collection", + "created_at": Any, + "deleted_at": null, + "description": "test-product-description1", + "discountable": true, + "handle": "test-product1", + "height": null, + "hs_code": null, + "id": "test-product1", + "is_giftcard": false, + "length": null, + "material": null, + "metadata": null, + "mid_code": null, + "origin_country": null, + "profile_id": StringMatching /\\^sp_\\*/, + "status": "draft", + "subtitle": null, + "thumbnail": null, + "title": "Test product1", + "type_id": "test-type", + "updated_at": Any, + "weight": null, + "width": null, + }, + ], + "title": "Test collection", + }, + Object { + "handle": "test-collection1", + "id": "test-collection1", + "products": Array [ + Object { + "collection_id": "test-collection1", + "created_at": Any, + "deleted_at": null, + "description": "test-product-description", + "discountable": true, + "handle": "test-product_filtering_1", + "height": null, + "hs_code": null, + "id": "test-product_filtering_1", + "is_giftcard": false, + "length": null, + "material": null, + "metadata": null, + "mid_code": null, + "origin_country": null, + "profile_id": StringMatching /\\^sp_\\*/, + "status": "proposed", + "subtitle": null, + "thumbnail": null, + "title": "Test product filtering 1", + "type_id": "test-type", + "updated_at": Any, + "weight": null, + "width": null, + }, + Object { + "collection_id": "test-collection1", + "created_at": Any, + "deleted_at": null, + "description": "test-product-description", + "discountable": true, + "handle": "test-product_filtering_3", + "height": null, + "hs_code": null, + "id": "test-product_filtering_3", + "is_giftcard": false, + "length": null, + "material": null, + "metadata": null, + "mid_code": null, + "origin_country": null, + "profile_id": StringMatching /\\^sp_\\*/, + "status": "draft", + "subtitle": null, + "thumbnail": null, + "title": "Test product filtering 3", + "type_id": "test-type", + "updated_at": Any, + "weight": null, + "width": null, + }, + ], + "title": "Test collection 1", + }, + Object { + "handle": "test-collection2", + "id": "test-collection2", + "products": Array [ + Object { + "collection_id": "test-collection2", + "created_at": Any, + "deleted_at": null, + "description": "test-product-description", + "discountable": true, + "handle": "test-product_filtering_2", + "height": null, + "hs_code": null, + "id": "test-product_filtering_2", + "is_giftcard": false, + "length": null, + "material": null, + "metadata": null, + "mid_code": null, + "origin_country": null, + "profile_id": StringMatching /\\^sp_\\*/, + "status": "published", + "subtitle": null, + "thumbnail": null, + "title": "Test product filtering 2", + "type_id": "test-type", + "updated_at": Any, + "weight": null, + "width": null, + }, + ], + "title": "Test collection 2", + }, + ], + "count": 3, + "limit": 10, + "offset": 0, +} +`; + +exports[`/admin/collections /admin/collections/:id gets collection 1`] = ` +Object { + "collection": Object { + "created_at": Any, + "deleted_at": null, + "handle": "test-collection", + "id": "test-collection", + "metadata": null, + "title": "Test collection", + "updated_at": Any, + }, +} +`; + +exports[`/admin/collections /admin/collections/:id updates a collection 1`] = ` +Object { + "collection": Object { + "created_at": Any, + "deleted_at": null, + "handle": "test-handle-creation", + "id": StringMatching /\\^pcol_\\*/, + "metadata": null, + "title": "test collection creation", + "updated_at": Any, + }, +} +`; diff --git a/integration-tests/api/__tests__/admin/__snapshots__/product.js.snap b/integration-tests/api/__tests__/admin/__snapshots__/product.js.snap index 0e103ae418..5a55a9f1f4 100644 --- a/integration-tests/api/__tests__/admin/__snapshots__/product.js.snap +++ b/integration-tests/api/__tests__/admin/__snapshots__/product.js.snap @@ -479,7 +479,7 @@ Array [ ] `; -exports[`/admin/products GET /admin/products returns a list of products with giftcard in list 1`] = ` +exports[`/admin/products GET /admin/products returns a list of products with only giftcard in list 1`] = ` Array [ Object { "collection": null, diff --git a/integration-tests/api/__tests__/admin/colllections.js b/integration-tests/api/__tests__/admin/colllections.js new file mode 100644 index 0000000000..6f6b4ed22f --- /dev/null +++ b/integration-tests/api/__tests__/admin/colllections.js @@ -0,0 +1,220 @@ +const path = require("path") +const setupServer = require("../../../helpers/setup-server") +const { useApi } = require("../../../helpers/use-api") +const { initDb, useDb } = require("../../../helpers/use-db") + +const productSeeder = require("../../helpers/product-seeder") +const adminSeeder = require("../../helpers/admin-seeder") + +jest.setTimeout(30000) +describe("/admin/collections", () => { + let medusaProcess + let dbConnection + + beforeAll(async () => { + const cwd = path.resolve(path.join(__dirname, "..", "..")) + dbConnection = await initDb({ cwd }) + medusaProcess = await setupServer({ cwd }) + }) + + afterAll(async () => { + const db = useDb() + await db.shutdown() + medusaProcess.kill() + }) + + describe("/admin/collections/:id", () => { + beforeEach(async () => { + try { + await adminSeeder(dbConnection) + await productSeeder(dbConnection) + } catch (err) { + console.log(err) + throw err + } + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("updates a collection", async () => { + const api = useApi() + + const creationResponse = await api.post( + "/admin/collections", + { + title: "test", + }, + { headers: { Authorization: "Bearer test_token" } } + ) + + const response = await api.post( + `/admin/collections/${creationResponse.data.collection.id}`, + { + title: "test collection creation", + handle: "test-handle-creation", + }, + { headers: { Authorization: "Bearer test_token" } } + ) + + expect(response.status).toEqual(200) + expect(response.data).toMatchSnapshot({ + collection: { + id: expect.stringMatching(/^pcol_*/), + title: "test collection creation", + handle: "test-handle-creation", + created_at: expect.any(String), + updated_at: expect.any(String), + }, + }) + }) + + it("deletes a collection", async () => { + const api = useApi() + + const creationResponse = await api.post( + "/admin/collections", + { + title: "test", + }, + { headers: { Authorization: "Bearer test_token" } } + ) + + const response = await api.delete( + `/admin/collections/${creationResponse.data.collection.id}`, + { headers: { Authorization: "Bearer test_token" } } + ) + + expect(response.status).toEqual(200) + expect(response.data).toEqual({ + id: creationResponse.data.collection.id, + object: "product-collection", + deleted: true, + }) + }) + + it("gets collection", async () => { + const api = useApi() + + const response = await api.get("/admin/collections/test-collection", { + headers: { Authorization: "Bearer test_token" }, + }) + + expect(response.data).toMatchSnapshot({ + collection: { + id: "test-collection", + created_at: expect.any(String), + updated_at: expect.any(String), + }, + }) + }) + }) + + describe("/admin/collections", () => { + beforeEach(async () => { + try { + await adminSeeder(dbConnection) + await productSeeder(dbConnection) + } catch (err) { + console.log(err) + throw err + } + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("creates a collection", async () => { + const api = useApi() + + const response = await api.post( + "/admin/collections", + { + title: "test collection creation", + handle: "test-handle-creation", + }, + { headers: { Authorization: "Bearer test_token" } } + ) + + expect(response.status).toEqual(200) + expect(response.data).toMatchSnapshot({ + collection: { + id: expect.stringMatching(/^pcol_*/), + title: "test collection creation", + handle: "test-handle-creation", + created_at: expect.any(String), + updated_at: expect.any(String), + }, + }) + }) + + it("lists collections", async () => { + const api = useApi() + + const response = await api.get("/admin/collections", { + headers: { Authorization: "Bearer test_token" }, + }) + + expect(response.data).toMatchSnapshot({ + collections: [ + { + id: "test-collection", + handle: "test-collection", + title: "Test collection", + products: [ + { + collection_id: "test-collection", + created_at: expect.any(String), + updated_at: expect.any(String), + profile_id: expect.stringMatching(/^sp_*/), + }, + { + collection_id: "test-collection", + created_at: expect.any(String), + updated_at: expect.any(String), + profile_id: expect.stringMatching(/^sp_*/), + }, + ], + }, + { + id: "test-collection1", + handle: "test-collection1", + title: "Test collection 1", + products: [ + { + collection_id: "test-collection1", + created_at: expect.any(String), + updated_at: expect.any(String), + profile_id: expect.stringMatching(/^sp_*/), + }, + { + collection_id: "test-collection1", + created_at: expect.any(String), + updated_at: expect.any(String), + profile_id: expect.stringMatching(/^sp_*/), + }, + ], + }, + { + id: "test-collection2", + handle: "test-collection2", + title: "Test collection 2", + products: [ + { + collection_id: "test-collection2", + created_at: expect.any(String), + updated_at: expect.any(String), + profile_id: expect.stringMatching(/^sp_*/), + }, + ], + }, + ], + count: 3, + }) + }) + }) +}) diff --git a/integration-tests/api/__tests__/admin/customer.js b/integration-tests/api/__tests__/admin/customer.js index 510ad13192..db4152cdd0 100644 --- a/integration-tests/api/__tests__/admin/customer.js +++ b/integration-tests/api/__tests__/admin/customer.js @@ -1,4 +1,3 @@ -const { dropDatabase } = require("pg-god") const path = require("path") const setupServer = require("../../../helpers/setup-server") diff --git a/integration-tests/api/__tests__/admin/discount.js b/integration-tests/api/__tests__/admin/discount.js index e5412e44e4..aadc5140a8 100644 --- a/integration-tests/api/__tests__/admin/discount.js +++ b/integration-tests/api/__tests__/admin/discount.js @@ -29,32 +29,42 @@ describe("/admin/discounts", () => { describe("GET /admin/discounts", () => { beforeEach(async () => { const manager = dbConnection.manager - try { - await adminSeeder(dbConnection) - await manager.insert(DiscountRule, { - id: "test-discount-rule", - description: "Test discount rule", - type: "percentage", - value: 10, - allocation: "total", - }) - await manager.insert(Discount, { - id: "test-discount", - code: "TESTING", - rule_id: "test-discount-rule", - is_dynamic: false, - is_disabled: false, - }) - await manager.insert(Discount, { - id: "messi-discount", - code: "BARCA100", - rule_id: "test-discount-rule", - is_dynamic: false, - is_disabled: false, - }) - } catch (err) { - throw err - } + await adminSeeder(dbConnection) + await manager.insert(DiscountRule, { + id: "test-discount-rule", + description: "Test discount rule", + type: "percentage", + value: 10, + allocation: "total", + }) + await manager.insert(Discount, { + id: "test-discount", + code: "TESTING", + rule_id: "test-discount-rule", + is_dynamic: false, + is_disabled: false, + }) + await manager.insert(Discount, { + id: "messi-discount", + code: "BARCA100", + rule_id: "test-discount-rule", + is_dynamic: false, + is_disabled: false, + }) + await manager.insert(Discount, { + id: "dynamic-discount", + code: "Dyn100", + rule_id: "test-discount-rule", + is_dynamic: true, + is_disabled: false, + }) + await manager.insert(Discount, { + id: "disabled-discount", + code: "Dis100", + rule_id: "test-discount-rule", + is_dynamic: false, + is_disabled: true, + }) }) afterEach(async () => { @@ -85,6 +95,50 @@ describe("/admin/discounts", () => { ]) ) }) + + it("lists dynamic discounts ", async () => { + const api = useApi() + + const response = await api + .get("/admin/discounts?is_dynamic=true", { + headers: { + Authorization: "Bearer test_token", + }, + }) + .catch((err) => { + console.log(err) + }) + expect(response.status).toEqual(200) + expect(response.data.count).toEqual(1) + expect(response.data.discounts).toEqual([ + expect.objectContaining({ + id: "dynamic-discount", + code: "Dyn100", + }), + ]) + }) + + it("lists disabled discounts ", async () => { + const api = useApi() + + const response = await api + .get("/admin/discounts?is_disabled=true", { + headers: { + Authorization: "Bearer test_token", + }, + }) + .catch((err) => { + console.log(err) + }) + expect(response.status).toEqual(200) + expect(response.data.count).toEqual(1) + expect(response.data.discounts).toEqual([ + expect.objectContaining({ + id: "disabled-discount", + code: "Dis100", + }), + ]) + }) }) describe("POST /admin/discounts", () => { @@ -103,6 +157,60 @@ describe("/admin/discounts", () => { await db.teardown() }) + it("creates a discount with a rule", async () => { + const api = useApi() + + const response = await api + .post( + "/admin/discounts", + { + code: "HELLOWORLD", + rule: { + description: "test", + type: "percentage", + value: 10, + allocation: "total", + }, + usage_limit: 10, + }, + { + headers: { + Authorization: "Bearer test_token", + }, + } + ) + .catch((err) => { + console.log(err) + }) + + expect(response.status).toEqual(200) + expect(response.data.discount).toEqual( + expect.objectContaining({ + code: "HELLOWORLD", + usage_limit: 10, + }) + ) + + const test = await api.get( + `/admin/discounts/${response.data.discount.id}`, + { headers: { Authorization: "Bearer test_token" } } + ) + + expect(test.status).toEqual(200) + expect(test.data.discount).toEqual( + expect.objectContaining({ + code: "HELLOWORLD", + usage_limit: 10, + rule: expect.objectContaining({ + value: 10, + type: "percentage", + description: "test", + allocation: "total", + }), + }) + ) + }) + it("creates a discount and updates it", async () => { const api = useApi() @@ -591,11 +699,11 @@ describe("/admin/discounts", () => { ) .catch((err) => { expect(err.response.status).toEqual(400) - expect(err.response.data.message).toEqual([ + expect(err.response.data).toEqual( expect.objectContaining({ - message: `"ends_at" must be greater than "ref:starts_at"`, - }), - ]) + message: `"ends_at" must be greater than "starts_at"`, + }) + ) }) }) }) @@ -604,25 +712,21 @@ describe("/admin/discounts", () => { let manager beforeEach(async () => { manager = dbConnection.manager - try { - await adminSeeder(dbConnection) - await manager.insert(DiscountRule, { - id: "test-discount-rule", - description: "Test discount rule", - type: "percentage", - value: 10, - allocation: "total", - }) - await manager.insert(Discount, { - id: "test-discount", - code: "TESTING", - rule_id: "test-discount-rule", - is_dynamic: false, - is_disabled: false, - }) - } catch (err) { - throw err - } + await adminSeeder(dbConnection) + await manager.insert(DiscountRule, { + id: "test-discount-rule", + description: "Test discount rule", + type: "percentage", + value: 10, + allocation: "total", + }) + await manager.insert(Discount, { + id: "test-discount", + code: "TESTING", + rule_id: "test-discount-rule", + is_dynamic: false, + is_disabled: false, + }) }) afterEach(async () => { diff --git a/integration-tests/api/__tests__/admin/gift-cards.js b/integration-tests/api/__tests__/admin/gift-cards.js index 219e8b54d1..2cf141ccb3 100644 --- a/integration-tests/api/__tests__/admin/gift-cards.js +++ b/integration-tests/api/__tests__/admin/gift-cards.js @@ -158,12 +158,15 @@ describe("/admin/gift-cards", () => { it("creates a gift card", async () => { const api = useApi() + const dateString = new Date().toISOString() + const response = await api .post( "/admin/gift-cards", { value: 1000, region_id: "region", + ends_at: dateString, }, { headers: { diff --git a/integration-tests/api/__tests__/admin/order.js b/integration-tests/api/__tests__/admin/order.js index da5a7b07ec..4e3f4b383a 100644 --- a/integration-tests/api/__tests__/admin/order.js +++ b/integration-tests/api/__tests__/admin/order.js @@ -3,7 +3,6 @@ const { ReturnReason, Order, LineItem, - ProductVariant, CustomShippingOption, } = require("@medusajs/medusa") @@ -76,12 +75,8 @@ describe("/admin/orders", () => { describe("POST /admin/orders/:id", () => { beforeEach(async () => { - try { - await adminSeeder(dbConnection) - await orderSeeder(dbConnection) - } catch (err) { - throw err - } + await adminSeeder(dbConnection) + await orderSeeder(dbConnection) }) afterEach(async () => { @@ -220,7 +215,6 @@ describe("/admin/orders", () => { it("cancels an order and increments inventory_quantity", async () => { const api = useApi() - const manager = dbConnection.manager const initialInventoryRes = await api.get("/store/variants/test-variant") @@ -1111,7 +1105,7 @@ describe("/admin/orders", () => { } ) - //Find variant that should have its inventory_quantity updated + // Find variant that should have its inventory_quantity updated const toTest = returned.data.order.items.find((i) => i.id === "test-item") expect(returned.status).toEqual(200) @@ -1144,7 +1138,7 @@ describe("/admin/orders", () => { } ) - //Find variant that should have its inventory_quantity updated + // Find variant that should have its inventory_quantity updated const toTest = returned.data.order.items.find((i) => i.id === "test-item") expect(returned.status).toEqual(200) @@ -1203,6 +1197,44 @@ describe("/admin/orders", () => { ]) }) + it("lists all orders with a fulfillment status = fulfilled", async () => { + const api = useApi() + + const response = await api + .get("/admin/orders?fulfillment_status[]=fulfilled", { + headers: { + authorization: "Bearer test_token", + }, + }) + .catch((err) => console.log(err)) + + expect(response.status).toEqual(200) + expect(response.data.orders).toEqual([ + expect.objectContaining({ + id: "test-order", + }), + ]) + }) + + it("fails to lists all orders with an invalid status", async () => { + expect.assertions(3) + const api = useApi() + + await api + .get("/admin/orders?status[]=test", { + headers: { + authorization: "Bearer test_token", + }, + }) + .catch((err) => { + expect(err.response.status).toEqual(400) + expect(err.response.data.type).toEqual("invalid_data") + expect(err.response.data.message).toEqual( + "each value in status must be a valid enum value" + ) + }) + }) + it("list all orders with matching order email", async () => { const api = useApi() @@ -1696,7 +1728,7 @@ describe("/admin/orders", () => { expect(returnOnOrder.status).toEqual(200) - const captured = await api.post( + await api.post( "/admin/orders/test-order/capture", {}, { diff --git a/integration-tests/api/__tests__/admin/product.js b/integration-tests/api/__tests__/admin/product.js index b90908500b..0816d9e4b0 100644 --- a/integration-tests/api/__tests__/admin/product.js +++ b/integration-tests/api/__tests__/admin/product.js @@ -340,7 +340,7 @@ describe("/admin/products", () => { } }) - it("returns a list of products with giftcard in list", async () => { + it("returns a list of products with only giftcard in list", async () => { const api = useApi() const payload = { @@ -641,7 +641,6 @@ describe("/admin/products", () => { options: expect.any(Array), tags: expect.any(Array), variants: expect.any(Array), - created_at: expect.any(String), updated_at: expect.any(String), }, { @@ -653,7 +652,6 @@ describe("/admin/products", () => { options: expect.any(Array), tags: expect.any(Array), variants: expect.any(Array), - created_at: expect.any(String), updated_at: expect.any(String), }, { @@ -665,7 +663,6 @@ describe("/admin/products", () => { options: expect.any(Array), tags: expect.any(Array), variants: expect.any(Array), - created_at: expect.any(String), updated_at: expect.any(String), }, ]) @@ -782,6 +779,46 @@ describe("/admin/products", () => { ) }) + it("creates a product that is not discountable", async () => { + const api = useApi() + + const payload = { + title: "Test", + discountable: false, + description: "test-product-description", + type: { value: "test-type" }, + images: ["test-image.png", "test-image-2.png"], + collection_id: "test-collection", + tags: [{ value: "123" }, { value: "456" }], + options: [{ title: "size" }, { title: "color" }], + variants: [ + { + title: "Test variant", + inventory_quantity: 10, + prices: [{ currency_code: "usd", amount: 100 }], + options: [{ value: "large" }, { value: "green" }], + }, + ], + } + + const response = await api + .post("/admin/products", payload, { + headers: { + Authorization: "Bearer test_token", + }, + }) + .catch((err) => { + console.log(err) + }) + + expect(response.status).toEqual(200) + expect(response.data.product).toEqual( + expect.objectContaining({ + discountable: false, + }) + ) + }) + it("Sets variant ranks when creating a product", async () => { const api = useApi() @@ -890,7 +927,6 @@ describe("/admin/products", () => { const payload = { collection_id: null, - type: null, variants: [ { id: "test-variant", @@ -944,7 +980,6 @@ describe("/admin/products", () => { ], }), ], - type: null, status: "published", collection: null, type: expect.objectContaining({ diff --git a/integration-tests/api/__tests__/admin/region.js b/integration-tests/api/__tests__/admin/region.js index 0a255d428e..1853f8d3df 100644 --- a/integration-tests/api/__tests__/admin/region.js +++ b/integration-tests/api/__tests__/admin/region.js @@ -67,6 +67,11 @@ describe("/admin/discounts", () => { console.log(err) }) + expect(response.data).toEqual({ + id: "test-region", + object: "region", + deleted: true, + }) expect(response.status).toEqual(200) }) }) diff --git a/integration-tests/api/__tests__/store/__snapshots__/auth.js.snap b/integration-tests/api/__tests__/store/__snapshots__/auth.js.snap index 486f7b7116..ad2c9beab7 100644 --- a/integration-tests/api/__tests__/store/__snapshots__/auth.js.snap +++ b/integration-tests/api/__tests__/store/__snapshots__/auth.js.snap @@ -12,7 +12,7 @@ Object { "last_name": "testesen", "metadata": null, "orders": Array [], - "phone": "12345678", + "phone": null, "updated_at": Any, } `; diff --git a/integration-tests/api/__tests__/store/__snapshots__/collections.js.snap b/integration-tests/api/__tests__/store/__snapshots__/collections.js.snap index 12e685f244..9edcdb7e6e 100644 --- a/integration-tests/api/__tests__/store/__snapshots__/collections.js.snap +++ b/integration-tests/api/__tests__/store/__snapshots__/collections.js.snap @@ -32,6 +32,8 @@ Object { }, ], "count": 3, + "limit": 10, + "offset": 0, } `; diff --git a/integration-tests/api/__tests__/store/auth.js b/integration-tests/api/__tests__/store/auth.js index 4345ca56c9..f0cc71384c 100644 --- a/integration-tests/api/__tests__/store/auth.js +++ b/integration-tests/api/__tests__/store/auth.js @@ -1,11 +1,8 @@ const path = require("path") -const { Region, DiscountRule, Discount } = require("@medusajs/medusa") const setupServer = require("../../../helpers/setup-server") const { useApi } = require("../../../helpers/use-api") const { initDb, useDb } = require("../../../helpers/use-db") -const adminSeeder = require("../../helpers/admin-seeder") -const { exportAllDeclaration } = require("@babel/types") jest.setTimeout(30000) @@ -34,7 +31,6 @@ describe("/admin/auth", () => { password: "secret_password", first_name: "test", last_name: "testesen", - phone: "12345678", }) .catch((err) => { console.log(err) @@ -57,7 +53,7 @@ describe("/admin/auth", () => { updated_at: expect.any(String), first_name: "test", last_name: "testesen", - phone: "12345678", + phone: null, email: "test@testesen.dk", }) }) diff --git a/integration-tests/api/__tests__/store/cart.js b/integration-tests/api/__tests__/store/cart.js index 560654bc51..73051e2ce6 100644 --- a/integration-tests/api/__tests__/store/cart.js +++ b/integration-tests/api/__tests__/store/cart.js @@ -378,7 +378,7 @@ describe("/store/carts", () => { expect(e.response.status).toBe(409) } - //check to see if payment has been cancelled and cart is not completed + // check to see if payment has been cancelled and cart is not completed const res = await api.get(`/store/carts/test-cart-2`) expect(res.data.cart.payment.canceled_at).not.toBe(null) expect(res.data.cart.completed_at).toBe(null) @@ -414,7 +414,7 @@ describe("/store/carts", () => { expect(e.response.status).toBe(409) } - //check to see if payment has been cancelled and cart is not completed + // check to see if payment has been cancelled and cart is not completed const res = await api.get(`/store/carts/swap-cart`) expect(res.data.cart.payment_authorized_at).toBe(null) expect(res.data.cart.payment.canceled_at).not.toBe(null) @@ -450,7 +450,7 @@ describe("/store/carts", () => { console.log(error) } - //check to see if payment is authorized and cart is completed + // check to see if payment is authorized and cart is completed const res = await api.get(`/store/carts/swap-cart`) expect(res.data.cart.payment_authorized_at).not.toBe(null) expect(res.data.cart.completed_at).not.toBe(null) @@ -477,7 +477,7 @@ describe("/store/carts", () => { type: "swap", }) - let cartWithCustomSo = await manager.save(_cart) + const cartWithCustomSo = await manager.save(_cart) await manager.insert(CustomShippingOption, { id: "another-cso-test", @@ -683,7 +683,7 @@ describe("/store/carts", () => { it("updates empty cart.customer_id on cart retrieval", async () => { const api = useApi() - let customer = await api.post( + const customer = await api.post( "/store/customers", { email: "oli@test.dk", @@ -712,7 +712,7 @@ describe("/store/carts", () => { it("updates cart.customer_id on cart retrieval if cart.customer_id differ from session customer", async () => { const api = useApi() - let customer = await api.post( + const customer = await api.post( "/store/customers", { email: "oli@test.dk", diff --git a/integration-tests/api/__tests__/store/collections.js b/integration-tests/api/__tests__/store/collections.js index 7ba6d52168..b0699271a0 100644 --- a/integration-tests/api/__tests__/store/collections.js +++ b/integration-tests/api/__tests__/store/collections.js @@ -92,6 +92,8 @@ describe("/store/collections", () => { }, ], count: 3, + limit: 10, + offset: 0, }) }) }) diff --git a/integration-tests/api/__tests__/store/customer.js b/integration-tests/api/__tests__/store/customer.js index 425a48fb9a..b675a461fa 100644 --- a/integration-tests/api/__tests__/store/customer.js +++ b/integration-tests/api/__tests__/store/customer.js @@ -5,8 +5,6 @@ const setupServer = require("../../../helpers/setup-server") const { useApi } = require("../../../helpers/use-api") const { initDb, useDb } = require("../../../helpers/use-db") -const customerSeeder = require("../../helpers/customer-seeder") - jest.setTimeout(30000) describe("/store/customers", () => { @@ -113,21 +111,22 @@ describe("/store/customers", () => { password: "test", }) - const customerId = authResponse.data.customer.id const [authCookie] = authResponse.headers["set-cookie"][0].split(";") - const response = await api.post( - `/store/customers/me`, - { - password: "test", - metadata: { key: "value" }, - }, - { - headers: { - Cookie: authCookie, + const response = await api + .post( + `/store/customers/me`, + { + password: "test", + metadata: { key: "value" }, }, - } - ) + { + headers: { + Cookie: authCookie, + }, + } + ) + .catch((e) => console.log("err", e)) expect(response.status).toEqual(200) expect(response.data.customer).not.toHaveProperty("password_hash") @@ -146,7 +145,6 @@ describe("/store/customers", () => { password: "test", }) - const customerId = authResponse.data.customer.id const [authCookie] = authResponse.headers["set-cookie"][0].split(";") const response = await api.post( @@ -192,7 +190,6 @@ describe("/store/customers", () => { password: "test", }) - const customerId = authResponse.data.customer.id const [authCookie] = authResponse.headers["set-cookie"][0].split(";") const response = await api.post( @@ -230,7 +227,6 @@ describe("/store/customers", () => { password: "test", }) - const customerId = authResponse.data.customer.id const [authCookie] = authResponse.headers["set-cookie"][0].split(";") const check = await api.post( diff --git a/integration-tests/api/__tests__/store/return-reason.js b/integration-tests/api/__tests__/store/return-reason.js index 9cc8138daf..36daf1e302 100644 --- a/integration-tests/api/__tests__/store/return-reason.js +++ b/integration-tests/api/__tests__/store/return-reason.js @@ -24,6 +24,49 @@ describe("/store/return-reasons", () => { medusaProcess.kill() }) + describe("GET /store/return-reasons/:id", () => { + let rrId + + beforeEach(async () => { + try { + const created = dbConnection.manager.create(ReturnReason, { + value: "wrong_size", + label: "Wrong size", + }) + + const result = await dbConnection.manager.save(created) + rrId = result.id + } catch (err) { + console.log(err) + throw err + } + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("get a return reason", async () => { + const api = useApi() + + const response = await api + .get(`/store/return-reasons/${rrId}`) + .catch((err) => { + console.log(err) + }) + + expect(response.status).toEqual(200) + + expect(response.data.return_reason).toEqual( + expect.objectContaining({ + id: rrId, + value: "wrong_size", + }) + ) + }) + }) + describe("GET /store/return-reasons", () => { let rrId let rrId_1 diff --git a/integration-tests/api/__tests__/store/returns.js b/integration-tests/api/__tests__/store/returns.js index d01a90047e..8cee9e0826 100644 --- a/integration-tests/api/__tests__/store/returns.js +++ b/integration-tests/api/__tests__/store/returns.js @@ -249,6 +249,29 @@ describe("/store/carts", () => { ]) }) + it("failes to create a return with an invalid quantity (less than 1)", async () => { + const api = useApi() + + const response = await api + .post("/store/returns", { + order_id: "order_test", + items: [ + { + reason_id: rrId, + note: "TOO small", + item_id: "test-item", + quantity: 0, + }, + ], + }) + .catch((err) => { + return err.response + }) + + expect(response.status).toEqual(400) + expect(response.data.type).toEqual("invalid_data") + }) + it("creates a return with discount and non-discountable item", async () => { const api = useApi() diff --git a/integration-tests/api/package.json b/integration-tests/api/package.json index 32f5102a9a..728db7981a 100644 --- a/integration-tests/api/package.json +++ b/integration-tests/api/package.json @@ -8,15 +8,15 @@ "build": "babel src -d dist --extensions \".ts,.js\"" }, "dependencies": { - "@medusajs/medusa": "1.1.51-dev-1636035082111", - "medusa-interfaces": "1.1.27-dev-1636035082111", + "@medusajs/medusa": "1.1.51", + "medusa-interfaces": "1.1.27", "typeorm": "^0.2.31" }, "devDependencies": { "@babel/cli": "^7.12.10", "@babel/core": "^7.12.10", "@babel/node": "^7.12.10", - "babel-preset-medusa-package": "1.1.17-dev-1636035082111", + "babel-preset-medusa-package": "1.1.17", "jest": "^26.6.3" } -} +} \ No newline at end of file diff --git a/integration-tests/api/yarn.lock b/integration-tests/api/yarn.lock index 6b7509315b..7305f342ff 100644 --- a/integration-tests/api/yarn.lock +++ b/integration-tests/api/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.12.10": - version "7.15.7" - resolved "http://localhost:4873/@babel%2fcli/-/cli-7.15.7.tgz#62658abedb786d09c1f70229224b11a65440d7a1" - integrity sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3" + integrity sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -18,32 +18,32 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: - "@babel/highlight" "^7.14.5" + "@babel/highlight" "^7.16.0" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "http://localhost:4873/@babel%2fcompat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" + integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fcore/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" - integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.7.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== dependencies: - "@babel/code-frame" "^7.15.8" - "@babel/generator" "^7.15.8" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.8" - "@babel/helpers" "^7.15.4" - "@babel/parser" "^7.15.8" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.6" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -51,64 +51,64 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.15.4", "@babel/generator@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fgenerator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" - integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== +"@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== dependencies: - "@babel/types" "^7.15.6" + "@babel/types" "^7.16.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" - integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz#21ad815f609b84ee0e3058676c33cf6d1670525f" - integrity sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" + integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-explode-assignable-expression" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" - integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz#01d615762e796c17952c29e3ede9d6de07d235a8" + integrity sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg== dependencies: - "@babel/compat-data" "^7.15.0" + "@babel/compat-data" "^7.16.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", "@babel/helper-create-class-features-plugin@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" - integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== +"@babel/helper-create-class-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== 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-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fhelper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== +"@babel/helper-create-regexp-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" + integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "http://localhost:4873/@babel%2fhelper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== +"@babel/helper-define-polyfill-provider@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz#8867aed79d3ea6cade40f801efb7ac5c66916b10" + integrity sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -119,736 +119,744 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz#f9aec9d219f271eaf92b9f561598ca6b2682600c" - integrity sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g== +"@babel/helper-explode-assignable-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" + integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== 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.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-member-expression-to-functions@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" - integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== +"@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" - integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg== +"@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== 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-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.6" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-optimise-call-expression@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" - integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== +"@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" - resolved "http://localhost:4873/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" - integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== +"@babel/helper-remap-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz#d5aa3b086e13a5fe05238ff40c3a5a0c2dab3ead" + integrity sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-wrap-function" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-wrap-function" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" - integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== 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-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-simple-access@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" - integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" - integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-validator-identifier@^7.15.7": version "7.15.7" - resolved "http://localhost:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== "@babel/helper-validator-option@^7.14.5": version "7.14.5" - resolved "http://localhost:4873/@babel%2fhelper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" - integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== +"@babel/helper-wrap-function@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" + integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== dependencies: - "@babel/helper-function-name" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-function-name" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helpers@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fhelpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" - integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== +"@babel/helpers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.0.tgz#875519c979c232f41adfbd43a3b0398c2e388183" + integrity sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ== dependencies: - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fhighlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" "@babel/node@^7.12.10": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fnode/-/node-7.15.8.tgz#5d6b815d0232ae4893727971f53deabfe06c4ca7" - integrity sha512-JbgTCrnx6IUECznEbQ7e2rbVYtrXKixSbEG2bxxbMkV648WdUf3tdc+ZUW2++dvnnAswcpwc76cRwf0xEQqsrw== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.16.0.tgz#855e783ba4cbca88dbdebf4b01c2d95844c4afdf" + integrity sha512-eFUU2RHkgMW0X1lHVVOWJYlaDTwCX2LduQQLfehAfID5VhAjNnBhGZ/r0zk3FSQfFn6enJ2aXyRCiZ829bYVeA== dependencies: - "@babel/register" "^7.15.3" + "@babel/register" "^7.16.0" commander "^4.0.1" - core-js "^3.16.0" + core-js "^3.19.0" node-environment-flags "^1.0.5" regenerator-runtime "^0.13.4" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fparser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" - integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" + integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" - integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.0": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" + integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fplugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403" - integrity sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" + integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.15.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + +"@babel/plugin-proposal-async-generator-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz#11425d47a60364352f668ad5fbc1d6596b2c5caf" + integrity sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" + integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" - integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== +"@babel/plugin-proposal-class-static-block@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" + integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.12.1": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fplugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz#eb2969abf8993f15289f09fed762bb1df1521bd5" - integrity sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.0.tgz#515db5f6891611c0d176b63ede0844fbd9be797b" + integrity sha512-ttvhKuVnQwoNQrcTd1oe6o49ahaZ1kns1fsJKzTVOaS/FJDJoK4qzgVS68xzJhYUMgTnbXW6z/T6rlP3lL7tJw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators" "^7.14.5" + "@babel/plugin-syntax-decorators" "^7.16.0" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== +"@babel/plugin-proposal-dynamic-import@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" + integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== +"@babel/plugin-proposal-export-namespace-from@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" + integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== +"@babel/plugin-proposal-json-strings@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" + integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" + integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" + integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" + integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.15.6": - version "7.15.6" - resolved "http://localhost:4873/@babel%2fplugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" - integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== +"@babel/plugin-proposal-object-rest-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" + integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.15.4" + "@babel/plugin-transform-parameters" "^7.16.0" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== +"@babel/plugin-proposal-optional-catch-binding@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" + integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== +"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" + integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" - integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== +"@babel/plugin-proposal-private-property-in-object@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" + integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== +"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" + integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "http://localhost:4873/@babel%2fplugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "http://localhost:4873/@babel%2fplugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz#eafb9c0cbe09c8afeb964ba3a7bbd63945a72f20" - integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw== +"@babel/plugin-syntax-decorators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" + integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "http://localhost:4873/@babel%2fplugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "http://localhost:4873/@babel%2fplugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "http://localhost:4873/@babel%2fplugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + 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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== +"@babel/plugin-transform-arrow-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" + integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== +"@babel/plugin-transform-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" + integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== dependencies: - "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-module-imports" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== +"@babel/plugin-transform-block-scoped-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" + integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.15.3": - version "7.15.3" - resolved "http://localhost:4873/@babel%2fplugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== +"@babel/plugin-transform-block-scoping@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" + integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4", "@babel/plugin-transform-classes@^7.9.5": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" - integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.16.0", "@babel/plugin-transform-classes@^7.9.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" + integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== +"@babel/plugin-transform-computed-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" + integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "http://localhost:4873/@babel%2fplugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== +"@babel/plugin-transform-destructuring@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" + integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== +"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" + integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== +"@babel/plugin-transform-duplicate-keys@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" + integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== +"@babel/plugin-transform-exponentiation-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" + integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" - integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== +"@babel/plugin-transform-for-of@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== +"@babel/plugin-transform-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" + integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== dependencies: - "@babel/helper-function-name" "^7.14.5" + "@babel/helper-function-name" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-instanceof@^7.12.1": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-instanceof/-/plugin-transform-instanceof-7.14.5.tgz#8568277fbcfd7a3e4f3e6c8b7aa8ce4f60cba6e7" - integrity sha512-3CIpRzBLk5tEwIzjjD86KR8oMYrp1fl9q7kbdJa6O6Lcmkcee9DXfeO6zRXis//5gWRf63o5oDlNBh0VAlmtgw== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.16.0.tgz#2dead81e9ba3e11d6378172ff3fab9967bd2307d" + integrity sha512-12b9/GJI9qisUpZtWlR5bf+ZD1DeNUzM6J4CbQTP7Zega6brRKHRSGDuQc5eJywGHni6Ib/l3RumF9vQ6CD6EQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== +"@babel/plugin-transform-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" + integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== +"@babel/plugin-transform-member-expression-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" + integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== +"@babel/plugin-transform-modules-amd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" - integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== +"@babel/plugin-transform-modules-commonjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" + integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== dependencies: - "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-simple-access" "^7.16.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" - integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== +"@babel/plugin-transform-modules-systemjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" + integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== dependencies: - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.15.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== +"@babel/plugin-transform-modules-umd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" + integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "http://localhost:4873/@babel%2fplugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" + integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== +"@babel/plugin-transform-new-target@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" + integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== +"@babel/plugin-transform-object-super@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" + integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" -"@babel/plugin-transform-parameters@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fplugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" - integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== +"@babel/plugin-transform-parameters@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.0.tgz#1b50765fc421c229819dc4c7cdb8911660b3c2d7" + integrity sha512-XgnQEm1CevKROPx+udOi/8f8TiGhrUWiHiaUCIp47tE0tpFDjzXNTZc9E5CmCwxNjXTWEVqvRfWZYOTFvMa/ZQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== +"@babel/plugin-transform-property-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" + integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== +"@babel/plugin-transform-regenerator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" + integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== +"@babel/plugin-transform-reserved-words@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" + integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@^7.12.1": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fplugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" - integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.0.tgz#3fe0da36c2f0834bef7c4d3e7f2b2db0ee0c8909" + integrity sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag== dependencies: - "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-module-imports" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.5" - babel-plugin-polyfill-regenerator "^0.2.2" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== +"@babel/plugin-transform-shorthand-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" + integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.15.8": - version "7.15.8" - resolved "http://localhost:4873/@babel%2fplugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz#79d5aa27f68d700449b2da07691dfa32d2f6d468" - integrity sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ== +"@babel/plugin-transform-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" + integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== +"@babel/plugin-transform-sticky-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" + integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== +"@babel/plugin-transform-template-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" + integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== +"@babel/plugin-transform-typeof-symbol@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" + integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== +"@babel/plugin-transform-unicode-escapes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" + integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "http://localhost:4873/@babel%2fplugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== +"@babel/plugin-transform-unicode-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" + integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@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.15.8" - resolved "http://localhost:4873/@babel%2fpreset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba" - integrity sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.0.tgz#97228393d217560d6a1c6c56f0adb9d12bca67f5" + integrity sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.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.15.4" - "@babel/plugin-proposal-async-generator-functions" "^7.15.8" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.15.4" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.15.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.15.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-class-static-block" "^7.16.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.0" + "@babel/plugin-proposal-export-namespace-from" "^7.16.0" + "@babel/plugin-proposal-json-strings" "^7.16.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-object-rest-spread" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -863,50 +871,50 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.15.3" - "@babel/plugin-transform-classes" "^7.15.4" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.15.4" - "@babel/plugin-transform-function-name" "^7.14.5" - "@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.15.4" - "@babel/plugin-transform-modules-systemjs" "^7.15.4" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@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.15.4" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.15.8" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@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.15.6" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.5" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.0" + "@babel/plugin-transform-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions" "^7.16.0" + "@babel/plugin-transform-block-scoping" "^7.16.0" + "@babel/plugin-transform-classes" "^7.16.0" + "@babel/plugin-transform-computed-properties" "^7.16.0" + "@babel/plugin-transform-destructuring" "^7.16.0" + "@babel/plugin-transform-dotall-regex" "^7.16.0" + "@babel/plugin-transform-duplicate-keys" "^7.16.0" + "@babel/plugin-transform-exponentiation-operator" "^7.16.0" + "@babel/plugin-transform-for-of" "^7.16.0" + "@babel/plugin-transform-function-name" "^7.16.0" + "@babel/plugin-transform-literals" "^7.16.0" + "@babel/plugin-transform-member-expression-literals" "^7.16.0" + "@babel/plugin-transform-modules-amd" "^7.16.0" + "@babel/plugin-transform-modules-commonjs" "^7.16.0" + "@babel/plugin-transform-modules-systemjs" "^7.16.0" + "@babel/plugin-transform-modules-umd" "^7.16.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" + "@babel/plugin-transform-new-target" "^7.16.0" + "@babel/plugin-transform-object-super" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-transform-property-literals" "^7.16.0" + "@babel/plugin-transform-regenerator" "^7.16.0" + "@babel/plugin-transform-reserved-words" "^7.16.0" + "@babel/plugin-transform-shorthand-properties" "^7.16.0" + "@babel/plugin-transform-spread" "^7.16.0" + "@babel/plugin-transform-sticky-regex" "^7.16.0" + "@babel/plugin-transform-template-literals" "^7.16.0" + "@babel/plugin-transform-typeof-symbol" "^7.16.0" + "@babel/plugin-transform-unicode-escapes" "^7.16.0" + "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.0" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" + core-js-compat "^3.19.0" semver "^6.3.0" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "http://localhost:4873/@babel%2fpreset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -914,10 +922,10 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/register@^7.15.3": - version "7.15.3" - resolved "http://localhost:4873/@babel%2fregister/-/register-7.15.3.tgz#6b40a549e06ec06c885b2ec42c3dd711f55fe752" - integrity sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw== +"@babel/register@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.0.tgz#f5d2aa14df37cf7146b9759f7c53818360f24ec6" + integrity sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -925,53 +933,53 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": - version "7.15.4" - resolved "http://localhost:4873/@babel%2fruntime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== +"@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.0.tgz#e27b977f2e2088ba24748bf99b5e1dece64e4f0b" + integrity sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.15.4", "@babel/template@^7.3.3": - version "7.15.4" - resolved "http://localhost:4873/@babel%2ftemplate/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== +"@babel/template@^7.16.0", "@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4": - version "7.15.4" - resolved "http://localhost:4873/@babel%2ftraverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" + integrity sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ== 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" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.15.6" - resolved "http://localhost:4873/@babel%2ftypes/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" - integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== dependencies: - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "http://localhost:4873/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@cnakazawa/watch@^1.0.3": version "1.0.4" - resolved "http://localhost:4873/@cnakazawa%2fwatch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" @@ -979,7 +987,7 @@ "@dabh/diagnostics@^2.0.2": version "2.0.2" - resolved "http://localhost:4873/@dabh%2fdiagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q== dependencies: colorspace "1.1.x" @@ -988,27 +996,27 @@ "@hapi/address@^2.1.2": version "2.1.4" - resolved "http://localhost:4873/@hapi%2faddress/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== "@hapi/formula@^1.2.0": version "1.2.0" - resolved "http://localhost:4873/@hapi%2fformula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd" + resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-1.2.0.tgz#994649c7fea1a90b91a0a1e6d983523f680e10cd" integrity sha512-UFbtbGPjstz0eWHb+ga/GM3Z9EzqKXFWIbSOFURU0A/Gku0Bky4bCk9/h//K2Xr3IrCfjFNhMm4jyZ5dbCewGA== "@hapi/hoek@^8.2.4", "@hapi/hoek@^8.3.0": version "8.5.1" - resolved "http://localhost:4873/@hapi%2fhoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== "@hapi/hoek@^9.0.0": version "9.2.1" - resolved "http://localhost:4873/@hapi%2fhoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== "@hapi/joi@^16.1.8": version "16.1.8" - resolved "http://localhost:4873/@hapi%2fjoi/-/joi-16.1.8.tgz#84c1f126269489871ad4e2decc786e0adef06839" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-16.1.8.tgz#84c1f126269489871ad4e2decc786e0adef06839" integrity sha512-wAsVvTPe+FwSrsAurNt5vkg3zo+TblvC5Bb1zMVK6SJzZqw9UrJnexxR+76cpePmtUZKHAPxcQ2Bf7oVHyahhg== dependencies: "@hapi/address" "^2.1.2" @@ -1019,26 +1027,26 @@ "@hapi/pinpoint@^1.0.2": version "1.0.2" - resolved "http://localhost:4873/@hapi%2fpinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13" + resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-1.0.2.tgz#025b7a36dbbf4d35bf1acd071c26b20ef41e0d13" integrity sha512-dtXC/WkZBfC5vxscazuiJ6iq4j9oNx1SHknmIr8hofarpKUZKmlUVYVIhNVzIEgK5Wrc4GMHL5lZtt1uS2flmQ== "@hapi/topo@^3.1.3": version "3.1.6" - resolved "http://localhost:4873/@hapi%2ftopo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== dependencies: "@hapi/hoek" "^8.3.0" "@hapi/topo@^5.0.0": version "5.1.0" - resolved "http://localhost:4873/@hapi%2ftopo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + 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 "http://localhost:4873/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1049,12 +1057,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "http://localhost:4873/@istanbuljs%2fschema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2fconsole/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== dependencies: "@jest/types" "^26.6.2" @@ -1066,7 +1074,7 @@ "@jest/core@^26.6.3": version "26.6.3" - resolved "http://localhost:4873/@jest%2fcore/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== dependencies: "@jest/console" "^26.6.2" @@ -1100,7 +1108,7 @@ "@jest/environment@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2fenvironment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== dependencies: "@jest/fake-timers" "^26.6.2" @@ -1110,7 +1118,7 @@ "@jest/fake-timers@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2ffake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== dependencies: "@jest/types" "^26.6.2" @@ -1122,7 +1130,7 @@ "@jest/globals@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2fglobals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== dependencies: "@jest/environment" "^26.6.2" @@ -1131,7 +1139,7 @@ "@jest/reporters@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2freporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1163,7 +1171,7 @@ "@jest/source-map@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2fsource-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== dependencies: callsites "^3.0.0" @@ -1172,7 +1180,7 @@ "@jest/test-result@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2ftest-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== dependencies: "@jest/console" "^26.6.2" @@ -1182,7 +1190,7 @@ "@jest/test-sequencer@^26.6.3": version "26.6.3" - resolved "http://localhost:4873/@jest%2ftest-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== dependencies: "@jest/test-result" "^26.6.2" @@ -1193,7 +1201,7 @@ "@jest/transform@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2ftransform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== dependencies: "@babel/core" "^7.1.0" @@ -1214,7 +1222,7 @@ "@jest/types@^26.6.2": version "26.6.2" - resolved "http://localhost:4873/@jest%2ftypes/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -1223,10 +1231,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@medusajs/medusa-cli@1.1.22-dev-1636035082111": - version "1.1.22-dev-1636035082111" - resolved "http://localhost:4873/@medusajs%2fmedusa-cli/-/medusa-cli-1.1.22-dev-1636035082111.tgz#cc3b01e4cb29d0490d02424969c1f17e9b1d70d7" - integrity sha512-se2/umiJIf4n0k6mPaowPyVT/ZV42m/73GVecu/Xl/f+OfDmeUxaw+0sXHkEN9zkPbIjQVBqn3lrLnLAf0YXMg== +"@medusajs/medusa-cli@^1.1.22": + version "1.1.23" + resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.23.tgz#d7272a21c02f9fa3cbe1dc8f9e2840cdd0e1d2f9" + integrity sha512-rqjDFd8hM9Q3rvuxwetv28jp3xHzH5Nt5J129JPCk9Sd8Rj6x2lVbKPbULNwgQ6hk8OsXjOQF2hPEyRt+vJL3A== dependencies: "@babel/polyfill" "^7.8.7" "@babel/runtime" "^7.9.6" @@ -1244,8 +1252,8 @@ is-valid-path "^0.1.1" joi-objectid "^3.0.1" meant "^1.0.1" - medusa-core-utils "1.1.26-dev-1636035082111" - medusa-telemetry "0.0.9-dev-1636035082111" + medusa-core-utils "^0.1.27" + medusa-telemetry "^0.0.10" netrc-parser "^3.1.6" open "^8.0.6" ora "^5.4.1" @@ -1259,13 +1267,13 @@ winston "^3.3.3" yargs "^15.3.1" -"@medusajs/medusa@1.1.51-dev-1636035082111": - version "1.1.51-dev-1636035082111" - resolved "http://localhost:4873/@medusajs%2fmedusa/-/medusa-1.1.51-dev-1636035082111.tgz#07cc9c130946e4d2f6cbd3794f309b4531a2d531" - integrity sha512-rKPIEgM9UhCGtW7zGnD76YdE5mdnDKnZDDhfIK86NysTELrBDwgiSkMbtGJEjPyRKsGw2GrWHzQl8Jjh6++PFQ== +"@medusajs/medusa@1.1.51": + version "1.1.51" + resolved "https://registry.yarnpkg.com/@medusajs/medusa/-/medusa-1.1.51.tgz#8c905be75dfe8bdea0851f7dbb8679fd335829a6" + integrity sha512-+42U6EuTLMUNs2xRy3GoOiwRV6smYVkc8SN9zM9inMxycJn9FQDPQreZftBrOO0q5mTMLC8gG4wld/64qN2U6Q== dependencies: "@hapi/joi" "^16.1.8" - "@medusajs/medusa-cli" "1.1.22-dev-1636035082111" + "@medusajs/medusa-cli" "^1.1.22" "@types/lodash" "^4.14.168" awilix "^4.2.3" body-parser "^1.19.0" @@ -1287,8 +1295,8 @@ joi "^17.3.0" joi-objectid "^3.0.1" jsonwebtoken "^8.5.1" - medusa-core-utils "1.1.26-dev-1636035082111" - medusa-test-utils "1.1.29-dev-1636035082111" + medusa-core-utils "^1.1.26" + medusa-test-utils "^1.1.29" morgan "^1.9.1" multer "^1.4.2" passport "^0.4.0" @@ -1309,12 +1317,12 @@ "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" - resolved "http://localhost:4873/@nicolo-ribaudo%2fchokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== "@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" @@ -1322,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" @@ -1335,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" @@ -1347,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" @@ -1359,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" @@ -1370,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" @@ -1384,16 +1392,16 @@ tslib "^1.9.3" "@oclif/plugin-help@^3": - version "3.2.3" - resolved "http://localhost:4873/@oclif%2fplugin-help/-/plugin-help-3.2.3.tgz#cd24010e7eb326782843d3aa6d6b5a4affebb2c3" - integrity sha512-l2Pd0lbOMq4u/7xsl9hqISFqyR9gWEz/8+05xmrXFr67jXyS6EUCQB+mFBa0wepltrmJu0sAFg9AvA2mLaMMqQ== + version "3.2.4" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.2.4.tgz#100e0e09d806e20595096609f2220d009ee096e2" + integrity sha512-kMSfFbv11S7CKFlbWTKDdAe/gC7P2zCFZEDq6BAHjJdA0htHT8FvBhnyoppR0O2jOTjX80wHjU+ItPpjanfuag== dependencies: "@oclif/command" "^1.5.20" "@oclif/config" "^1.15.1" "@oclif/errors" "^1.2.2" chalk "^4.1.0" indent-string "^4.0.0" - lodash.template "^4.4.0" + lodash "^4.17.21" string-width "^4.2.0" strip-ansi "^6.0.0" widest-line "^3.1.0" @@ -1401,53 +1409,53 @@ "@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": version "4.1.2" - resolved "http://localhost:4873/@sideway%2faddress/-/address-4.1.2.tgz#811b84333a335739d3969cfc434736268170cad1" + 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 "http://localhost:4873/@sideway%2fformula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + 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 "http://localhost:4873/@sideway%2fpinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + 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 "http://localhost:4873/@sinonjs%2fcommons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^6.0.1": version "6.0.1" - resolved "http://localhost:4873/@sinonjs%2ffake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== dependencies: "@sinonjs/commons" "^1.7.0" "@sqltools/formatter@^1.2.2": version "1.2.3" - resolved "http://localhost:4873/@sqltools%2fformatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== "@tootallnate/once@1": version "1.1.2" - resolved "http://localhost:4873/@tootallnate%2fonce/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.16" - resolved "http://localhost:4873/@types%2fbabel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== dependencies: "@babel/parser" "^7.1.0" @@ -1458,14 +1466,14 @@ "@types/babel__generator@*": version "7.6.3" - resolved "http://localhost:4873/@types%2fbabel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" - resolved "http://localhost:4873/@types%2fbabel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" @@ -1473,92 +1481,92 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": version "7.14.2" - resolved "http://localhost:4873/@types%2fbabel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" "@types/graceful-fs@^4.1.2": version "4.1.5" - resolved "http://localhost:4873/@types%2fgraceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" - resolved "http://localhost:4873/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "http://localhost:4873/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "http://localhost:4873/@types%2fistanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/lodash@^4.14.168": - version "4.14.175" - resolved "http://localhost:4873/@types%2flodash/-/lodash-4.14.175.tgz#b78dfa959192b01fae0ad90e166478769b215f45" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== + version "4.14.176" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.176.tgz#641150fc1cda36fbfa329de603bbb175d7ee20c0" + integrity sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ== "@types/node@*": - version "16.10.9" - resolved "http://localhost:4873/@types%2fnode/-/node-16.10.9.tgz#8f1cdd517972f76a3b928298f4c0747cd6fef25a" - integrity sha512-H9ReOt+yqIJPCutkTYjFjlyK6WEMQYT9hLZMlWtOjFQY2ItppsWZ6RJf8Aw+jz5qTYceuHvFgPIaKOHtLAEWBw== + version "16.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" + integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== "@types/normalize-package-data@^2.4.0": version "2.4.1" - resolved "http://localhost:4873/@types%2fnormalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/prettier@^2.0.0": version "2.4.1" - resolved "http://localhost:4873/@types%2fprettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== "@types/stack-utils@^2.0.0": version "2.0.1" - resolved "http://localhost:4873/@types%2fstack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/yargs-parser@*": version "20.2.1" - resolved "http://localhost:4873/@types%2fyargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== "@types/yargs@^15.0.0": version "15.0.14" - resolved "http://localhost:4873/@types%2fyargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" "@types/zen-observable@0.8.3": version "0.8.3" - resolved "http://localhost:4873/@types%2fzen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== abab@^2.0.3, abab@^2.0.5: version "2.0.5" - resolved "http://localhost:4873/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== abbrev@1: version "1.1.1" - resolved "http://localhost:4873/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.7: version "1.3.7" - resolved "http://localhost:4873/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: mime-types "~2.1.24" @@ -1566,7 +1574,7 @@ accepts@~1.3.7: acorn-globals@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== dependencies: acorn "^7.1.1" @@ -1574,29 +1582,29 @@ acorn-globals@^6.0.0: acorn-walk@^7.1.1: version "7.2.0" - resolved "http://localhost:4873/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn@^7.1.1: version "7.4.1" - resolved "http://localhost:4873/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4: version "8.5.0" - resolved "http://localhost:4873/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== agent-base@6: version "6.0.2" - resolved "http://localhost:4873/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" ajv@^6.12.3: version "6.12.6" - resolved "http://localhost:4873/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1606,70 +1614,70 @@ ajv@^6.12.3: ansi-align@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== dependencies: string-width "^4.1.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: version "4.3.2" - resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 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@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^2.2.1: version "2.2.1" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.0: version "4.3.0" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" 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: version "1.3.0" - resolved "http://localhost:4873/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= anymatch@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" @@ -1677,7 +1685,7 @@ anymatch@^2.0.0: anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.2" - resolved "http://localhost:4873/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" @@ -1685,22 +1693,22 @@ anymatch@^3.0.3, anymatch@~3.1.2: app-root-path@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== append-field@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= aproba@^1.0.3: version "1.2.0" - resolved "http://localhost:4873/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== are-we-there-yet@~1.1.2: version "1.1.7" - resolved "http://localhost:4873/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== dependencies: delegates "^1.0.0" @@ -1708,81 +1716,81 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" - resolved "http://localhost:4873/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== arr-diff@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-flatten@1.1.1: version "1.1.1" - resolved "http://localhost:4873/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 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: version "0.3.2" - resolved "http://localhost:4873/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asn1@~0.2.3: - version "0.2.4" - resolved "http://localhost:4873/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assign-symbols@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= async@^3.1.0: - version "3.2.1" - resolved "http://localhost:4873/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" - integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + version "3.2.2" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" + integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== asynckit@^0.4.0: version "0.4.0" - resolved "http://localhost:4873/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.1.2: version "2.1.2" - resolved "http://localhost:4873/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== awilix@^4.2.3: version "4.3.4" - resolved "http://localhost:4873/awilix/-/awilix-4.3.4.tgz#aeecc662efa96256981af3bc6243eb201c8b4a4f" + resolved "https://registry.yarnpkg.com/awilix/-/awilix-4.3.4.tgz#aeecc662efa96256981af3bc6243eb201c8b4a4f" integrity sha512-NgRwUPxUnoK+OTRa2fXcRQVFPOPQXlwCN1FJPkhO3IHKQJHokhdVpDfgz9L3VZTcA1iSaOFE3N/Q/5P7lIDqig== dependencies: camel-case "^4.1.2" @@ -1790,31 +1798,32 @@ awilix@^4.2.3: aws-sign2@~0.7.0: version "0.7.0" - resolved "http://localhost:4873/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.11.0" - resolved "http://localhost:4873/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios-retry@^3.1.9: - version "3.2.0" - resolved "http://localhost:4873/axios-retry/-/axios-retry-3.2.0.tgz#eb48e72f90b177fde62329b2896aa8476cfb90ba" - integrity sha512-RK2cLMgIsAQBDhlIsJR5dOhODPigvel18XUv1dDXW+4k1FzebyfRk+C+orot6WPZOYFKSfhLwHPwVmTVOODQ5w== + version "3.2.4" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.2.4.tgz#f447a53c3456f5bfeca18f20c3a3272207d082ae" + integrity sha512-Co3UXiv4npi6lM963mfnuH90/YFLKWWDmoBYfxkHT5xtkSSWNqK9zdG3fw5/CP/dsoKB5aMMJCsgab+tp1OxLQ== dependencies: - is-retry-allowed "^1.1.0" + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" axios@^0.21.1: version "0.21.4" - resolved "http://localhost:4873/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" babel-jest@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== dependencies: "@jest/transform" "^26.6.2" @@ -1828,25 +1837,25 @@ babel-jest@^26.6.3: babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" - resolved "http://localhost:4873/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "http://localhost:4873/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== dependencies: "@babel/template" "^7.3.3" @@ -1854,40 +1863,40 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "http://localhost:4873/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== +babel-plugin-polyfill-corejs2@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz#6ed8e30981b062f8fe6aca8873a37ebcc8cc1c0f" + integrity sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.2.4" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.5: - version "0.2.5" - resolved "http://localhost:4873/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" - integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== +babel-plugin-polyfill-corejs3@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz#fa7ca3d1ee9ddc6193600ffb632c9785d54918af" + integrity sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.16.2" + "@babel/helper-define-polyfill-provider" "^0.2.4" + core-js-compat "^3.18.0" -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "http://localhost:4873/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== +babel-plugin-polyfill-regenerator@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz#2e9808f5027c4336c994992b48a4262580cb8d6d" + integrity sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.2.4" babel-plugin-transform-typescript-metadata@^0.3.1: version "0.3.2" - resolved "http://localhost:4873/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz#7a327842d8c36ffe07ee1b5276434e56c297c9b7" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz#7a327842d8c36ffe07ee1b5276434e56c297c9b7" integrity sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -1905,16 +1914,16 @@ babel-preset-current-node-syntax@^1.0.0: babel-preset-jest@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== dependencies: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" -babel-preset-medusa-package@1.1.17-dev-1636035082111: - version "1.1.17-dev-1636035082111" - resolved "http://localhost:4873/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.17-dev-1636035082111.tgz#81fee3e5eedc5b2cad5e1a681008b78c84820b8c" - integrity sha512-42IWYf73jr8foy7hVJ38qxXltegRuxxTCh722iKSiHB+8k7rXOUZOaTrPpwX/xpFM4AtfrjyuyWnf7OTpCclpw== +babel-preset-medusa-package@1.1.17: + version "1.1.17" + resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.17.tgz#1c2d11c8891fb97693c3cb40f110faa80f6466be" + integrity sha512-cYkHr4Q5ZkOlz5lIqQEr6omw5l/KszL7vjicWGmJ0pj+2eAEi7gMtrDmoMEKhx2XbVSaT1zBxN/IzllVVP268w== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -1928,17 +1937,17 @@ babel-preset-medusa-package@1.1.17-dev-1636035082111: balanced-match@^1.0.0: version "1.0.2" - resolved "http://localhost:4873/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "http://localhost:4873/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base@^0.11.1: version "0.11.2" - resolved "http://localhost:4873/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" @@ -1951,26 +1960,26 @@ base@^0.11.1: basic-auth@~2.0.1: version "2.0.1" - resolved "http://localhost:4873/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "http://localhost:4873/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" binary-extensions@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 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" @@ -1979,14 +1988,14 @@ bl@^4.1.0: block-stream@*: version "0.0.9" - resolved "http://localhost:4873/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" body-parser@1.19.0, body-parser@^1.19.0: version "1.19.0" - resolved "http://localhost:4873/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: bytes "3.1.0" @@ -2002,7 +2011,7 @@ body-parser@1.19.0, body-parser@^1.19.0: boxen@^5.0.1: version "5.1.2" - resolved "http://localhost:4873/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== dependencies: ansi-align "^3.0.0" @@ -2016,7 +2025,7 @@ boxen@^5.0.1: brace-expansion@^1.1.7: version "1.1.11" - resolved "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2024,7 +2033,7 @@ brace-expansion@^1.1.7: braces@^2.3.1: version "2.3.2" - resolved "http://localhost:4873/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" @@ -2040,52 +2049,52 @@ braces@^2.3.1: braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "http://localhost:4873/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.16.6, browserslist@^4.17.3: - version "4.17.4" - resolved "http://localhost:4873/browserslist/-/browserslist-4.17.4.tgz#72e2508af2a403aec0a49847ef31bd823c57ead4" - integrity sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ== +browserslist@^4.16.6, browserslist@^4.17.6: + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== dependencies: - caniuse-lite "^1.0.30001265" - electron-to-chromium "^1.3.867" + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" escalade "^3.1.1" - node-releases "^2.0.0" + node-releases "^2.0.1" picocolors "^1.0.0" bser@2.1.1: version "2.1.1" - resolved "http://localhost:4873/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-equal-constant-time@1.0.1: version "1.0.1" - resolved "http://localhost:4873/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= buffer-from@^1.0.0: version "1.1.2" - resolved "http://localhost:4873/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + 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" - resolved "http://localhost:4873/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== 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" @@ -2093,7 +2102,7 @@ buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "http://localhost:4873/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -2101,7 +2110,7 @@ buffer@^6.0.3: bull@^3.12.1: version "3.29.3" - resolved "http://localhost:4873/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== dependencies: cron-parser "^2.13.0" @@ -2117,7 +2126,7 @@ bull@^3.12.1: busboy@^0.2.11: version "0.2.14" - resolved "http://localhost:4873/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= dependencies: dicer "0.2.5" @@ -2125,12 +2134,12 @@ busboy@^0.2.11: bytes@3.1.0: version "3.1.0" - resolved "http://localhost:4873/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cache-base@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" @@ -2145,7 +2154,7 @@ cache-base@^1.0.1: call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -2153,12 +2162,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "http://localhost:4873/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -2166,29 +2175,29 @@ camel-case@^4.1.2: camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "http://localhost:4873/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" - resolved "http://localhost:4873/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001265: - version "1.0.30001267" - resolved "http://localhost:4873/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz#b1cf2937175afc0570e4615fc2d2f9069fa0ed30" - integrity sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg== +caniuse-lite@^1.0.30001274: + version "1.0.30001279" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" + integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== capture-exit@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" 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" @@ -2196,12 +2205,12 @@ cardinal@^2.1.1: caseless@~0.12.0: version "0.12.0" - resolved "http://localhost:4873/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^1.1.1: version "1.1.3" - resolved "http://localhost:4873/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -2212,7 +2221,7 @@ chalk@^1.1.1: chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" - resolved "http://localhost:4873/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -2221,7 +2230,7 @@ chalk@^2.0.0, chalk@^2.4.2: 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" @@ -2229,17 +2238,17 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: char-regex@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 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: version "3.5.2" - resolved "http://localhost:4873/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: anymatch "~3.1.2" @@ -2254,27 +2263,27 @@ chokidar@^3.4.0, chokidar@^3.4.2: chownr@^1.1.4: version "1.1.4" - resolved "http://localhost:4873/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 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: version "0.6.0" - resolved "http://localhost:4873/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== class-utils@^0.3.5: version "0.3.6" - resolved "http://localhost:4873/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" @@ -2284,26 +2293,26 @@ 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.11: version "2.1.11" - resolved "http://localhost:4873/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== dependencies: chalk "^4.0.0" @@ -2315,7 +2324,7 @@ cli-highlight@^2.1.11: cli-progress@^3.4.0: version "3.9.1" - resolved "http://localhost:4873/cli-progress/-/cli-progress-3.9.1.tgz#a22eba6a20f53289fdd05d5ee8cb2cc8c28f866e" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.9.1.tgz#a22eba6a20f53289fdd05d5ee8cb2cc8c28f866e" integrity sha512-AXxiCe2a0Lm0VN+9L0jzmfQSkcZm5EYspfqXKaSIQKqIk+0hnkZ3/v1E9B39mkD6vYhKih3c/RPsJBSwq9O99Q== dependencies: colors "^1.1.2" @@ -2323,12 +2332,12 @@ cli-progress@^3.4.0: cli-spinners@^2.5.0: version "2.6.1" - resolved "http://localhost:4873/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== 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" @@ -2360,12 +2369,12 @@ 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: version "6.0.0" - resolved "http://localhost:4873/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" @@ -2374,7 +2383,7 @@ cliui@^6.0.0: cliui@^7.0.2: version "7.0.4" - resolved "http://localhost:4873/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -2383,7 +2392,7 @@ cliui@^7.0.2: clone-deep@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: is-plain-object "^2.0.4" @@ -2392,120 +2401,120 @@ 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: version "1.1.0" - resolved "http://localhost:4873/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d" integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw== co@^4.6.0: version "4.6.0" - resolved "http://localhost:4873/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" - resolved "http://localhost:4873/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collect-v8-coverage@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== collection-visit@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" - resolved "http://localhost:4873/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "http://localhost:4873/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "http://localhost:4873/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: +color-string@^1.6.0: version "1.6.0" - resolved "http://localhost:4873/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" + 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" -color@3.0.x: - version "3.0.0" - resolved "http://localhost:4873/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" - integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" + color-convert "^1.9.3" + color-string "^1.6.0" colors@^1.1.2, colors@^1.2.1: version "1.4.0" - resolved "http://localhost:4873/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colorspace@1.1.x: - version "1.1.2" - resolved "http://localhost:4873/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" - integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: - color "3.0.x" + color "^3.1.3" text-hex "1.0.x" combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: version "1.0.8" - resolved "http://localhost:4873/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^4.0.1: version "4.1.1" - resolved "http://localhost:4873/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commondir@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= component-emitter@^1.2.1: version "1.3.0" - resolved "http://localhost:4873/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" - resolved "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.2: version "1.6.2" - resolved "http://localhost:4873/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" @@ -2515,7 +2524,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" @@ -2527,36 +2536,36 @@ configstore@5.0.1: connect-redis@^5.0.0: version "5.2.0" - resolved "http://localhost:4873/connect-redis/-/connect-redis-5.2.0.tgz#d38e173f2e2cccecb89b8757ce7627ecdb8e3b94" + resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-5.2.0.tgz#d38e173f2e2cccecb89b8757ce7627ecdb8e3b94" integrity sha512-wcv1lZWa2K7RbsdSlrvwApBQFLQx+cia+oirLIeim0axR3D/9ZJbHdeTM/j8tJYYKk34dVs2QPAuAqcIklWD+Q== console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "http://localhost:4873/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= content-disposition@0.5.3: version "0.5.3" - resolved "http://localhost:4873/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== dependencies: safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" - resolved "http://localhost:4873/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" - resolved "http://localhost:4873/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" cookie-parser@^1.4.4: version "1.4.5" - resolved "http://localhost:4873/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== dependencies: cookie "0.4.0" @@ -2564,55 +2573,55 @@ cookie-parser@^1.4.4: cookie-signature@1.0.6: version "1.0.6" - resolved "http://localhost:4873/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= cookie@0.4.0: version "0.4.0" - resolved "http://localhost:4873/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== cookie@0.4.1: version "0.4.1" - resolved "http://localhost:4873/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== copy-descriptor@^0.1.0: version "0.1.1" - resolved "http://localhost:4873/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.16.0, core-js-compat@^3.16.2: - version "3.18.3" - resolved "http://localhost:4873/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" - integrity sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw== +core-js-compat@^3.18.0, core-js-compat@^3.19.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.1.tgz#fe598f1a9bf37310d77c3813968e9f7c7bb99476" + integrity sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g== dependencies: - browserslist "^4.17.3" + browserslist "^4.17.6" 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.16.0, core-js@^3.6.5, core-js@^3.7.0: - version "3.18.3" - resolved "http://localhost:4873/core-js/-/core-js-3.18.3.tgz#86a0bba2d8ec3df860fefcc07a8d119779f01509" - integrity sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw== +core-js@^3.19.0, core-js@^3.6.5, core-js@^3.7.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" + integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== core-util-is@1.0.2: version "1.0.2" - resolved "http://localhost:4873/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= core-util-is@~1.0.0: version "1.0.3" - resolved "http://localhost:4873/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cors@^2.8.5: version "2.8.5" - resolved "http://localhost:4873/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -2620,7 +2629,7 @@ cors@^2.8.5: cron-parser@^2.13.0: version "2.18.0" - resolved "http://localhost:4873/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf" integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg== dependencies: is-nan "^1.3.0" @@ -2628,7 +2637,7 @@ cron-parser@^2.13.0: cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" - resolved "http://localhost:4873/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -2639,7 +2648,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" - resolved "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -2648,36 +2657,36 @@ 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: version "0.4.4" - resolved "http://localhost:4873/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== cssom@~0.3.6: version "0.3.8" - resolved "http://localhost:4873/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.3.0: version "2.3.0" - resolved "http://localhost:4873/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" dashdash@^1.12.0: version "1.14.1" - resolved "http://localhost:4873/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== dependencies: abab "^2.0.3" @@ -2686,96 +2695,96 @@ data-urls@^2.0.0: debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" - resolved "http://localhost:4873/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.2" - resolved "http://localhost:4873/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" debug@^3.1.0, debug@^3.2.6: 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" debuglog@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decimal.js@^10.2.1: version "10.3.1" - resolved "http://localhost:4873/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== decode-uri-component@^0.2.0: version "0.2.0" - resolved "http://localhost:4873/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-extend@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.4" - resolved "http://localhost:4873/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" - resolved "http://localhost:4873/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 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: version "1.1.3" - resolved "http://localhost:4873/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" - resolved "http://localhost:4873/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "http://localhost:4873/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" @@ -2783,47 +2792,47 @@ define-property@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= denque@^1.1.0, denque@^1.5.0: version "1.5.1" - resolved "http://localhost:4873/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== depd@~1.1.2: version "1.1.2" - resolved "http://localhost:4873/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= depd@~2.0.0: version "2.0.0" - resolved "http://localhost:4873/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@~1.0.4: version "1.0.4" - resolved "http://localhost:4873/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detect-libc@^1.0.2: version "1.0.3" - resolved "http://localhost:4873/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-newline@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== dicer@0.2.5: version "0.2.5" - resolved "http://localhost:4873/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= dependencies: readable-stream "1.1.x" @@ -2831,43 +2840,43 @@ dicer@0.2.5: diff-sequences@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== 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" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domexception@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== dependencies: webidl-conversions "^5.0.0" 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" dotenv@^8.2.0: version "8.6.0" - resolved "http://localhost:4873/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== ecc-jsbn@~0.1.1: version "0.1.2" - resolved "http://localhost:4873/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" @@ -2875,58 +2884,58 @@ ecc-jsbn@~0.1.1: ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "http://localhost:4873/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" - resolved "http://localhost:4873/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.867: - version "1.3.867" - resolved "http://localhost:4873/electron-to-chromium/-/electron-to-chromium-1.3.867.tgz#7cb484db4b57c28da0b65c51e434c3a1f3f9aa0d" - integrity sha512-WbTXOv7hsLhjJyl7jBfDkioaY++iVVZomZ4dU6TMe/SzucV6mUAs2VZn/AehBwuZMiNEQDaPuTGn22YK5o+aDw== +electron-to-chromium@^1.3.886: + version "1.3.892" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.892.tgz#0e3f5bb1de577e2e5a6dffd5a4b278c4a735cd39" + integrity sha512-YDW4yIjdfMnbRoBjRZ/aNQYmT6JgQFLwmTSDRJMQdrY4MByEzppdXp3rnJ0g4LBWcsYTUvwKKClYN1ofZ0COOQ== emittery@^0.7.1: version "0.7.2" - resolved "http://localhost:4873/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== enabled@2.0.x: version "2.0.0" - resolved "http://localhost:4873/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "http://localhost:4873/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.1.0: version "1.4.4" - resolved "http://localhost:4873/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" error-ex@^1.3.1: version "1.3.2" - resolved "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.19.1: version "1.19.1" - resolved "http://localhost:4873/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" @@ -2952,7 +2961,7 @@ es-abstract@^1.19.1: es-to-primitive@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -2961,32 +2970,32 @@ es-to-primitive@^1.2.1: escalade@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "http://localhost:4873/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 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: version "1.0.5" - resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escodegen@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" @@ -2998,32 +3007,32 @@ escodegen@^2.0.0: esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" - resolved "http://localhost:4873/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== estraverse@^5.2.0: - version "5.2.0" - resolved "http://localhost:4873/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "http://localhost:4873/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "http://localhost:4873/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= exec-sh@^0.3.2: version "0.3.6" - resolved "http://localhost:4873/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== 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" @@ -3036,7 +3045,7 @@ execa@^0.10.0: execa@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -3049,7 +3058,7 @@ execa@^1.0.0: execa@^4.0.0: version "4.1.0" - resolved "http://localhost:4873/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -3064,7 +3073,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" @@ -3079,12 +3088,12 @@ execa@^5.1.1: exit@^0.1.2: version "0.1.2" - resolved "http://localhost:4873/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^2.1.4: version "2.1.4" - resolved "http://localhost:4873/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" @@ -3097,7 +3106,7 @@ expand-brackets@^2.1.4: expect@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== dependencies: "@jest/types" "^26.6.2" @@ -3109,7 +3118,7 @@ expect@^26.6.2: express-session@^1.17.1: version "1.17.2" - resolved "http://localhost:4873/express-session/-/express-session-1.17.2.tgz#397020374f9bf7997f891b85ea338767b30d0efd" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.2.tgz#397020374f9bf7997f891b85ea338767b30d0efd" integrity sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ== dependencies: cookie "0.4.1" @@ -3123,7 +3132,7 @@ express-session@^1.17.1: express@^4.17.1: version "4.17.1" - resolved "http://localhost:4873/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: accepts "~1.3.7" @@ -3159,14 +3168,14 @@ express@^4.17.1: extend-shallow@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" - resolved "http://localhost:4873/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" @@ -3174,12 +3183,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@~3.0.2: version "3.0.2" - resolved "http://localhost:4873/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 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" @@ -3188,7 +3197,7 @@ external-editor@^3.0.3: extglob@^2.0.4: version "2.0.4" - resolved "http://localhost:4873/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" @@ -3202,27 +3211,27 @@ 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== extsprintf@1.3.0: version "1.3.0" - resolved "http://localhost:4873/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "http://localhost:4873/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1: version "3.1.3" - resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 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" @@ -3233,41 +3242,41 @@ fast-glob@^3.1.1: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" - resolved "http://localhost:4873/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: version "1.13.0" - resolved "http://localhost:4873/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" fecha@^4.2.0: version "4.2.1" - resolved "http://localhost:4873/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce" integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q== fengari-interop@^0.1.2: version "0.1.2" - resolved "http://localhost:4873/fengari-interop/-/fengari-interop-0.1.2.tgz#f7731dcdd2ff4449073fb7ac3c451a8841ce1e87" + resolved "https://registry.yarnpkg.com/fengari-interop/-/fengari-interop-0.1.2.tgz#f7731dcdd2ff4449073fb7ac3c451a8841ce1e87" integrity sha512-8iTvaByZVoi+lQJhHH9vC+c/Yaok9CwOqNQZN6JrVpjmWwW4dDkeblBXhnHC+BoI6eF4Cy5NKW3z6ICEjvgywQ== fengari@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/fengari/-/fengari-0.1.4.tgz#72416693cd9e43bd7d809d7829ddc0578b78b0bb" + resolved "https://registry.yarnpkg.com/fengari/-/fengari-0.1.4.tgz#72416693cd9e43bd7d809d7829ddc0578b78b0bb" integrity sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g== dependencies: readline-sync "^1.4.9" @@ -3276,19 +3285,19 @@ fengari@^0.1.4: figlet@^1.1.1: version "1.5.2" - resolved "http://localhost:4873/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + 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" fill-range@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" @@ -3298,14 +3307,14 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@~1.1.2: version "1.1.2" - resolved "http://localhost:4873/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" @@ -3318,7 +3327,7 @@ finalhandler@~1.1.2: find-cache-dir@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== dependencies: commondir "^1.0.1" @@ -3327,14 +3336,14 @@ find-cache-dir@^2.0.0: find-up@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -3342,34 +3351,34 @@ find-up@^4.0.0, find-up@^4.1.0: fn.name@1.x.x: version "1.1.0" - resolved "http://localhost:4873/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.14.0: - version "1.14.4" - resolved "http://localhost:4873/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" - integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== + version "1.14.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" + integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== for-each@^0.3.3: version "0.3.3" - resolved "http://localhost:4873/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" for-in@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" - resolved "http://localhost:4873/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" @@ -3378,7 +3387,7 @@ form-data@^3.0.0: form-data@~2.3.2: version "2.3.3" - resolved "http://localhost:4873/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -3387,29 +3396,29 @@ form-data@~2.3.2: forwarded@0.2.0: version "0.2.0" - resolved "http://localhost:4873/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fragment-cache@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" - resolved "http://localhost:4873/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs-exists-cached@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" + resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= 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" @@ -3418,7 +3427,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" @@ -3427,29 +3436,29 @@ fs-extra@^8.1: fs-minipass@^1.2.7: version "1.2.7" - resolved "http://localhost:4873/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: minipass "^2.6.0" fs-readdir-recursive@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.1.2, fsevents@~2.3.2: version "2.3.2" - resolved "http://localhost:4873/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== fstream@^1.0.0, fstream@^1.0.12: version "1.0.12" - resolved "http://localhost:4873/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" @@ -3459,12 +3468,12 @@ fstream@^1.0.0, fstream@^1.0.12: function-bind@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gauge@~2.7.3: version "2.7.4" - resolved "http://localhost:4873/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" @@ -3478,17 +3487,17 @@ gauge@~2.7.3: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "http://localhost:4873/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "http://localhost:4873/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + 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: version "1.1.1" - resolved "http://localhost:4873/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== dependencies: function-bind "^1.1.1" @@ -3497,41 +3506,41 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: get-package-type@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-port@^5.1.1: version "5.1.1" - resolved "http://localhost:4873/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== 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: version "4.1.0" - resolved "http://localhost:4873/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0: version "5.2.0" - resolved "http://localhost:4873/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.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-symbol-description@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -3539,26 +3548,26 @@ get-symbol-description@^1.0.0: get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "http://localhost:4873/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" - resolved "http://localhost:4873/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "http://localhost:4873/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" - resolved "http://localhost:4873/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -3570,7 +3579,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl global@^4.4.0: version "4.4.0" - resolved "http://localhost:4873/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== dependencies: min-document "^2.19.0" @@ -3578,12 +3587,12 @@ global@^4.4.0: globals@^11.1.0: version "11.12.0" - resolved "http://localhost:4873/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 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" @@ -3595,22 +3604,22 @@ globby@^11.0.1: graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.8" - resolved "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + 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" - resolved "http://localhost:4873/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= har-schema@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.5" - resolved "http://localhost:4873/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: ajv "^6.12.3" @@ -3618,46 +3627,46 @@ har-validator@~5.1.3: has-ansi@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-bigints@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + 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 "http://localhost:4873/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + 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-unicode@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" - resolved "http://localhost:4873/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" @@ -3666,7 +3675,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" @@ -3675,12 +3684,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" @@ -3688,50 +3697,50 @@ has-values@^1.0.0: has@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" highlight.js@^10.7.1: version "10.7.3" - resolved "http://localhost:4873/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== homedir-polyfill@^1.0.1: version "1.0.3" - resolved "http://localhost:4873/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: version "2.8.9" - resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== 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" html-encoding-sniffer@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== dependencies: whatwg-encoding "^1.0.5" html-escaper@^2.0.0: version "2.0.2" - resolved "http://localhost:4873/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-errors@1.7.2: version "1.7.2" - resolved "http://localhost:4873/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: depd "~1.1.2" @@ -3742,7 +3751,7 @@ http-errors@1.7.2: http-errors@~1.7.2: version "1.7.3" - resolved "http://localhost:4873/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: depd "~1.1.2" @@ -3753,7 +3762,7 @@ http-errors@~1.7.2: http-proxy-agent@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -3762,7 +3771,7 @@ http-proxy-agent@^4.0.1: http-signature@~1.2.0: version "1.2.0" - resolved "http://localhost:4873/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" @@ -3771,7 +3780,7 @@ http-signature@~1.2.0: https-proxy-agent@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: agent-base "6" @@ -3779,46 +3788,46 @@ https-proxy-agent@^5.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 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, iconv-lite@^0.4.4: version "0.4.24" - resolved "http://localhost:4873/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-walk@^3.0.1: version "3.0.4" - resolved "http://localhost:4873/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== dependencies: minimatch "^3.0.4" ignore@^5.1.4: - version "5.1.8" - resolved "http://localhost:4873/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== import-local@^3.0.2: version "3.0.3" - resolved "http://localhost:4873/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== dependencies: pkg-dir "^4.2.0" @@ -3826,17 +3835,17 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 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: version "1.0.6" - resolved "http://localhost:4873/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" @@ -3844,22 +3853,22 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" - resolved "http://localhost:4873/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.3: version "2.0.3" - resolved "http://localhost:4873/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@~1.3.0: version "1.3.8" - resolved "http://localhost:4873/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== inquirer@^8.0.0: version "8.2.0" - resolved "http://localhost:4873/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== dependencies: ansi-escapes "^4.2.1" @@ -3879,7 +3888,7 @@ inquirer@^8.0.0: internal-slot@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + 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" @@ -3887,9 +3896,9 @@ internal-slot@^1.0.3: side-channel "^1.0.4" ioredis-mock@^5.6.0: - version "5.6.0" - resolved "http://localhost:4873/ioredis-mock/-/ioredis-mock-5.6.0.tgz#f60f9fbc3a53b50f567be9369e2b211ed52c0653" - integrity sha512-Ow+tyKdijg/gA2gSEv7lq8dLp6bO7FnwDXbJ9as37NF23XNRGMLzBc7ITaqMydfrbTodWnLcE2lKEaBs7SBpyA== + version "5.7.0" + resolved "https://registry.yarnpkg.com/ioredis-mock/-/ioredis-mock-5.7.0.tgz#c2f2464313b0c8592cf096d84b0ef4019813fc22" + integrity sha512-Z3U7SoDoLP+LeljcNWWGuldbZKzjzbyBrVa1/j0+GurFIgZlT4Ij+/6IqQlTDwZZkss/Prp3UaOdvr5e0Iow5g== dependencies: fengari "^0.1.4" fengari-interop "^0.1.2" @@ -3898,7 +3907,7 @@ ioredis-mock@^5.6.0: ioredis@^4.17.3, ioredis@^4.27.0: version "4.28.0" - resolved "http://localhost:4873/ioredis/-/ioredis-4.28.0.tgz#5a2be3f37ff2075e2332f280eaeb02ab4d9ff0d3" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.0.tgz#5a2be3f37ff2075e2332f280eaeb02ab4d9ff0d3" integrity sha512-I+zkeeWp3XFgPT2CtJKxvaF5FjGBGt4yGYljRjQecdQKteThuAsKqffeF1lgHVlYnuNeozRbPOCDNZ7tDWPeig== dependencies: cluster-key-slot "^1.1.0" @@ -3915,50 +3924,50 @@ ioredis@^4.17.3, ioredis@^4.27.0: ipaddr.js@1.9.1: version "1.9.1" - resolved "http://localhost:4873/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-arrayish@^0.3.1: version "0.3.2" - resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: version "1.0.4" - resolved "http://localhost:4873/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + 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@~2.1.0: version "2.1.0" - resolved "http://localhost:4873/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "http://localhost:4873/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + 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" @@ -3966,52 +3975,52 @@ is-boolean-object@^1.1.0: is-buffer@^1.1.5: version "1.1.6" - resolved "http://localhost:4873/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.4" - resolved "http://localhost:4873/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + 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" - resolved "http://localhost:4873/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.7.0" - resolved "http://localhost:4873/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.5" - resolved "http://localhost:4873/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + 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" - resolved "http://localhost:4873/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" @@ -4020,7 +4029,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" @@ -4029,82 +4038,82 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1: version "2.2.1" - resolved "http://localhost:4873/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" 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: version "2.1.1" - resolved "http://localhost:4873/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" 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: version "3.0.0" - resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 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" is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "http://localhost:4873/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.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" is-nan@^1.3.0: version "1.3.2" - resolved "http://localhost:4873/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== dependencies: call-bind "^1.0.0" @@ -4112,178 +4121,178 @@ is-nan@^1.3.0: is-negative-zero@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: version "1.0.6" - resolved "http://localhost:4873/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + 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" - resolved "http://localhost:4873/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + 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 "http://localhost:4873/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 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: version "2.0.4" - resolved "http://localhost:4873/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-potential-custom-element-name@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== is-regex@^1.1.4: version "1.1.4" - resolved "http://localhost:4873/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + 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-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" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== is-shared-array-buffer@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== is-stream@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + 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.7: version "1.0.7" - resolved "http://localhost:4873/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + 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" - resolved "http://localhost:4873/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 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" is-weakref@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== dependencies: call-bind "^1.0.0" is-windows@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" is_js@^0.9.0: version "0.9.0" - resolved "http://localhost:4873/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" + resolved "https://registry.yarnpkg.com/is_js/-/is_js-0.9.0.tgz#0ab94540502ba7afa24c856aa985561669e9c52d" integrity sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0= isarray@0.0.1: version "0.0.1" - resolved "http://localhost:4873/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= iso8601-duration@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/iso8601-duration/-/iso8601-duration-1.3.0.tgz#29d7b69e0574e4acdee50c5e5e09adab4137ba5a" + resolved "https://registry.yarnpkg.com/iso8601-duration/-/iso8601-duration-1.3.0.tgz#29d7b69e0574e4acdee50c5e5e09adab4137ba5a" integrity sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ== isobject@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" - resolved "http://localhost:4873/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: - version "3.0.2" - resolved "http://localhost:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz#36786d4d82aad2ea5911007e255e2da6b5f80d86" - integrity sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: +istanbul-lib-instrument@^4.0.3: version "4.0.3" - resolved "http://localhost:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: "@babel/core" "^7.7.5" @@ -4291,9 +4300,20 @@ istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -4302,7 +4322,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "http://localhost:4873/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -4311,7 +4331,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.0.2: version "3.0.5" - resolved "http://localhost:4873/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== dependencies: html-escaper "^2.0.0" @@ -4319,7 +4339,7 @@ istanbul-reports@^3.0.2: jest-changed-files@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== dependencies: "@jest/types" "^26.6.2" @@ -4328,7 +4348,7 @@ jest-changed-files@^26.6.2: jest-cli@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== dependencies: "@jest/core" "^26.6.3" @@ -4347,7 +4367,7 @@ jest-cli@^26.6.3: jest-config@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== dependencies: "@babel/core" "^7.1.0" @@ -4371,7 +4391,7 @@ jest-config@^26.6.3: jest-diff@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== dependencies: chalk "^4.0.0" @@ -4381,14 +4401,14 @@ jest-diff@^26.6.2: jest-docblock@^26.0.0: version "26.0.0" - resolved "http://localhost:4873/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== dependencies: detect-newline "^3.0.0" jest-each@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== dependencies: "@jest/types" "^26.6.2" @@ -4399,7 +4419,7 @@ jest-each@^26.6.2: jest-environment-jsdom@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== dependencies: "@jest/environment" "^26.6.2" @@ -4412,7 +4432,7 @@ jest-environment-jsdom@^26.6.2: jest-environment-node@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== dependencies: "@jest/environment" "^26.6.2" @@ -4424,12 +4444,12 @@ jest-environment-node@^26.6.2: jest-get-type@^26.3.0: version "26.3.0" - resolved "http://localhost:4873/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== jest-haste-map@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: "@jest/types" "^26.6.2" @@ -4450,7 +4470,7 @@ jest-haste-map@^26.6.2: jest-jasmine2@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== dependencies: "@babel/traverse" "^7.1.0" @@ -4474,7 +4494,7 @@ jest-jasmine2@^26.6.3: jest-leak-detector@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== dependencies: jest-get-type "^26.3.0" @@ -4482,7 +4502,7 @@ jest-leak-detector@^26.6.2: jest-matcher-utils@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== dependencies: chalk "^4.0.0" @@ -4492,7 +4512,7 @@ jest-matcher-utils@^26.6.2: jest-message-util@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== dependencies: "@babel/code-frame" "^7.0.0" @@ -4507,7 +4527,7 @@ jest-message-util@^26.6.2: jest-mock@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== dependencies: "@jest/types" "^26.6.2" @@ -4515,17 +4535,17 @@ jest-mock@^26.6.2: jest-pnp-resolver@^1.2.2: version "1.2.2" - resolved "http://localhost:4873/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== jest-regex-util@^26.0.0: version "26.0.0" - resolved "http://localhost:4873/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== jest-resolve-dependencies@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== dependencies: "@jest/types" "^26.6.2" @@ -4534,7 +4554,7 @@ jest-resolve-dependencies@^26.6.3: jest-resolve@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== dependencies: "@jest/types" "^26.6.2" @@ -4548,7 +4568,7 @@ jest-resolve@^26.6.2: jest-runner@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== dependencies: "@jest/console" "^26.6.2" @@ -4574,7 +4594,7 @@ jest-runner@^26.6.3: jest-runtime@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== dependencies: "@jest/console" "^26.6.2" @@ -4607,7 +4627,7 @@ jest-runtime@^26.6.3: jest-serializer@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== dependencies: "@types/node" "*" @@ -4615,7 +4635,7 @@ jest-serializer@^26.6.2: jest-snapshot@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== dependencies: "@babel/types" "^7.0.0" @@ -4637,7 +4657,7 @@ jest-snapshot@^26.6.2: jest-util@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== dependencies: "@jest/types" "^26.6.2" @@ -4649,7 +4669,7 @@ jest-util@^26.6.2: jest-validate@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: "@jest/types" "^26.6.2" @@ -4661,7 +4681,7 @@ jest-validate@^26.6.2: jest-watcher@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== dependencies: "@jest/test-result" "^26.6.2" @@ -4674,7 +4694,7 @@ jest-watcher@^26.6.2: jest-worker@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: "@types/node" "*" @@ -4683,7 +4703,7 @@ jest-worker@^26.6.2: jest@^26.6.3: version "26.6.3" - resolved "http://localhost:4873/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== dependencies: "@jest/core" "^26.6.3" @@ -4692,12 +4712,12 @@ jest@^26.6.3: joi-objectid@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/joi-objectid/-/joi-objectid-3.0.1.tgz#63ace7860f8e1a993a28d40c40ffd8eff01a3668" + 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 "http://localhost:4873/joi/-/joi-17.4.2.tgz#02f4eb5cf88e515e614830239379dcbbe28ce7f7" + 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" @@ -4708,12 +4728,12 @@ joi@^17.3.0: js-tokens@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "http://localhost:4873/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -4721,19 +4741,19 @@ js-yaml@^3.13.1: js-yaml@^4.0.0: version "4.1.0" - resolved "http://localhost:4873/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsbn@~0.1.0: version "0.1.1" - resolved "http://localhost:4873/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^16.4.0: version "16.7.0" - resolved "http://localhost:4873/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + 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" @@ -4766,51 +4786,51 @@ jsdom@^16.4.0: jsesc@^2.5.1: version "2.5.2" - resolved "http://localhost:4873/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "http://localhost:4873/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "http://localhost:4873/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" - resolved "http://localhost:4873/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stringify-safe@~5.0.1: version "5.0.1" - resolved "http://localhost:4873/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^2.1.2: version "2.2.0" - resolved "http://localhost:4873/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" 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" @@ -4819,7 +4839,7 @@ jsonfile@^6.0.1: jsonwebtoken@^8.2.0, jsonwebtoken@^8.5.1: version "8.5.1" - resolved "http://localhost:4873/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== dependencies: jws "^3.2.2" @@ -4835,7 +4855,7 @@ jsonwebtoken@^8.2.0, jsonwebtoken@^8.5.1: jsprim@^1.2.2: version "1.4.1" - resolved "http://localhost:4873/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" @@ -4845,7 +4865,7 @@ jsprim@^1.2.2: jwa@^1.4.1: version "1.4.1" - resolved "http://localhost:4873/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: buffer-equal-constant-time "1.0.1" @@ -4854,7 +4874,7 @@ jwa@^1.4.1: jws@^3.2.2: version "3.2.2" - resolved "http://localhost:4873/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" @@ -4862,46 +4882,46 @@ jws@^3.2.2: kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "http://localhost:4873/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" - resolved "http://localhost:4873/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" - resolved "http://localhost:4873/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" - resolved "http://localhost:4873/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== kuler@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== leven@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@~0.3.0: version "0.3.0" - resolved "http://localhost:4873/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" @@ -4909,12 +4929,12 @@ levn@~0.3.0: lines-and-columns@^1.1.6: version "1.1.6" - resolved "http://localhost:4873/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= locate-path@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -4922,94 +4942,74 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "http://localhost:4873/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.debounce@^4.0.8: version "4.0.8" - resolved "http://localhost:4873/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= lodash.defaults@^4.2.0: version "4.2.0" - resolved "http://localhost:4873/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= lodash.flatten@^4.4.0: version "4.4.0" - resolved "http://localhost:4873/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= lodash.includes@^4.3.0: version "4.3.0" - resolved "http://localhost:4873/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + 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 "http://localhost:4873/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + 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 "http://localhost:4873/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= lodash.isinteger@^4.0.4: version "4.0.4" - resolved "http://localhost:4873/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= lodash.isnumber@^3.0.3: version "3.0.3" - resolved "http://localhost:4873/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "http://localhost:4873/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= lodash.isstring@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= lodash.once@^4.0.0: version "4.1.1" - resolved "http://localhost:4873/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.template@^4.4.0: - version "4.5.0" - resolved "http://localhost:4873/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "http://localhost:4873/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash@^4.17.11, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" - resolved "http://localhost:4873/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 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" @@ -5017,7 +5017,7 @@ log-symbols@^4.1.0: logform@^2.2.0: version "2.3.0" - resolved "http://localhost:4873/logform/-/logform-2.3.0.tgz#a3997a05985de2ebd325ae0d166dffc9c6fe6b57" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.3.0.tgz#a3997a05985de2ebd325ae0d166dffc9c6fe6b57" integrity sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ== dependencies: colors "^1.2.1" @@ -5028,21 +5028,21 @@ logform@^2.2.0: lower-case@^2.0.2: version "2.0.2" - resolved "http://localhost:4873/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== dependencies: pify "^4.0.1" @@ -5050,64 +5050,72 @@ make-dir@^2.0.0, make-dir@^2.1.0: make-dir@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "http://localhost:4873/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" map-cache@^0.2.2: version "0.2.2" - resolved "http://localhost:4873/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" math-random@^1.0.1: version "1.0.4" - resolved "http://localhost:4873/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== 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: version "0.3.0" - resolved "http://localhost:4873/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medusa-core-utils@1.1.26-dev-1636035082111: - version "1.1.26-dev-1636035082111" - resolved "http://localhost:4873/medusa-core-utils/-/medusa-core-utils-1.1.26-dev-1636035082111.tgz#873d54b1fbb07f70ff81a8cc9fd9fdf063745a52" - integrity sha512-3Nzyu/9Ah+IZVUFjFDyThqTe3CN19zopfym4r4xI4NcJ52fj+9LKRo5IPFQ6fBGQl6BUOnkDm8pbq2+H7qAa+w== +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.26: + version "1.1.26" + resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.26.tgz#fa1f54402c76e6a3991b9d22ae1e9d7609c86e8f" + integrity sha512-9bwy5aIdKPNxzlJAGrUEt7I1ExQjFS7zcWEDg3D5xjUzcpvP0OeVvV3joP9gUNHFjfEp983jzsmVlt1/bz31UA== dependencies: joi "^17.3.0" joi-objectid "^3.0.1" -medusa-interfaces@1.1.27-dev-1636035082111: - version "1.1.27-dev-1636035082111" - resolved "http://localhost:4873/medusa-interfaces/-/medusa-interfaces-1.1.27-dev-1636035082111.tgz#051fcc30aeb82fcc6b39c70f91156b523254f8a2" - integrity sha512-ZPYl6Ld9BCOIiJEJhXzlnuR219tqK/p6n98yWzG46vu4WU5E6K8vr6xmcfdsus3SdSYLoTMElW7yPyWS33MaQg== +medusa-interfaces@1.1.27: + version "1.1.27" + resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.27.tgz#fd5f5220dd752bcfd174e6eb5d072d731bd80966" + integrity sha512-dsQnsCdP2TQITOrHIZzyYyf4Lu3rW3AgeOzl6NmRWjf5A1KKP5cJcyIg4Te9xOtLUKeP70BvF+fAk7LechtE+Q== dependencies: - medusa-core-utils "1.1.26-dev-1636035082111" + medusa-core-utils "^1.1.26" -medusa-telemetry@0.0.9-dev-1636035082111: - version "0.0.9-dev-1636035082111" - resolved "http://localhost:4873/medusa-telemetry/-/medusa-telemetry-0.0.9-dev-1636035082111.tgz#bf416dfb8805ce43113b3e4652a5b64416bdf2bf" - integrity sha512-o8slI2PkBmKFKUgHJJfhBiHDfRNshEAIV5v87dLLWIv3xU2jNMJB8w4/OeHdf985jnjwoS1fcQ0EtqFwD3gUvQ== +medusa-telemetry@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.10.tgz#86fb85048b9e41d0d91f156d590dd519a872077d" + integrity sha512-kskCT4YjCvv8C38qF+zJY9C/fARtHH5cpl2WlxHblBAQY3KXCGBSXLlsgPRT28VIkuDQOZGDjHLg3o+w2XqNPw== dependencies: axios "^0.21.1" axios-retry "^3.1.9" @@ -5119,38 +5127,38 @@ medusa-telemetry@0.0.9-dev-1636035082111: remove-trailing-slash "^0.1.1" uuid "^8.3.2" -medusa-test-utils@1.1.29-dev-1636035082111: - version "1.1.29-dev-1636035082111" - resolved "http://localhost:4873/medusa-test-utils/-/medusa-test-utils-1.1.29-dev-1636035082111.tgz#0af59b052e8868a73bab534da16b17ace1397f78" - integrity sha512-LfLPPSADEAZWapd1dYfmzbs99HDtWUGZutCl5cCzVQ3G3Xx5IoJDvmRFMxfaAdfhvF2WWCaJK3P37CNO8fHGww== +medusa-test-utils@^1.1.29: + version "1.1.29" + resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.29.tgz#554ff0c770922be44c2bbc69929881dca371ce80" + integrity sha512-+cNjH6d8sBJjsCohWl/rTPzan8vaDCjyaiNXwbBkrObXdsW511bLcLx5vBj2KgQq7gcdJfVp3ybzB6t1AHGm7g== dependencies: "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "1.1.26-dev-1636035082111" + medusa-core-utils "^1.1.26" randomatic "^3.1.1" merge-descriptors@1.0.1: version "1.0.1" - resolved "http://localhost:4873/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= merge-stream@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 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: version "1.1.2" - resolved "http://localhost:4873/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= micromatch@^3.1.4: version "3.1.10" - resolved "http://localhost:4873/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" @@ -5169,56 +5177,56 @@ micromatch@^3.1.4: micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.4" - resolved "http://localhost:4873/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.50.0: - version "1.50.0" - resolved "http://localhost:4873/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" - integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.33" - resolved "http://localhost:4873/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" - integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.50.0" + mime-db "1.51.0" mime@1.6.0: version "1.6.0" - resolved "http://localhost:4873/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + 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" + resolved "https://registry.yarnpkg.com/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 "http://localhost:4873/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "http://localhost:4873/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" - resolved "http://localhost:4873/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" @@ -5226,14 +5234,14 @@ minipass@^2.6.0, minipass@^2.9.0: minizlib@^1.3.3: version "1.3.3" - resolved "http://localhost:4873/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" mixin-deep@^1.2.0: version "1.3.2" - resolved "http://localhost:4873/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" @@ -5241,31 +5249,31 @@ mixin-deep@^1.2.0: "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: version "0.5.5" - resolved "http://localhost:4873/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" mkdirp@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moment-timezone@^0.5.31: version "0.5.33" - resolved "http://localhost:4873/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== dependencies: moment ">= 2.9.0" "moment@>= 2.9.0": version "2.29.1" - resolved "http://localhost:4873/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== morgan@^1.9.1: version "1.10.0" - resolved "http://localhost:4873/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: basic-auth "~2.0.1" @@ -5276,27 +5284,27 @@ morgan@^1.9.1: ms@2.0.0: version "2.0.0" - resolved "http://localhost:4873/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.1: version "2.1.1" - resolved "http://localhost:4873/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== ms@2.1.2: version "2.1.2" - resolved "http://localhost:4873/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "http://localhost:4873/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== multer@^1.4.2: version "1.4.3" - resolved "http://localhost:4873/multer/-/multer-1.4.3.tgz#4db352d6992e028ac0eacf7be45c6efd0264297b" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.3.tgz#4db352d6992e028ac0eacf7be45c6efd0264297b" integrity sha512-np0YLKncuZoTzufbkM6wEKp68EhWJXcU6fq6QqrSwkckd2LlMgd1UqhUJLj6NS/5sZ8dE8LYDWslsltJznnXlg== dependencies: append-field "^1.0.0" @@ -5310,12 +5318,12 @@ 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: version "2.7.0" - resolved "http://localhost:4873/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -5324,7 +5332,7 @@ mz@^2.4.0: nanomatch@^1.2.9: version "1.2.13" - resolved "http://localhost:4873/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" @@ -5341,17 +5349,17 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 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== needle@^2.2.1: version "2.9.1" - resolved "http://localhost:4873/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== dependencies: debug "^3.2.6" @@ -5360,12 +5368,12 @@ needle@^2.2.1: negotiator@0.6.2: version "0.6.2" - resolved "http://localhost:4873/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 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" @@ -5373,12 +5381,12 @@ netrc-parser@^3.1.6: nice-try@^1.0.4: version "1.0.5" - resolved "http://localhost:4873/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^3.0.4: version "3.0.4" - resolved "http://localhost:4873/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" @@ -5386,12 +5394,12 @@ no-case@^3.0.4: node-addon-api@^3.0.0: version "3.2.1" - resolved "http://localhost:4873/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-environment-flags@^1.0.5: version "1.0.6" - resolved "http://localhost:4873/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== dependencies: object.getownpropertydescriptors "^2.0.3" @@ -5399,7 +5407,7 @@ node-environment-flags@^1.0.5: node-gyp@3.x: version "3.8.0" - resolved "http://localhost:4873/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" @@ -5417,17 +5425,17 @@ node-gyp@3.x: node-int64@^0.4.0: version "0.4.0" - resolved "http://localhost:4873/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-modules-regexp@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: version "8.0.2" - resolved "http://localhost:4873/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== dependencies: growly "^1.3.0" @@ -5439,7 +5447,7 @@ node-notifier@^8.0.0: node-pre-gyp@^0.11.0: version "0.11.0" - resolved "http://localhost:4873/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== dependencies: detect-libc "^1.0.2" @@ -5453,21 +5461,21 @@ node-pre-gyp@^0.11.0: semver "^5.3.0" tar "^4" -node-releases@^2.0.0: - version "2.0.0" - resolved "http://localhost:4873/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" - integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== "nopt@2 || 3": version "3.0.6" - resolved "http://localhost:4873/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1: version "4.0.3" - resolved "http://localhost:4873/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" @@ -5475,7 +5483,7 @@ nopt@^4.0.1: normalize-package-data@^2.5.0: version "2.5.0" - resolved "http://localhost:4873/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -5485,31 +5493,31 @@ normalize-package-data@^2.5.0: normalize-path@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== npm-bundled@^1.0.1: version "1.1.2" - resolved "http://localhost:4873/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== dependencies: npm-normalize-package-bin "^1.0.1" npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-packlist@^1.1.6: version "1.4.8" - resolved "http://localhost:4873/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" @@ -5518,21 +5526,21 @@ npm-packlist@^1.1.6: npm-run-path@^2.0.0: version "2.0.2" - resolved "http://localhost:4873/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2: version "4.1.2" - resolved "http://localhost:4873/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" @@ -5542,27 +5550,27 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: number-is-nan@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" - resolved "http://localhost:4873/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "http://localhost:4873/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" @@ -5571,29 +5579,29 @@ object-copy@^0.1.0: object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.11.0" - resolved "http://localhost:4873/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 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: version "1.0.1" - resolved "http://localhost:4873/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" - resolved "http://localhost:4873/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: call-bind "^1.0.0" @@ -5603,7 +5611,7 @@ object.assign@^4.1.0, object.assign@^4.1.2: object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: version "2.1.3" - resolved "http://localhost:4873/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" @@ -5612,48 +5620,48 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1 object.pick@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" - resolved "http://localhost:4873/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "http://localhost:4873/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "http://localhost:4873/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@^8.0.6: - version "8.3.0" - resolved "http://localhost:4873/open/-/open-8.3.0.tgz#fdef1cdfe405e60dec8ebd18889e7e812f39c59f" - integrity sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w== + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" @@ -5661,7 +5669,7 @@ open@^8.0.6: optionator@^0.8.1: version "0.8.3" - resolved "http://localhost:4873/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -5673,7 +5681,7 @@ optionator@^0.8.1: 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" @@ -5688,17 +5696,17 @@ ora@^5.4.1: os-homedir@^1.0.0: version "1.0.2" - resolved "http://localhost:4873/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-tmpdir@^1.0.0, 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= osenv@0, osenv@^0.1.4: version "0.1.5" - resolved "http://localhost:4873/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" @@ -5706,65 +5714,65 @@ osenv@0, osenv@^0.1.4: p-each-series@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "http://localhost:4873/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-locate@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== p-timeout@^3.2.0: version "3.2.0" - resolved "http://localhost:4873/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" p-try@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== packet-reader@1.0.0: version "1.0.0" - resolved "http://localhost:4873/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== parent-require@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= parse-json@^5.0.0: version "5.2.0" - resolved "http://localhost:4873/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -5774,34 +5782,34 @@ parse-json@^5.0.0: parse-passwd@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= parse5-htmlparser2-tree-adapter@^6.0.0: version "6.0.1" - resolved "http://localhost:4873/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" parse5@6.0.1, parse5@^6.0.1: version "6.0.1" - resolved "http://localhost:4873/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parse5@^5.1.1: version "5.1.1" - resolved "http://localhost:4873/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== parseurl@~1.3.3: version "1.3.3" - resolved "http://localhost:4873/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascal-case@^3.1.2: version "3.1.2" - resolved "http://localhost:4873/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" @@ -5809,19 +5817,19 @@ pascal-case@^3.1.2: pascalcase@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= passport-http-bearer@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/passport-http-bearer/-/passport-http-bearer-1.0.1.tgz#147469ea3669e2a84c6167ef99dbb77e1f0098a8" + resolved "https://registry.yarnpkg.com/passport-http-bearer/-/passport-http-bearer-1.0.1.tgz#147469ea3669e2a84c6167ef99dbb77e1f0098a8" integrity sha1-FHRp6jZp4qhMYWfvmdu3fh8AmKg= dependencies: passport-strategy "1.x.x" passport-jwt@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/passport-jwt/-/passport-jwt-4.0.0.tgz#7f0be7ba942e28b9f5d22c2ebbb8ce96ef7cf065" + resolved "https://registry.yarnpkg.com/passport-jwt/-/passport-jwt-4.0.0.tgz#7f0be7ba942e28b9f5d22c2ebbb8ce96ef7cf065" integrity sha512-BwC0n2GP/1hMVjR4QpnvqA61TxenUMlmfNjYNgK0ZAs0HK4SOQkHcSv4L328blNTLtHq7DbmvyNJiH+bn6C5Mg== dependencies: jsonwebtoken "^8.2.0" @@ -5829,19 +5837,19 @@ passport-jwt@^4.0.0: passport-local@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" integrity sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4= dependencies: passport-strategy "1.x.x" passport-strategy@1.x.x, passport-strategy@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ= passport@^0.4.0: version "0.4.1" - resolved "http://localhost:4873/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== dependencies: passport-strategy "1.x.x" @@ -5849,7 +5857,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" @@ -5857,62 +5865,62 @@ password-prompt@^1.1.2: path-exists@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "http://localhost:4873/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.7" - resolved "http://localhost:4873/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "http://localhost:4873/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 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: version "0.0.1" - resolved "http://localhost:4873/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= performance-now@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pg-connection-string@^2.5.0: version "2.5.0" - resolved "http://localhost:4873/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== 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" @@ -5924,22 +5932,22 @@ pg-god@^1.0.11: pg-int8@1.0.1: version "1.0.1" - resolved "http://localhost:4873/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== 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: version "1.5.0" - resolved "http://localhost:4873/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== pg-types@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== dependencies: pg-int8 "1.0.1" @@ -5950,7 +5958,7 @@ pg-types@^2.1.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" @@ -5963,82 +5971,82 @@ pg@^8.3.0, pg@^8.5.1: pgpass@1.x: version "1.0.4" - resolved "http://localhost:4873/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== dependencies: split2 "^3.1.1" picocolors@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" - resolved "http://localhost:4873/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.0, pirates@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" pkg-dir@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" pkg-dir@^4.2.0: version "4.2.0" - resolved "http://localhost:4873/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" posix-character-classes@^0.1.0: version "0.1.1" - resolved "http://localhost:4873/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postgres-array@~2.0.0: version "2.0.0" - resolved "http://localhost:4873/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== postgres-bytea@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU= postgres-date@~1.0.4: version "1.0.7" - resolved "http://localhost:4873/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== postgres-interval@^1.1.0: version "1.2.0" - resolved "http://localhost:4873/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== dependencies: xtend "^4.0.0" prelude-ls@~1.1.2: version "1.1.2" - resolved "http://localhost:4873/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= pretty-format@^26.6.2: version "26.6.2" - resolved "http://localhost:4873/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: "@jest/types" "^26.6.2" @@ -6048,17 +6056,17 @@ pretty-format@^26.6.2: process-nextick-args@~2.0.0: version "2.0.1" - resolved "http://localhost:4873/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + 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" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= promise.prototype.finally@^3.1.2: version "3.1.3" - resolved "http://localhost:4873/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz#d3186e58fcf4df1682a150f934ccc27b7893389c" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz#d3186e58fcf4df1682a150f934ccc27b7893389c" integrity sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ== dependencies: call-bind "^1.0.2" @@ -6067,7 +6075,7 @@ promise.prototype.finally@^3.1.2: prompts@^2.0.1, prompts@^2.4.1: version "2.4.2" - resolved "http://localhost:4873/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -6075,7 +6083,7 @@ prompts@^2.0.1, prompts@^2.4.1: proxy-addr@~2.0.5: version "2.0.7" - resolved "http://localhost:4873/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -6083,12 +6091,12 @@ proxy-addr@~2.0.5: psl@^1.1.28, psl@^1.1.33: version "1.8.0" - resolved "http://localhost:4873/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -6096,42 +6104,42 @@ 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.0, punycode@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@6.7.0: version "6.7.0" - resolved "http://localhost:4873/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@~6.5.2: version "6.5.2" - resolved "http://localhost:4873/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 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: version "1.0.0" - resolved "http://localhost:4873/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" integrity sha1-T2ih3Arli9P7lYSMMDJNt11kNgs= randomatic@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== dependencies: is-number "^4.0.0" @@ -6140,12 +6148,12 @@ randomatic@^3.1.1: range-parser@~1.2.1: version "1.2.1" - resolved "http://localhost:4873/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.4.0: version "2.4.0" - resolved "http://localhost:4873/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: bytes "3.1.0" @@ -6155,7 +6163,7 @@ raw-body@2.4.0: rc@^1.2.7: version "1.2.8" - resolved "http://localhost:4873/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -6165,12 +6173,12 @@ rc@^1.2.7: react-is@^17.0.1: version "17.0.2" - resolved "http://localhost:4873/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== read-pkg-up@^7.0.1: version "7.0.1" - resolved "http://localhost:4873/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -6179,7 +6187,7 @@ read-pkg-up@^7.0.1: read-pkg@^5.2.0: version "5.2.0" - resolved "http://localhost:4873/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -6189,7 +6197,7 @@ read-pkg@^5.2.0: readable-stream@1.1.x: version "1.1.14" - resolved "http://localhost:4873/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= dependencies: core-util-is "~1.0.0" @@ -6199,7 +6207,7 @@ readable-stream@1.1.x: readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.7: version "2.3.7" - resolved "http://localhost:4873/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" @@ -6212,7 +6220,7 @@ readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.7: readable-stream@^3.0.0, readable-stream@^3.4.0: version "3.6.0" - resolved "http://localhost:4873/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: inherits "^2.0.3" @@ -6221,43 +6229,43 @@ readable-stream@^3.0.0, readable-stream@^3.4.0: readdirp@~3.6.0: version "3.6.0" - resolved "http://localhost:4873/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" readline-sync@^1.4.9: version "1.4.10" - resolved "http://localhost:4873/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" + resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b" integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw== 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" redis-commands@1.7.0, redis-commands@^1.7.0: version "1.7.0" - resolved "http://localhost:4873/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.7.0.tgz#15a6fea2d58281e27b1cd1acfb4b293e278c3a89" integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= redis-parser@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= dependencies: redis-errors "^1.0.0" redis@^3.0.2: version "3.1.2" - resolved "http://localhost:4873/redis/-/redis-3.1.2.tgz#766851117e80653d23e0ed536254677ab647638c" + resolved "https://registry.yarnpkg.com/redis/-/redis-3.1.2.tgz#766851117e80653d23e0ed536254677ab647638c" integrity sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw== dependencies: denque "^1.5.0" @@ -6267,36 +6275,36 @@ redis@^3.0.2: reflect-metadata@^0.1.13: version "0.1.13" - resolved "http://localhost:4873/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== regenerate-unicode-properties@^9.0.0: version "9.0.0" - resolved "http://localhost:4873/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "http://localhost:4873/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + 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, 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: version "0.14.5" - resolved "http://localhost:4873/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: "@babel/runtime" "^7.8.4" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" @@ -6304,7 +6312,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexpu-core@^4.7.1: version "4.8.0" - resolved "http://localhost:4873/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== dependencies: regenerate "^1.4.2" @@ -6316,46 +6324,46 @@ regexpu-core@^4.7.1: regjsgen@^0.5.2: version "0.5.2" - resolved "http://localhost:4873/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.7.0: version "0.7.0" - resolved "http://localhost:4873/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "http://localhost:4873/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 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: version "1.1.4" - resolved "http://localhost:4873/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" - resolved "http://localhost:4873/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= request-ip@^2.1.3: version "2.1.3" - resolved "http://localhost:4873/request-ip/-/request-ip-2.1.3.tgz#99ab2bafdeaf2002626e28083cb10597511d9e14" + resolved "https://registry.yarnpkg.com/request-ip/-/request-ip-2.1.3.tgz#99ab2bafdeaf2002626e28083cb10597511d9e14" integrity sha512-J3qdE/IhVM3BXkwMIVO4yFrvhJlU3H7JH16+6yHucadT4fePnR8dyh+vEs6FIx0S2x5TCt2ptiPfHcn0sqhbYQ== dependencies: is_js "^0.9.0" request@^2.87.0: version "2.88.2" - resolved "http://localhost:4873/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -6381,34 +6389,34 @@ request@^2.87.0: require-directory@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1: version "1.20.0" - resolved "http://localhost:4873/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: is-core-module "^2.2.0" @@ -6416,7 +6424,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" @@ -6424,82 +6432,82 @@ restore-cursor@^3.1.0: ret@~0.1.10: version "0.1.15" - resolved "http://localhost:4873/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 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@2, rimraf@^2.6.1: version "2.7.1" - resolved "http://localhost:4873/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.0: version "3.0.2" - resolved "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rsvp@^4.8.4: version "4.8.5" - resolved "http://localhost:4873/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== 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.4.0" - resolved "http://localhost:4873/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== dependencies: tslib "~2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" safe-stable-stringify@^1.1.0: version "1.1.1" - resolved "http://localhost:4873/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a" integrity sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw== "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "http://localhost:4873/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^4.0.3: version "4.1.0" - resolved "http://localhost:4873/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: "@cnakazawa/watch" "^1.0.3" @@ -6514,51 +6522,51 @@ sane@^4.0.3: sax@>=0.6.0, sax@^1.2.4: version "1.2.4" - resolved "http://localhost:4873/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== dependencies: xmlchars "^2.2.0" scrypt-kdf@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/scrypt-kdf/-/scrypt-kdf-2.0.1.tgz#3355224c52d398331b2cbf2b70a7be26b52c53e6" + resolved "https://registry.yarnpkg.com/scrypt-kdf/-/scrypt-kdf-2.0.1.tgz#3355224c52d398331b2cbf2b70a7be26b52c53e6" integrity sha512-dMhpgBVJPDWZP5erOCwTjI6oAO9hKhFAjZsdSQ0spaWJYHuA/wFNF2weQQfsyCIk8eNKoLfEDxr3zAtM+gZo0Q== "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: version "5.7.1" - resolved "http://localhost:4873/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@7.0.0: version "7.0.0" - resolved "http://localhost:4873/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" - resolved "http://localhost:4873/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2: version "7.3.5" - resolved "http://localhost:4873/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" semver@~5.3.0: version "5.3.0" - resolved "http://localhost:4873/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= send@0.17.1: version "0.17.1" - resolved "http://localhost:4873/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" @@ -6577,7 +6585,7 @@ send@0.17.1: serve-static@1.14.1: version "1.14.1" - resolved "http://localhost:4873/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" @@ -6587,12 +6595,12 @@ serve-static@1.14.1: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "http://localhost:4873/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" @@ -6602,12 +6610,12 @@ set-value@^2.0.0, set-value@^2.0.1: setprototypeof@1.1.1: version "1.1.1" - resolved "http://localhost:4873/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== sha.js@^2.4.11: version "2.4.11" - resolved "http://localhost:4873/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" @@ -6615,43 +6623,43 @@ sha.js@^2.4.11: shallow-clone@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shellwords@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + 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 "http://localhost:4873/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -6660,34 +6668,34 @@ side-channel@^1.0.4: signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.5" - resolved "http://localhost:4873/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== simple-swizzle@^0.2.2: version "0.2.2" - resolved "http://localhost:4873/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= dependencies: is-arrayish "^0.3.1" sisteransi@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slash@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== snapdragon-node@^2.0.1: version "2.1.1" - resolved "http://localhost:4873/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" @@ -6696,14 +6704,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" - resolved "http://localhost:4873/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" @@ -6717,7 +6725,7 @@ snapdragon@^0.8.1: source-map-resolve@^0.5.0: version "0.5.3" - resolved "http://localhost:4873/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" @@ -6728,7 +6736,7 @@ source-map-resolve@^0.5.0: source-map-support@^0.5.16, source-map-support@^0.5.6: version "0.5.20" - resolved "http://localhost:4873/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" @@ -6736,27 +6744,27 @@ source-map-support@^0.5.16, source-map-support@^0.5.6: source-map-url@^0.4.0: version "0.4.1" - resolved "http://localhost:4873/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" - resolved "http://localhost:4873/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "http://localhost:4873/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: version "0.7.3" - resolved "http://localhost:4873/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdx-correct@^3.0.0: version "3.1.1" - resolved "http://localhost:4873/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" @@ -6764,12 +6772,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "http://localhost:4873/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -6777,36 +6785,36 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.10" - resolved "http://localhost:4873/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + 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" - resolved "http://localhost:4873/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^3.1.1: version "3.2.2" - resolved "http://localhost:4873/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" sprintf-js@^1.1.1: version "1.1.2" - resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" - resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sqlite3@^5.0.2: version "5.0.2" - resolved "http://localhost:4873/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083" integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA== dependencies: node-addon-api "^3.0.0" @@ -6816,7 +6824,7 @@ sqlite3@^5.0.2: sshpk@^1.7.0: version "1.16.1" - resolved "http://localhost:4873/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" @@ -6831,24 +6839,24 @@ sshpk@^1.7.0: stack-trace@0.0.x, stack-trace@^0.0.10: version "0.0.10" - resolved "http://localhost:4873/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= stack-utils@^2.0.2: version "2.0.5" - resolved "http://localhost:4873/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== dependencies: escape-string-regexp "^2.0.0" standard-as-callback@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.1.0.tgz#8953fc05359868a77b5b9739a665c5977bb7df45" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== static-extend@^0.1.1: version "0.1.2" - resolved "http://localhost:4873/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" @@ -6856,17 +6864,17 @@ static-extend@^0.1.1: "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" - resolved "http://localhost:4873/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= streamsearch@0.1.2: version "0.1.2" - resolved "http://localhost:4873/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= string-length@^4.0.1: version "4.0.2" - resolved "http://localhost:4873/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -6874,33 +6882,33 @@ string-length@^4.0.1: string-width@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "http://localhost:4873/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" - resolved "http://localhost:4873/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.1.1: + version "2.1.1" + 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" + strip-ansi "^4.0.0" + string.prototype.trimend@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: call-bind "^1.0.2" @@ -6908,7 +6916,7 @@ string.prototype.trimend@^1.0.4: string.prototype.trimstart@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: call-bind "^1.0.2" @@ -6916,93 +6924,93 @@ string.prototype.trimstart@^1.0.4: string_decoder@^1.1.1: version "1.3.0" - resolved "http://localhost:4873/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~0.10.x: version "0.10.31" - resolved "http://localhost:4873/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= string_decoder@~1.1.1: version "1.1.1" - resolved "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.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@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-eof@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@~2.0.1: version "2.0.1" - resolved "http://localhost:4873/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= supports-color@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^5.3.0: version "5.5.0" - resolved "http://localhost:4873/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "http://localhost:4873/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.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" supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" @@ -7010,12 +7018,12 @@ supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: symbol-tree@^3.2.4: version "3.2.4" - resolved "http://localhost:4873/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tar@^2.0.0: version "2.2.2" - resolved "http://localhost:4873/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" @@ -7024,7 +7032,7 @@ tar@^2.0.0: tar@^4: version "4.4.19" - resolved "http://localhost:4873/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== dependencies: chownr "^1.1.4" @@ -7037,7 +7045,7 @@ tar@^4: terminal-link@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: ansi-escapes "^4.2.1" @@ -7045,7 +7053,7 @@ terminal-link@^2.0.0: test-exclude@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -7054,60 +7062,60 @@ test-exclude@^6.0.0: text-hex@1.0.x: version "1.0.0" - resolved "http://localhost:4873/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== thenify-all@^1.0.0: version "1.6.0" - resolved "http://localhost:4873/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "http://localhost:4873/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" throat@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== 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" -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" - resolved "http://localhost:4873/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" - resolved "http://localhost:4873/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" - resolved "http://localhost:4873/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" @@ -7115,14 +7123,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "http://localhost:4873/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" @@ -7132,12 +7140,12 @@ to-regex@^3.0.1, to-regex@^3.0.2: toidentifier@1.0.0: version "1.0.0" - resolved "http://localhost:4873/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== tough-cookie@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: psl "^1.1.33" @@ -7146,7 +7154,7 @@ tough-cookie@^4.0.0: tough-cookie@~2.5.0: version "2.5.0" - resolved "http://localhost:4873/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" @@ -7154,78 +7162,78 @@ tough-cookie@~2.5.0: tr46@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== dependencies: punycode "^2.1.1" triple-beam@^1.2.0, triple-beam@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== 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.1" - resolved "http://localhost:4873/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + 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== tunnel-agent@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "http://localhost:4873/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" - resolved "http://localhost:4873/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" - resolved "http://localhost:4873/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 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: version "0.21.3" - resolved "http://localhost:4873/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "http://localhost:4873/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" - resolved "http://localhost:4873/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -7233,19 +7241,19 @@ type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "http://localhost:4873/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typedarray@^0.0.6: version "0.0.6" - resolved "http://localhost:4873/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typeorm@^0.2.31: version "0.2.38" - resolved "http://localhost:4873/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f" integrity sha512-M6Y3KQcAREQcphOVJciywf4mv6+A0I/SeR+lWNjKsjnQ+a3XcMwGYMGL0Jonsx3H0Cqlf/3yYqVki1jIXSK/xg== dependencies: "@sqltools/formatter" "^1.2.2" @@ -7268,19 +7276,19 @@ typeorm@^0.2.31: uid-safe@~2.1.5: version "2.1.5" - resolved "http://localhost:4873/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== dependencies: random-bytes "~1.0.0" ulid@^2.3.0: version "2.3.0" - resolved "http://localhost:4873/ulid/-/ulid-2.3.0.tgz#93063522771a9774121a84d126ecd3eb9804071f" + resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.3.0.tgz#93063522771a9774121a84d126ecd3eb9804071f" integrity sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw== unbox-primitive@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== dependencies: function-bind "^1.1.1" @@ -7290,12 +7298,12 @@ unbox-primitive@^1.0.1: unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" @@ -7303,17 +7311,17 @@ unicode-match-property-ecmascript@^2.0.0: unicode-match-property-value-ecmascript@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== unicode-property-aliases-ecmascript@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" @@ -7323,29 +7331,29 @@ 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" universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" - resolved "http://localhost:4873/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 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: version "1.0.0" - resolved "http://localhost:4873/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" @@ -7353,19 +7361,19 @@ unset-value@^1.0.0: uri-js@^4.2.2: version "4.4.1" - resolved "http://localhost:4873/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 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" @@ -7373,17 +7381,17 @@ url@^0.11.0: use@^3.1.0: version "3.1.1" - resolved "http://localhost:4873/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.1: version "1.1.1" - resolved "http://localhost:4873/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== dependencies: call-bind "^1.0.0" @@ -7394,22 +7402,22 @@ util.promisify@^1.0.1: utils-merge@1.0.1: version "1.0.1" - resolved "http://localhost:4873/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@^3.3.2: version "3.4.0" - resolved "http://localhost:4873/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.3.0, uuid@^8.3.1, uuid@^8.3.2: version "8.3.2" - resolved "http://localhost:4873/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-to-istanbul@^7.0.0: version "7.1.2" - resolved "http://localhost:4873/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" @@ -7418,14 +7426,14 @@ v8-to-istanbul@^7.0.0: v8flags@^3.1.1: version "3.2.0" - resolved "http://localhost:4873/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== dependencies: homedir-polyfill "^1.0.1" validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "http://localhost:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -7433,12 +7441,12 @@ validate-npm-package-license@^3.0.1: vary@^1, vary@~1.1.2: version "1.1.2" - resolved "http://localhost:4873/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" - resolved "http://localhost:4873/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" @@ -7447,57 +7455,57 @@ verror@1.10.0: w3c-hr-time@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== dependencies: xml-name-validator "^3.0.0" walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "http://localhost:4873/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" 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" webidl-conversions@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== webidl-conversions@^6.1.0: version "6.1.0" - resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== whatwg-encoding@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "http://localhost:4873/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" - resolved "http://localhost:4873/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== dependencies: lodash "^4.7.0" @@ -7506,7 +7514,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -7517,40 +7525,40 @@ which-boxed-primitive@^1.0.2: which-module@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1, which@^1.2.9: version "1.3.1" - resolved "http://localhost:4873/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "http://localhost:4873/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.3" - resolved "http://localhost:4873/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" 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" winston-transport@^4.4.0: version "4.4.0" - resolved "http://localhost:4873/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59" integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw== dependencies: readable-stream "^2.3.7" @@ -7558,7 +7566,7 @@ winston-transport@^4.4.0: winston@^3.2.1, winston@^3.3.3: version "3.3.3" - resolved "http://localhost:4873/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170" integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw== dependencies: "@dabh/diagnostics" "^2.0.2" @@ -7573,12 +7581,12 @@ winston@^3.2.1, winston@^3.3.3: word-wrap@~1.2.3: version "1.2.3" - resolved "http://localhost:4873/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 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" @@ -7587,7 +7595,7 @@ wrap-ansi@^4.0.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -7596,7 +7604,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -7605,12 +7613,12 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: version "3.0.3" - resolved "http://localhost:4873/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -7620,22 +7628,22 @@ write-file-atomic@^3.0.0: ws@^7.4.6: version "7.5.5" - resolved "http://localhost:4873/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== 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: version "3.0.0" - resolved "http://localhost:4873/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml2js@^0.4.23: version "0.4.23" - resolved "http://localhost:4873/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: sax ">=0.6.0" @@ -7643,42 +7651,42 @@ xml2js@^0.4.23: xmlbuilder@~11.0.0: version "11.0.1" - resolved "http://localhost:4873/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlchars@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xtend@^4.0.0: version "4.0.2" - resolved "http://localhost:4873/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: version "4.0.3" - resolved "http://localhost:4873/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== y18n@^5.0.5: version "5.0.8" - resolved "http://localhost:4873/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.0, yallist@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargonaut@^1.1.4: version "1.1.4" - resolved "http://localhost:4873/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== dependencies: chalk "^1.1.1" @@ -7687,7 +7695,7 @@ yargonaut@^1.1.4: yargs-parser@^18.1.2: version "18.1.3" - resolved "http://localhost:4873/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" @@ -7695,12 +7703,12 @@ yargs-parser@^18.1.2: yargs-parser@^20.2.2: version "20.2.9" - resolved "http://localhost:4873/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs@^15.3.1, yargs@^15.4.1: version "15.4.1" - resolved "http://localhost:4873/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" @@ -7717,7 +7725,7 @@ yargs@^15.3.1, yargs@^15.4.1: yargs@^16.0.0: version "16.2.0" - resolved "http://localhost:4873/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -7730,7 +7738,7 @@ yargs@^16.0.0: yargs@^17.0.1: version "17.2.1" - resolved "http://localhost:4873/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== dependencies: cliui "^7.0.2" @@ -7743,7 +7751,7 @@ yargs@^17.0.1: zen-observable-ts@^1.0.0: version "1.1.0" - resolved "http://localhost:4873/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + 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" @@ -7751,5 +7759,5 @@ zen-observable-ts@^1.0.0: zen-observable@0.8.15: version "0.8.15" - resolved "http://localhost:4873/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== diff --git a/package.json b/package.json index 3db1514aef..bfc0125e5e 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "babel-jest": "^26.6.3", "babel-preset-medusa-package": "^1.0.0", "cross-env": "^7.0.2", - "eslint": "^8.0.0", + "eslint": "^8.2.0", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", diff --git a/packages/medusa-core-utils/.babelrc b/packages/medusa-core-utils/.babelrc index b48db12268..b0e5acb516 100644 --- a/packages/medusa-core-utils/.babelrc +++ b/packages/medusa-core-utils/.babelrc @@ -1,6 +1,6 @@ { "plugins": ["@babel/plugin-proposal-class-properties"], - "presets": ["@babel/preset-env"], + "presets": ["@babel/preset-env", "@babel/preset-typescript"], "env": { "test": { "plugins": ["@babel/plugin-transform-runtime"] diff --git a/packages/medusa-core-utils/package.json b/packages/medusa-core-utils/package.json index 7f52bb3a14..b3f80bdbdb 100644 --- a/packages/medusa-core-utils/package.json +++ b/packages/medusa-core-utils/package.json @@ -10,7 +10,7 @@ }, "scripts": { "test": "jest", - "build": "babel src --out-dir dist/ --ignore **/__tests__", + "build": "tsc --build", "prepare": "cross-env NODE_ENV=production npm run build", "watch": "babel -w src --out-dir dist/ --ignore **/__tests__" }, @@ -23,15 +23,19 @@ "@babel/plugin-transform-classes": "^7.9.5", "@babel/plugin-transform-runtime": "^7.7.6", "@babel/preset-env": "^7.13.9", + "@babel/preset-typescript": "^7.16.0", "@babel/runtime": "^7.13.9", + "class-transformer": "^0.4.0", + "class-validator": "^0.13.1", "cross-env": "^5.2.1", "eslint": "^6.8.0", "jest": "^25.5.2", - "prettier": "^1.19.1" + "prettier": "^1.19.1", + "typescript": "^4.4.4" }, "dependencies": { "joi": "^17.3.0", "joi-objectid": "^3.0.1" }, "gitHead": "41a5425405aea5045a26def95c0dc00cf4a5a44d" -} +} \ No newline at end of file diff --git a/packages/medusa-core-utils/src/errors.js b/packages/medusa-core-utils/src/errors.ts similarity index 67% rename from packages/medusa-core-utils/src/errors.js rename to packages/medusa-core-utils/src/errors.ts index a81ec59943..a063104e3b 100644 --- a/packages/medusa-core-utils/src/errors.js +++ b/packages/medusa-core-utils/src/errors.ts @@ -22,12 +22,21 @@ export const MedusaErrorCodes = { * @extends Error */ class MedusaError extends Error { + public type: string + public message: string + public code?: string + public date: Date + public static Types = MedusaErrorTypes + public static Codes = MedusaErrorCodes + /** * Creates a standardized error to be used across Medusa project. - * @param type {MedusaErrorType} - the type of error. - * @param params {Array} - Error params. + * @param {string} type - type of error + * @param {string} message - message to go along with error + * @param {string} code - code of error + * @param {Array} params - params */ - constructor(type, message, code, ...params) { + constructor(type: string, message: string, code?: string, ...params: any) { super(...params) if (Error.captureStackTrace) { @@ -35,14 +44,10 @@ class MedusaError extends Error { } this.type = type - this.name = type this.code = code this.message = message this.date = new Date() } } -MedusaError.Types = MedusaErrorTypes -MedusaError.Codes = MedusaErrorCodes - export default MedusaError diff --git a/packages/medusa-core-utils/src/index.js b/packages/medusa-core-utils/src/index.js index 84ab4ee0d2..4b252770d3 100644 --- a/packages/medusa-core-utils/src/index.js +++ b/packages/medusa-core-utils/src/index.js @@ -1,11 +1,11 @@ -export { countries } from "./countries" -export { isoCountryLookup } from "./countries" -export { transformIdableFields } from "./transform-idable-fields" -export { indexTypes } from "./index-types" -export { default as Validator } from "./validator" +export { default as compareObjectsByProp } from "./compare-objects" +export { countries, isoCountryLookup } from "./countries" +export { default as createRequireFromPath } from "./create-require-from-path" export { default as MedusaError } from "./errors" export { default as getConfigFile } from "./get-config-file" -export { default as createRequireFromPath } from "./create-require-from-path" -export { default as compareObjectsByProp } from "./compare-objects" -export { default as zeroDecimalCurrencies } from "./zero-decimal-currencies" export { default as humanizeAmount } from "./humanize-amount" +export { indexTypes } from "./index-types" +export { transformIdableFields } from "./transform-idable-fields" +export { default as Validator } from "./validator" +export { default as zeroDecimalCurrencies } from "./zero-decimal-currencies" + diff --git a/packages/medusa-core-utils/tsconfig.json b/packages/medusa-core-utils/tsconfig.json new file mode 100644 index 0000000000..3d8c0d6e85 --- /dev/null +++ b/packages/medusa-core-utils/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["es5", "es6"], + "target": "es5", + "outDir": "./dist", + "esModuleInterop": true, + "declaration": true, + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "noImplicitReturns": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noImplicitThis": true, + "allowJs": true, + "skipLibCheck": true + }, + "include": ["./src/**/*"], + "exclude": ["./dist/**/*", "./src/__tests__", "node_modules"] +} diff --git a/packages/medusa-core-utils/yarn.lock b/packages/medusa-core-utils/yarn.lock index 69bf2b4827..b50cf3bf44 100644 --- a/packages/medusa-core-utils/yarn.lock +++ b/packages/medusa-core-utils/yarn.lock @@ -3,199 +3,112 @@ "@babel/cli@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.13.0.tgz#48e77614e897615ca299bece587b68a70723ff4c" - integrity sha512-y5AohgeVhU+wO5kU1WGMLdocFj83xCxVjsVFa2ilII8NEwmBZvx7Ambq621FbFIK68loYJ9p43nfoi6es+rzSA== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3" + integrity sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.17.19" make-dir "^2.1.0" slash "^2.0.0" source-map "^0.5.0" optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/highlight" "^7.16.0" -"@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" + integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.13.8", "@babel/core@^7.7.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.0", "@babel/compat-data@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" - integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== - -"@babel/core@^7.1.0": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" - integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.6" - "@babel/parser" "^7.9.6" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb" - integrity sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helpers" "^7.13.0" - "@babel/parser" "^7.13.4" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.1.2" - lodash "^4.17.19" semver "^6.3.0" source-map "^0.5.0" -"@babel/core@^7.7.5": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" - integrity sha512-4XFkf8AwyrEG7Ziu3L2L0Cv+WyY47Tcsp70JFmpftbAA1K7YL/sgE9jh9HyNj08Y/U50ItUchpN0w6HxAoX1rA== +"@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helpers" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.13.0": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" - integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== - dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.16.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03" - integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug== +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== dependencies: - "@babel/types" "^7.8.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/types" "^7.16.0" -"@babel/generator@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" - integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" + integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== dependencies: - "@babel/types" "^7.9.6" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/helper-explode-assignable-expression" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz#02bdb22783439afb11b2f009814bdd88384bd468" - integrity sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04" - integrity sha512-qioaRrKHQbn4hkRKDHbnuQ6kAxmmOF+kzKGnIfxPK4j2rckSJCpKzr/SSTlohSCiE3uAQpNDJ9FIh4baeE8W+w== +"@babel/helper-create-class-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== +"@babel/helper-create-regexp-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" + integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.16.0" regexpu-core "^4.7.1" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-define-polyfill-provider@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" - integrity sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg== +"@babel/helper-define-polyfill-provider@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz#8867aed79d3ea6cade40f801efb7ac5c66916b10" + integrity sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -206,400 +119,302 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== +"@babel/helper-explode-assignable-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" + integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" - integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.9.5" + "@babel/types" "^7.16.0" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== +"@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.0" -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== +"@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-member-expression-to-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" - integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== +"@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== dependencies: - "@babel/types" "^7.13.0" + "@babel/types" "^7.16.0" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-remap-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz#d5aa3b086e13a5fe05238ff40c3a5a0c2dab3ead" + integrity sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew== dependencies: - "@babel/types" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-wrap-function" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" - integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== dependencies: - "@babel/types" "^7.12.13" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" - integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.12.11" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - lodash "^4.17.19" + "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" - lodash "^4.17.13" + "@babel/types" "^7.16.0" -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helper-wrap-function@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" + integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== dependencies: - "@babel/types" "^7.12.13" + "@babel/helper-function-name" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helpers@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== dependencies: - "@babel/types" "^7.8.3" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" - integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.0" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.8.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444" - integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - -"@babel/helper-simple-access@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" - integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/helper-validator-identifier@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" - integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.0.tgz#7647ae57377b4f0408bf4f8a7af01c42e41badc0" - integrity sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85" - integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580" - integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - -"@babel/highlight@^7.12.13": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.8.tgz#10b2dac78526424dfc1f47650d0e415dfd9dc481" - integrity sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" + integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.0": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" + integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7" - integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q== - -"@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" - integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw== - -"@babel/parser@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" - integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== - -"@babel/plugin-proposal-async-generator-functions@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" + integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + +"@babel/plugin-proposal-async-generator-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz#11425d47a60364352f668ad5fbc1d6596b2c5caf" + integrity sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" + integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== +"@babel/plugin-proposal-class-static-block@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" + integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" + integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz#393be47a4acd03fa2af6e3cde9b06e33de1b446d" - integrity sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw== +"@babel/plugin-proposal-export-namespace-from@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" + integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== +"@babel/plugin-proposal-json-strings@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" + integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz#93fa78d63857c40ce3c8c3315220fd00bfbb4e1a" - integrity sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" + integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" + integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz#bd9da3188e787b5120b4f9d465a8261ce67ed1db" - integrity sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w== +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" + integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== +"@babel/plugin-proposal-object-rest-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" + integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.16.0" -"@babel/plugin-proposal-optional-catch-binding@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== +"@babel/plugin-proposal-optional-catch-binding@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" + integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz#e39df93efe7e7e621841babc197982e140e90756" - integrity sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ== +"@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" + integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== +"@babel/plugin-proposal-private-property-in-object@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" + integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" + integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -615,19 +430,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.8.3.tgz#6cb933a8872c8d359bfde69bbeaae5162fd1e8f7" - integrity sha512-UcAyQWg2bAN647Q+O811tG9MrJ38Z10jjhQdKNAL8fsyPzE3cCN/uT+f55cFVY4aGO4jqJAvmqsuY3GQDwAoXg== +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" @@ -643,6 +458,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -650,20 +472,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" - integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" @@ -671,20 +486,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" @@ -706,309 +514,325 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-syntax-top-level-await@^7.14.5": + 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== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-syntax-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-arrow-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" + integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" + integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" -"@babel/plugin-transform-classes@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== +"@babel/plugin-transform-block-scoped-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" + integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" + integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.16.0", "@babel/plugin-transform-classes@^7.9.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" + integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" - integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== +"@babel/plugin-transform-computed-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" + integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - globals "^11.1.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-destructuring@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" + integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" + integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== +"@babel/plugin-transform-duplicate-keys@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" + integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-exponentiation-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" + integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-for-of@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" + integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" + integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-member-expression-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" + integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-modules-amd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-modules-amd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== - dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" + integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.16.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" + integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.15.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" + integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" + integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" + integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" + integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" -"@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" + integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" + integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-regenerator@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" + integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-reserved-words@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" + integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@^7.7.6": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169" - integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.0.tgz#3fe0da36c2f0834bef7c4d3e7f2b2db0ee0c8909" + integrity sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - resolve "^1.8.1" - semver "^5.5.1" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" + semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== +"@babel/plugin-transform-shorthand-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" + integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== +"@babel/plugin-transform-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" + integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== +"@babel/plugin-transform-sticky-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" + integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== +"@babel/plugin-transform-template-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" + integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-typeof-symbol@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" + integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== +"@babel/plugin-transform-typescript@^7.16.0": + version "7.16.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" + integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.16.0" -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== +"@babel/plugin-transform-unicode-escapes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" + integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-unicode-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" + integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@^7.13.9": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.13.9.tgz#3ee5f233316b10d066d7f379c6d1e13a96853654" - integrity sha512-mcsHUlh2rIhViqMG823JpscLMesRt3QbMsv1+jhopXEb3W2wXvQ9QoiOlZI9ZbR3XqPtaFpZwEZKYqGJnGMZTQ== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.0.tgz#97228393d217560d6a1c6c56f0adb9d12bca67f5" + integrity sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-proposal-async-generator-functions" "^7.13.8" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-dynamic-import" "^7.13.8" - "@babel/plugin-proposal-export-namespace-from" "^7.12.13" - "@babel/plugin-proposal-json-strings" "^7.13.8" - "@babel/plugin-proposal-logical-assignment-operators" "^7.13.8" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-numeric-separator" "^7.12.13" - "@babel/plugin-proposal-object-rest-spread" "^7.13.8" - "@babel/plugin-proposal-optional-catch-binding" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.8" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-class-static-block" "^7.16.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.0" + "@babel/plugin-proposal-export-namespace-from" "^7.16.0" + "@babel/plugin-proposal-json-strings" "^7.16.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-object-rest-spread" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" @@ -1018,51 +842,52 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.12.13" - "@babel/plugin-transform-classes" "^7.13.0" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.13.0" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.13.0" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.13.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.12.13" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.13.0" - babel-plugin-polyfill-corejs2 "^0.1.4" - babel-plugin-polyfill-corejs3 "^0.1.3" - babel-plugin-polyfill-regenerator "^0.1.2" - core-js-compat "^3.9.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.0" + "@babel/plugin-transform-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions" "^7.16.0" + "@babel/plugin-transform-block-scoping" "^7.16.0" + "@babel/plugin-transform-classes" "^7.16.0" + "@babel/plugin-transform-computed-properties" "^7.16.0" + "@babel/plugin-transform-destructuring" "^7.16.0" + "@babel/plugin-transform-dotall-regex" "^7.16.0" + "@babel/plugin-transform-duplicate-keys" "^7.16.0" + "@babel/plugin-transform-exponentiation-operator" "^7.16.0" + "@babel/plugin-transform-for-of" "^7.16.0" + "@babel/plugin-transform-function-name" "^7.16.0" + "@babel/plugin-transform-literals" "^7.16.0" + "@babel/plugin-transform-member-expression-literals" "^7.16.0" + "@babel/plugin-transform-modules-amd" "^7.16.0" + "@babel/plugin-transform-modules-commonjs" "^7.16.0" + "@babel/plugin-transform-modules-systemjs" "^7.16.0" + "@babel/plugin-transform-modules-umd" "^7.16.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" + "@babel/plugin-transform-new-target" "^7.16.0" + "@babel/plugin-transform-object-super" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-transform-property-literals" "^7.16.0" + "@babel/plugin-transform-regenerator" "^7.16.0" + "@babel/plugin-transform-reserved-words" "^7.16.0" + "@babel/plugin-transform-shorthand-properties" "^7.16.0" + "@babel/plugin-transform-spread" "^7.16.0" + "@babel/plugin-transform-sticky-regex" "^7.16.0" + "@babel/plugin-transform-template-literals" "^7.16.0" + "@babel/plugin-transform-typeof-symbol" "^7.16.0" + "@babel/plugin-transform-unicode-escapes" "^7.16.0" + "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.0" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" + core-js-compat "^3.19.0" semver "^6.3.0" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -1070,119 +895,52 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/preset-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac" + integrity sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-typescript" "^7.16.0" + "@babel/runtime@^7.13.9", "@babel/runtime@^7.8.4": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.9.tgz#97dbe2116e2630c489f22e0656decd60aaa1fcee" - integrity sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA== + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== +"@babel/template@^7.16.0", "@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/template@^7.3.3", "@babel/template@^7.7.4", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442" - integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-function-name" "^7.9.5" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.6" - "@babel/types" "^7.9.6" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.13" -"@babel/traverse@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" - integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.13.0" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.13.0" - "@babel/types" "^7.13.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" - integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.9.0", "@babel/types@^7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7" - integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA== - dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.4.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" - integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.6", "@babel/types@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" - integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== - dependencies: - "@babel/helper-validator-identifier" "^7.9.5" - lodash "^4.17.13" + "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1199,31 +957,32 @@ minimist "^1.2.0" "@hapi/hoek@^9.0.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6" - integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw== + version "9.2.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" + integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== "@hapi/topo@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" - integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== + 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.0.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" - integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" find-up "^4.1.0" + get-package-type "^0.1.0" js-yaml "^3.13.1" resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^25.5.0": version "25.5.0" @@ -1236,10 +995,10 @@ jest-util "^25.5.0" slash "^3.0.0" -"@jest/core@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.2.tgz#d3f49782ad5c09478214ddd45249e5b7663a0328" - integrity sha512-vc7WqwPbFX22EWDbuxJDnWDh5YYyReimgxKO/DYA1wMJd7/PcbUwM4PY7xadRZ2ze8Wi3OtmXP8ZbJEfcWY5Xg== +"@jest/core@^25.5.4": + version "25.5.4" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" + integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== dependencies: "@jest/console" "^25.5.0" "@jest/reporters" "^25.5.1" @@ -1251,14 +1010,14 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^25.5.0" - jest-config "^25.5.2" + jest-config "^25.5.4" jest-haste-map "^25.5.1" jest-message-util "^25.5.0" jest-regex-util "^25.2.6" jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.2" - jest-runner "^25.5.2" - jest-runtime "^25.5.2" + jest-resolve-dependencies "^25.5.4" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" jest-snapshot "^25.5.1" jest-util "^25.5.0" jest-validate "^25.5.0" @@ -1350,16 +1109,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.2.tgz#3d291179de020f42835469fff1de496d6309848a" - integrity sha512-spQjGJ+QTjqB2NcZclkEpStF4uXxfpMfGAsW12dtxfjR9nsxTyTEYt8JUtrpxfYk8R1iTbcwkayekxZPB2MEiw== +"@jest/test-sequencer@^25.5.4": + version "25.5.4" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" + integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== dependencies: "@jest/test-result" "^25.5.0" graceful-fs "^4.2.4" jest-haste-map "^25.5.1" - jest-runner "^25.5.2" - jest-runtime "^25.5.2" + jest-runner "^25.5.4" + jest-runtime "^25.5.4" "@jest/transform@^25.5.1": version "25.5.1" @@ -1393,27 +1152,15 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": - version "2.1.8-no-fsevents" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz#da7c3996b8e6e19ebd14d82eaced2313e7769f9b" - integrity sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": + version "2.1.8-no-fsevents.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== "@sideway/address@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d" - integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA== + 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" @@ -1428,16 +1175,16 @@ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== "@sinonjs/commons@^1.7.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.2.tgz#505f55c74e0272b43f6c52d81946bed7058fc0e2" - integrity sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw== + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" "@types/babel__core@^7.1.7": - version "7.1.7" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.7.tgz#1dacad8840364a57c98d0dd4855c6dd3752c6b89" - integrity sha512-RL62NqSFPCDK2FM1pSDH0scHpJvsXtZNiYlMB73DgPBaG1E38ZYVL+ei5EkWRbr+KC4YNiAUNBnRj+bgwpgjMw== + version "7.1.16" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" + integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1446,43 +1193,38 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.1" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" - integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" - integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18" - integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q== + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== dependencies: "@babel/types" "^7.3.0" -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - "@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" - integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== "@types/istanbul-lib-report@*": version "3.0.0" @@ -1492,22 +1234,22 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" - integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" "@types/node@*": - version "13.13.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.4.tgz#1581d6c16e3d4803eb079c87d4ac893ee7501c2c" - integrity sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA== + version "16.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" + integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== "@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/prettier@^1.19.0": version "1.19.1" @@ -1519,22 +1261,27 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/validator@^13.1.3": + version "13.6.6" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.6.6.tgz#6e6e2d086148db5ae14851614971b715670cbd52" + integrity sha512-+qogUELb4gMhrMjSh/seKmGVvN+uQLfyqJAqYRWqVHsvBsUO2xDBCL8CJ/ZSukbd8vXaoYbpIssAmfLEzzBHEw== + "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== "@types/yargs@^15.0.0": - version "15.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" - integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== acorn-globals@^4.3.2: version "4.3.4" @@ -1545,9 +1292,9 @@ acorn-globals@^4.3.2: acorn-walk "^6.0.1" acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^6.0.1: version "6.2.0" @@ -1555,29 +1302,19 @@ acorn-walk@^6.0.1: integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== acorn@^7.1.0, acorn@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -ajv@^6.10.0, ajv@^6.10.2: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^6.5.5: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" - integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -1585,21 +1322,21 @@ ajv@^6.5.5: uri-js "^4.2.2" ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: - type-fest "^0.11.0" + type-fest "^0.21.3" ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1609,11 +1346,10 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - "@types/color-name" "^1.1.1" color-convert "^2.0.1" anymatch@^2.0.0: @@ -1624,10 +1360,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3, anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1665,9 +1401,9 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -1686,11 +1422,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1707,9 +1438,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== babel-jest@^25.5.1: version "25.5.1" @@ -1733,14 +1464,14 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^25.5.0: @@ -1752,38 +1483,39 @@ babel-plugin-jest-hoist@^25.5.0: "@babel/types" "^7.3.3" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.1.4: - version "0.1.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz#a2c5c245f56c0cac3dbddbf0726a46b24f0f81d1" - integrity sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA== +babel-plugin-polyfill-corejs2@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz#6ed8e30981b062f8fe6aca8873a37ebcc8cc1c0f" + integrity sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA== dependencies: - "@babel/compat-data" "^7.13.0" - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.4" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" - integrity sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw== +babel-plugin-polyfill-corejs3@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz#fa7ca3d1ee9ddc6193600ffb632c9785d54918af" + integrity sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" - core-js-compat "^3.8.1" + "@babel/helper-define-polyfill-provider" "^0.2.4" + core-js-compat "^3.18.0" -babel-plugin-polyfill-regenerator@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz#0fe06a026fe0faa628ccc8ba3302da0a6ce02f3f" - integrity sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg== +babel-plugin-polyfill-regenerator@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz#2e9808f5027c4336c994992b48a4262580cb8d6d" + integrity sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.1.5" + "@babel/helper-define-polyfill-provider" "^0.2.4" babel-preset-current-node-syntax@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.2.tgz#fb4a4c51fe38ca60fede1dc74ab35eb843cb41d6" - integrity sha512-u/8cS+dEiK1SFILbOC8/rUI3ml9lboKuuMvZ/4aQnQmhecQAgPw5ew066C1ObnEAUmlx7dv/s2z52psWEtLNiw== + version "0.1.4" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" + integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1801,9 +1533,9 @@ babel-preset-jest@^25.5.0: babel-preset-current-node-syntax "^0.1.2" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base@^0.11.1: version "0.11.2" @@ -1825,11 +1557,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1843,7 +1570,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -1878,16 +1605,16 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.14.5, browserslist@^4.16.3: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.17.5, browserslist@^4.17.6: + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" escalade "^3.1.1" - node-releases "^1.1.71" + node-releases "^2.0.1" + picocolors "^1.0.0" bser@2.1.1: version "2.1.1" @@ -1897,9 +1624,9 @@ bser@2.1.1: node-int64 "^0.4.0" 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== cache-base@^1.0.1: version "1.0.1" @@ -1916,6 +1643,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1926,10 +1661,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001219: - version "1.0.30001236" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" - integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== +caniuse-lite@^1.0.30001274: + version "1.0.30001279" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" + integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== capture-exit@^2.0.0: version "2.0.0" @@ -1960,31 +1695,44 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +class-transformer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.4.0.tgz#b52144117b423c516afb44cc1c76dbad31c2165b" + integrity sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1995,6 +1743,15 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +class-validator@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.1.tgz#381b2001ee6b9e05afd133671fbdf760da7dec67" + integrity sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg== + dependencies: + "@types/validator" "^13.1.3" + libphonenumber-js "^1.9.7" + validator "^13.5.2" + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -2002,10 +1759,10 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= +cli-width@^3.0.0: + version "3.0.0" + 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: version "6.0.0" @@ -2058,11 +1815,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -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== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2071,9 +1823,9 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: delayed-stream "~1.0.0" commander@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" - integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== component-emitter@^1.2.1: version "1.3.0" @@ -2086,9 +1838,9 @@ concat-map@0.0.1: integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -2097,15 +1849,15 @@ 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.8.1, core-js-compat@^3.9.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== +core-js-compat@^3.18.0, core-js-compat@^3.19.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.1.tgz#fe598f1a9bf37310d77c3813968e9f7c7bb99476" + integrity sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g== dependencies: - browserslist "^4.16.3" + browserslist "^4.17.6" semver "7.0.0" -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -2129,9 +1881,9 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: which "^1.2.9" cross-spawn@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.2.tgz#d0d7dcfa74e89115c7619f4f721a94e1fdb716d6" - integrity sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw== + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -2178,11 +1930,11 @@ debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: - ms "^2.1.1" + ms "2.1.2" decamelize@^1.2.0: version "1.2.0" @@ -2195,16 +1947,16 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -define-properties@^1.1.2: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2270,10 +2022,10 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -electron-to-chromium@^1.3.723: - version "1.3.750" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz#7e5ef6f478316b0bd656af5942fe502610e97eaf" - integrity sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A== +electron-to-chromium@^1.3.886: + version "1.3.894" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.894.tgz#54554ecb40d40ddac7241c4a42887e86180015d8" + integrity sha512-WY8pA4irAZ4cm/Pr7YFPtPLVqj3nU6d0SbfoHF6M7HZNONfPdAnYAarumqQ75go2LuN72uO9wGuCEqnfya/ytg== emoji-regex@^7.0.1: version "7.0.3" @@ -2309,10 +2061,15 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + escodegen@^1.11.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== dependencies: esprima "^4.0.1" estraverse "^4.2.0" @@ -2322,11 +2079,11 @@ escodegen@^1.11.1: source-map "~0.6.1" eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" eslint-utils@^1.4.3: @@ -2337,9 +2094,9 @@ eslint-utils@^1.4.3: eslint-visitor-keys "^1.1.0" eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint@^6.8.0: version "6.8.0" @@ -2399,28 +2156,28 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: - estraverse "^5.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -2428,9 +2185,9 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -2540,14 +2297,14 @@ extsprintf@1.3.0: integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -2615,9 +2372,9 @@ flat-cache@^2.0.1: write "1.0.3" flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== for-in@^1.0.2: version "1.0.2" @@ -2655,12 +2412,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -fsevents@~2.3.1: +fsevents@^2.1.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -2675,11 +2427,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2690,6 +2437,20 @@ get-caller-file@^2.0.1: 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: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2698,9 +2459,9 @@ get-stream@^4.0.0: pump "^3.0.0" get-stream@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" @@ -2716,25 +2477,17 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== +glob-parent@^5.0.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2755,15 +2508,10 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -graceful-fs@^4.1.11: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + 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" @@ -2776,11 +2524,11 @@ har-schema@^2.0.0: integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" has-flag@^3.0.0: @@ -2793,10 +2541,10 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has-value@^0.3.1: version "0.3.1" @@ -2880,17 +2628,17 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -2908,26 +2656,26 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inquirer@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -2956,13 +2704,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2983,9 +2724,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -3021,6 +2762,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3033,7 +2779,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -3053,17 +2799,10 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -3086,20 +2825,15 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 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-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" @@ -3112,11 +2846,13 @@ is-windows@^1.0.2: integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3143,24 +2879,32 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" - integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: "@babel/core" "^7.7.5" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" "@istanbuljs/schema" "^0.1.2" istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -3171,18 +2915,18 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -3196,12 +2940,12 @@ jest-changed-files@^25.5.0: execa "^3.2.0" throat "^5.0.0" -jest-cli@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.2.tgz#44ffb68cc0aa1a4b2971b8bfd07083397232105e" - integrity sha512-jbOJ4oOIJptg5mjNQZWyHkv33sXCIFT2UnkYwlZvyVU/0nz5nmIlIx57iTgHkmeRBp1VkK2qPZhjCDwHmxNKgA== +jest-cli@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" + integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== dependencies: - "@jest/core" "^25.5.2" + "@jest/core" "^25.5.4" "@jest/test-result" "^25.5.0" "@jest/types" "^25.5.0" chalk "^3.0.0" @@ -3209,20 +2953,20 @@ jest-cli@^25.5.2: graceful-fs "^4.2.4" import-local "^3.0.2" is-ci "^2.0.0" - jest-config "^25.5.2" + jest-config "^25.5.4" jest-util "^25.5.0" jest-validate "^25.5.0" prompts "^2.0.1" realpath-native "^2.0.0" yargs "^15.3.1" -jest-config@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.2.tgz#99319256123df19194da4aa27bb695ace4dfbe6b" - integrity sha512-6KVTvhJYyXQVFMDxMCxqf9IgdI0dhdaIKR9WN9U+w3xcvNEWCgwzK5LaSx6hvthgh/sukJb3bC4jMnIUXkWu+A== +jest-config@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" + integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.2" + "@jest/test-sequencer" "^25.5.4" "@jest/types" "^25.5.0" babel-jest "^25.5.1" chalk "^3.0.0" @@ -3232,7 +2976,7 @@ jest-config@^25.5.2: jest-environment-jsdom "^25.5.0" jest-environment-node "^25.5.0" jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.2" + jest-jasmine2 "^25.5.4" jest-regex-util "^25.2.6" jest-resolve "^25.5.1" jest-util "^25.5.0" @@ -3318,10 +3062,10 @@ jest-haste-map@^25.5.1: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.2.tgz#ea7825e965309ccfa610435f8a23a663339f8e44" - integrity sha512-wRtHAy97F4hafJgnh5CwI/N1tDo7z+urteQAyr3rjK7X3TZWX5hSV4cO7WIBKLDV0kPICCmsGiNYs1caeHD/sQ== +jest-jasmine2@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" + integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^25.5.0" @@ -3335,7 +3079,7 @@ jest-jasmine2@^25.5.2: jest-each "^25.5.0" jest-matcher-utils "^25.5.0" jest-message-util "^25.5.0" - jest-runtime "^25.5.2" + jest-runtime "^25.5.4" jest-snapshot "^25.5.1" jest-util "^25.5.0" pretty-format "^25.5.0" @@ -3381,19 +3125,19 @@ jest-mock@^25.5.0: "@jest/types" "^25.5.0" jest-pnp-resolver@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" - integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== jest-regex-util@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== -jest-resolve-dependencies@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.2.tgz#7409d14437497339e0acb88575408f2265c9a58d" - integrity sha512-4xlPp6/SFFZj7g7WkhoKEEWsYqmAK6WcmFFRfDJ0K4T2f/MCJgFEPqv1F88ro6ZJdpOti08CxGku4gBwau/RjQ== +jest-resolve-dependencies@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" + integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== dependencies: "@jest/types" "^25.5.0" jest-regex-util "^25.2.6" @@ -3414,10 +3158,10 @@ jest-resolve@^25.5.1: resolve "^1.17.0" slash "^3.0.0" -jest-runner@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.2.tgz#af9b50736d834b9892fd240e89c984712cf53dd6" - integrity sha512-GvaM0AWSfyer46BEranPSmKoNNW9RqLGnjKftE6I5Ia6cfjdHHeTHAus7Mh9PdjWzGqrXsLSGdErX+4wMvN3rQ== +jest-runner@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" + integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== dependencies: "@jest/console" "^25.5.0" "@jest/environment" "^25.5.0" @@ -3426,23 +3170,23 @@ jest-runner@^25.5.2: chalk "^3.0.0" exit "^0.1.2" graceful-fs "^4.2.4" - jest-config "^25.5.2" + jest-config "^25.5.4" jest-docblock "^25.3.0" jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.2" + jest-jasmine2 "^25.5.4" jest-leak-detector "^25.5.0" jest-message-util "^25.5.0" jest-resolve "^25.5.1" - jest-runtime "^25.5.2" + jest-runtime "^25.5.4" jest-util "^25.5.0" jest-worker "^25.5.0" source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.2.tgz#cf98a455e15f86120a0bf4dbf494b2e54a0a20dc" - integrity sha512-UQTPBnE73qpGMKAXYB2agoC+6hMyT3dWXVL+cYibCFRm0tx2A+0+8wceoivRCtxQGaQr52c+qMRIOIRqmhAgHQ== +jest-runtime@^25.5.4: + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" + integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== dependencies: "@jest/console" "^25.5.0" "@jest/environment" "^25.5.0" @@ -3457,7 +3201,7 @@ jest-runtime@^25.5.2: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-config "^25.5.2" + jest-config "^25.5.4" jest-haste-map "^25.5.1" jest-message-util "^25.5.0" jest-mock "^25.5.0" @@ -3543,13 +3287,13 @@ jest-worker@^25.5.0: supports-color "^7.0.0" jest@^25.5.2: - version "25.5.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.2.tgz#9b90c64b0d3d1fadb796e4e6f7f7a6c7d5282190" - integrity sha512-uJwrQNpNwhlP4SX3lpvjc5ucOULeWUCQCfrREqvQW5phAy04q5lQPsGM6Z0T1Psdnuf9CkycpoNEL6O3FMGcsg== + version "25.5.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" + integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== dependencies: - "@jest/core" "^25.5.2" + "@jest/core" "^25.5.4" import-local "^3.0.2" - jest-cli "^25.5.2" + jest-cli "^25.5.4" joi-objectid@^3.0.1: version "3.0.1" @@ -3557,9 +3301,9 @@ joi-objectid@^3.0.1: integrity sha512-V/3hbTlGpvJ03Me6DJbdBI08hBTasFOmipsauOsxOSnsF1blxV537WTl1zPwbfcKle4AK0Ma4OPnzMH4LlvTpQ== joi@^17.3.0: - version "17.3.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" - integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg== + 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" @@ -3573,9 +3317,9 @@ js-tokens@^4.0.0: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -3627,10 +3371,10 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" @@ -3652,17 +3396,10 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" @@ -3718,6 +3455,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libphonenumber-js@^1.9.7: + version "1.9.42" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.9.42.tgz#41f41d540f89b6e3fd36de7120ddb57b3a468c77" + integrity sha512-UBtU0ylpZPKPT8NLIyQJWj/DToMFxmo3Fm5m6qDc0LATvf0SY0qUhaurCEvukAB9Fo+Ia2Anjzqwoupaa64fXg== + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -3740,7 +3482,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: +lodash@^4.17.14, lodash@^4.17.19: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3767,12 +3509,12 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" map-cache@^0.2.2: version "0.2.2" @@ -3791,7 +3533,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -3811,24 +3553,24 @@ micromatch@^3.1.10, micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: braces "^3.0.1" - picomatch "^2.0.5" + picomatch "^2.2.3" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.44.0" + mime-db "1.51.0" mimic-fn@^2.1.0: version "2.1.0" @@ -3856,9 +3598,9 @@ mixin-deep@^1.2.0: is-extendable "^1.0.1" mkdirp@^0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" @@ -3867,7 +3609,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -3925,10 +3667,10 @@ node-notifier@^6.0.0: shellwords "^0.1.1" which "^1.3.1" -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@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== normalize-package-data@^2.5.0: version "2.5.0" @@ -3985,7 +3727,7 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -3998,14 +3740,14 @@ object-visit@^1.0.0: isobject "^3.0.0" object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.pick@^1.3.0: version "1.3.0" @@ -4022,9 +3764,9 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: wrappy "1" onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -4046,9 +3788,9 @@ os-tmpdir@~1.0.2: integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" @@ -4087,13 +3829,13 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" + json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" parse5@5.1.0: @@ -4106,11 +3848,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -4132,19 +3869,24 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^4.0.1: version "4.0.1" @@ -4195,23 +3937,18 @@ pretty-format@^25.5.0: ansi-styles "^4.0.0" react-is "^16.12.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" - sisteransi "^1.0.4" + sisteransi "^1.0.5" psl@^1.1.28: version "1.8.0" @@ -4260,32 +3997,10 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -4294,22 +4009,22 @@ realpath-native@^2.0.0: resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== dependencies: - regenerate "^1.4.0" + regenerate "^1.4.2" -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerate@^1.4.2: + version "1.4.2" + 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.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + version "0.13.9" + 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: version "0.14.5" @@ -4332,26 +4047,26 @@ regexpp@^2.0.1: integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 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== + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" -regjsgen@^0.5.1: +regjsgen@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.4: - version "0.6.7" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.7.tgz#c00164e1e6713c2e3ee641f1701c4b7aa0a7f86c" - integrity sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ== +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== dependencies: jsesc "~0.5.0" @@ -4361,28 +4076,28 @@ remove-trailing-separator@^1.0.1: integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== dependencies: - lodash "^4.17.15" + lodash "^4.17.19" request-promise-native@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== dependencies: - request-promise-core "1.1.3" + request-promise-core "1.1.4" stealthy-require "^1.1.1" tough-cookie "^2.3.3" @@ -4449,14 +4164,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.10.0, resolve@^1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.14.2: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4464,13 +4172,6 @@ resolve@^1.14.2: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.3.2, resolve@^1.8.1: - version "1.14.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" - integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ== - dependencies: - path-parse "^1.0.6" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -4504,25 +4205,23 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== +rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -4561,7 +4260,7 @@ saxes@^3.1.9: dependencies: xmlchars "^2.1.1" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -4620,17 +4319,12 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -signal-exit@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -sisteransi@^1.0.4: +sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== @@ -4696,17 +4390,17 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@^0.5.6: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" @@ -4724,9 +4418,9 @@ source-map@^0.7.3: integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -4737,17 +4431,17 @@ spdx-exceptions@^2.1.0: integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + 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" @@ -4777,9 +4471,11 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" static-extend@^0.1.1: version "0.1.2" @@ -4812,20 +4508,13 @@ string-width@^3.0.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" + strip-ansi "^6.0.1" strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" @@ -4834,12 +4523,12 @@ strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-bom@^4.0.0: version "4.0.0" @@ -4857,9 +4546,9 @@ strip-final-newline@^2.0.0: integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.3.0: version "5.5.0" @@ -4869,16 +4558,16 @@ supports-color@^5.3.0: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -4937,7 +4626,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -5004,9 +4693,9 @@ tr46@^1.0.1: punycode "^2.1.0" tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tunnel-agent@^0.6.0: version "0.6.0" @@ -5032,10 +4721,10 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" @@ -5054,28 +4743,33 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +typescript@^4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -5095,15 +4789,10 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -5117,25 +4806,20 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20" - integrity sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng== + version "4.1.4" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" + integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" @@ -5149,6 +4833,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.5.2: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5175,11 +4864,11 @@ w3c-xmlserializer@^1.1.2: xml-name-validator "^3.0.0" walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" webidl-conversions@^4.0.2: version "4.0.2" @@ -5263,9 +4952,9 @@ write@1.0.3: mkdirp "^0.5.1" ws@^7.0.0: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== xml-name-validator@^3.0.0: version "3.0.0" @@ -5278,11 +4967,11 @@ xmlchars@^2.1.1: integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yargs-parser@^18.1.1: +yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -5291,9 +4980,9 @@ yargs-parser@^18.1.1: decamelize "^1.2.0" yargs@^15.3.1: - version "15.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" - integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" decamelize "^1.2.0" @@ -5305,4 +4994,4 @@ yargs@^15.3.1: string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^18.1.1" + yargs-parser "^18.1.2" diff --git a/packages/medusa-interfaces/package.json b/packages/medusa-interfaces/package.json index 2b21cf06aa..e633d9e666 100644 --- a/packages/medusa-interfaces/package.json +++ b/packages/medusa-interfaces/package.json @@ -38,4 +38,4 @@ "medusa-core-utils": "^1.1.26" }, "gitHead": "41a5425405aea5045a26def95c0dc00cf4a5a44d" -} +} \ No newline at end of file diff --git a/packages/medusa-interfaces/src/base-service.js b/packages/medusa-interfaces/src/base-service.js index fa6807343c..5adcbe0391 100644 --- a/packages/medusa-interfaces/src/base-service.js +++ b/packages/medusa-interfaces/src/base-service.js @@ -21,6 +21,11 @@ class BaseService { buildQuery_(selector, config = {}) { const build = (obj) => { const where = Object.entries(obj).reduce((acc, [key, value]) => { + // Undefined values indicate that they have no significance to the query. + // If the query is looking for rows where a column is not set it should use null instead of undefined + if (typeof value === "undefined") { + return acc + } switch (true) { case value instanceof FindOperator: acc[key] = value diff --git a/packages/medusa-js/.gitignore b/packages/medusa-js/.gitignore new file mode 100644 index 0000000000..bd07d4e1bc --- /dev/null +++ b/packages/medusa-js/.gitignore @@ -0,0 +1,2 @@ +node_modules +/dist diff --git a/packages/medusa-js/README.md b/packages/medusa-js/README.md new file mode 100644 index 0000000000..75d937fd54 --- /dev/null +++ b/packages/medusa-js/README.md @@ -0,0 +1 @@ +# Medusa Commerce JS Client diff --git a/packages/medusa-js/jestconfig.json b/packages/medusa-js/jestconfig.json new file mode 100644 index 0000000000..e1476c9cd3 --- /dev/null +++ b/packages/medusa-js/jestconfig.json @@ -0,0 +1,7 @@ +{ + "transform": { + "^.+\\.(t|j)sx?$": "ts-jest" + }, + "testRegex": "(/tests/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", + "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"] +} \ No newline at end of file diff --git a/packages/medusa-js/package.json b/packages/medusa-js/package.json new file mode 100644 index 0000000000..c624776dfd --- /dev/null +++ b/packages/medusa-js/package.json @@ -0,0 +1,34 @@ +{ + "name": "@medusajs/medusa-js", + "version": "1.0.1-canary.1", + "description": "Client for Medusa Commerce Rest API", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "files": [ + "dist/**/*" + ], + "scripts": { + "build": "tsc --build", + "test": "jest --config jestconfig.json" + }, + "author": "Oliver Juhl", + "license": "MIT", + "dependencies": { + "axios": "^0.21.0", + "retry-axios": "^2.6.0" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/medusajs/medusa-js.git" + }, + "bugs": { + "url": "https://github.com/medusajs/medusa-js/issues" + }, + "devDependencies": { + "@types/jest": "^26.0.19", + "eslint": "^8.2.0", + "jest": "^26.6.3", + "prettier": "^2.2.1", + "typescript": "^4.1.3" + } +} \ No newline at end of file diff --git a/packages/medusa-js/src/error.ts b/packages/medusa-js/src/error.ts new file mode 100644 index 0000000000..089ba54664 --- /dev/null +++ b/packages/medusa-js/src/error.ts @@ -0,0 +1,57 @@ +"use strict" +/** + * MedusaError is the base error for every other MedusaError + */ +export default class MedusaError extends Error { + constructor() { + super() + } + + public static factory(type: ErrorType): MedusaError { + switch (type) { + case ErrorType.INVALID_REQUEST: + return new MedusaInvalidRequestError() + case ErrorType.AUTHENTICATION: + return new MedusaAuthenticationError() + case ErrorType.API: + return new MedusaAPIError() + case ErrorType.PERMISSION: + return new MedusaPermissionError() + case ErrorType.CONNECTION: + return new MedusaConnectionError() + } + } +} + +enum ErrorType { + "INVALID_REQUEST", + "API", + "AUTHENTICATION", + "PERMISSION", + "CONNECTION", +} + +/** + * MedusaInvalidRequestError is raised when a request as invalid parameters. + */ +export class MedusaInvalidRequestError extends MedusaError {} + +/** + * MedusaAPIError is raised in case no other type cover the problem + */ +export class MedusaAPIError extends MedusaError {} + +/** + * MedusaAuthenticationError is raised when invalid credentials is used to connect to Medusa + */ +export class MedusaAuthenticationError extends MedusaError {} + +/** + * MedusaPermissionErorr is raised when attempting to access a resource without permissions + */ +export class MedusaPermissionError extends MedusaError {} + +/** + * MedusaConnectionError is raised when the Medusa servers can't be reached. + */ +export class MedusaConnectionError extends MedusaError {} diff --git a/packages/medusa-js/src/index.ts b/packages/medusa-js/src/index.ts new file mode 100644 index 0000000000..874a7cc592 --- /dev/null +++ b/packages/medusa-js/src/index.ts @@ -0,0 +1,51 @@ +import MedusaError from "./error" +import Client, { Config } from "./request" +import AuthResource from "./resources/auth" +import CartsResource from "./resources/carts" +import CollectionsResource from "./resources/collections" +import CustomersResource from "./resources/customers" +import GiftCardsResource from "./resources/gift-cards" +import OrdersResource from "./resources/orders" +import ProductsResource from "./resources/products" +import RegionsResource from "./resources/regions" +import ReturnReasonsResource from "./resources/return-reasons" +import ReturnsResource from "./resources/returns" +import ShippingOptionsResource from "./resources/shipping-options" +import SwapsResource from "./resources/swaps" + +class Medusa { + private client: Client + public auth: AuthResource + public carts: CartsResource + public customers: CustomersResource + public errors: MedusaError + public orders: OrdersResource + public products: ProductsResource + public regions: RegionsResource + public returnReasons: ReturnReasonsResource + public returns: ReturnsResource + public shippingOptions: ShippingOptionsResource + public swaps: SwapsResource + public collections: CollectionsResource + public giftCards: GiftCardsResource + + constructor(config: Config) { + this.client = new Client(config) + + this.auth = new AuthResource(this.client) + this.carts = new CartsResource(this.client) + this.customers = new CustomersResource(this.client) + this.errors = new MedusaError() + this.orders = new OrdersResource(this.client) + this.products = new ProductsResource(this.client) + this.regions = new RegionsResource(this.client) + this.returnReasons = new ReturnReasonsResource(this.client) + this.returns = new ReturnsResource(this.client) + this.shippingOptions = new ShippingOptionsResource(this.client) + this.swaps = new SwapsResource(this.client) + this.collections = new CollectionsResource(this.client) + this.giftCards = new GiftCardsResource(this.client) + } +} + +export default Medusa diff --git a/packages/medusa-js/src/request.ts b/packages/medusa-js/src/request.ts new file mode 100644 index 0000000000..ab3a72b15b --- /dev/null +++ b/packages/medusa-js/src/request.ts @@ -0,0 +1,199 @@ +import axios, { AxiosError, AxiosInstance } from "axios" +import * as rax from "retry-axios" +import { v4 as uuidv4 } from "uuid" + +export interface Config { + baseUrl: string + maxRetries: number +} +export interface RequestOptions { + apiKey?: string + timeout?: number + numberOfRetries?: number +} + +export type RequestMethod = "DELETE" | "POST" | "GET" + +const defaultConfig = { + maxRetries: 0, + baseUrl: "http://localhost:9000", +} + +class Client { + private axiosClient: AxiosInstance + private config: Config + + constructor(config: Config) { + /** @private @constant {AxiosInstance} */ + this.axiosClient = this.createClient({ ...defaultConfig, ...config }) + + /** @private @constant {Config} */ + this.config = { ...defaultConfig, ...config } + } + + shouldRetryCondition( + err: AxiosError, + numRetries: number, + maxRetries: number + ): boolean { + // Obviously, if we have reached max. retries we stop + if (numRetries >= maxRetries) { + return false + } + + // If no response, we assume a connection error and retry + if (!err.response) { + return true + } + + // Retry on conflicts + if (err.response.status === 409) { + return true + } + + // All 5xx errors are retried + // OBS: We are currently not retrying 500 requests, since our core needs proper error handling. + // At the moment, 500 will be returned on all errors, that are not of type MedusaError. + if (err.response.status > 500 && err.response.status <= 599) { + return true + } + + return false + } + + // Stolen from https://github.com/stripe/stripe-node/blob/fd0a597064289b8c82f374f4747d634050739043/lib/utils.js#L282 + normalizeHeaders(obj: object): object { + if (!(obj && typeof obj === "object")) { + return obj + } + + return Object.keys(obj).reduce((result, header) => { + result[this.normalizeHeader(header)] = obj[header] + return result + }, {}) + } + + // Stolen from https://github.com/marten-de-vries/header-case-normalizer/blob/master/index.js#L36-L41 + normalizeHeader(header: string): string { + return header + .split("-") + .map( + (text) => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase() + ) + .join("-") + } + + /** + * Creates all the initial headers. + * We add the idempotency key, if the request is configured to retry. + * @param {object} userHeaders user supplied headers + * @param {Types.RequestMethod} method request method + * @param {string} path request path + * @return {object} + */ + setHeaders( + userHeaders: RequestOptions, + method: RequestMethod, + path: string + ): object { + let defaultHeaders: object = { + Accept: "application/json", + "Content-Type": "application/json", + } + + // TODO: if route is an authenticated route, add api key + if (path.startsWith("/admin")) { + defaultHeaders = { + ...defaultHeaders, + } + } + + // only add idempotency key, if we want to retry + if (this.config.maxRetries > 0 && method === "POST") { + defaultHeaders["Idempotency-Key"] = uuidv4() + } + + return Object.assign({}, defaultHeaders, this.normalizeHeaders(userHeaders)) + } + + /** + * Creates the axios client used for requests + * As part of the creation, we configure the retry conditions + * and the exponential backoff approach. + * @param {Config} config user supplied configurations + * @return {AxiosInstance} + */ + createClient(config: Config): AxiosInstance { + const client = axios.create({ + baseURL: config.baseUrl, + }) + + rax.attach(client) + + client.defaults.raxConfig = { + instance: client, + retry: config.maxRetries, + backoffType: "exponential", + shouldRetry: (err: AxiosError): boolean => { + const cfg = rax.getConfig(err) + if (cfg) { + return this.shouldRetryCondition( + err, + cfg.currentRetryAttempt || 1, + cfg.retry || 3 + ) + } else { + return false + } + }, + } + + return client + } + + /** + * Format the response data as: + * { cart: { id: "some_cart", ... } } + * @param {object} data Axios response data + * @param {number} status Axios response status code + * @return {object} + */ + createRawResponse(data: object, status: number): object { + const res = { status } + Object.entries(data).map(([key, value]) => { + res[key] = value + }) + + return res as any // eslint-disable-line + } + + /** + * Axios request + * @param {Types.RequestMethod} method request method + * @param {string} path request path + * @param {object} payload request payload + * @param {RequestOptions} options axios configuration + * @return {object} + */ + async request( + method: RequestMethod, + path: string, + payload: object = {}, + options: RequestOptions = {} + ): Promise { + const reqOpts = { + method, + withCredentials: true, + url: path, + data: payload, + json: true, + headers: this.setHeaders(options, method, path), + } + + const { data, status } = await this.axiosClient(reqOpts) + + return this.createRawResponse(data, status) + } +} + +export default Client diff --git a/packages/medusa-js/src/resources/addresses.ts b/packages/medusa-js/src/resources/addresses.ts new file mode 100644 index 0000000000..40fe1dee1d --- /dev/null +++ b/packages/medusa-js/src/resources/addresses.ts @@ -0,0 +1,47 @@ +import { + StoreCustomersRes, + StorePostCustomersCustomerAddressesAddressReq, + StorePostCustomersCustomerAddressesReq, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class AddressesResource extends BaseResource { + /** + * Adds an address to a customers saved addresses + * @param {StorePostCustomersCustomerAddressesReq} payload contains information to create an address + * @return {AxiosPromise} + */ + addAddress( + payload: StorePostCustomersCustomerAddressesReq + ): AxiosPromise { + const path = `/store/customers/me/addresses` + return this.client.request("POST", path, payload) + } + + /** + * Deletes an address of a customer + * @param {string} address_id id of the address to delete + * @return {AxiosPromise} + */ + deleteAddress(address_id: string): AxiosPromise { + const path = `/store/customers/me/addresses/${address_id}` + return this.client.request("DELETE", path) + } + + /** + * Update an address of a customer + * @param {string} address_id id of customer + * @param {StorePostCustomersCustomerAddressesAddressReq} payload address update + * @return {StoreCustomersResponse} + */ + updateAddress( + address_id: string, + payload: StorePostCustomersCustomerAddressesAddressReq + ): AxiosPromise { + const path = `/store/customers/me/addresses/${address_id}` + return this.client.request("POST", path, payload) + } +} + +export default AddressesResource diff --git a/packages/medusa-js/src/resources/auth.ts b/packages/medusa-js/src/resources/auth.ts new file mode 100644 index 0000000000..131f21f984 --- /dev/null +++ b/packages/medusa-js/src/resources/auth.ts @@ -0,0 +1,41 @@ +import { AxiosPromise } from "axios" +import { + StoreGetAuthEmailRes, + StorePostAuthReq, + StoreAuthRes, +} from "@medusajs/medusa" +import BaseResource from "./base" + +class AuthResource extends BaseResource { + /** + * @description Authenticates a customer using email and password combination + * @param {StorePostAuthReq} payload authentication payload + * @return {AxiosPromise} + */ + authenticate(payload: StorePostAuthReq): AxiosPromise { + const path = `/store/auth` + return this.client.request("POST", path, payload) + } + + /** + * @description Retrieves an authenticated session + * Usually used to check if authenticated session is alive. + * @return {AxiosPromise} + */ + getSession(): AxiosPromise { + const path = `/store/auth` + return this.client.request("GET", path) + } + + /** + * @description Check if email exists + * @param {string} email is required + * @return {AxiosPromise} + */ + exists(email: string): AxiosPromise { + const path = `/store/auth/${email}` + return this.client.request("GET", path) + } +} + +export default AuthResource diff --git a/packages/medusa-js/src/resources/base.ts b/packages/medusa-js/src/resources/base.ts new file mode 100644 index 0000000000..877bcf788d --- /dev/null +++ b/packages/medusa-js/src/resources/base.ts @@ -0,0 +1,9 @@ +import Client from "../request" + +export default class BaseResource { + public client: Client + + constructor(client: Client) { + this.client = client + } +} diff --git a/packages/medusa-js/src/resources/carts.ts b/packages/medusa-js/src/resources/carts.ts new file mode 100644 index 0000000000..bcb558bbe7 --- /dev/null +++ b/packages/medusa-js/src/resources/carts.ts @@ -0,0 +1,160 @@ +import { + StoreCartsRes, + StorePostCartReq, + StorePostCartsCartPaymentSessionReq, + StorePostCartsCartPaymentSessionUpdateReq, + StorePostCartsCartReq, + StorePostCartsCartShippingMethodReq, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" +import LineItemsResource from "./line-items" + +class CartsResource extends BaseResource { + public lineItems = new LineItemsResource(this.client) + + /** + * Adds a shipping method to cart + * @param {string} cart_id Id of cart + * @param {StorePostCartsCartShippingMethodReq} payload Containg id of shipping option and optional data + * @return {AxiosPromise} + */ + addShippingMethod( + cart_id: string, + payload: StorePostCartsCartShippingMethodReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}/shipping-methods` + return this.client.request("POST", path, payload) + } + + /** + * Completes a cart. + * Payment authorization is attempted and if more work is required, we simply return the cart for further updates. + * If payment is authorized and order is not yet created, we make sure to do so. + * The completion of a cart can be performed idempotently with a provided header Idempotency-Key. + * If not provuided, we will generate one for the request. + * @param {string} cart_id is required + * @return {AxiosPromise} + */ + complete(cart_id: string): AxiosPromise { + const path = `/store/carts/${cart_id}/complete` + return this.client.request("POST", path) + } + + /** + * Creates a cart + * @param {StorePostCartReq} payload is optional and can contain a region_id and items. + * The cart will contain the payload, if provided. Otherwise it will be empty + * @return {AxiosPromise} + */ + create(payload?: StorePostCartReq): AxiosPromise { + const path = `/store/carts` + return this.client.request("POST", path, payload) + } + + /** + * Creates payment sessions. + * Initializes the payment sessions that can be used to pay for the items of the cart. + * This is usually called when a customer proceeds to checkout. + * @param {string} cart_id is required + * @return {AxiosPromise} + */ + createPaymentSessions(cart_id: string): AxiosPromise { + const path = `/store/carts/${cart_id}/payment-sessions` + return this.client.request("POST", path) + } + + /** + * Removes a discount from cart. + * @param {string} cart_id is required + * @param {string} code discount code to remove + * @return {AxiosPromise} + */ + deleteDiscount(cart_id: string, code: string): AxiosPromise { + const path = `/store/carts/${cart_id}/discounts/${code}` + return this.client.request("DELETE", path) + } + + /** + * Removes a payment session from a cart. + * Can be useful in case a payment has failed + * @param {string} cart_id is required + * @param {string} provider_id the provider id of the session e.g. "stripe" + * @return {AxiosPromise} + */ + deletePaymentSession( + cart_id: string, + provider_id: string + ): AxiosPromise { + const path = `/store/carts/${cart_id}/payment-sessions/${provider_id}` + return this.client.request("DELETE", path) + } + + /** + * Refreshes a payment session. + * @param {string} cart_id is required + * @param {string} provider_id the provider id of the session e.g. "stripe" + * @return {AxiosPromise} + */ + refreshPaymentSession( + cart_id: string, + provider_id: string + ): AxiosPromise { + const path = `/store/carts/${cart_id}/payment-sessions/${provider_id}/refresh` + return this.client.request("POST", path) + } + + /** + * Retrieves a cart + * @param {string} cart_id is required + * @return {AxiosPromise} + */ + retrieve(cart_id: string): AxiosPromise { + const path = `/store/carts/${cart_id}` + return this.client.request("GET", path) + } + + /** + * Refreshes a payment session. + * @param {string} cart_id is required + * @param {StorePostCartsCartPaymentSessionReq} payload the provider id of the session e.g. "stripe" + * @return {AxiosPromise} + */ + setPaymentSession( + cart_id: string, + payload: StorePostCartsCartPaymentSessionReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}/payment-session` + return this.client.request("POST", path, payload) + } + + /** + * Updates a cart + * @param {string} cart_id is required + * @param {StorePostCartsCartReq} payload is required and can contain region_id, email, billing and shipping address + * @return {AxiosPromise} + */ + update( + cart_id: string, + payload: StorePostCartsCartReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}` + return this.client.request("POST", path, payload) + } + + /** + * Updates the payment method + * @param {string} cart_id is required + * @param {StorePostCartsCartPaymentSessionUpdateReq} payload is required + * @return {AxiosPromise} + */ + updatePaymentSession( + cart_id: string, + payload: StorePostCartsCartPaymentSessionUpdateReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}/payment-session/update` + return this.client.request("POST", path, payload) + } +} + +export default CartsResource diff --git a/packages/medusa-js/src/resources/collections.ts b/packages/medusa-js/src/resources/collections.ts new file mode 100644 index 0000000000..6e7d3fa45d --- /dev/null +++ b/packages/medusa-js/src/resources/collections.ts @@ -0,0 +1,42 @@ +import { AxiosPromise } from "axios" +import { + StoreCollectionsRes, + StoreCollectionsListRes, + StoreGetCollectionsParams, +} from "@medusajs/medusa" +import BaseResource from "./base" + +class CollectionsResource extends BaseResource { + /** + * @description Retrieves a single collection + * @param {string} id id of the collection + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/collections/${id}` + return this.client.request("GET", path) + } + + /** + * @description Retrieves a list of collections + * @param {string} query is optional. Can contain a limit and offset for the returned list + * @return {AxiosPromise} + */ + list( + query?: StoreGetCollectionsParams + ): AxiosPromise { + let path = `/store/collections` + + if (query) { + const queryString = Object.entries(query).map(([key, value]) => { + return `${key}=${value}` + }) + + path = `/store/collections?${queryString.join("&")}` + } + + return this.client.request("GET", path) + } +} + +export default CollectionsResource diff --git a/packages/medusa-js/src/resources/customers.ts b/packages/medusa-js/src/resources/customers.ts new file mode 100644 index 0000000000..8b010eb46d --- /dev/null +++ b/packages/medusa-js/src/resources/customers.ts @@ -0,0 +1,102 @@ +import { + StoreCustomersListOrdersRes, + StoreCustomersRes, + StoreGetCustomersCustomerOrdersParams, + StorePostCustomersCustomerPasswordTokenReq, + StorePostCustomersCustomerReq, + StorePostCustomersReq, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import AddressesResource from "./addresses" +import BaseResource from "./base" +import PaymentMethodsResource from "./payment-methods" + +class CustomerResource extends BaseResource { + public paymentMethods = new PaymentMethodsResource(this.client) + public addresses = new AddressesResource(this.client) + + /** + * Creates a customer + * @param {StorePostCustomersReq} payload information of customer + * @return { AxiosPromise} + */ + create(payload: StorePostCustomersReq): AxiosPromise { + const path = `/store/customers` + return this.client.request("POST", path, payload) + } + + /** + * Retrieves the customer that is currently logged + * @return {AxiosPromise} + */ + retrieve(): AxiosPromise { + const path = `/store/customers/me` + return this.client.request("GET", path) + } + + /** + * Updates a customer + * @param {StorePostCustomersCustomerReq} payload information to update customer with + * @return {AxiosPromise} + */ + update( + payload: StorePostCustomersCustomerReq + ): AxiosPromise { + const path = `/store/customers/me` + return this.client.request("POST", path, payload) + } + + /** + * Retrieve customer orders + * @param {StoreGetCustomersCustomerOrdersParams} params optional params to retrieve orders + * @return {AxiosPromise} + */ + listOrders( + params?: StoreGetCustomersCustomerOrdersParams + ): AxiosPromise { + let path = `/store/customers/me/orders` + if (params) { + let query: string | undefined + + for (const key of Object.keys(params)) { + if (query) { + query += `&${key}=${params[key]}` + } else { + query = `?${key}=${params[key]}` + } + } + + if (query) { + path += query + } + } + return this.client.request("GET", path) + } + + /** + * Resets customer password + * @param {StorePostCustomersCustomerPasswordTokenReq} payload info used to reset customer password + * @return {AxiosPromise} + */ + resetPassword( + payload: StorePostCustomersCustomerPasswordTokenReq + ): AxiosPromise { + const path = `/store/customers/password-reset` + return this.client.request("POST", path, payload) + } + + /** + * Generates a reset password token, which can be used to reset the password. + * The token is not returned but should be sent out to the customer in an email. + * @param {StorePostCustomersCustomerPasswordTokenReq} payload info used to generate token + * @return {AxiosPromise} + */ + generatePasswordToken( + payload: StorePostCustomersCustomerPasswordTokenReq + ): AxiosPromise { + const path = `/store/customers/password-token` + return this.client.request("POST", path, payload) + } +} + +export default CustomerResource diff --git a/packages/medusa-js/src/resources/gift-cards.ts b/packages/medusa-js/src/resources/gift-cards.ts new file mode 100644 index 0000000000..f949515287 --- /dev/null +++ b/packages/medusa-js/src/resources/gift-cards.ts @@ -0,0 +1,17 @@ +import { StoreGiftCardsRes } from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class GiftCardsResource extends BaseResource { + /** + * @description Retrieves a single GiftCard + * @param {string} code code of the gift card + * @return {AxiosPromise} + */ + retrieve(code: string): AxiosPromise { + const path = `/store/gift-cards/${code}` + return this.client.request("GET", path) + } +} + +export default GiftCardsResource diff --git a/packages/medusa-js/src/resources/line-items.ts b/packages/medusa-js/src/resources/line-items.ts new file mode 100644 index 0000000000..4dcdf7a910 --- /dev/null +++ b/packages/medusa-js/src/resources/line-items.ts @@ -0,0 +1,54 @@ +import { + StoreCartsCartRes, + StoreCartsDeleteRes, + StorePostCartsCartLineItemsItemReq, + StorePostCartsCartLineItemsReq, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class LineItemsResource extends BaseResource { + /** + * Creates a line-item for a cart + * @param {string} cart_id id of cart + * @param {StorePostCartsCartLineItemsReq} payload details needed to create a line-item + * @return {AxiosPromise} + */ + create( + cart_id: string, + payload: StorePostCartsCartLineItemsReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}/line-items` + return this.client.request("POST", path, payload) + } + + /** + * Updates a line-item. + * Only quantity updates are allowed + * @param {string} cart_id id of cart + * @param {string} line_id id of item to update + * @param {StorePostCartsCartLineItemsItemReq} payload details needed to update a line-item + * @return {AxiosPromise} + */ + update( + cart_id: string, + line_id: string, + payload: StorePostCartsCartLineItemsItemReq + ): AxiosPromise { + const path = `/store/carts/${cart_id}/line-items/${line_id}` + return this.client.request("POST", path, payload) + } + + /** + * Remove a line-item from a cart + * @param {string} cart_id id of cart + * @param {string} line_id id of item to remove + * @return {AxiosPromise} + */ + delete(cart_id: string, line_id: string): AxiosPromise { + const path = `/store/carts/${cart_id}/line-items/${line_id}` + return this.client.request("DELETE", path) + } +} + +export default LineItemsResource diff --git a/packages/medusa-js/src/resources/orders.ts b/packages/medusa-js/src/resources/orders.ts new file mode 100644 index 0000000000..a77131576b --- /dev/null +++ b/packages/medusa-js/src/resources/orders.ts @@ -0,0 +1,48 @@ +import { StoreGetOrdersParams, StoreOrdersRes } from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class OrdersResource extends BaseResource { + /** + * @description Retrieves an order + * @param {string} id is required + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/orders/${id}` + return this.client.request("GET", path) + } + + /** + * @description Retrieves an order by cart id + * @param {string} cart_id is required + * @return {AxiosPromise} + */ + retrieveByCartId(cart_id: string): AxiosPromise { + const path = `/store/orders/cart/${cart_id}` + return this.client.request("GET", path) + } + + /** + * @description Look up an order using order details + * @param {StoreGetOrdersParams} payload details used to look up the order + * @return {AxiosPromise} + */ + lookupOrder(payload: StoreGetOrdersParams): AxiosPromise { + let path = `/store/orders?` + + const queryString = Object.entries(payload).map(([key, value]) => { + let val = value + if (Array.isArray(value)) { + val = value.join(",") + } + + return `${key}=${encodeURIComponent(val)}` + }) + path = `/store/orders?${queryString.join("&")}` + + return this.client.request("GET", path, payload) + } +} + +export default OrdersResource diff --git a/packages/medusa-js/src/resources/payment-methods.ts b/packages/medusa-js/src/resources/payment-methods.ts new file mode 100644 index 0000000000..1d72c2b5b8 --- /dev/null +++ b/packages/medusa-js/src/resources/payment-methods.ts @@ -0,0 +1,16 @@ +import BaseResource from "./base" +import { AxiosPromise } from "axios" + +class PaymentMethodsResource extends BaseResource { + /** + * Lists customer payment methods + * @param {string} id id of cart + * @return {AxiosPromise<{ payment_methods: object[] }>} + */ + list(id: string): AxiosPromise<{ payment_methods: object[] }> { + const path = `/store/carts/${id}/payment-methods` + return this.client.request("GET", path) + } +} + +export default PaymentMethodsResource diff --git a/packages/medusa-js/src/resources/product-variants.ts b/packages/medusa-js/src/resources/product-variants.ts new file mode 100644 index 0000000000..4c7353981a --- /dev/null +++ b/packages/medusa-js/src/resources/product-variants.ts @@ -0,0 +1,43 @@ +import { + StoreGetVariantsParams, + StoreVariantsListRes, + StoreVariantsRes, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class ProductVariantsResource extends BaseResource { + /** + * @description Retrieves a single product variant + * @param {string} id is required + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/variants/${id}` + return this.client.request("GET", path) + } + + /** + * @description Retrieves a list of of Product Variants + * @param {StoreVariantsListParamsObject} query + * @return {AxiosPromise} + */ + list(query?: StoreGetVariantsParams): AxiosPromise { + const path = `/store/variants` + + const search = Object.entries(query || {}).map(([key, value]) => { + if (Array.isArray(value)) { + return `${key}=${value.join(",")}` + } + + return `${key}=${value}` + }) + + return this.client.request( + "GET", + `${path}${search.length > 0 && `?${search.join("&")}`}` + ) + } +} + +export default ProductVariantsResource diff --git a/packages/medusa-js/src/resources/products.ts b/packages/medusa-js/src/resources/products.ts new file mode 100644 index 0000000000..8a1f967e8c --- /dev/null +++ b/packages/medusa-js/src/resources/products.ts @@ -0,0 +1,55 @@ +import { + StoreGetProductsParams, + StorePostSearchReq, + StorePostSearchRes, + StoreProductsListRes, + StoreProductsRes, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" +import ProductVariantsResource from "./product-variants" + +class ProductsResource extends BaseResource { + public variants = new ProductVariantsResource(this.client) + + /** + * @description Retrieves a single Product + * @param {string} id is required + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/products/${id}` + return this.client.request("GET", path) + } + + /** + * @description Searches for products + * @param {StorePostSearchReq} searchOptions is required + * @return {AxiosPromise} + */ + search(searchOptions: StorePostSearchReq): AxiosPromise { + const path = `/store/products/search` + return this.client.request("POST", path, searchOptions) + } + + /** + * @description Retrieves a list of products + * @param {StoreGetProductsParams} query is optional. Can contain a limit and offset for the returned list + * @return {AxiosPromise} + */ + list(query?: StoreGetProductsParams): AxiosPromise { + let path = `/store/products` + + if (query) { + const queryString = Object.entries(query).map(([key, value]) => { + return `${key}=${value}` + }) + + path = `/store/products?${queryString.join("&")}` + } + + return this.client.request("GET", path) + } +} + +export default ProductsResource diff --git a/packages/medusa-js/src/resources/regions.ts b/packages/medusa-js/src/resources/regions.ts new file mode 100644 index 0000000000..7bd6c6ffb1 --- /dev/null +++ b/packages/medusa-js/src/resources/regions.ts @@ -0,0 +1,26 @@ +import { AxiosPromise } from "axios" +import { StoreRegionsListRes, StoreRegionsRes } from "@medusajs/medusa" +import BaseResource from "./base" + +class RegionsResource extends BaseResource { + /** + * @description Retrieves a list of regions + * @return {AxiosPromise} + */ + list(): AxiosPromise { + const path = `/store/regions` + return this.client.request("GET", path) + } + + /** + * @description Retrieves a region + * @param {string} id is required + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/regions/${id}` + return this.client.request("GET", path) + } +} + +export default RegionsResource diff --git a/packages/medusa-js/src/resources/return-reasons.ts b/packages/medusa-js/src/resources/return-reasons.ts new file mode 100644 index 0000000000..74142d78db --- /dev/null +++ b/packages/medusa-js/src/resources/return-reasons.ts @@ -0,0 +1,29 @@ +import BaseResource from "./base" +import { + StoreReturnReasonsListRes, + StoreReturnReasonsRes, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" + +class ReturnReasonsResource extends BaseResource { + /** + * @description Retrieves a single Return Reason + * @param {string} id is required + * @return {AxiosPromise} + */ + retrieve(id: string): AxiosPromise { + const path = `/store/return-reasons/${id}` + return this.client.request("GET", path) + } + + /** + * Lists return reasons defined in Medusa Admin + * @return {AxiosPromise} + */ + list(): AxiosPromise { + const path = `/store/return-reasons` + return this.client.request("GET", path) + } +} + +export default ReturnReasonsResource diff --git a/packages/medusa-js/src/resources/returns.ts b/packages/medusa-js/src/resources/returns.ts new file mode 100644 index 0000000000..8dec91f50b --- /dev/null +++ b/packages/medusa-js/src/resources/returns.ts @@ -0,0 +1,17 @@ +import BaseResource from "./base" +import { AxiosPromise } from "axios" +import { StoreReturnsRes, StorePostReturnsReq } from "@medusajs/medusa" + +class ReturnsResource extends BaseResource { + /** + * Creates a return request + * @param {StorePostReturnsReq} payload details needed to create a return + * @return {AxiosPromise} + */ + create(payload: StorePostReturnsReq): AxiosPromise { + const path = `/store/returns` + return this.client.request("POST", path, payload) + } +} + +export default ReturnsResource diff --git a/packages/medusa-js/src/resources/shipping-options.ts b/packages/medusa-js/src/resources/shipping-options.ts new file mode 100644 index 0000000000..6d1a29e0f2 --- /dev/null +++ b/packages/medusa-js/src/resources/shipping-options.ts @@ -0,0 +1,44 @@ +import { + StoreGetShippingOptionsParams, + StoreShippingOptionsListRes, +} from "@medusajs/medusa" +import { AxiosPromise } from "axios" +import BaseResource from "./base" + +class ShippingOptionsResource extends BaseResource { + /** + * @description Lists shiping options available for a cart + * @param {string} cart_id + * @return {AxiosPromise} + */ + listCartOptions(cart_id: string): AxiosPromise { + const path = `/store/shipping-options/${cart_id}` + return this.client.request("GET", path) + } + + /** + * @description Lists shiping options available + * @param {StoreGetShippingOptionsParamsObject} query + * @return {AxiosPromise} + */ + list( + query?: StoreGetShippingOptionsParams + ): AxiosPromise { + let path = `/store/shipping-options` + + const queryString = Object.entries(query || {}).map(([key, value]) => { + let val = value + if (Array.isArray(value)) { + val = value.join(",") + } + + return `${key}=${val}` + }) + + path = `/store/shipping-options?${queryString.join("&")}` + + return this.client.request("GET", path) + } +} + +export default ShippingOptionsResource diff --git a/packages/medusa-js/src/resources/swaps.ts b/packages/medusa-js/src/resources/swaps.ts new file mode 100644 index 0000000000..61249060e2 --- /dev/null +++ b/packages/medusa-js/src/resources/swaps.ts @@ -0,0 +1,27 @@ +import { AxiosPromise } from "axios" +import { StoreSwapsRes, StorePostSwapsReq } from "@medusajs/medusa" +import BaseResource from "./base" + +class SwapsResource extends BaseResource { + /** + * @description Creates a swap from a cart + * @param {StorePostSwapsReq} payload + * @return {AxiosPromise} + */ + create(payload: StorePostSwapsReq): AxiosPromise { + const path = `/store/swaps` + return this.client.request("POST", path, payload) + } + + /** + * @description Retrieves a swap by cart id + * @param {string} cart_id id of cart + * @return {AxiosPromise} + */ + retrieveByCartId(cart_id: string): AxiosPromise { + const path = `/store/swaps/${cart_id}` + return this.client.request("GET", path) + } +} + +export default SwapsResource diff --git a/packages/medusa-js/tsconfig.json b/packages/medusa-js/tsconfig.json new file mode 100644 index 0000000000..2ec248e0f4 --- /dev/null +++ b/packages/medusa-js/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["es5", "es6"], + "target": "es5", + "outDir": "./dist", + "esModuleInterop": true, + "declaration": true, + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "sourceMap": true, + "noImplicitReturns": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noImplicitThis": true, + "allowJs": true, + "skipLibCheck": true + }, + "include": ["src"], + "exclude": ["node_modules", " **/tests/*"] +} diff --git a/packages/medusa-js/yarn.lock b/packages/medusa-js/yarn.lock new file mode 100644 index 0000000000..727bd5a072 --- /dev/null +++ b/packages/medusa-js/yarn.lock @@ -0,0 +1,3783 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/compat-data@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" + integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== + dependencies: + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + +"@babel/helpers@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== + dependencies: + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" + integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@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== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/template@^7.16.0", "@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + 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" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@eslint/eslintrc@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" + integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.0.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" + integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@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" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.16" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" + integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" + integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.19": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/node@*": + version "16.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" + integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prettier@^2.0.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" + integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + dependencies: + "@types/yargs-parser" "*" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4, acorn@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +axios@^0.21.0: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.17.5: + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== + dependencies: + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + 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== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + +caniuse-lite@^1.0.30001274: + version "1.0.30001280" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz#066a506046ba4be34cde5f74a08db7a396718fb7" + integrity sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +electron-to-chromium@^1.3.886: + version "1.3.895" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.895.tgz#9b0f8f2e32d8283bbb200156fd5d8dfd775f31ed" + integrity sha512-9Ww3fB8CWctjqHwkOt7DQbMZMpal2x2reod+/lU4b9axO1XJEDUpPMBxs7YnjLhhqpKXIIB5SRYN/B4K0QpvyQ== + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-scope@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" + integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== + +eslint@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" + integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== + dependencies: + "@eslint/eslintrc" "^1.0.4" + "@humanwhocodes/config-array" "^0.6.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^6.0.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.2.0" + semver "^7.2.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" + integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== + dependencies: + acorn "^8.5.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.0.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + +follow-redirects@^1.14.0: + version "1.14.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" + integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.1.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "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-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + +graceful-fs@^4.2.4: + 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" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.2.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^16.4.0: + 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" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^2.2.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" + integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== + +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.18.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry-axios@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-2.6.0.tgz#d4dc5c8a8e73982e26a705e46a33df99a28723e0" + integrity sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ== + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.2: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.5" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + 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" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-utils@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + 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: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@^4.1.3: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.4.6: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" diff --git a/packages/medusa-plugin-algolia/README.md b/packages/medusa-plugin-algolia/README.md index 46390f5063..741b0b5fbc 100644 --- a/packages/medusa-plugin-algolia/README.md +++ b/packages/medusa-plugin-algolia/README.md @@ -17,4 +17,4 @@ algolia Plugin for Medusa to search for products. } } } -``` \ No newline at end of file +``` diff --git a/packages/medusa-plugin-algolia/src/services/algolia.js b/packages/medusa-plugin-algolia/src/services/algolia.js index 17c1b3b85a..5a967b3868 100644 --- a/packages/medusa-plugin-algolia/src/services/algolia.js +++ b/packages/medusa-plugin-algolia/src/services/algolia.js @@ -107,13 +107,13 @@ class AlgoliaService extends SearchService { const { paginationOptions, filter, additionalOptions } = options if ("limit" in paginationOptions) { paginationOptions["length"] = paginationOptions.limit - delete paginationOptions.limit + delete paginationOptions.limit } - + return this.client_.initIndex(indexName).search(query, { filters: filter, ...paginationOptions, - ...additionalOptions + ...additionalOptions, }) } diff --git a/packages/medusa-plugin-algolia/yarn.lock b/packages/medusa-plugin-algolia/yarn.lock index 1b9c17f2bc..9eb4261087 100644 --- a/packages/medusa-plugin-algolia/yarn.lock +++ b/packages/medusa-plugin-algolia/yarn.lock @@ -1065,18 +1065,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@hapi/hoek@^9.0.0": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" - integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== - -"@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" @@ -1266,23 +1254,6 @@ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== -"@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" @@ -3651,22 +3622,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" @@ -3897,21 +3852,6 @@ 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@^1.1.20, medusa-core-utils@^1.1.26: - version "1.1.26" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.26.tgz#fa1f54402c76e6a3991b9d22ae1e9d7609c86e8f" - integrity sha512-9bwy5aIdKPNxzlJAGrUEt7I1ExQjFS7zcWEDg3D5xjUzcpvP0OeVvV3joP9gUNHFjfEp983jzsmVlt1/bz31UA== - dependencies: - joi "^17.3.0" - joi-objectid "^3.0.1" - -medusa-interfaces@1.x: - version "1.1.27" - resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.27.tgz#fd5f5220dd752bcfd174e6eb5d072d731bd80966" - integrity sha512-dsQnsCdP2TQITOrHIZzyYyf4Lu3rW3AgeOzl6NmRWjf5A1KKP5cJcyIg4Te9xOtLUKeP70BvF+fAk7LechtE+Q== - dependencies: - medusa-core-utils "^1.1.26" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" diff --git a/packages/medusa-plugin-permissions/src/services/__mocks__/permission.js b/packages/medusa-plugin-permissions/src/services/__mocks__/permission.js deleted file mode 100644 index aff1a3e94b..0000000000 --- a/packages/medusa-plugin-permissions/src/services/__mocks__/permission.js +++ /dev/null @@ -1,15 +0,0 @@ -import { IdMap } from "medusa-test-utils" - -export const PermissionServiceMock = { - hasPermission: jest.fn().mockImplementation((user, method, endpoint) => { - if (user._id === IdMap.getId("test-user")) { - return Promise.resolve(true) - } - }), -} - -const mock = jest.fn().mockImplementation(() => { - return PermissionServiceMock -}) - -export default mock diff --git a/packages/medusa-plugin-permissions/src/services/__tests__/permission.js b/packages/medusa-plugin-permissions/src/services/__tests__/permission.js deleted file mode 100644 index b663d8c22f..0000000000 --- a/packages/medusa-plugin-permissions/src/services/__tests__/permission.js +++ /dev/null @@ -1,354 +0,0 @@ -import mongoose from "mongoose" -import { IdMap } from "medusa-test-utils" -import PermissionService from "../permission" -import { permissions, RoleModelMock } from "../../models/__mocks__/role" - -describe("PermissionService", () => { - describe("hasPermission", () => { - let result - let user = { - _id: IdMap.getId("test-user"), - email: "oliver@medusa.test", - passwordHash: "123456789", - metadata: { - roles: ["product_editor"], - }, - } - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - }) - - beforeAll(async () => { - jest.clearAllMocks() - result = await permissionService.hasPermission(user, "POST", "/products") - }) - - it("calls permission model functions", () => { - expect(RoleModelMock.findOne).toHaveBeenCalledTimes( - user.metadata.roles.length - ) - }) - - it("successfully grants access to user", () => { - expect(result).toEqual(true) - }) - - it("succesfully denies access to user", async () => { - const accessDenied = await permissionService.hasPermission( - user, - "CREATE", - "/orders" - ) - expect(accessDenied).toEqual(false) - }) - }) - - describe("retrieveRole", () => { - let result - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - }) - beforeAll(async () => { - jest.clearAllMocks() - - result = await permissionService.retrieveRole("product_editor") - }) - - it("calls permission model functions", () => { - expect(RoleModelMock.findOne).toHaveBeenCalledTimes(1) - }) - - it("successfully fetches product editor permissions", () => { - expect(result).toEqual(permissions.productEditorPermission) - }) - - it("throws if role with name does not exist", async () => { - try { - await permissionService.retrieveRole("product_editor") - } catch (error) { - expect(error.message).toEqual( - "test_editor does not exist. Use method createRole to create it." - ) - } - }) - }) - - describe("createRole", () => { - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - }) - - beforeAll(async () => { - jest.clearAllMocks() - - const contentEditorPermissions = [ - { - method: "POST", - endpoint: "/contents", - }, - { - method: "GET", - endpoint: "/contents", - }, - { - method: "PUT", - endpoint: "/contents", - }, - ] - - await permissionService.createRole( - "content_editor", - contentEditorPermissions - ) - }) - - it("calls permission model functions", () => { - expect(RoleModelMock.create).toHaveBeenCalledTimes(1) - expect(RoleModelMock.create).toHaveBeenCalledWith({ - name: "content_editor", - permissions: [ - { - method: "POST", - endpoint: "/contents", - }, - { - method: "GET", - endpoint: "/contents", - }, - { - method: "PUT", - endpoint: "/contents", - }, - ], - }) - }) - - it("throws if any permission is invalid", async () => { - try { - await permissionService.createRole("content_editor", [ - { - method: "POST", - endpoint: "/products", - }, - { - // Should fail since this is not a valid http request - method: "FETCH", - endpoint: "/products", - }, - ]) - } catch (err) { - expect(err.message).toEqual("Permission is not valid") - } - }) - - it("throws if role with name already exists", async () => { - try { - await permissionService.createRole("product_editor", [ - { - method: "POST", - endpoint: "/order", - }, - ]) - } catch (err) { - expect(err.message).toEqual("product_editor already exists") - } - }) - }) - - describe("grantRole", () => { - const setMetadataMock = jest.fn().mockReturnValue(Promise.resolve()) - const userRetrieveMock = jest.fn().mockImplementation((data) => { - if (data === IdMap.getId("permission-user")) { - return Promise.resolve({ - _id: IdMap.getId("permission-user"), - email: "oliver@test.dk", - metadata: { - roles: ["content_editor"], - }, - }) - } - if (data === IdMap.getId("user-without-roles")) { - return Promise.resolve({ - _id: IdMap.getId("user-without-roles"), - email: "oliver@test.dk", - metadata: {}, - }) - } - return Promise.resolve(undefined) - }) - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - userService: { - setMetadata: setMetadataMock, - retrieve: userRetrieveMock, - }, - }) - - beforeEach(async () => { - jest.clearAllMocks() - }) - - it("successfully grants role to user", async () => { - await permissionService.grantRole( - IdMap.getId("permission-user"), - "product_editor" - ) - - expect(setMetadataMock).toHaveBeenCalledTimes(1) - expect(setMetadataMock).toHaveBeenCalledWith( - IdMap.getId("permission-user"), - "roles", - ["content_editor", "product_editor"] - ) - }) - - it("sets user metadata.roles to user that does not have metadata.roles", async () => { - await permissionService.grantRole( - IdMap.getId("user-without-roles"), - "product_editor" - ) - - expect(setMetadataMock).toHaveBeenCalledTimes(1) - expect(setMetadataMock).toHaveBeenCalledWith( - IdMap.getId("user-without-roles"), - "roles", - ["product_editor"] - ) - }) - - it("throws if user already has role", async () => { - try { - await permissionService.grantRole( - IdMap.getId("permission-user"), - "product_editor" - ) - } catch (err) { - expect(err.message).toEqual("User already has role: product_editor") - } - }) - }) - - describe("addPermission", () => { - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - }) - - beforeAll(async () => { - jest.clearAllMocks() - }) - - it("successfully adds permission", async () => { - const toAdd = { - method: "POST", - endpoint: "/products", - } - await permissionService.addPermission("product_editor", toAdd) - - expect(RoleModelMock.updateOne).toHaveBeenCalledTimes(1) - expect(RoleModelMock.updateOne).toHaveBeenCalledWith( - { _id: IdMap.getId("product_editor") }, - { - $push: { permissions: { method: "POST", endpoint: "/products" } }, - } - ) - }) - - it("throws if permission is not valid", async () => { - const toAdd = { - method: "POST", - endpoint: 1234, - } - - try { - await permissionService.addPermission("product_editor", toAdd) - } catch (err) { - expect(err.message).toEqual("Permission is not valid") - } - }) - }) - - describe("removePermission", () => { - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - }) - - beforeAll(async () => { - jest.clearAllMocks() - }) - - it("successfully removes permission", async () => { - const toRemove = { - method: "POST", - endpoint: "/products", - } - await permissionService.removePermission("product_editor", toRemove) - - expect(RoleModelMock.updateOne).toHaveBeenCalledTimes(1) - expect(RoleModelMock.updateOne).toHaveBeenCalledWith( - { _id: IdMap.getId("product_editor") }, - { - $pull: { permissions: { method: "POST", endpoint: "/products" } }, - } - ) - }) - - it("throws if permission is not valid", async () => { - const update = { - method: "FETCH", - endpoint: "/cart", - } - - try { - await permissionService.addPermission("product_editor", update) - } catch (err) { - expect(err.message).toEqual("Permission is not valid") - } - }) - }) - - describe("revokeRole", () => { - const setMetadataMock = jest.fn().mockReturnValue(Promise.resolve()) - const userRetrieveMock = jest.fn().mockReturnValue( - Promise.resolve({ - _id: IdMap.getId("product_editor"), - email: "oliver@test.dk", - metadata: { - roles: ["product_editor"], - }, - }) - ) - const permissionService = new PermissionService({ - roleModel: RoleModelMock, - userService: { - setMetadata: setMetadataMock, - retrieve: userRetrieveMock, - }, - }) - beforeEach(async () => { - jest.clearAllMocks() - }) - - it("successfully revokes a role from user", async () => { - await permissionService.revokeRole( - IdMap.getId("product_editor"), - "product_editor" - ) - - expect(setMetadataMock).toHaveBeenCalledTimes(1) - expect(setMetadataMock).toHaveBeenCalledWith( - IdMap.getId("product_editor"), - "roles", - [] - ) - }) - - it("succeeds idempotently if user does not have the role to delete", async () => { - await permissionService.revokeRole( - IdMap.getId("product_editor"), - "content_editor" - ) - - expect(setMetadataMock).toHaveBeenCalledTimes(0) - }) - }) -}) diff --git a/packages/medusa/index.d.ts b/packages/medusa/index.d.ts new file mode 100644 index 0000000000..80c99ed531 --- /dev/null +++ b/packages/medusa/index.d.ts @@ -0,0 +1 @@ +declare module "medusa-interfaces" diff --git a/packages/medusa/package.json b/packages/medusa/package.json index 9d248543b0..91051e5b35 100644 --- a/packages/medusa/package.json +++ b/packages/medusa/package.json @@ -20,21 +20,24 @@ "@babel/cli": "^7.14.3", "@babel/core": "^7.14.3", "@babel/preset-typescript": "^7.13.0", + "@types/express": "^4.17.13", + "@types/jsonwebtoken": "^8.5.5", "babel-preset-medusa-package": "^1.1.17", "cross-env": "^5.2.1", - "eslint": "^6.8.0", + "eslint": "^7.32.0", "jest": "^25.5.2", "medusa-interfaces": "^1.1.27", "nodemon": "^2.0.1", "prettier": "^1.19.1", "sqlite3": "^5.0.2", - "supertest": "^4.0.2" + "supertest": "^4.0.2", + "typescript": "^4.4.4" }, "scripts": { "start": "nodemon --watch plugins/ --watch src/ --exec babel-node src/app.js", - "watch": "babel -w src --out-dir dist/ --ignore **/__tests__ --extensions \".ts,.js\"", + "watch": "tsc --build --watch", "prepare": "cross-env NODE_ENV=production npm run build", - "build": "babel src -d dist --ignore **/__tests__ --extensions \".ts,.js\"", + "build": "tsc --build", "serve": "node dist/app.js", "test": "jest", "test:unit": "jest" @@ -51,6 +54,8 @@ "body-parser": "^1.19.0", "bull": "^3.12.1", "chokidar": "^3.4.2", + "class-transformer": "^0.4.0", + "class-validator": "^0.13.1", "connect-redis": "^5.0.0", "cookie-parser": "^1.4.4", "core-js": "^3.6.5", @@ -88,4 +93,4 @@ "winston": "^3.2.1" }, "gitHead": "5afd0dfbabaebfb6b09f0e2f055386ac76059372" -} +} \ No newline at end of file diff --git a/packages/medusa/src/api/index.js b/packages/medusa/src/api/index.js index 4d0b4b9002..40948d79d5 100644 --- a/packages/medusa/src/api/index.js +++ b/packages/medusa/src/api/index.js @@ -1,7 +1,7 @@ import { Router } from "express" +import errorHandler from "./middlewares/error-handler" import admin from "./routes/admin" import store from "./routes/store" -import errorHandler from "./middlewares/error-handler" // guaranteed to get dependencies export default (container, config) => { @@ -14,3 +14,20 @@ export default (container, config) => { return app } + +export * from "./routes/admin/notifications" +export * from "./routes/admin/store" +export * from "./routes/admin/variants" +export * from "./routes/store/auth" +export * from "./routes/store/carts" +export * from "./routes/store/collections" +export * from "./routes/store/customers" +export * from "./routes/store/gift-cards" +export * from "./routes/store/orders" +export * from "./routes/store/products" +export * from "./routes/store/regions" +export * from "./routes/store/return-reasons" +export * from "./routes/store/returns" +export * from "./routes/store/shipping-options" +export * from "./routes/store/swaps" +export * from "./routes/store/variants" diff --git a/packages/medusa/src/api/routes/admin/apps/authorize-app.js b/packages/medusa/src/api/routes/admin/apps/authorize-app.js deleted file mode 100644 index 653ac9699a..0000000000 --- a/packages/medusa/src/api/routes/admin/apps/authorize-app.js +++ /dev/null @@ -1,21 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -export default async (req, res) => { - const schema = Validator.object().keys({ - application_name: Validator.string().required(), - state: Validator.string().required(), - code: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - const oauthService = req.scope.resolve("oauthService") - const data = await oauthService.generateToken( - value.application_name, - value.code, - value.state - ) - res.status(200).json({ apps: data }) -} diff --git a/packages/medusa/src/api/routes/admin/apps/authorize-app.ts b/packages/medusa/src/api/routes/admin/apps/authorize-app.ts new file mode 100644 index 0000000000..e3d7f8974b --- /dev/null +++ b/packages/medusa/src/api/routes/admin/apps/authorize-app.ts @@ -0,0 +1,63 @@ +import { IsNotEmpty, IsString } from "class-validator" +import { OauthService } from "../../../../services" +import { validator } from "../../../../utils/validator" +/** + * @oas [post] /apps + * operationId: "PostApps" + * summary: "Generates a token for an application." + * description: "Generates a token for an application." + * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - application_name + * - state + * - code + * properties: + * application_name: + * type: string + * description: Name of the application for the token to be generated for. + * state: + * type: string + * description: State of the application. + * code: + * type: string + * description: The code for the generated token. + * tags: + * - Apps + * responses: + * "200": + * description: OK + * content: + * application/json: + * schema: + * properties: + * apps: + * $ref: "#/components/schemas/OAuth" + */ +export default async (req, res) => { + const validated = await validator(AdminPostAppsReq, req.body) + const oauthService: OauthService = req.scope.resolve("oauthService") + const data = await oauthService.generateToken( + validated.application_name, + validated.code, + validated.state + ) + res.status(200).json({ apps: data }) +} + +export class AdminPostAppsReq { + @IsString() + @IsNotEmpty() + application_name: string + + @IsString() + @IsNotEmpty() + state: string + + @IsString() + @IsNotEmpty() + code: string +} diff --git a/packages/medusa/src/api/routes/admin/apps/index.js b/packages/medusa/src/api/routes/admin/apps/index.ts similarity index 71% rename from packages/medusa/src/api/routes/admin/apps/index.js rename to packages/medusa/src/api/routes/admin/apps/index.ts index cdf43f8603..8ed85f82f1 100644 --- a/packages/medusa/src/api/routes/admin/apps/index.js +++ b/packages/medusa/src/api/routes/admin/apps/index.ts @@ -1,4 +1,5 @@ import { Router } from "express" +import { Oauth } from "../../../.." import middlewares from "../../../middlewares" const route = Router() @@ -14,3 +15,11 @@ export default (app) => { return app } + +export type AdminAppsRes = { + apps: Oauth +} + +export type AdminAppsListRes = { + apps: Oauth[] +} diff --git a/packages/medusa/src/api/routes/admin/apps/list.js b/packages/medusa/src/api/routes/admin/apps/list.js deleted file mode 100644 index 87d2c951bf..0000000000 --- a/packages/medusa/src/api/routes/admin/apps/list.js +++ /dev/null @@ -1,6 +0,0 @@ -export default async (req, res) => { - const oauthService = req.scope.resolve("oauthService") - const data = await oauthService.list({}) - - res.status(200).json({ apps: data }) -} diff --git a/packages/medusa/src/api/routes/admin/apps/list.ts b/packages/medusa/src/api/routes/admin/apps/list.ts new file mode 100644 index 0000000000..5e70595935 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/apps/list.ts @@ -0,0 +1,26 @@ +import { OauthService } from "../../../../services" + +/** + * @oas [get] /apps + * operationId: "GetApps" + * summary: "List applications" + * description: "Retrieve a list of applications." + * x-authenticated: true + * tags: + * - Apps + * responses: + * "200": + * description: OK + * content: + * application/json: + * schema: + * properties: + * collection: + * $ref: "#/components/schemas/OAuth" + */ +export default async (req, res) => { + const oauthService: OauthService = req.scope.resolve("oauthService") + const data = await oauthService.list({}) + + res.status(200).json({ apps: data }) +} diff --git a/packages/medusa/src/api/routes/admin/auth/create-session.js b/packages/medusa/src/api/routes/admin/auth/create-session.js deleted file mode 100644 index 7cb77ced09..0000000000 --- a/packages/medusa/src/api/routes/admin/auth/create-session.js +++ /dev/null @@ -1,53 +0,0 @@ -import _ from "lodash" -import jwt from "jsonwebtoken" -import { Validator } from "medusa-core-utils" -import config from "../../../../config" - -/** - * @oas [post] /auth - * operationId: "PostAuth" - * summary: "Authenticate a User" - * description: "Logs a User in and authorizes them to manage Store settings." - * parameters: - * - (body) email=* {string} The User's email. - * - (body) password=* {string} The User's password. - * tags: - * - Auth - * responses: - * "200": - * description: OK - * content: - * application/json: - * schema: - * properties: - * user: - * $ref: "#/components/schemas/user" - */ -export default async (req, res) => { - const { body } = req - const schema = Validator.object().keys({ - email: Validator.string().required(), - password: Validator.string().required(), - }) - const { value, error } = schema.validate(body) - - if (error) { - throw error - } - - const authService = req.scope.resolve("authService") - const result = await authService.authenticate(value.email, value.password) - if (!result.success) { - res.sendStatus(401) - return - } - - // Add JWT to cookie - req.session.jwt = jwt.sign({ userId: result.user.id }, config.jwtSecret, { - expiresIn: "24h", - }) - - const cleanRes = _.omit(result.user, ["password_hash"]) - - res.json({ user: cleanRes }) -} diff --git a/packages/medusa/src/api/routes/admin/auth/create-session.ts b/packages/medusa/src/api/routes/admin/auth/create-session.ts new file mode 100644 index 0000000000..4824ba292a --- /dev/null +++ b/packages/medusa/src/api/routes/admin/auth/create-session.ts @@ -0,0 +1,67 @@ +import _ from "lodash" +import jwt from "jsonwebtoken" +import config from "../../../../config" +import { validator } from "../../../../utils/validator" +import { IsEmail, IsNotEmpty, IsString } from "class-validator" +import AuthService from "../../../../services/auth" +import { MedusaError } from "medusa-core-utils" + +/** + * @oas [post] /auth + * operationId: "PostAuth" + * summary: "Authenticate a User" + * x-authenticated: false + * description: "Logs a User in and authorizes them to manage Store settings." + * parameters: + * - (body) email=* {string} The User's email. + * - (body) password=* {string} The User's password. + * tags: + * - Auth + * responses: + * "200": + * description: OK + * content: + * application/json: + * schema: + * properties: + * user: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + if (!config.jwtSecret) { + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + "Please configure jwtSecret in your environment" + ) + } + const validated = await validator(AdminPostAuthReq, req.body) + + const authService: AuthService = req.scope.resolve("authService") + const result = await authService.authenticate( + validated.email, + validated.password + ) + + if (result.success && result.user) { + // Add JWT to cookie + req.session.jwt = jwt.sign({ userId: result.user.id }, config.jwtSecret, { + expiresIn: "24h", + }) + + const cleanRes = _.omit(result.user, ["password_hash"]) + + res.json({ user: cleanRes }) + } else { + res.sendStatus(401) + } +} + +export class AdminPostAuthReq { + @IsEmail() + @IsNotEmpty() + email: string + + @IsString() + @IsNotEmpty() + password: string +} diff --git a/packages/medusa/src/api/routes/admin/auth/delete-session.js b/packages/medusa/src/api/routes/admin/auth/delete-session.ts similarity index 92% rename from packages/medusa/src/api/routes/admin/auth/delete-session.js rename to packages/medusa/src/api/routes/admin/auth/delete-session.ts index 7316311fea..7988eab6af 100644 --- a/packages/medusa/src/api/routes/admin/auth/delete-session.js +++ b/packages/medusa/src/api/routes/admin/auth/delete-session.ts @@ -1,9 +1,8 @@ -import _ from "lodash" - /** * @oas [get] /auth * operationId: "DeleteAuth" * summary: "Delete Session" + * x-authenticated: true * description: "Deletes the current session for the logged in user." * tags: * - Auth diff --git a/packages/medusa/src/api/routes/admin/auth/get-session.js b/packages/medusa/src/api/routes/admin/auth/get-session.ts similarity index 53% rename from packages/medusa/src/api/routes/admin/auth/get-session.js rename to packages/medusa/src/api/routes/admin/auth/get-session.ts index b4073059d9..ae024485ae 100644 --- a/packages/medusa/src/api/routes/admin/auth/get-session.js +++ b/packages/medusa/src/api/routes/admin/auth/get-session.ts @@ -1,9 +1,11 @@ import _ from "lodash" +import UserService from "../../../../services/user" /** * @oas [get] /auth * operationId: "GetAuth" * summary: "Get Session" + * x-authenticated: true * description: "Gets the currently logged in User." * tags: * - Auth @@ -18,9 +20,13 @@ import _ from "lodash" * $ref: "#/components/schemas/user" */ export default async (req, res) => { - const userService = req.scope.resolve("userService") - const user = await userService.retrieve(req.user.userId) + try { + const userService: UserService = req.scope.resolve("userService") + const user = await userService.retrieve(req.user.userId) - const cleanRes = _.omit(user, ["password_hash"]) - res.status(200).json({ user: cleanRes }) + const cleanRes = _.omit(user, ["password_hash"]) + res.status(200).json({ user: cleanRes }) + } catch (err) { + res.sendStatus(400) + } } diff --git a/packages/medusa/src/api/routes/admin/auth/index.js b/packages/medusa/src/api/routes/admin/auth/index.ts similarity index 66% rename from packages/medusa/src/api/routes/admin/auth/index.js rename to packages/medusa/src/api/routes/admin/auth/index.ts index b74d357a8f..da53e84125 100644 --- a/packages/medusa/src/api/routes/admin/auth/index.js +++ b/packages/medusa/src/api/routes/admin/auth/index.ts @@ -1,9 +1,10 @@ import { Router } from "express" +import { User } from "../../../.." import middlewares from "../../../middlewares" const route = Router() -export default app => { +export default (app) => { app.use("/auth", route) route.get( @@ -21,3 +22,11 @@ export default app => { return app } + +export type AdminAuthRes = { + user: Omit +} + +export * from "./create-session" +export * from "./delete-session" +export * from "./get-session" diff --git a/packages/medusa/src/api/routes/admin/collections/__tests__/create-collection.js b/packages/medusa/src/api/routes/admin/collections/__tests__/create-collection.js index 7ca2c08bac..3ae5b2d752 100644 --- a/packages/medusa/src/api/routes/admin/collections/__tests__/create-collection.js +++ b/packages/medusa/src/api/routes/admin/collections/__tests__/create-collection.js @@ -59,7 +59,9 @@ describe("POST /admin/collections", () => { it("returns error details", () => { expect(subject.body.type).toEqual("invalid_data") - expect(subject.body.message[0].message).toEqual(`"title" is required`) + expect(subject.body.message).toEqual( + "title should not be empty, title must be a string" + ) }) }) }) diff --git a/packages/medusa/src/api/routes/admin/collections/create-collection.js b/packages/medusa/src/api/routes/admin/collections/create-collection.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/collections/create-collection.js rename to packages/medusa/src/api/routes/admin/collections/create-collection.ts index 604f0d795d..5cd23ed468 100644 --- a/packages/medusa/src/api/routes/admin/collections/create-collection.js +++ b/packages/medusa/src/api/routes/admin/collections/create-collection.ts @@ -1,10 +1,12 @@ -import { MedusaError, Validator } from "medusa-core-utils" - +import { IsNotEmpty, IsObject, IsOptional, IsString } from "class-validator" +import ProductCollectionService from "../../../../services/product-collection" +import { validator } from "../../../../utils/validator" /** * @oas [post] /collections * operationId: "PostCollections" * summary: "Create a Product Collection" * description: "Creates a Product Collection." + * x-authenticated: true * requestBody: * content: * application/json: @@ -34,29 +36,28 @@ import { MedusaError, Validator } from "medusa-core-utils" * $ref: "#/components/schemas/product_collection" */ export default async (req, res) => { - const schema = Validator.object().keys({ - title: Validator.string().required(), - handle: Validator.string() - .optional() - .allow(""), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostCollectionsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) - try { - const productCollectionService = req.scope.resolve( - "productCollectionService" - ) + const created = await productCollectionService.create(validated) + const collection = await productCollectionService.retrieve(created.id) - const created = await productCollectionService.create(value) - const collection = await productCollectionService.retrieve(created.id) - - res.status(200).json({ collection }) - } catch (err) { - throw err - } + res.status(200).json({ collection }) +} + +export class AdminPostCollectionsReq { + @IsString() + @IsNotEmpty() + title: string + + @IsString() + @IsOptional() + handle?: string + + @IsObject() + @IsOptional() + metadata?: object } diff --git a/packages/medusa/src/api/routes/admin/collections/delete-collection.js b/packages/medusa/src/api/routes/admin/collections/delete-collection.ts similarity index 68% rename from packages/medusa/src/api/routes/admin/collections/delete-collection.js rename to packages/medusa/src/api/routes/admin/collections/delete-collection.ts index 2d6bed6958..fc8fc6de50 100644 --- a/packages/medusa/src/api/routes/admin/collections/delete-collection.js +++ b/packages/medusa/src/api/routes/admin/collections/delete-collection.ts @@ -1,8 +1,11 @@ +import ProductCollectionService from "../../../../services/product-collection" + /** * @oas [delete] /collections/{id} * operationId: "DeleteCollectionsCollection" * summary: "Delete a Product Collection" * description: "Deletes a Product Collection." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Collection. * tags: @@ -26,18 +29,14 @@ export default async (req, res) => { const { id } = req.params - try { - const productCollectionService = req.scope.resolve( - "productCollectionService" - ) - await productCollectionService.delete(id) + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) + await productCollectionService.delete(id) - res.json({ - id, - object: "product-collection", - deleted: true, - }) - } catch (err) { - throw err - } + res.json({ + id, + object: "product-collection", + deleted: true, + }) } diff --git a/packages/medusa/src/api/routes/admin/collections/get-collection.js b/packages/medusa/src/api/routes/admin/collections/get-collection.ts similarity index 63% rename from packages/medusa/src/api/routes/admin/collections/get-collection.js rename to packages/medusa/src/api/routes/admin/collections/get-collection.ts index e883fc4dc2..27bbb45b00 100644 --- a/packages/medusa/src/api/routes/admin/collections/get-collection.js +++ b/packages/medusa/src/api/routes/admin/collections/get-collection.ts @@ -1,8 +1,10 @@ +import ProductCollectionService from "../../../../services/product-collection" /** * @oas [get] /collections/{id} * operationId: "GetCollectionsCollection" * summary: "Retrieve a Product Collection" * description: "Retrieves a Product Collection." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product Collection * tags: @@ -17,17 +19,13 @@ * collection: * $ref: "#/components/schemas/product_collection" */ - export default async (req, res) => { const { id } = req.params - try { - const productCollectionService = req.scope.resolve( - "productCollectionService" - ) - const collection = await productCollectionService.retrieve(id) - res.status(200).json({ collection }) - } catch (err) { - throw err - } + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) + + const collection = await productCollectionService.retrieve(id) + res.status(200).json({ collection }) } diff --git a/packages/medusa/src/api/routes/admin/collections/index.js b/packages/medusa/src/api/routes/admin/collections/index.js deleted file mode 100644 index 54b10f6aae..0000000000 --- a/packages/medusa/src/api/routes/admin/collections/index.js +++ /dev/null @@ -1,21 +0,0 @@ -import { Router } from "express" -import middlewares from "../../../middlewares" - -const route = Router() - -export default app => { - app.use("/collections", route) - - route.post("/", middlewares.wrap(require("./create-collection").default)) - route.post("/:id", middlewares.wrap(require("./update-collection").default)) - - route.delete("/:id", middlewares.wrap(require("./delete-collection").default)) - - route.get("/:id", middlewares.wrap(require("./get-collection").default)) - route.get("/", middlewares.wrap(require("./list-collections").default)) - - return app -} - -export const defaultFields = ["id", "title", "handle"] -export const defaultRelations = ["products"] diff --git a/packages/medusa/src/api/routes/admin/collections/index.ts b/packages/medusa/src/api/routes/admin/collections/index.ts new file mode 100644 index 0000000000..5bef1d8aaa --- /dev/null +++ b/packages/medusa/src/api/routes/admin/collections/index.ts @@ -0,0 +1,40 @@ +import { Router } from "express" +import { ProductCollection } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" +import middlewares from "../../../middlewares" +import "reflect-metadata" + +const route = Router() + +export default (app) => { + app.use("/collections", route) + + route.post("/", middlewares.wrap(require("./create-collection").default)) + route.post("/:id", middlewares.wrap(require("./update-collection").default)) + + route.delete("/:id", middlewares.wrap(require("./delete-collection").default)) + + route.get("/:id", middlewares.wrap(require("./get-collection").default)) + route.get("/", middlewares.wrap(require("./list-collections").default)) + + return app +} + +export const defaultAdminCollectionsFields = ["id", "title", "handle"] +export const defaultAdminCollectionsRelations = ["products"] + +export type AdminCollectionsListRes = PaginatedResponse & { + collections: ProductCollection[] +} + +export type AdminCollectionsDeleteRes = DeleteResponse + +export type AdminCollectionsRes = { + collection: ProductCollection +} + +export * from "./create-collection" +export * from "./delete-collection" +export * from "./get-collection" +export * from "./list-collections" +export * from "./update-collection" diff --git a/packages/medusa/src/api/routes/admin/collections/list-collections.js b/packages/medusa/src/api/routes/admin/collections/list-collections.js deleted file mode 100644 index 5bdabf668b..0000000000 --- a/packages/medusa/src/api/routes/admin/collections/list-collections.js +++ /dev/null @@ -1,41 +0,0 @@ -import { defaultFields, defaultRelations } from "." - -/** - * @oas [get] /collections - * operationId: "GetCollections" - * summary: "List Product Collections" - * description: "Retrieve a list of Product Collection." - * tags: - * - Collection - * responses: - * "200": - * description: OK - * content: - * application/json: - * schema: - * properties: - * collection: - * $ref: "#/components/schemas/product_collection" - */ -export default async (req, res) => { - const selector = {} - - const limit = parseInt(req.query.limit) || 10 - const offset = parseInt(req.query.offset) || 0 - - const productCollectionService = req.scope.resolve("productCollectionService") - - const listConfig = { - select: defaultFields, - relations: defaultRelations, - skip: offset, - take: limit, - } - - const [collections, count] = await productCollectionService.listAndCount( - selector, - listConfig - ) - - res.status(200).json({ collections, count }) -} diff --git a/packages/medusa/src/api/routes/admin/collections/list-collections.ts b/packages/medusa/src/api/routes/admin/collections/list-collections.ts new file mode 100644 index 0000000000..e8bd0b32a2 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/collections/list-collections.ts @@ -0,0 +1,67 @@ +import { Type } from "class-transformer" +import { IsNumber, IsOptional } from "class-validator" +import { + defaultAdminCollectionsFields, + defaultAdminCollectionsRelations, +} from "." +import ProductCollectionService from "../../../../services/product-collection" +import { validator } from "../../../../utils/validator" +/** + * @oas [get] /collections + * operationId: "GetCollections" + * summary: "List Product Collections" + * description: "Retrieve a list of Product Collection." + * x-authenticated: true + * parameters: + * - (path) limit {string} The number of collections to return. + * - (path) offset {string} The offset of collections to return. + * tags: + * - Collection + * responses: + * "200": + * description: OK + * content: + * application/json: + * schema: + * properties: + * collection: + * $ref: "#/components/schemas/product_collection" + */ +export default async (req, res) => { + const validated = await validator(AdminGetCollectionsParams, req.query) + + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) + + const listConfig = { + select: defaultAdminCollectionsFields, + relations: defaultAdminCollectionsRelations, + skip: validated.offset, + take: validated.limit, + } + + const [collections, count] = await productCollectionService.listAndCount( + {}, + listConfig + ) + + res.status(200).json({ + collections, + count, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetCollectionsParams { + @IsNumber() + @IsOptional() + @Type(() => Number) + limit = 10 + + @IsNumber() + @IsOptional() + @Type(() => Number) + offset = 0 +} diff --git a/packages/medusa/src/api/routes/admin/collections/update-collection.js b/packages/medusa/src/api/routes/admin/collections/update-collection.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/collections/update-collection.js rename to packages/medusa/src/api/routes/admin/collections/update-collection.ts index 9b191f3ab4..5adcdd46a3 100644 --- a/packages/medusa/src/api/routes/admin/collections/update-collection.js +++ b/packages/medusa/src/api/routes/admin/collections/update-collection.ts @@ -1,10 +1,12 @@ -import { MedusaError, Validator } from "medusa-core-utils" - +import { IsObject, IsOptional, IsString } from "class-validator" +import ProductCollectionService from "../../../../services/product-collection" +import { validator } from "../../../../utils/validator" /** * @oas [post] /collections/{id} * operationId: "PostCollectionsCollection" * summary: "Update a Product Collection" * description: "Updates a Product Collection." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Collection. * requestBody: @@ -36,27 +38,27 @@ import { MedusaError, Validator } from "medusa-core-utils" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().optional(), - handle: Validator.string().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostCollectionsCollectionReq, req.body) + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const updated = await productCollectionService.update(id, validated) + const collection = await productCollectionService.retrieve(updated.id) - try { - const productCollectionService = req.scope.resolve( - "productCollectionService" - ) - - const updated = await productCollectionService.update(id, value) - const collection = await productCollectionService.retrieve(updated.id) - - res.status(200).json({ collection }) - } catch (err) { - throw err - } + res.status(200).json({ collection }) +} + +export class AdminPostCollectionsCollectionReq { + @IsString() + @IsOptional() + title?: string + + @IsString() + @IsOptional() + handle?: string + + @IsObject() + @IsOptional() + metadata?: object } diff --git a/packages/medusa/src/api/routes/admin/customers/create-customer.js b/packages/medusa/src/api/routes/admin/customers/create-customer.ts similarity index 53% rename from packages/medusa/src/api/routes/admin/customers/create-customer.js rename to packages/medusa/src/api/routes/admin/customers/create-customer.ts index 359ddc7b75..9656be2a92 100644 --- a/packages/medusa/src/api/routes/admin/customers/create-customer.js +++ b/packages/medusa/src/api/routes/admin/customers/create-customer.ts @@ -1,10 +1,12 @@ -import { Validator, MedusaError } from "medusa-core-utils" - +import { IsEmail, IsOptional, IsString } from "class-validator" +import { CustomerService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers * operationId: "PostCustomers" * summary: "Create a Customer" * description: "Creates a Customer." + * x-authenticated: true * parameters: * - (body) email=* {string} The Customer's email address. * - (body) first_name=* {string} The Customer's first name. @@ -23,20 +25,27 @@ import { Validator, MedusaError } from "medusa-core-utils" * $ref: "#/components/schemas/customer" */ export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - first_name: Validator.string().required(), - last_name: Validator.string().required(), - password: Validator.string().required(), - phone: Validator.string().optional(), - }) + const validated = await validator(AdminPostCustomersReq, req.bodyn) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - const customer = await customerService.create(value) + const customerService: CustomerService = req.scope.resolve("customerService") + const customer = await customerService.create(validated) res.status(201).json({ customer }) } + +export class AdminPostCustomersReq { + @IsEmail() + email: string + + @IsString() + first_name: string + + @IsString() + last_name: string + + @IsString() + password: string + + @IsString() + @IsOptional() + phone?: string +} diff --git a/packages/medusa/src/api/routes/admin/customers/get-customer.js b/packages/medusa/src/api/routes/admin/customers/get-customer.ts similarity index 79% rename from packages/medusa/src/api/routes/admin/customers/get-customer.js rename to packages/medusa/src/api/routes/admin/customers/get-customer.ts index 7b0d0ce9b0..f7914e66b5 100644 --- a/packages/medusa/src/api/routes/admin/customers/get-customer.js +++ b/packages/medusa/src/api/routes/admin/customers/get-customer.ts @@ -1,8 +1,11 @@ +import CustomerService from "../../../../services/customer" + /** * @oas [get] /customers/{id} * operationId: "GetCustomersCustomer" * summary: "Retrieve a Customer" * description: "Retrieves a Customer." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Customer. * tags: @@ -19,7 +22,7 @@ */ export default async (req, res) => { const { id } = req.params - const customerService = req.scope.resolve("customerService") + const customerService: CustomerService = req.scope.resolve("customerService") const customer = await customerService.retrieve(id, { relations: ["orders", "shipping_addresses"], }) diff --git a/packages/medusa/src/api/routes/admin/customers/index.js b/packages/medusa/src/api/routes/admin/customers/index.ts similarity index 51% rename from packages/medusa/src/api/routes/admin/customers/index.js rename to packages/medusa/src/api/routes/admin/customers/index.ts index c91f7bbab0..310d944332 100644 --- a/packages/medusa/src/api/routes/admin/customers/index.js +++ b/packages/medusa/src/api/routes/admin/customers/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import { Customer } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -13,3 +15,18 @@ export default (app) => { route.post("/:id", middlewares.wrap(require("./update-customer").default)) return app } + +export type AdminCustomersRes = { + customer: Customer +} + +export type AdminCustomersDeleteRes = DeleteResponse + +export type AdminCustomersListRes = PaginatedResponse & { + customers: Customer[] +} + +export * from "./create-customer" +export * from "./get-customer" +export * from "./list-customers" +export * from "./update-customer" diff --git a/packages/medusa/src/api/routes/admin/customers/list-customers.js b/packages/medusa/src/api/routes/admin/customers/list-customers.js deleted file mode 100644 index ae28413b5a..0000000000 --- a/packages/medusa/src/api/routes/admin/customers/list-customers.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * @oas [get] /customers - * operationId: "GetCustomers" - * summary: "List Customers" - * description: "Retrieves a list of Customers." - * tags: - * - Customer - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * customer: - * $ref: "#/components/schemas/customer" - */ -export default async (req, res) => { - const customerService = req.scope.resolve("customerService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - } - - const listConfig = { - relations: expandFields.length ? expandFields : [], - skip: offset, - take: limit, - } - - const [customers, count] = await customerService.listAndCount( - selector, - listConfig - ) - - res.json({ customers, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/customers/list-customers.ts b/packages/medusa/src/api/routes/admin/customers/list-customers.ts new file mode 100644 index 0000000000..b3f34cc662 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/customers/list-customers.ts @@ -0,0 +1,75 @@ +import { Type } from "class-transformer" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { Customer } from "../../../.." +import CustomerService from "../../../../services/customer" +import { FindConfig } from "../../../../types/common" +import { AdminListCustomerSelector } from "../../../../types/customers" +import { validator } from "../../../../utils/validator" +/** + * @oas [get] /customers + * operationId: "GetCustomers" + * summary: "List Customers" + * description: "Retrieves a list of Customers." + * x-authenticated: true + * tags: + * - Customer + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * customer: + * $ref: "#/components/schemas/customer" + */ +export default async (req, res) => { + const validated = await validator(AdminGetCustomersParams, req.query) + + const customerService: CustomerService = req.scope.resolve("customerService") + + const selector: AdminListCustomerSelector = {} + + if (validated.q) { + selector.q = validated.q + } + + let expandFields: string[] = [] + if (validated.expand) { + expandFields = validated.expand.split(",") + } + + const listConfig: FindConfig = { + relations: expandFields, + skip: validated.offset, + take: validated.limit, + } + + const [customers, count] = await customerService.listAndCount( + selector, + listConfig + ) + + res.json({ + customers, + count, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetCustomersParams extends AdminListCustomerSelector { + @IsNumber() + @IsOptional() + @Type(() => Number) + limit = 50 + + @IsNumber() + @IsOptional() + @Type(() => Number) + offset = 0 + + @IsString() + @IsOptional() + expand?: string +} diff --git a/packages/medusa/src/api/routes/admin/customers/update-customer.js b/packages/medusa/src/api/routes/admin/customers/update-customer.ts similarity index 59% rename from packages/medusa/src/api/routes/admin/customers/update-customer.js rename to packages/medusa/src/api/routes/admin/customers/update-customer.ts index 601840e099..b1cd83d7b6 100644 --- a/packages/medusa/src/api/routes/admin/customers/update-customer.js +++ b/packages/medusa/src/api/routes/admin/customers/update-customer.ts @@ -1,10 +1,13 @@ -import { Validator, MedusaError } from "medusa-core-utils" - +import { IsEmail, IsOptional, IsString } from "class-validator" +import CustomerService from "../../../../services/customer" +import { MedusaError } from "medusa-core-utils" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers/{id} * operationId: "PostCustomersCustomer" * summary: "Update a Customer" * description: "Updates a Customer." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Customer. * requestBody: @@ -22,8 +25,11 @@ import { Validator, MedusaError } from "medusa-core-utils" * type: string * description: The Customer's last name. * phone: + * type: string * description: The Customer's phone number. - * type: object + * password: + * type: string + * description: The Customer's password. * tags: * - Customer * responses: @@ -39,34 +45,45 @@ import { Validator, MedusaError } from "medusa-core-utils" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - email: Validator.string().optional(), - first_name: Validator.string().optional(), - last_name: Validator.string().optional(), - password: Validator.string().optional(), - phone: Validator.string().optional(), - }) + const validated = await validator(AdminPostCustomersCustomerReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") + const customerService: CustomerService = req.scope.resolve("customerService") let customer = await customerService.retrieve(id) - if (value.email && customer.has_account) { + if (validated.email && customer.has_account) { throw new MedusaError( MedusaError.Types.INVALID_DATA, "Email cannot be changed when the user has registered their account" ) } - await customerService.update(id, value) + await customerService.update(id, validated) customer = await customerService.retrieve(id, { relations: ["orders"], }) res.status(200).json({ customer }) } + +export class AdminPostCustomersCustomerReq { + @IsEmail() + @IsOptional() + email?: string + + @IsString() + @IsOptional() + first_name?: string + + @IsString() + @IsOptional() + last_name?: string + + @IsString() + @IsOptional() + password?: string + + @IsString() + @IsOptional() + phone?: string +} diff --git a/packages/medusa/src/api/routes/admin/discounts/__tests__/create-discount.js b/packages/medusa/src/api/routes/admin/discounts/__tests__/create-discount.js index 2e4ab927a8..70ca11cd77 100644 --- a/packages/medusa/src/api/routes/admin/discounts/__tests__/create-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/__tests__/create-discount.js @@ -80,7 +80,7 @@ describe("POST /admin/discounts", () => { }) it("returns error", () => { - expect(subject.body.message[0].message).toEqual( + expect(subject.body.message).toEqual( `"valid_duration" must be a valid ISO 8601 duration` ) }) @@ -160,7 +160,9 @@ describe("POST /admin/discounts", () => { }) it("returns error", () => { - expect(subject.body.message[0].message).toEqual(`"rule.type" is required`) + expect(subject.body.message).toEqual( + `type should not be empty, type must be a string` + ) }) }) @@ -193,8 +195,8 @@ describe("POST /admin/discounts", () => { }) it("returns error", () => { - expect(subject.body.message[0].message).toEqual( - `"ends_at" must be greater than "ref:starts_at"` + expect(subject.body.message).toEqual( + `"ends_at" must be greater than "starts_at"` ) }) }) @@ -231,8 +233,8 @@ describe("POST /admin/discounts", () => { it("returns error", () => { expect(DiscountServiceMock.create).toHaveBeenCalledWith({ code: "TEST", - is_dynamic: true, - is_disabled: false, + is_dynamic: true, + is_disabled: false, rule: { description: "Test", type: "fixed", diff --git a/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js b/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js index 643a9ae054..292e87eb76 100644 --- a/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js +++ b/packages/medusa/src/api/routes/admin/discounts/__tests__/list-discounts.js @@ -1,5 +1,5 @@ import { IdMap } from "medusa-test-utils" -import { defaultFields, defaultRelations } from ".." +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from ".." import { request } from "../../../../../helpers/test-request" import { DiscountServiceMock } from "../../../../../services/__mocks__/discount" @@ -27,8 +27,8 @@ describe("GET /admin/discounts", () => { expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( {}, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, skip: 0, take: 20, order: { created_at: "DESC" }, @@ -64,8 +64,8 @@ describe("GET /admin/discounts", () => { expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( { q: "OLI", is_dynamic: false, is_disabled: false }, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, skip: 20, take: 40, order: { created_at: "DESC" }, @@ -97,8 +97,8 @@ describe("GET /admin/discounts", () => { expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( { is_dynamic: true }, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, skip: 0, take: 20, order: { created_at: "DESC" }, @@ -130,8 +130,8 @@ describe("GET /admin/discounts", () => { expect(DiscountServiceMock.listAndCount).toHaveBeenCalledWith( { is_disabled: true }, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, skip: 0, take: 20, order: { created_at: "DESC" }, diff --git a/packages/medusa/src/api/routes/admin/discounts/__tests__/update-discount.js b/packages/medusa/src/api/routes/admin/discounts/__tests__/update-discount.js index eeb464a76d..cb6be66a97 100644 --- a/packages/medusa/src/api/routes/admin/discounts/__tests__/update-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/__tests__/update-discount.js @@ -86,7 +86,7 @@ describe("POST /admin/discounts", () => { }) it("returns error", () => { - expect(subject.body.message[0].message).toEqual( + expect(subject.body.message).toEqual( `"valid_duration" must be a valid ISO 8601 duration` ) }) @@ -180,8 +180,8 @@ describe("POST /admin/discounts", () => { }) it("returns error", () => { - expect(subject.body.message[0].message).toEqual( - `"ends_at" must be greater than "ref:starts_at"` + expect(subject.body.message).toEqual( + `"ends_at" must be greater than "starts_at"` ) }) }) diff --git a/packages/medusa/src/api/routes/admin/discounts/add-region.js b/packages/medusa/src/api/routes/admin/discounts/add-region.ts similarity index 63% rename from packages/medusa/src/api/routes/admin/discounts/add-region.js rename to packages/medusa/src/api/routes/admin/discounts/add-region.ts index 127723350b..877c5c6d4b 100644 --- a/packages/medusa/src/api/routes/admin/discounts/add-region.js +++ b/packages/medusa/src/api/routes/admin/discounts/add-region.ts @@ -1,10 +1,12 @@ -import { defaultFields, defaultRelations } from "./" - +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." +import { Discount } from "../../../.." +import DiscountService from "../../../../services/discount" /** * @oas [post] /discounts/{id}/regions/{region_id} * operationId: "PostDiscountsDiscountRegionsRegion" * summary: "Adds Region availability" * description: "Adds a Region to the list of Regions that a Discount can be used in." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount. * - (path) region_id=* {string} The id of the Region. @@ -22,12 +24,13 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { discount_id, region_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.addRegion(discount_id, region_id) - const discount = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, + const discount: Discount = await discountService.retrieve(discount_id, { + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, }) res.status(200).json({ discount }) diff --git a/packages/medusa/src/api/routes/admin/discounts/add-valid-product.js b/packages/medusa/src/api/routes/admin/discounts/add-valid-product.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/discounts/add-valid-product.js rename to packages/medusa/src/api/routes/admin/discounts/add-valid-product.ts index 9b7347dc61..d3c5d8f930 100644 --- a/packages/medusa/src/api/routes/admin/discounts/add-valid-product.js +++ b/packages/medusa/src/api/routes/admin/discounts/add-valid-product.ts @@ -1,13 +1,15 @@ -import { defaultFields, defaultRelations } from "./" - +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." +import { Discount } from "../../../.." +import DiscountService from "../../../../services/discount" /** - * @oas [post] /discounts/{id}/products/{product_id} + * @oas [post] /discounts/{id}/products/{variant_id} * operationId: "PostDiscountsDiscountProductsProduct" * summary: "Adds Product availability" * description: "Adds a Product to the list of Products that a Discount can be used for." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount. - * - (path) product_id=* {string} The id of the Product. + * - (path) variant_id=* {string} The id of the Product. * tags: * - Discount * responses: @@ -22,12 +24,13 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { discount_id, variant_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.addValidProduct(discount_id, variant_id) - const discount = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, + const discount: Discount = await discountService.retrieve(discount_id, { + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, }) res.status(200).json({ discount }) diff --git a/packages/medusa/src/api/routes/admin/discounts/create-discount.js b/packages/medusa/src/api/routes/admin/discounts/create-discount.ts similarity index 52% rename from packages/medusa/src/api/routes/admin/discounts/create-discount.js rename to packages/medusa/src/api/routes/admin/discounts/create-discount.ts index 381132024d..ee8bd986ed 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/create-discount.ts @@ -1,14 +1,33 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations } from "." - +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsDate, + IsNotEmpty, + IsNumber, + IsObject, + IsOptional, + IsPositive, + IsString, + ValidateNested, +} from "class-validator" +import { defaultAdminDiscountsRelations } from "." +import DiscountService from "../../../../services/discount" +import { IsGreaterThan } from "../../../../utils/validators/greater-than" +import { validator } from "../../../../utils/validator" +import { IsISO8601Duration } from "../../../../utils/validators/iso8601-duration" /** * @oas [post] /discounts * operationId: "PostDiscounts" * summary: "Creates a Discount" + * x-authenticated: true * description: "Creates a Discount with a given set of rules that define how the Discount behaves." * requestBody: * content: * application/json: + * required: + * - code + * - rule * schema: * properties: * code: @@ -56,36 +75,84 @@ import { defaultRelations } from "." * $ref: "#/components/schemas/discount" */ export default async (req, res) => { - const schema = Validator.object().keys({ - code: Validator.string().required(), - is_dynamic: Validator.boolean().default(false), - rule: Validator.object() - .keys({ - description: Validator.string().optional(), - type: Validator.string().required(), - value: Validator.number().positive().required(), - allocation: Validator.string().required(), - valid_for: Validator.array().items(Validator.string()), - }) - .required(), - is_disabled: Validator.boolean().default(false), - starts_at: Validator.date().optional(), - ends_at: Validator.date().greater(Validator.ref("starts_at")).optional(), - valid_duration: Validator.string().isoDuration().allow(null).optional(), - usage_limit: Validator.number().positive().optional(), - regions: Validator.array().items(Validator.string()).optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostDiscountsReq, req.body) - const { value, error } = schema.validate(req.body) - - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const discountService = req.scope.resolve("discountService") - const created = await discountService.create(value) - const discount = await discountService.retrieve(created.id, defaultRelations) + const discountService: DiscountService = req.scope.resolve("discountService") + const created = await discountService.create(validated) + const discount = await discountService.retrieve( + created.id, + defaultAdminDiscountsRelations + ) res.status(200).json({ discount }) } + +export class AdminPostDiscountsReq { + @IsString() + @IsNotEmpty() + code: string + + @IsNotEmpty() + @ValidateNested() + @Type(() => AdminPostDiscountsDiscountRule) + rule: AdminPostDiscountsDiscountRule + + @IsBoolean() + @IsOptional() + is_dynamic = false + + @IsBoolean() + @IsOptional() + is_disabled = false + + @IsDate() + @IsOptional() + @Type(() => Date) + starts_at?: Date + + @IsDate() + @IsOptional() + @IsGreaterThan("starts_at") + @Type(() => Date) + ends_at?: Date + + @IsISO8601Duration() + @IsOptional() + valid_duration?: string + + @IsNumber() + @IsOptional() + @IsPositive() + usage_limit?: number + + @IsArray() + @IsOptional() + @IsString({ each: true }) + regions?: string[] + + @IsObject() + @IsOptional() + metadata?: object +} + +export class AdminPostDiscountsDiscountRule { + @IsString() + @IsOptional() + description?: string + + @IsString() + @IsNotEmpty() + type: string + + @IsNumber() + value: number + + @IsString() + @IsNotEmpty() + allocation: string + + @IsOptional() + @IsArray() + @IsString({ each: true }) + valid_for?: string[] +} diff --git a/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.js b/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts similarity index 60% rename from packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.js rename to packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts index 8e2f284f42..57fb34ba8b 100644 --- a/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.js +++ b/packages/medusa/src/api/routes/admin/discounts/create-dynamic-code.ts @@ -1,10 +1,18 @@ -import { MedusaError, Validator } from "medusa-core-utils" - +import { + IsNotEmpty, + IsNumber, + IsObject, + IsOptional, + IsString, +} from "class-validator" +import DiscountService from "../../../../services/discount" +import { validator } from "../../../../utils/validator" /** * @oas [post] /discounts/{id}/dynamic-codes * operationId: "PostDiscountsDiscountDynamicCodes" * summary: "Create a dynamic Discount code" * description: "Creates a unique code that can map to a parent Discount. This is useful if you want to automatically generate codes with the same behaviour." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount to create the dynamic code from." * - (body) code=* {string} The unique code that will be used to redeem the Discount. @@ -24,20 +32,16 @@ import { MedusaError, Validator } from "medusa-core-utils" export default async (req, res) => { const { discount_id } = req.params - const schema = Validator.object().keys({ - code: Validator.string().required(), - usage_limit: Validator.number().default(1), - metadata: Validator.object().optional(), - }) + const validated = await validator( + AdminPostDiscountsDiscountDynamicCodesReq, + req.body + ) - const { value, error } = schema.validate(req.body) - - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const discountService = req.scope.resolve("discountService") - const created = await discountService.createDynamicCode(discount_id, value) + const discountService: DiscountService = req.scope.resolve("discountService") + const created = await discountService.createDynamicCode( + discount_id, + validated + ) const discount = await discountService.retrieve(created.id, { relations: ["rule", "rule.valid_for", "regions"], @@ -45,3 +49,17 @@ export default async (req, res) => { res.status(200).json({ discount }) } + +export class AdminPostDiscountsDiscountDynamicCodesReq { + @IsString() + @IsNotEmpty() + code: string + + @IsNumber() + @IsOptional() + usage_limit = 1 + + @IsObject() + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/discounts/delete-discount.js b/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts similarity index 83% rename from packages/medusa/src/api/routes/admin/discounts/delete-discount.js rename to packages/medusa/src/api/routes/admin/discounts/delete-discount.ts index e053b84f45..e2db8b4ee6 100644 --- a/packages/medusa/src/api/routes/admin/discounts/delete-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/delete-discount.ts @@ -1,8 +1,11 @@ +import DiscountService from "../../../../services/discount" + /** * @oas [delete] /discounts/{id} * operationId: "DeleteDiscountsDiscount" * summary: "Delete a Discount" * description: "Deletes a Discount." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount * tags: @@ -25,7 +28,8 @@ */ export default async (req, res) => { const { discount_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.delete(discount_id) res.json({ diff --git a/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.js b/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts similarity index 84% rename from packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.js rename to packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts index d0f1b790bd..1aa76a74a9 100644 --- a/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.js +++ b/packages/medusa/src/api/routes/admin/discounts/delete-dynamic-code.ts @@ -1,8 +1,11 @@ +import DiscountService from "../../../../services/discount" + /** * @oas [delete] /discounts/{id}/dynamic-codes/{code} * operationId: "DeleteDiscountsDiscountDynamicCodesCode" * summary: "Delete a dynamic code" * description: "Deletes a dynamic code from a Discount." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount * - (path) code=* {string} The id of the Discount @@ -20,7 +23,8 @@ */ export default async (req, res) => { const { discount_id, code } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.deleteDynamicCode(discount_id, code) const discount = await discountService.retrieve(discount_id, { diff --git a/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.js b/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts similarity index 65% rename from packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.js rename to packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts index 89f8b2e27c..9675834aae 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.js +++ b/packages/medusa/src/api/routes/admin/discounts/get-discount-by-code.ts @@ -1,10 +1,11 @@ -import { defaultRelations } from "./" - +import { defaultAdminDiscountsRelations } from "." +import DiscountService from "../../../../services/discount" /** * @oas [get] /discounts/code/{code} * operationId: "GetDiscountsDiscountCode" * summary: "Retrieve a Discount by code" * description: "Retrieves a Discount by its discount code" + * x-authenticated: true * parameters: * - (path) code=* {string} The code of the Discount * tags: @@ -21,8 +22,12 @@ import { defaultRelations } from "./" */ export default async (req, res) => { const { code } = req.params - const discountService = req.scope.resolve("discountService") - const discount = await discountService.retrieveByCode(code, defaultRelations) + + const discountService: DiscountService = req.scope.resolve("discountService") + const discount = await discountService.retrieveByCode( + code, + defaultAdminDiscountsRelations + ) res.status(200).json({ discount }) } diff --git a/packages/medusa/src/api/routes/admin/discounts/get-discount.js b/packages/medusa/src/api/routes/admin/discounts/get-discount.ts similarity index 65% rename from packages/medusa/src/api/routes/admin/discounts/get-discount.js rename to packages/medusa/src/api/routes/admin/discounts/get-discount.ts index 74169063f6..804157182e 100644 --- a/packages/medusa/src/api/routes/admin/discounts/get-discount.js +++ b/packages/medusa/src/api/routes/admin/discounts/get-discount.ts @@ -1,10 +1,11 @@ -import { defaultFields, defaultRelations } from "./" - +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." +import DiscountService from "../../../../services/discount" /** * @oas [get] /discounts/{id} * operationId: "GetDiscountsDiscount" * summary: "Retrieve a Discount" * description: "Retrieves a Discount" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount * tags: @@ -21,10 +22,11 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { discount_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") const data = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, }) res.status(200).json({ discount: data }) diff --git a/packages/medusa/src/api/routes/admin/discounts/index.js b/packages/medusa/src/api/routes/admin/discounts/index.ts similarity index 68% rename from packages/medusa/src/api/routes/admin/discounts/index.js rename to packages/medusa/src/api/routes/admin/discounts/index.ts index f5e3dca75f..d79bd753f1 100644 --- a/packages/medusa/src/api/routes/admin/discounts/index.js +++ b/packages/medusa/src/api/routes/admin/discounts/index.ts @@ -1,5 +1,8 @@ import { Router } from "express" +import { Discount } from "../../../.." import middlewares from "../../../middlewares" +import "reflect-metadata" +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" const route = Router() @@ -59,7 +62,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultAdminDiscountsFields = [ "id", "code", "is_dynamic", @@ -77,9 +80,32 @@ export const defaultFields = [ "valid_duration", ] -export const defaultRelations = [ +export const defaultAdminDiscountsRelations = [ "rule", "parent_discount", "regions", "rule.valid_for", ] + +export type AdminDiscountsRes = { + discount: Discount +} + +export type AdminDiscountsDeleteRes = DeleteResponse + +export type AdminDiscountsListRes = PaginatedResponse & { + discounts: Discount[] +} + +export * from "./add-region" +export * from "./add-valid-product" +export * from "./create-discount" +export * from "./create-dynamic-code" +export * from "./delete-discount" +export * from "./delete-dynamic-code" +export * from "./get-discount" +export * from "./get-discount-by-code" +export * from "./list-discounts" +export * from "./remove-region" +export * from "./remove-valid-product" +export * from "./update-discount" diff --git a/packages/medusa/src/api/routes/admin/discounts/list-discounts.js b/packages/medusa/src/api/routes/admin/discounts/list-discounts.js deleted file mode 100644 index 5bec686640..0000000000 --- a/packages/medusa/src/api/routes/admin/discounts/list-discounts.js +++ /dev/null @@ -1,52 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /discounts - * operationId: "GetDiscounts" - * summary: "List Discounts" - * description: "Retrieves a list of Discounts" - * tags: - * - Discount - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * discount: - * $ref: "#/components/schemas/discount" - */ -export default async (req, res) => { - const discountService = req.scope.resolve("discountService") - const limit = parseInt(req.query.limit) || 20 - const offset = parseInt(req.query.offset) || 0 - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - if ("is_dynamic" in req.query) { - selector.is_dynamic = req.query.is_dynamic === "true" - } - - if ("is_disabled" in req.query) { - selector.is_disabled = req.query.is_disabled === "true" - } - - const listConfig = { - select: defaultFields, - relations: defaultRelations, - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const [discounts, count] = await discountService.listAndCount( - selector, - listConfig - ) - - res.status(200).json({ discounts, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts b/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts new file mode 100644 index 0000000000..ecfc33a44b --- /dev/null +++ b/packages/medusa/src/api/routes/admin/discounts/list-discounts.ts @@ -0,0 +1,93 @@ +import { Type, Transform } from "class-transformer" +import { IsBoolean, IsInt, IsOptional, IsString } from "class-validator" +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." +import DiscountService from "../../../../services/discount" +import { ListSelector } from "../../../../types/discount" +import { validator } from "../../../../utils/validator" +/** + * @oas [get] /discounts + * operationId: "GetDiscounts" + * summary: "List Discounts" + * x-authenticated: true + * description: "Retrieves a list of Discounts" + * parameters: + * - (query) q {string} Search query applied on results. + * - (query) is_dynamic {boolean} Return only dynamic discounts. + * - (query) is_disabled {boolean} Return only disabled discounts. + * - (query) limit {number} The number of items in the response + * - (query) offset {number} The offset of items in response + * - (query) expand {string} Comma separated list of relations to include in the results. + * tags: + * - Discount + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * discount: + * $ref: "#/components/schemas/discount" + */ +export default async (req, res) => { + const validated = await validator(AdminGetDiscountsParams, req.query) + + const discountService: DiscountService = req.scope.resolve("discountService") + const selector: ListSelector = {} + + if (validated.q) { + selector.q = validated.q + } + + selector.is_disabled = validated.is_disabled + selector.is_dynamic = validated.is_dynamic + + const listConfig = { + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, + skip: validated.offset, + take: validated.limit, + order: { created_at: "DESC" }, + } + const [discounts, count] = await discountService.listAndCount( + selector, + listConfig + ) + + res.status(200).json({ + discounts, + count, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetDiscountsParams { + @IsString() + @IsOptional() + q?: string + + @IsBoolean() + @IsOptional() + @Transform(({ value }) => value === "true") + is_dynamic?: boolean + + @IsBoolean() + @IsOptional() + @Transform(({ value }) => value === "true") + is_disabled?: boolean + + @IsInt() + @IsOptional() + @Type(() => Number) + limit = 20 + + @IsInt() + @IsOptional() + @Type(() => Number) + offset = 0 + + @IsString() + @IsOptional() + expand?: string +} diff --git a/packages/medusa/src/api/routes/admin/discounts/remove-region.js b/packages/medusa/src/api/routes/admin/discounts/remove-region.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/discounts/remove-region.js rename to packages/medusa/src/api/routes/admin/discounts/remove-region.ts index 610c01339a..1b6b87b66d 100644 --- a/packages/medusa/src/api/routes/admin/discounts/remove-region.js +++ b/packages/medusa/src/api/routes/admin/discounts/remove-region.ts @@ -1,9 +1,10 @@ -import { defaultFields, defaultRelations } from "./" - +import DiscountService from "../../../../services/discount" +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." /** * @oas [delete] /discounts/{id}/regions/{region_id} * operationId: "DeleteDiscountsDiscountRegionsRegion" * summary: "Remove Region availability" + * x-authenticated: true * description: "Removes a Region from the list of Regions that a Discount can be used in." * parameters: * - (path) id=* {string} The id of the Discount. @@ -22,12 +23,13 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { discount_id, region_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.removeRegion(discount_id, region_id) const discount = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, }) res.status(200).json({ discount }) diff --git a/packages/medusa/src/api/routes/admin/discounts/remove-valid-product.js b/packages/medusa/src/api/routes/admin/discounts/remove-valid-product.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/discounts/remove-valid-product.js rename to packages/medusa/src/api/routes/admin/discounts/remove-valid-product.ts index ff132c81e4..8cc583fddc 100644 --- a/packages/medusa/src/api/routes/admin/discounts/remove-valid-product.js +++ b/packages/medusa/src/api/routes/admin/discounts/remove-valid-product.ts @@ -1,10 +1,11 @@ -import { defaultFields, defaultRelations } from "./" - +import DiscountService from "../../../../services/discount" +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." /** * @oas [post] /discounts/{id}/products/{product_id} * operationId: "DeleteDiscountsDiscountProductsProduct" * summary: "Remove Product availability" * description: "Removes a Product from the list of Products that a Discount can be used for." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Discount. * - (path) product_id=* {string} The id of the Product. @@ -22,12 +23,13 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { discount_id, variant_id } = req.params - const discountService = req.scope.resolve("discountService") + + const discountService: DiscountService = req.scope.resolve("discountService") await discountService.removeValidProduct(discount_id, variant_id) const discount = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, }) res.status(200).json({ discount }) diff --git a/packages/medusa/src/api/routes/admin/discounts/update-discount.js b/packages/medusa/src/api/routes/admin/discounts/update-discount.js deleted file mode 100644 index 39f7c39e88..0000000000 --- a/packages/medusa/src/api/routes/admin/discounts/update-discount.js +++ /dev/null @@ -1,95 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /discounts/{id} - * operationId: "PostDiscountsDiscount" - * summary: "Update a Discount" - * description: "Updates a Discount with a given set of rules that define how the Discount behaves." - * parameters: - * - (path) id=* {string} The id of the Discount. - * requestBody: - * content: - * application/json: - * schema: - * properties: - * code: - * type: string - * description: A unique code that will be used to redeem the Discount - * is_dynamic: - * type: string - * description: Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules. - * rule: - * description: The Discount Rule that defines how Discounts are calculated - * oneOf: - * - $ref: "#/components/schemas/discount_rule" - * is_disabled: - * type: boolean - * description: Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. - * starts_at: - * type: string - * format: date-time - * description: The time at which the Discount should be available. - * ends_at: - * type: string - * format: date-time - * description: The time at which the Discount should no longer be available. - * regions: - * description: A list of Region ids representing the Regions in which the Discount can be used. - * type: array - * items: - * type: string - * tags: - * - Discount - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * discount: - * $ref: "#/components/schemas/discount" - */ -export default async (req, res) => { - const { discount_id } = req.params - const schema = Validator.object().keys({ - code: Validator.string().optional(), - is_dynamic: Validator.boolean().optional(), - rule: Validator.object() - .keys({ - id: Validator.string().required(), - description: Validator.string().optional(), - type: Validator.string().required(), - value: Validator.number().required(), - allocation: Validator.string().required(), - valid_for: Validator.array().items(Validator.string()), - }) - .optional(), - is_disabled: Validator.boolean().optional(), - starts_at: Validator.date().optional(), - ends_at: Validator.when("starts_at", { - not: undefined, - then: Validator.date().greater(Validator.ref("starts_at")).optional(), - otherwise: Validator.date().optional(), - }), - valid_duration: Validator.string().isoDuration().allow(null).optional(), - usage_limit: Validator.number().positive().optional(), - regions: Validator.array().items(Validator.string()).optional(), - }) - - const { value, error } = schema.validate(req.body) - - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const discountService = req.scope.resolve("discountService") - await discountService.update(discount_id, value) - const discount = await discountService.retrieve(discount_id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ discount }) -} diff --git a/packages/medusa/src/api/routes/admin/discounts/update-discount.ts b/packages/medusa/src/api/routes/admin/discounts/update-discount.ts new file mode 100644 index 0000000000..5717ea72ce --- /dev/null +++ b/packages/medusa/src/api/routes/admin/discounts/update-discount.ts @@ -0,0 +1,158 @@ +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsDate, + IsNotEmpty, + IsNumber, + IsObject, + IsOptional, + IsPositive, + IsString, + ValidateNested, +} from "class-validator" +import { defaultAdminDiscountsFields, defaultAdminDiscountsRelations } from "." +import DiscountService from "../../../../services/discount" +import { IsGreaterThan } from "../../../../utils/validators/greater-than" +import { validator } from "../../../../utils/validator" +import { IsISO8601Duration } from "../../../../utils/validators/iso8601-duration" + +/** + * @oas [post] /discounts/{id} + * operationId: "PostDiscountsDiscount" + * summary: "Update a Discount" + * description: "Updates a Discount with a given set of rules that define how the Discount behaves." + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Discount. + * requestBody: + * content: + * application/json: + * schema: + * properties: + * code: + * type: string + * description: A unique code that will be used to redeem the Discount + * is_dynamic: + * type: string + * description: Whether the Discount should have multiple instances of itself, each with a different code. This can be useful for automatically generated codes that all have to follow a common set of rules. + * rule: + * description: The Discount Rule that defines how Discounts are calculated + * oneOf: + * - $ref: "#/components/schemas/discount_rule" + * is_disabled: + * type: boolean + * description: Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. + * starts_at: + * type: Date + * description: The time at which the Discount should be available. + * ends_at: + * type: Date + * description: The time at which the Discount should no longer be available. + * regions: + * description: A list of Region ids representing the Regions in which the Discount can be used. + * type: array + * items: + * type: string + * metadata: + * description: An object containing metadata of the discount + * type: object + * tags: + * - Discount + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * discount: + * $ref: "#/components/schemas/discount" + */ +export default async (req, res) => { + const { discount_id } = req.params + + const validated = await validator(AdminPostDiscountsDiscountReq, req.body) + const discountService: DiscountService = req.scope.resolve("discountService") + await discountService.update(discount_id, validated) + const discount = await discountService.retrieve(discount_id, { + select: defaultAdminDiscountsFields, + relations: defaultAdminDiscountsRelations, + }) + + res.status(200).json({ discount }) +} + +export class AdminPostDiscountsDiscountReq { + @IsString() + @IsOptional() + code?: string + + @IsOptional() + @ValidateNested() + @Type(() => AdminUpdateDiscountRule) + rule?: AdminUpdateDiscountRule + + @IsBoolean() + @IsOptional() + is_dynamic?: boolean + + @IsBoolean() + @IsOptional() + is_disabled?: boolean + + @IsDate() + @IsOptional() + @Type(() => Date) + starts_at?: Date + + @IsDate() + @IsOptional() + @IsGreaterThan("starts_at") + @Type(() => Date) + ends_at?: Date + + @IsISO8601Duration() + @IsOptional() + valid_duration?: string + + @IsNumber() + @IsOptional() + @IsPositive() + usage_limit?: number + + @IsArray() + @IsOptional() + @IsString({ each: true }) + regions?: string[] + + @IsObject() + @IsOptional() + metadata?: object +} + +export class AdminUpdateDiscountRule { + @IsString() + @IsNotEmpty() + id: string + + @IsString() + @IsOptional() + description?: string + + @IsString() + @IsNotEmpty() + type: string + + @IsNumber() + value: string + + @IsString() + @IsNotEmpty() + allocation: string + + @IsArray() + @IsOptional() + @IsString({ each: true }) + valid_for?: string +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.js b/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts similarity index 59% rename from packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.js rename to packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts index 642b293963..699c916d17 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/create-draft-order.ts @@ -1,19 +1,40 @@ +import { Type } from "class-transformer" import { - MedusaError, - Validator, - transformIdableFields, -} from "medusa-core-utils" -import { defaultFields, defaultRelations } from "." - + IsArray, + IsBoolean, + IsEmail, + IsEnum, + IsNotEmpty, + IsNumber, + IsObject, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { transformIdableFields } from "medusa-core-utils" +import { + defaultAdminDraftOrdersFields, + defaultAdminDraftOrdersRelations, +} from "." +import { DraftOrder } from "../../../.." +import { DraftOrderService } from "../../../../services" +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" /** * @oas [post] /draft-orders * operationId: "PostDraftOrders" * summary: "Create a Draft Order" * description: "Creates a Draft Order" + * x-authenticated: true * requestBody: * content: * application/json: * schema: + * required: + * - email + * - items + * - region_id + * - shipping_methods * properties: * status: * description: "The status of the draft order" @@ -97,52 +118,115 @@ import { defaultFields, defaultRelations } from "." */ export default async (req, res) => { - const schema = Validator.object().keys({ - status: Validator.string().valid("open", "completed").optional(), - email: Validator.string().email().required(), - billing_address: Validator.address().optional(), - shipping_address: Validator.address().optional(), - items: Validator.array() - .items({ - variant_id: Validator.string().optional().allow(""), - unit_price: Validator.number().optional(), - title: Validator.string().optional().allow(""), - quantity: Validator.number().required(), - metadata: Validator.object().default({}), - }) - .required(), - region_id: Validator.string().required(), - discounts: Validator.array() - .items({ - code: Validator.string().required(), - }) - .optional(), - customer_id: Validator.string().optional(), - no_notification_order: Validator.boolean().optional(), - shipping_methods: Validator.array() - .items({ - option_id: Validator.string().required(), - data: Validator.object().optional(), - price: Validator.number().integer().integer().allow(0).optional(), - }) - .required(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostDraftOrdersReq, req.body) - let { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const value = transformIdableFields(validated, [ + "shipping_address", + "billing_address", + ]) - value = transformIdableFields(value, ["shipping_address", "billing_address"]) - - const draftOrderService = req.scope.resolve("draftOrderService") - let draftOrder = await draftOrderService.create(value) + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + let draftOrder: DraftOrder = await draftOrderService.create(value) draftOrder = await draftOrderService.retrieve(draftOrder.id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultAdminDraftOrdersRelations, + select: defaultAdminDraftOrdersFields, }) res.status(200).json({ draft_order: draftOrder }) } + +enum Status { + open = "open", + completed = "completed", +} + +export class AdminPostDraftOrdersReq { + @IsEnum(Status) + @IsOptional() + status?: string + + @IsEmail() + email: string + + @IsOptional() + @Type(() => AddressPayload) + billing_address?: AddressPayload + + @IsOptional() + @Type(() => AddressPayload) + shipping_address?: AddressPayload + + @IsArray() + @Type(() => Item) + @IsNotEmpty() + @ValidateNested({ each: true }) + items: Item[] + + @IsString() + region_id: string + + @IsArray() + @IsOptional() + @Type(() => Discount) + @ValidateNested({ each: true }) + discounts?: Discount[] + + @IsString() + @IsOptional() + customer_id?: string + + @IsBoolean() + @IsOptional() + no_notification_order?: boolean + + @IsArray() + @Type(() => ShippingMethod) + @IsNotEmpty() + @ValidateNested({ each: true }) + shipping_methods: ShippingMethod[] + + @IsObject() + @IsOptional() + metadata?: object = {} +} + +class ShippingMethod { + @IsString() + option_id: string + + @IsObject() + @IsOptional() + data?: object = {} + + @IsNumber() + @IsOptional() + price?: number +} + +class Discount { + @IsString() + code: string +} + +class Item { + @IsString() + @IsOptional() + title?: string + + @IsNumber() + @IsOptional() + unit_price?: number + + @IsString() + @IsOptional() + variant_id?: string + + @IsNumber() + quantity: number + + @IsObject() + @IsOptional() + metadata?: object = {} +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.js b/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/draft-orders/create-line-item.js rename to packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts index 58297eafe6..e4945cd90c 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/create-line-item.ts @@ -1,14 +1,28 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultCartFields, defaultCartRelations, defaultFields } from "." - +import { IsInt, IsObject, IsOptional, IsString } from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { EntityManager } from "typeorm" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, + defaultAdminDraftOrdersFields, +} from "." +import { + CartService, + DraftOrderService, + LineItemService, +} from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /draft-orders/{id}/line-items * operationId: "PostDraftOrdersDraftOrderLineItems" * summary: "Create a Line Item for Draft Order" * description: "Creates a Line Item for the Draft Order" + * x-authenticated: true * requestBody: * content: * application/json: + * required: + * - quantity * schema: * properties: * variant_id: @@ -42,28 +56,24 @@ import { defaultCartFields, defaultCartRelations, defaultFields } from "." export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().optional(), - unit_price: Validator.number().optional(), - variant_id: Validator.string().optional(), - quantity: Validator.number().required(), - metadata: Validator.object().optional(), - }) + const validated = await validator( + AdminPostDraftOrdersDraftOrderLineItemsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const draftOrderService = req.scope.resolve("draftOrderService") - const cartService = req.scope.resolve("cartService") - const lineItemService = req.scope.resolve("lineItemService") - const entityManager = req.scope.resolve("manager") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const cartService: CartService = req.scope.resolve("cartService") + const lineItemService: LineItemService = req.scope.resolve("lineItemService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { const draftOrder = await draftOrderService .withTransaction(manager) - .retrieve(id, { select: defaultFields, relations: ["cart"] }) + .retrieve(id, { + select: defaultAdminDraftOrdersFields, + relations: ["cart"], + }) if (draftOrder.status === "completed") { throw new MedusaError( @@ -72,12 +82,12 @@ export default async (req, res) => { ) } - if (value.variant_id) { + if (validated.variant_id) { const line = await lineItemService.generate( - value.variant_id, + validated.variant_id, draftOrder.cart.region_id, - value.quantity, - { metadata: value.metadata, unit_price: value.unit_price } + validated.quantity, + { metadata: validated.metadata, unit_price: validated.unit_price } ) await cartService @@ -88,20 +98,41 @@ export default async (req, res) => { await lineItemService.withTransaction(manager).create({ cart_id: draftOrder.cart_id, has_shipping: true, - title: value.title || "Custom item", + title: validated.title, allow_discounts: false, - unit_price: value.unit_price || 0, - quantity: value.quantity, + unit_price: validated.unit_price || 0, + quantity: validated.quantity, }) } draftOrder.cart = await cartService .withTransaction(manager) .retrieve(draftOrder.cart_id, { - relations: defaultCartRelations, - select: defaultCartFields, + relations: defaultAdminDraftOrdersCartRelations, + select: defaultAdminDraftOrdersCartFields, }) res.status(200).json({ draft_order: draftOrder }) }) } + +export class AdminPostDraftOrdersDraftOrderLineItemsReq { + @IsString() + @IsOptional() + title?: string = "Custom item" + + @IsInt() + @IsOptional() + unit_price?: number + + @IsString() + @IsOptional() + variant_id?: string + + @IsInt() + quantity: number + + @IsObject() + @IsOptional() + metadata?: object = {} +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.js b/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts similarity index 83% rename from packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.js rename to packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts index 5342e4a2b1..27f8872f48 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/delete-draft-order.ts @@ -1,8 +1,10 @@ +import { DraftOrderService } from "../../../../services" /** * @oas [delete] /draft-orders/{id} * operationId: DeleteDraftOrdersDraftOrder * summary: Delete a Draft Order * description: "Deletes a Draft Order" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Draft Order. * tags: @@ -23,11 +25,11 @@ * deleted: * type: boolean */ - export default async (req, res) => { const { id } = req.params - const draftOrderService = req.scope.resolve("draftOrderService") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") await draftOrderService.delete(id) res.json({ diff --git a/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.js b/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts similarity index 63% rename from packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.js rename to packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts index ef36a7b8e0..1cddca5a27 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/delete-line-item.ts @@ -1,11 +1,18 @@ import { MedusaError } from "medusa-core-utils" -import { defaultCartFields, defaultCartRelations, defaultFields } from "." - +import { EntityManager } from "typeorm" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, + defaultAdminDraftOrdersFields, +} from "." +import { DraftOrder } from "../../../.." +import { CartService, DraftOrderService } from "../../../../services" /** * @oas [delete] /draft-orders/{id}/line-items/{line_id} * operationId: DeleteDraftOrdersDraftOrderLineItemsItem * summary: Delete a Line Item * description: "Removes a Line Item from a Draft Order." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Draft Order. * - (path) line_id=* {string} The id of the Draft Order. @@ -25,14 +32,15 @@ import { defaultCartFields, defaultCartRelations, defaultFields } from "." export default async (req, res) => { const { id, line_id } = req.params - const draftOrderService = req.scope.resolve("draftOrderService") - const cartService = req.scope.resolve("cartService") - const entityManager = req.scope.resolve("manager") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const cartService: CartService = req.scope.resolve("cartService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { - const draftOrder = await draftOrderService + const draftOrder: DraftOrder = await draftOrderService .withTransaction(manager) - .retrieve(id, { select: defaultFields }) + .retrieve(id, { select: defaultAdminDraftOrdersFields }) if (draftOrder.status === "completed") { throw new MedusaError( @@ -48,8 +56,8 @@ export default async (req, res) => { draftOrder.cart = await cartService .withTransaction(manager) .retrieve(draftOrder.cart_id, { - relations: defaultCartRelations, - select: defaultCartFields, + relations: defaultAdminDraftOrdersCartRelations, + select: defaultAdminDraftOrdersCartFields, }) res.status(200).json({ draft_order: draftOrder }) diff --git a/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.js b/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.js deleted file mode 100644 index 91ea75e966..0000000000 --- a/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.js +++ /dev/null @@ -1,45 +0,0 @@ -import { - defaultRelations, - defaultFields, - defaultCartRelations, - defaultCartFields, -} from "." - -/** - * @oas [get] /draft-orders/{id} - * operationId: "GetDraftOrdersDraftOrder" - * summary: "Retrieve a Draft Order" - * description: "Retrieves a Draft Order." - * parameters: - * - (path) id=* {string} The id of the Draft Order. - * tags: - * - Draft Order - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * draft_order: - * $ref: "#/components/schemas/draft-order" - */ - -export default async (req, res) => { - const { id } = req.params - - const draftOrderService = req.scope.resolve("draftOrderService") - const cartService = req.scope.resolve("cartService") - - const draftOrder = await draftOrderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - draftOrder.cart = await cartService.retrieve(draftOrder.cart_id, { - relations: defaultCartRelations, - select: defaultCartFields, - }) - - res.json({ draft_order: draftOrder }) -} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts b/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts new file mode 100644 index 0000000000..ab8667516d --- /dev/null +++ b/packages/medusa/src/api/routes/admin/draft-orders/get-draft-order.ts @@ -0,0 +1,49 @@ +import { + defaultAdminDraftOrdersRelations, + defaultAdminDraftOrdersFields, + defaultAdminDraftOrdersCartRelations, + defaultAdminDraftOrdersCartFields, +} from "." +import { DraftOrder } from "../../../.." +import { CartService, DraftOrderService } from "../../../../services" + +/** + * @oas [get] /draft-orders/{id} + * operationId: "GetDraftOrdersDraftOrder" + * summary: "Retrieve a Draft Order" + * description: "Retrieves a Draft Order." + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Draft Order. + * tags: + * - Draft Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * draft_order: + * $ref: "#/components/schemas/draft-order" + */ + +export default async (req, res) => { + const { id } = req.params + + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const cartService: CartService = req.scope.resolve("cartService") + + const draftOrder: DraftOrder = await draftOrderService.retrieve(id, { + select: defaultAdminDraftOrdersFields, + relations: defaultAdminDraftOrdersRelations, + }) + + draftOrder.cart = await cartService.retrieve(draftOrder.cart_id, { + relations: defaultAdminDraftOrdersCartRelations, + select: defaultAdminDraftOrdersCartFields, + }) + + res.json({ draft_order: draftOrder }) +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/index.js b/packages/medusa/src/api/routes/admin/draft-orders/index.ts similarity index 61% rename from packages/medusa/src/api/routes/admin/draft-orders/index.js rename to packages/medusa/src/api/routes/admin/draft-orders/index.ts index 34ca0872cb..fa720667c2 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/index.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/index.ts @@ -1,5 +1,7 @@ import { Router } from "express" +import { DraftOrder, Order } from "../../../.." import middlewares from "../../../middlewares" +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" const route = Router() @@ -44,9 +46,9 @@ export default (app) => { return app } -export const defaultRelations = ["order", "cart"] +export const defaultAdminDraftOrdersRelations = ["order", "cart"] -export const defaultCartRelations = [ +export const defaultAdminDraftOrdersCartRelations = [ "region", "items", "payment", @@ -60,7 +62,7 @@ export const defaultCartRelations = [ "discounts.rule", ] -export const defaultCartFields = [ +export const defaultAdminDraftOrdersCartFields = [ "subtotal", "tax_total", "shipping_total", @@ -69,7 +71,7 @@ export const defaultCartFields = [ "total", ] -export const defaultFields = [ +export const defaultAdminDraftOrdersFields = [ "id", "status", "display_id", @@ -82,7 +84,7 @@ export const defaultFields = [ "no_notification_order", ] -export const allowedFields = [ +export const allowedAdminDraftOrdersFields = [ "id", "status", "display_id", @@ -94,4 +96,28 @@ export const allowedFields = [ "no_notification_order", ] -export const allowedRelations = ["cart"] +export const allowedAdminDraftOrdersRelations = ["cart"] + +export type AdminPostDraftOrdersDraftOrderRegisterPaymentRes = { + order: Order +} + +export type AdminDraftOrdersRes = { + draft_order: DraftOrder +} + +export type AdminDraftOrdersDeleteRes = DeleteResponse + +export type AdminDraftOrdersListRes = PaginatedResponse & { + draft_orders: DraftOrder[] +} + +export * from "./create-draft-order" +export * from "./create-line-item" +export * from "./delete-draft-order" +export * from "./delete-line-item" +export * from "./get-draft-order" +export * from "./list-draft-orders" +export * from "./register-payment" +export * from "./update-draft-order" +export * from "./update-line-item" diff --git a/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.js b/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.js deleted file mode 100644 index 79727627e7..0000000000 --- a/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.js +++ /dev/null @@ -1,47 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /draft-orders - * operationId: "GetDraftOrders" - * summary: "List Draft Orders" - * description: "Retrieves an list of Draft Orders" - * tags: - * - Draft Order - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * draft_order: - * $ref: "#/components/schemas/draft-order" - */ - -export default async (req, res) => { - const draftOrderService = req.scope.resolve("draftOrderService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - const listConfig = { - select: defaultFields, - relations: defaultRelations, - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const [draftOrders, count] = await draftOrderService.listAndCount( - selector, - listConfig - ) - - res.json({ draft_orders: draftOrders, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts b/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts new file mode 100644 index 0000000000..808d5ed8d2 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/draft-orders/list-draft-orders.ts @@ -0,0 +1,76 @@ +import { + defaultAdminDraftOrdersFields, + defaultAdminDraftOrdersRelations, +} from "." +import { DraftOrderService } from "../../../../services" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { validator } from "../../../../utils/validator" +import { Type } from "class-transformer" +import { DraftOrderListSelector } from "../../../../types/draft-orders" +/** + * @oas [get] /draft-orders + * operationId: "GetDraftOrders" + * summary: "List Draft Orders" + * description: "Retrieves an list of Draft Orders" + * x-authenticated: true + * tags: + * - Draft Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * draft_order: + * $ref: "#/components/schemas/draft-order" + */ + +export default async (req, res) => { + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + + const validated = await validator(AdminGetDraftOrdersParams, req.query) + + const selector: DraftOrderListSelector = {} + + if (validated.q) { + selector.q = validated.q + } + + const listConfig = { + select: defaultAdminDraftOrdersFields, + relations: defaultAdminDraftOrdersRelations, + skip: validated.offset, + take: validated.limit, + order: { created_at: "DESC" }, + } + + const [draftOrders, count] = await draftOrderService.listAndCount( + selector, + listConfig + ) + + res.json({ + draft_orders: draftOrders, + count, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetDraftOrdersParams { + @IsString() + @IsOptional() + q?: string + + @IsNumber() + @IsOptional() + @Type(() => Number) + limit?: number = 50 + + @IsNumber() + @IsOptional() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/draft-orders/register-payment.js rename to packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts index 35d53a407c..e6b801353f 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/register-payment.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/register-payment.ts @@ -1,6 +1,13 @@ +import { EntityManager } from "typeorm" import { - defaultFields as defaultOrderFields, - defaultRelations as defaultOrderRelations, + CartService, + DraftOrderService, + OrderService, + PaymentProviderService, +} from "../../../../services" +import { + defaultAdminOrdersFields as defaultOrderFields, + defaultAdminOrdersRelations as defaultOrderRelations, } from "../orders/index" /** @@ -8,6 +15,7 @@ import { * summary: "Registers a payment for a Draft Order" * operationId: "PostDraftOrdersDraftOrderRegisterPayment" * description: "Registers a payment for a Draft Order." + * x-authenticated: true * parameters: * - (path) id=* {String} The Draft Order id. * tags: @@ -26,11 +34,14 @@ import { export default async (req, res) => { const { id } = req.params - const draftOrderService = req.scope.resolve("draftOrderService") - const paymentProviderService = req.scope.resolve("paymentProviderService") - const orderService = req.scope.resolve("orderService") - const cartService = req.scope.resolve("cartService") - const entityManager = req.scope.resolve("manager") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const paymentProviderService: PaymentProviderService = req.scope.resolve( + "paymentProviderService" + ) + const orderService: OrderService = req.scope.resolve("orderService") + const cartService: CartService = req.scope.resolve("cartService") + const entityManager: EntityManager = req.scope.resolve("manager") let result await entityManager.transaction(async (manager) => { diff --git a/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.js b/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.js rename to packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts index cc34ad0db3..bcd6a75477 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/update-draft-order.ts @@ -1,11 +1,26 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultCartFields, defaultCartRelations } from "." - +import { MedusaError } from "medusa-core-utils" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, +} from "." +import { + IsArray, + IsBoolean, + IsEmail, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { CartService, DraftOrderService } from "../../../../services" +import { Type } from "class-transformer" +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" /** * @oas [post] /admin/draft-orders/{id} * operationId: PostDraftOrdersDraftOrder * summary: Update a Draft Order" * description: "Updates a Draft Order." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Draft Order. * requestBody: @@ -57,28 +72,11 @@ import { defaultCartFields, defaultCartRelations } from "." export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - region_id: Validator.string().optional(), - country_code: Validator.string().optional(), - email: Validator.string().email().optional(), - billing_address: Validator.object().optional(), - shipping_address: Validator.object().optional(), - discounts: Validator.array() - .items({ - code: Validator.string(), - }) - .optional(), - customer_id: Validator.string().optional(), - no_notification_order: Validator.boolean().optional(), - }) + const validated = await validator(AdminPostDraftOrdersDraftOrderReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const draftOrderService = req.scope.resolve("draftOrderService") - const cartService = req.scope.resolve("cartService") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const cartService: CartService = req.scope.resolve("cartService") const draftOrder = await draftOrderService.retrieve(id) @@ -89,19 +87,60 @@ export default async (req, res) => { ) } - if ("no_notification_order" in value) { + if (validated.no_notification_order !== undefined) { await draftOrderService.update(draftOrder.id, { - no_notification_order: value.no_notification_order, + no_notification_order: validated.no_notification_order, }) - delete value.no_notification_order + delete validated.no_notification_order } - await cartService.update(draftOrder.cart_id, value) + await cartService.update(draftOrder.cart_id, validated) draftOrder.cart = await cartService.retrieve(draftOrder.cart_id, { - relations: defaultCartRelations, - select: defaultCartFields, + relations: defaultAdminDraftOrdersCartRelations, + select: defaultAdminDraftOrdersCartFields, }) res.status(200).json({ draft_order: draftOrder }) } + +export class AdminPostDraftOrdersDraftOrderReq { + @IsString() + @IsOptional() + region_id?: string + + @IsString() + @IsOptional() + country_code?: string + + @IsEmail() + @IsOptional() + email?: string + + @IsOptional() + @Type(() => AddressPayload) + billing_address?: AddressPayload + + @IsOptional() + @Type(() => AddressPayload) + shipping_address?: AddressPayload + + @IsArray() + @IsOptional() + @Type(() => Discount) + @ValidateNested({ each: true }) + discounts?: Discount[] + + @IsString() + @IsOptional() + customer_id?: string + + @IsBoolean() + @IsOptional() + no_notification_order?: boolean +} + +class Discount { + @IsString() + code: string +} diff --git a/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.js b/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts similarity index 60% rename from packages/medusa/src/api/routes/admin/draft-orders/update-line-item.js rename to packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts index 7a8aeec873..e73be0d441 100644 --- a/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.js +++ b/packages/medusa/src/api/routes/admin/draft-orders/update-line-item.ts @@ -1,11 +1,20 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultCartFields, defaultCartRelations, defaultFields } from "." - +import { IsInt, IsObject, IsOptional, IsString } from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { EntityManager } from "typeorm" +import { + defaultAdminDraftOrdersCartFields, + defaultAdminDraftOrdersCartRelations, + defaultAdminDraftOrdersFields, +} from "." +import { DraftOrder } from "../../../.." +import { CartService, DraftOrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /draft-orders/{id}/line-items/{line_id} * operationId: "PostDraftOrdersDraftOrderLineItemsItem" * summary: "Update a Line Item for a Draft Order" * description: "Updates a Line Item for a Draft Order" + * x-authenticated: true * requestBody: * content: * application/json: @@ -39,27 +48,21 @@ import { defaultCartFields, defaultCartRelations, defaultFields } from "." export default async (req, res) => { const { id, line_id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().optional(), - unit_price: Validator.number().optional(), - quantity: Validator.number().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator( + AdminPostDraftOrdersDraftOrderLineItemsItemReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const draftOrderService = req.scope.resolve("draftOrderService") - const cartService = req.scope.resolve("cartService") - const entityManager = req.scope.resolve("manager") + const draftOrderService: DraftOrderService = + req.scope.resolve("draftOrderService") + const cartService: CartService = req.scope.resolve("cartService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { - const draftOrder = await draftOrderService + const draftOrder: DraftOrder = await draftOrderService .withTransaction(manager) .retrieve(id, { - select: defaultFields, + select: defaultAdminDraftOrdersFields, relations: ["cart", "cart.items"], }) @@ -70,7 +73,7 @@ export default async (req, res) => { ) } - if (value.quantity === 0) { + if (validated.quantity === 0) { await cartService .withTransaction(manager) .removeLineItem(draftOrder.cart.id, line_id) @@ -84,8 +87,8 @@ export default async (req, res) => { ) } - const lineItemUpdate = { - ...value, + const lineItemUpdate: LineItemUpdate = { + ...validated, region_id: draftOrder.cart.region_id, } @@ -101,10 +104,37 @@ export default async (req, res) => { draftOrder.cart = await cartService .withTransaction(manager) .retrieve(draftOrder.cart_id, { - relations: defaultCartRelations, - select: defaultCartFields, + relations: defaultAdminDraftOrdersCartRelations, + select: defaultAdminDraftOrdersCartFields, }) res.status(200).json({ draft_order: draftOrder }) }) } + +class LineItemUpdate { + title?: string + unit_price?: number + quantity?: number + metadata?: object = {} + region_id?: string + variant_id?: string +} + +export class AdminPostDraftOrdersDraftOrderLineItemsItemReq { + @IsString() + @IsOptional() + title?: string + + @IsInt() + @IsOptional() + unit_price?: number + + @IsInt() + @IsOptional() + quantity?: number + + @IsObject() + @IsOptional() + metadata?: object = {} +} diff --git a/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.js b/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts similarity index 63% rename from packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.js rename to packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts index 21d64f9347..6676b32e27 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.js +++ b/packages/medusa/src/api/routes/admin/gift-cards/create-gift-card.ts @@ -1,11 +1,15 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { IsBoolean, IsDate, IsInt, IsOptional, IsString } from "class-validator" +import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "." +import { GiftCardService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /gift-cards * operationId: "PostGiftCards" * summary: "Create a Gift Card" * description: "Creates a Gift Card that can redeemed by its unique code. The Gift Card is only valid within 1 region." + * x-authenticated: true * requestBody: * content: * application/json: @@ -42,30 +46,41 @@ import { defaultFields, defaultRelations } from "./" * $ref: "#/components/schemas/gift_card" */ export default async (req, res) => { - const schema = Validator.object().keys({ - value: Validator.number().integer().optional(), - ends_at: Validator.date().optional(), - is_disabled: Validator.boolean().optional(), - region_id: Validator.string().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostGiftCardsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const giftCardService = req.scope.resolve("giftCardService") + const giftCardService: GiftCardService = req.scope.resolve("giftCardService") const newly = await giftCardService.create({ - ...value, - balance: value.value, + ...validated, + balance: validated.value, }) const giftCard = await giftCardService.retrieve(newly.id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminGiftCardFields, + relations: defaultAdminGiftCardRelations, }) res.status(200).json({ gift_card: giftCard }) } + +export class AdminPostGiftCardsReq { + @IsOptional() + @IsInt() + value?: number + + @IsOptional() + @IsDate() + @Type(() => Date) + ends_at?: Date + + @IsOptional() + @IsBoolean() + is_disabled?: boolean + + @IsOptional() + @IsString() + region_id?: string + + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.js b/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts similarity index 97% rename from packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.js rename to packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts index df36f51237..167b239317 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.js +++ b/packages/medusa/src/api/routes/admin/gift-cards/delete-gift-card.ts @@ -3,6 +3,7 @@ * operationId: "DeleteGiftCardsGiftCard" * summary: "Delete a Gift Card" * description: "Deletes a Gift Card" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Gift Card to delete. * tags: diff --git a/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.js b/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts similarity index 78% rename from packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.js rename to packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts index c357b4d7cc..8cd2cc96c4 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.js +++ b/packages/medusa/src/api/routes/admin/gift-cards/get-gift-card.ts @@ -1,10 +1,11 @@ -import { defaultFields, defaultRelations } from "./" +import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "./" /** * @oas [get] /gift-cards/{id} * operationId: "GetGiftCardsGiftCard" * summary: "Retrieve a Gift Card" * description: "Retrieves a Gift Card." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Gift Card. * tags: @@ -24,8 +25,8 @@ export default async (req, res) => { const giftCardService = req.scope.resolve("giftCardService") const giftCard = await giftCardService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminGiftCardFields, + relations: defaultAdminGiftCardRelations, }) res.status(200).json({ gift_card: giftCard }) diff --git a/packages/medusa/src/api/routes/admin/gift-cards/index.js b/packages/medusa/src/api/routes/admin/gift-cards/index.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/gift-cards/index.js rename to packages/medusa/src/api/routes/admin/gift-cards/index.ts index d658ad1727..53a4048a14 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/index.js +++ b/packages/medusa/src/api/routes/admin/gift-cards/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" +import "reflect-metadata" +import { GiftCard } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -19,7 +22,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultAdminGiftCardFields = [ "id", "code", "value", @@ -33,9 +36,9 @@ export const defaultFields = [ "metadata", ] -export const defaultRelations = ["region", "order"] +export const defaultAdminGiftCardRelations = ["region", "order"] -export const allowedFields = [ +export const allowedAdminGiftCardFields = [ "id", "code", "value", @@ -49,4 +52,18 @@ export const allowedFields = [ "metadata", ] -export const allowedRelations = ["region"] +export const allowedAdminGiftCardRelations = ["region"] + +export type AdminGiftCardsRes = { + gift_card: GiftCard +} + +export type AdminGiftCardsDeleteRes = DeleteResponse + +export type AdminGiftCardsListRes = PaginatedResponse & { + gift_cards: GiftCard[] +} + +export * from "./create-gift-card" +export * from "./list-gift-cards" +export * from "./update-gift-card" diff --git a/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.js b/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.js deleted file mode 100644 index 5ae9b63f84..0000000000 --- a/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.js +++ /dev/null @@ -1,43 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /gift-cards - * operationId: "GetGiftCards" - * summary: "List Gift Cards" - * description: "Retrieves a list of Gift Cards." - * tags: - * - Gift Card - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * gift_cards: - * type: array - * items: - * $ref: "#/components/schemas/gift_card" - */ -export default async (req, res) => { - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - const giftCardService = req.scope.resolve("giftCardService") - - const giftCards = await giftCardService.list(selector, { - select: defaultFields, - relations: defaultRelations, - order: { created_at: "DESC" }, - limit: limit, - skip: offset, - }) - - res.status(200).json({ gift_cards: giftCards }) -} diff --git a/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts b/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts new file mode 100644 index 0000000000..45ba1a5ec2 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/gift-cards/list-gift-cards.ts @@ -0,0 +1,68 @@ +import { Type } from "class-transformer" +import { IsInt, IsOptional, IsString } from "class-validator" +import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "." +import { GiftCardService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /gift-cards + * operationId: "GetGiftCards" + * summary: "List Gift Cards" + * description: "Retrieves a list of Gift Cards." + * x-authenticated: true + * tags: + * - Gift Card + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * gift_cards: + * type: array + * items: + * $ref: "#/components/schemas/gift_card" + */ +export default async (req, res) => { + const validated = await validator(AdminGetGiftCardsParams, req.query) + + const selector = {} + + if (validated.q && typeof validated.q !== "undefined") { + selector["q"] = validated.q + } + + const giftCardService: GiftCardService = req.scope.resolve("giftCardService") + + const giftCards = await giftCardService.list(selector, { + select: defaultAdminGiftCardFields, + relations: defaultAdminGiftCardRelations, + order: { created_at: "DESC" }, + limit: validated.limit, + skip: validated.offset, + }) + + res.status(200).json({ + gift_cards: giftCards, + count: giftCards.length, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetGiftCardsParams { + @IsOptional() + @IsInt() + @Type(() => Number) + limit = 50 + + @IsOptional() + @IsInt() + @Type(() => Number) + offset = 0 + + @IsOptional() + @IsString() + q?: string +} diff --git a/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.js b/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts similarity index 64% rename from packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.js rename to packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts index d453b90552..f42540576a 100644 --- a/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.js +++ b/packages/medusa/src/api/routes/admin/gift-cards/update-gift-card.ts @@ -1,11 +1,15 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { IsBoolean, IsDate, IsInt, IsOptional, IsString } from "class-validator" +import { defaultAdminGiftCardFields, defaultAdminGiftCardRelations } from "." +import { GiftCardService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /gift-cards/{id} * operationId: "PostGiftCardsGiftCard" * summary: "Create a Gift Card" * description: "Creates a Gift Card that can redeemed by its unique code. The Gift Card is only valid within 1 region." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Gift Card. * requestBody: @@ -46,27 +50,38 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - balance: Validator.number().precision(0).optional(), - ends_at: Validator.date().optional(), - is_disabled: Validator.boolean().optional(), - region_id: Validator.string().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostGiftCardsGiftCardReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const giftCardService: GiftCardService = req.scope.resolve("giftCardService") - const giftCardService = req.scope.resolve("giftCardService") - - await giftCardService.update(id, value) + await giftCardService.update(id, validated) const giftCard = await giftCardService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminGiftCardFields, + relations: defaultAdminGiftCardRelations, }) res.status(200).json({ gift_card: giftCard }) } + +export class AdminPostGiftCardsGiftCardReq { + @IsOptional() + @IsInt() + balance?: number + + @IsOptional() + @IsBoolean() + is_disabled?: boolean + + @IsOptional() + @IsDate() + @Type(() => Date) + ends_at?: Date + + @IsOptional() + @IsString() + region_id?: string + + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/notes/create-note.js b/packages/medusa/src/api/routes/admin/notes/create-note.ts similarity index 60% rename from packages/medusa/src/api/routes/admin/notes/create-note.js rename to packages/medusa/src/api/routes/admin/notes/create-note.ts index 4fddaef1c3..16a88b3bb4 100644 --- a/packages/medusa/src/api/routes/admin/notes/create-note.js +++ b/packages/medusa/src/api/routes/admin/notes/create-note.ts @@ -1,10 +1,13 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { IsNotEmpty, IsString } from "class-validator" +import NoteService from "../../../../services/note" +import { validator } from "../../../../utils/validator" /** * @oas [post] /notes * operationId: "PostNotes" * summary: "Creates a Note" * description: "Creates a Note which can be associated with any resource as required." + * x-authenticated: true * requestBody: * content: * application/json: @@ -33,27 +36,32 @@ import { MedusaError, Validator } from "medusa-core-utils" * */ export default async (req, res) => { - const schema = Validator.object().keys({ - resource_id: Validator.string(), - resource_type: Validator.string(), - value: Validator.string(), - }) + const validated = await validator(AdminPostNotesReq, req.body) - const userId = req.user.id || req.user.userId + const userId: string = req.user.id || req.user.userId - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const noteService = req.scope.resolve("noteService") + const noteService: NoteService = req.scope.resolve("noteService") const result = await noteService.create({ - resource_id: value.resource_id, - resource_type: value.resource_type, - value: value.value, + resource_id: validated.resource_id, + resource_type: validated.resource_type, + value: validated.value, author_id: userId, }) res.status(200).json({ note: result }) } + +export class AdminPostNotesReq { + @IsString() + @IsNotEmpty() + resource_id: string + + @IsString() + @IsNotEmpty() + resource_type: string + + @IsString() + @IsNotEmpty() + value: string +} diff --git a/packages/medusa/src/api/routes/admin/notes/delete-note.js b/packages/medusa/src/api/routes/admin/notes/delete-note.ts similarity index 76% rename from packages/medusa/src/api/routes/admin/notes/delete-note.js rename to packages/medusa/src/api/routes/admin/notes/delete-note.ts index 8cc8f99078..263d3a184c 100644 --- a/packages/medusa/src/api/routes/admin/notes/delete-note.js +++ b/packages/medusa/src/api/routes/admin/notes/delete-note.ts @@ -1,8 +1,11 @@ +import NoteService from "../../../../services/note" + /** * @oas [delete] /notes/{id} * operationId: "DeleteNotesNote" * summary: "Deletes a Note" * description: "Deletes a Note." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Note to delete. * tags: @@ -24,8 +27,8 @@ export default async (req, res) => { const { id } = req.params - const noteService = req.scope.resolve("noteService") + const noteService: NoteService = req.scope.resolve("noteService") await noteService.delete(id) - res.status(200).json({ id, deleted: true }) + res.status(200).json({ id, object: "note", deleted: true }) } diff --git a/packages/medusa/src/api/routes/admin/notes/get-note.js b/packages/medusa/src/api/routes/admin/notes/get-note.ts similarity index 76% rename from packages/medusa/src/api/routes/admin/notes/get-note.js rename to packages/medusa/src/api/routes/admin/notes/get-note.ts index 555634fc1b..8b4c302b9f 100644 --- a/packages/medusa/src/api/routes/admin/notes/get-note.js +++ b/packages/medusa/src/api/routes/admin/notes/get-note.ts @@ -1,8 +1,11 @@ +import NoteService from "../../../../services/note" + /** * @oas [get] /notes/{id} - * operationId: "GetNoteNote" + * operationId: "GetNotesNote" * summary: "Get Note" * description: "Retrieves a single note using its id" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the note to retrieve. * tags: @@ -20,7 +23,7 @@ export default async (req, res) => { const { id } = req.params - const noteService = req.scope.resolve("noteService") + const noteService: NoteService = req.scope.resolve("noteService") const note = await noteService.retrieve(id, { relations: ["author"] }) res.status(200).json({ note }) diff --git a/packages/medusa/src/api/routes/admin/notes/index.js b/packages/medusa/src/api/routes/admin/notes/index.ts similarity index 54% rename from packages/medusa/src/api/routes/admin/notes/index.js rename to packages/medusa/src/api/routes/admin/notes/index.ts index 9c14d0eac2..7bd7de88a0 100644 --- a/packages/medusa/src/api/routes/admin/notes/index.js +++ b/packages/medusa/src/api/routes/admin/notes/index.ts @@ -1,5 +1,8 @@ import { Router } from "express" +import { Note } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" +import "reflect-metadata" const route = Router() @@ -18,3 +21,18 @@ export default (app) => { return app } + +export type AdminNotesRes = { + note: Note +} + +export type AdminNotesDeleteRes = DeleteResponse + +export type AdminNotesListRes = PaginatedResponse & { + notes: Note[] +} +export * from "./create-note" +export * from "./delete-note" +export * from "./get-note" +export * from "./list-notes" +export * from "./update-note" diff --git a/packages/medusa/src/api/routes/admin/notes/list-notes.js b/packages/medusa/src/api/routes/admin/notes/list-notes.js deleted file mode 100644 index 7c709699a7..0000000000 --- a/packages/medusa/src/api/routes/admin/notes/list-notes.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @oas [get] /notes - * operationId: "GetNotes" - * summary: "List Notes" - * description: "Retrieves a list of notes" - * tags: - * - Note - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * notes: - * type: array - * items: - * $ref: "#/components/schemas/note" - */ -export default async (req, res) => { - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("resource_id" in req.query) { - selector.resource_id = req.query.resource_id - } - - const noteService = req.scope.resolve("noteService") - const notes = await noteService.list(selector, { - take: limit, - skip: offset, - relations: ["author"], - }) - - res.status(200).json({ notes }) -} diff --git a/packages/medusa/src/api/routes/admin/notes/list-notes.ts b/packages/medusa/src/api/routes/admin/notes/list-notes.ts new file mode 100644 index 0000000000..89d84e71f2 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/notes/list-notes.ts @@ -0,0 +1,68 @@ +import { IsNumber, IsOptional, IsString } from "class-validator" +import NoteService from "../../../../services/note" +import { validator } from "../../../../utils/validator" +import { selector } from "../../../../types/note" +import { Type } from "class-transformer" +/** + * @oas [get] /notes + * operationId: "GetNotes" + * summary: "List Notes" + * x-authenticated: true + * description: "Retrieves a list of notes" + * * parameters: + * - (path) limit= {number} The number of notes to get + * - (path) offset= {number} The offset at which to get notes + * - (path) resource_id= {string} The id which the notes belongs to + * tags: + * - Note + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * notes: + * type: array + * items: + * $ref: "#/components/schemas/note" + */ +export default async (req, res) => { + const validated = await validator(AdminGetNotesParams, req.query) + + const selector: selector = {} + + if (validated.resource_id) { + selector.resource_id = validated.resource_id + } + + const noteService: NoteService = req.scope.resolve("noteService") + const notes = await noteService.list(selector, { + take: validated.limit, + skip: validated.offset, + relations: ["author"], + }) + + res.status(200).json({ + notes, + count: notes.length, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetNotesParams { + @IsString() + @IsOptional() + resource_id?: string + + @IsNumber() + @IsOptional() + @Type(() => Number) + limit = 50 + + @IsNumber() + @IsOptional() + @Type(() => Number) + offset = 0 +} diff --git a/packages/medusa/src/api/routes/admin/notes/update-note.js b/packages/medusa/src/api/routes/admin/notes/update-note.ts similarity index 58% rename from packages/medusa/src/api/routes/admin/notes/update-note.js rename to packages/medusa/src/api/routes/admin/notes/update-note.ts index 6eca56aee9..66de088e5d 100644 --- a/packages/medusa/src/api/routes/admin/notes/update-note.js +++ b/packages/medusa/src/api/routes/admin/notes/update-note.ts @@ -1,9 +1,12 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { IsString } from "class-validator" +import NoteService from "../../../../services/note" +import { validator } from "../../../../utils/validator" /** * @oas [post] /notes/{id} * operationId: "PostNotesNote" * summary: "Updates a Note" + * x-authenticated: true * description: "Updates a Note associated with some resource" * parameters: * - (path) id=* {string} The id of the Note to update @@ -11,6 +14,8 @@ import { MedusaError, Validator } from "medusa-core-utils" * content: * application/json: * schema: + * required: + * - value * properties: * value: * type: string @@ -31,17 +36,15 @@ import { MedusaError, Validator } from "medusa-core-utils" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - value: Validator.string(), - }) + const validated = await validator(AdminPostNotesNoteReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const noteService: NoteService = req.scope.resolve("noteService") + const note = await noteService.update(id, validated.value) - const noteService = req.scope.resolve("noteService") - const result = await noteService.update(id, value.value) - - res.status(200).json({ note: result }) + res.status(200).json({ note }) +} + +export class AdminPostNotesNoteReq { + @IsString() + value: string } diff --git a/packages/medusa/src/api/routes/admin/notifications/index.js b/packages/medusa/src/api/routes/admin/notifications/index.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/notifications/index.js rename to packages/medusa/src/api/routes/admin/notifications/index.ts index b6549833f4..91ae008031 100644 --- a/packages/medusa/src/api/routes/admin/notifications/index.js +++ b/packages/medusa/src/api/routes/admin/notifications/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import { Notification } from "./../../../../" +import { PaginatedResponse } from "./../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -22,10 +24,10 @@ export default (app) => { return app } -export const defaultRelations = ["resends"] -export const allowedRelations = ["resends"] +export const defaultAdminNotificationsRelations = ["resends"] +export const allowedAdminNotificationsRelations = ["resends"] -export const defaultFields = [ +export const defaultAdminNotificationsFields = [ "id", "resource_type", "resource_id", @@ -36,7 +38,7 @@ export const defaultFields = [ "updated_at", ] -export const allowedFields = [ +export const allowedAdminNotificationsFields = [ "id", "resource_type", "resource_id", @@ -46,3 +48,11 @@ export const allowedFields = [ "created_at", "updated_at", ] + +export type AdminNotificationsListRes = { + notifications: Notification[] +} + +export type AdminNotificationsRes = PaginatedResponse & { + notification: Notification +} diff --git a/packages/medusa/src/api/routes/admin/notifications/list-notifications.js b/packages/medusa/src/api/routes/admin/notifications/list-notifications.js deleted file mode 100644 index 8b9799656a..0000000000 --- a/packages/medusa/src/api/routes/admin/notifications/list-notifications.js +++ /dev/null @@ -1,79 +0,0 @@ -import _ from "lodash" -import { defaultRelations, defaultFields } from "./" - -/** - * @oas [get] /notifications - * operationId: "GetNotifications" - * summary: "List Notifications" - * description: "Retrieves a list of Notifications." - * tags: - * - Notification - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * notifications: - * type: array - * items: - * $ref: "#/components/schemas/notification" - */ -export default async (req, res) => { - const notificationService = req.scope.resolve("notificationService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - let includeFields = [] - if ("fields" in req.query) { - includeFields = req.query.fields.split(",") - } - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - } - - if ("event_name" in req.query) { - const values = req.query.event_name.split(",") - selector.event_name = values.length > 1 ? values : values[0] - } - - if ("resource_type" in req.query) { - const values = req.query.resource_type.split(",") - selector.resource_type = values.length > 1 ? values : values[0] - } - - if ("resource_id" in req.query) { - const values = req.query.resource_id.split(",") - selector.resource_id = values.length > 1 ? values : values[0] - } - - if ("to" in req.query) { - const values = req.query.to.split(",") - selector.to = values.length > 1 ? values : values[0] - } - - if (!("include_resends" in req.query)) { - selector.parent_id = null - } - - const listConfig = { - select: includeFields.length ? includeFields : defaultFields, - relations: expandFields.length ? expandFields : defaultRelations, - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const notifications = await notificationService.list(selector, listConfig) - - const fields = [...listConfig.select, ...listConfig.relations] - const data = notifications.map((o) => _.pick(o, fields)) - - res.json({ notifications: data, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts b/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts new file mode 100644 index 0000000000..4752a88970 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/notifications/list-notifications.ts @@ -0,0 +1,151 @@ +import { Type } from "class-transformer" +import { IsBooleanString, IsInt, IsOptional, IsString } from "class-validator" +import { pick } from "lodash" +import { NotificationService } from "../../../../services" +import { validator } from "../../../../utils/validator" +import { + defaultAdminNotificationsFields, + defaultAdminNotificationsRelations, +} from "./" + +/** + * @oas [get] /notifications + * operationId: "GetNotifications" + * summary: "List Notifications" + * description: "Retrieves a list of Notifications." + * x-authenticated: true + * parameters: + * - (query) offset=0 {integer} The number of notifications to skip before starting to collect the notifications set + * - (query) limit=50 {integer} The number of notifications to return + * - (query) fields {string} The fields to include in the result set + * - (query) expand {string} The fields to populate + * - (query) event_name {string} + * - (query) resource_type {string} + * - (query) resource_id {string} + * - (query) to {string} + * - (query) include_resends {boolean} Whether the result set should include resent notifications or not + * tags: + * - Notification + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * notifications: + * type: array + * items: + * $ref: "#/components/schemas/notification" + */ +export default async (req, res) => { + const notificationService: NotificationService = req.scope.resolve( + "notificationService" + ) + const { + limit, + offset, + fields, + expand, + event_name, + resource_id, + resource_type, + to, + include_resends, + } = await validator(AdminGetNotificationsParams, req.query) + + const selector: any = {} + + let includeFields: string[] = [] + if (fields) { + includeFields = fields.split(",") + } + + let expandFields: string[] = [] + if (expand) { + expandFields = expand.split(",") + } + + if (event_name) { + const values = event_name.split(",") + selector.event_name = values.length > 1 ? values : values[0] + } + + if (resource_type) { + const values = resource_type.split(",") + selector.resource_type = values.length > 1 ? values : values[0] + } + + if (resource_id) { + const values = resource_id.split(",") + selector.resource_id = values.length > 1 ? values : values[0] + } + + if (to) { + const values = to.split(",") + selector.to = values.length > 1 ? values : values[0] + } + + if (!include_resends || include_resends === "false") { + selector.parent_id = null + } + + const listConfig = { + select: includeFields.length + ? includeFields + : defaultAdminNotificationsFields, + relations: expandFields.length + ? expandFields + : defaultAdminNotificationsRelations, + skip: offset, + take: limit, + order: { created_at: "DESC" }, + } + + const notifications = await notificationService.list(selector, listConfig) + + const resultFields = [...listConfig.select, ...listConfig.relations] + const data = notifications.map((o) => pick(o, resultFields)) + + res.json({ notifications: data }) +} + +export class AdminGetNotificationsParams { + @IsOptional() + @IsInt() + @Type(() => Number) + limit?: number = 50 + + @IsOptional() + @IsInt() + @Type(() => Number) + offset?: number = 0 + + @IsOptional() + @IsString() + fields?: string + + @IsOptional() + @IsString() + expand?: string + + @IsOptional() + @IsString() + event_name?: string + + @IsOptional() + @IsString() + resource_type?: string + + @IsOptional() + @IsString() + resource_id?: string + + @IsOptional() + @IsString() + to?: string + + @IsOptional() + @IsBooleanString() + include_resends?: string +} diff --git a/packages/medusa/src/api/routes/admin/notifications/resend-notification.js b/packages/medusa/src/api/routes/admin/notifications/resend-notification.js deleted file mode 100644 index a701ae5725..0000000000 --- a/packages/medusa/src/api/routes/admin/notifications/resend-notification.js +++ /dev/null @@ -1,51 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /notifications/{id}/resend - * operationId: "PostNotificationsNotificationResend" - * summary: "Resend Notification" - * description: "Resends a previously sent notifications, with the same data but optionally to a different address" - * parameters: - * - (path) id=* {string} The id of the Notification - * tags: - * - Notification - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * notification: - * $ref: "#/components/schemas/notification" - */ -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - to: Validator.string().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const notificationService = req.scope.resolve("notificationService") - - const config = {} - - if (value.to) { - config.to = value.to - } - - await notificationService.resend(id, config) - - const notification = await notificationService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.json({ notification }) -} diff --git a/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts b/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts new file mode 100644 index 0000000000..5396ac0d74 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/notifications/resend-notification.ts @@ -0,0 +1,70 @@ +import { IsString } from "class-validator" +import { IsOptional } from "class-validator" +import { + defaultAdminNotificationsFields, + defaultAdminNotificationsRelations, +} from "." +import { validator } from "../../../../utils/validator" +import { NotificationService } from "../../../../services" + +/** + * @oas [post] /notifications/{id}/resend + * operationId: "PostNotificationsNotificationResend" + * summary: "Resend Notification" + * description: "Resends a previously sent notifications, with the same data but optionally to a different address" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Notification + * requestBody: + * content: + * application/json: + * schema: + * properties: + * to: + * description: "The address or user identifier that the Notification was sent to" + * type: string + * tags: + * - Notification + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * notification: + * $ref: "#/components/schemas/notification" + */ +export default async (req, res) => { + const { id } = req.params + + const validatedBody = await validator( + AdminPostNotificationsNotificationResendReq, + req.body + ) + + const notificationService: NotificationService = req.scope.resolve( + "notificationService" + ) + + const config: any = {} + + if (validatedBody.to) { + config.to = validatedBody.to + } + + await notificationService.resend(id, config) + + const notification = await notificationService.retrieve(id, { + select: defaultAdminNotificationsFields, + relations: defaultAdminNotificationsRelations, + }) + + res.json({ notification }) +} + +export class AdminPostNotificationsNotificationResendReq { + @IsOptional() + @IsString() + to?: string +} diff --git a/packages/medusa/src/api/routes/admin/orders/add-shipping-method.js b/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/orders/add-shipping-method.js rename to packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts index 8f5091ab33..4258962927 100644 --- a/packages/medusa/src/api/routes/admin/orders/add-shipping-method.js +++ b/packages/medusa/src/api/routes/admin/orders/add-shipping-method.ts @@ -1,11 +1,20 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { + IsInt, + IsNotEmpty, + IsObject, + IsOptional, + IsString, +} from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/shipping-methods * operationId: "PostOrdersOrderShippingMethods" * summary: "Add a Shipping Method" * description: "Adds a Shipping Method to an Order. If another Shipping Method exists with the same Shipping Profile, the previous Shipping Method will be replaced." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (body) price=* {integer} The price (excluding VAT) that should be charged for the Shipping Method @@ -26,27 +35,40 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - price: Validator.number().integer().integer().allow(0).required(), - option_id: Validator.string().required(), - data: Validator.object().optional().default({}), - }) + const validated = await validator( + AdminPostOrdersOrderShippingMethodsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const orderService: OrderService = req.scope.resolve("orderService") - const orderService = req.scope.resolve("orderService") - - await orderService.addShippingMethod(id, value.option_id, value.data, { - price: value.price, - }) + await orderService.addShippingMethod( + id, + validated.option_id, + validated.data, + { + price: validated.price, + } + ) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) } + +export class AdminPostOrdersOrderShippingMethodsReq { + @IsInt() + @IsNotEmpty() + price: number + + @IsString() + @IsNotEmpty() + option_id: string + + @IsObject() + @IsOptional() + data?: object = {} +} diff --git a/packages/medusa/src/api/routes/admin/orders/archive-order.js b/packages/medusa/src/api/routes/admin/orders/archive-order.js deleted file mode 100644 index 7f676db1c2..0000000000 --- a/packages/medusa/src/api/routes/admin/orders/archive-order.js +++ /dev/null @@ -1,13 +0,0 @@ -export default async (req, res) => { - const { id } = req.params - - const orderService = req.scope.resolve("orderService") - - await orderService.archive(id) - - const order = await orderService.retrieve(id, { - relations: ["region", "customer", "swaps"], - }) - - res.json({ order }) -} diff --git a/packages/medusa/src/api/routes/admin/orders/archive-order.ts b/packages/medusa/src/api/routes/admin/orders/archive-order.ts new file mode 100644 index 0000000000..eee94c40b0 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/archive-order.ts @@ -0,0 +1,35 @@ +import { OrderService } from "../../../../services" + +/** + * @oas [post] /orders/{id}/archive + * operationId: "PostOrdersOrderArchive" + * summary: "Archive order" + * description: "Archives the order with the given id." + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Order. + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/order" + */ +export default async (req, res) => { + const { id } = req.params + + const orderService: OrderService = req.scope.resolve("orderService") + + await orderService.archive(id) + + const order = await orderService.retrieve(id, { + relations: ["region", "customer", "swaps"], + }) + + res.json({ order }) +} diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-claim.js b/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts similarity index 71% rename from packages/medusa/src/api/routes/admin/orders/cancel-claim.js rename to packages/medusa/src/api/routes/admin/orders/cancel-claim.ts index 42090baef3..0768bb0ec7 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-claim.ts @@ -1,11 +1,13 @@ import { MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { ClaimService, OrderService } from "../../../../services" /** * @oas [post] /orders/{id}/claims/{claim_id}/cancel * operationId: "PostOrdersClaimCancel" * summary: "Cancels a Claim" * description: "Cancels a Claim" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) claim_id=* {string} The id of the Claim. @@ -24,8 +26,8 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, claim_id } = req.params - const claimService = req.scope.resolve("claimService") - const orderService = req.scope.resolve("orderService") + const claimService: ClaimService = req.scope.resolve("claimService") + const orderService: OrderService = req.scope.resolve("orderService") const claim = await claimService.retrieve(claim_id) @@ -39,8 +41,8 @@ export default async (req, res) => { await claimService.cancel(claim_id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) 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.ts similarity index 75% rename from packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js rename to packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts index b0b550d19e..b0bfd6d6ed 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-claim.ts @@ -1,11 +1,17 @@ import { MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { + ClaimService, + FulfillmentService, + OrderService, +} from "../../../../services" /** * @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." + * x-authenticated: true * 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. @@ -25,9 +31,10 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, claim_id, fulfillment_id } = req.params - const fulfillmentService = req.scope.resolve("fulfillmentService") - const claimService = req.scope.resolve("claimService") - const orderService = req.scope.resolve("orderService") + const fulfillmentService: FulfillmentService = + req.scope.resolve("fulfillmentService") + const claimService: ClaimService = req.scope.resolve("claimService") + const orderService: OrderService = req.scope.resolve("orderService") const fulfillment = await fulfillmentService.retrieve(fulfillment_id) @@ -50,8 +57,8 @@ export default async (req, res) => { await claimService.cancelFulfillment(fulfillment_id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) } 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.ts similarity index 75% rename from packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js rename to packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts index b09bc61839..5470571cab 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment-swap.ts @@ -1,11 +1,17 @@ import { MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { + FulfillmentService, + OrderService, + SwapService, +} from "../../../../services" /** * @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." + * x-authenticated: true * 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. @@ -25,9 +31,10 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, swap_id, fulfillment_id } = req.params - const fulfillmentService = req.scope.resolve("fulfillmentService") - const swapService = req.scope.resolve("swapService") - const orderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const orderService: OrderService = req.scope.resolve("orderService") + const fulfillmentService: FulfillmentService = + req.scope.resolve("fulfillmentService") const fulfillment = await fulfillmentService.retrieve(fulfillment_id) @@ -50,8 +57,8 @@ export default async (req, res) => { await swapService.cancelFulfillment(fulfillment_id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts similarity index 73% rename from packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js rename to packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts index 0b2d075390..731bbe43cb 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts @@ -1,11 +1,13 @@ import { MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { FulfillmentService, OrderService } from "../../../../services" /** * @oas [post] /orders/{id}/fulfillments/{fulfillment_id}/cancel * operationId: "PostOrdersOrderFulfillmentsCancel" * summary: "Cancels a fulfilmment" * description: "Registers a Fulfillment as canceled." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order which the Fulfillment relates to. * - (path) fulfillment_id=* {string} The id of the Fulfillment @@ -24,8 +26,9 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, fulfillment_id } = req.params - const fulfillmentService = req.scope.resolve("fulfillmentService") - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") + const fulfillmentService: FulfillmentService = + req.scope.resolve("fulfillmentService") const fulfillment = await fulfillmentService.retrieve(fulfillment_id) @@ -39,8 +42,8 @@ export default async (req, res) => { await orderService.cancelFulfillment(fulfillment_id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-order.js b/packages/medusa/src/api/routes/admin/orders/cancel-order.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/orders/cancel-order.js rename to packages/medusa/src/api/routes/admin/orders/cancel-order.ts index 7d9cb9aaaa..18215f1914 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-order.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-order.ts @@ -1,10 +1,12 @@ -import { defaultFields, defaultRelations } from "." +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService } from "../../../../services" /** * @oas [post] /orders/{id}/cancel * operationId: "PostOrdersOrderCancel" * summary: "Cancel an Order" * description: "Registers an Order as canceled. This triggers a flow that will cancel any created Fulfillments and Payments, may fail if the Payment or Fulfillment Provider is unable to cancel the Payment/Fulfillment." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * tags: @@ -22,12 +24,12 @@ import { defaultFields, defaultRelations } from "." export default async (req, res) => { const { id } = req.params - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") await orderService.cancel(id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) 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.ts similarity index 71% rename from packages/medusa/src/api/routes/admin/orders/cancel-swap.js rename to packages/medusa/src/api/routes/admin/orders/cancel-swap.ts index 78e5356795..2110244977 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-swap.js +++ b/packages/medusa/src/api/routes/admin/orders/cancel-swap.ts @@ -1,11 +1,13 @@ import { MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService, SwapService } from "../../../../services" /** * @oas [post] /orders/{id}/swaps/{swap_id}/cancel * operationId: "PostOrdersSwapCancel" * summary: "Cancels a Swap" * description: "Cancels a Swap" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) swap_id=* {string} The id of the Swap. @@ -24,8 +26,8 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, swap_id } = req.params - const swapService = req.scope.resolve("swapService") - const orderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const orderService: OrderService = req.scope.resolve("orderService") const swap = await swapService.retrieve(swap_id) @@ -39,8 +41,8 @@ export default async (req, res) => { await swapService.cancel(swap_id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/capture-payment.js b/packages/medusa/src/api/routes/admin/orders/capture-payment.ts similarity index 68% rename from packages/medusa/src/api/routes/admin/orders/capture-payment.js rename to packages/medusa/src/api/routes/admin/orders/capture-payment.ts index ce8bbc05d5..86a5577762 100644 --- a/packages/medusa/src/api/routes/admin/orders/capture-payment.js +++ b/packages/medusa/src/api/routes/admin/orders/capture-payment.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService } from "../../../../services" /** * @oas [post] /orders/{id}/capture * operationId: "PostOrdersOrderCapture" * summary: "Capture an Order" * description: "Captures all the Payments associated with an Order." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * tags: @@ -22,13 +24,13 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") await orderService.capturePayment(id) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/complete-order.js b/packages/medusa/src/api/routes/admin/orders/complete-order.js deleted file mode 100644 index afe5dbf228..0000000000 --- a/packages/medusa/src/api/routes/admin/orders/complete-order.js +++ /dev/null @@ -1,13 +0,0 @@ -export default async (req, res) => { - const { id } = req.params - - const orderService = req.scope.resolve("orderService") - - await orderService.completeOrder(id) - - const order = await orderService.retrieve(id, { - relations: ["region", "customer", "swaps"], - }) - - res.json({ order }) -} diff --git a/packages/medusa/src/api/routes/admin/orders/complete-order.ts b/packages/medusa/src/api/routes/admin/orders/complete-order.ts new file mode 100644 index 0000000000..3a2e42ad31 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/complete-order.ts @@ -0,0 +1,35 @@ +import { OrderService } from "../../../../services" + +/** + * @oas [post] /orders/{id}/complete + * operationId: "PostOrdersOrderComplete" + * summary: "Complete an Order" + * description: "Completes an Order" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Order. + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/order" + */ +export default async (req, res) => { + const { id } = req.params + + const orderService: OrderService = req.scope.resolve("orderService") + + await orderService.completeOrder(id) + + const order = await orderService.retrieve(id, { + relations: ["region", "customer", "swaps"], + }) + + res.json({ order }) +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.js b/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts similarity index 54% rename from packages/medusa/src/api/routes/admin/orders/create-claim-shipment.js rename to packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts index c424e33df9..495ba9d52e 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.js +++ b/packages/medusa/src/api/routes/admin/orders/create-claim-shipment.ts @@ -1,11 +1,14 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { IsArray, IsNotEmpty, IsOptional, IsString } from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { ClaimService, OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/claims/{claim_id}/shipments * operationId: "PostOrdersOrderClaimsClaimShipments" * summary: "Create Claim Shipment" * description: "Registers a Claim Fulfillment as shipped." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) claim_id=* {string} The id of the Claim. @@ -13,6 +16,8 @@ import { defaultFields, defaultRelations } from "./" * content: * application/json: * schema: + * required: + * - fulfillment_id * properties: * fulfillment_id: * description: The id of the Fulfillment. @@ -37,29 +42,35 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, claim_id } = req.params - const schema = Validator.object().keys({ - fulfillment_id: Validator.string().required(), - tracking_numbers: Validator.array().items(Validator.string()).optional(), - }) + const validated = await validator( + AdminPostOrdersOrderClaimsClaimShipmentsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - const claimService = req.scope.resolve("claimService") + const orderService: OrderService = req.scope.resolve("orderService") + const claimService: ClaimService = req.scope.resolve("claimService") await claimService.createShipment( claim_id, - value.fulfillment_id, - value.tracking_numbers.map((n) => ({ tracking_number: n })) + validated.fulfillment_id, + validated.tracking_numbers?.map((n) => ({ tracking_number: n })) ) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) } + +export class AdminPostOrdersOrderClaimsClaimShipmentsReq { + @IsString() + @IsNotEmpty() + fulfillment_id: string + + @IsArray() + @IsOptional() + @IsString({ each: true }) + tracking_numbers?: string[] +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-claim.js b/packages/medusa/src/api/routes/admin/orders/create-claim.ts similarity index 60% rename from packages/medusa/src/api/routes/admin/orders/create-claim.js rename to packages/medusa/src/api/routes/admin/orders/create-claim.ts index fb7db9a884..1fb0b8204f 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/create-claim.ts @@ -1,17 +1,35 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsOptional, + ValidateNested, + IsBoolean, + IsObject, + IsString, + IsInt, + IsNotEmpty, + IsEnum, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" /** * @oas [post] /order/{id}/claims * operationId: "PostOrdersOrderClaims" * summary: "Create a Claim" * description: "Creates a Claim." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: * content: * application/json: * schema: + * required: + * - type + * - claim_items * properties: * type: * description: "The type of the Claim. This will determine how the Claim is treated: `replace` Claims will result in a Fulfillment with new items being created, while a `refund` Claim will refund the amount paid for the claimed items." @@ -50,53 +68,53 @@ import { defaultRelations, defaultFields } from "./" * description: A list of image URL's that will be associated with the Claim * items: * type: string - * return_shipping: - * description: Optional details for the Return Shipping Method, if the items are to be sent back. - * type: object - * properties: - * option_id: - * type: string - * description: The id of the Shipping Option to create the Shipping Method from. - * price: - * type: integer - * description: The price to charge for the Shipping Method. - * additional_items: - * description: The new items to send to the Customer when the Claim type is Replace. - * type: array - * items: - * properties: - * variant_id: - * description: The id of the Product Variant to ship. - * type: string - * quantity: - * description: The quantity of the Product Variant to ship. - * type: integer - * shipping_methods: - * description: The Shipping Methods to send the additional Line Items with. - * type: array - * items: + * return_shipping: + * description: Optional details for the Return Shipping Method, if the items are to be sent back. + * type: object + * properties: + * option_id: + * type: string + * description: The id of the Shipping Option to create the Shipping Method from. + * price: + * type: integer + * description: The price to charge for the Shipping Method. + * additional_items: + * description: The new items to send to the Customer when the Claim type is Replace. + * type: array + * items: * properties: - * id: - * description: The id of an existing Shipping Method + * variant_id: + * description: The id of the Product Variant to ship. * type: string - * option_id: - * description: The id of the Shipping Option to create a Shipping Method from - * type: string - * price: - * description: The price to charge for the Shipping Method + * quantity: + * description: The quantity of the Product Variant to ship. * type: integer - * shipping_address: - * type: object - * description: "An optional shipping address to send the claim to. Defaults to the parent order's shipping address" - * refund_amount: - * description: The amount to refund the Customer when the Claim type is `refund`. - * type: integer - * no_notification: - * description: If set to true no notification will be send related to this Claim. - * type: boolean - * metadata: - * description: An optional set of key-value pairs to hold additional information. - * type: object + * shipping_methods: + * description: The Shipping Methods to send the additional Line Items with. + * type: array + * items: + * properties: + * id: + * description: The id of an existing Shipping Method + * type: string + * option_id: + * description: The id of the Shipping Option to create a Shipping Method from + * type: string + * price: + * description: The price to charge for the Shipping Method + * type: integer + * shipping_address: + * type: object + * description: "An optional shipping address to send the claim to. Defaults to the parent order's shipping address" + * refund_amount: + * description: The amount to refund the Customer when the Claim type is `refund`. + * type: integer + * no_notification: + * description: If set to true no notification will be send related to this Claim. + * type: boolean + * metadata: + * description: An optional set of key-value pairs to hold additional information. + * type: object * tags: * - Order * responses: @@ -109,54 +127,12 @@ import { defaultRelations, defaultFields } from "./" * order: * $ref: "#/components/schemas/order" */ + export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - type: Validator.string().valid("replace", "refund").required(), - claim_items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - note: Validator.string().optional(), - reason: Validator.string().valid( - "missing_item", - "wrong_item", - "production_failure", - "other" - ), - tags: Validator.array().items(Validator.string()), - images: Validator.array().items(Validator.string()), - }) - .required(), - return_shipping: Validator.object() - .keys({ - option_id: Validator.string().optional(), - price: Validator.number().integer().optional(), - }) - .optional(), - additional_items: Validator.array() - .items({ - variant_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .optional(), - shipping_methods: Validator.array() - .items({ - id: Validator.string().optional(), - option_id: Validator.string().optional(), - price: Validator.number().integer().optional(), - }) - .optional(), - refund_amount: Validator.number().integer().optional(), - shipping_address: Validator.object().optional(), - no_notification: Validator.boolean().optional(), - metadata: Validator.object().optional(), - }) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const value = await validator(AdminPostOrdersOrderClaimsReq, req.body) + const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") const headerKey = req.get("Idempotency-Key") || "" @@ -302,8 +278,8 @@ export default async (req, res) => { } order = await orderService.withTransaction(manager).retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) return { @@ -346,3 +322,124 @@ export default async (req, res) => { res.status(idempotencyKey.response_code).json(idempotencyKey.response_body) } + +enum ClaimTypes { + replace = "replace", + refund = "refund", +} + +enum ClaimItemReason { + missing_item = "missing_item", + wrong_item = "wrong_item", + production_failure = "production_failure", + other = "other", +} + +export class AdminPostOrdersOrderClaimsReq { + @IsEnum(ClaimTypes) + @IsNotEmpty() + type: ClaimTypes + + @IsArray() + @IsNotEmpty() + @Type(() => Item) + @ValidateNested({ each: true }) + claim_items: Item[] + + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => ReturnShipping) + return_shipping?: ReturnShipping + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => AdditionalItem) + additional_items?: AdditionalItem[] + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => ShippingMethod) + shipping_methods?: ShippingMethod[] + + @IsInt() + @IsOptional() + refund_amount?: number + + @IsObject() + @IsOptional() + @ValidateNested() + @Type(() => AddressPayload) + shipping_address?: AddressPayload + + @IsBoolean() + @IsOptional() + no_notification?: boolean + + @IsObject() + @IsOptional() + metadata?: object +} + +class ReturnShipping { + @IsString() + @IsOptional() + option_id?: string + + @IsInt() + @IsOptional() + price?: number +} + +class ShippingMethod { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + option_id?: string + + @IsInt() + @IsOptional() + price?: number +} + +class Item { + @IsString() + @IsNotEmpty() + item_id: string + + @IsInt() + @IsNotEmpty() + quantity: number + + @IsString() + @IsOptional() + note?: string + + @IsEnum(ClaimItemReason) + @IsOptional() + reason?: ClaimItemReason + + @IsArray() + @IsOptional() + @IsString({ each: true }) + tags?: string[] + + @IsArray() + @IsOptional() + @IsString({ each: true }) + images?: string[] +} + +class AdditionalItem { + @IsString() + @IsNotEmpty() + variant_id: string + + @IsInt() + @IsNotEmpty() + quantity: number +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/orders/create-fulfillment.js rename to packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts index 8b0578fee3..6758e537a6 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-fulfillment.js +++ b/packages/medusa/src/api/routes/admin/orders/create-fulfillment.ts @@ -1,17 +1,31 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { Transform, Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsInt, + IsNotEmpty, + IsObject, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/fulfillments * operationId: "PostOrdersOrderFulfillments" * summary: "Create a Fulfillment" * description: "Creates a Fulfillment of an Order - will notify Fulfillment Providers to prepare a shipment." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: * content: * application/json: * schema: + * required: + * - items * properties: * items: * description: The Line Items to include in the Fulfillment. @@ -45,33 +59,48 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .required(), - no_notification: Validator.boolean().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator( + AdminPostOrdersOrderFulfillmentsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const orderService: OrderService = req.scope.resolve("orderService") - const orderService = req.scope.resolve("orderService") - - await orderService.createFulfillment(id, value.items, { - metadata: value.metadata, - no_notification: value.no_notification, + await orderService.createFulfillment(id, validated.items, { + metadata: validated.metadata, + no_notification: validated.no_notification, }) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) } + +export class AdminPostOrdersOrderFulfillmentsReq { + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + items: Item[] + + @IsBoolean() + @IsOptional() + @Transform(({ value }) => value === "true") + no_notification?: boolean + + @IsObject() + @IsOptional() + metadata?: object +} + +class Item { + @IsString() + @IsNotEmpty() + item_id: string + + @IsInt() + @IsNotEmpty() + quantity: number +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-order.js b/packages/medusa/src/api/routes/admin/orders/create-order.js deleted file mode 100644 index 896f1ca693..0000000000 --- a/packages/medusa/src/api/routes/admin/orders/create-order.js +++ /dev/null @@ -1,42 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -export default async (req, res) => { - const schema = Validator.object().keys({ - status: Validator.string().optional(), - email: Validator.string().email().required(), - billing_address: Validator.address().required(), - shipping_address: Validator.address().required(), - items: Validator.array().required(), - region: Validator.string().required(), - discounts: Validator.array().optional(), - customer_id: Validator.string().required(), - payment_method: Validator.object() - .keys({ - provider_id: Validator.string().required(), - data: Validator.object().optional(), - }) - .required(), - shipping_method: Validator.array() - .items({ - provider_id: Validator.string().required(), - profile_id: Validator.string().required(), - price: Validator.number().required(), - data: Validator.object().optional(), - items: Validator.array().optional(), - }) - .required(), - no_notification: Validator.boolean().optional(), - metadata: Validator.object().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - let order = await orderService.create(value) - order = await orderService.decorate(order, [], ["region"]) - - res.status(200).json({ order }) -} diff --git a/packages/medusa/src/api/routes/admin/orders/create-order.ts b/packages/medusa/src/api/routes/admin/orders/create-order.ts new file mode 100644 index 0000000000..8bda22cfa8 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/create-order.ts @@ -0,0 +1,203 @@ +import { Type, Transform } from "class-transformer" +import { + IsEmail, + IsOptional, + ValidateNested, + IsArray, + IsString, + IsBoolean, + IsObject, + IsInt, + IsNotEmpty, +} from "class-validator" +import { OrderService } from "../../../../services" +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" +/** + * @oas [post] /orders + * operationId: "PostOrders" + * summary: "Create an order" + * description: "Creates and order" + * x-authenticated: true + * requestBody: + * content: + * application/json: + * required: + * - email + * - billing_address + * - shipping_address + * - items + * - region + * - customer_id + * - payment_method + * - shipping_method + * schema: + * properties: + * status: + * description: status of the order + * type: string + * email: + * description: the email for the order + * type: string + * billing_address: + * description: Billing address + * anyOf: + * - $ref: "#/components/schemas/address + * shipping_address: + * description: Shipping address + * anyOf: + * - $ref: "#/components/schemas/address + * items: + * description: The Line Items for the order + * type: array + * region: + * description: Region where the order belongs + * type: string + * discounts: + * description: Discounts applied to the order + * type: array + * customer_id: + * description: id of the customer + * type: string + * payment_method: + * description: payment method chosen for the order + * type: object + * required: + * - provider_id + * properties: + * provider_id: + * type: string + * description: id of the payment provider + * data: + * description: Data relevant for the given payment method + * type: object + * shipping_method: + * description: The Shipping Method used for shipping the order. + * type: object + * required: + * - provider_id + * - profile_id + * - price + * properties: + * provider_id: + * type: string + * description: The id of the shipping provider. + * profile_id: + * type: string + * description: The id of the shipping profile. + * price: + * type: integer + * description: The price of the shipping. + * data: + * type: object + * description: Data relevant to the specific shipping method. + * items: + * type: array + * description: Items to ship + * no_notification: + * description: A flag to indicate if no notifications should be emitted related to the updated order. + * type: boolean + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/order" + */ + +export default async (req, res) => { + const validated = await validator(AdminPostOrdersReq, req.body) + + const orderService: OrderService = req.scope.resolve("orderService") + let order = await orderService.create(validated) + order = await orderService.decorate(order, [], ["region"]) + + res.status(200).json({ order }) +} + +export class AdminPostOrdersReq { + @IsString() + @IsOptional() + status?: string + + @IsEmail() + @IsNotEmpty() + email: string + + @IsNotEmpty() + @ValidateNested() + @Type(() => AddressPayload) + billing_address: AddressPayload + + @IsNotEmpty() + @ValidateNested() + @Type(() => AddressPayload) + shipping_address: AddressPayload + + @IsArray() + @IsNotEmpty() + items: object[] + + @IsString() + @IsNotEmpty() + region: string + + @IsArray() + @IsOptional() + discounts?: object[] + + @IsString() + @IsNotEmpty() + customer_id: string + + @IsNotEmpty() + @ValidateNested() + @Type(() => PaymentMethod) + payment_method: PaymentMethod + + @IsNotEmpty() + @ValidateNested({ each: true }) + @Type(() => ShippingMethod) + shipping_method?: ShippingMethod[] + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} + +class PaymentMethod { + @IsString() + @IsNotEmpty() + provider_id: string + + @IsObject() + @IsOptional() + data?: object +} + +class ShippingMethod { + @IsString() + @IsNotEmpty() + provider_id: string + + @IsString() + @IsNotEmpty() + profile_id: string + + @IsInt() + @IsNotEmpty() + price: number + + @IsObject() + @IsOptional() + data?: object + + @IsArray() + @IsOptional() + items?: object[] +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-shipment.js b/packages/medusa/src/api/routes/admin/orders/create-shipment.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/orders/create-shipment.js rename to packages/medusa/src/api/routes/admin/orders/create-shipment.ts index 888c2ebd39..495ab1d7f0 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-shipment.js +++ b/packages/medusa/src/api/routes/admin/orders/create-shipment.ts @@ -1,17 +1,27 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { + IsArray, + IsBoolean, + IsNotEmpty, + IsOptional, + IsString, +} from "class-validator" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/shipment * operationId: "PostOrdersOrderShipment" * summary: "Create a Shipment" * description: "Registers a Fulfillment as shipped." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: * content: * application/json: * schema: + * required: + * - fulfillment_id * properties: * fulfillment_id: * description: The id of the Fulfillment. @@ -39,30 +49,36 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - fulfillment_id: Validator.string().required(), - tracking_numbers: Validator.array().items(Validator.string()).optional(), - no_notification: Validator.boolean().optional(), - }) + const validated = await validator(AdminPostOrdersOrderShipmentReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") await orderService.createShipment( id, - value.fulfillment_id, - value.tracking_numbers.map((n) => ({ tracking_number: n })), - { no_notification: value.no_notification } + validated.fulfillment_id, + validated.tracking_numbers?.map((n) => ({ tracking_number: n })), + { no_notification: validated.no_notification } ) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) } + +export class AdminPostOrdersOrderShipmentReq { + @IsString() + @IsNotEmpty() + fulfillment_id: string + + @IsArray() + @IsOptional() + @IsString({ each: true }) + tracking_numbers?: string[] + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.js b/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts similarity index 54% rename from packages/medusa/src/api/routes/admin/orders/create-swap-shipment.js rename to packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts index e211a03ee8..1fea91d769 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.js +++ b/packages/medusa/src/api/routes/admin/orders/create-swap-shipment.ts @@ -1,11 +1,19 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - +import { + IsArray, + IsBoolean, + IsNotEmpty, + IsOptional, + IsString, +} from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService, SwapService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/swaps/{swap_id}/shipments * operationId: "PostOrdersOrderSwapsSwapShipments" * summary: "Create Swap Shipment" * description: "Registers a Swap Fulfillment as shipped." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) swap_id=* {string} The id of the Swap. @@ -13,6 +21,8 @@ import { defaultFields, defaultRelations } from "./" * content: * application/json: * schema: + * required: + * - fulfillment_id * properties: * fulfillment_id: * description: The id of the Fulfillment. @@ -40,31 +50,40 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, swap_id } = req.params - const schema = Validator.object().keys({ - fulfillment_id: Validator.string().required(), - tracking_numbers: Validator.array().items(Validator.string()).optional(), - no_notification: Validator.boolean().optional(), - }) + const validated = await validator( + AdminPostOrdersOrderSwapsSwapShipmentsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") await swapService.createShipment( swap_id, - value.fulfillment_id, - value.tracking_numbers.map((n) => ({ tracking_number: n })), - { no_notification: value.no_notification } + validated.fulfillment_id, + validated.tracking_numbers?.map((n) => ({ tracking_number: n })), + { no_notification: validated.no_notification } ) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) } + +export class AdminPostOrdersOrderSwapsSwapShipmentsReq { + @IsString() + @IsNotEmpty() + fulfillment_id: string + + @IsArray() + @IsOptional() + @IsString({ each: true }) + tracking_numbers?: string[] + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} diff --git a/packages/medusa/src/api/routes/admin/orders/create-swap.js b/packages/medusa/src/api/routes/admin/orders/create-swap.ts similarity index 68% rename from packages/medusa/src/api/routes/admin/orders/create-swap.js rename to packages/medusa/src/api/routes/admin/orders/create-swap.ts index 2864644f39..2fea9f65c6 100644 --- a/packages/medusa/src/api/routes/admin/orders/create-swap.js +++ b/packages/medusa/src/api/routes/admin/orders/create-swap.ts @@ -1,22 +1,47 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { + IsOptional, + IsArray, + IsString, + IsBoolean, + IsObject, + IsInt, + IsNotEmpty, + IsNumber, + ValidateNested, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { + IdempotencyKeyService, + OrderService, + ReturnService, + SwapService, +} from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /order/{id}/swaps * operationId: "PostOrdersOrderSwaps" * summary: "Create a Swap" * description: "Creates a Swap. Swaps are used to handle Return of previously purchased goods and Fulfillment of replacements simultaneously." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: * content: * application/json: * schema: + * required: + * - return_items * properties: * return_items: * description: The Line Items to return as part of the Swap. * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: * description: The id of the Line Item that will be claimed. @@ -38,6 +63,9 @@ import { defaultFields, defaultRelations } from "./" * description: The new items to send to the Customer. * type: array * items: + * required: + * - variant_id + * - quantity * properties: * variant_id: * description: The id of the Product Variant to ship. @@ -49,6 +77,9 @@ import { defaultFields, defaultRelations } from "./" * description: The custom shipping options to potentially create a Shipping Method from. * type: array * items: + * required: + * - option_id + * - price * properties: * option_id: * description: The id of the Shipping Option to override with a custom price. @@ -77,39 +108,11 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - return_items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .required(), - return_shipping: Validator.object() - .keys({ - option_id: Validator.string().optional(), - price: Validator.number().integer().optional(), - }) - .optional(), - additional_items: Validator.array().items({ - variant_id: Validator.string().required(), - quantity: Validator.number().required(), - }), - custom_shipping_options: Validator.array() - .items({ - option_id: Validator.string().required(), - price: Validator.number().required(), - }) - .default([]), - no_notification: Validator.boolean().optional(), - allow_backorder: Validator.boolean().default(true), - }) + const validated = await validator(AdminPostOrdersOrderSwapsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") + const idempotencyKeyService: IdempotencyKeyService = req.scope.resolve( + "idempotencyKeyService" + ) const headerKey = req.get("Idempotency-Key") || "" @@ -129,9 +132,9 @@ export default async (req, res) => { res.setHeader("Access-Control-Expose-Headers", "Idempotency-Key") res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const returnService = req.scope.resolve("returnService") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const returnService: ReturnService = req.scope.resolve("returnService") let inProgress = true let err = false @@ -153,19 +156,19 @@ export default async (req, res) => { .withTransaction(manager) .create( order, - value.return_items, - value.additional_items, - value.return_shipping, + validated.return_items, + validated.additional_items, + validated.return_shipping, { idempotency_key: idempotencyKey.idempotency_key, - no_notification: value.no_notification, - allow_backorder: value.allow_backorder, + no_notification: validated.no_notification, + allow_backorder: validated.allow_backorder, } ) await swapService .withTransaction(manager) - .createCart(swap.id, value.custom_shipping_options) + .createCart(swap.id, validated.custom_shipping_options) const returnOrder = await returnService .withTransaction(manager) .retrieveBySwap(swap.id) @@ -203,8 +206,8 @@ export default async (req, res) => { } const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) return { @@ -247,3 +250,77 @@ export default async (req, res) => { res.status(idempotencyKey.response_code).json(idempotencyKey.response_body) } + +export class AdminPostOrdersOrderSwapsReq { + @IsArray() + @IsNotEmpty() + @ValidateNested({ each: true }) + @Type(() => ReturnItem) + return_items: ReturnItem[] + + @IsObject() + @IsOptional() + @ValidateNested() + @Type(() => ReturnShipping) + return_shipping?: ReturnShipping + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => AdditionalItem) + additional_items?: AdditionalItem[] + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => CustomShippingOption) + custom_shipping_options?: CustomShippingOption[] = [] + + @IsBoolean() + @IsOptional() + no_notification?: boolean + + @IsBoolean() + @IsOptional() + allow_backorder?: boolean = true +} + +class ReturnItem { + @IsString() + @IsNotEmpty() + item_id: string + + @IsNumber() + @IsNotEmpty() + quantity: number +} + +class ReturnShipping { + @IsString() + @IsNotEmpty() + option_id: string + + @IsInt() + @IsOptional() + price?: number +} + +class CustomShippingOption { + @IsString() + @IsNotEmpty() + option_id: string + + @IsInt() + @IsNotEmpty() + price: number +} + +class AdditionalItem { + @IsString() + @IsNotEmpty() + variant_id: string + + @IsNumber() + @IsNotEmpty() + quantity: number +} diff --git a/packages/medusa/src/api/routes/admin/orders/delete-metadata.js b/packages/medusa/src/api/routes/admin/orders/delete-metadata.ts similarity index 83% rename from packages/medusa/src/api/routes/admin/orders/delete-metadata.js rename to packages/medusa/src/api/routes/admin/orders/delete-metadata.ts index 7359f2c27f..ec4788b278 100644 --- a/packages/medusa/src/api/routes/admin/orders/delete-metadata.js +++ b/packages/medusa/src/api/routes/admin/orders/delete-metadata.ts @@ -1,8 +1,11 @@ +import { OrderService } from "../../../../services" + /** * @oas [delete] /order/{id}/metadata/{key} * operationId: "DeleteOrdersOrderMetadataKey" * summary: "Delete Metadata" * description: "Deletes a metadata key." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) key=* {string} The metadata key. @@ -21,7 +24,7 @@ export default async (req, res) => { const { id, key } = req.params - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") await orderService.deleteMetadata(id, key) diff --git a/packages/medusa/src/api/routes/admin/orders/fulfill-claim.js b/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/orders/fulfill-claim.js rename to packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts index a5dc0356ca..bdad54cb4e 100644 --- a/packages/medusa/src/api/routes/admin/orders/fulfill-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/fulfill-claim.ts @@ -1,11 +1,14 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { IsBoolean, IsObject, IsOptional } from "class-validator" +import { EntityManager } from "typeorm" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { ClaimService, OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/claims/{claim_id}/fulfillments * operationId: "PostOrdersOrderClaimsClaimFulfillments" * summary: "Create a Claim Fulfillment" * description: "Creates a Fulfillment for a Claim." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) claim_id=* {string} The id of the Claim. @@ -35,31 +38,36 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id, claim_id } = req.params - const schema = Validator.object().keys({ - metadata: Validator.object().optional(), - no_notification: Validator.boolean().optional(), - }) + const validated = await validator( + AdminPostOrdersOrderClaimsClaimFulfillmentsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - const claimService = req.scope.resolve("claimService") - const entityManager = req.scope.resolve("manager") + const orderService: OrderService = req.scope.resolve("orderService") + const claimService: ClaimService = req.scope.resolve("claimService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { await claimService.withTransaction(manager).createFulfillment(claim_id, { - metadata: value.metadata, - no_notification: value.no_notification, + metadata: validated.metadata, + no_notification: validated.no_notification, }) }) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) } + +export class AdminPostOrdersOrderClaimsClaimFulfillmentsReq { + @IsObject() + @IsOptional() + metadata?: object + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} diff --git a/packages/medusa/src/api/routes/admin/orders/fulfill-swap.js b/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/orders/fulfill-swap.js rename to packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts index e17af04a74..0c53474a39 100644 --- a/packages/medusa/src/api/routes/admin/orders/fulfill-swap.js +++ b/packages/medusa/src/api/routes/admin/orders/fulfill-swap.ts @@ -1,11 +1,14 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { IsBoolean, IsObject, IsOptional } from "class-validator" +import { EntityManager } from "typeorm" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService, SwapService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/swaps/{swap_id}/fulfillments * operationId: "PostOrdersOrderSwapsSwapFulfillments" * summary: "Create a Swap Fulfillment" * description: "Creates a Fulfillment for a Swap." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) swap_id=* {string} The id of the Swap. @@ -35,31 +38,36 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id, swap_id } = req.params - const schema = Validator.object().keys({ - metadata: Validator.object().optional(), - no_notification: Validator.boolean().optional, - }) + const validated = await validator( + AdminPostOrdersOrderSwapsSwapFulfillmentsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const entityManager = req.scope.resolve("manager") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { await swapService.withTransaction(manager).createFulfillment(swap_id, { - metadata: value.metadata, - no_notification: value.no_notification, + metadata: validated.metadata, + no_notification: validated.no_notification, }) const order = await orderService.withTransaction(manager).retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) }) } + +export class AdminPostOrdersOrderSwapsSwapFulfillmentsReq { + @IsObject() + @IsOptional() + metadata?: object + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} diff --git a/packages/medusa/src/api/routes/admin/orders/get-order.js b/packages/medusa/src/api/routes/admin/orders/get-order.ts similarity index 65% rename from packages/medusa/src/api/routes/admin/orders/get-order.js rename to packages/medusa/src/api/routes/admin/orders/get-order.ts index e8b33938a6..dad7d694c7 100644 --- a/packages/medusa/src/api/routes/admin/orders/get-order.js +++ b/packages/medusa/src/api/routes/admin/orders/get-order.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService } from "../../../../services" /** * @oas [get] /orders/{id} * operationId: "GetOrdersOrder" * summary: "Retrieve an Order" * description: "Retrieves an Order" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * tags: @@ -22,11 +24,11 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/index.js b/packages/medusa/src/api/routes/admin/orders/index.ts similarity index 80% rename from packages/medusa/src/api/routes/admin/orders/index.js rename to packages/medusa/src/api/routes/admin/orders/index.ts index c6ccb7c166..0bd8cb193b 100644 --- a/packages/medusa/src/api/routes/admin/orders/index.js +++ b/packages/medusa/src/api/routes/admin/orders/index.ts @@ -1,5 +1,8 @@ import { Router } from "express" +import { Order } from "../../../.." import middlewares from "../../../middlewares" +import "reflect-metadata" +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" const route = Router() @@ -18,7 +21,11 @@ export default (app) => { /** * Get an order */ - route.get("/:id", middlewares.wrap(require("./get-order").default)) + route.get( + "/:id", + middlewares.normalizeQuery(), + middlewares.wrap(require("./get-order").default) + ) /** * Create a new order @@ -216,7 +223,17 @@ export default (app) => { return app } -export const defaultRelations = [ +export type AdminOrdersRes = { + order: Order +} + +export type AdminDeleteRes = DeleteResponse + +export type AdminOrdersListRes = PaginatedResponse & { + orders: Order[] +} + +export const defaultAdminOrdersRelations = [ "customer", "billing_address", "shipping_address", @@ -253,7 +270,7 @@ export const defaultRelations = [ "swaps.fulfillments", ] -export const defaultFields = [ +export const defaultAdminOrdersFields = [ "id", "status", "fulfillment_status", @@ -285,7 +302,7 @@ export const defaultFields = [ "no_notification", ] -export const allowedFields = [ +export const allowedAdminOrdersFields = [ "id", "status", "fulfillment_status", @@ -314,7 +331,7 @@ export const allowedFields = [ "no_notification", ] -export const allowedRelations = [ +export const allowedAdminOrdersRelations = [ "customer", "region", "billing_address", @@ -333,7 +350,7 @@ export const allowedRelations = [ "swaps.additional_items", ] -export const filterableFields = [ +export const filterableAdminOrdersFields = [ "id", "status", "fulfillment_status", @@ -349,3 +366,32 @@ export const filterableFields = [ "created_at", "updated_at", ] + +export * from "./add-shipping-method" +export * from "./archive-order" +export * from "./cancel-claim" +export * from "./cancel-fulfillment" +export * from "./cancel-fulfillment-claim" +export * from "./cancel-fulfillment-swap" +export * from "./cancel-order" +export * from "./cancel-swap" +export * from "./capture-payment" +export * from "./complete-order" +export * from "./create-claim" +export * from "./create-claim-shipment" +export * from "./create-fulfillment" +export * from "./create-order" +export * from "./create-shipment" +export * from "./create-swap" +export * from "./create-swap-shipment" +export * from "./delete-metadata" +export * from "./fulfill-claim" +export * from "./fulfill-swap" +export * from "./get-order" +export * from "./list-orders" +export * from "./process-swap-payment" +export * from "./receive-swap" +export * from "./refund-payment" +export * from "./request-return" +export * from "./update-claim" +export * from "./update-order" diff --git a/packages/medusa/src/api/routes/admin/orders/list-orders.js b/packages/medusa/src/api/routes/admin/orders/list-orders.js deleted file mode 100644 index 131de4ee4f..0000000000 --- a/packages/medusa/src/api/routes/admin/orders/list-orders.js +++ /dev/null @@ -1,80 +0,0 @@ -import _ from "lodash" -import { defaultRelations, defaultFields, filterableFields } from "./" -import { MedusaError, Validator } from "medusa-core-utils" - -/** - * @oas [get] /orders - * operationId: "GetOrders" - * summary: "List Orders" - * description: "Retrieves a list of Orders" - * tags: - * - Order - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * orders: - * type: array - * items: - * $ref: "#/components/schemas/order" - */ -export default async (req, res) => { - const schema = Validator.orderFilter() - - const { value, error } = schema.validate(req.query) - - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - let includeFields = [] - if ("fields" in req.query) { - includeFields = req.query.fields.split(",") - // Ensure created_at is included, since we are sorting on this - includeFields.push("created_at") - } - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - } - - for (const k of filterableFields) { - if (k in value) { - selector[k] = value[k] - } - } - - const listConfig = { - select: includeFields.length ? includeFields : defaultFields, - relations: expandFields.length ? expandFields : defaultRelations, - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const [orders, count] = await orderService.listAndCount(selector, listConfig) - - let data = orders - - const fields = [...includeFields, ...expandFields] - if (fields.length) { - data = orders.map((o) => _.pick(o, fields)) - } - - res.json({ orders: data, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/orders/list-orders.ts b/packages/medusa/src/api/routes/admin/orders/list-orders.ts new file mode 100644 index 0000000000..f453018f91 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/list-orders.ts @@ -0,0 +1,115 @@ +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { validator } from "../../../../utils/validator" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { identity, omit, pick, pickBy } from "lodash" +import { OrderService } from "../../../../services" +import { AdminListOrdersSelector } from "../../../../types/orders" +import { Type } from "class-transformer" + +/** + * @oas [get] /orders + * operationId: "GetOrders" + * summary: "List Orders" + * description: "Retrieves a list of Orders" + * x-authenticated: true + * parameters: + * - (query) q {string} Query used for searching orders. + * - (query) id {string} Id of the order to search for. + * - (query) status {string[]} Status to search for. + * - (query) fulfillment_status {string[]} Fulfillment status to search for. + * - (query) payment_status {string[]} Payment status to search for. + * - (query) display_id {string} Display id to search for. + * - (query) cart_id {string} to search for. + * - (query) customer_id {string} to search for. + * - (query) email {string} to search for. + * - (query) region_id {string} to search for. + * - (query) currency_code {string} to search for. + * - (query) tax_rate {string} to search for. + * - (query) cancelled_at {DateComparisonOperator} Date comparison for when resulting orders was cancelled, i.e. less than, greater than etc. + * - (query) created_at {DateComparisonOperator} Date comparison for when resulting orders was created, i.e. less than, greater than etc. + * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting orders was updated, i.e. less than, greater than etc. + * - (query) offset {string} How many orders to skip in the result. + * - (query) limit {string} Limit the number of orders returned. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each order of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each order of the result. + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * orders: + * type: array + * items: + * $ref: "#/components/schemas/order" + */ +export default async (req, res) => { + const value = await validator(AdminGetOrdersParams, req.query) + + const orderService: OrderService = req.scope.resolve("orderService") + + let includeFields: string[] = [] + if (value.fields) { + includeFields = value.fields.split(",") + // Ensure created_at is included, since we are sorting on this + includeFields.push("created_at") + } + + let expandFields: string[] = [] + if (value.expand) { + expandFields = value.expand.split(",") + } + + const listConfig = { + select: includeFields.length ? includeFields : defaultAdminOrdersFields, + relations: expandFields.length ? expandFields : defaultAdminOrdersRelations, + skip: value.offset, + take: value.limit, + order: { created_at: "DESC" }, + } + + const filterableFields = omit(value, [ + "limit", + "offset", + "expand", + "fields", + "order", + ]) + + const [orders, count] = await orderService.listAndCount( + pickBy(filterableFields, identity), + listConfig + ) + + let data = orders + + const fields = [...includeFields, ...expandFields] + if (fields.length) { + data = orders.map((o) => pick(o, fields)) + } + + res.json({ orders: data, count, offset: value.offset, limit: value.limit }) +} + +export class AdminGetOrdersParams extends AdminListOrdersSelector { + @IsNumber() + @IsOptional() + @Type(() => Number) + offset = 0 + + @IsNumber() + @IsOptional() + @Type(() => Number) + limit = 50 + + @IsString() + @IsOptional() + expand?: string + + @IsString() + @IsOptional() + fields?: string +} diff --git a/packages/medusa/src/api/routes/admin/orders/process-swap-payment.js b/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts similarity index 67% rename from packages/medusa/src/api/routes/admin/orders/process-swap-payment.js rename to packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts index 12fe22c255..8d62c71229 100644 --- a/packages/medusa/src/api/routes/admin/orders/process-swap-payment.js +++ b/packages/medusa/src/api/routes/admin/orders/process-swap-payment.ts @@ -1,10 +1,13 @@ -import { defaultFields, defaultRelations } from "./" +import { EntityManager } from "typeorm" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService, SwapService } from "../../../../services" /** * @oas [post] /orders/{id}/swaps/{swap_id}/process-payment * operationId: "PostOrdersOrderSwapsSwapProcessPayment" * summary: "Process a Swap difference" * description: "When there are differences between the returned and shipped Products in a Swap, the difference must be processed. Either a Refund will be issued or a Payment will be captured." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) swap_id=* {string} The id of the Swap. @@ -23,16 +26,16 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, swap_id } = req.params - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const entityManager = req.scope.resolve("manager") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { await swapService.withTransaction(manager).processDifference(swap_id) const order = await orderService.withTransaction(manager).retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/admin/orders/receive-swap.js b/packages/medusa/src/api/routes/admin/orders/receive-swap.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/orders/receive-swap.js rename to packages/medusa/src/api/routes/admin/orders/receive-swap.ts index 94726b616b..c955883269 100644 --- a/packages/medusa/src/api/routes/admin/orders/receive-swap.js +++ b/packages/medusa/src/api/routes/admin/orders/receive-swap.ts @@ -1,11 +1,21 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - +import { Type } from "class-transformer" +import { + IsArray, + IsInt, + IsNotEmpty, + IsString, + ValidateNested, +} from "class-validator" +import { EntityManager } from "typeorm" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService, SwapService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/swaps/{swap_id}/receive * operationId: "PostOrdersOrderSwapsSwapReceive" * summary: "Receive a Swap" * description: "Registers a Swap as received." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) swap_id=* {string} The id of the Swap. @@ -40,28 +50,19 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, swap_id } = req.params - const schema = Validator.object().keys({ - items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .required(), - }) + const validated = await validator( + AdminPostOrdersOrderSwapsSwapReceiveReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const entityManager = req.scope.resolve("manager") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const entityManager: EntityManager = req.scope.resolve("manager") await entityManager.transaction(async (manager) => { await swapService .withTransaction(manager) - .receiveReturn(swap_id, value.items) + .receiveReturn(swap_id, validated.items) await orderService .withTransaction(manager) @@ -69,9 +70,26 @@ export default async (req, res) => { }) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) } + +export class AdminPostOrdersOrderSwapsSwapReceiveReq { + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + items: Item[] +} + +class Item { + @IsString() + @IsNotEmpty() + item_id: string + + @IsInt() + @IsNotEmpty() + quantity: number +} diff --git a/packages/medusa/src/api/routes/admin/orders/refund-payment.js b/packages/medusa/src/api/routes/admin/orders/refund-payment.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/orders/refund-payment.js rename to packages/medusa/src/api/routes/admin/orders/refund-payment.ts index ef3b989f03..dddc650fd6 100644 --- a/packages/medusa/src/api/routes/admin/orders/refund-payment.js +++ b/packages/medusa/src/api/routes/admin/orders/refund-payment.ts @@ -1,11 +1,20 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { + IsBoolean, + IsInt, + IsNotEmpty, + IsOptional, + IsString, +} from "class-validator" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/refunds * operationId: "PostOrdersOrderRefunds" * summary: "Create a Refund" * description: "Issues a Refund." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: @@ -42,29 +51,43 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - amount: Validator.number().integer().required(), - reason: Validator.string().required(), - note: Validator.string().allow("").optional(), - no_notification: Validator.boolean().optional(), - }) - const { value, error } = schema.validate(req.body) + const validated = await validator(AdminPostOrdersOrderRefundsReq, req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const orderService: OrderService = req.scope.resolve("orderService") - const orderService = req.scope.resolve("orderService") - - await orderService.createRefund(id, value.amount, value.reason, value.note, { - no_notification: value.no_notification, - }) + await orderService.createRefund( + id, + validated.amount, + validated.reason, + validated.note, + { + no_notification: validated.no_notification, + } + ) const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) } + +export class AdminPostOrdersOrderRefundsReq { + @IsInt() + @IsNotEmpty() + amount: number + + @IsString() + @IsNotEmpty() + reason: string + + @IsString() + @IsOptional() + note?: string + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} diff --git a/packages/medusa/src/api/routes/admin/orders/request-return.js b/packages/medusa/src/api/routes/admin/orders/request-return.ts similarity index 79% rename from packages/medusa/src/api/routes/admin/orders/request-return.js rename to packages/medusa/src/api/routes/admin/orders/request-return.ts index 70c7f8d265..e0e9837d02 100644 --- a/packages/medusa/src/api/routes/admin/orders/request-return.js +++ b/packages/medusa/src/api/routes/admin/orders/request-return.ts @@ -1,17 +1,36 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsInt, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { + EventBusService, + OrderService, + ReturnService, +} from "../../../../services" +import { OrdersReturnItem } from "../../../../types/orders" +import { validator } from "../../../../utils/validator" /** * @oas [post] /orders/{id}/returns * operationId: "PostOrdersOrderReturns" * summary: "Request a Return" * description: "Requests a Return. If applicable a return label will be created and other plugins notified." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * requestBody: * content: * application/json: * schema: + * required: + * - items * properties: * items: * description: The Line Items that will be returned. @@ -64,30 +83,7 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - reason_id: Validator.string().optional(), - note: Validator.string().optional(), - }) - .required(), - return_shipping: Validator.object() - .keys({ - option_id: Validator.string().optional(), - price: Validator.number().integer().optional(), - }) - .optional(), - receive_now: Validator.boolean().default(false), - no_notification: Validator.boolean().optional(), - refund: Validator.number().integer().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const value = await validator(AdminPostOrdersOrderReturnsReq, req.body) const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") @@ -110,9 +106,9 @@ export default async (req, res) => { res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) try { - const orderService = req.scope.resolve("orderService") - const returnService = req.scope.resolve("returnService") - const eventBus = req.scope.resolve("eventBusService") + const orderService: OrderService = req.scope.resolve("orderService") + const returnService: ReturnService = req.scope.resolve("returnService") + const eventBus: EventBusService = req.scope.resolve("eventBusService") let inProgress = true let err = false @@ -123,7 +119,7 @@ export default async (req, res) => { const { key, error } = await idempotencyKeyService.workStage( idempotencyKey.idempotency_key, async (manager) => { - const returnObj = { + const returnObj: ReturnObj = { order_id: id, idempotency_key: idempotencyKey.idempotency_key, items: value.items, @@ -136,7 +132,7 @@ export default async (req, res) => { if (typeof value.refund !== "undefined" && value.refund < 0) { returnObj.refund_amount = 0 } else { - if (value.refund >= 0) { + if (value.refund && value.refund >= 0) { returnObj.refund_amount = value.refund } } @@ -216,8 +212,8 @@ export default async (req, res) => { } order = await orderService.withTransaction(manager).retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) return { @@ -264,3 +260,50 @@ export default async (req, res) => { throw err } } + +type ReturnObj = { + order_id?: string + idempotency_key?: string + items?: OrdersReturnItem[] + shipping_method?: ReturnShipping + refund_amount?: number + no_notification?: boolean +} + +export class AdminPostOrdersOrderReturnsReq { + @IsArray() + @ValidateNested({ each: true }) + @Type(() => OrdersReturnItem) + items: OrdersReturnItem[] + + @IsOptional() + @ValidateNested() + @Type(() => ReturnShipping) + return_shipping?: ReturnShipping + + @IsString() + @IsOptional() + note?: string + + @IsBoolean() + @IsOptional() + receive_now?: boolean = false + + @IsBoolean() + @IsOptional() + no_notification?: boolean + + @IsInt() + @IsOptional() + refund?: number +} + +class ReturnShipping { + @IsString() + @IsOptional() + option_id?: string + + @IsInt() + @IsOptional() + price?: number +} diff --git a/packages/medusa/src/api/routes/admin/orders/update-claim.js b/packages/medusa/src/api/routes/admin/orders/update-claim.ts similarity index 61% rename from packages/medusa/src/api/routes/admin/orders/update-claim.js rename to packages/medusa/src/api/routes/admin/orders/update-claim.ts index e8c3e2e618..6c1f671a2f 100644 --- a/packages/medusa/src/api/routes/admin/orders/update-claim.js +++ b/packages/medusa/src/api/routes/admin/orders/update-claim.ts @@ -1,11 +1,24 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { Type } from "class-transformer" +import { + IsArray, + ValidateNested, + IsOptional, + IsString, + IsBoolean, + IsInt, + IsNotEmpty, + IsObject, +} from "class-validator" +import { defaultAdminOrdersRelations, defaultAdminOrdersFields } from "." +import { ClaimService, OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /order/{id}/claims/{claim_id} * operationId: "PostOrdersOrderClaimsClaim" * summary: "Update a Claim" * description: "Updates a Claim." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Order. * - (path) claim_id=* {string} The id of the Claim. @@ -83,48 +96,104 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id, claim_id } = req.params - const schema = Validator.object().keys({ - claim_items: Validator.array() - .items({ - id: Validator.string().required(), - note: Validator.string().allow(null, ""), - reason: Validator.string().allow(null, ""), - images: Validator.array().items({ - id: Validator.string().optional(), - url: Validator.string().optional(), - }), - tags: Validator.array().items({ - id: Validator.string().optional(), - value: Validator.string().optional(), - }), - metadata: Validator.object().optional(), - }) - .optional(), - shipping_methods: Validator.array() - .items({ - id: Validator.string().optional(), - option_id: Validator.string().optional(), - price: Validator.number().integer().optional(), - }) - .optional(), - no_notification: Validator.boolean().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator( + AdminPostOrdersOrderClaimsClaimReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const orderService: OrderService = req.scope.resolve("orderService") + const claimService: ClaimService = req.scope.resolve("claimService") - const orderService = req.scope.resolve("orderService") - const claimService = req.scope.resolve("claimService") - - await claimService.update(claim_id, value) + await claimService.update(claim_id, validated) const data = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.json({ order: data }) } + +export class AdminPostOrdersOrderClaimsClaimReq { + @IsArray() + @IsOptional() + @Type(() => Item) + @ValidateNested({ each: true }) + claim_items?: Item[] + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => ShippingMethod) + shipping_methods?: ShippingMethod[] + + @IsBoolean() + @IsOptional() + no_notification?: boolean + + @IsObject() + @IsOptional() + metadata?: object +} + +class ShippingMethod { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + option_id?: string + + @IsInt() + @IsOptional() + price?: number +} + +class Item { + @IsString() + @IsNotEmpty() + id: string + + @IsString() + @IsOptional() + note?: string + + @IsString() + @IsOptional() + reason?: string + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Image) + images: Image[] + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Tag) + tags: Tag[] + + @IsObject() + @IsOptional() + metadata?: object +} + +class Image { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + url?: string +} + +class Tag { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + value?: string +} diff --git a/packages/medusa/src/api/routes/admin/orders/update-order.js b/packages/medusa/src/api/routes/admin/orders/update-order.js deleted file mode 100644 index 56eab0bf3b..0000000000 --- a/packages/medusa/src/api/routes/admin/orders/update-order.js +++ /dev/null @@ -1,44 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "." - -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - email: Validator.string().email(), - billing_address: Validator.object(), - shipping_address: Validator.object(), - items: Validator.array(), - region: Validator.string(), - discounts: Validator.array(), - customer_id: Validator.string(), - payment_method: Validator.object().keys({ - provider_id: Validator.string(), - data: Validator.object(), - }), - shipping_method: Validator.array().items({ - provider_id: Validator.string(), - profile_id: Validator.string(), - price: Validator.number(), - data: Validator.object(), - items: Validator.array(), - }), - no_notification: Validator.boolean(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const orderService = req.scope.resolve("orderService") - - await orderService.update(id, value) - - const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ order }) -} diff --git a/packages/medusa/src/api/routes/admin/orders/update-order.ts b/packages/medusa/src/api/routes/admin/orders/update-order.ts new file mode 100644 index 0000000000..4c504fd02e --- /dev/null +++ b/packages/medusa/src/api/routes/admin/orders/update-order.ts @@ -0,0 +1,191 @@ +import { Transform, Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsEmail, + IsInt, + IsObject, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { defaultAdminOrdersFields, defaultAdminOrdersRelations } from "." +import { OrderService } from "../../../../services" +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /orders/{id} + * operationId: "PostOrdersOrder" + * summary: "Update an order" + * description: "Updates and order" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Order. + * requestBody: + * content: + * application/json: + * schema: + * properties: + * email: + * description: the email for the order + * type: string + * billing_address: + * description: Billing address + * anyOf: + * - $ref: "#/components/schemas/address + * shipping_address: + * description: Shipping address + * anyOf: + * - $ref: "#/components/schemas/address + * items: + * description: The Line Items for the order + * type: array + * region: + * description: Region where the order belongs + * type: string + * discounts: + * description: Discounts applied to the order + * type: array + * customer_id: + * description: id of the customer + * type: string + * payment_method: + * description: + * type: object + * properties: + * provider_id: + * type: string + * description: id of the payment provider + * data: + * description: Data relevant for the given payment method + * type: object + * shipping_method: + * description: The Shipping Method used for shipping the order. + * type: object + * properties: + * provider_id: + * type: string + * description: The id of the shipping provider. + * profile_id: + * type: string + * description: The id of the shipping profile. + * price: + * type: integer + * description: The price of the shipping. + * data: + * type: object + * description: Data relevant to the specific shipping method. + * items: + * type: array + * description: Items to ship + * no_notification: + * description: A flag to indicate if no notifications should be emitted related to the updated order. + * type: boolean + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/order" + */ + +export default async (req, res) => { + const { id } = req.params + + const value = await validator(AdminPostOrdersOrderReq, req.body) + + const orderService: OrderService = req.scope.resolve("orderService") + + await orderService.update(id, value) + + const order = await orderService.retrieve(id, { + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, + }) + + res.status(200).json({ order }) +} + +export class AdminPostOrdersOrderReq { + @IsEmail() + @IsOptional() + email?: string + + @IsOptional() + @ValidateNested() + @Type(() => AddressPayload) + billing_address?: AddressPayload + + @IsOptional() + @ValidateNested() + @Type(() => AddressPayload) + shipping_address?: AddressPayload + + @IsArray() + @IsOptional() + items?: object[] + + @IsString() + @IsOptional() + region?: string + + @IsArray() + @IsOptional() + discounts?: object[] + + @IsString() + @IsOptional() + customer_id?: string + + @IsOptional() + @ValidateNested() + @Type(() => PaymentMethod) + payment_method?: PaymentMethod + + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => ShippingMethod) + shipping_method?: ShippingMethod[] + + @IsBoolean() + @IsOptional() + no_notification?: boolean +} + +class PaymentMethod { + @IsString() + @IsOptional() + provider_id?: string + + @IsObject() + @IsOptional() + data?: object +} + +class ShippingMethod { + @IsString() + @IsOptional() + provider_id?: string + + @IsString() + @IsOptional() + profile_id?: string + + @IsInt() + @IsOptional() + price?: number + + @IsObject() + @IsOptional() + data?: object + + @IsArray() + @IsOptional() + items?: object[] +} diff --git a/packages/medusa/src/api/routes/admin/products/__tests__/create-product.js b/packages/medusa/src/api/routes/admin/products/__tests__/create-product.js index f7d9722bd5..b24e1780b7 100644 --- a/packages/medusa/src/api/routes/admin/products/__tests__/create-product.js +++ b/packages/medusa/src/api/routes/admin/products/__tests__/create-product.js @@ -210,7 +210,9 @@ describe("POST /admin/products", () => { it("returns error details", () => { expect(subject.body.type).toEqual("invalid_data") - expect(subject.body.message[0].message).toEqual(`"title" is required`) + expect(subject.body.message).toEqual( + expect.stringContaining(`title must be a string`) + ) }) }) }) diff --git a/packages/medusa/src/api/routes/admin/products/__tests__/list-products.js b/packages/medusa/src/api/routes/admin/products/__tests__/list-products.js index 1f50468872..80b4e4bcc1 100644 --- a/packages/medusa/src/api/routes/admin/products/__tests__/list-products.js +++ b/packages/medusa/src/api/routes/admin/products/__tests__/list-products.js @@ -1,8 +1,8 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { - ProductServiceMock, products, + ProductServiceMock, } from "../../../../../services/__mocks__/product" describe("GET /admin/products", () => { diff --git a/packages/medusa/src/api/routes/admin/products/__tests__/update-product.js b/packages/medusa/src/api/routes/admin/products/__tests__/update-product.js index 47980eed32..374b6374d9 100644 --- a/packages/medusa/src/api/routes/admin/products/__tests__/update-product.js +++ b/packages/medusa/src/api/routes/admin/products/__tests__/update-product.js @@ -33,11 +33,11 @@ describe("POST /admin/products/:id", () => { expect(ProductServiceMock.update).toHaveBeenCalledTimes(1) expect(ProductServiceMock.update).toHaveBeenCalledWith( IdMap.getId("product1"), - { + expect.objectContaining({ title: "Product 1", description: "Updated test description", handle: "handle", - } + }) ) }) }) diff --git a/packages/medusa/src/api/routes/admin/products/__tests__/update-variant.js b/packages/medusa/src/api/routes/admin/products/__tests__/update-variant.js index efb7aec556..5ffbdac1f4 100644 --- a/packages/medusa/src/api/routes/admin/products/__tests__/update-variant.js +++ b/packages/medusa/src/api/routes/admin/products/__tests__/update-variant.js @@ -44,7 +44,7 @@ describe("POST /admin/products/:id/variants/:variantId", () => { expect(ProductVariantServiceMock.update).toHaveBeenCalledTimes(1) expect(ProductVariantServiceMock.update).toHaveBeenCalledWith( IdMap.getId("variant1"), - { + expect.objectContaining({ title: "hi", prices: [ { @@ -56,7 +56,7 @@ describe("POST /admin/products/:id/variants/:variantId", () => { amount: 100, }, ], - } + }) ) }) diff --git a/packages/medusa/src/api/routes/admin/products/add-option.js b/packages/medusa/src/api/routes/admin/products/add-option.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/products/add-option.js rename to packages/medusa/src/api/routes/admin/products/add-option.ts index cfe4ba273a..cfde9cd338 100644 --- a/packages/medusa/src/api/routes/admin/products/add-option.js +++ b/packages/medusa/src/api/routes/admin/products/add-option.ts @@ -1,10 +1,13 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { IsString } from "class-validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id}/options * operationId: "PostProductsProductOptions" * summary: "Add an Option" + * x-authenticated: true * description: "Adds a Product Option to a Product" * parameters: * - (path) id=* {string} The id of the Product. @@ -12,6 +15,8 @@ import { defaultRelations, defaultFields } from "./" * content: * application/json: * schema: + * required: + * - title * properties: * title: * description: "The title the Product Option will be identified by i.e. \"Size\"" @@ -31,21 +36,23 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().required(), - }) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const validated = await validator( + AdminPostProductsProductOptionsReq, + req.body + ) - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") - await productService.addOption(id, value.title) + await productService.addOption(id, validated.title) const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +class AdminPostProductsProductOptionsReq { + @IsString() + title: string +} diff --git a/packages/medusa/src/api/routes/admin/products/create-product.js b/packages/medusa/src/api/routes/admin/products/create-product.ts similarity index 62% rename from packages/medusa/src/api/routes/admin/products/create-product.js rename to packages/medusa/src/api/routes/admin/products/create-product.ts index 86c6004ff1..fd08d38fd7 100644 --- a/packages/medusa/src/api/routes/admin/products/create-product.js +++ b/packages/medusa/src/api/routes/admin/products/create-product.ts @@ -1,15 +1,46 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsEnum, + IsInt, + IsNumber, + IsObject, + IsOptional, + IsString, + Validate, + ValidateNested, +} from "class-validator" +import { EntityManager } from "typeorm" +import { + defaultAdminProductFields, + defaultAdminProductRelations, + ProductStatus, +} from "." +import { + ProductService, + ProductVariantService, + ShippingProfileService, +} from "../../../../services" +import { XorConstraint } from "../../../../types/validators/xor" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products * operationId: "PostProducts" * summary: "Create a Product" + * x-authenticated: true * description: "Creates a Product" * requestBody: * content: * application/json: + * required: + * - title + * - subtitle + * - description * schema: + * required: + * - title * properties: * title: * description: "The title of the Product" @@ -182,105 +213,30 @@ import { defaultRelations, defaultFields } from "." * $ref: "#/components/schemas/product" */ export default async (req, res) => { - const schema = Validator.object().keys({ - title: Validator.string().required(), - subtitle: Validator.string().allow(""), - description: Validator.string().allow(""), - is_giftcard: Validator.boolean().default(false), - discountable: Validator.boolean().default(true), - images: Validator.array().items(Validator.string()).optional(), - thumbnail: Validator.string().optional(), - handle: Validator.string().optional(), - status: Validator.string() - .valid("proposed", "draft", "published", "rejected") - .default("draft"), - type: Validator.object() - .keys({ - id: Validator.string().optional(), - value: Validator.string().required(), - }) - .allow(null) - .optional(), - collection_id: Validator.string().allow(null).optional(), - tags: Validator.array() - .items({ - id: Validator.string().optional(), - value: Validator.string().required(), - }) - .optional(), - options: Validator.array().items({ - title: Validator.string().required(), - }), - variants: Validator.array().items({ - title: Validator.string().required(), - sku: Validator.string().allow(null), - ean: Validator.string().allow(null), - upc: Validator.string().allow(null), - barcode: Validator.string().allow(null), - hs_code: Validator.string().allow(null), - inventory_quantity: Validator.number().default(0), - allow_backorder: Validator.boolean().optional(), - manage_inventory: Validator.boolean().optional(), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - origin_country: Validator.string().optional().allow("").allow(null), - mid_code: Validator.string().optional().allow("").allow(null), - material: Validator.string().optional().allow("").allow(null), - metadata: Validator.object().optional(), - prices: Validator.array() - .items( - Validator.object() - .keys({ - region_id: Validator.string(), - currency_code: Validator.string(), - amount: Validator.number().integer().required(), - sale_amount: Validator.number().optional(), - }) - .xor("region_id", "currency_code") - ) - .required(), - options: Validator.array() - .items({ - value: Validator.string().required(), - }) - .default([]), - }), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - hs_code: Validator.string().optional().allow(""), - origin_country: Validator.string().optional().allow(""), - mid_code: Validator.string().optional().allow(""), - material: Validator.string().optional().allow(""), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostProductsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const productService: ProductService = req.scope.resolve("productService") + const productVariantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + const shippingProfileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) - const productService = req.scope.resolve("productService") - const productVariantService = req.scope.resolve("productVariantService") - const shippingProfileService = req.scope.resolve("shippingProfileService") - - const entityManager = req.scope.resolve("manager") + const entityManager: EntityManager = req.scope.resolve("manager") let newProduct await entityManager.transaction(async (manager) => { - const { variants } = value - delete value.variants + const { variants } = validated + delete validated.variants - if (!value.thumbnail && value.images && value.images.length) { - value.thumbnail = value.images[0] + if (!validated.thumbnail && validated.images && validated.images.length) { + validated.thumbnail = validated.images[0] } let shippingProfile // Get default shipping profile - if (value.is_giftcard) { + if (validated.is_giftcard) { shippingProfile = await shippingProfileService.retrieveGiftCardDefault() } else { shippingProfile = await shippingProfileService.retrieveDefault() @@ -288,25 +244,27 @@ export default async (req, res) => { newProduct = await productService .withTransaction(manager) - .create({ ...value, profile_id: shippingProfile.id }) + .create({ ...validated, profile_id: shippingProfile.id }) if (variants) { for (const [i, variant] of variants.entries()) { - variant.variant_rank = i + variant["variant_rank"] = i } - const optionIds = value.options.map( - (o) => newProduct.options.find((newO) => newO.title === o.title).id - ) + const optionIds = + validated?.options?.map( + (o) => newProduct.options.find((newO) => newO.title === o.title).id + ) || [] await Promise.all( variants.map(async (v) => { const variant = { ...v, - options: v.options.map((o, index) => ({ - ...o, - option_id: optionIds[index], - })), + options: + v?.options?.map((o, index) => ({ + ...o, + option_id: optionIds[index], + })) || [], } await productVariantService @@ -318,9 +276,230 @@ export default async (req, res) => { }) const product = await productService.retrieve(newProduct.id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +class ProductTypeReq { + @IsString() + @IsOptional() + id?: string + + @IsString() + value: string +} + +class ProductTagReq { + @IsString() + @IsOptional() + id?: string + + @IsString() + value: string +} + +class ProductVariantOptionReq { + @IsString() + value: string +} + +class ProductOptionReq { + @IsString() + title: string +} + +class ProductVariantPricesReq { + @Validate(XorConstraint, ["currency_code"]) + region_id?: string + + @Validate(XorConstraint, ["region_id"]) + currency_code?: string + + @IsInt() + amount: number + + @IsOptional() + @IsInt() + sale_amount?: number +} + +class ProductVariantReq { + @IsString() + title: string + + @IsString() + @IsOptional() + sku?: string + + @IsString() + @IsOptional() + ean?: string + + @IsString() + @IsOptional() + upc?: string + + @IsString() + @IsOptional() + barcode?: string + + @IsString() + @IsOptional() + hs_code?: string + + @IsNumber() + @IsOptional() + inventory_quantity = 0 + + @IsBoolean() + @IsOptional() + allow_backorder?: boolean + + @IsBoolean() + @IsOptional() + manage_inventory?: boolean + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => ProductVariantPricesReq) + prices: ProductVariantPricesReq[] + + @IsOptional() + @Type(() => ProductVariantOptionReq) + @ValidateNested({ each: true }) + @IsArray() + options?: ProductVariantOptionReq[] = [] +} + +export class AdminPostProductsReq { + @IsString() + title: string + + @IsString() + @IsOptional() + subtitle?: string + + @IsString() + @IsOptional() + description?: string + + @IsBoolean() + is_giftcard = false + + @IsBoolean() + discountable = true + + @IsArray() + @IsOptional() + images?: string[] + + @IsString() + @IsOptional() + thumbnail?: string + + @IsString() + @IsOptional() + handle?: string + + @IsOptional() + @IsEnum(ProductStatus) + status?: ProductStatus = ProductStatus.DRAFT + + @IsOptional() + @Type(() => ProductTypeReq) + @ValidateNested() + type?: ProductTypeReq + + @IsOptional() + @IsString() + collection_id?: string + + @IsOptional() + @Type(() => ProductTagReq) + @ValidateNested({ each: true }) + @IsArray() + tags?: ProductTagReq + + @IsOptional() + @Type(() => ProductOptionReq) + @ValidateNested({ each: true }) + @IsArray() + options?: ProductOptionReq[] + + @IsOptional() + @Type(() => ProductVariantReq) + @ValidateNested({ each: true }) + @IsArray() + variants?: ProductVariantReq[] + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + hs_code?: string + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/products/create-variant.js b/packages/medusa/src/api/routes/admin/products/create-variant.ts similarity index 61% rename from packages/medusa/src/api/routes/admin/products/create-variant.js rename to packages/medusa/src/api/routes/admin/products/create-variant.ts index d6ad39e100..07a86e6e9d 100644 --- a/packages/medusa/src/api/routes/admin/products/create-variant.js +++ b/packages/medusa/src/api/routes/admin/products/create-variant.ts @@ -1,17 +1,36 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsInt, + IsNumber, + IsObject, + IsOptional, + IsString, + Validate, + ValidateNested, +} from "class-validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService, ProductVariantService } from "../../../../services" +import { XorConstraint } from "../../../../types/validators/xor" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id}/variants * operationId: "PostProductsProductVariants" * summary: "Create a Product Variant" * description: "Creates a Product Variant. Each Product Variant must have a unique combination of Product Option Values." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * requestBody: * content: * application/json: * schema: + * required: + * - title + * - prices + * - options * properties: * title: * description: The title to identify the Product Variant by. @@ -105,58 +124,125 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().required(), - sku: Validator.string().allow(""), - ean: Validator.string().allow(""), - upc: Validator.string().allow(""), - barcode: Validator.string().allow(""), - hs_code: Validator.string().allow(""), - inventory_quantity: Validator.number().default(0), - allow_backorder: Validator.boolean().optional(), - manage_inventory: Validator.boolean().optional(), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - origin_country: Validator.string().allow(""), - mid_code: Validator.string().allow(""), - material: Validator.string().allow(""), - metadata: Validator.object().optional(), - prices: Validator.array() - .items( - Validator.object() - .keys({ - region_id: Validator.string().empty(null), - currency_code: Validator.string().required(), - amount: Validator.number().integer().required(), - sale_amount: Validator.number().optional(), - }) - .xor("region_id", "currency_code") - ) - .required(), - options: Validator.array() - .items({ - option_id: Validator.string().required(), - value: Validator.string().required(), - }) - .default([]), - }) + const validated = await validator( + AdminPostProductsProductVariantsReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const productVariantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + const productService: ProductService = req.scope.resolve("productService") - const productVariantService = req.scope.resolve("productVariantService") - const productService = req.scope.resolve("productService") - - await productVariantService.create(id, value) + await productVariantService.create(id, validated) const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +class ProductVariantOptionReq { + @IsString() + value: string + + @IsString() + option_id: string +} + +class ProductVariantPricesReq { + @Validate(XorConstraint, ["currency_code"]) + region_id?: string + + @Validate(XorConstraint, ["region_id"]) + currency_code?: string + + @IsInt() + amount: number + + @IsOptional() + @IsInt() + sale_amount?: number +} + +export class AdminPostProductsProductVariantsReq { + @IsString() + title: string + + @IsString() + @IsOptional() + sku?: string + + @IsString() + @IsOptional() + ean?: string + + @IsString() + @IsOptional() + upc?: string + + @IsString() + @IsOptional() + barcode?: string + + @IsString() + @IsOptional() + hs_code?: string + + @IsNumber() + @IsOptional() + inventory_quantity = 0 + + @IsBoolean() + @IsOptional() + allow_backorder?: boolean + + @IsBoolean() + @IsOptional() + manage_inventory?: boolean + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => ProductVariantPricesReq) + prices: ProductVariantPricesReq[] + + @IsOptional() + @Type(() => ProductVariantOptionReq) + @ValidateNested({ each: true }) + @IsArray() + options: ProductVariantOptionReq[] = [] +} diff --git a/packages/medusa/src/api/routes/admin/products/delete-option.js b/packages/medusa/src/api/routes/admin/products/delete-option.ts similarity index 80% rename from packages/medusa/src/api/routes/admin/products/delete-option.js rename to packages/medusa/src/api/routes/admin/products/delete-option.ts index 2e5e4ce25e..b0349d2c3c 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-option.js +++ b/packages/medusa/src/api/routes/admin/products/delete-option.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "." +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService } from "../../../../services" /** * @oas [delete] /products/{id}/options/{option_id} * operationId: "DeleteProductsProductOptionsOption" * summary: "Delete a Product Option" * description: "Deletes a Product Option. Before a Product Option can be deleted all Option Values for the Product Option must be the same. You may, for example, have to delete some of your variants prior to deleting the Product Option" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * - (path) option_id=* {string} The id of the Product Option. @@ -31,11 +33,13 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, option_id } = req.params - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") + await productService.deleteOption(id, option_id) + const data = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ diff --git a/packages/medusa/src/api/routes/admin/products/delete-product.js b/packages/medusa/src/api/routes/admin/products/delete-product.ts similarity index 84% rename from packages/medusa/src/api/routes/admin/products/delete-product.js rename to packages/medusa/src/api/routes/admin/products/delete-product.ts index 5b87f1d90b..5977c987d8 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-product.js +++ b/packages/medusa/src/api/routes/admin/products/delete-product.ts @@ -1,8 +1,11 @@ +import { ProductService } from "../../../../services" + /** * @oas [delete] /products/{id} * operationId: "DeleteProductsProduct" * summary: "Delete a Product" * description: "Deletes a Product and it's associated Product Variants." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * tags: @@ -26,7 +29,7 @@ export default async (req, res) => { const { id } = req.params - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") await productService.delete(id) res.json({ id, diff --git a/packages/medusa/src/api/routes/admin/products/delete-variant.js b/packages/medusa/src/api/routes/admin/products/delete-variant.ts similarity index 70% rename from packages/medusa/src/api/routes/admin/products/delete-variant.js rename to packages/medusa/src/api/routes/admin/products/delete-variant.ts index dec7a36628..17740cc435 100644 --- a/packages/medusa/src/api/routes/admin/products/delete-variant.js +++ b/packages/medusa/src/api/routes/admin/products/delete-variant.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "." +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService, ProductVariantService } from "../../../../services" /** * @oas [delete] /products/{id}/variants/{variant_id} * operationId: "DeleteProductsProductVariantsVariant" * summary: "Delete a Product Variant" * description: "Deletes a Product Variant." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * - (path) variant_id=* {string} The id of the Product Variant. @@ -29,14 +31,16 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id, variant_id } = req.params - const productVariantService = req.scope.resolve("productVariantService") - const productService = req.scope.resolve("productService") + const productVariantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + const productService: ProductService = req.scope.resolve("productService") await productVariantService.delete(variant_id) const data = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ diff --git a/packages/medusa/src/api/routes/admin/products/get-product.js b/packages/medusa/src/api/routes/admin/products/get-product.ts similarity index 65% rename from packages/medusa/src/api/routes/admin/products/get-product.js rename to packages/medusa/src/api/routes/admin/products/get-product.ts index 4dcb6f589e..60d3145ac0 100644 --- a/packages/medusa/src/api/routes/admin/products/get-product.js +++ b/packages/medusa/src/api/routes/admin/products/get-product.ts @@ -1,10 +1,12 @@ -import { defaultFields, defaultRelations } from "./" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService } from "../../../../services" /** * @oas [get] /products/{id} * operationId: "GetProductsProduct" * summary: "Retrieve a Product" * description: "Retrieves a Product." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * tags: @@ -22,11 +24,11 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) diff --git a/packages/medusa/src/api/routes/admin/products/get-variants.js b/packages/medusa/src/api/routes/admin/products/get-variants.ts similarity index 82% rename from packages/medusa/src/api/routes/admin/products/get-variants.js rename to packages/medusa/src/api/routes/admin/products/get-variants.ts index 09fc7273e6..450147802d 100644 --- a/packages/medusa/src/api/routes/admin/products/get-variants.js +++ b/packages/medusa/src/api/routes/admin/products/get-variants.ts @@ -1,8 +1,11 @@ +import { ProductService } from "../../../../services" + /** * @oas [get] /products/{id}/variants * operationId: "GetProductsProductVariants" * summary: "List a Product's Product Variants" * description: "Retrieves a list of the Product Variants associated with a Product." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * tags: @@ -22,7 +25,7 @@ export default async (req, res) => { const { id } = req.params - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") const variants = await productService.retrieveVariants(id) res.json({ variants }) diff --git a/packages/medusa/src/api/routes/admin/products/index.js b/packages/medusa/src/api/routes/admin/products/index.ts similarity index 71% rename from packages/medusa/src/api/routes/admin/products/index.js rename to packages/medusa/src/api/routes/admin/products/index.ts index 54b1deb17a..88488165b7 100644 --- a/packages/medusa/src/api/routes/admin/products/index.js +++ b/packages/medusa/src/api/routes/admin/products/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import { Product } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -55,7 +57,7 @@ export default (app) => { return app } -export const defaultRelations = [ +export const defaultAdminProductRelations = [ "variants", "variants.prices", "variants.options", @@ -66,7 +68,7 @@ export const defaultRelations = [ "collection", ] -export const defaultFields = [ +export const defaultAdminProductFields = [ "id", "title", "subtitle", @@ -91,7 +93,7 @@ export const defaultFields = [ "metadata", ] -export const allowedFields = [ +export const allowedAdminProductFields = [ "id", "title", "subtitle", @@ -116,7 +118,7 @@ export const allowedFields = [ "metadata", ] -export const allowedRelations = [ +export const allowedAdminProductRelations = [ "variants", "variants.prices", "images", @@ -126,17 +128,37 @@ export const allowedRelations = [ "collection", ] -export const filterableFields = [ - "id", - "status", - "collection_id", - "tags", - "title", - "description", - "handle", - "is_giftcard", - "type", - "created_at", - "updated_at", - "deleted_at", -] +export enum ProductStatus { + DRAFT = "draft", + PROPOSED = "proposed", + PUBLISHED = "published", + REJECTED = "rejected", +} + +export type AdminProductsDeleteOptionRes = { + option_id: string + object: "option" + deleted: boolean + product: Product +} + +export type AdminProductsDeleteVariantRes = { + variant_id: string + object: "product-variant" + deleted: boolean + product: Product +} + +export type AdminProductsDeleteRes = { + id: string + object: "product" + deleted: boolean +} + +export type AdminProductsListRes = PaginatedResponse & { + products: Product[] +} + +export type AdminProductsRes = { + product: Product +} diff --git a/packages/medusa/src/api/routes/admin/products/list-products.js b/packages/medusa/src/api/routes/admin/products/list-products.js deleted file mode 100644 index 47935a5a58..0000000000 --- a/packages/medusa/src/api/routes/admin/products/list-products.js +++ /dev/null @@ -1,91 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations, filterableFields } from "./" - -/** - * @oas [get] /products - * operationId: "GetProducts" - * summary: "List Product" - * description: "Retrieves a list of Product" - * tags: - * - Product - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * count: - * description: The number of Products. - * type: integer - * offset: - * description: The offset of the Product query. - * type: integer - * limit: - * description: The limit of the Product query. - * type: integer - * products: - * type: array - * items: - * $ref: "#/components/schemas/product" - */ -export default async (req, res) => { - const schema = Validator.productFilter() - - const { value, error } = schema.validate(req.query) - - if (error) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - JSON.stringify(error.details) - ) - } - - const productService = req.scope.resolve("productService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - let includeFields = [] - if ("fields" in req.query) { - includeFields = req.query.fields.split(",") - } - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - } - - for (const k of filterableFields) { - if (k in value) { - selector[k] = value[k] - } - } - - if (selector.status?.indexOf("null") > -1) { - selector.status.splice(selector.status.indexOf("null"), 1) - if (selector.status.length === 0) { - delete selector.status - } - } - - const listConfig = { - select: includeFields.length ? includeFields : defaultFields, - relations: expandFields.length ? expandFields : defaultRelations, - skip: offset, - take: limit, - } - - const [products, count] = await productService.listAndCount( - selector, - listConfig - ) - - res.json({ products, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/products/list-products.ts b/packages/medusa/src/api/routes/admin/products/list-products.ts new file mode 100644 index 0000000000..3fece75fd3 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/products/list-products.ts @@ -0,0 +1,198 @@ +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsEnum, + IsNumber, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import * as _ from "lodash" +import { identity } from "lodash" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService } from "../../../../services" +import { DateComparisonOperator } from "../../../../types/common" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /products + * operationId: "GetProducts" + * summary: "List Product" + * description: "Retrieves a list of Product" + * x-authenticated: true + * parameters: + * - (query) q {string} Query used for searching products. + * - (query) id {string} Id of the product to search for. + * - (query) status {string[]} Status to search for. + * - (query) collection_id {string[]} Collection ids to search for. + * - (query) tags {string[]} Tags to search for. + * - (query) title {string} to search for. + * - (query) description {string} to search for. + * - (query) handle {string} to search for. + * - (query) is_giftcard {string} Search for giftcards using is_giftcard=true. + * - (query) type {string} to search for. + * - (query) order {string} to retrieve products in. + * - (query) deleted_at {DateComparisonOperator} Date comparison for when resulting products was deleted, i.e. less than, greater than etc. + * - (query) created_at {DateComparisonOperator} Date comparison for when resulting products was created, i.e. less than, greater than etc. + * - (query) updated_at {DateComparisonOperator} Date comparison for when resulting products was updated, i.e. less than, greater than etc. + * - (query) offset {string} How many products to skip in the result. + * - (query) limit {string} Limit the number of products returned. + * - (query) expand {string} (Comma separated) Which fields should be expanded in each product of the result. + * - (query) fields {string} (Comma separated) Which fields should be included in each product of the result. + * tags: + * - Product + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * count: + * description: The number of Products. + * type: integer + * offset: + * description: The offset of the Product query. + * type: integer + * limit: + * description: The limit of the Product query. + * type: integer + * products: + * type: array + * items: + * $ref: "#/components/schemas/product" + */ +export default async (req, res) => { + const validatedParams = await validator(AdminGetProductsParams, req.query) + + const productService: ProductService = req.scope.resolve("productService") + + let includeFields: string[] = [] + if (validatedParams.fields) { + includeFields = validatedParams.fields!.split(",") + } + + let expandFields: string[] = [] + if (validatedParams.expand) { + expandFields = validatedParams.expand!.split(",") + } + + const listConfig = { + select: includeFields.length ? includeFields : defaultAdminProductFields, + relations: expandFields.length + ? expandFields + : defaultAdminProductRelations, + skip: validatedParams.offset, + take: validatedParams.limit, + } + + const filterableFields = _.omit(validatedParams, [ + "limit", + "offset", + "expand", + "fields", + "order", + ]) + + const [products, count] = await productService.listAndCount( + _.pickBy(filterableFields, identity), + listConfig + ) + + res.json({ + products, + count, + offset: validatedParams.offset, + limit: validatedParams.limit, + }) +} + +export enum ProductStatus { + DRAFT = "draft", + PROPOSED = "proposed", + PUBLISHED = "published", + REJECTED = "rejected", +} + +export class AdminGetProductsPaginationParams { + @IsNumber() + @IsOptional() + @Type(() => Number) + offset?: number = 0 + + @IsNumber() + @IsOptional() + @Type(() => Number) + limit?: number = 50 + + @IsString() + @IsOptional() + expand?: string + + @IsString() + @IsOptional() + fields?: string +} + +export class AdminGetProductsParams extends AdminGetProductsPaginationParams { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + q?: string + + @IsOptional() + @IsEnum(ProductStatus, { each: true }) + status?: ProductStatus[] + + @IsArray() + @IsOptional() + collection_id?: string[] + + @IsArray() + @IsOptional() + tags?: string[] + + @IsString() + @IsOptional() + title?: string + + @IsString() + @IsOptional() + description?: string + + @IsString() + @IsOptional() + handle?: string + + @IsBoolean() + @IsOptional() + @Type(() => Boolean) + is_giftcard?: string + + @IsString() + @IsOptional() + type?: string + + @IsString() + @IsOptional() + order?: string + + @IsOptional() + @ValidateNested() + @Type(() => DateComparisonOperator) + created_at?: DateComparisonOperator + + @IsOptional() + @ValidateNested() + @Type(() => DateComparisonOperator) + updated_at?: DateComparisonOperator + + @ValidateNested() + @IsOptional() + @Type(() => DateComparisonOperator) + deleted_at?: DateComparisonOperator +} diff --git a/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.js b/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.js deleted file mode 100644 index bb8ed39896..0000000000 --- a/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.js +++ /dev/null @@ -1,7 +0,0 @@ -export default async (req, res) => { - const productService = req.scope.resolve("productService") - - const tags = await productService.listTagsByUsage() - - res.json({ tags }) -} diff --git a/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts b/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts new file mode 100644 index 0000000000..ec83366d5e --- /dev/null +++ b/packages/medusa/src/api/routes/admin/products/list-tag-usage-count.ts @@ -0,0 +1,9 @@ +import { ProductService } from "../../../../services" + +export default async (req, res) => { + const productService: ProductService = req.scope.resolve("productService") + + const tags = await productService.listTagsByUsage() + + res.json({ tags }) +} diff --git a/packages/medusa/src/api/routes/admin/products/list-types.js b/packages/medusa/src/api/routes/admin/products/list-types.ts similarity index 78% rename from packages/medusa/src/api/routes/admin/products/list-types.js rename to packages/medusa/src/api/routes/admin/products/list-types.ts index 1c0cc5d603..301858b4ef 100644 --- a/packages/medusa/src/api/routes/admin/products/list-types.js +++ b/packages/medusa/src/api/routes/admin/products/list-types.ts @@ -1,8 +1,11 @@ +import { ProductService } from "../../../../services" + /** * @oas [get] /products/types * operationId: "GetProductsTypes" * summary: "List Product Types" * description: "Retrieves a list of Product Types." + * x-authenticated: true * tags: * - Product * responses: @@ -18,7 +21,7 @@ * $ref: "#/components/schemas/product_type" */ export default async (req, res) => { - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") const types = await productService.listTypes() diff --git a/packages/medusa/src/api/routes/admin/products/set-metadata.js b/packages/medusa/src/api/routes/admin/products/set-metadata.js deleted file mode 100644 index a25ae4562b..0000000000 --- a/packages/medusa/src/api/routes/admin/products/set-metadata.js +++ /dev/null @@ -1,28 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - key: Validator.string().required(), - value: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const productService = req.scope.resolve("productService") - await productService.update(id, { - metadata: { [value.key]: value.value }, - }) - - const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ product }) -} diff --git a/packages/medusa/src/api/routes/admin/products/set-metadata.ts b/packages/medusa/src/api/routes/admin/products/set-metadata.ts new file mode 100644 index 0000000000..8046aa7f5c --- /dev/null +++ b/packages/medusa/src/api/routes/admin/products/set-metadata.ts @@ -0,0 +1,66 @@ +import { IsString } from "class-validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /products/{id}/metadata + * operationId: "PostProductsProductMetadata" + * summary: "Set Product metadata" + * description: "Set metadata key/value pair for Product" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Product. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - key + * - value + * properties: + * key: + * description: The metadata key + * type: string + * value: + * description: The metadata value + * type: string + * tags: + * - Product + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * product: + * $ref: "#/components/schemas/product" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator( + AdminPostProductsProductMetadataReq, + req.body + ) + + const productService = req.scope.resolve("productService") + await productService.update(id, { + metadata: { [validated.key]: validated.value }, + }) + + const product = await productService.retrieve(id, { + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, + }) + + res.status(200).json({ product }) +} + +export class AdminPostProductsProductMetadataReq { + @IsString() + key: string + + @IsString() + value: string +} diff --git a/packages/medusa/src/api/routes/admin/products/update-option.js b/packages/medusa/src/api/routes/admin/products/update-option.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/products/update-option.js rename to packages/medusa/src/api/routes/admin/products/update-option.ts index c1c40e53e1..5d6f21378b 100644 --- a/packages/medusa/src/api/routes/admin/products/update-option.js +++ b/packages/medusa/src/api/routes/admin/products/update-option.ts @@ -1,17 +1,22 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { IsString } from "class-validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id}/options/{option_id} * operationId: "PostProductsProductOptionsOption" * summary: "Update a Product Option." * description: "Updates a Product Option" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * - (path) option_id=* {string} The id of the Product Option. * requestBody: * content: * application/json: + * required: + * - title * schema: * properties: * title: @@ -32,23 +37,24 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, option_id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().required(), - }) + const validated = await validator( + AdminPostProductsProductOptionsOption, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const productService: ProductService = req.scope.resolve("productService") - const productService = req.scope.resolve("productService") - - await productService.updateOption(id, option_id, value) + await productService.updateOption(id, option_id, validated) const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +export class AdminPostProductsProductOptionsOption { + @IsString() + title: string +} diff --git a/packages/medusa/src/api/routes/admin/products/update-product.js b/packages/medusa/src/api/routes/admin/products/update-product.ts similarity index 66% rename from packages/medusa/src/api/routes/admin/products/update-product.js rename to packages/medusa/src/api/routes/admin/products/update-product.ts index ae6a2f19b3..59383516b7 100644 --- a/packages/medusa/src/api/routes/admin/products/update-product.js +++ b/packages/medusa/src/api/routes/admin/products/update-product.ts @@ -1,11 +1,33 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "." +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsEnum, + IsInt, + IsNumber, + IsObject, + IsOptional, + IsString, + NotEquals, + Validate, + ValidateIf, + ValidateNested, +} from "class-validator" +import { + defaultAdminProductFields, + defaultAdminProductRelations, + ProductStatus, +} from "." +import { ProductService } from "../../../../services" +import { XorConstraint } from "../../../../types/validators/xor" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id} * operationId: "PostProductsProduct" * summary: "Update a Product" * description: "Updates a Product" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * requestBody: @@ -186,100 +208,235 @@ import { defaultRelations, defaultFields } from "." export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().optional(), - subtitle: Validator.string().optional().allow(null, ""), - description: Validator.string().optional(), - discountable: Validator.boolean().optional(), - status: Validator.string().valid( - "proposed", - "draft", - "published", - "rejected" - ), - type: Validator.object() - .keys({ - id: Validator.string().optional(), - value: Validator.string().required(), - }) - .allow(null) - .optional(), - collection_id: Validator.string().allow(null).optional(), - tags: Validator.array() - .items({ - id: Validator.string().optional(), - value: Validator.string().required(), - }) - .optional(), - handle: Validator.string().optional(), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - origin_country: Validator.string().allow(null, ""), - hs_code: Validator.string().allow(null, ""), - mid_code: Validator.string().allow(null, ""), - material: Validator.string().allow(null, ""), - images: Validator.array().items(Validator.string()).optional().optional(), - thumbnail: Validator.string().optional(), - variants: Validator.array() - .items({ - id: Validator.string().optional(), - title: Validator.string().allow(null), - sku: Validator.string().allow(null), - ean: Validator.string().allow(null), - barcode: Validator.string().allow(null), - prices: Validator.array().items( - Validator.object() - .keys({ - region_id: Validator.string(), - currency_code: Validator.string(), - amount: Validator.number().integer().required(), - sale_amount: Validator.number().optional(), - }) - .xor("region_id", "currency_code") - ), - options: Validator.array().items({ - option_id: Validator.string().required(), - value: Validator.alternatives( - Validator.string(), - Validator.number() - ).required(), - }), - inventory_quantity: Validator.number().allow(null), - allow_backorder: Validator.boolean().allow(null), - manage_inventory: Validator.boolean().allow(null), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - hs_code: Validator.string().optional().allow(null, ""), - origin_country: Validator.string().allow(null, ""), - mid_code: Validator.string().allow(null, ""), - material: Validator.string().allow(null, ""), - metadata: Validator.object().optional(), - upc: Validator.string().allow(null), - }) - .optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostProductsProductReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const productService: ProductService = req.scope.resolve("productService") - const productService = req.scope.resolve("productService") - const entityManager = req.scope.resolve("manager") - - await entityManager.transaction(async (manager) => { - await productService.withTransaction(manager).update(id, value) - }) + await productService.update(id, validated) const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +class ProductTypeReq { + @IsString() + @IsOptional() + id?: string + + @IsString() + value: string +} + +class ProductTagReq { + @IsString() + @IsOptional() + id?: string + + @IsString() + value: string +} + +class ProductVariantOptionReq { + @IsString() + value: string + + @IsString() + option_id: string +} + +class ProductVariantPricesReq { + @Validate(XorConstraint, ["currency_code"]) + region_id?: string + + @Validate(XorConstraint, ["region_id"]) + currency_code?: string + + @IsInt() + amount: number + + @IsOptional() + @IsInt() + sale_amount?: number +} + +class ProductVariantReq { + @IsString() + @IsOptional() + id?: string + + @IsString() + @IsOptional() + title?: string + + @IsString() + @IsOptional() + sku?: string + + @IsString() + @IsOptional() + ean?: string + + @IsString() + @IsOptional() + upc?: string + + @IsString() + @IsOptional() + barcode?: string + + @IsString() + @IsOptional() + hs_code?: string + + @IsInt() + @IsOptional() + inventory_quantity?: number + + @IsBoolean() + @IsOptional() + allow_backorder?: boolean + + @IsBoolean() + @IsOptional() + manage_inventory?: boolean + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object + + @IsArray() + @IsOptional() + @ValidateNested({ each: true }) + @Type(() => ProductVariantPricesReq) + prices: ProductVariantPricesReq[] + + @IsOptional() + @Type(() => ProductVariantOptionReq) + @ValidateNested({ each: true }) + @IsArray() + options?: ProductVariantOptionReq[] = [] +} + +export class AdminPostProductsProductReq { + @IsString() + @IsOptional() + title?: string + + @IsString() + @IsOptional() + subtitle?: string + + @IsString() + @IsOptional() + description?: string + + @IsBoolean() + @IsOptional() + discountable?: boolean + + @IsArray() + @IsOptional() + images: string[] + + @IsString() + @IsOptional() + thumbnail?: string + + @IsString() + @IsOptional() + handle?: string + + @IsEnum(ProductStatus) + @NotEquals(null) + @ValidateIf((object, value) => value !== undefined) + status?: ProductStatus + + @IsOptional() + @Type(() => ProductTypeReq) + @ValidateNested() + type?: ProductTypeReq + + @IsOptional() + @IsString() + collection_id?: string + + @IsOptional() + @Type(() => ProductTagReq) + @ValidateNested({ each: true }) + @IsArray() + tags?: ProductTagReq[] + + @IsOptional() + @Type(() => ProductVariantReq) + @ValidateNested({ each: true }) + @IsArray() + variants?: ProductVariantReq[] + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + hs_code?: string + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/products/update-variant.js b/packages/medusa/src/api/routes/admin/products/update-variant.ts similarity index 62% rename from packages/medusa/src/api/routes/admin/products/update-variant.js rename to packages/medusa/src/api/routes/admin/products/update-variant.ts index b70a8a455e..7a0cba8a7c 100644 --- a/packages/medusa/src/api/routes/admin/products/update-variant.js +++ b/packages/medusa/src/api/routes/admin/products/update-variant.ts @@ -1,11 +1,26 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsBoolean, + IsInt, + IsNumber, + IsObject, + IsOptional, + IsString, + Validate, + ValidateNested, +} from "class-validator" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import { ProductService, ProductVariantService } from "../../../../services" +import { XorConstraint } from "../../../../types/validators/xor" +import { validator } from "../../../../utils/validator" /** * @oas [post] /products/{id}/variants/{variant_id} * operationId: "PostProductsProductVariantsVariant" * summary: "Update a Product Variant" * description: "Update a Product Variant." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Product. * - (path) variant_id=* {string} The id of the Product Variant. @@ -105,56 +120,130 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { id, variant_id } = req.params - const schema = Validator.object().keys({ - title: Validator.string().optional(), - sku: Validator.string().optional(), - ean: Validator.string().optional(), - barcode: Validator.string().optional(), - prices: Validator.array().items( - Validator.object() - .keys({ - region_id: Validator.string().empty(null), - currency_code: Validator.string(), - amount: Validator.number().integer().required(), - sale_amount: Validator.number().optional(), - }) - .xor("region_id", "currency_code") - ), - options: Validator.array().items({ - option_id: Validator.string().required(), - value: Validator.alternatives( - Validator.string(), - Validator.number() - ).required(), - }), - inventory_quantity: Validator.number().optional(), - allow_backorder: Validator.boolean().optional(), - manage_inventory: Validator.boolean().optional(), - weight: Validator.number().allow(null).optional(), - length: Validator.number().allow(null).optional(), - height: Validator.number().allow(null).optional(), - width: Validator.number().allow(null).optional(), - hs_code: Validator.string().optional().allow(null, ""), - origin_country: Validator.string().optional().allow(null, ""), - mid_code: Validator.string().optional().allow(null, ""), - material: Validator.string().optional().allow(null, ""), - metadata: Validator.object().optional(), + + const validated = await validator( + AdminPostProductsProductVariantsVariantReq, + req.body + ) + + const productService: ProductService = req.scope.resolve("productService") + const productVariantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + + await productVariantService.update(variant_id, { + product_id: id, + ...validated, }) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const productService = req.scope.resolve("productService") - const productVariantService = req.scope.resolve("productVariantService") - - await productVariantService.update(variant_id, value) - const product = await productService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminProductFields, + relations: defaultAdminProductRelations, }) res.json({ product }) } + +class ProductVariantOptionReq { + @IsString() + value: string + + @IsString() + option_id: string +} + +class ProductVariantPricesReq { + @Validate(XorConstraint, ["currency_code"]) + region_id?: string + + @Validate(XorConstraint, ["region_id"]) + currency_code?: string + + @IsInt() + amount: number + + @IsOptional() + @IsInt() + sale_amount?: number +} + +class AdminPostProductsProductVariantsVariantReq { + @IsString() + @IsOptional() + title?: string + + @IsString() + @IsOptional() + sku?: string + + @IsString() + @IsOptional() + ean?: string + + @IsString() + @IsOptional() + upc?: string + + @IsString() + @IsOptional() + barcode?: string + + @IsString() + @IsOptional() + hs_code?: string + + @IsNumber() + @IsOptional() + inventory_quantity: number + + @IsBoolean() + @IsOptional() + allow_backorder?: boolean + + @IsBoolean() + @IsOptional() + manage_inventory?: boolean + + @IsNumber() + @IsOptional() + weight?: number + + @IsNumber() + @IsOptional() + length?: number + + @IsNumber() + @IsOptional() + height?: number + + @IsNumber() + @IsOptional() + width?: number + + @IsString() + @IsOptional() + origin_country?: string + + @IsString() + @IsOptional() + mid_code?: string + + @IsString() + @IsOptional() + material?: string + + @IsObject() + @IsOptional() + metadata?: object + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => ProductVariantPricesReq) + prices: ProductVariantPricesReq[] + + @Type(() => ProductVariantOptionReq) + @ValidateNested({ each: true }) + @IsOptional() + @IsArray() + options: ProductVariantOptionReq[] = [] +} diff --git a/packages/medusa/src/api/routes/admin/regions/__tests__/list-regions.js b/packages/medusa/src/api/routes/admin/regions/__tests__/list-regions.js index 695a8261ee..0461e3365a 100644 --- a/packages/medusa/src/api/routes/admin/regions/__tests__/list-regions.js +++ b/packages/medusa/src/api/routes/admin/regions/__tests__/list-regions.js @@ -21,9 +21,13 @@ const defaultRelations = [ ] describe("GET /admin/regions", () => { - describe("successful creation", () => { + describe("successfully lists regions", () => { let subject + afterAll(() => { + jest.clearAllMocks() + }) + beforeAll(async () => { subject = await request("GET", `/admin/regions`, { adminSession: { @@ -38,7 +42,7 @@ describe("GET /admin/regions", () => { expect(subject.status).toEqual(200) }) - it("calls service addCountry", () => { + it("calls service list", () => { expect(RegionServiceMock.list).toHaveBeenCalledTimes(1) expect(RegionServiceMock.list).toHaveBeenCalledWith( {}, @@ -51,4 +55,40 @@ describe("GET /admin/regions", () => { ) }) }) + + describe("successfully lists regions with limit and offset", () => { + let subject + + afterAll(() => { + jest.clearAllMocks() + }) + + beforeAll(async () => { + subject = await request("GET", `/admin/regions?offset=10&limit=20`, { + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + }) + }) + + it("returns 200", () => { + console.log(subject) + expect(subject.status).toEqual(200) + }) + + it("calls service list", () => { + expect(RegionServiceMock.list).toHaveBeenCalledTimes(1) + expect(RegionServiceMock.list).toHaveBeenCalledWith( + {}, + { + select: defaultFields, + relations: defaultRelations, + take: 20, + skip: 10, + } + ) + }) + }) }) diff --git a/packages/medusa/src/api/routes/admin/regions/add-country.js b/packages/medusa/src/api/routes/admin/regions/add-country.ts similarity index 50% rename from packages/medusa/src/api/routes/admin/regions/add-country.js rename to packages/medusa/src/api/routes/admin/regions/add-country.ts index 62c9b45740..71765c4d84 100644 --- a/packages/medusa/src/api/routes/admin/regions/add-country.js +++ b/packages/medusa/src/api/routes/admin/regions/add-country.ts @@ -1,17 +1,22 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { IsString } from "class-validator" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { validator } from "../../../../utils/validator" +import { Region } from "../../../.." +import RegionService from "../../../../services/region" /** * @oas [post] /regions/{id}/countries * operationId: "PostRegionsRegionCountries" * summary: "Add Country" * description: "Adds a Country to the list of Countries in a Region" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * requestBody: * content: * application/json: * schema: + * required: + * - country_code * properties: * country_code: * description: "The 2 character ISO code for the Country." @@ -30,22 +35,23 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id } = req.params - const schema = Validator.object().keys({ - country_code: Validator.string().required(), - }) + const validated = await validator( + AdminPostRegionsRegionCountriesReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.addCountry(region_id, validated.country_code) - const regionService = req.scope.resolve("regionService") - await regionService.addCountry(region_id, value.country_code) - - const region = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + const region: Region = await regionService.retrieve(region_id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.status(200).json({ region }) } + +export class AdminPostRegionsRegionCountriesReq { + @IsString() + country_code: string +} diff --git a/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.js b/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.js deleted file mode 100644 index 59ce3a4f7c..0000000000 --- a/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.js +++ /dev/null @@ -1,50 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - -/** - * @oas [post] /regions/{id}/fulfillment-providers - * operationId: "PostRegionsRegionFulfillmentProviders" - * summary: "Add Fulfillment Provider" - * description: "Adds a Fulfillment Provider to a Region" - * parameters: - * - (path) id=* {string} The id of the Region. - * requestBody: - * content: - * application/json: - * schema: - * properties: - * provider_id: - * description: "The id of the Fulfillment Provider to add." - * type: string - * tags: - * - Region - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * region: - * $ref: "#/components/schemas/region" - */ -export default async (req, res) => { - const { region_id } = req.params - const schema = Validator.object().keys({ - provider_id: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const regionService = req.scope.resolve("regionService") - await regionService.addFulfillmentProvider(region_id, value.provider_id) - - const data = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, - }) - res.status(200).json({ region: data }) -} diff --git a/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts b/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts new file mode 100644 index 0000000000..ca52885043 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/regions/add-fulfillment-provider.ts @@ -0,0 +1,56 @@ +import { IsString } from "class-validator" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { validator } from "../../../../utils/validator" +import { Region } from "../../../.." +import RegionService from "../../../../services/region" +/** + * @oas [post] /regions/{id}/fulfillment-providers + * operationId: "PostRegionsRegionFulfillmentProviders" + * summary: "Add Fulfillment Provider" + * description: "Adds a Fulfillment Provider to a Region" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Region. + * requestBody: + * content: + * application/json: + * required: + * - provider_id + * schema: + * properties: + * provider_id: + * description: "The id of the Fulfillment Provider to add." + * type: string + * tags: + * - Region + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * region: + * $ref: "#/components/schemas/region" + */ +export default async (req, res) => { + const { region_id } = req.params + const validated = await validator( + AdminPostRegionsRegionFulfillmentProvidersReq, + req.body + ) + + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.addFulfillmentProvider(region_id, validated.provider_id) + + const region: Region = await regionService.retrieve(region_id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, + }) + res.status(200).json({ region }) +} + +export class AdminPostRegionsRegionFulfillmentProvidersReq { + @IsString() + provider_id: string +} diff --git a/packages/medusa/src/api/routes/admin/regions/add-payment-provider.js b/packages/medusa/src/api/routes/admin/regions/add-payment-provider.js deleted file mode 100644 index 7c20afc41f..0000000000 --- a/packages/medusa/src/api/routes/admin/regions/add-payment-provider.js +++ /dev/null @@ -1,50 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - -/** - * @oas [post] /regions/{id}/payment-providers - * operationId: "PostRegionsRegionPaymentProviders" - * summary: "Add Payment Provider" - * description: "Adds a Payment Provider to a Region" - * parameters: - * - (path) id=* {string} The id of the Region. - * requestBody: - * content: - * application/json: - * schema: - * properties: - * provider_id: - * description: "The id of the Payment Provider to add." - * type: string - * tags: - * - Region - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * region: - * $ref: "#/components/schemas/region" - */ -export default async (req, res) => { - const { region_id } = req.params - const schema = Validator.object().keys({ - provider_id: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const regionService = req.scope.resolve("regionService") - await regionService.addPaymentProvider(region_id, value.provider_id) - - const data = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, - }) - res.status(200).json({ region: data }) -} diff --git a/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts b/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts new file mode 100644 index 0000000000..2d84202ff2 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/regions/add-payment-provider.ts @@ -0,0 +1,57 @@ +import { IsString } from "class-validator" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { validator } from "../../../../utils/validator" +import { Region } from "../../../.." +import RegionService from "../../../../services/region" + +/** + * @oas [post] /regions/{id}/payment-providers + * operationId: "PostRegionsRegionPaymentProviders" + * summary: "Add Payment Provider" + * description: "Adds a Payment Provider to a Region" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Region. + * requestBody: + * content: + * application/json: + * required: + * - provider_id + * schema: + * properties: + * provider_id: + * description: "The id of the Payment Provider to add." + * type: string + * tags: + * - Region + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * region: + * $ref: "#/components/schemas/region" + */ +export default async (req, res) => { + const { region_id } = req.params + const validated = await validator( + AdminPostRegionsRegionPaymentProvidersReq, + req.body + ) + + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.addPaymentProvider(region_id, validated.provider_id) + + const region: Region = await regionService.retrieve(region_id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, + }) + res.status(200).json({ region }) +} + +export class AdminPostRegionsRegionPaymentProvidersReq { + @IsString() + provider_id: string +} diff --git a/packages/medusa/src/api/routes/admin/regions/create-region.js b/packages/medusa/src/api/routes/admin/regions/create-region.ts similarity index 58% rename from packages/medusa/src/api/routes/admin/regions/create-region.js rename to packages/medusa/src/api/routes/admin/regions/create-region.ts index 0071280301..53324906f6 100644 --- a/packages/medusa/src/api/routes/admin/regions/create-region.js +++ b/packages/medusa/src/api/routes/admin/regions/create-region.ts @@ -1,14 +1,21 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - +import { IsArray, IsNumber, IsOptional, IsString } from "class-validator" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { validator } from "../../../../utils/validator" +import { Region } from "../../../.." +import RegionService from "../../../../services/region" /** * @oas [post] /regions * operationId: "PostRegions" * summary: "Create a Region" * description: "Creates a Region" + * x-authenticated: true * requestBody: * content: * application/json: + * required: + * - name + * - currency_code + * - tax_rate * schema: * properties: * name: @@ -51,28 +58,42 @@ import { defaultRelations, defaultFields } from "./" * $ref: "#/components/schemas/region" */ export default async (req, res) => { - const schema = Validator.object().keys({ - name: Validator.string().required(), - currency_code: Validator.string().required(), - tax_code: Validator.string().allow(""), - tax_rate: Validator.number().required(), - payment_providers: Validator.array().items(Validator.string()), - fulfillment_providers: Validator.array().items(Validator.string()), - countries: Validator.array().items(Validator.string()), - }) + const validated = await validator(AdminPostRegionsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const regionService: RegionService = req.scope.resolve("regionService") + const result: Region = await regionService.create(validated) - const regionService = req.scope.resolve("regionService") - const result = await regionService.create(value) - - const region = await regionService.retrieve(result.id, { - select: defaultFields, - relations: defaultRelations, + const region: Region = await regionService.retrieve(result.id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.status(200).json({ region }) } + +export class AdminPostRegionsReq { + @IsString() + name: string + + @IsString() + currency_code: string + + @IsString() + @IsOptional() + tax_code?: string + + @IsNumber() + tax_rate: number + + @IsArray() + @IsString({ each: true }) + payment_providers: string[] + + @IsArray() + @IsString({ each: true }) + fulfillment_providers: string[] + + @IsArray() + @IsString({ each: true }) + countries: string[] +} diff --git a/packages/medusa/src/api/routes/admin/regions/delete-metadata.js b/packages/medusa/src/api/routes/admin/regions/delete-metadata.ts similarity index 62% rename from packages/medusa/src/api/routes/admin/regions/delete-metadata.js rename to packages/medusa/src/api/routes/admin/regions/delete-metadata.ts index a8f17f1c01..6ae99642f3 100644 --- a/packages/medusa/src/api/routes/admin/regions/delete-metadata.js +++ b/packages/medusa/src/api/routes/admin/regions/delete-metadata.ts @@ -1,10 +1,13 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { Region } from "../../../.." +import RegionService from "../../../../services/region" /** * @oas [delete] /regions/{id}/metadata/{key} * operationId: "DeleteRegionsRegionMetadataKey" * summary: "Delete Metadata" * description: "Deletes a metadata key." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * - (path) key=* {string} The metadata key. @@ -23,12 +26,12 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id, key } = req.params - const regionService = req.scope.resolve("regionService") + const regionService: RegionService = req.scope.resolve("regionService") await regionService.deleteMetadata(id, key) - const region = await regionService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + const region: Region = await regionService.retrieve(id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.status(200).json({ region }) diff --git a/packages/medusa/src/api/routes/admin/regions/delete-region.js b/packages/medusa/src/api/routes/admin/regions/delete-region.ts similarity index 84% rename from packages/medusa/src/api/routes/admin/regions/delete-region.js rename to packages/medusa/src/api/routes/admin/regions/delete-region.ts index ab8a5246af..de0188293b 100644 --- a/packages/medusa/src/api/routes/admin/regions/delete-region.js +++ b/packages/medusa/src/api/routes/admin/regions/delete-region.ts @@ -1,8 +1,11 @@ +import RegionService from "../../../../services/region" + /** * @oas [delete] /regions/{id} * operationId: "DeleteRegionsRegion" * summary: "Delete a Region" * description: "Deletes a Region." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * tags: @@ -25,7 +28,9 @@ */ export default async (req, res) => { const { region_id } = req.params - const regionService = req.scope.resolve("regionService") + + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.delete(region_id) res.status(200).json({ diff --git a/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.js b/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts similarity index 61% rename from packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.js rename to packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts index 63525abea6..bdc7ed1cac 100644 --- a/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.js +++ b/packages/medusa/src/api/routes/admin/regions/get-fulfillment-options.ts @@ -1,12 +1,17 @@ +import RegionService from "../../../../services/region" +import FulfillmentProviderService from "../../../../services/fulfillment-provider" +import { FulfillmentOption } from "." + /** * @oas [get] /regions/{id}/fulfillment-options * operationId: "GetRegionsRegionFulfillmentOptions" * summary: "List Fulfillment Options available in the Region" * description: "Gathers all the fulfillment options available to in the Region." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * tags: - * - Product + * - Region * responses: * 200: * description: OK @@ -20,21 +25,19 @@ * type: object */ export default async (req, res) => { - const { region_id } = req.params + const { region_id } = req.query - const fulfillmentProviderService = req.scope.resolve( - "fulfillmentProviderService" - ) - const regionService = req.scope.resolve("regionService") + const fulfillmentProviderService: FulfillmentProviderService = + req.scope.resolve("fulfillmentProviderService") + const regionService: RegionService = req.scope.resolve("regionService") const region = await regionService.retrieve(region_id, { relations: ["fulfillment_providers"], }) const fpsIds = region.fulfillment_providers.map((fp) => fp.id) || [] - const options = await fulfillmentProviderService.listFulfillmentOptions( - fpsIds - ) + const options: FulfillmentOption[] = + await fulfillmentProviderService.listFulfillmentOptions(fpsIds) res.status(200).json({ fulfillment_options: options, diff --git a/packages/medusa/src/api/routes/admin/regions/get-region.js b/packages/medusa/src/api/routes/admin/regions/get-region.ts similarity index 56% rename from packages/medusa/src/api/routes/admin/regions/get-region.js rename to packages/medusa/src/api/routes/admin/regions/get-region.ts index 094c06afa8..c788e87f7e 100644 --- a/packages/medusa/src/api/routes/admin/regions/get-region.js +++ b/packages/medusa/src/api/routes/admin/regions/get-region.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "./" +import RegionService from "../../../../services/region" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." /** * @oas [get] /regions/{id} * operationId: "GetRegionsRegion" * summary: "Retrieve a Region" * description: "Retrieves a Region." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * tags: @@ -21,11 +23,11 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id } = req.params - const regionService = req.scope.resolve("regionService") - const data = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + const regionService: RegionService = req.scope.resolve("regionService") + const region = await regionService.retrieve(region_id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) - res.status(200).json({ region: data }) + res.status(200).json({ region }) } diff --git a/packages/medusa/src/api/routes/admin/regions/index.js b/packages/medusa/src/api/routes/admin/regions/index.ts similarity index 76% rename from packages/medusa/src/api/routes/admin/regions/index.js rename to packages/medusa/src/api/routes/admin/regions/index.ts index c38ba24357..1f797b442c 100644 --- a/packages/medusa/src/api/routes/admin/regions/index.js +++ b/packages/medusa/src/api/routes/admin/regions/index.ts @@ -1,5 +1,8 @@ import { Router } from "express" +import { Region } from "../../../.." +import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" +import "reflect-metadata" const route = Router() @@ -71,7 +74,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultAdminRegionFields = [ "id", "name", "currency_code", @@ -83,8 +86,27 @@ export const defaultFields = [ "metadata", ] -export const defaultRelations = [ +export const defaultAdminRegionRelations = [ "countries", "payment_providers", "fulfillment_providers", ] + +export class AdminRegionsRes { + region: Region +} + +export type AdminRegionsListRes = PaginatedResponse & { + regions: Region[] +} + +export type AdminRegionsDeleteRes = DeleteResponse + +export class FulfillmentOption { + provider_id: string + options: any[] +} + +export class AdminGetRegionsRegionFulfillmentOptionsRes { + fulfillment_options: FulfillmentOption[] +} diff --git a/packages/medusa/src/api/routes/admin/regions/list-regions.js b/packages/medusa/src/api/routes/admin/regions/list-regions.js deleted file mode 100644 index b4aae7a181..0000000000 --- a/packages/medusa/src/api/routes/admin/regions/list-regions.js +++ /dev/null @@ -1,40 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /regions - * operationId: "GetRegions" - * summary: "List Regions" - * description: "Retrieves a list of Regions." - * tags: - * - Region - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * regions: - * type: array - * items: - * $ref: "#/components/schemas/region" - */ -export default async (req, res) => { - const regionService = req.scope.resolve("regionService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - const listConfig = { - select: defaultFields, - relations: defaultRelations, - skip: offset, - take: limit, - } - - const regions = await regionService.list(selector, listConfig) - - res.json({ regions, count: regions.length, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/regions/list-regions.ts b/packages/medusa/src/api/routes/admin/regions/list-regions.ts new file mode 100644 index 0000000000..cc2591705b --- /dev/null +++ b/packages/medusa/src/api/routes/admin/regions/list-regions.ts @@ -0,0 +1,75 @@ +import { validator } from "../../../../utils/validator" +import { Region } from "../../../.." +import RegionService from "../../../../services/region" +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." +import { IsInt, IsOptional } from "class-validator" +import { Type } from "class-transformer" + +/** + * @oas [get] /regions + * operationId: "GetRegions" + * summary: "List Regions" + * description: "Retrieves a list of Regions." + * x-authenticated: true + * parameters: + * - in: path + * name: limit + * schema: + * type: integer + * required: false + * description: limit the number of regions in response + * - in: path + * name: offset + * schema: + * type: integer + * required: false + * description: Offset of regions in response (used for pagination) + * tags: + * - Region + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * regions: + * type: array + * items: + * $ref: "#/components/schemas/region" + */ +export default async (req, res) => { + const validated = await validator(AdminGetRegionsParams, req.query) + + const regionService: RegionService = req.scope.resolve("regionService") + + const selector = {} + + const listConfig = { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, + skip: validated.offset, + take: validated.limit, + } + + const regions: Region[] = await regionService.list(selector, listConfig) + + res.json({ + regions, + count: regions.length, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetRegionsParams { + @IsInt() + @IsOptional() + @Type(() => Number) + limit?: number = 50 + + @IsInt() + @IsOptional() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/admin/regions/remove-country.js b/packages/medusa/src/api/routes/admin/regions/remove-country.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/regions/remove-country.js rename to packages/medusa/src/api/routes/admin/regions/remove-country.ts index 944f41a118..ee2291fadb 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-country.js +++ b/packages/medusa/src/api/routes/admin/regions/remove-country.ts @@ -1,9 +1,11 @@ -import { defaultRelations, defaultFields } from "./" +import RegionService from "../../../../services/region" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." /** * @oas [delete] /regions/{id}/countries/{country_code} * operationId: "PostRegionsRegionCountriesCountry" * summary: "Remove Country" + * x-authenticated: true * description: "Removes a Country from the list of Countries in a Region" * parameters: * - (path) id=* {string} The id of the Region. @@ -22,12 +24,13 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id, country_code } = req.params - const regionService = req.scope.resolve("regionService") + + const regionService: RegionService = req.scope.resolve("regionService") await regionService.removeCountry(region_id, country_code) const region = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.json({ region }) diff --git a/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.js b/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts similarity index 73% rename from packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.js rename to packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts index 596617cad6..52ed7888d7 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.js +++ b/packages/medusa/src/api/routes/admin/regions/remove-fulfillment-provider.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "./" +import RegionService from "../../../../services/region" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." /** * @oas [delete] /regions/{id}/fulfillment-providers/{provider_id} * operationId: "PostRegionsRegionFulfillmentProvidersProvider" * summary: "Remove Fulfillment Provider" * description: "Removes a Fulfillment Provider." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * - (path) provider_id=* {string} The id of the Fulfillment Provider. @@ -22,13 +24,13 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id, provider_id } = req.params - const regionService = req.scope.resolve("regionService") + const regionService: RegionService = req.scope.resolve("regionService") await regionService.removeFulfillmentProvider(region_id, provider_id) const region = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.json({ region }) diff --git a/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.js b/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts similarity index 67% rename from packages/medusa/src/api/routes/admin/regions/remove-payment-provider.js rename to packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts index 09da196323..98b1f08168 100644 --- a/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.js +++ b/packages/medusa/src/api/routes/admin/regions/remove-payment-provider.ts @@ -1,12 +1,14 @@ -import { defaultRelations, defaultFields } from "./" +import RegionService from "../../../../services/region" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." /** * @oas [delete] /regions/{id}/payment-providers/{provider_id} * operationId: "PostRegionsRegionPaymentProvidersProvider" * summary: "Remove Payment Provider" * description: "Removes a Payment Provider." + * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Region. + * - (path) region_id=* {string} The id of the Region. * - (path) provider_id=* {string} The id of the Payment Provider. * tags: * - Region @@ -22,12 +24,13 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id, provider_id } = req.params - const regionService = req.scope.resolve("regionService") + + const regionService: RegionService = req.scope.resolve("regionService") await regionService.removePaymentProvider(region_id, provider_id) const region = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.json({ region }) diff --git a/packages/medusa/src/api/routes/admin/regions/set-metadata.js b/packages/medusa/src/api/routes/admin/regions/set-metadata.js deleted file mode 100644 index 42ad25be45..0000000000 --- a/packages/medusa/src/api/routes/admin/regions/set-metadata.js +++ /dev/null @@ -1,26 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "." - -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - key: Validator.string().required(), - value: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const regionService = req.scope.resolve("regionService") - await regionService.setMetadata(id, value.key, value.value) - - const region = await regionService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ region }) -} diff --git a/packages/medusa/src/api/routes/admin/regions/set-metadata.ts b/packages/medusa/src/api/routes/admin/regions/set-metadata.ts new file mode 100644 index 0000000000..ecef95f20a --- /dev/null +++ b/packages/medusa/src/api/routes/admin/regions/set-metadata.ts @@ -0,0 +1,53 @@ +import { IsString } from "class-validator" +import { validator } from "../../../../utils/validator" +import RegionService from "../../../../services/region" +import { defaultAdminRegionFields, defaultAdminRegionRelations } from "." + +/** + * @oas [delete] /regions/{id}/payment-providers/{provider_id} + * operationId: "PostRegionsRegionPaymentProvidersProvider" + * summary: "Set the metadata of a Region" + * description: "Sets the metadata of a Region" + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the Region. + * - (body) key=* {string} Key for the metadata value. + * - (body) value=* {string} The value that the key relates to. + * tags: + * - Region + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * region: + * $ref: "#/components/schemas/region" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator( + AdminPostRegionsRegionPaymentProvidersProviderReq, + req.body + ) + + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.setMetadata(id, validated.key, validated.value) + + const region = await regionService.retrieve(id, { + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, + }) + + res.status(200).json({ region }) +} + +export class AdminPostRegionsRegionPaymentProvidersProviderReq { + @IsString() + key: string + + @IsString() + value: string +} diff --git a/packages/medusa/src/api/routes/admin/regions/update-region.js b/packages/medusa/src/api/routes/admin/regions/update-region.ts similarity index 62% rename from packages/medusa/src/api/routes/admin/regions/update-region.js rename to packages/medusa/src/api/routes/admin/regions/update-region.ts index ff6e4c317c..e7f1e26bc4 100644 --- a/packages/medusa/src/api/routes/admin/regions/update-region.js +++ b/packages/medusa/src/api/routes/admin/regions/update-region.ts @@ -1,11 +1,14 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { IsArray, IsNumber, IsOptional, IsString } from "class-validator" +import { defaultAdminRegionRelations, defaultAdminRegionFields } from "." +import { validator } from "../../../../utils/validator" +import RegionService from "../../../../services/region" /** * @oas [post] /regions/{id} * operationId: "PostRegionsRegion" * summary: "Update a Region" * description: "Updates a Region" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Region. * requestBody: @@ -54,28 +57,48 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { region_id } = req.params - const schema = Validator.object().keys({ - name: Validator.string(), - currency_code: Validator.string(), - tax_code: Validator.string().allow(""), - tax_rate: Validator.number(), - payment_providers: Validator.array().items(Validator.string()), - fulfillment_providers: Validator.array().items(Validator.string()), - // iso_2 country codes - countries: Validator.array().items(Validator.string()), - }) + const validated = await validator(AdminPostRegionsRegionReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const regionService = req.scope.resolve("regionService") - await regionService.update(region_id, value) + const regionService: RegionService = req.scope.resolve("regionService") + await regionService.update(region_id, validated) const region = await regionService.retrieve(region_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminRegionFields, + relations: defaultAdminRegionRelations, }) res.status(200).json({ region }) } + +export class AdminPostRegionsRegionReq { + @IsString() + @IsOptional() + name?: string + + @IsString() + @IsOptional() + currency_code?: string + + @IsString() + @IsOptional() + tax_code?: string + + @IsNumber() + @IsOptional() + tax_rate?: number + + @IsArray() + @IsString({ each: true }) + @IsOptional() + payment_providers?: string[] + + @IsArray() + @IsString({ each: true }) + @IsOptional() + fulfillment_providers?: string[] + + // iso_2 country codes + @IsArray() + @IsString({ each: true }) + @IsOptional() + countries?: string[] +} diff --git a/packages/medusa/src/api/routes/admin/return-reasons/create-reason.js b/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts similarity index 52% rename from packages/medusa/src/api/routes/admin/return-reasons/create-reason.js rename to packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts index ebd00c8ae0..0d931fe246 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/create-reason.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/create-reason.ts @@ -1,15 +1,24 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { IsOptional, IsString } from "class-validator" +import { + defaultAdminReturnReasonsFields, + defaultAdminReturnReasonsRelations, +} from "." +import { ReturnReasonService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /return-reasons * operationId: "PostReturnReasons" * summary: "Create a Return Reason" * description: "Creates a Return Reason" + * x-authenticated: true * requestBody: * content: * application/json: * schema: + * required: + * - label + * - value * properties: * label: * description: "The label to display to the Customer." @@ -17,6 +26,9 @@ import { defaultRelations, defaultFields } from "./" * value: * description: "The value that the Return Reason will be identified by. Must be unique." * type: string + * parent_return_reason_id: + * description: "The id of the parent return reason." + * type: string * description: * description: "An optional description to for the Reason." * type: string @@ -36,26 +48,36 @@ import { defaultRelations, defaultFields } from "./" * $ref: "#/components/schemas/return_reason" */ export default async (req, res) => { - const schema = Validator.object().keys({ - value: Validator.string().required(), - label: Validator.string().required(), - parent_return_reason_id: Validator.string().optional(), - description: Validator.string().optional().allow(""), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostReturnReasonsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const returnReasonService = req.scope.resolve("returnReasonService") - const result = await returnReasonService.create(value) + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) + const result = await returnReasonService.create(validated) const reason = await returnReasonService.retrieve(result.id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminReturnReasonsFields, + relations: defaultAdminReturnReasonsRelations, }) res.status(200).json({ return_reason: reason }) } + +export class AdminPostReturnReasonsReq { + @IsString() + value: string + + @IsString() + label: string + + @IsOptional() + @IsString() + parent_return_reason_id?: string + + @IsOptional() + @IsString() + description?: string + + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.js b/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts similarity index 82% rename from packages/medusa/src/api/routes/admin/return-reasons/delete-reason.js rename to packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts index 73fd74800a..9007ec3535 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/delete-reason.ts @@ -1,8 +1,11 @@ +import { ReturnReasonService } from "../../../../services" + /** * @oas [delete] /return-reason/{id} * operationId: "DeleteReturnReason" * summary: "Delete a return reason" * description: "Deletes a return reason." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the return reason * tags: @@ -26,7 +29,9 @@ export default async (req, res) => { const { id } = req.params - const returnReasonService = req.scope.resolve("returnReasonService") + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) await returnReasonService.delete(id) res.json({ diff --git a/packages/medusa/src/api/routes/admin/return-reasons/get-reason.js b/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts similarity index 64% rename from packages/medusa/src/api/routes/admin/return-reasons/get-reason.js rename to packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts index 55275a4b4e..3806eca57a 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/get-reason.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/get-reason.ts @@ -1,10 +1,15 @@ -import { defaultRelations, defaultFields } from "./" +import { + defaultAdminReturnReasonsFields, + defaultAdminReturnReasonsRelations, +} from "." +import { ReturnReasonService } from "../../../../services" /** * @oas [get] /return-reasons/{id} * operationId: "GetReturnReasonsReason" * summary: "Retrieve a Return Reason" * description: "Retrieves a Return Reason." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Return Reason. * tags: @@ -21,11 +26,13 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { id } = req.params - const returnReasonService = req.scope.resolve("returnReasonService") + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) const data = await returnReasonService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminReturnReasonsFields, + relations: defaultAdminReturnReasonsRelations, }) res.status(200).json({ return_reason: data }) diff --git a/packages/medusa/src/api/routes/admin/return-reasons/index.js b/packages/medusa/src/api/routes/admin/return-reasons/index.ts similarity index 73% rename from packages/medusa/src/api/routes/admin/return-reasons/index.js rename to packages/medusa/src/api/routes/admin/return-reasons/index.ts index 011719af63..be0ee66080 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/index.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/index.ts @@ -1,4 +1,5 @@ import { Router } from "express" +import { ReturnReason } from "../../../.." import middlewares from "../../../middlewares" const route = Router() @@ -34,7 +35,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultAdminReturnReasonsFields = [ "id", "value", "label", @@ -45,7 +46,17 @@ export const defaultFields = [ "deleted_at", ] -export const defaultRelations = [ +export const defaultAdminReturnReasonsRelations = [ "parent_return_reason", "return_reason_children", ] + +export type AdminReturnReasonRes = { + return_reasons: ReturnReason +} + +export type AdminReturnReasonsListRes = { + return_reasons: ReturnReason[] +} + +export * from "./create-reason" diff --git a/packages/medusa/src/api/routes/admin/return-reasons/list-reasons.js b/packages/medusa/src/api/routes/admin/return-reasons/list-reasons.ts similarity index 64% rename from packages/medusa/src/api/routes/admin/return-reasons/list-reasons.js rename to packages/medusa/src/api/routes/admin/return-reasons/list-reasons.ts index c89623e1c7..b1705b290f 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/list-reasons.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/list-reasons.ts @@ -1,10 +1,15 @@ -import { defaultRelations, defaultFields } from "./" +import { + defaultAdminReturnReasonsFields, + defaultAdminReturnReasonsRelations, +} from "." +import { ReturnReasonService } from "../../../../services" /** * @oas [get] /return-reasons * operationId: "GetReturnReasons" * summary: "List Return Reasons" * description: "Retrieves a list of Return Reasons." + * x-authenticated: true * tags: * - Return Reason * responses: @@ -20,12 +25,14 @@ import { defaultRelations, defaultFields } from "./" * $ref: "#/components/schemas/return_reason" */ export default async (req, res) => { - const returnReasonService = req.scope.resolve("returnReasonService") + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) const query = { parent_return_reason_id: null } const data = await returnReasonService.list(query, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminReturnReasonsFields, + relations: defaultAdminReturnReasonsRelations, }) res.status(200).json({ return_reasons: data }) diff --git a/packages/medusa/src/api/routes/admin/return-reasons/update-reason.js b/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/return-reasons/update-reason.js rename to packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts index b38b19dd62..df086c4f2d 100644 --- a/packages/medusa/src/api/routes/admin/return-reasons/update-reason.js +++ b/packages/medusa/src/api/routes/admin/return-reasons/update-reason.ts @@ -1,11 +1,17 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { IsOptional, IsString } from "class-validator" +import { + defaultAdminReturnReasonsFields, + defaultAdminReturnReasonsRelations, +} from "." +import { ReturnReasonService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /return-reasons/{id} * operationId: "PostReturnReasonsReason" * summary: "Update a Return Reason" * description: "Updates a Return Reason" + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Return Reason. * requestBody: @@ -16,9 +22,6 @@ import { defaultRelations, defaultFields } from "./" * label: * description: "The label to display to the Customer." * type: string - * value: - * description: "The value that the Return Reason will be identified by. Must be unique." - * type: string * description: * description: "An optional description to for the Reason." * type: string @@ -40,26 +43,35 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - label: Validator.string().optional(), - parent_return_reason_id: Validator.string().optional(), - description: Validator.string().optional().allow(""), - metadata: Validator.object().optional(), - }) + const validated = await validator(AdminPostReturnReasonsReasonReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) - const returnReasonService = req.scope.resolve("returnReasonService") - - await returnReasonService.update(id, value) + await returnReasonService.update(id, validated) const reason = await returnReasonService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminReturnReasonsFields, + relations: defaultAdminReturnReasonsRelations, }) res.status(200).json({ return_reason: reason }) } + +export class AdminPostReturnReasonsReasonReq { + @IsOptional() + @IsString() + label?: string + + @IsOptional() + @IsString() + value?: string + + @IsOptional() + @IsString() + description?: string + + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/admin/returns/cancel-return.js b/packages/medusa/src/api/routes/admin/returns/cancel-return.ts similarity index 72% rename from packages/medusa/src/api/routes/admin/returns/cancel-return.js rename to packages/medusa/src/api/routes/admin/returns/cancel-return.ts index 0d6cee3661..3edd130b7f 100644 --- a/packages/medusa/src/api/routes/admin/returns/cancel-return.js +++ b/packages/medusa/src/api/routes/admin/returns/cancel-return.ts @@ -1,4 +1,8 @@ -import { defaultFields, defaultRelations } from "../orders" +import { OrderService, ReturnService } from "../../../../services" +import { + defaultAdminOrdersFields, + defaultAdminOrdersRelations, +} from "../orders" /** * @oas [post] /returns/{id}/cancel @@ -22,8 +26,8 @@ import { defaultFields, defaultRelations } from "../orders" export default async (req, res) => { const { id } = req.params - const returnService = req.scope.resolve("returnService") - const orderService = req.scope.resolve("orderService") + const returnService: ReturnService = req.scope.resolve("returnService") + const orderService: OrderService = req.scope.resolve("orderService") let result = await returnService.cancel(id) @@ -36,8 +40,8 @@ export default async (req, res) => { } const order = await orderService.retrieve(result.order_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminOrdersFields, + relations: defaultAdminOrdersRelations, }) res.status(200).json({ order }) diff --git a/packages/medusa/src/api/routes/admin/returns/index.js b/packages/medusa/src/api/routes/admin/returns/index.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/returns/index.js rename to packages/medusa/src/api/routes/admin/returns/index.ts index e90790ccdb..855705ffcd 100644 --- a/packages/medusa/src/api/routes/admin/returns/index.js +++ b/packages/medusa/src/api/routes/admin/returns/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" +import "reflect-metadata" +import { Order, Return } from "../../../.." +import { PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -23,3 +26,18 @@ export default (app) => { return app } + +export type AdminReturnsCancelRes = { + order: Order +} + +export type AdminReturnsListRes = PaginatedResponse & { + returns: Return[] +} + +export type AdminReturnsRes = { + return: Return +} + +export * from "./list-returns" +export * from "./receive-return" diff --git a/packages/medusa/src/api/routes/admin/returns/list-returns.js b/packages/medusa/src/api/routes/admin/returns/list-returns.js deleted file mode 100644 index a97f3b93dc..0000000000 --- a/packages/medusa/src/api/routes/admin/returns/list-returns.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @oas [get] /returns - * operationId: "GetReturns" - * summary: "List Returns" - * description: "Retrieves a list of Returns" - * tags: - * - Return - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * returns: - * type: array - * items: - * $ref: "#/components/schemas/return" - */ -export default async (req, res) => { - const returnService = req.scope.resolve("returnService") - - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - const listConfig = { - relations: ["swap", "order"], - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const returns = await returnService.list(selector, { ...listConfig }) - - res.json({ returns, count: returns.length, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/returns/list-returns.ts b/packages/medusa/src/api/routes/admin/returns/list-returns.ts new file mode 100644 index 0000000000..1e8b73275c --- /dev/null +++ b/packages/medusa/src/api/routes/admin/returns/list-returns.ts @@ -0,0 +1,62 @@ +import { Type } from "class-transformer" +import { IsNumber, IsOptional } from "class-validator" +import { ReturnService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /returns + * operationId: "GetReturns" + * summary: "List Returns" + * description: "Retrieves a list of Returns" + * parameters: + * - (path) limit {number} The upper limit for the amount of responses returned. + * - (path) offset {number} The offset of the list returned. + * tags: + * - Return + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * returns: + * type: array + * items: + * $ref: "#/components/schemas/return" + */ +export default async (req, res) => { + const returnService: ReturnService = req.scope.resolve("returnService") + + const validated = await validator(AdminGetReturnsParams, req.query) + + const selector = {} + + const listConfig = { + relations: ["swap", "order"], + skip: validated.offset, + take: validated.limit, + order: { created_at: "DESC" }, + } + + const returns = await returnService.list(selector, { ...listConfig }) + + res.json({ + returns, + count: returns.length, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class AdminGetReturnsParams { + @IsOptional() + @IsNumber() + @Type(() => Number) + limit?: number = 50 + + @IsOptional() + @IsNumber() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/admin/returns/receive-return.js b/packages/medusa/src/api/routes/admin/returns/receive-return.ts similarity index 61% rename from packages/medusa/src/api/routes/admin/returns/receive-return.js rename to packages/medusa/src/api/routes/admin/returns/receive-return.ts index bd1c281d16..f15fcd741e 100644 --- a/packages/medusa/src/api/routes/admin/returns/receive-return.js +++ b/packages/medusa/src/api/routes/admin/returns/receive-return.ts @@ -1,4 +1,14 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { Type } from "class-transformer" +import { + IsArray, + IsNumber, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { EntityManager } from "typeorm" +import { OrderService, ReturnService, SwapService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /returns/{id}/receive @@ -11,6 +21,8 @@ import { MedusaError, Validator } from "medusa-core-utils" * content: * application/json: * schema: + * required: + * - items * properties: * items: * description: The Line Items that have been received. @@ -41,38 +53,24 @@ import { MedusaError, Validator } from "medusa-core-utils" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .required(), - refund: Validator.number().integer().optional(), - }) + const validated = await validator(AdminPostReturnsReturnReceiveReq, req.body) - const { value, error } = schema.validate(req.body) - - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const returnService = req.scope.resolve("returnService") - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const entityManager = req.scope.resolve("manager") + const returnService: ReturnService = req.scope.resolve("returnService") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const entityManager: EntityManager = req.scope.resolve("manager") let receivedReturn await entityManager.transaction(async (manager) => { - let refundAmount = value.refund + let refundAmount = validated.refund - if (typeof value.refund !== "undefined" && value.refund < 0) { + if (typeof validated.refund !== "undefined" && validated.refund < 0) { refundAmount = 0 } receivedReturn = await returnService .withTransaction(manager) - .receive(id, value.items, refundAmount, true) + .receive(id, validated.items, refundAmount, true) if (receivedReturn.order_id) { await orderService @@ -95,3 +93,22 @@ export default async (req, res) => { res.status(200).json({ return: receivedReturn }) } + +export class Item { + @IsString() + item_id: string + + @IsNumber() + quantity: number +} + +export class AdminPostReturnsReturnReceiveReq { + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + items: Item[] + + @IsOptional() + @IsNumber() + refund?: number +} diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.js b/packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.ts similarity index 57% rename from packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.ts index 2e9c3bef42..de7d1b774b 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/create-shipping-profile.ts @@ -1,14 +1,19 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { IsString } from "class-validator" +import { ShippingProfileService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /shipping-profiles * operationId: "PostShippingProfiles" * summary: "Create a Shipping Profile" * description: "Creates a Shipping Profile" + * x-authenticated: true * requestBody: * content: * application/json: * schema: + * required: + * - name * properties: * name: * description: "The name of the Shipping Profile" @@ -26,17 +31,17 @@ import { MedusaError, Validator } from "medusa-core-utils" * $ref: "#/components/schemas/shipping_profile" */ export default async (req, res) => { - const schema = Validator.object().keys({ - name: Validator.string().required(), - }) + const validated = await validator(AdminPostShippingProfilesReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const profileService = req.scope.resolve("shippingProfileService") - const data = await profileService.create(value) + const profileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) + const data = await profileService.create(validated) res.status(200).json({ shipping_profile: data }) } + +export class AdminPostShippingProfilesReq { + @IsString() + name: string +} diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.js b/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts similarity index 83% rename from packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts index 92d1de5fb1..0c4928e406 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/delete-shipping-profile.ts @@ -1,8 +1,11 @@ +import { ShippingProfileService } from "../../../../services" + /** * @oas [delete] /shipping-profiles/{id} * operationId: "DeleteShippingProfilesProfile" * summary: "Delete a Shipping Profile" * description: "Deletes a Shipping Profile." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Shipping Profile. * tags: @@ -25,7 +28,9 @@ */ export default async (req, res) => { const { profile_id } = req.params - const profileService = req.scope.resolve("shippingProfileService") + const profileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) await profileService.delete(profile_id) diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.js b/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts similarity index 64% rename from packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts index 04be482452..7b2954bbe5 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/get-shipping-profile.ts @@ -1,10 +1,15 @@ -import { defaultFields, defaultRelations } from "./" +import { + defaultAdminShippingProfilesFields, + defaultAdminShippingProfilesRelations, +} from "." +import { ShippingProfileService } from "../../../../services" /** * @oas [get] /shipping-profiles/{id} * operationId: "GetShippingProfilesProfile" * summary: "Retrieve a Shipping Profile" * description: "Retrieves a Shipping Profile." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Shipping Profile. * tags: @@ -21,11 +26,13 @@ import { defaultFields, defaultRelations } from "./" */ export default async (req, res) => { const { profile_id } = req.params - const profileService = req.scope.resolve("shippingProfileService") + const profileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) const profile = await profileService.retrieve(profile_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminShippingProfilesFields, + relations: defaultAdminShippingProfilesRelations, }) res.status(200).json({ shipping_profile: profile }) diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/index.js b/packages/medusa/src/api/routes/admin/shipping-profiles/index.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/shipping-profiles/index.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/index.ts index ed76ff2a14..3437f22bcc 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/index.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" +import "reflect-metadata" +import { ShippingProfile } from "../../../.." +import { DeleteResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -28,7 +31,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultAdminShippingProfilesFields = [ "id", "name", "type", @@ -38,4 +41,21 @@ export const defaultFields = [ "metadata", ] -export const defaultRelations = ["products", "shipping_options"] +export type AdminDeleteShippingProfileRes = DeleteResponse + +export const defaultAdminShippingProfilesRelations = [ + "products", + "shipping_options", +] + +export type AdminShippingProfilesRes = { + shipping_profile: ShippingProfile +} + +export type AdminShippingProfilesListRes = { + shipping_profiles: ShippingProfile[] +} + +export * from "./create-shipping-profile" +export * from "./delete-shipping-profile" +export * from "./update-shipping-profile" diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.js b/packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.ts similarity index 76% rename from packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.ts index ed2e249db9..a0306b6eb6 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/list-shipping-profiles.ts @@ -1,8 +1,11 @@ +import { ShippingProfileService } from "../../../../services" + /** * @oas [get] /shipping-profiles * operationId: "GetShippingProfiles" * summary: "List Shipping Profiles" * description: "Retrieves a list of Shipping Profile." + * x-authenticated: true * tags: * - Shipping Profile * responses: @@ -18,7 +21,9 @@ * $ref: "#/components/schemas/shipping_profile" */ export default async (req, res) => { - const profileService = req.scope.resolve("shippingProfileService") + const profileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) const data = await profileService.list() diff --git a/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.js b/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts similarity index 63% rename from packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.js rename to packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts index 8b0fd7a63f..1470efedf4 100644 --- a/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.js +++ b/packages/medusa/src/api/routes/admin/shipping-profiles/update-shipping-profile.ts @@ -1,4 +1,6 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { IsOptional, IsString } from "class-validator" +import { ShippingProfileService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /shipping-profiles/{id} @@ -30,19 +32,23 @@ import { MedusaError, Validator } from "medusa-core-utils" export default async (req, res) => { const { profile_id } = req.params - const schema = Validator.object().keys({ - name: Validator.string(), - }) + const validated = await validator( + AdminPostShippingProfilesProfileReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const profileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) - const profileService = req.scope.resolve("shippingProfileService") - - await profileService.update(profile_id, value) + await profileService.update(profile_id, validated) const data = await profileService.retrieve(profile_id) res.status(200).json({ shipping_profile: data }) } + +export class AdminPostShippingProfilesProfileReq { + @IsString() + @IsOptional() + name?: string +} diff --git a/packages/medusa/src/api/routes/admin/store/__tests__/update-store.js b/packages/medusa/src/api/routes/admin/store/__tests__/update-store.js index b9f9ca5cf8..de8e1511e5 100644 --- a/packages/medusa/src/api/routes/admin/store/__tests__/update-store.js +++ b/packages/medusa/src/api/routes/admin/store/__tests__/update-store.js @@ -60,4 +60,30 @@ describe("POST /admin/store", () => { }) }) }) + + describe("throws when currencies is not an array", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("POST", "/admin/store", { + payload: { + currencies: "DKK", + }, + adminSession: { + jwt: { + userId: IdMap.getId("admin_user"), + }, + }, + }) + }) + + it("returns 400", () => { + expect(subject.status).toEqual(400) + }) + + it("throws a descriptive error", () => { + expect(subject.body.message).toEqual("currencies must be an array") + }) + }) }) diff --git a/packages/medusa/src/api/routes/admin/store/add-currency.js b/packages/medusa/src/api/routes/admin/store/add-currency.ts similarity index 82% rename from packages/medusa/src/api/routes/admin/store/add-currency.js rename to packages/medusa/src/api/routes/admin/store/add-currency.ts index 23fae0aa73..58be79f70d 100644 --- a/packages/medusa/src/api/routes/admin/store/add-currency.js +++ b/packages/medusa/src/api/routes/admin/store/add-currency.ts @@ -1,8 +1,10 @@ +import { StoreService } from "../../../../services" /** * @oas [post] /store/currencies/{code} * operationId: "PostStoreCurrenciesCode" * summary: "Add a Currency Code" * description: "Adds a Currency Code to the available currencies." + * x-authenticated: true * parameters: * - (path) code=* {string} The 3 character ISO currency code. * tags: @@ -20,7 +22,7 @@ export default async (req, res) => { const { currency_code } = req.params - const storeService = req.scope.resolve("storeService") + const storeService: StoreService = req.scope.resolve("storeService") const data = await storeService.addCurrency(currency_code) res.status(200).json({ store: data }) } diff --git a/packages/medusa/src/api/routes/admin/store/get-store.js b/packages/medusa/src/api/routes/admin/store/get-store.js deleted file mode 100644 index 81e6031adb..0000000000 --- a/packages/medusa/src/api/routes/admin/store/get-store.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @oas [get] /store - * operationId: "GetStore" - * summary: "Retrieve Store details." - * description: "Retrieves the Store details" - * tags: - * - Store - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * store: - * $ref: "#/components/schemas/store" - */ -export default async (req, res) => { - try { - const storeService = req.scope.resolve("storeService") - const paymentProviderService = req.scope.resolve("paymentProviderService") - const fulfillmentProviderService = req.scope.resolve( - "fulfillmentProviderService" - ) - - const data = await storeService.retrieve(["currencies", "default_currency"]) - const paymentProviders = await paymentProviderService.list() - const fulfillmentProviders = await fulfillmentProviderService.list() - - data.payment_providers = paymentProviders - data.fulfillment_providers = fulfillmentProviders - - res.status(200).json({ store: data }) - } catch (err) { - console.log(err) - throw err - } -} diff --git a/packages/medusa/src/api/routes/admin/store/get-store.ts b/packages/medusa/src/api/routes/admin/store/get-store.ts new file mode 100644 index 0000000000..c606e50a60 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/store/get-store.ts @@ -0,0 +1,41 @@ +import { + FulfillmentProviderService, + PaymentProviderService, + StoreService, +} from "../../../../services" + +/** + * @oas [get] /store + * operationId: "GetStore" + * summary: "Retrieve Store details." + * description: "Retrieves the Store details" + * x-authenticated: true + * tags: + * - Store + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * store: + * $ref: "#/components/schemas/store" + */ +export default async (req, res) => { + const storeService: StoreService = req.scope.resolve("storeService") + const paymentProviderService: PaymentProviderService = req.scope.resolve( + "paymentProviderService" + ) + const fulfillmentProviderService: FulfillmentProviderService = + req.scope.resolve("fulfillmentProviderService") + + const data = await storeService.retrieve(["currencies", "default_currency"]) + const paymentProviders = await paymentProviderService.list() + const fulfillmentProviders = await fulfillmentProviderService.list() + + data.payment_providers = paymentProviders + data.fulfillment_providers = fulfillmentProviders + + res.status(200).json({ store: data }) +} diff --git a/packages/medusa/src/api/routes/admin/store/index.js b/packages/medusa/src/api/routes/admin/store/index.ts similarity index 77% rename from packages/medusa/src/api/routes/admin/store/index.js rename to packages/medusa/src/api/routes/admin/store/index.ts index 61a264a2a3..1847b38ce3 100644 --- a/packages/medusa/src/api/routes/admin/store/index.js +++ b/packages/medusa/src/api/routes/admin/store/index.ts @@ -1,4 +1,5 @@ import { Router } from "express" +import { Store, PaymentProvider } from "./../../../../" import middlewares from "../../../middlewares" const route = Router() @@ -23,3 +24,11 @@ export default (app) => { return app } + +export type AdminStoresRes = { + store: Store +} + +export type AdminPaymentProvidersList = { + payment_providers: PaymentProvider[] +} diff --git a/packages/medusa/src/api/routes/admin/store/list-payment-providers.js b/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts similarity index 77% rename from packages/medusa/src/api/routes/admin/store/list-payment-providers.js rename to packages/medusa/src/api/routes/admin/store/list-payment-providers.ts index af38853ccf..acffd3d941 100644 --- a/packages/medusa/src/api/routes/admin/store/list-payment-providers.js +++ b/packages/medusa/src/api/routes/admin/store/list-payment-providers.ts @@ -1,8 +1,10 @@ +import { PaymentProviderService } from "../../../../services" /** * @oas [get] /store/payment-providers * operationId: "GetStorePaymentProviders" * summary: "Retrieve configured Payment Providers" * description: "Retrieves the configured Payment Providers" + * x-authenticated: true * tags: * - Store * responses: @@ -18,7 +20,9 @@ * $ref: "#/components/schemas/store" */ export default async (req, res) => { - const paymentProviderService = req.scope.resolve("paymentProviderService") + const paymentProviderService: PaymentProviderService = req.scope.resolve( + "paymentProviderService" + ) const paymentProviders = await paymentProviderService.list() res.status(200).json({ payment_providers: paymentProviders }) } diff --git a/packages/medusa/src/api/routes/admin/store/remove-currency.js b/packages/medusa/src/api/routes/admin/store/remove-currency.ts similarity index 82% rename from packages/medusa/src/api/routes/admin/store/remove-currency.js rename to packages/medusa/src/api/routes/admin/store/remove-currency.ts index 20eac862f2..7ff9a9f184 100644 --- a/packages/medusa/src/api/routes/admin/store/remove-currency.js +++ b/packages/medusa/src/api/routes/admin/store/remove-currency.ts @@ -1,8 +1,11 @@ +import { StoreService } from "../../../../services" + /** * @oas [delete] /store/currencies/{code} * operationId: "DeleteStoreCurrenciesCode" * summary: "Remvoe a Currency Code" * description: "Removes a Currency Code from the available currencies." + * x-authenticated: true * parameters: * - (path) code=* {string} The 3 character ISO currency code. * tags: @@ -20,7 +23,7 @@ export default async (req, res) => { const { currency_code } = req.params - const storeService = req.scope.resolve("storeService") + const storeService: StoreService = req.scope.resolve("storeService") const data = await storeService.removeCurrency(currency_code) res.status(200).json({ store: data }) } diff --git a/packages/medusa/src/api/routes/admin/store/update-store.js b/packages/medusa/src/api/routes/admin/store/update-store.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/store/update-store.js rename to packages/medusa/src/api/routes/admin/store/update-store.ts index bc40baf045..4c86222f3b 100644 --- a/packages/medusa/src/api/routes/admin/store/update-store.js +++ b/packages/medusa/src/api/routes/admin/store/update-store.ts @@ -1,10 +1,13 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { IsArray, IsOptional, IsString } from "class-validator" +import { StoreService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [post] /store * operationId: "PostStore" * summary: "Update Store details." * description: "Updates the Store details" + * x-authenticated: true * requestBody: * content: * application/json: @@ -32,20 +35,34 @@ import { MedusaError, Validator } from "medusa-core-utils" * $ref: "#/components/schemas/store" */ export default async (req, res) => { - const schema = Validator.object().keys({ - name: Validator.string(), - swap_link_template: Validator.string(), - payment_link_template: Validator.string(), - default_currency_code: Validator.string(), - currencies: Validator.array().items(Validator.string()), - }) + const validatedBody = await validator(AdminPostStoreReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const storeService: StoreService = req.scope.resolve("storeService") + + const store = await storeService.update(validatedBody) - const storeService = req.scope.resolve("storeService") - const store = await storeService.update(value) res.status(200).json({ store }) } + +export class AdminPostStoreReq { + @IsOptional() + @IsString() + name?: string + + @IsString() + @IsOptional() + swap_link_template?: string + + @IsString() + @IsOptional() + payment_link_template?: string + + @IsString() + @IsOptional() + default_currency_code?: string + + @IsArray() + @IsString({ each: true }) + @IsOptional() + currencies?: string[] +} diff --git a/packages/medusa/src/api/routes/admin/swaps/get-swap.js b/packages/medusa/src/api/routes/admin/swaps/get-swap.ts similarity index 65% rename from packages/medusa/src/api/routes/admin/swaps/get-swap.js rename to packages/medusa/src/api/routes/admin/swaps/get-swap.ts index 400867a0d9..59b11fe456 100644 --- a/packages/medusa/src/api/routes/admin/swaps/get-swap.js +++ b/packages/medusa/src/api/routes/admin/swaps/get-swap.ts @@ -1,10 +1,12 @@ -import { defaultFields, defaultRelations } from "./" +import { defaultAdminSwapFields, defaultAdminSwapRelations } from "." +import { SwapService } from "../../../../services" /** * @oas [get] /swaps/{id} * operationId: "GetSwapsSwap" * summary: "Retrieve a Swap" * description: "Retrieves a Swap." + * x-authenticated: true * parameters: * - (path) id=* {string} The id of the Swap. * tags: @@ -22,11 +24,11 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const swapService = req.scope.resolve("swapService") + const swapService: SwapService = req.scope.resolve("swapService") const swap = await swapService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, + select: defaultAdminSwapFields, + relations: defaultAdminSwapRelations, }) res.json({ swap }) diff --git a/packages/medusa/src/api/routes/admin/swaps/index.js b/packages/medusa/src/api/routes/admin/swaps/index.ts similarity index 71% rename from packages/medusa/src/api/routes/admin/swaps/index.js rename to packages/medusa/src/api/routes/admin/swaps/index.ts index 9800546bbd..34aa1b140b 100644 --- a/packages/medusa/src/api/routes/admin/swaps/index.js +++ b/packages/medusa/src/api/routes/admin/swaps/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import { Swap } from "../../../.." +import { PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -19,7 +21,7 @@ export default (app) => { return app } -export const defaultRelations = [ +export const defaultAdminSwapRelations = [ "order", "additional_items", "return_order", @@ -36,7 +38,7 @@ export const defaultRelations = [ "cart.payment", ] -export const defaultFields = [ +export const defaultAdminSwapFields = [ "id", "fulfillment_status", "payment_status", @@ -53,3 +55,14 @@ export const defaultFields = [ "cart.gift_card_total", "cart.total", ] + +export type AdminSwapsListRes = PaginatedResponse & { + swaps: Swap[] +} + +export type AdminSwapsRes = { + swap: Swap +} + +export * from "./get-swap" +export * from "./list-swaps" diff --git a/packages/medusa/src/api/routes/admin/swaps/list-swaps.js b/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts similarity index 55% rename from packages/medusa/src/api/routes/admin/swaps/list-swaps.js rename to packages/medusa/src/api/routes/admin/swaps/list-swaps.ts index be894e47fe..f23acb79e6 100644 --- a/packages/medusa/src/api/routes/admin/swaps/list-swaps.js +++ b/packages/medusa/src/api/routes/admin/swaps/list-swaps.ts @@ -1,8 +1,13 @@ +import { Type } from "class-transformer" +import { IsInt, IsOptional } from "class-validator" +import { SwapService } from "../../../../services" +import { validator } from "../../../../utils/validator" /** * @oas [get] /swaps * operationId: "GetSwaps" * summary: "List Swaps" * description: "Retrieves a list of Swaps." + * x-authenticated: true * tags: * - Swap * responses: @@ -18,10 +23,9 @@ * $ref: "#/components/schemas/swap" */ export default async (req, res) => { - const swapService = req.scope.resolve("swapService") + const swapService: SwapService = req.scope.resolve("swapService") - const limit = parseInt(req.query.limit) || 50 - const offset = parseInt(req.query.offset) || 0 + const { offset, limit } = await validator(AdminGetSwapsParams, req.query) const selector = {} @@ -35,3 +39,15 @@ export default async (req, res) => { res.json({ swaps, count: swaps.length, offset, limit }) } + +export class AdminGetSwapsParams { + @IsInt() + @IsOptional() + @Type(() => Number) + limit?: number = 50 + + @IsInt() + @IsOptional() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/admin/users/create-user.js b/packages/medusa/src/api/routes/admin/users/create-user.js deleted file mode 100644 index 96cae824cb..0000000000 --- a/packages/medusa/src/api/routes/admin/users/create-user.js +++ /dev/null @@ -1,22 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import _ from "lodash" - -export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - name: Validator.string().optional(), - password: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const userService = req.scope.resolve("userService") - const data = _.pick(value, ["email", "name"]) - - const user = await userService.create(data, value.password) - - res.status(200).json({ user }) -} diff --git a/packages/medusa/src/api/routes/admin/users/create-user.ts b/packages/medusa/src/api/routes/admin/users/create-user.ts new file mode 100644 index 0000000000..704046e9ea --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/create-user.ts @@ -0,0 +1,62 @@ +import { IsEmail, IsOptional, IsString } from "class-validator" +import _ from "lodash" +import UserService from "../../../../services/user" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /users + * operationId: "PostUsers" + * summary: "Create a User" + * description: "Creates a User" + * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * - password + * properties: + * email: + * description: "The Users email." + * type: string + * name: + * description: "The name of the User." + * type: string + * password: + * description: "The Users password." + * type: string + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * user: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + const validated = await validator(AdminCreateUserRequest, req.body) + + const userService: UserService = req.scope.resolve("userService") + const data = _.pick(validated, ["email", "name"]) + + const user = await userService.create(data, validated.password) + + res.status(200).json({ user }) +} + +export class AdminCreateUserRequest { + @IsEmail() + email: string + + @IsOptional() + @IsString() + name?: string + + @IsString() + password: string +} diff --git a/packages/medusa/src/api/routes/admin/users/delete-user.js b/packages/medusa/src/api/routes/admin/users/delete-user.js deleted file mode 100644 index 05d83125cb..0000000000 --- a/packages/medusa/src/api/routes/admin/users/delete-user.js +++ /dev/null @@ -1,12 +0,0 @@ -export default async (req, res) => { - const { user_id } = req.params - - const userService = req.scope.resolve("userService") - await userService.delete(user_id) - - res.status(200).send({ - id: user_id, - object: "user", - deleted: true, - }) -} diff --git a/packages/medusa/src/api/routes/admin/users/delete-user.ts b/packages/medusa/src/api/routes/admin/users/delete-user.ts new file mode 100644 index 0000000000..94e29add44 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/delete-user.ts @@ -0,0 +1,40 @@ +import UserService from "../../../../services/user" + +/** + * @oas [delete] /users/{user_id} + * operationId: "DeleteUsersUser" + * summary: "Delete a User" + * description: "Deletes a User" + * x-authenticated: true + * parameters: + * - (path) user_id=* {string} The id of the User. + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * id: + * type: string + * description: The id of the deleted Shipping Profile. + * object: + * type: string + * description: The type of the object that was deleted. + * deleted: + * type: boolean + */ +export default async (req, res) => { + const { user_id } = req.params + + const userService: UserService = req.scope.resolve("userService") + await userService.delete(user_id) + + res.status(200).send({ + id: user_id, + object: "user", + deleted: true, + }) +} diff --git a/packages/medusa/src/api/routes/admin/users/get-user.js b/packages/medusa/src/api/routes/admin/users/get-user.js deleted file mode 100644 index d6cad144d7..0000000000 --- a/packages/medusa/src/api/routes/admin/users/get-user.js +++ /dev/null @@ -1,8 +0,0 @@ -export default async (req, res) => { - const { user_id } = req.params - - const userService = req.scope.resolve("userService") - - const user = await userService.retrieve(user_id) - res.json({ user }) -} diff --git a/packages/medusa/src/api/routes/admin/users/get-user.ts b/packages/medusa/src/api/routes/admin/users/get-user.ts new file mode 100644 index 0000000000..4924803394 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/get-user.ts @@ -0,0 +1,30 @@ +import UserService from "../../../../services/user" + +/** + * @oas [get] /users/{id} + * operationId: "GetUsersUser" + * summary: "Retrieve a User" + * description: "Retrieves a User." + * x-authenticated: true + * parameters: + * - (path) id=* {string} The id of the User. + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * user: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + const { user_id } = req.params + + const userService: UserService = req.scope.resolve("userService") + + const user = await userService.retrieve(user_id) + res.json({ user }) +} diff --git a/packages/medusa/src/api/routes/admin/users/index.js b/packages/medusa/src/api/routes/admin/users/index.ts similarity index 100% rename from packages/medusa/src/api/routes/admin/users/index.js rename to packages/medusa/src/api/routes/admin/users/index.ts diff --git a/packages/medusa/src/api/routes/admin/users/list-users.js b/packages/medusa/src/api/routes/admin/users/list-users.js deleted file mode 100644 index d5ce97960f..0000000000 --- a/packages/medusa/src/api/routes/admin/users/list-users.js +++ /dev/null @@ -1,6 +0,0 @@ -export default async (req, res) => { - const userService = req.scope.resolve("userService") - const users = await userService.list({}) - - res.status(200).json({ users }) -} diff --git a/packages/medusa/src/api/routes/admin/users/list-users.ts b/packages/medusa/src/api/routes/admin/users/list-users.ts new file mode 100644 index 0000000000..e160b7f68e --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/list-users.ts @@ -0,0 +1,28 @@ +import UserService from "../../../../services/user" + +/** + * @oas [get] /users + * operationId: "GetUsers" + * summary: "Retrieve all users" + * description: "Retrieves all users." + * x-authenticated: true + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * users: + * type: array + * items: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + const userService: UserService = req.scope.resolve("userService") + const users = await userService.list({}) + + res.status(200).json({ users }) +} diff --git a/packages/medusa/src/api/routes/admin/users/reset-password-token.js b/packages/medusa/src/api/routes/admin/users/reset-password-token.js deleted file mode 100644 index 6b352f435f..0000000000 --- a/packages/medusa/src/api/routes/admin/users/reset-password-token.js +++ /dev/null @@ -1,19 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - const userService = req.scope.resolve("userService") - const user = await userService.retrieveByEmail(value.email) - - // Should call a email service provider that sends the token to the user - await userService.generateResetPasswordToken(user.id) - - res.sendStatus(204) -} diff --git a/packages/medusa/src/api/routes/admin/users/reset-password-token.ts b/packages/medusa/src/api/routes/admin/users/reset-password-token.ts new file mode 100644 index 0000000000..6845d9ca41 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/reset-password-token.ts @@ -0,0 +1,42 @@ +import { IsEmail } from "class-validator" +import UserService from "../../../../services/user" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /users/password-token + * operationId: "PostUsersUserPasswordToken" + * summary: "Generate a password token for a User." + * description: "Generates a password token for a User with a given email." + * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * properties: + * email: + * description: "The Users email." + * type: string + * tags: + * - Users + * responses: + * 204: + * description: OK + */ +export default async (req, res) => { + const validated = await validator(AdminResetPasswordTokenRequest, req.body) + + const userService: UserService = req.scope.resolve("userService") + const user = await userService.retrieveByEmail(validated.email) + + // Should call a email service provider that sends the token to the user + await userService.generateResetPasswordToken(user.id) + + res.sendStatus(204) +} + +export class AdminResetPasswordTokenRequest { + @IsEmail() + email: string +} diff --git a/packages/medusa/src/api/routes/admin/users/reset-password.js b/packages/medusa/src/api/routes/admin/users/reset-password.js deleted file mode 100644 index 407297c5d2..0000000000 --- a/packages/medusa/src/api/routes/admin/users/reset-password.js +++ /dev/null @@ -1,27 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import jwt from "jsonwebtoken" - -export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - token: Validator.string().required(), - password: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - const userService = req.scope.resolve("userService") - const user = await userService.retrieveByEmail(value.email) - - const decodedToken = await jwt.verify(value.token, user.password_hash) - if (!decodedToken || decodedToken.user_id !== user.id) { - res.status(401).send("Invalid or expired password reset token") - return - } - - const data = await userService.setPassword(user.id, value.password) - - res.status(200).json({ user: data }) -} diff --git a/packages/medusa/src/api/routes/admin/users/reset-password.ts b/packages/medusa/src/api/routes/admin/users/reset-password.ts new file mode 100644 index 0000000000..d0f5a3823e --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/reset-password.ts @@ -0,0 +1,71 @@ +import { IsEmail, IsString } from "class-validator" +import jwt from "jsonwebtoken" +import UserService from "../../../../services/user" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /users/password-token + * operationId: "PostUsersUserPassword" + * summary: "Set the password for a User." + * description: "Sets the password for a User given the correct token." + * x-authenticated: true + * requestBody: + * content: + * application/json: + * schema: + * required: + * - email + * - token + * - password + * properties: + * email: + * description: "The Users email." + * type: string + * token: + * description: "The token generated from the 'password-token' endpoint." + * type: string + * password: + * description: "The Users new password." + * type: string + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * user: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + const validated = await validator(AdminResetPasswordRequest, req.body) + + const userService: UserService = req.scope.resolve("userService") + const user = await userService.retrieveByEmail(validated.email) + + const decodedToken = jwt.verify(validated.token, user.password_hash) as { + user_id: string + } + + if (!decodedToken || decodedToken.user_id !== user.id) { + res.status(401).send("Invalid or expired password reset token") + return + } + + const data = await userService.setPassword(user.id, validated.password) + + res.status(200).json({ user: data }) +} + +export class AdminResetPasswordRequest { + @IsEmail() + email: string + + @IsString() + token: string + + @IsString() + password: string +} diff --git a/packages/medusa/src/api/routes/admin/users/update-user.js b/packages/medusa/src/api/routes/admin/users/update-user.js deleted file mode 100644 index 1887df155a..0000000000 --- a/packages/medusa/src/api/routes/admin/users/update-user.js +++ /dev/null @@ -1,18 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -export default async (req, res) => { - const { user_id } = req.params - const schema = Validator.object().keys({ - name: Validator.string().optional(), - api_token: Validator.string().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const userService = req.scope.resolve("userService") - const data = await userService.update(user_id, value) - res.status(200).json({ user: data }) -} diff --git a/packages/medusa/src/api/routes/admin/users/update-user.ts b/packages/medusa/src/api/routes/admin/users/update-user.ts new file mode 100644 index 0000000000..a8f141b8ff --- /dev/null +++ b/packages/medusa/src/api/routes/admin/users/update-user.ts @@ -0,0 +1,45 @@ +import { IsOptional, IsString } from "class-validator" +import UserService from "../../../../services/user" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /users/{user_id} + * operationId: "PostUsersUser" + * summary: "Update a User" + * description: "Updates a User" + * x-authenticated: true + * parameters: + * - (path) user_id=* {string} The id of the User. + * - (body) name {string} The name of the User. + * - (body) api_token {string} The api_token of the User. + * tags: + * - Users + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * user: + * $ref: "#/components/schemas/user" + */ +export default async (req, res) => { + const { user_id } = req.params + + const validated = await validator(AdminUpdateUserRequest, req.body) + + const userService: UserService = req.scope.resolve("userService") + const data = await userService.update(user_id, validated) + res.status(200).json({ user: data }) +} + +export class AdminUpdateUserRequest { + @IsString() + @IsOptional() + name?: string + + @IsString() + @IsOptional() + api_token?: string +} diff --git a/packages/medusa/src/api/routes/admin/variants/index.js b/packages/medusa/src/api/routes/admin/variants/index.ts similarity index 60% rename from packages/medusa/src/api/routes/admin/variants/index.js rename to packages/medusa/src/api/routes/admin/variants/index.ts index 938ab7f8d9..d237722d5f 100644 --- a/packages/medusa/src/api/routes/admin/variants/index.js +++ b/packages/medusa/src/api/routes/admin/variants/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" + +import { PaginatedResponse } from "../../../../types/common" +import { ProductVariant } from "../../../../models/product-variant" import middlewares from "../../../middlewares" const route = Router() @@ -11,9 +14,9 @@ export default (app) => { return app } -export const defaultRelations = ["product", "prices", "options"] +export const defaultAdminVariantRelations = ["product", "prices", "options"] -export const defaultFields = [ +export const defaultAdminVariantFields: (keyof ProductVariant)[] = [ "id", "title", "product_id", @@ -36,7 +39,7 @@ export const defaultFields = [ "metadata", ] -export const allowedFields = [ +export const allowedAdminVariantFields = [ "id", "title", "product_id", @@ -59,4 +62,12 @@ export const allowedFields = [ "metadata", ] -export const allowedRelations = ["product", "prices", "options"] +export const allowedAdminVariantRelations: (keyof ProductVariant)[] = [ + "product", + "prices", + "options", +] + +export type AdminVariantsListRes = PaginatedResponse & { + variants: ProductVariant[] +} diff --git a/packages/medusa/src/api/routes/admin/variants/list-variants.js b/packages/medusa/src/api/routes/admin/variants/list-variants.js deleted file mode 100644 index cb674ce819..0000000000 --- a/packages/medusa/src/api/routes/admin/variants/list-variants.js +++ /dev/null @@ -1,43 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /variants - * operationId: "GetVariants" - * summary: "List Product Variants." - * description: "Retrieves a list of Product Variants" - * tags: - * - Product Variant - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * variants: - * type: array - * items: - * $ref: "#/components/schemas/product_variant" - */ -export default async (req, res) => { - const variantService = req.scope.resolve("productVariantService") - - const limit = parseInt(req.query.limit) || 20 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("q" in req.query) { - selector.q = req.query.q - } - - const listConfig = { - select: defaultFields, - relations: defaultRelations, - skip: offset, - take: limit, - } - const variants = await variantService.list(selector, listConfig) - - res.json({ variants, count: variants.length, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/admin/variants/list-variants.ts b/packages/medusa/src/api/routes/admin/variants/list-variants.ts new file mode 100644 index 0000000000..d4b56bc3a4 --- /dev/null +++ b/packages/medusa/src/api/routes/admin/variants/list-variants.ts @@ -0,0 +1,76 @@ +import { defaultAdminVariantFields, defaultAdminVariantRelations } from "./" + +import { FilterableProductVariantProps } from "../../../../types/product-variant" +import { FindConfig } from "../../../../types/common" +import { ProductVariant } from "../../../../models/product-variant" +import ProductVariantService from "../../../../services/product-variant" +import { validator } from "../../../../utils/validator" +import { Type } from "class-transformer" +import { IsInt, IsOptional, IsString } from "class-validator" +/** + * @oas [get] /variants + * operationId: "GetVariants" + * summary: "List Product Variants." + * description: "Retrieves a list of Product Variants" + * x-authenticated: true + * parameters: + * - (query) q {string} Query used for searching variants. + * - (query) offset {string} How many variants to skip in the result. + * - (query) limit {string} Limit the number of variants returned. + * tags: + * - Product Variant + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * variants: + * type: array + * items: + * $ref: "#/components/schemas/product_variant" + */ +export default async (req, res) => { + const variantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + + const { offset, limit, q } = await validator( + AdminGetVariantsParams, + req.query + ) + + const selector: FilterableProductVariantProps = {} + + if ("q" in req.query) { + selector.q = req.query.q + } + + const listConfig: FindConfig = { + select: defaultAdminVariantFields, + relations: defaultAdminVariantRelations, + skip: offset, + take: limit, + } + + const variants = await variantService.list(selector, listConfig) + + res.json({ variants, count: variants.length, offset, limit }) +} + +export class AdminGetVariantsParams { + @IsString() + @IsOptional() + q?: string + + @IsInt() + @IsOptional() + @Type(() => Number) + limit?: number = 20 + + @IsInt() + @IsOptional() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/store/auth/create-session.js b/packages/medusa/src/api/routes/store/auth/create-session.ts similarity index 61% rename from packages/medusa/src/api/routes/store/auth/create-session.js rename to packages/medusa/src/api/routes/store/auth/create-session.ts index 75cfd2f323..f0592f9968 100644 --- a/packages/medusa/src/api/routes/store/auth/create-session.js +++ b/packages/medusa/src/api/routes/store/auth/create-session.ts @@ -1,6 +1,9 @@ +import { IsEmail, IsNotEmpty } from "class-validator" import jwt from "jsonwebtoken" -import { Validator } from "medusa-core-utils" import config from "../../../../config" +import AuthService from "../../../../services/auth" +import CustomerService from "../../../../services/customer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /auth @@ -23,23 +26,14 @@ import config from "../../../../config" * $ref: "#/components/schemas/customer" */ export default async (req, res) => { - const { body } = req - const schema = Validator.object().keys({ - email: Validator.string().required(), - password: Validator.string().required(), - }) - const { value, error } = schema.validate(body) + const validated = await validator(StorePostAuthReq, req.body) - if (error) { - throw error - } - - const authService = req.scope.resolve("authService") - const customerService = req.scope.resolve("customerService") + const authService: AuthService = req.scope.resolve("authService") + const customerService: CustomerService = req.scope.resolve("customerService") const result = await authService.authenticateCustomer( - value.email, - value.password + validated.email, + validated.password ) if (!result.success) { res.sendStatus(401) @@ -48,16 +42,24 @@ export default async (req, res) => { // Add JWT to cookie req.session.jwt = jwt.sign( - { customer_id: result.customer.id }, - config.jwtSecret, + { customer_id: result.customer?.id }, + (config as any).jwtSecret, { expiresIn: "30d", } ) - const customer = await customerService.retrieve(result.customer.id, { + const customer = await customerService.retrieve(result.customer?.id || "", { relations: ["orders", "orders.items"], }) res.json({ customer }) } + +export class StorePostAuthReq { + @IsEmail() + email: string + + @IsNotEmpty() + password: string +} diff --git a/packages/medusa/src/api/routes/store/auth/delete-session.js b/packages/medusa/src/api/routes/store/auth/delete-session.ts similarity index 100% rename from packages/medusa/src/api/routes/store/auth/delete-session.js rename to packages/medusa/src/api/routes/store/auth/delete-session.ts diff --git a/packages/medusa/src/api/routes/store/auth/exists.js b/packages/medusa/src/api/routes/store/auth/exists.ts similarity index 83% rename from packages/medusa/src/api/routes/store/auth/exists.js rename to packages/medusa/src/api/routes/store/auth/exists.ts index 4d6e00622f..bfa11c3729 100644 --- a/packages/medusa/src/api/routes/store/auth/exists.js +++ b/packages/medusa/src/api/routes/store/auth/exists.ts @@ -1,3 +1,4 @@ +import CustomerService from "../../../../services/customer" /** * @oas [get] /auth/{email} * operationId: "GetAuthEmail" @@ -21,7 +22,8 @@ export default async (req, res) => { const { email } = req.params try { - const customerService = req.scope.resolve("customerService") + const customerService: CustomerService = + req.scope.resolve("customerService") const customer = await customerService.retrieveByEmail(email) res.status(200).json({ exists: !!customer.password_hash }) } catch (err) { diff --git a/packages/medusa/src/api/routes/store/auth/get-session.js b/packages/medusa/src/api/routes/store/auth/get-session.ts similarity index 79% rename from packages/medusa/src/api/routes/store/auth/get-session.js rename to packages/medusa/src/api/routes/store/auth/get-session.ts index e5cf33f09d..eb3f842b96 100644 --- a/packages/medusa/src/api/routes/store/auth/get-session.js +++ b/packages/medusa/src/api/routes/store/auth/get-session.ts @@ -1,8 +1,10 @@ +import CustomerService from "../../../../services/customer" /** * @oas [get] /auth * operationId: "GetAuth" * summary: "Get Session" * description: "Gets the currently logged in Customer." + * x-authenticated: true * tags: * - Auth * responses: @@ -17,10 +19,13 @@ */ export default async (req, res) => { if (req.user && req.user.customer_id) { - const customerService = req.scope.resolve("customerService") + const customerService: CustomerService = + req.scope.resolve("customerService") + const customer = await customerService.retrieve(req.user.customer_id, { relations: ["shipping_addresses", "orders", "orders.items"], }) + res.json({ customer }) } else { res.sendStatus(401) diff --git a/packages/medusa/src/api/routes/store/auth/index.js b/packages/medusa/src/api/routes/store/auth/index.ts similarity index 64% rename from packages/medusa/src/api/routes/store/auth/index.js rename to packages/medusa/src/api/routes/store/auth/index.ts index 5cfb274b20..c41b37b827 100644 --- a/packages/medusa/src/api/routes/store/auth/index.js +++ b/packages/medusa/src/api/routes/store/auth/index.ts @@ -1,4 +1,5 @@ import { Router } from "express" +import { Customer } from "./../../../.." import middlewares from "../../../middlewares" const route = Router() @@ -17,3 +18,16 @@ export default (app) => { return app } + +export type StoreAuthRes = { + customer: Customer +} + +export type StoreGetAuthEmailRes = { + exists: boolean +} + +export * from "./create-session" +export * from "./delete-session" +export * from "./exists" +export * from "./get-session" 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 643940cd05..b19a7ba7fc 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 @@ -1,5 +1,4 @@ import { IdMap } from "medusa-test-utils" -import { defaultFields, defaultRelations } from ".." import { request } from "../../../../../helpers/test-request" import { CartServiceMock } from "../../../../../services/__mocks__/cart" import { OrderServiceMock } from "../../../../../services/__mocks__/order" diff --git a/packages/medusa/src/api/routes/store/carts/__tests__/update-cart.js b/packages/medusa/src/api/routes/store/carts/__tests__/update-cart.js index c840b37788..35e34f03cd 100644 --- a/packages/medusa/src/api/routes/store/carts/__tests__/update-cart.js +++ b/packages/medusa/src/api/routes/store/carts/__tests__/update-cart.js @@ -1,5 +1,5 @@ import { IdMap } from "medusa-test-utils" -import { defaultFields, defaultRelations } from ".." +import { defaultStoreCartFields, defaultStoreCartRelations } from ".." import { request } from "../../../../../helpers/test-request" import { CartServiceMock } from "../../../../../services/__mocks__/cart" @@ -60,7 +60,7 @@ describe("POST /store/carts/:id", () => { ) }) - it("calls get product from productSerice", () => { + it("calls get product from productService", () => { expect(CartServiceMock.retrieve).toHaveBeenCalledTimes(2) expect(CartServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("emptyCart"), @@ -71,8 +71,8 @@ describe("POST /store/carts/:id", () => { expect(CartServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("emptyCart"), { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCartRelations, + select: defaultStoreCartFields, } ) }) diff --git a/packages/medusa/src/api/routes/store/carts/__tests__/update-line-item.js b/packages/medusa/src/api/routes/store/carts/__tests__/update-line-item.js index c25f8e3f21..c0e5e2ff0d 100644 --- a/packages/medusa/src/api/routes/store/carts/__tests__/update-line-item.js +++ b/packages/medusa/src/api/routes/store/carts/__tests__/update-line-item.js @@ -1,7 +1,6 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { CartServiceMock } from "../../../../../services/__mocks__/cart" -import { LineItemServiceMock } from "../../../../../services/__mocks__/line-item" describe("POST /store/carts/:id/line-items/:line_id", () => { describe("successfully updates a line item", () => { diff --git a/packages/medusa/src/api/routes/store/carts/__tests__/update-payment-method.js b/packages/medusa/src/api/routes/store/carts/__tests__/update-payment-method.js index a8be1310b0..3c405175bd 100644 --- a/packages/medusa/src/api/routes/store/carts/__tests__/update-payment-method.js +++ b/packages/medusa/src/api/routes/store/carts/__tests__/update-payment-method.js @@ -1,7 +1,6 @@ import { IdMap } from "medusa-test-utils" import { request } from "../../../../../helpers/test-request" import { CartServiceMock } from "../../../../../services/__mocks__/cart" -import { LineItemServiceMock } from "../../../../../services/__mocks__/line-item" describe("POST /store/carts/:id/payment-method", () => { describe("successfully sets the payment method", () => { diff --git a/packages/medusa/src/api/routes/store/carts/add-shipping-method.js b/packages/medusa/src/api/routes/store/carts/add-shipping-method.js deleted file mode 100644 index 0b46653bbf..0000000000 --- a/packages/medusa/src/api/routes/store/carts/add-shipping-method.js +++ /dev/null @@ -1,66 +0,0 @@ -import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts/{id}/shipping-methods - * operationId: "PostCartsCartShippingMethod" - * description: "Adds a Shipping Method to the Cart." - * summary: "Add a Shipping Method" - * tags: - * - Cart - * parameters: - * - (path) id=* {String} The cart id. - * - (body) option_id=* {String} id of the shipping option to create the method from - * - (body) data {Object} Used to hold any data that the shipping method may need to process the fulfillment of the order. Look at the documentation for your installed fulfillment providers to find out what to send. - * responses: - * "200": - * description: "A successful response" - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - option_id: Validator.string().required(), - data: Validator.object().optional().default({}), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const manager = req.scope.resolve("manager") - const cartService = req.scope.resolve("cartService") - - await manager.transaction(async (m) => { - const txCartService = cartService.withTransaction(m) - - await txCartService.addShippingMethod(id, value.option_id, value.data) - - const updated = await txCartService.retrieve(id, { - relations: ["payment_sessions"], - }) - - if (updated.payment_sessions?.length) { - await txCartService.setPaymentSessions(id) - } - }) - - const updatedCart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart: updatedCart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts b/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts new file mode 100644 index 0000000000..ae56e660ed --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/add-shipping-method.ts @@ -0,0 +1,71 @@ +import { IsOptional, IsString } from "class-validator" +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts/{id}/shipping-methods + * operationId: "PostCartsCartShippingMethod" + * description: "Adds a Shipping Method to the Cart." + * summary: "Add a Shipping Method" + * tags: + * - Cart + * parameters: + * - (path) id=* {String} The cart id. + * - (body) option_id=* {String} id of the shipping option to create the method from + * - (body) data {Object} Used to hold any data that the shipping method may need to process the fulfillment of the order. Look at the documentation for your installed fulfillment providers to find out what to send. + * responses: + * "200": + * description: "A successful response" + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator( + StorePostCartsCartShippingMethodReq, + req.body + ) + + const manager: EntityManager = req.scope.resolve("manager") + const cartService: CartService = req.scope.resolve("cartService") + + await manager.transaction(async (m) => { + const txCartService = cartService.withTransaction(m) + + await txCartService.addShippingMethod( + id, + validated.option_id, + validated.data + ) + + const updated = await txCartService.retrieve(id, { + relations: ["payment_sessions"], + }) + + if (updated.payment_sessions?.length) { + await txCartService.setPaymentSessions(id) + } + }) + + const updatedCart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart: updatedCart }) +} + +export class StorePostCartsCartShippingMethodReq { + @IsString() + option_id: string + + @IsOptional() + data?: object = {} +} diff --git a/packages/medusa/src/api/routes/store/carts/complete-cart.js b/packages/medusa/src/api/routes/store/carts/complete-cart.js deleted file mode 100644 index aad91a4a76..0000000000 --- a/packages/medusa/src/api/routes/store/carts/complete-cart.js +++ /dev/null @@ -1,282 +0,0 @@ -import { MedusaError } from "medusa-core-utils" - -/** - * @oas [post] /carts/{id}/complete - * summary: "Complete a Cart" - * operationId: "PostCartsCartComplete" - * description: "Completes a cart. The following steps will be performed. Payment - * authorization is attempted and if more work is required, we simply return - * the cart for further updates. If payment is authorized and order is not yet - * created, we make sure to do so. The completion of a cart can be performed - * idempotently with a provided header `Idempotency-Key`. If not provided, we - * will generate one for the request." - * parameters: - * - (path) id=* {String} The Cart id. - * tags: - * - Cart - * responses: - * 200: - * description: "If a cart was successfully authorized, but requires further - * action from the user the response body will contain the cart with an - * updated payment session. If the Cart was successfully completed the - * response body will contain the newly created Order." - * content: - * application/json: - * schema: - * oneOf: - * - type: object - * properties: - * order: - * $ref: "#/components/schemas/order" - * - type: object - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id } = req.params - - const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") - - const headerKey = req.get("Idempotency-Key") || "" - - let idempotencyKey - try { - idempotencyKey = await idempotencyKeyService.initializeRequest( - headerKey, - req.method, - req.params, - req.path - ) - } catch (error) { - console.log(error) - res.status(409).send("Failed to create idempotency key") - return - } - - res.setHeader("Access-Control-Expose-Headers", "Idempotency-Key") - res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) - - try { - const cartService = req.scope.resolve("cartService") - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - - let inProgress = true - let err = false - - while (inProgress) { - switch (idempotencyKey.recovery_point) { - case "started": { - const { key, error } = await idempotencyKeyService.workStage( - idempotencyKey.idempotency_key, - async (manager) => { - let cart = await cartService.withTransaction(manager).retrieve(id) - - if (cart.completed_at) { - return { - response_code: 409, - response_body: { - code: MedusaError.Codes.CART_INCOMPATIBLE_STATE, - message: "Cart has already been completed", - type: MedusaError.Types.NOT_ALLOWED, - }, - } - } - - cart = await cartService - .withTransaction(manager) - .authorizePayment(id, { - ...req.request_context, - idempotency_key: idempotencyKey.idempotency_key, - }) - - if (cart.payment_session) { - if ( - cart.payment_session.status === "requires_more" || - cart.payment_session.status === "pending" - ) { - return { - response_code: 200, - response_body: { - data: cart, - payment_status: cart.payment_session.status, - type: "cart", - }, - } - } - } - - return { - recovery_point: "payment_authorized", - } - } - ) - - if (error) { - inProgress = false - err = error - } else { - idempotencyKey = key - } - break - } - - case "payment_authorized": { - const { key, error } = await idempotencyKeyService.workStage( - idempotencyKey.idempotency_key, - async (manager) => { - const cart = await cartService - .withTransaction(manager) - .retrieve(id, { - select: ["total"], - relations: ["payment", "payment_sessions"], - }) - - let order - - // If cart is part of swap, we register swap as complete - switch (cart.type) { - case "swap": { - try { - const swapId = cart.metadata?.swap_id - let swap = await swapService - .withTransaction(manager) - .registerCartCompletion(swapId) - - swap = await swapService - .withTransaction(manager) - .retrieve(swap.id, { relations: ["shipping_address"] }) - - return { - response_code: 200, - response_body: { data: swap, type: "swap" }, - } - } catch (error) { - if ( - error && - error.code === MedusaError.Codes.INSUFFICIENT_INVENTORY - ) { - return { - response_code: 409, - response_body: { - message: error.message, - type: error.type, - code: error.code, - }, - } - } else { - throw error - } - } - } - // case "payment_link": - default: { - if (!cart.payment && cart.total > 0) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - `Cart payment not authorized` - ) - } - - try { - order = await orderService - .withTransaction(manager) - .createFromCart(cart.id) - } catch (error) { - if ( - error && - error.message === "Order from cart already exists" - ) { - order = await orderService - .withTransaction(manager) - .retrieveByCartId(id, { - select: [ - "subtotal", - "tax_total", - "shipping_total", - "discount_total", - "total", - ], - relations: ["shipping_address", "items", "payments"], - }) - - return { - response_code: 200, - response_body: { data: order, type: "order" }, - } - } else if ( - error && - error.code === MedusaError.Codes.INSUFFICIENT_INVENTORY - ) { - return { - response_code: 409, - response_body: { - message: error.message, - type: error.type, - code: error.code, - }, - } - } else { - throw error - } - } - } - } - - order = await orderService - .withTransaction(manager) - .retrieve(order.id, { - select: [ - "subtotal", - "tax_total", - "shipping_total", - "discount_total", - "total", - ], - relations: ["shipping_address", "items", "payments"], - }) - - return { - response_code: 200, - response_body: { data: order, type: "order" }, - } - } - ) - - if (error) { - inProgress = false - err = error - } else { - idempotencyKey = key - } - break - } - - case "finished": { - inProgress = false - break - } - - default: - idempotencyKey = await idempotencyKeyService.update( - idempotencyKey.idempotency_key, - { - recovery_point: "finished", - response_code: 500, - response_body: { message: "Unknown recovery point" }, - } - ) - break - } - } - - if (err) { - throw err - } - - res.status(idempotencyKey.response_code).json(idempotencyKey.response_body) - } catch (error) { - throw error - } -} diff --git a/packages/medusa/src/api/routes/store/carts/complete-cart.ts b/packages/medusa/src/api/routes/store/carts/complete-cart.ts new file mode 100644 index 0000000000..7f3f5074de --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/complete-cart.ts @@ -0,0 +1,286 @@ +import { MedusaError } from "medusa-core-utils" +import { + CartService, + IdempotencyKeyService, + OrderService, + SwapService, +} from "../../../../services" + +/** + * @oas [post] /carts/{id}/complete + * summary: "Complete a Cart" + * operationId: "PostCartsCartComplete" + * description: "Completes a cart. The following steps will be performed. Payment + * authorization is attempted and if more work is required, we simply return + * the cart for further updates. If payment is authorized and order is not yet + * created, we make sure to do so. The completion of a cart can be performed + * idempotently with a provided header `Idempotency-Key`. If not provided, we + * will generate one for the request." + * parameters: + * - (path) id=* {String} The Cart id. + * tags: + * - Cart + * responses: + * 200: + * description: "If a cart was successfully authorized, but requires further + * action from the user the response body will contain the cart with an + * updated payment session. If the Cart was successfully completed the + * response body will contain the newly created Order." + * content: + * application/json: + * schema: + * oneOf: + * - type: object + * properties: + * order: + * $ref: "#/components/schemas/order" + * - type: object + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const idempotencyKeyService: IdempotencyKeyService = req.scope.resolve( + "idempotencyKeyService" + ) + + const headerKey = req.get("Idempotency-Key") || "" + + let idempotencyKey + try { + idempotencyKey = await idempotencyKeyService.initializeRequest( + headerKey, + req.method, + req.params, + req.path + ) + } catch (error) { + console.log(error) + res.status(409).send("Failed to create idempotency key") + return + } + + res.setHeader("Access-Control-Expose-Headers", "Idempotency-Key") + res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) + + const cartService: CartService = req.scope.resolve("cartService") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + + let inProgress = true + let err = false + + while (inProgress) { + switch (idempotencyKey.recovery_point) { + case "started": { + const { key, error } = await idempotencyKeyService.workStage( + idempotencyKey.idempotency_key, + async (manager) => { + let cart = await cartService.withTransaction(manager).retrieve(id) + + if (cart.completed_at) { + return { + response_code: 409, + response_body: { + code: MedusaError.Codes.CART_INCOMPATIBLE_STATE, + message: "Cart has already been completed", + type: MedusaError.Types.NOT_ALLOWED, + }, + } + } + + cart = await cartService + .withTransaction(manager) + .authorizePayment(id, { + ...req.request_context, + idempotency_key: idempotencyKey.idempotency_key, + }) + + if (cart.payment_session) { + if ( + cart.payment_session.status === "requires_more" || + cart.payment_session.status === "pending" + ) { + return { + response_code: 200, + response_body: { + data: cart, + payment_status: cart.payment_session.status, + type: "cart", + }, + } + } + } + + return { + recovery_point: "payment_authorized", + } + } + ) + + if (error) { + inProgress = false + err = error + } else { + idempotencyKey = key + } + break + } + + case "payment_authorized": { + const { key, error } = await idempotencyKeyService.workStage( + idempotencyKey.idempotency_key, + async (manager) => { + const cart = await cartService + .withTransaction(manager) + .retrieve(id, { + select: ["total"], + relations: ["payment", "payment_sessions"], + }) + + let order + + // If cart is part of swap, we register swap as complete + switch (cart.type) { + case "swap": { + try { + const swapId = cart.metadata?.swap_id + let swap = await swapService + .withTransaction(manager) + .registerCartCompletion(swapId) + + swap = await swapService + .withTransaction(manager) + .retrieve(swap.id, { relations: ["shipping_address"] }) + + return { + response_code: 200, + response_body: { data: swap, type: "swap" }, + } + } catch (error) { + if ( + error && + error.code === MedusaError.Codes.INSUFFICIENT_INVENTORY + ) { + return { + response_code: 409, + response_body: { + message: error.message, + type: error.type, + code: error.code, + }, + } + } else { + throw error + } + } + } + // case "payment_link": + default: { + if (!cart.payment && cart.total > 0) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Cart payment not authorized` + ) + } + + try { + order = await orderService + .withTransaction(manager) + .createFromCart(cart.id) + } catch (error) { + if ( + error && + error.message === "Order from cart already exists" + ) { + order = await orderService + .withTransaction(manager) + .retrieveByCartId(id, { + select: [ + "subtotal", + "tax_total", + "shipping_total", + "discount_total", + "total", + ], + relations: ["shipping_address", "items", "payments"], + }) + + return { + response_code: 200, + response_body: { data: order, type: "order" }, + } + } else if ( + error && + error.code === MedusaError.Codes.INSUFFICIENT_INVENTORY + ) { + return { + response_code: 409, + response_body: { + message: error.message, + type: error.type, + code: error.code, + }, + } + } else { + throw error + } + } + } + } + + order = await orderService + .withTransaction(manager) + .retrieve(order.id, { + select: [ + "subtotal", + "tax_total", + "shipping_total", + "discount_total", + "total", + ], + relations: ["shipping_address", "items", "payments"], + }) + + return { + response_code: 200, + response_body: { data: order, type: "order" }, + } + } + ) + + if (error) { + inProgress = false + err = error + } else { + idempotencyKey = key + } + break + } + + case "finished": { + inProgress = false + break + } + + default: + idempotencyKey = await idempotencyKeyService.update( + idempotencyKey.idempotency_key, + { + recovery_point: "finished", + response_code: 500, + response_body: { message: "Unknown recovery point" }, + } + ) + break + } + } + + if (err) { + throw err + } + + res.status(idempotencyKey.response_code).json(idempotencyKey.response_body) +} diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.js b/packages/medusa/src/api/routes/store/carts/create-cart.js deleted file mode 100644 index e614a0e1a0..0000000000 --- a/packages/medusa/src/api/routes/store/carts/create-cart.js +++ /dev/null @@ -1,143 +0,0 @@ -import reqIp from "request-ip" -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts - * summary: "Create a Cart" - * operationId: "PostCart" - * description: "Creates a Cart within the given region and with the initial items. If no - * `region_id` is provided the cart will be associated with the first Region - * available. If no items are provided the cart will be empty after creation. - * If a user is logged in the cart's customer id and email will be set." - * requestBody: - * content: - * application/json: - * schema: - * properties: - * region_id: - * type: string - * description: The id of the Region to create the Cart in. - * country_code: - * type: string - * description: "The 2 character ISO country code to create the Cart in." - * items: - * description: "An optional array of `variant_id`, `quantity` pairs to generate Line Items from." - * type: array - * items: - * properties: - * variant_id: - * description: The id of the Product Variant to generate a Line Item from. - * type: string - * quantity: - * description: The quantity of the Product Variant to add - * type: integer - * context: - * description: "An optional object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`" - * type: object - * tags: - * - Cart - * responses: - * 200: - * description: "Successfully created a new Cart" - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const schema = Validator.object().keys({ - region_id: Validator.string().optional(), - country_code: Validator.string().optional(), - items: Validator.array() - .items({ - variant_id: Validator.string().required(), - quantity: Validator.number().required(), - }) - .optional(), - context: Validator.object().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const reqContext = { - ip: reqIp.getClientIp(req), - user_agent: req.get("user-agent"), - } - - try { - const lineItemService = req.scope.resolve("lineItemService") - const cartService = req.scope.resolve("cartService") - - const entityManager = req.scope.resolve("manager") - - await entityManager.transaction(async (manager) => { - // Add a default region if no region has been specified - let regionId = value.region_id - if (!value.region_id) { - const regionService = req.scope.resolve("regionService") - const regions = await regionService.withTransaction(manager).list({}) - - if (!regions?.length) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - `A region is required to create a cart` - ) - } - - regionId = regions[0].id - } - - const toCreate = { - region_id: regionId, - context: { - ...reqContext, - ...value.context, - }, - } - - if (req.user && req.user.customer_id) { - const customerService = req.scope.resolve("customerService") - const customer = await customerService - .withTransaction(manager) - .retrieve(req.user.customer_id) - toCreate.customer_id = customer.id - toCreate.email = customer.email - } - - if (value.country_code) { - toCreate.shipping_address = { - country_code: value.country_code.toLowerCase(), - } - } - - let cart = await cartService.withTransaction(manager).create(toCreate) - if (value.items) { - await Promise.all( - value.items.map(async (i) => { - await lineItemService.withTransaction(manager).create({ - cart_id: cart.id, - variant_id: i.variant_id, - quantity: i.quantity, - region_id: value.region_id, - }) - }) - ) - } - - cart = await cartService.withTransaction(manager).retrieve(cart.id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/create-cart.ts b/packages/medusa/src/api/routes/store/carts/create-cart.ts new file mode 100644 index 0000000000..edd8905a37 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/create-cart.ts @@ -0,0 +1,170 @@ +import { Type } from "class-transformer" +import { + IsArray, + IsInt, + IsNotEmpty, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import reqIp from "request-ip" +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService, LineItemService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts + * summary: "Create a Cart" + * operationId: "PostCart" + * description: "Creates a Cart within the given region and with the initial items. If no + * `region_id` is provided the cart will be associated with the first Region + * available. If no items are provided the cart will be empty after creation. + * If a user is logged in the cart's customer id and email will be set." + * requestBody: + * content: + * application/json: + * schema: + * properties: + * region_id: + * type: string + * description: The id of the Region to create the Cart in. + * country_code: + * type: string + * description: "The 2 character ISO country code to create the Cart in." + * items: + * description: "An optional array of `variant_id`, `quantity` pairs to generate Line Items from." + * type: array + * items: + * properties: + * variant_id: + * description: The id of the Product Variant to generate a Line Item from. + * type: string + * quantity: + * description: The quantity of the Product Variant to add + * type: integer + * context: + * description: "An optional object to provide context to the Cart. The `context` field is automatically populated with `ip` and `user_agent`" + * type: object + * tags: + * - Cart + * responses: + * 200: + * description: "Successfully created a new Cart" + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const validated = await validator(StorePostCartReq, req.body) + + const reqContext = { + ip: reqIp.getClientIp(req), + user_agent: req.get("user-agent"), + } + + const lineItemService: LineItemService = req.scope.resolve("lineItemService") + const cartService: CartService = req.scope.resolve("cartService") + + const entityManager: EntityManager = req.scope.resolve("manager") + + await entityManager.transaction(async (manager) => { + // Add a default region if no region has been specified + let regionId = validated.region_id + if (!validated.region_id) { + const regionService = req.scope.resolve("regionService") + const regions = await regionService.withTransaction(manager).list({}) + + if (!regions?.length) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `A region is required to create a cart` + ) + } + + regionId = regions[0].id + } + + const toCreate: { + region_id: string | undefined + context: object + customer_id?: string + email?: string + shipping_address?: object + } = { + region_id: regionId, + context: { + ...reqContext, + ...validated.context, + }, + } + + if (req.user && req.user.customer_id) { + const customerService = req.scope.resolve("customerService") + const customer = await customerService + .withTransaction(manager) + .retrieve(req.user.customer_id) + toCreate["customer_id"] = customer.id + toCreate["email"] = customer.email + } + + if (validated.country_code) { + toCreate["shipping_address"] = { + country_code: validated.country_code.toLowerCase(), + } + } + + let cart = await cartService.withTransaction(manager).create(toCreate) + if (validated.items) { + await Promise.all( + validated.items.map(async (i) => { + await lineItemService.withTransaction(manager).create({ + cart_id: cart.id, + variant_id: i.variant_id, + quantity: i.quantity, + region_id: validated.region_id, + }) + }) + ) + } + + cart = await cartService.withTransaction(manager).retrieve(cart.id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) + }) +} + +export class Item { + @IsNotEmpty() + @IsString() + variant_id: string + + @IsNotEmpty() + @IsInt() + quantity: number +} +export class StorePostCartReq { + @IsOptional() + @IsString() + region_id?: string + + @IsOptional() + @IsString() + country_code?: string + + @IsOptional() + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + items?: Item[] + + @IsOptional() + context?: object +} diff --git a/packages/medusa/src/api/routes/store/carts/create-line-item.js b/packages/medusa/src/api/routes/store/carts/create-line-item.js deleted file mode 100644 index c3d5a66cfb..0000000000 --- a/packages/medusa/src/api/routes/store/carts/create-line-item.js +++ /dev/null @@ -1,75 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts/{id}/line-items - * operationId: PostCartsCartLineItems - * summary: "Add a Line Item" - * description: "Generates a Line Item with a given Product Variant and adds it - * to the Cart" - * parameters: - * - (path) id=* {string} The id of the Cart to add the Line Item to. - * - (body) variant_id=* {string} The id of the Product Variant to generate the Line Item from. - * - (body) quantity=* {integer} The quantity of the Product Variant to add to the Line Item. - * - (body) metadata {object} An optional key-value map with additional details about the Line Item. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - variant_id: Validator.string().required(), - quantity: Validator.number().required(), - metadata: Validator.object().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const manager = req.scope.resolve("manager") - const lineItemService = req.scope.resolve("lineItemService") - const cartService = req.scope.resolve("cartService") - - await manager.transaction(async (m) => { - const txCartService = cartService.withTransaction(m) - const cart = await txCartService.retrieve(id) - - const line = await lineItemService - .withTransaction(m) - .generate(value.variant_id, cart.region_id, value.quantity, { - metadata: value.metadata, - }) - await txCartService.addLineItem(id, line) - - const updated = await txCartService.retrieve(id, { - relations: ["payment_sessions"], - }) - - if (updated.payment_sessions?.length) { - await txCartService.setPaymentSessions(id) - } - }) - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/create-line-item.ts b/packages/medusa/src/api/routes/store/carts/create-line-item.ts new file mode 100644 index 0000000000..d5e6324be2 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/create-line-item.ts @@ -0,0 +1,76 @@ +import { IsInt, IsOptional, IsString } from "class-validator" +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService, LineItemService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts/{id}/line-items + * operationId: PostCartsCartLineItems + * summary: "Add a Line Item" + * description: "Generates a Line Item with a given Product Variant and adds it + * to the Cart" + * parameters: + * - (path) id=* {string} The id of the Cart to add the Line Item to. + * - (body) variant_id=* {string} The id of the Product Variant to generate the Line Item from. + * - (body) quantity=* {integer} The quantity of the Product Variant to add to the Line Item. + * - (body) metadata {object} An optional key-value map with additional details about the Line Item. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator(StorePostCartsCartLineItemsReq, req.body) + + const manager: EntityManager = req.scope.resolve("manager") + const lineItemService: LineItemService = req.scope.resolve("lineItemService") + const cartService: CartService = req.scope.resolve("cartService") + + await manager.transaction(async (m) => { + const txCartService = cartService.withTransaction(m) + const cart = await txCartService.retrieve(id) + + const line = await lineItemService + .withTransaction(m) + .generate(validated.variant_id, cart.region_id, validated.quantity, { + metadata: validated.metadata, + }) + await txCartService.addLineItem(id, line) + + const updated = await txCartService.retrieve(id, { + relations: ["payment_sessions"], + }) + + if (updated.payment_sessions?.length) { + await txCartService.setPaymentSessions(id) + } + }) + + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} + +export class StorePostCartsCartLineItemsReq { + @IsString() + variant_id: string + + @IsInt() + quantity: number + + @IsOptional() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/store/carts/create-payment-sessions.js b/packages/medusa/src/api/routes/store/carts/create-payment-sessions.ts similarity index 60% rename from packages/medusa/src/api/routes/store/carts/create-payment-sessions.js rename to packages/medusa/src/api/routes/store/carts/create-payment-sessions.ts index 61f562d44d..14e7ef0e66 100644 --- a/packages/medusa/src/api/routes/store/carts/create-payment-sessions.js +++ b/packages/medusa/src/api/routes/store/carts/create-payment-sessions.ts @@ -1,4 +1,5 @@ -import { defaultFields, defaultRelations } from "./" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" /** * @oas [post] /carts/{id}/payment-sessions @@ -22,18 +23,14 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - try { - const cartService = req.scope.resolve("cartService") + const cartService: CartService = req.scope.resolve("cartService") - await cartService.setPaymentSessions(id) + await cartService.setPaymentSessions(id) - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) - res.status(200).json({ cart }) - } catch (err) { - throw err - } + res.status(200).json({ cart }) } diff --git a/packages/medusa/src/api/routes/store/carts/delete-discount.js b/packages/medusa/src/api/routes/store/carts/delete-discount.js deleted file mode 100644 index 0e8b1c4180..0000000000 --- a/packages/medusa/src/api/routes/store/carts/delete-discount.js +++ /dev/null @@ -1,53 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [delete] /carts/{id}/discounts/{code} - * operationId: DeleteCartsCartDiscountsDiscount - * description: "Removes a Discount from a Cart." - * summary: "Remove Discount from Cart" - * parameters: - * - (path) id=* {string} The id of the Cart. - * - (path) code=* {string} The unique Discount code. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id, code } = req.params - - try { - const manager = req.scope.resolve("manager") - const cartService = req.scope.resolve("cartService") - - await manager.transaction(async (m) => { - // Remove the discount - await cartService.withTransaction(m).removeDiscount(id, code) - - // If the cart has payment sessions update these - const updated = await cartService.withTransaction(m).retrieve(id, { - relations: ["payment_sessions"], - }) - - if (updated.payment_sessions?.length) { - await cartService.withTransaction(m).setPaymentSessions(id) - } - }) - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/delete-discount.ts b/packages/medusa/src/api/routes/store/carts/delete-discount.ts new file mode 100644 index 0000000000..668d0218c8 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/delete-discount.ts @@ -0,0 +1,51 @@ +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" + +/** + * @oas [delete] /carts/{id}/discounts/{code} + * operationId: DeleteCartsCartDiscountsDiscount + * description: "Removes a Discount from a Cart." + * summary: "Remove Discount from Cart" + * parameters: + * - (path) id=* {string} The id of the Cart. + * - (path) code=* {string} The unique Discount code. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id, code } = req.params + + const manager: EntityManager = req.scope.resolve("manager") + const cartService: CartService = req.scope.resolve("cartService") + + await manager.transaction(async (m) => { + // Remove the discount + await cartService.withTransaction(m).removeDiscount(id, code) + + // If the cart has payment sessions update these + const updated = await cartService.withTransaction(m).retrieve(id, { + relations: ["payment_sessions"], + }) + + if (updated.payment_sessions?.length) { + await cartService.withTransaction(m).setPaymentSessions(id) + } + }) + + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} diff --git a/packages/medusa/src/api/routes/store/carts/delete-line-item.js b/packages/medusa/src/api/routes/store/carts/delete-line-item.js deleted file mode 100644 index 37b0764636..0000000000 --- a/packages/medusa/src/api/routes/store/carts/delete-line-item.js +++ /dev/null @@ -1,53 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [delete] /carts/{id}/line-items/{line_id} - * operationId: DeleteCartsCartLineItemsItem - * summary: Delete a Line Item - * description: "Removes a Line Item from a Cart." - * parameters: - * - (path) id=* {string} The id of the Cart. - * - (path) line_id=* {string} The id of the Line Item. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id, line_id } = req.params - - try { - const manager = req.scope.resolve("manager") - const cartService = req.scope.resolve("cartService") - - await manager.transaction(async (m) => { - // Remove the line item - await cartService.withTransaction(m).removeLineItem(id, line_id) - - // If the cart has payment sessions update these - const updated = await cartService.withTransaction(m).retrieve(id, { - relations: ["payment_sessions"], - }) - - if (updated.payment_sessions?.length) { - await cartService.withTransaction(m).setPaymentSessions(id) - } - }) - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/delete-line-item.ts b/packages/medusa/src/api/routes/store/carts/delete-line-item.ts new file mode 100644 index 0000000000..51d4959322 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/delete-line-item.ts @@ -0,0 +1,51 @@ +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" + +/** + * @oas [delete] /carts/{id}/line-items/{line_id} + * operationId: DeleteCartsCartLineItemsItem + * summary: Delete a Line Item + * description: "Removes a Line Item from a Cart." + * parameters: + * - (path) id=* {string} The id of the Cart. + * - (path) line_id=* {string} The id of the Line Item. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id, line_id } = req.params + + const manager: EntityManager = req.scope.resolve("manager") + const cartService: CartService = req.scope.resolve("cartService") + + await manager.transaction(async (m) => { + // Remove the line item + await cartService.withTransaction(m).removeLineItem(id, line_id) + + // If the cart has payment sessions update these + const updated = await cartService.withTransaction(m).retrieve(id, { + relations: ["payment_sessions"], + }) + + if (updated.payment_sessions?.length) { + await cartService.withTransaction(m).setPaymentSessions(id) + } + }) + + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} diff --git a/packages/medusa/src/api/routes/store/carts/delete-payment-session.js b/packages/medusa/src/api/routes/store/carts/delete-payment-session.ts similarity index 64% rename from packages/medusa/src/api/routes/store/carts/delete-payment-session.js rename to packages/medusa/src/api/routes/store/carts/delete-payment-session.ts index 9aeb6b9bc4..efe488656e 100644 --- a/packages/medusa/src/api/routes/store/carts/delete-payment-session.js +++ b/packages/medusa/src/api/routes/store/carts/delete-payment-session.ts @@ -1,4 +1,5 @@ -import { defaultFields, defaultRelations } from "./" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" /** * @oas [delete] /carts/{id}/payment-sessions/{provider_id} @@ -23,17 +24,13 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id, provider_id } = req.params - try { - const cartService = req.scope.resolve("cartService") + const cartService: CartService = req.scope.resolve("cartService") - await cartService.deletePaymentSession(id, provider_id) - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) + await cartService.deletePaymentSession(id, provider_id) + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) - res.status(200).json({ cart }) - } catch (err) { - throw err - } + res.status(200).json({ cart }) } diff --git a/packages/medusa/src/api/routes/store/carts/get-cart.js b/packages/medusa/src/api/routes/store/carts/get-cart.js deleted file mode 100644 index 32c91bed9c..0000000000 --- a/packages/medusa/src/api/routes/store/carts/get-cart.js +++ /dev/null @@ -1,54 +0,0 @@ -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [get] /carts/{id} - * operationId: "GetCartsCart" - * summary: "Retrieve a Cart" - * description: "Retrieves a Cart." - * parameters: - * - (path) id=* {string} The id of the Cart. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id } = req.params - - try { - const cartService = req.scope.resolve("cartService") - - let cart = await cartService.retrieve(id, { - relations: ["customer"], - }) - - // If there is a logged in user add the user to the cart - if (req.user && req.user.customer_id) { - if ( - !cart.customer_id || - !cart.email || - cart.customer_id !== req.user.customer_id - ) { - await cartService.update(id, { - customer_id: req.user.customer_id, - }) - } - } - - cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/get-cart.ts b/packages/medusa/src/api/routes/store/carts/get-cart.ts new file mode 100644 index 0000000000..599716c85f --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/get-cart.ts @@ -0,0 +1,51 @@ +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" + +/** + * @oas [get] /carts/{id} + * operationId: "GetCartsCart" + * summary: "Retrieve a Cart" + * description: "Retrieves a Cart." + * parameters: + * - (path) id=* {string} The id of the Cart. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const cartService: CartService = req.scope.resolve("cartService") + + let cart = await cartService.retrieve(id, { + relations: ["customer"], + }) + + // If there is a logged in user add the user to the cart + if (req.user && req.user.customer_id) { + if ( + !cart.customer_id || + !cart.email || + cart.customer_id !== req.user.customer_id + ) { + await cartService.update(id, { + customer_id: req.user.customer_id, + }) + } + } + + cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.json({ cart }) +} diff --git a/packages/medusa/src/api/routes/store/carts/index.js b/packages/medusa/src/api/routes/store/carts/index.ts similarity index 79% rename from packages/medusa/src/api/routes/store/carts/index.js rename to packages/medusa/src/api/routes/store/carts/index.ts index 6c702af07b..583adbda71 100644 --- a/packages/medusa/src/api/routes/store/carts/index.js +++ b/packages/medusa/src/api/routes/store/carts/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" +import "reflect-metadata" +import { Cart } from "../../../../models/cart" +import { DeleteResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -94,7 +97,7 @@ export default (app, container) => { return app } -export const defaultFields = [ +export const defaultStoreCartFields = [ "subtotal", "tax_total", "shipping_total", @@ -103,7 +106,7 @@ export const defaultFields = [ "total", ] -export const defaultRelations = [ +export const defaultStoreCartRelations = [ "gift_cards", "region", "items", @@ -119,3 +122,19 @@ export const defaultRelations = [ "discounts.rule", "discounts.rule.valid_for", ] + +export type StoreCartsRes = { + cart: Omit +} + +export type StoreCartsDeleteRes = DeleteResponse + +export * from "./add-shipping-method" +export * from "./create-cart" +export * from "./create-line-item" +export * from "./create-payment-sessions" +export * from "./set-payment-session" +export * from "./update-cart" +export * from "./update-line-item" +export * from "./update-payment-method" +export * from "./update-payment-session" diff --git a/packages/medusa/src/api/routes/store/carts/refresh-payment-session.js b/packages/medusa/src/api/routes/store/carts/refresh-payment-session.ts similarity index 56% rename from packages/medusa/src/api/routes/store/carts/refresh-payment-session.js rename to packages/medusa/src/api/routes/store/carts/refresh-payment-session.ts index 8d626405b1..4cc9c57b40 100644 --- a/packages/medusa/src/api/routes/store/carts/refresh-payment-session.js +++ b/packages/medusa/src/api/routes/store/carts/refresh-payment-session.ts @@ -1,3 +1,5 @@ +import { CartService } from "../../../../services" + /** * @oas [post] /carts/{id}/payment-sessions/{provider_id} * operationId: PostCartsCartPaymentSessionsSession @@ -21,30 +23,26 @@ export default async (req, res) => { const { id, provider_id } = req.params - try { - const cartService = req.scope.resolve("cartService") + const cartService: CartService = req.scope.resolve("cartService") - await cartService.refreshPaymentSession(id, provider_id) - const cart = await cartService.retrieve(id, { - select: [ - "subtotal", - "tax_total", - "shipping_total", - "discount_total", - "total", - ], - relations: [ - "region", - "region.countries", - "region.payment_providers", - "shipping_methods", - "payment_sessions", - "shipping_methods.shipping_option", - ], - }) + await cartService.refreshPaymentSession(id, provider_id) + const cart = await cartService.retrieve(id, { + select: [ + "subtotal", + "tax_total", + "shipping_total", + "discount_total", + "total", + ], + relations: [ + "region", + "region.countries", + "region.payment_providers", + "shipping_methods", + "payment_sessions", + "shipping_methods.shipping_option", + ], + }) - res.status(200).json({ cart }) - } catch (err) { - throw err - } + res.status(200).json({ cart }) } diff --git a/packages/medusa/src/api/routes/store/carts/set-payment-session.js b/packages/medusa/src/api/routes/store/carts/set-payment-session.js deleted file mode 100644 index 7b0be8970a..0000000000 --- a/packages/medusa/src/api/routes/store/carts/set-payment-session.js +++ /dev/null @@ -1,49 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts/{id}/payment-session - * operationId: PostCartsCartPaymentSession - * summary: Select a Payment Session - * description: "Selects a Payment Session as the session intended to be used towards the completion of the Cart." - * parameters: - * - (path) id=* {string} The id of the Cart. - * - (body) provider_id=* {string} The id of the Payment Provider. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - provider_id: Validator.string().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const cartService = req.scope.resolve("cartService") - - let cart = await cartService.setPaymentSession(id, value.provider_id) - cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/set-payment-session.ts b/packages/medusa/src/api/routes/store/carts/set-payment-session.ts new file mode 100644 index 0000000000..98da5677f7 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/set-payment-session.ts @@ -0,0 +1,48 @@ +import { IsString } from "class-validator" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts/{id}/payment-session + * operationId: PostCartsCartPaymentSession + * summary: Select a Payment Session + * description: "Selects a Payment Session as the session intended to be used towards the completion of the Cart." + * parameters: + * - (path) id=* {string} The id of the Cart. + * - (body) provider_id=* {string} The id of the Payment Provider. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator( + StorePostCartsCartPaymentSessionReq, + req.body + ) + + const cartService: CartService = req.scope.resolve("cartService") + + let cart = await cartService.setPaymentSession(id, validated.provider_id) + cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} + +export class StorePostCartsCartPaymentSessionReq { + @IsString() + provider_id: string +} diff --git a/packages/medusa/src/api/routes/store/carts/update-cart.js b/packages/medusa/src/api/routes/store/carts/update-cart.ts similarity index 53% rename from packages/medusa/src/api/routes/store/carts/update-cart.js rename to packages/medusa/src/api/routes/store/carts/update-cart.ts index be1370be2f..f7fd76955e 100644 --- a/packages/medusa/src/api/routes/store/carts/update-cart.js +++ b/packages/medusa/src/api/routes/store/carts/update-cart.ts @@ -1,7 +1,16 @@ -import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" - -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsEmail, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { AddressPayload } from "../../../../types/common" +import { IsType } from "../../../../utils/validators/is-type" +import { validator } from "../../../../utils/validator" /** * @oas [post] /store/carts/{id} @@ -36,6 +45,8 @@ import { defaultFields, defaultRelations } from "./" * description: "An array of Gift Card codes to add to the Cart." * type: array * items: + * required: + * - code * properties: * code: * description: "The code that a Gift Card is identified by." @@ -44,6 +55,8 @@ import { defaultFields, defaultRelations } from "./" * description: "An array of Discount codes to add to the Cart." * type: array * items: + * required: + * - code * properties: * code: * description: "The code that a Discount is identifed by." @@ -69,54 +82,77 @@ import { defaultFields, defaultRelations } from "./" export default async (req, res) => { const { id } = req.params - const schema = Validator.object().keys({ - region_id: Validator.string().optional(), - country_code: Validator.string().optional(), - email: Validator.string().email().optional(), - billing_address: Validator.address().optional().allow(null), - shipping_address: Validator.address().optional().allow(null), - gift_cards: Validator.array() - .items({ - code: Validator.string(), - }) - .optional(), - discounts: Validator.array() - .items({ - code: Validator.string(), - }) - .optional(), - customer_id: Validator.string().optional(), - context: Validator.object().optional(), + const validated = await validator(StorePostCartsCartReq, req.body) + + const cartService: CartService = req.scope.resolve("cartService") + + // Update the cart + await cartService.update(id, validated) + + // If the cart has payment sessions update these + const updated = await cartService.retrieve(id, { + relations: ["payment_sessions", "shipping_methods"], }) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) + if (updated.payment_sessions?.length && !validated.region_id) { + await cartService.setPaymentSessions(id) } - try { - const cartService = req.scope.resolve("cartService") + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) - // Update the cart - await cartService.update(id, value) - - // If the cart has payment sessions update these - const updated = await cartService.retrieve(id, { - relations: ["payment_sessions", "shipping_methods"], - }) - - if (updated.payment_sessions?.length && !value.region_id) { - await cartService.setPaymentSessions(id) - } - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.json({ cart }) - } catch (err) { - console.log(err) - throw err - } + res.json({ cart }) +} + +class GiftCard { + @IsString() + code: string +} + +class Discount { + @IsString() + code: string +} + +export class StorePostCartsCartReq { + @IsOptional() + @IsString() + region_id?: string + + @IsOptional() + @IsString() + country_code?: string + + @IsEmail() + @IsOptional() + email?: string + + @IsOptional() + @IsType([AddressPayload, String]) + billing_address?: AddressPayload | string + + @IsOptional() + @IsType([AddressPayload, String]) + shipping_address?: AddressPayload | string + + @IsOptional() + @IsArray() + @ValidateNested({ each: true }) + @Type(() => GiftCard) + gift_cards?: GiftCard[] + + @IsOptional() + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Discount) + discounts?: Discount[] + + @IsString() + @IsOptional() + customer_id?: string + + @IsOptional() + context?: object } diff --git a/packages/medusa/src/api/routes/store/carts/update-line-item.js b/packages/medusa/src/api/routes/store/carts/update-line-item.js deleted file mode 100644 index 60d340a5ec..0000000000 --- a/packages/medusa/src/api/routes/store/carts/update-line-item.js +++ /dev/null @@ -1,86 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts/{id}/line-items/{line_id} - * operationId: PostCartsCartLineItemsItem - * summary: Update a Line Item - * description: "Updates a Line Item if the desired quantity can be fulfilled." - * parameters: - * - (path) id=* {string} The id of the Cart. - * - (path) line_id=* {string} The id of the Line Item. - * - (body) quantity=* {integer} The quantity to set the Line Item to. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id, line_id } = req.params - - const schema = Validator.object().keys({ - quantity: Validator.number().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const manager = req.scope.resolve("manager") - const cartService = req.scope.resolve("cartService") - - await manager.transaction(async (m) => { - // If the quantity is 0 that is effectively deletion - if (value.quantity === 0) { - await cartService.withTransaction(m).removeLineItem(id, line_id) - } else { - const cart = await cartService.retrieve(id, { relations: ["items"] }) - - const existing = cart.items.find((i) => i.id === line_id) - if (!existing) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - "Could not find the line item" - ) - } - - const lineItemUpdate = { - variant_id: existing.variant.id, - region_id: cart.region_id, - quantity: value.quantity, - metadata: existing.metadata || {}, - } - - await cartService - .withTransaction(m) - .updateLineItem(id, line_id, lineItemUpdate) - } - - // If the cart has payment sessions update these - const updated = await cartService.withTransaction(m).retrieve(id, { - relations: ["payment_sessions"], - }) - - if (updated.payment_sessions?.length) { - await cartService.withTransaction(m).setPaymentSessions(id) - } - }) - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/update-line-item.ts b/packages/medusa/src/api/routes/store/carts/update-line-item.ts new file mode 100644 index 0000000000..cea8c8f3a0 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/update-line-item.ts @@ -0,0 +1,88 @@ +import { IsInt } from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { EntityManager } from "typeorm" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts/{id}/line-items/{line_id} + * operationId: PostCartsCartLineItemsItem + * summary: Update a Line Item + * description: "Updates a Line Item if the desired quantity can be fulfilled." + * parameters: + * - (path) id=* {string} The id of the Cart. + * - (path) line_id=* {string} The id of the Line Item. + * - (body) quantity=* {integer} The quantity to set the Line Item to. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id, line_id } = req.params + + const validated = await validator( + StorePostCartsCartLineItemsItemReq, + req.body + ) + + const manager: EntityManager = req.scope.resolve("manager") + const cartService: CartService = req.scope.resolve("cartService") + + await manager.transaction(async (m) => { + // If the quantity is 0 that is effectively deletion + if (validated.quantity === 0) { + await cartService.withTransaction(m).removeLineItem(id, line_id) + } else { + const cart = await cartService.retrieve(id, { relations: ["items"] }) + + const existing = cart.items.find((i) => i.id === line_id) + if (!existing) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + "Could not find the line item" + ) + } + + const lineItemUpdate = { + variant_id: existing.variant.id, + region_id: cart.region_id, + quantity: validated.quantity, + metadata: existing.metadata || {}, + } + + await cartService + .withTransaction(m) + .updateLineItem(id, line_id, lineItemUpdate) + } + + // If the cart has payment sessions update these + const updated = await cartService.withTransaction(m).retrieve(id, { + relations: ["payment_sessions"], + }) + + if (updated.payment_sessions?.length) { + await cartService.withTransaction(m).setPaymentSessions(id) + } + }) + + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} + +export class StorePostCartsCartLineItemsItemReq { + @IsInt() + quantity: number +} diff --git a/packages/medusa/src/api/routes/store/carts/update-payment-method.js b/packages/medusa/src/api/routes/store/carts/update-payment-method.js deleted file mode 100644 index e191b433ea..0000000000 --- a/packages/medusa/src/api/routes/store/carts/update-payment-method.js +++ /dev/null @@ -1,30 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -export default async (req, res) => { - const { id } = req.params - - const schema = Validator.object().keys({ - provider_id: Validator.string().required(), - data: Validator.object().optional(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const cartService = req.scope.resolve("cartService") - - let cart = await cartService.setPaymentMethod(id, value) - cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/update-payment-method.ts b/packages/medusa/src/api/routes/store/carts/update-payment-method.ts new file mode 100644 index 0000000000..845f13ad8b --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/update-payment-method.ts @@ -0,0 +1,63 @@ +import { IsOptional, IsString } from "class-validator" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /store/carts/{id} + * operationId: PostCartsCartPaymentMethodUpdate + * summary: Update a Cart" + * description: "Updates a Cart." + * parameters: + * - (path) id=* {string} The id of the Cart. + * requestBody: + * content: + * application/json: + * schema: + * required: + * - provider_id + * properties: + * provider_id: + * type: string + * description: The id of the Payment Provider. + * data: + * type: object + * description: "" + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id } = req.params + + const validated = await validator( + StorePostCartsCartPaymentMethodUpdateReq, + req.body + ) + + const cartService: CartService = req.scope.resolve("cartService") + + let cart = await cartService.setPaymentMethod(id, validated) + cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} + +export class StorePostCartsCartPaymentMethodUpdateReq { + @IsString() + provider_id: string + + @IsOptional() + data?: object +} diff --git a/packages/medusa/src/api/routes/store/carts/update-payment-session.js b/packages/medusa/src/api/routes/store/carts/update-payment-session.js deleted file mode 100644 index 7b9d31b92c..0000000000 --- a/packages/medusa/src/api/routes/store/carts/update-payment-session.js +++ /dev/null @@ -1,53 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultFields, defaultRelations } from "./" - -/** - * @oas [post] /carts/{id}/payment-sessions/{provider_id} - * operationId: PostCartsCartPaymentSessionUpdate - * summary: Update a Payment Session - * description: "Updates a Payment Session with additional data." - * parameters: - * - (path) id=* {string} The id of the Cart. - * - (path) provider_id=* {string} The id of the payment provider. - * - (body) provider_id=* {string} The id of the Payment Provider responsible for the Payment Session to update. - * - (body) data=* {object} The data to update the payment session with. - * tags: - * - Cart - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * cart: - * $ref: "#/components/schemas/cart" - */ -export default async (req, res) => { - const { id, provider_id } = req.params - - const schema = Validator.object().keys({ - data: Validator.object().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const cartService = req.scope.resolve("cartService") - - await cartService.setPaymentSession(id, provider_id) - await cartService.updatePaymentSession(id, value.data) - - const cart = await cartService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ cart }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/carts/update-payment-session.ts b/packages/medusa/src/api/routes/store/carts/update-payment-session.ts new file mode 100644 index 0000000000..803f4811b6 --- /dev/null +++ b/packages/medusa/src/api/routes/store/carts/update-payment-session.ts @@ -0,0 +1,51 @@ +import { IsObject } from "class-validator" +import { defaultStoreCartFields, defaultStoreCartRelations } from "." +import { CartService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /carts/{id}/payment-sessions/{provider_id} + * operationId: PostCartsCartPaymentSessionUpdate + * summary: Update a Payment Session + * description: "Updates a Payment Session with additional data." + * parameters: + * - (path) id=* {string} The id of the Cart. + * - (path) provider_id=* {string} The id of the payment provider. + * - (body) data=* {object} The data to update the payment session with. + * tags: + * - Cart + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * cart: + * $ref: "#/components/schemas/cart" + */ +export default async (req, res) => { + const { id, provider_id } = req.params + + const validated = await validator( + StorePostCartsCartPaymentSessionUpdateReq, + req.body + ) + + const cartService: CartService = req.scope.resolve("cartService") + + await cartService.setPaymentSession(id, provider_id) + await cartService.updatePaymentSession(id, validated.data) + + const cart = await cartService.retrieve(id, { + select: defaultStoreCartFields, + relations: defaultStoreCartRelations, + }) + + res.status(200).json({ cart }) +} + +export class StorePostCartsCartPaymentSessionUpdateReq { + @IsObject() + data: object +} diff --git a/packages/medusa/src/api/routes/store/collections/__tests__/list-collections.js b/packages/medusa/src/api/routes/store/collections/__tests__/list-collections.js index 84aa85ecaf..0c12d90559 100644 --- a/packages/medusa/src/api/routes/store/collections/__tests__/list-collections.js +++ b/packages/medusa/src/api/routes/store/collections/__tests__/list-collections.js @@ -18,4 +18,76 @@ describe("GET /store/collections", () => { expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledTimes(1) }) }) + + describe("can pass a limit query param and offset default is used", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("GET", `/store/collections?limit=5`) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls product collection service list with the right params", () => { + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledTimes(1) + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledWith( + {}, + { + skip: 0, + take: 5, + } + ) + }) + }) + + describe("can pass an offset query param and limit default is used", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("GET", `/store/collections?offset=10`) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls product collection service list with the right params", () => { + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledTimes(1) + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledWith( + {}, + { + skip: 10, + take: 10, + } + ) + }) + }) + + describe("can pass an offset and limit query params", () => { + let subject + + beforeAll(async () => { + jest.clearAllMocks() + subject = await request("GET", `/store/collections?offset=10&limit=20`) + }) + + it("returns 200", () => { + expect(subject.status).toEqual(200) + }) + + it("calls product collection service list with the right params", () => { + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledTimes(1) + expect(ProductCollectionServiceMock.listAndCount).toHaveBeenCalledWith( + {}, + { + skip: 10, + take: 20, + } + ) + }) + }) }) diff --git a/packages/medusa/src/api/routes/store/collections/get-collection.js b/packages/medusa/src/api/routes/store/collections/get-collection.ts similarity index 65% rename from packages/medusa/src/api/routes/store/collections/get-collection.js rename to packages/medusa/src/api/routes/store/collections/get-collection.ts index e883fc4dc2..404fae2583 100644 --- a/packages/medusa/src/api/routes/store/collections/get-collection.js +++ b/packages/medusa/src/api/routes/store/collections/get-collection.ts @@ -1,3 +1,4 @@ +import ProductCollectionService from "../../../../services/product-collection" /** * @oas [get] /collections/{id} * operationId: "GetCollectionsCollection" @@ -20,14 +21,10 @@ export default async (req, res) => { const { id } = req.params - try { - const productCollectionService = req.scope.resolve( - "productCollectionService" - ) + const productCollectionService: ProductCollectionService = req.scope.resolve( + "productCollectionService" + ) - const collection = await productCollectionService.retrieve(id) - res.status(200).json({ collection }) - } catch (err) { - throw err - } + const collection = await productCollectionService.retrieve(id) + res.status(200).json({ collection }) } diff --git a/packages/medusa/src/api/routes/store/collections/index.js b/packages/medusa/src/api/routes/store/collections/index.js deleted file mode 100644 index be9dd72c3f..0000000000 --- a/packages/medusa/src/api/routes/store/collections/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import { Router } from "express" -import middlewares from "../../../middlewares" - -const route = Router() - -export default (app) => { - app.use("/collections", route) - - route.get("/", middlewares.wrap(require("./list-collections").default)) - route.get("/:id", middlewares.wrap(require("./get-collection").default)) - - return app -} - -export const defaultFields = ["id", "title", "handle"] -export const defaultRelations = ["products"] diff --git a/packages/medusa/src/api/routes/store/collections/index.ts b/packages/medusa/src/api/routes/store/collections/index.ts new file mode 100644 index 0000000000..19eb93eee7 --- /dev/null +++ b/packages/medusa/src/api/routes/store/collections/index.ts @@ -0,0 +1,29 @@ +import { Router } from "express" +import { PaginatedResponse } from "./../../../../types/common" +import { ProductCollection } from "../../../../" +import middlewares from "../../../middlewares" + +const route = Router() + +export default (app) => { + app.use("/collections", route) + + route.get("/", middlewares.wrap(require("./list-collections").default)) + route.get("/:id", middlewares.wrap(require("./get-collection").default)) + + return app +} + +export const defaultStoreCollectionFields = ["id", "title", "handle"] +export const defaultStoreCollectionRelations = ["products"] + +export type StoreCollectionsListRes = PaginatedResponse & { + collections: ProductCollection[] +} + +export type StoreCollectionsRes = { + collection: ProductCollection +} + +export * from "./get-collection" +export * from "./list-collections" diff --git a/packages/medusa/src/api/routes/store/collections/list-collections.js b/packages/medusa/src/api/routes/store/collections/list-collections.js deleted file mode 100644 index e501b51b4d..0000000000 --- a/packages/medusa/src/api/routes/store/collections/list-collections.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @oas [get] /collections - * operationId: "GetCollections" - * summary: "List Product Collections" - * description: "Retrieve a list of Product Collection." - * tags: - * - Collection - * responses: - * "200": - * description: OK - * content: - * application/json: - * schema: - * properties: - * collection: - * $ref: "#/components/schemas/product_collection" - */ -export default async (req, res) => { - const selector = {} - - const limit = parseInt(req.query.limit) || 10 - const offset = parseInt(req.query.offset) || 0 - - const productCollectionService = req.scope.resolve("productCollectionService") - - const listConfig = { - skip: offset, - take: limit, - } - - const [collections, count] = await productCollectionService.listAndCount( - selector, - listConfig - ) - - res.status(200).json({ collections, count }) -} diff --git a/packages/medusa/src/api/routes/store/collections/list-collections.ts b/packages/medusa/src/api/routes/store/collections/list-collections.ts new file mode 100644 index 0000000000..b0402dc0f1 --- /dev/null +++ b/packages/medusa/src/api/routes/store/collections/list-collections.ts @@ -0,0 +1,62 @@ +import { Type } from "class-transformer" +import { IsOptional, IsInt } from "class-validator" +import ProductCollectionService from "../../../../services/product-collection" +import { validator } from "../../../../utils/validator" +/** + * @oas [get] /collections + * operationId: "GetCollections" + * summary: "List Product Collections" + * description: "Retrieve a list of Product Collection." + * parameters: + * - (query) offset=0 {integer} The number of collections to skip before starting to collect the collections set + * - (query) limit=10 {integer} The number of collections to return + * tags: + * - Collection + * responses: + * "200": + * description: OK + * content: + * application/json: + * schema: + * properties: + * collection: + * $ref: "#/components/schemas/product_collection" + */ +export default async (req, res) => { + try { + const { limit, offset } = await validator( + StoreGetCollectionsParams, + req.query + ) + const selector = {} + + const productCollectionService: ProductCollectionService = + req.scope.resolve("productCollectionService") + + const listConfig = { + skip: offset, + take: limit, + } + + const [collections, count] = await productCollectionService.listAndCount( + selector, + listConfig + ) + + res.status(200).json({ collections, count, limit, offset }) + } catch (err) { + console.log(err) + } +} + +export class StoreGetCollectionsParams { + @IsOptional() + @IsInt() + @Type(() => Number) + limit?: number = 10 + + @IsOptional() + @IsInt() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/store/customers/__tests__/create-customer.js b/packages/medusa/src/api/routes/store/customers/__tests__/create-customer.js index 939961163b..c94095baa3 100644 --- a/packages/medusa/src/api/routes/store/customers/__tests__/create-customer.js +++ b/packages/medusa/src/api/routes/store/customers/__tests__/create-customer.js @@ -1,7 +1,10 @@ import { IdMap } from "medusa-test-utils" +import { + defaultStoreCustomersFields, + defaultStoreCustomersRelations, +} from "../" import { request } from "../../../../../helpers/test-request" import { CustomerServiceMock } from "../../../../../services/__mocks__/customer" -import { defaultFields, defaultRelations } from "../" describe("POST /store/customers", () => { describe("successfully creates a customer", () => { @@ -35,7 +38,10 @@ describe("POST /store/customers", () => { expect(CustomerServiceMock.retrieve).toHaveBeenCalledTimes(1) expect(CustomerServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("lebron"), - { relations: defaultRelations, select: defaultFields } + { + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, + } ) }) diff --git a/packages/medusa/src/api/routes/store/customers/__tests__/reset-password-token.js b/packages/medusa/src/api/routes/store/customers/__tests__/reset-password-token.js index b67d6d19b0..36bc037135 100644 --- a/packages/medusa/src/api/routes/store/customers/__tests__/reset-password-token.js +++ b/packages/medusa/src/api/routes/store/customers/__tests__/reset-password-token.js @@ -1,5 +1,4 @@ import { IdMap } from "medusa-test-utils" -import jwt from "jsonwebtoken" import { request } from "../../../../../helpers/test-request" import { CustomerServiceMock } from "../../../../../services/__mocks__/customer" diff --git a/packages/medusa/src/api/routes/store/customers/__tests__/update-customer.js b/packages/medusa/src/api/routes/store/customers/__tests__/update-customer.js index fb84059304..17a55d61cc 100644 --- a/packages/medusa/src/api/routes/store/customers/__tests__/update-customer.js +++ b/packages/medusa/src/api/routes/store/customers/__tests__/update-customer.js @@ -1,9 +1,12 @@ import { IdMap } from "medusa-test-utils" +import { + defaultStoreCustomersFields, + defaultStoreCustomersRelations, +} from "../" import { request } from "../../../../../helpers/test-request" -import { defaultFields, defaultRelations } from "../" import { CustomerServiceMock } from "../../../../../services/__mocks__/customer" -describe("POST /store/customers/:id", () => { +describe("POST /store/customers/me", () => { describe("successfully updates a customer", () => { let subject beforeAll(async () => { @@ -41,7 +44,10 @@ describe("POST /store/customers/:id", () => { expect(CustomerServiceMock.retrieve).toHaveBeenCalledTimes(1) expect(CustomerServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("lebron"), - { relations: defaultRelations, select: defaultFields } + { + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, + } ) }) @@ -54,6 +60,34 @@ describe("POST /store/customers/:id", () => { }) }) + describe("fails update a customer with a billing address with an invalid type", () => { + let subject + beforeAll(async () => { + subject = await request("POST", `/store/customers/me`, { + payload: { + billing_address: 42, + }, + clientSession: { + jwt: { + customer_id: IdMap.getId("lebron"), + }, + }, + }) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls CustomerService update 0 times", () => { + expect(CustomerServiceMock.update).toHaveBeenCalledTimes(0) + }) + + it("status code 400", () => { + expect(subject.status).toEqual(400) + }) + }) + describe("successfully updates a customer with billing address id", () => { let subject beforeAll(async () => { diff --git a/packages/medusa/src/api/routes/store/customers/create-address.js b/packages/medusa/src/api/routes/store/customers/create-address.js deleted file mode 100644 index f60119e4a4..0000000000 --- a/packages/medusa/src/api/routes/store/customers/create-address.js +++ /dev/null @@ -1,53 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - -/** - * @oas [post] /customers/{id}/addresses - * operationId: PostCustomersCustomerAddresses - * summary: "Add a Shipping Address" - * description: "Adds a Shipping Address to a Customer's saved addresses." - * parameters: - * - (path) id=* {String} The Customer id. - * requestBody: - * content: - * application/json: - * schema: - * properties: - * address: - * description: "The Address to add to the Customer." - * anyOf: - * - $ref: "#/components/schemas/address" - * tags: - * - Customer - * responses: - * "200": - * description: "A successful response" - * content: - * application/json: - * schema: - * properties: - * customer: - * $ref: "#/components/schemas/customer" - */ -export default async (req, res) => { - const id = req.user.customer_id - - const schema = Validator.object().keys({ - address: Validator.address().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - - let customer = await customerService.addAddress(id, value.address) - customer = await customerService.retrieve(id, { - relations: defaultRelations, - select: defaultFields, - }) - - res.status(200).json({ customer }) -} diff --git a/packages/medusa/src/api/routes/store/customers/create-address.ts b/packages/medusa/src/api/routes/store/customers/create-address.ts new file mode 100644 index 0000000000..7ed20adc13 --- /dev/null +++ b/packages/medusa/src/api/routes/store/customers/create-address.ts @@ -0,0 +1,60 @@ +import { Type } from "class-transformer" +import { ValidateNested } from "class-validator" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import CustomerService from "../../../../services/customer" +import { AddressCreatePayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /customers/me/addresses + * operationId: PostCustomersCustomerAddresses + * summary: "Add a Shipping Address" + * description: "Adds a Shipping Address to a Customer's saved addresses." + * x-authenticated: true + * requestBody: + * content: + * application/json: + * required: + * - address + * schema: + * properties: + * address: + * description: "The Address to add to the Customer." + * anyOf: + * - $ref: "#/components/schemas/address" + * tags: + * - Customer + * responses: + * "200": + * description: "A successful response" + * content: + * application/json: + * schema: + * properties: + * customer: + * $ref: "#/components/schemas/customer" + */ +export default async (req, res) => { + const id = req.user.customer_id + + const validated = await validator( + StorePostCustomersCustomerAddressesReq, + req.body + ) + + const customerService: CustomerService = req.scope.resolve("customerService") + + let customer = await customerService.addAddress(id, validated.address) + customer = await customerService.retrieve(id, { + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, + }) + + res.status(200).json({ customer }) +} + +export class StorePostCustomersCustomerAddressesReq { + @ValidateNested() + @Type(() => AddressCreatePayload) + address: AddressCreatePayload +} diff --git a/packages/medusa/src/api/routes/store/customers/create-customer.js b/packages/medusa/src/api/routes/store/customers/create-customer.ts similarity index 55% rename from packages/medusa/src/api/routes/store/customers/create-customer.js rename to packages/medusa/src/api/routes/store/customers/create-customer.ts index 14f345b618..3856180de8 100644 --- a/packages/medusa/src/api/routes/store/customers/create-customer.js +++ b/packages/medusa/src/api/routes/store/customers/create-customer.ts @@ -1,7 +1,10 @@ +import { IsEmail, IsOptional, IsString } from "class-validator" import jwt from "jsonwebtoken" -import { Validator, MedusaError } from "medusa-core-utils" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import { Customer } from "../../../.." import config from "../../../../config" -import { defaultRelations, defaultFields } from "./" +import CustomerService from "../../../../services/customer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers @@ -27,31 +30,38 @@ import { defaultRelations, defaultFields } from "./" * $ref: "#/components/schemas/customer" */ export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - first_name: Validator.string().required(), - last_name: Validator.string().required(), - password: Validator.string().required(), - phone: Validator.string().optional(), - }) + const validated = await validator(StorePostCustomersReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - let customer = await customerService.create(value) + const customerService: CustomerService = req.scope.resolve("customerService") + let customer: Customer = await customerService.create(validated) // Add JWT to cookie - req.session.jwt = jwt.sign({ customer_id: customer.id }, config.jwtSecret, { + req.session.jwt = jwt.sign({ customer_id: customer.id }, config.jwtSecret!, { expiresIn: "30d", }) customer = await customerService.retrieve(customer.id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, }) res.status(200).json({ customer }) } + +export class StorePostCustomersReq { + @IsString() + first_name: string + + @IsString() + last_name: string + + @IsEmail() + email: string + + @IsString() + password: string + + @IsOptional() + @IsString() + phone?: string +} diff --git a/packages/medusa/src/api/routes/store/customers/delete-address.js b/packages/medusa/src/api/routes/store/customers/delete-address.ts similarity index 65% rename from packages/medusa/src/api/routes/store/customers/delete-address.js rename to packages/medusa/src/api/routes/store/customers/delete-address.ts index dbd42c7d55..7385d8f2a9 100644 --- a/packages/medusa/src/api/routes/store/customers/delete-address.js +++ b/packages/medusa/src/api/routes/store/customers/delete-address.ts @@ -1,12 +1,13 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import CustomerService from "../../../../services/customer" /** - * @oas [delete] /customers/{id}/addresses/{address_id} + * @oas [delete] /customers/me/addresses/{address_id} * operationId: DeleteCustomersCustomerAddressesAddress * summary: Delete an Address * description: "Removes an Address from the Customer's saved addresse." + * x-authenticated: true * parameters: - * - (path) id=* {string} The id of the Customer. * - (path) address_id=* {string} The id of the Address to remove. * tags: * - Customer @@ -22,13 +23,16 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const id = req.user.customer_id + const { address_id } = req.params - const customerService = req.scope.resolve("customerService") + const customerService: CustomerService = req.scope.resolve("customerService") + await customerService.removeAddress(id, address_id) + const customer = await customerService.retrieve(id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, }) res.json({ customer }) diff --git a/packages/medusa/src/api/routes/store/customers/get-customer.js b/packages/medusa/src/api/routes/store/customers/get-customer.ts similarity index 64% rename from packages/medusa/src/api/routes/store/customers/get-customer.js rename to packages/medusa/src/api/routes/store/customers/get-customer.ts index ce7af729cf..0d1d153b98 100644 --- a/packages/medusa/src/api/routes/store/customers/get-customer.js +++ b/packages/medusa/src/api/routes/store/customers/get-customer.ts @@ -1,10 +1,12 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import CustomerService from "../../../../services/customer" /** * @oas [get] /customers/me * operationId: GetCustomersCustomer * summary: Retrieves a Customer * description: "Retrieves a Customer - the Customer must be logged in to retrieve their details." + * x-authenticated: true * tags: * - Customer * responses: @@ -19,10 +21,13 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const id = req.user.customer_id - const customerService = req.scope.resolve("customerService") + + const customerService: CustomerService = req.scope.resolve("customerService") + const customer = await customerService.retrieve(id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, }) + res.json({ customer }) } diff --git a/packages/medusa/src/api/routes/store/customers/get-payment-methods.js b/packages/medusa/src/api/routes/store/customers/get-payment-methods.ts similarity index 66% rename from packages/medusa/src/api/routes/store/customers/get-payment-methods.js rename to packages/medusa/src/api/routes/store/customers/get-payment-methods.ts index b0f4e5a032..da8e2d1174 100644 --- a/packages/medusa/src/api/routes/store/customers/get-payment-methods.js +++ b/packages/medusa/src/api/routes/store/customers/get-payment-methods.ts @@ -1,8 +1,14 @@ +import { Customer } from "../../../.." +import CustomerService from "../../../../services/customer" +import PaymentProviderService from "../../../../services/payment-provider" +import StoreService from "../../../../services/store" + /** * @oas [get] /customers/me/payment-methods * operationId: GetCustomersCustomerPaymentMethods * summary: Retrieve saved payment methods * description: "Retrieves a list of a Customer's saved payment methods. Payment methods are saved with Payment Providers and it is their responsibility to fetch saved methods." + * x-authenticated: true * tags: * - Customer * responses: @@ -25,16 +31,21 @@ */ export default async (req, res) => { const id = req.user.customer_id - const storeService = req.scope.resolve("storeService") - const paymentProviderService = req.scope.resolve("paymentProviderService") - const customerService = req.scope.resolve("customerService") - const customer = await customerService.retrieve(id) + const storeService: StoreService = req.scope.resolve("storeService") + + const paymentProviderService: PaymentProviderService = req.scope.resolve( + "paymentProviderService" + ) + + const customerService: CustomerService = req.scope.resolve("customerService") + + const customer: Customer = await customerService.retrieve(id) const store = await storeService.retrieve(["payment_providers"]) const methods = await Promise.all( - store.payment_providers.map(async (next) => { + store.payment_providers.map(async (next: string) => { const provider = paymentProviderService.retrieveProvider(next) const pMethods = await provider.retrieveSavedMethods(customer) @@ -45,5 +56,7 @@ export default async (req, res) => { }) ) - res.json({ payment_methods: methods.flat() }) + res.json({ + payment_methods: methods.flat(), + }) } diff --git a/packages/medusa/src/api/routes/store/customers/index.js b/packages/medusa/src/api/routes/store/customers/index.ts similarity index 67% rename from packages/medusa/src/api/routes/store/customers/index.js rename to packages/medusa/src/api/routes/store/customers/index.ts index ab578c7585..2a5d400831 100644 --- a/packages/medusa/src/api/routes/store/customers/index.js +++ b/packages/medusa/src/api/routes/store/customers/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import { Customer, Order } from "../../../.." +import { PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -57,9 +59,12 @@ export default (app, container) => { return app } -export const defaultRelations = ["shipping_addresses", "billing_address"] +export const defaultStoreCustomersRelations = [ + "shipping_addresses", + "billing_address", +] -export const defaultFields = [ +export const defaultStoreCustomersFields = [ "id", "email", "first_name", @@ -73,13 +78,13 @@ export const defaultFields = [ "metadata", ] -export const allowedRelations = [ +export const allowedStoreCustomersRelations = [ "shipping_addresses", "billing_address", "orders", ] -export const allowedFields = [ +export const allowedStoreCustomersFields = [ "id", "email", "first_name", @@ -92,3 +97,26 @@ export const allowedFields = [ "deleted_at", "metadata", ] + +export type StoreCustomersRes = { + customer: Omit +} + +export type StoreCustomersListOrdersRes = PaginatedResponse & { + orders: Order[] +} + +export type StoreCustomersListPaymentMethodsRes = { + payment_methods: { + provider_id: string + data: object + }[] +} + +export * from "./create-address" +export * from "./create-customer" +export * from "./list-orders" +export * from "./reset-password" +export * from "./reset-password-token" +export * from "./update-address" +export * from "./update-customer" diff --git a/packages/medusa/src/api/routes/store/customers/list-orders.js b/packages/medusa/src/api/routes/store/customers/list-orders.js deleted file mode 100644 index 730719934b..0000000000 --- a/packages/medusa/src/api/routes/store/customers/list-orders.js +++ /dev/null @@ -1,62 +0,0 @@ -import { - defaultRelations, - defaultFields, - allowedFields, - allowedRelations, -} from "../orders" - -/** - * @oas [get] /customers/me/orders - * operationId: GetCustomersCustomerOrders - * summary: Retrieve Customer Orders - * description: "Retrieves a list of a Customer's Orders." - * tags: - * - Customer - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * payment_methods: - * type: array - * items: - * $ref: "#/components/schemas/order" - */ -export default async (req, res) => { - const id = req.user.customer_id - - const orderService = req.scope.resolve("orderService") - - const selector = { - customer_id: id, - } - - const limit = parseInt(req.query.limit) || 10 - const offset = parseInt(req.query.offset) || 0 - - let includeFields = [] - if ("fields" in req.query) { - includeFields = req.query.fields.split(",") - includeFields = includeFields.filter((f) => allowedFields.includes(f)) - } - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - expandFields = expandFields.filter((f) => allowedRelations.includes(f)) - } - - const listConfig = { - select: includeFields.length ? includeFields : defaultFields, - relations: expandFields.length ? expandFields : defaultRelations, - skip: offset, - take: limit, - order: { created_at: "DESC" }, - } - - const [orders, count] = await orderService.listAndCount(selector, listConfig) - - res.json({ orders, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/store/customers/list-orders.ts b/packages/medusa/src/api/routes/store/customers/list-orders.ts new file mode 100644 index 0000000000..cc538989b5 --- /dev/null +++ b/packages/medusa/src/api/routes/store/customers/list-orders.ts @@ -0,0 +1,105 @@ +import { Type } from "class-transformer" +import { IsNumber, IsOptional, IsString } from "class-validator" +import OrderService from "../../../../services/order" +import { validator } from "../../../../utils/validator" +import { + allowedStoreOrdersFields, + allowedStoreOrdersRelations, +} from "../orders" + +/** + * @oas [get] /customers/me/orders + * operationId: GetCustomersCustomerOrders + * summary: Retrieve Customer Orders + * description: "Retrieves a list of a Customer's Orders." + * x-authenticated: true + * parameters: + * - (query) limit {integer} How many addresses to return. + * - (query) offset {integer} The offset in the resulting addresses. + * - (query) fields {string} (Comma separated string) Which fields should be included in the resulting addresses. + * - (query) expand {string} (Comma separated string) Which relations should be expanded in the resulting addresses. + * tags: + * - Customer + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * count: + * description: The total number of Orders. + * type: integer + * offset: + * description: The offset for pagination. + * type: integer + * limit: + * description: The maxmimum number of Orders to return, + * type: integer + * orders: + * type: array + * items: + * $ref: "#/components/schemas/orders" + */ +export default async (req, res) => { + const id: string = req.user.customer_id + + const orderService: OrderService = req.scope.resolve("orderService") + + const selector = { + customer_id: id, + } + + const validated = await validator( + StoreGetCustomersCustomerOrdersParams, + req.query + ) + + let includeFields: string[] = [] + if (validated.fields) { + includeFields = validated.fields.split(",") + includeFields = includeFields.filter((f) => + allowedStoreOrdersFields.includes(f) + ) + } + + let expandFields: string[] = [] + if (validated.expand) { + expandFields = validated.expand.split(",") + expandFields = expandFields.filter((f) => + allowedStoreOrdersRelations.includes(f) + ) + } + + const listConfig = { + select: includeFields.length ? includeFields : allowedStoreOrdersFields, + relations: expandFields.length ? expandFields : allowedStoreOrdersRelations, + skip: validated.offset, + take: validated.limit, + order: { created_at: "DESC" }, + } + + const [orders, count] = await orderService.listAndCount(selector, listConfig) + + res.json({ orders, count, offset: validated.offset, limit: validated.limit }) +} + +export class StoreGetCustomersCustomerOrdersParams { + @IsOptional() + @IsNumber() + @Type(() => Number) + limit = 10 + + @IsOptional() + @IsNumber() + @Type(() => Number) + offset = 0 + + @IsOptional() + @IsString() + fields?: string + + @IsOptional() + @IsString() + expand?: string +} diff --git a/packages/medusa/src/api/routes/store/customers/reset-password-token.js b/packages/medusa/src/api/routes/store/customers/reset-password-token.js deleted file mode 100644 index 7df57689f6..0000000000 --- a/packages/medusa/src/api/routes/store/customers/reset-password-token.js +++ /dev/null @@ -1,31 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -/** - * @oas [post] /customers/password-token - * operationId: PostCustomersCustomerPasswordToken - * summary: Creates a reset password token - * description: "Creates a reset password token to be used in a subsequent /reset-password request. The password token should be sent out of band e.g. via email and will not be returned." - * tags: - * - Customer - * responses: - * 204: - * description: OK - */ -export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - const customer = await customerService.retrieveByEmail(value.email) - - // Will generate a token and send it to the customer via an email privder - await customerService.generateResetPasswordToken(customer.id) - - res.sendStatus(204) -} diff --git a/packages/medusa/src/api/routes/store/customers/reset-password-token.ts b/packages/medusa/src/api/routes/store/customers/reset-password-token.ts new file mode 100644 index 0000000000..1e0fcfc3ca --- /dev/null +++ b/packages/medusa/src/api/routes/store/customers/reset-password-token.ts @@ -0,0 +1,39 @@ +import { IsEmail } from "class-validator" +import CustomerService from "../../../../services/customer" +import { validator } from "../../../../utils/validator" + +/** + * @oas [post] /customers/password-token + * operationId: PostCustomersCustomerPasswordToken + * summary: Creates a reset password token + * description: "Creates a reset password token to be used in a subsequent /reset-password request. The password token should be sent out of band e.g. via email and will not be returned." + * parameters: + * - (body) email=* {string} Email of the user whose password should be reset. + * tags: + * - Customer + * responses: + * 204: + * description: OK + */ +export default async (req, res) => { + const validated = await validator( + StorePostCustomersCustomerPasswordTokenReq, + req.body + ) + + const customerService: CustomerService = req.scope.resolve( + "customerService" + ) as CustomerService + + const customer = await customerService.retrieveByEmail(validated.email) + + // Will generate a token and send it to the customer via an email provider + await customerService.generateResetPasswordToken(customer.id) + + res.sendStatus(204) +} + +export class StorePostCustomersCustomerPasswordTokenReq { + @IsEmail() + email: string +} diff --git a/packages/medusa/src/api/routes/store/customers/reset-password.js b/packages/medusa/src/api/routes/store/customers/reset-password.ts similarity index 59% rename from packages/medusa/src/api/routes/store/customers/reset-password.js rename to packages/medusa/src/api/routes/store/customers/reset-password.ts index e6eac1a229..c47c167515 100644 --- a/packages/medusa/src/api/routes/store/customers/reset-password.js +++ b/packages/medusa/src/api/routes/store/customers/reset-password.ts @@ -1,5 +1,7 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import jwt from "jsonwebtoken" +import { IsEmail, IsString } from "class-validator" +import jwt, { JwtPayload } from "jsonwebtoken" +import CustomerService from "../../../../services/customer" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers/reset-password @@ -23,32 +25,40 @@ import jwt from "jsonwebtoken" * $ref: "#/components/schemas/customer" */ export default async (req, res) => { - const schema = Validator.object().keys({ - email: Validator.string().email().required(), - token: Validator.string().required(), - password: Validator.string().required(), - }) + const validated = await validator( + StorePostCustomersResetPasswordReq, + req.body + ) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - let customer = await customerService.retrieveByEmail(value.email, { + const customerService: CustomerService = req.scope.resolve("customerService") + let customer = await customerService.retrieveByEmail(validated.email, { select: ["id", "password_hash"], }) - const decodedToken = jwt.verify(value.token, customer.password_hash) + const decodedToken = jwt.verify( + validated.token, + customer.password_hash + ) as JwtPayload if (!decodedToken || customer.id !== decodedToken.customer_id) { res.status(401).send("Invalid or expired password reset token") return } await customerService.update(customer.id, { - password: value.password, + password: validated.password, }) customer = await customerService.retrieve(customer.id) res.status(200).json({ customer }) } + +export class StorePostCustomersResetPasswordReq { + @IsEmail() + email: string + + @IsString() + token: string + + @IsString() + password: string +} diff --git a/packages/medusa/src/api/routes/store/customers/update-address.js b/packages/medusa/src/api/routes/store/customers/update-address.ts similarity index 56% rename from packages/medusa/src/api/routes/store/customers/update-address.js rename to packages/medusa/src/api/routes/store/customers/update-address.ts index 6c96fe0edd..cb4a9dbd52 100644 --- a/packages/medusa/src/api/routes/store/customers/update-address.js +++ b/packages/medusa/src/api/routes/store/customers/update-address.ts @@ -1,11 +1,14 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import CustomerService from "../../../../services/customer" +import { AddressPayload } from "../../../../types/common" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers/me/addresses/{address_id} * operationId: PostCustomersCustomerAddressesAddress * summary: "Update a Shipping Address" * description: "Updates a Customer's saved Shipping Address." + * x-authenticated: true * parameters: * - (path) address_id=* {String} The id of the Address to update. * requestBody: @@ -33,27 +36,23 @@ export default async (req, res) => { const id = req.user.customer_id const { address_id } = req.params - const schema = Validator.object().keys({ - address: Validator.address().required(), - }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - - let customer = await customerService.updateAddress( - id, - address_id, - value.address + const validated = await validator( + StorePostCustomersCustomerAddressesAddressReq, + req.body ) + const customerService: CustomerService = req.scope.resolve( + "customerService" + ) as CustomerService + + let customer = await customerService.updateAddress(id, address_id, validated) + customer = await customerService.retrieve(id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, }) res.json({ customer }) } + +export class StorePostCustomersCustomerAddressesAddressReq extends AddressPayload {} diff --git a/packages/medusa/src/api/routes/store/customers/update-customer.js b/packages/medusa/src/api/routes/store/customers/update-customer.ts similarity index 56% rename from packages/medusa/src/api/routes/store/customers/update-customer.js rename to packages/medusa/src/api/routes/store/customers/update-customer.ts index 08f0233251..498178b232 100644 --- a/packages/medusa/src/api/routes/store/customers/update-customer.js +++ b/packages/medusa/src/api/routes/store/customers/update-customer.ts @@ -1,11 +1,16 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { IsEmail, IsObject, IsOptional, IsString } from "class-validator" +import { defaultStoreCustomersFields, defaultStoreCustomersRelations } from "." +import CustomerService from "../../../../services/customer" +import { AddressPayload } from "../../../../types/common" +import { IsType } from "../../../../utils/validators/is-type" +import { validator } from "../../../../utils/validator" /** * @oas [post] /customers/me * operationId: PostCustomersCustomer * summary: Update Customer details * description: "Updates a Customer's saved details." + * x-authenticated: true * requestBody: * content: * application/json: @@ -48,28 +53,45 @@ import { defaultRelations, defaultFields } from "./" export default async (req, res) => { const id = req.user.customer_id - const schema = Validator.object().keys({ - billing_address: Validator.address().optional().allow(null), - first_name: Validator.string().optional(), - last_name: Validator.string().optional(), - password: Validator.string().optional(), - phone: Validator.string().optional(), - email: Validator.string().optional(), - metadata: Validator.object().optional(), - }) + const validated = await validator(StorePostCustomersCustomerReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const customerService = req.scope.resolve("customerService") - await customerService.update(id, value) + const customerService: CustomerService = req.scope.resolve("customerService") + await customerService.update(id, validated) const customer = await customerService.retrieve(id, { - relations: defaultRelations, - select: defaultFields, + relations: defaultStoreCustomersRelations, + select: defaultStoreCustomersFields, }) res.status(200).json({ customer }) } + +export class StorePostCustomersCustomerReq { + @IsOptional() + @IsType([AddressPayload, String]) + billing_address?: AddressPayload | string + + @IsOptional() + @IsString() + first_name?: string + + @IsOptional() + @IsString() + last_name?: string + + @IsOptional() + @IsString() + password?: string + + @IsOptional() + @IsString() + phone?: string + + @IsOptional() + @IsEmail() + email?: string + + @IsOptional() + @IsObject() + metadata?: object +} diff --git a/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.js b/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts similarity index 77% rename from packages/medusa/src/api/routes/store/gift-cards/get-gift-card.js rename to packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts index 05a6ac1ea0..be96e75ea8 100644 --- a/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.js +++ b/packages/medusa/src/api/routes/store/gift-cards/get-gift-card.ts @@ -1,4 +1,5 @@ -import { defaultRelations, defaultFields } from "./" +import { defaultStoreGiftCardFields, defaultStoreGiftCardRelations } from "." +import GiftCardService from "../../../../services/gift-card" /** * @oas [get] /gift-cards/{code} @@ -31,10 +32,11 @@ export default async (req, res) => { const { code } = req.params try { - const giftCardService = req.scope.resolve("giftCardService") + const giftCardService: GiftCardService = + req.scope.resolve("giftCardService") const giftCard = await giftCardService.retrieveByCode(code, { - select: defaultFields, - relations: defaultRelations, + select: defaultStoreGiftCardFields, + relations: defaultStoreGiftCardRelations, }) res.json({ gift_card: giftCard }) diff --git a/packages/medusa/src/api/routes/store/gift-cards/index.js b/packages/medusa/src/api/routes/store/gift-cards/index.js deleted file mode 100644 index 6f1d2fa7fe..0000000000 --- a/packages/medusa/src/api/routes/store/gift-cards/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import { Router } from "express" -import middlewares from "../../../middlewares" - -const route = Router() - -export default (app) => { - app.use("/gift-cards", route) - - route.get("/:code", middlewares.wrap(require("./get-gift-card").default)) - - return app -} - -export const defaultRelations = ["region"] - -export const defaultFields = ["id", "code", "value", "balance"] - -export const allowedRelations = ["region"] - -export const allowedFields = ["id", "code", "value", "balance"] diff --git a/packages/medusa/src/api/routes/store/gift-cards/index.ts b/packages/medusa/src/api/routes/store/gift-cards/index.ts new file mode 100644 index 0000000000..7f633e909e --- /dev/null +++ b/packages/medusa/src/api/routes/store/gift-cards/index.ts @@ -0,0 +1,27 @@ +import { Router } from "express" +import middlewares from "../../../middlewares" +import { GiftCard } from "./../../../../" + +const route = Router() + +export default (app) => { + app.use("/gift-cards", route) + + route.get("/:code", middlewares.wrap(require("./get-gift-card").default)) + + return app +} + +export const defaultStoreGiftCardRelations = ["region"] + +export const defaultStoreGiftCardFields = ["id", "code", "value", "balance"] + +export const allowedStoreGiftCardRelations = ["region"] + +export const allowedStoreGiftCardFields = ["id", "code", "value", "balance"] + +export type StoreGiftCardsRes = { + gift_card: GiftCard +} + +export * from "./get-gift-card" diff --git a/packages/medusa/src/api/routes/store/index.js b/packages/medusa/src/api/routes/store/index.js index de95546071..5fe4a8de9d 100644 --- a/packages/medusa/src/api/routes/store/index.js +++ b/packages/medusa/src/api/routes/store/index.js @@ -1,21 +1,19 @@ -import { Router } from "express" import cors from "cors" - +import { Router } from "express" import middlewares from "../../middlewares" - import authRoutes from "./auth" -import productRoutes from "./products" import cartRoutes from "./carts" -import orderRoutes from "./orders" +import collectionRoutes from "./collections" import customerRoutes from "./customers" -import shippingOptionRoutes from "./shipping-options" +import giftCardRoutes from "./gift-cards" +import orderRoutes from "./orders" +import productRoutes from "./products" import regionRoutes from "./regions" -import returnRoutes from "./returns" import returnReasonRoutes from "./return-reasons" +import returnRoutes from "./returns" +import shippingOptionRoutes from "./shipping-options" import swapRoutes from "./swaps" import variantRoutes from "./variants" -import collectionRoutes from "./collections" -import giftCardRoutes from "./gift-cards" const route = Router() diff --git a/packages/medusa/src/api/routes/store/orders/__tests__/get-order-by-cart.js b/packages/medusa/src/api/routes/store/orders/__tests__/get-order-by-cart.js index 9d0be5c0cf..d0955d3005 100644 --- a/packages/medusa/src/api/routes/store/orders/__tests__/get-order-by-cart.js +++ b/packages/medusa/src/api/routes/store/orders/__tests__/get-order-by-cart.js @@ -1,5 +1,5 @@ import { IdMap } from "medusa-test-utils" -import { defaultFields, defaultRelations } from ".." +import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from ".." import { request } from "../../../../../helpers/test-request" import { OrderServiceMock } from "../../../../../services/__mocks__/order" @@ -20,12 +20,13 @@ describe("GET /store/orders", () => { it("calls orderService retrieve", () => { expect(OrderServiceMock.retrieveByCartId).toHaveBeenCalledTimes(1) - expect( - OrderServiceMock.retrieveByCartId - ).toHaveBeenCalledWith(IdMap.getId("test-cart"), { - select: defaultFields, - relations: defaultRelations, - }) + expect(OrderServiceMock.retrieveByCartId).toHaveBeenCalledWith( + IdMap.getId("test-cart"), + { + select: defaultStoreOrdersFields, + relations: defaultStoreOrdersRelations, + } + ) }) it("returns order", () => { diff --git a/packages/medusa/src/api/routes/store/orders/__tests__/get-order.js b/packages/medusa/src/api/routes/store/orders/__tests__/get-order.js index 3727078464..0854517865 100644 --- a/packages/medusa/src/api/routes/store/orders/__tests__/get-order.js +++ b/packages/medusa/src/api/routes/store/orders/__tests__/get-order.js @@ -1,5 +1,5 @@ import { IdMap } from "medusa-test-utils" -import { defaultFields, defaultRelations } from ".." +import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from ".." import { request } from "../../../../../helpers/test-request" import { OrderServiceMock } from "../../../../../services/__mocks__/order" @@ -22,7 +22,10 @@ describe("GET /store/orders", () => { expect(OrderServiceMock.retrieve).toHaveBeenCalledTimes(1) expect(OrderServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("test-order"), - { select: defaultFields, relations: defaultRelations } + { + select: defaultStoreOrdersFields, + relations: defaultStoreOrdersRelations, + } ) }) diff --git a/packages/medusa/src/api/routes/store/orders/__tests__/lookup-order.js b/packages/medusa/src/api/routes/store/orders/__tests__/lookup-order.js new file mode 100644 index 0000000000..3db679441c --- /dev/null +++ b/packages/medusa/src/api/routes/store/orders/__tests__/lookup-order.js @@ -0,0 +1,21 @@ +import { request } from "../../../../../helpers/test-request" +import { OrderServiceMock } from "../../../../../services/__mocks__/order" + +describe("GET /store/orders", () => { + describe("successfully looksup an order passing param validation", () => { + beforeAll(async () => { + await request( + "GET", + `/store/orders/?display_id=67007&email=tester%40medusa-commerce.com&shipping_address[postal_code]=23232` + ) + }) + + afterAll(() => { + jest.clearAllMocks() + }) + + it("calls orderService list", () => { + expect(OrderServiceMock.list).toHaveBeenCalledTimes(1) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/store/orders/get-order-by-cart.js b/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts similarity index 70% rename from packages/medusa/src/api/routes/store/orders/get-order-by-cart.js rename to packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts index 42d755ccc6..4ddae453f4 100644 --- a/packages/medusa/src/api/routes/store/orders/get-order-by-cart.js +++ b/packages/medusa/src/api/routes/store/orders/get-order-by-cart.ts @@ -1,4 +1,5 @@ -import { defaultFields, defaultRelations } from "." +import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "." +import { OrderService } from "../../../../services" /** * @oas [get] /orders/cart/{cart_id} @@ -22,10 +23,10 @@ import { defaultFields, defaultRelations } from "." export default async (req, res) => { const { cart_id } = req.params - const orderService = req.scope.resolve("orderService") + const orderService: OrderService = req.scope.resolve("orderService") const order = await orderService.retrieveByCartId(cart_id, { - select: defaultFields, - relations: defaultRelations, + select: defaultStoreOrdersFields, + relations: defaultStoreOrdersRelations, }) res.json({ order }) diff --git a/packages/medusa/src/api/routes/store/orders/get-order.js b/packages/medusa/src/api/routes/store/orders/get-order.ts similarity index 58% rename from packages/medusa/src/api/routes/store/orders/get-order.js rename to packages/medusa/src/api/routes/store/orders/get-order.ts index e7acf6e74b..6135f6b9f4 100644 --- a/packages/medusa/src/api/routes/store/orders/get-order.js +++ b/packages/medusa/src/api/routes/store/orders/get-order.ts @@ -1,4 +1,5 @@ -import { defaultRelations, defaultFields } from "./index" +import { OrderService } from "../../../../services" +import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "./index" /** * @oas [get] /orders/{id} @@ -22,16 +23,11 @@ import { defaultRelations, defaultFields } from "./index" export default async (req, res) => { const { id } = req.params - try { - const orderService = req.scope.resolve("orderService") - const order = await orderService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) + const orderService: OrderService = req.scope.resolve("orderService") + const order = await orderService.retrieve(id, { + select: defaultStoreOrdersFields, + relations: defaultStoreOrdersRelations, + }) - res.json({ order }) - } catch (error) { - console.log(error) - throw error - } + res.json({ order }) } diff --git a/packages/medusa/src/api/routes/store/orders/index.js b/packages/medusa/src/api/routes/store/orders/index.ts similarity index 84% rename from packages/medusa/src/api/routes/store/orders/index.js rename to packages/medusa/src/api/routes/store/orders/index.ts index e5e09c32ef..319980ab6f 100644 --- a/packages/medusa/src/api/routes/store/orders/index.js +++ b/packages/medusa/src/api/routes/store/orders/index.ts @@ -1,4 +1,6 @@ import { Router } from "express" +import "reflect-metadata" +import { Order } from "../../../.." import middlewares from "../../../middlewares" const route = Router() @@ -27,7 +29,7 @@ export default (app) => { return app } -export const defaultRelations = [ +export const defaultStoreOrdersRelations = [ "shipping_address", "fulfillments", "fulfillments.tracking_links", @@ -43,7 +45,7 @@ export const defaultRelations = [ "region", ] -export const defaultFields = [ +export const defaultStoreOrdersFields = [ "id", "status", "fulfillment_status", @@ -66,7 +68,7 @@ export const defaultFields = [ "total", ] -export const allowedRelations = [ +export const allowedStoreOrdersRelations = [ "shipping_address", "fulfillments", "fulfillments.tracking_links", @@ -83,7 +85,7 @@ export const allowedRelations = [ "region", ] -export const allowedFields = [ +export const allowedStoreOrdersFields = [ "id", "status", "fulfillment_status", @@ -105,3 +107,9 @@ export const allowedFields = [ "subtotal", "total", ] + +export type StoreOrdersRes = { + order: Order +} + +export * from "./lookup-order" diff --git a/packages/medusa/src/api/routes/store/orders/lookup-order.js b/packages/medusa/src/api/routes/store/orders/lookup-order.js deleted file mode 100644 index bbd8d99bdf..0000000000 --- a/packages/medusa/src/api/routes/store/orders/lookup-order.js +++ /dev/null @@ -1,66 +0,0 @@ -import { Validator, MedusaError } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./index" - -/** - * @oas [get] /orders - * operationId: "GetOrders" - * summary: "Look Up an Order" - * description: "Looks for an Order with a given `display_id`, `email` pair. The `display_id`, `email` pair must match in order for the Order to be returned." - * parameters: - * - (query) display_id=* {number} The display id given to the Order. - * - (query) email=* {string} The email of the Order with the given display_id. - * tags: - * - Order - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * order: - * $ref: "#/components/schemas/order" - */ -export default async (req, res) => { - const schema = Validator.object().keys({ - display_id: Validator.number().required(), - email: Validator.string().required(), - shipping_address: Validator.object() - .keys({ - postal_code: Validator.string(), - }) - .optional(), - }) - - const { value, error } = schema.validate(req.query) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - try { - const orderService = req.scope.resolve("orderService") - - const orders = await orderService.list( - { - display_id: value.display_id, - email: value.email, - }, - { - select: defaultFields, - relations: defaultRelations, - } - ) - - if (orders.length !== 1) { - res.sendStatus(404) - return - } - - const order = orders[0] - - res.json({ order }) - } catch (error) { - console.log(error) - throw error - } -} diff --git a/packages/medusa/src/api/routes/store/orders/lookup-order.ts b/packages/medusa/src/api/routes/store/orders/lookup-order.ts new file mode 100644 index 0000000000..ae445ba5ae --- /dev/null +++ b/packages/medusa/src/api/routes/store/orders/lookup-order.ts @@ -0,0 +1,77 @@ +import { Type } from "class-transformer" +import { + IsEmail, + IsNumber, + IsOptional, + IsString, + ValidateNested, +} from "class-validator" +import { defaultStoreOrdersFields, defaultStoreOrdersRelations } from "." +import { OrderService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /orders + * operationId: "GetOrders" + * summary: "Look Up an Order" + * description: "Looks for an Order with a given `display_id`, `email` pair. The `display_id`, `email` pair must match in order for the Order to be returned." + * parameters: + * - (query) display_id=* {number} The display id given to the Order. + * - (query) email=* {string} The email of the Order with the given display_id. + * tags: + * - Order + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * order: + * $ref: "#/components/schemas/order" + */ +export default async (req, res) => { + const validated = await validator(StoreGetOrdersParams, req.query) + + const orderService: OrderService = req.scope.resolve("orderService") + + const orders = await orderService.list( + { + display_id: validated.display_id, + email: validated.email, + }, + { + select: defaultStoreOrdersFields, + relations: defaultStoreOrdersRelations, + } + ) + + if (orders.length !== 1) { + res.sendStatus(404) + return + } + + const order = orders[0] + + res.json({ order }) +} + +export class ShippingAddressPayload { + @IsOptional() + @IsString() + postal_code?: string +} + +export class StoreGetOrdersParams { + @IsNumber() + @Type(() => Number) + display_id: number + + @IsEmail() + email: string + + @IsOptional() + @ValidateNested() + @Type(() => ShippingAddressPayload) + shipping_address?: ShippingAddressPayload +} diff --git a/packages/medusa/src/api/routes/store/products/__tests__/get-product.js b/packages/medusa/src/api/routes/store/products/__tests__/get-product.js index d4561fd3ad..7a8bc083d9 100644 --- a/packages/medusa/src/api/routes/store/products/__tests__/get-product.js +++ b/packages/medusa/src/api/routes/store/products/__tests__/get-product.js @@ -1,8 +1,7 @@ -import { request } from "../../../../../helpers/test-request" import { IdMap } from "medusa-test-utils" +import { defaultStoreProductsRelations } from ".." +import { request } from "../../../../../helpers/test-request" import { ProductServiceMock } from "../../../../../services/__mocks__/product" -import { defaultRelations } from ".." -import { ProductVariantServiceMock } from "../../../../../services/__mocks__/product-variant" describe("Get product by id", () => { describe("get product by id successfull", () => { @@ -22,7 +21,7 @@ describe("Get product by id", () => { expect(ProductServiceMock.retrieve).toHaveBeenCalledTimes(1) expect(ProductServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("product1"), - { relations: defaultRelations } + { relations: defaultStoreProductsRelations } ) }) @@ -52,13 +51,13 @@ describe("Get product by id", () => { it("endpoint called with defaultRelations", () => { expect(ProductServiceMock.retrieve).toHaveBeenCalledWith( IdMap.getId("variantsWithPrices"), - { relations: defaultRelations } + { relations: defaultStoreProductsRelations } ) }) it("returns product with variant prices", () => { expect( - subject.body.product.variants.some(variant => variant.prices) + subject.body.product.variants.some((variant) => variant.prices) ).toEqual(true) expect(subject.body.product.variants[0].prices[0].amount).toEqual(100) }) diff --git a/packages/medusa/src/api/routes/store/products/__tests__/list-products.js b/packages/medusa/src/api/routes/store/products/__tests__/list-products.js index cd859fec6b..3f092d8fa8 100644 --- a/packages/medusa/src/api/routes/store/products/__tests__/list-products.js +++ b/packages/medusa/src/api/routes/store/products/__tests__/list-products.js @@ -1,5 +1,5 @@ import { IdMap } from "medusa-test-utils" -import { defaultRelations } from ".." +import { defaultStoreProductsRelations } from ".." import { request } from "../../../../../helpers/test-request" import { ProductServiceMock } from "../../../../../services/__mocks__/product" @@ -19,7 +19,7 @@ describe("GET /store/products", () => { expect(ProductServiceMock.listAndCount).toHaveBeenCalledTimes(1) expect(ProductServiceMock.listAndCount).toHaveBeenCalledWith( { status: ["published"] }, - { relations: defaultRelations, skip: 0, take: 100 } + { relations: defaultStoreProductsRelations, skip: 0, take: 100 } ) }) @@ -30,10 +30,8 @@ describe("GET /store/products", () => { }) describe("list all gift cards", () => { - let subject - beforeAll(async () => { - subject = await request("GET", "/store/products?is_giftcard=true") + await request("GET", "/store/products?is_giftcard=true") }) afterAll(() => { @@ -44,7 +42,7 @@ describe("GET /store/products", () => { expect(ProductServiceMock.listAndCount).toHaveBeenCalledTimes(1) expect(ProductServiceMock.listAndCount).toHaveBeenCalledWith( { is_giftcard: true, status: ["published"] }, - { relations: defaultRelations, skip: 0, take: 100 } + { relations: defaultStoreProductsRelations, skip: 0, take: 100 } ) }) }) diff --git a/packages/medusa/src/api/routes/store/products/__tests__/search.js b/packages/medusa/src/api/routes/store/products/__tests__/search.js new file mode 100644 index 0000000000..ff6dc18ed3 --- /dev/null +++ b/packages/medusa/src/api/routes/store/products/__tests__/search.js @@ -0,0 +1,42 @@ +import { request } from "../../../../../helpers/test-request" +import { SearchServiceMock } from "../../../../../services/__mocks__/search" + +describe("GET /store/products/search", () => { + describe("searches for products", () => { + afterAll(() => { + jest.clearAllMocks() + }) + + it("validates the request", async () => { + const response = await request("POST", "/store/products/search", { + payload: { + q: "test", + limit: 10, + offset: 0, + filter: { type: "shirts" }, + wildcard: "whuhuu", + }, + }) + expect(SearchServiceMock.search).toHaveBeenCalledTimes(1) + expect(response.status).toEqual(200) + }) + + it("fails to validates the request", async () => { + const response = await request("POST", "/store/products/search", { + payload: { + q: 423, + limit: "10 pieces", + offset: "from the start", + filter: { type: "shirts" }, + wildcard: "whuhuu", + }, + }) + + expect(response.body.type).toEqual("invalid_data") + expect(response.body.message).toEqual( + "q must be a string, offset must be a number conforming to the specified constraints, limit must be a number conforming to the specified constraints" + ) + expect(response.status).toEqual(400) + }) + }) +}) diff --git a/packages/medusa/src/api/routes/store/products/get-product.js b/packages/medusa/src/api/routes/store/products/get-product.ts similarity index 72% rename from packages/medusa/src/api/routes/store/products/get-product.js rename to packages/medusa/src/api/routes/store/products/get-product.ts index 5fcfd1e7fe..9974d3c711 100644 --- a/packages/medusa/src/api/routes/store/products/get-product.js +++ b/packages/medusa/src/api/routes/store/products/get-product.ts @@ -1,4 +1,5 @@ -import { defaultRelations } from "." +import { defaultStoreProductsRelations } from "." +import { ProductService } from "../../../../services" /** * @oas [get] /products/{id} @@ -22,9 +23,9 @@ import { defaultRelations } from "." export default async (req, res) => { const { id } = req.params - const productService = req.scope.resolve("productService") + const productService: ProductService = req.scope.resolve("productService") const product = await productService.retrieve(id, { - relations: defaultRelations, + relations: defaultStoreProductsRelations, }) res.json({ product }) diff --git a/packages/medusa/src/api/routes/store/products/index.js b/packages/medusa/src/api/routes/store/products/index.ts similarity index 54% rename from packages/medusa/src/api/routes/store/products/index.js rename to packages/medusa/src/api/routes/store/products/index.ts index 164202d0bb..2082586c9c 100644 --- a/packages/medusa/src/api/routes/store/products/index.js +++ b/packages/medusa/src/api/routes/store/products/index.ts @@ -1,4 +1,7 @@ import { Router } from "express" +import "reflect-metadata" +import { Product } from "../../../.." +import { PaginatedResponse } from "../../../../types/common" import middlewares from "../../../middlewares" const route = Router() @@ -13,7 +16,7 @@ export default (app) => { return app } -export const defaultRelations = [ +export const defaultStoreProductsRelations = [ "variants", "variants.prices", "variants.options", @@ -24,3 +27,19 @@ export const defaultRelations = [ "collection", "type", ] + +export * from "./list-products" +export * from "./search" + +export type StoreProductsRes = { + product: Product +} + +export type StorePostSearchRes = { + hits: any[] + [k: string]: any +} + +export type StoreProductsListRes = PaginatedResponse & { + products: Product[] +} diff --git a/packages/medusa/src/api/routes/store/products/list-products.js b/packages/medusa/src/api/routes/store/products/list-products.js deleted file mode 100644 index 0ad66b8503..0000000000 --- a/packages/medusa/src/api/routes/store/products/list-products.js +++ /dev/null @@ -1,57 +0,0 @@ -import { defaultRelations } from "." - -/** - * @oas [get] /products - * operationId: GetProducts - * summary: List Products - * description: "Retrieves a list of Products." - * tags: - * - Product - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * count: - * description: The total number of Products. - * type: integer - * offset: - * description: The offset for pagination. - * type: integer - * limit: - * description: The maxmimum number of Products to return, - * type: integer - * products: - * type: array - * items: - * $ref: "#/components/schemas/product" - */ -export default async (req, res) => { - const productService = req.scope.resolve("productService") - - const limit = parseInt(req.query.limit) || 100 - const offset = parseInt(req.query.offset) || 0 - - const selector = {} - - if ("is_giftcard" in req.query && req.query.is_giftcard === "true") { - selector.is_giftcard = req.query.is_giftcard === "true" - } - - selector.status = ["published"] - - const listConfig = { - relations: defaultRelations, - skip: offset, - take: limit, - } - - const [products, count] = await productService.listAndCount( - selector, - listConfig - ) - - res.json({ products, count, offset, limit }) -} diff --git a/packages/medusa/src/api/routes/store/products/list-products.ts b/packages/medusa/src/api/routes/store/products/list-products.ts new file mode 100644 index 0000000000..fb09979d6a --- /dev/null +++ b/packages/medusa/src/api/routes/store/products/list-products.ts @@ -0,0 +1,80 @@ +import { Type } from "class-transformer" +import { IsBoolean, IsInt, IsNumber, IsOptional } from "class-validator" +import { defaultStoreProductsRelations } from "." +import { ProductService } from "../../../../services" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /products + * operationId: GetProducts + * summary: List Products + * description: "Retrieves a list of Products." + * tags: + * - Product + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * count: + * description: The total number of Products. + * type: integer + * offset: + * description: The offset for pagination. + * type: integer + * limit: + * description: The maxmimum number of Products to return, + * type: integer + * products: + * type: array + * items: + * $ref: "#/components/schemas/product" + */ +export default async (req, res) => { + const productService: ProductService = req.scope.resolve("productService") + + const validated = await validator(StoreGetProductsParams, req.query) + + const selector = {} + + if (validated.is_giftcard && validated.is_giftcard === true) { + selector["is_giftcard"] = validated.is_giftcard + } + + selector["status"] = ["published"] + + const listConfig = { + relations: defaultStoreProductsRelations, + skip: validated.offset, + take: validated.limit, + } + + const [products, count] = await productService.listAndCount( + selector, + listConfig + ) + + res.json({ + products, + count, + offset: validated.offset, + limit: validated.limit, + }) +} + +export class StoreGetProductsParams { + @IsInt() + @Type(() => Number) + limit = 100 + + @IsInt() + @Type(() => Number) + offset = 0 + + @IsOptional() + @IsBoolean() + @Type(() => Boolean) + is_giftcard?: boolean +} diff --git a/packages/medusa/src/api/routes/store/products/search.js b/packages/medusa/src/api/routes/store/products/search.js deleted file mode 100644 index 4af7816fd6..0000000000 --- a/packages/medusa/src/api/routes/store/products/search.js +++ /dev/null @@ -1,31 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import ProductService from "../../../../services/product" - -export default async (req, res) => { - const schema = Validator.object() - .keys({ - q: Validator.string().required().allow(""), - offset: Validator.number().optional(), - limit: Validator.number().optional(), - filter: Validator.any(), - }) - .options({ allowUnknown: true }) - - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const { q, offset, limit, filter, ...options } = value - const paginationOptions = { offset, limit } - - const searchService = req.scope.resolve("searchService") - - const results = await searchService.search(ProductService.IndexName, q, { - paginationOptions, - filter, - additionalOptions: options, - }) - - res.status(200).send(results) -} diff --git a/packages/medusa/src/api/routes/store/products/search.ts b/packages/medusa/src/api/routes/store/products/search.ts new file mode 100644 index 0000000000..4062e8859d --- /dev/null +++ b/packages/medusa/src/api/routes/store/products/search.ts @@ -0,0 +1,46 @@ +import { Type } from "class-transformer" +import { IsNumber, IsOptional, IsString } from "class-validator" +import { SearchService } from "../../../../services" +import ProductService from "../../../../services/product" +import { validator } from "../../../../utils/validator" + +export default async (req, res) => { + // As we want to allow wildcards, we pass a config allowing this + const validated = await validator(StorePostSearchReq, req.body, { + whitelist: false, + forbidNonWhitelisted: false, + }) + + const { q, offset, limit, filter, ...options } = validated + + const paginationOptions = { offset, limit } + + const searchService: SearchService = req.scope.resolve("searchService") + + const results = await searchService.search(ProductService.IndexName, q, { + paginationOptions, + filter, + additionalOptions: options, + }) + + res.status(200).send(results) +} + +export class StorePostSearchReq { + @IsOptional() + @IsString() + q?: string + + @IsOptional() + @IsNumber() + @Type(() => Number) + offset?: number + + @IsOptional() + @IsNumber() + @Type(() => Number) + limit?: number + + @IsOptional() + filter?: any +} diff --git a/packages/medusa/src/api/routes/store/regions/get-region.js b/packages/medusa/src/api/routes/store/regions/get-region.ts similarity index 83% rename from packages/medusa/src/api/routes/store/regions/get-region.js rename to packages/medusa/src/api/routes/store/regions/get-region.ts index 2b500c09ee..83a80422d0 100644 --- a/packages/medusa/src/api/routes/store/regions/get-region.js +++ b/packages/medusa/src/api/routes/store/regions/get-region.ts @@ -1,3 +1,4 @@ +import RegionService from "../../../../services/region" /** * @oas [get] /regions/{id} * operationId: GetRegionsRegion @@ -19,7 +20,9 @@ */ export default async (req, res) => { const { region_id } = req.params - const regionService = req.scope.resolve("regionService") + + const regionService: RegionService = req.scope.resolve("regionService") + const region = await regionService.retrieve(region_id, { relations: ["countries", "payment_providers", "fulfillment_providers"], }) diff --git a/packages/medusa/src/api/routes/store/regions/index.js b/packages/medusa/src/api/routes/store/regions/index.ts similarity index 60% rename from packages/medusa/src/api/routes/store/regions/index.js rename to packages/medusa/src/api/routes/store/regions/index.ts index 401905174f..5b40d13796 100644 --- a/packages/medusa/src/api/routes/store/regions/index.js +++ b/packages/medusa/src/api/routes/store/regions/index.ts @@ -1,5 +1,6 @@ import { Router } from "express" import middlewares from "../../../middlewares" +import { Region } from "./../../../../" const route = Router() @@ -11,3 +12,14 @@ export default (app) => { return app } + +export type StoreRegionsListRes = { + regions: Region[] +} + +export type StoreRegionsRes = { + region: Region +} + +export * from "./get-region" +export * from "./list-regions" diff --git a/packages/medusa/src/api/routes/store/regions/list-regions.js b/packages/medusa/src/api/routes/store/regions/list-regions.ts similarity index 66% rename from packages/medusa/src/api/routes/store/regions/list-regions.js rename to packages/medusa/src/api/routes/store/regions/list-regions.ts index 0afb20a2c9..bfd824bd8f 100644 --- a/packages/medusa/src/api/routes/store/regions/list-regions.js +++ b/packages/medusa/src/api/routes/store/regions/list-regions.ts @@ -1,3 +1,7 @@ +import { Type } from "class-transformer" +import { IsInt, IsOptional } from "class-validator" +import RegionService from "../../../../services/region" +import { validator } from "../../../../utils/validator" /** * @oas [get] /regions * operationId: GetRegions @@ -27,10 +31,9 @@ * $ref: "#/components/schemas/region" */ export default async (req, res) => { - const regionService = req.scope.resolve("regionService") + const { limit, offset } = await validator(StoreGetRegionsParams, req.query) - const limit = parseInt(req.query.limit) || 100 - const offset = parseInt(req.query.offset) || 0 + const regionService: RegionService = req.scope.resolve("regionService") const selector = {} @@ -44,3 +47,15 @@ export default async (req, res) => { res.json({ regions }) } + +export class StoreGetRegionsParams { + @IsOptional() + @IsInt() + @Type(() => Number) + limit?: number = 100 + + @IsOptional() + @IsInt() + @Type(() => Number) + offset?: number = 0 +} diff --git a/packages/medusa/src/api/routes/store/return-reasons/get-reason.js b/packages/medusa/src/api/routes/store/return-reasons/get-reason.ts similarity index 54% rename from packages/medusa/src/api/routes/store/return-reasons/get-reason.js rename to packages/medusa/src/api/routes/store/return-reasons/get-reason.ts index 53a1cf40dd..47870eea97 100644 --- a/packages/medusa/src/api/routes/store/return-reasons/get-reason.js +++ b/packages/medusa/src/api/routes/store/return-reasons/get-reason.ts @@ -1,5 +1,8 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" +import { + defaultStoreReturnReasonFields, + defaultStoreReturnReasonRelations, +} from "." +import ReturnReasonService from "../../../../services/return-reason" /** * @oas [get] /return-reasons/{id} @@ -22,16 +25,15 @@ import { defaultRelations, defaultFields } from "./" */ export default async (req, res) => { const { id } = req.params - try { - const returnReasonService = req.scope.resolve("returnReasonService") - const data = await returnReasonService.retrieve(id, { - select: defaultFields, - relations: defaultRelations, - }) + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) - res.status(200).json({ return_reason: data }) - } catch (err) { - throw err - } + const return_reason = await returnReasonService.retrieve(id, { + select: defaultStoreReturnReasonFields, + relations: defaultStoreReturnReasonRelations, + }) + + res.status(200).json({ return_reason }) } diff --git a/packages/medusa/src/api/routes/store/return-reasons/index.js b/packages/medusa/src/api/routes/store/return-reasons/index.ts similarity index 61% rename from packages/medusa/src/api/routes/store/return-reasons/index.js rename to packages/medusa/src/api/routes/store/return-reasons/index.ts index 9ceb14eab7..c40d73663c 100644 --- a/packages/medusa/src/api/routes/store/return-reasons/index.js +++ b/packages/medusa/src/api/routes/store/return-reasons/index.ts @@ -1,3 +1,4 @@ +import { ReturnReason } from "./../../../../" import { Router } from "express" import middlewares from "../../../middlewares" @@ -19,7 +20,7 @@ export default (app) => { return app } -export const defaultFields = [ +export const defaultStoreReturnReasonFields = [ "id", "value", "label", @@ -30,7 +31,18 @@ export const defaultFields = [ "deleted_at", ] -export const defaultRelations = [ +export const defaultStoreReturnReasonRelations = [ "parent_return_reason", "return_reason_children", ] + +export type StoreReturnReasonsListRes = { + return_reasons: ReturnReason[] +} + +export type StoreReturnReasonsRes = { + return_reasons: ReturnReason +} + +export * from "./get-reason" +export * from "./list-reasons" diff --git a/packages/medusa/src/api/routes/store/return-reasons/list-reasons.js b/packages/medusa/src/api/routes/store/return-reasons/list-reasons.js deleted file mode 100644 index 2c1f8664ed..0000000000 --- a/packages/medusa/src/api/routes/store/return-reasons/list-reasons.js +++ /dev/null @@ -1,37 +0,0 @@ -import { MedusaError, Validator } from "medusa-core-utils" -import { defaultRelations, defaultFields } from "./" - -/** - * @oas [get] /return-reasons - * operationId: "GetReturnReasons" - * summary: "List Return Reasons" - * description: "Retrieves a list of Return Reasons." - * tags: - * - Return Reason - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * return_reasons: - * type: array - * items: - * $ref: "#/components/schemas/return_reason" - */ -export default async (req, res) => { - try { - const returnReasonService = req.scope.resolve("returnReasonService") - - const query = { parent_return_reason_id: null } - const data = await returnReasonService.list(query, { - select: defaultFields, - relations: defaultRelations, - }) - - res.status(200).json({ return_reasons: data }) - } catch (err) { - throw err - } -} diff --git a/packages/medusa/src/api/routes/store/return-reasons/list-reasons.ts b/packages/medusa/src/api/routes/store/return-reasons/list-reasons.ts new file mode 100644 index 0000000000..c6cece9e49 --- /dev/null +++ b/packages/medusa/src/api/routes/store/return-reasons/list-reasons.ts @@ -0,0 +1,39 @@ +import { + defaultStoreReturnReasonFields, + defaultStoreReturnReasonRelations, +} from "." +import ReturnReasonService from "../../../../services/return-reason" + +/** + * @oas [get] /return-reasons + * operationId: "GetReturnReasons" + * summary: "List Return Reasons" + * description: "Retrieves a list of Return Reasons." + * tags: + * - Return Reason + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * return_reasons: + * type: array + * items: + * $ref: "#/components/schemas/return_reason" + */ +export default async (req, res) => { + const returnReasonService: ReturnReasonService = req.scope.resolve( + "returnReasonService" + ) + + const query = { parent_return_reason_id: null } + + const return_reasons = await returnReasonService.list(query, { + select: defaultStoreReturnReasonFields, + relations: defaultStoreReturnReasonRelations, + }) + + res.status(200).json({ return_reasons }) +} diff --git a/packages/medusa/src/api/routes/store/returns/create-return.js b/packages/medusa/src/api/routes/store/returns/create-return.ts similarity index 70% rename from packages/medusa/src/api/routes/store/returns/create-return.js rename to packages/medusa/src/api/routes/store/returns/create-return.ts index 90503dac43..006067212f 100644 --- a/packages/medusa/src/api/routes/store/returns/create-return.js +++ b/packages/medusa/src/api/routes/store/returns/create-return.ts @@ -1,4 +1,19 @@ -import { MedusaError, Validator } from "medusa-core-utils" +import { Type } from "class-transformer" +import { + IsArray, + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + Min, + ValidateNested, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import EventBusService from "../../../../services/event-bus" +import IdempotencyKeyService from "../../../../services/idempotency-key" +import OrderService from "../../../../services/order" +import ReturnService from "../../../../services/return" +import { validator } from "../../../../utils/validator" /** * @oas [post] /returns @@ -24,6 +39,9 @@ import { MedusaError, Validator } from "medusa-core-utils" * quantity: * description: The quantity to return. * type: integer + * required: + * - item_id + * - quantity * return_shipping: * description: If the Return is to be handled by the store operator the Customer can choose a Return Shipping Method. Alternatvely the Customer can handle the Return themselves. * type: object @@ -31,6 +49,11 @@ import { MedusaError, Validator } from "medusa-core-utils" * option_id: * type: string * description: The id of the Shipping Option to create the Shipping Method from. + * required: + * - option_id + * required: + * - order_id + * - items * tags: * - Return * responses: @@ -44,29 +67,11 @@ import { MedusaError, Validator } from "medusa-core-utils" * $ref: "#/components/schemas/return" */ export default async (req, res) => { - const schema = Validator.object().keys({ - order_id: Validator.string().required(), - items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - reason_id: Validator.string().optional(), - note: Validator.string().optional(), - }) - .required(), - return_shipping: Validator.object() - .keys({ - option_id: Validator.string().optional(), - }) - .optional(), - }) + const returnDto = await validator(StorePostReturnsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") + const idempotencyKeyService: IdempotencyKeyService = req.scope.resolve( + "idempotencyKeyService" + ) const headerKey = req.get("Idempotency-Key") || "" @@ -87,9 +92,9 @@ export default async (req, res) => { res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) try { - const orderService = req.scope.resolve("orderService") - const returnService = req.scope.resolve("returnService") - const eventBus = req.scope.resolve("eventBusService") + const orderService: OrderService = req.scope.resolve("orderService") + const returnService: ReturnService = req.scope.resolve("returnService") + const eventBus: EventBusService = req.scope.resolve("eventBusService") let inProgress = true let err = false @@ -102,26 +107,26 @@ export default async (req, res) => { async (manager) => { const order = await orderService .withTransaction(manager) - .retrieve(value.order_id, { + .retrieve(returnDto.order_id, { select: ["refunded_total", "total"], relations: ["items"], }) - const returnObj = { - order_id: value.order_id, + const returnObj: any = { + order_id: returnDto.order_id, idempotency_key: idempotencyKey.idempotency_key, - items: value.items, + items: returnDto.items, } - if (value.return_shipping) { - returnObj.shipping_method = value.return_shipping + if (returnDto.return_shipping) { + returnObj.shipping_method = returnDto.return_shipping } const createdReturn = await returnService .withTransaction(manager) - .create(returnObj, order) + .create(returnObj) - if (value.return_shipping) { + if (returnDto.return_shipping) { await returnService .withTransaction(manager) .fulfill(createdReturn.id) @@ -130,7 +135,7 @@ export default async (req, res) => { await eventBus .withTransaction(manager) .emit("order.return_requested", { - id: value.order_id, + id: returnDto.order_id, return_id: createdReturn.id, }) @@ -213,3 +218,43 @@ export default async (req, res) => { throw err } } + +class ReturnShipping { + @IsString() + @IsNotEmpty() + option_id: string +} + +class Item { + @IsString() + @IsNotEmpty() + item_id: string + + @IsNumber() + @Min(1) + quantity: number + + @IsOptional() + @IsString() + reason_id?: string + + @IsOptional() + @IsString() + note?: string +} + +export class StorePostReturnsReq { + @IsString() + @IsNotEmpty() + order_id: string + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + items: Item[] + + @IsOptional() + @ValidateNested() + @Type(() => ReturnShipping) + return_shipping?: ReturnShipping +} diff --git a/packages/medusa/src/api/routes/store/returns/index.js b/packages/medusa/src/api/routes/store/returns/index.ts similarity index 64% rename from packages/medusa/src/api/routes/store/returns/index.js rename to packages/medusa/src/api/routes/store/returns/index.ts index 1158a6cc41..d1bb7a1cfc 100644 --- a/packages/medusa/src/api/routes/store/returns/index.js +++ b/packages/medusa/src/api/routes/store/returns/index.ts @@ -1,3 +1,4 @@ +import { Return } from "./../../../../models/return" import { Router } from "express" import middlewares from "../../../middlewares" @@ -10,3 +11,9 @@ export default (app) => { return app } + +export type StoreReturnsRes = { + return: Return +} + +export * from "./create-return" diff --git a/packages/medusa/src/api/routes/store/shipping-options/index.js b/packages/medusa/src/api/routes/store/shipping-options/index.ts similarity index 63% rename from packages/medusa/src/api/routes/store/shipping-options/index.js rename to packages/medusa/src/api/routes/store/shipping-options/index.ts index 5ab1fe84cc..4632f7718c 100644 --- a/packages/medusa/src/api/routes/store/shipping-options/index.js +++ b/packages/medusa/src/api/routes/store/shipping-options/index.ts @@ -1,3 +1,4 @@ +import { ShippingOption } from "./../../../../" import { Router } from "express" import middlewares from "../../../middlewares" @@ -14,3 +15,10 @@ export default (app) => { return app } + +export type StoreShippingOptionsListRes = { + shipping_options: ShippingOption[] +} + +export * from "./list-options" +export * from "./list-shipping-options" diff --git a/packages/medusa/src/api/routes/store/shipping-options/list-options.js b/packages/medusa/src/api/routes/store/shipping-options/list-options.ts similarity index 58% rename from packages/medusa/src/api/routes/store/shipping-options/list-options.js rename to packages/medusa/src/api/routes/store/shipping-options/list-options.ts index fe163731c1..e5bc853804 100644 --- a/packages/medusa/src/api/routes/store/shipping-options/list-options.js +++ b/packages/medusa/src/api/routes/store/shipping-options/list-options.ts @@ -1,3 +1,8 @@ +import { IsBooleanString, IsOptional, IsString } from "class-validator" +import ProductService from "../../../../services/product" +import ShippingOptionService from "../../../../services/shipping-option" +import { validator } from "../../../../utils/validator" + /** * @oas [get] /shipping-options * operationId: GetShippingOptions @@ -22,16 +27,21 @@ * $ref: "#/components/schemas/shipping_option" */ export default async (req, res) => { - const productIds = - (req.query.product_ids && req.query.product_ids.split(",")) || [] - const regionId = req.query.region_id - const productService = req.scope.resolve("productService") - const shippingOptionService = req.scope.resolve("shippingOptionService") + const validated = await validator(StoreGetShippingOptionsParams, req.query) - const query = {} + const productIds = + (validated.product_ids && validated.product_ids.split(",")) || [] + const regionId = validated.region_id + const productService: ProductService = req.scope.resolve("productService") + const shippingOptionService: ShippingOptionService = req.scope.resolve( + "shippingOptionService" + ) + + // should be selector + const query: any = {} if ("is_return" in req.query) { - query.is_return = req.query.is_return === "true" + query.is_return = validated.is_return === "true" } if (regionId) { @@ -51,3 +61,17 @@ export default async (req, res) => { res.status(200).json({ shipping_options: options }) } + +export class StoreGetShippingOptionsParams { + @IsOptional() + @IsString() + product_ids?: string + + @IsOptional() + @IsString() + region_id?: string + + @IsOptional() + @IsBooleanString() + is_return?: string +} diff --git a/packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.js b/packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.ts similarity index 64% rename from packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.js rename to packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.ts index 38234764a4..20c44ff660 100644 --- a/packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.js +++ b/packages/medusa/src/api/routes/store/shipping-options/list-shipping-options.ts @@ -1,4 +1,5 @@ -import { Validator, MedusaError } from "medusa-core-utils" +import CartService from "../../../../services/cart" +import ShippingProfileService from "../../../../services/shipping-profile" /** * @oas [get] /shipping-options/{cart_id} @@ -22,19 +23,14 @@ import { Validator, MedusaError } from "medusa-core-utils" * $ref: "#/components/schemas/shipping_option" */ export default async (req, res) => { - const schema = Validator.object().keys({ - cart_id: Validator.string().required(), - }) + const { cart_id } = req.params - const { value, error } = schema.validate(req.params) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } + const cartService: CartService = req.scope.resolve("cartService") + const shippingProfileService: ShippingProfileService = req.scope.resolve( + "shippingProfileService" + ) - const cartService = req.scope.resolve("cartService") - const shippingProfileService = req.scope.resolve("shippingProfileService") - - const cart = await cartService.retrieve(value.cart_id, { + const cart = await cartService.retrieve(cart_id, { select: ["subtotal"], relations: ["region", "items", "items.variant", "items.variant.product"], }) diff --git a/packages/medusa/src/api/routes/store/swaps/create-swap.js b/packages/medusa/src/api/routes/store/swaps/create-swap.ts similarity index 65% rename from packages/medusa/src/api/routes/store/swaps/create-swap.js rename to packages/medusa/src/api/routes/store/swaps/create-swap.ts index 419a1e0f8a..e0701afd4e 100644 --- a/packages/medusa/src/api/routes/store/swaps/create-swap.js +++ b/packages/medusa/src/api/routes/store/swaps/create-swap.ts @@ -1,6 +1,20 @@ -import { MedusaError, Validator } from "medusa-core-utils" - -import { defaultFields, defaultRelations } from "./" +import { Type } from "class-transformer" +import { + IsArray, + IsNotEmpty, + IsNumber, + IsOptional, + IsString, + Min, + ValidateNested, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" +import { defaultStoreSwapFields, defaultStoreSwapRelations } from "." +import IdempotencyKeyService from "../../../../services/idempotency-key" +import OrderService from "../../../../services/order" +import ReturnService from "../../../../services/return" +import SwapService from "../../../../services/swap" +import { validator } from "../../../../utils/validator" /** * @oas [post] /swaps @@ -11,6 +25,10 @@ import { defaultFields, defaultRelations } from "./" * content: * application/json: * schema: + * required: + * - order_id + * - return_items + * - additional_items * properties: * order_id: * type: string @@ -19,6 +37,9 @@ import { defaultFields, defaultRelations } from "./" * description: "The items to include in the Return." * type: array * items: + * required: + * - item_id + * - quantity * properties: * item_id: * description: The id of the Line Item from the Order. @@ -26,6 +47,12 @@ import { defaultFields, defaultRelations } from "./" * quantity: * description: The quantity to return. * type: integer + * reason_id: + * description: The id of the reason of this return + * type: string + * note_id: + * description: The id of the note + * type: string * return_shipping_option: * type: string * description: The id of the Shipping Option to create the Shipping Method from. @@ -33,6 +60,9 @@ import { defaultFields, defaultRelations } from "./" * description: "The items to exchange the returned items to." * type: array * items: + * required: + * - variant_id + * - quantity * properties: * variant_id: * description: The id of the Product Variant to send. @@ -40,6 +70,10 @@ import { defaultFields, defaultRelations } from "./" * quantity: * description: The quantity to send of the variant. * type: integer + * required: + * - order_id + * - return_items + * - additional_items * tags: * - Swap * responses: @@ -53,29 +87,11 @@ import { defaultFields, defaultRelations } from "./" * $ref: "#/components/schemas/swap" */ export default async (req, res) => { - const schema = Validator.object().keys({ - order_id: Validator.string().required(), - return_items: Validator.array() - .items({ - item_id: Validator.string().required(), - quantity: Validator.number().required(), - reason_id: Validator.string().optional(), - note: Validator.string().optional(), - }) - .required(), - return_shipping_option: Validator.string().optional(), - additional_items: Validator.array().items({ - variant_id: Validator.string().required(), - quantity: Validator.number().required(), - }), - }) + const swapDto = await validator(StorePostSwapsReq, req.body) - const { value, error } = schema.validate(req.body) - if (error) { - throw new MedusaError(MedusaError.Types.INVALID_DATA, error.details) - } - - const idempotencyKeyService = req.scope.resolve("idempotencyKeyService") + const idempotencyKeyService: IdempotencyKeyService = req.scope.resolve( + "idempotencyKeyService" + ) const headerKey = req.get("Idempotency-Key") || "" @@ -95,9 +111,9 @@ export default async (req, res) => { res.setHeader("Access-Control-Expose-Headers", "Idempotency-Key") res.setHeader("Idempotency-Key", idempotencyKey.idempotency_key) - const orderService = req.scope.resolve("orderService") - const swapService = req.scope.resolve("swapService") - const returnService = req.scope.resolve("returnService") + const orderService: OrderService = req.scope.resolve("orderService") + const swapService: SwapService = req.scope.resolve("swapService") + const returnService: ReturnService = req.scope.resolve("returnService") let inProgress = true let err = false @@ -110,15 +126,15 @@ export default async (req, res) => { async (manager) => { const order = await orderService .withTransaction(manager) - .retrieve(value.order_id, { + .retrieve(swapDto.order_id, { select: ["refunded_total", "total"], relations: ["items", "swaps", "swaps.additional_items"], }) let returnShipping - if (value.return_shipping_option) { + if (swapDto.return_shipping_option) { returnShipping = { - option_id: value.return_shipping_option, + option_id: swapDto.return_shipping_option, } } @@ -126,8 +142,8 @@ export default async (req, res) => { .withTransaction(manager) .create( order, - value.return_items, - value.additional_items, + swapDto.return_items, + swapDto.additional_items, returnShipping, { idempotency_key: idempotencyKey.idempotency_key, @@ -173,8 +189,8 @@ export default async (req, res) => { } const swap = await swapService.retrieve(swaps[0].id, { - select: defaultFields, - relations: defaultRelations, + select: defaultStoreSwapFields, + relations: defaultStoreSwapRelations, }) return { @@ -217,3 +233,51 @@ export default async (req, res) => { res.status(idempotencyKey.response_code).json(idempotencyKey.response_body) } + +class Item { + @IsString() + @IsNotEmpty() + item_id: string + + @IsNumber() + @Min(1) + quantity: number + + @IsOptional() + @IsString() + reason_id?: string + + @IsOptional() + @IsString() + note?: string +} + +class AdditionalItem { + @IsString() + @IsNotEmpty() + variant_id: string + + @IsNumber() + @Min(1) + quantity: number +} + +export class StorePostSwapsReq { + @IsString() + @IsNotEmpty() + order_id: string + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => Item) + return_items: Item[] + + @IsArray() + @ValidateNested({ each: true }) + @Type(() => AdditionalItem) + additional_items: AdditionalItem[] + + @IsOptional() + @IsString() + return_shipping_option?: string +} diff --git a/packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.js b/packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.ts similarity index 83% rename from packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.js rename to packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.ts index 56c68b6f11..3298ed7054 100644 --- a/packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.js +++ b/packages/medusa/src/api/routes/store/swaps/get-swap-by-cart.ts @@ -1,3 +1,4 @@ +import SwapService from "../../../../services/swap" /** * @oas [get] /swaps/{cart_id} * operationId: GetSwapsSwapCartId @@ -20,7 +21,9 @@ export default async (req, res) => { const { cart_id } = req.params - const swapService = req.scope.resolve("swapService") + const swapService: SwapService = req.scope.resolve("swapService") + const swap = await swapService.retrieveByCartId(cart_id) + res.json({ swap }) } diff --git a/packages/medusa/src/api/routes/store/swaps/index.js b/packages/medusa/src/api/routes/store/swaps/index.ts similarity index 76% rename from packages/medusa/src/api/routes/store/swaps/index.js rename to packages/medusa/src/api/routes/store/swaps/index.ts index cd02167a65..8211f75e78 100644 --- a/packages/medusa/src/api/routes/store/swaps/index.js +++ b/packages/medusa/src/api/routes/store/swaps/index.ts @@ -1,3 +1,4 @@ +import { Swap } from "./../../../../" import { Router } from "express" import middlewares from "../../../middlewares" @@ -15,7 +16,7 @@ export default (app) => { return app } -export const defaultRelations = [ +export const defaultStoreSwapRelations = [ "order", "additional_items", "return_order", @@ -26,7 +27,7 @@ export const defaultRelations = [ "shipping_methods", "cart", ] -export const defaultFields = [ +export const defaultStoreSwapFields = [ "id", "fulfillment_status", "payment_status", @@ -41,3 +42,10 @@ export const defaultFields = [ "metadata", "idempotency_key", ] + +export type StoreSwapsRes = { + swap: Swap +} + +export * from "./create-swap" +export * from "./get-swap-by-cart" diff --git a/packages/medusa/src/api/routes/store/variants/get-variant.js b/packages/medusa/src/api/routes/store/variants/get-variant.ts similarity index 71% rename from packages/medusa/src/api/routes/store/variants/get-variant.js rename to packages/medusa/src/api/routes/store/variants/get-variant.ts index 7a255bd0af..9af345bb5c 100644 --- a/packages/medusa/src/api/routes/store/variants/get-variant.js +++ b/packages/medusa/src/api/routes/store/variants/get-variant.ts @@ -1,4 +1,5 @@ -import { defaultRelations } from "." +import { defaultStoreVariantRelations } from "." +import ProductVariantService from "../../../../services/product-variant" /** * @oas [get] /variants/{variant_id} @@ -22,9 +23,12 @@ import { defaultRelations } from "." export default async (req, res) => { const { id } = req.params - const variantService = req.scope.resolve("productVariantService") + const variantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + const variant = await variantService.retrieve(id, { - relations: defaultRelations, + relations: defaultStoreVariantRelations, }) res.json({ variant }) diff --git a/packages/medusa/src/api/routes/store/variants/index.js b/packages/medusa/src/api/routes/store/variants/index.js deleted file mode 100644 index 1f14b0be18..0000000000 --- a/packages/medusa/src/api/routes/store/variants/index.js +++ /dev/null @@ -1,15 +0,0 @@ -import { Router } from "express" -import middlewares from "../../../middlewares" - -const route = Router() - -export default (app) => { - app.use("/variants", route) - - route.get("/", middlewares.wrap(require("./list-variants").default)) - route.get("/:id", middlewares.wrap(require("./get-variant").default)) - - return app -} - -export const defaultRelations = ["prices", "options"] diff --git a/packages/medusa/src/api/routes/store/variants/index.ts b/packages/medusa/src/api/routes/store/variants/index.ts new file mode 100644 index 0000000000..8318a1eea8 --- /dev/null +++ b/packages/medusa/src/api/routes/store/variants/index.ts @@ -0,0 +1,28 @@ +import { PaginatedResponse } from "./../../../../types/common" +import { ProductVariant } from "../../../../" +import { Router } from "express" +import middlewares from "../../../middlewares" + +const route = Router() + +export default (app) => { + app.use("/variants", route) + + route.get("/", middlewares.wrap(require("./list-variants").default)) + route.get("/:id", middlewares.wrap(require("./get-variant").default)) + + return app +} + +export const defaultStoreVariantRelations = ["prices", "options"] + +export type StoreVariantsRes = { + variant: ProductVariant +} + +export type StoreVariantsListRes = PaginatedResponse & { + variants: ProductVariant[] +} + +export * from "./list-variants" +export * from "./get-variant" diff --git a/packages/medusa/src/api/routes/store/variants/list-variants.js b/packages/medusa/src/api/routes/store/variants/list-variants.js deleted file mode 100644 index cf227b28c6..0000000000 --- a/packages/medusa/src/api/routes/store/variants/list-variants.js +++ /dev/null @@ -1,48 +0,0 @@ -import { defaultRelations } from "." - -/** - * @oas [get] /variants - * operationId: GetVariants - * summary: Retrieve Product Variants - * description: "Retrieves a list of Product Variants" - * parameters: - * - (query) ids {string} A comma separated list of Product Variant ids to filter by. - * tags: - * - Product Variant - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * properties: - * variants: - * type: array - * items: - * $ref: "#/components/schemas/product_variant" - */ -export default async (req, res) => { - const limit = parseInt(req.query.limit) || 100 - const offset = parseInt(req.query.offset) || 0 - - let expandFields = [] - if ("expand" in req.query) { - expandFields = req.query.expand.split(",") - } - - let selector = {} - const listConfig = { - relations: expandFields.length ? expandFields : defaultRelations, - skip: offset, - take: limit, - } - - if ("ids" in req.query) { - selector = { id: req.query.ids.split(",") } - } - - const variantService = req.scope.resolve("productVariantService") - const variants = await variantService.list(selector, listConfig) - - res.json({ variants }) -} diff --git a/packages/medusa/src/api/routes/store/variants/list-variants.ts b/packages/medusa/src/api/routes/store/variants/list-variants.ts new file mode 100644 index 0000000000..3dc2c18d3a --- /dev/null +++ b/packages/medusa/src/api/routes/store/variants/list-variants.ts @@ -0,0 +1,81 @@ +import { Type } from "class-transformer" +import { IsInt, IsOptional, IsString } from "class-validator" +import { defaultStoreVariantRelations } from "." +import ProductVariantService from "../../../../services/product-variant" +import { validator } from "../../../../utils/validator" + +/** + * @oas [get] /variants + * operationId: GetVariants + * summary: Retrieve Product Variants + * description: "Retrieves a list of Product Variants" + * parameters: + * - (query) ids {string} A comma separated list of Product Variant ids to filter by. + * - (query) expand {string} A comma separated list of Product Variant relations to load. + * - (query) offset {number} + * - (query) limit {number} Maximum number of Product Variants to return. + * tags: + * - Product Variant + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * properties: + * variants: + * type: array + * items: + * $ref: "#/components/schemas/product_variant" + */ +export default async (req, res) => { + const { limit, offset, expand, ids } = await validator( + StoreGetVariantsParams, + req.query + ) + + let expandFields: string[] = [] + if (expand) { + expandFields = expand.split(",") + } + + let selector = {} + const listConfig = { + relations: expandFields.length + ? expandFields + : defaultStoreVariantRelations, + skip: offset, + take: limit, + } + + if (ids) { + selector = { id: ids.split(",") } + } + + const variantService: ProductVariantService = req.scope.resolve( + "productVariantService" + ) + const variants = await variantService.list(selector, listConfig) + + res.json({ variants }) +} + +export class StoreGetVariantsParams { + @IsOptional() + @IsInt() + @Type(() => Number) + limit?: number = 100 + + @IsOptional() + @IsInt() + @Type(() => Number) + offset?: number = 0 + + @IsOptional() + @IsString() + expand?: string + + @IsOptional() + @IsString() + ids?: string +} diff --git a/packages/medusa/src/helpers/test-request.js b/packages/medusa/src/helpers/test-request.js index d7e7980979..47d1930710 100644 --- a/packages/medusa/src/helpers/test-request.js +++ b/packages/medusa/src/helpers/test-request.js @@ -1,26 +1,25 @@ -import { MockManager } from "medusa-test-utils" -import { createContainer, asValue } from "awilix" +import { asValue, createContainer } from "awilix" import express from "express" -import cookieParser from "cookie-parser" -import supertest from "supertest" import jwt from "jsonwebtoken" -import session from "express-session" -import servicesLoader from "../loaders/services" +import { MockManager } from "medusa-test-utils" +import "reflect-metadata" +import supertest from "supertest" +import config from "../config" import apiLoader from "../loaders/api" import passportLoader from "../loaders/passport" -import config from "../config" +import servicesLoader from "../loaders/services" -let adminSessionOpts = { +const adminSessionOpts = { cookieName: "session", secret: "test", } export { adminSessionOpts } +export { clientSessionOpts } -let clientSessionOpts = { +const clientSessionOpts = { cookieName: "session", secret: "test", } -export { clientSessionOpts } const testApp = express() @@ -60,7 +59,7 @@ const supertestRequest = supertest(testApp) export async function request(method, url, opts = {}) { let { payload, headers } = opts - let req = supertestRequest[method.toLowerCase()](url) + const req = supertestRequest[method.toLowerCase()](url) headers = headers || {} headers.Cookie = headers.Cookie || "" if (opts.adminSession) { @@ -89,7 +88,7 @@ export async function request(method, url, opts = {}) { headers.Cookie = JSON.stringify(opts.clientSession) || "" } - for (let name in headers) { + for (const name in headers) { req.set(name, headers[name]) } @@ -114,14 +113,14 @@ export async function request(method, url, opts = {}) { } } - //let c = + // let c = // res.headers["set-cookie"] && cookie.parse(res.headers["set-cookie"][0]) - //res.adminSession = + // res.adminSession = // c && // c[adminSessionOpts.cookieName] && // sessions.util.decode(adminSessionOpts, c[adminSessionOpts.cookieName]) // .content - //res.clientSession = + // res.clientSession = // c && // c[clientSessionOpts.cookieName] && // sessions.util.decode(clientSessionOpts, c[clientSessionOpts.cookieName]) diff --git a/packages/medusa/src/index.js b/packages/medusa/src/index.js index 0c90c4c160..f85051e82d 100644 --- a/packages/medusa/src/index.js +++ b/packages/medusa/src/index.js @@ -1,49 +1,53 @@ +// API payloads +export * from "./api" + +// Models export { Address } from "./models/address" -export { Notification } from "./models/notification" 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 { ClaimTag } from "./models/claim-tag" export { Country } from "./models/country" export { Currency } from "./models/currency" +export { CustomShippingOption } from "./models/custom-shipping-option" export { Customer } from "./models/customer" -export { DiscountRule } from "./models/discount-rule" export { Discount } from "./models/discount" +export { DiscountRule } from "./models/discount-rule" +export { DraftOrder } from "./models/draft-order" export { Fulfillment } from "./models/fulfillment" export { FulfillmentItem } from "./models/fulfillment-item" export { FulfillmentProvider } from "./models/fulfillment-provider" -export { GiftCardTransaction } from "./models/gift-card-transaction" export { GiftCard } from "./models/gift-card" +export { GiftCardTransaction } from "./models/gift-card-transaction" export { IdempotencyKey } from "./models/idempotency-key" export { Image } from "./models/image" export { LineItem } from "./models/line-item" export { MoneyAmount } from "./models/money-amount" +export { Note } from "./models/note" +export { Notification } from "./models/notification" export { Oauth } from "./models/oauth" export { Order } from "./models/order" +export { Payment } from "./models/payment" export { PaymentProvider } from "./models/payment-provider" export { PaymentSession } from "./models/payment-session" -export { Payment } from "./models/payment" export { Product } from "./models/product" export { ProductCollection } from "./models/product-collection" export { ProductOption } from "./models/product-option" export { ProductOptionValue } from "./models/product-option-value" -export { ProductVariant } from "./models/product-variant" export { ProductTag } from "./models/product-tag" export { ProductType } from "./models/product-type" +export { ProductVariant } from "./models/product-variant" export { Refund } from "./models/refund" export { Region } from "./models/region" -export { ReturnItem } from "./models/return-item" export { Return } from "./models/return" +export { ReturnItem } from "./models/return-item" +export { ReturnReason } from "./models/return-reason" export { ShippingMethod } from "./models/shipping-method" -export { ShippingOptionRequirement } from "./models/shipping-option-requirement" export { ShippingOption } from "./models/shipping-option" +export { ShippingOptionRequirement } from "./models/shipping-option-requirement" export { ShippingProfile } from "./models/shipping-profile" export { StagedJob } from "./models/staged-job" export { Store } from "./models/store" export { Swap } from "./models/swap" export { User } from "./models/user" -export { DraftOrder } from "./models/draft-order" -export { ReturnReason } from "./models/return-reason" -export { Note } from "./models/note" -export { CustomShippingOption } from "./models/custom-shipping-option" diff --git a/packages/medusa/src/loaders/api.js b/packages/medusa/src/loaders/api.js index 65d2a5fbeb..acaea38108 100644 --- a/packages/medusa/src/loaders/api.js +++ b/packages/medusa/src/loaders/api.js @@ -1,6 +1,5 @@ import bodyParser from "body-parser" import { getConfigFile } from "medusa-core-utils" - import routes from "../api" export default async ({ app, rootDirectory, container }) => { diff --git a/packages/medusa/src/loaders/index.js b/packages/medusa/src/loaders/index.js index e2ff64ae1d..ea737820cc 100644 --- a/packages/medusa/src/loaders/index.js +++ b/packages/medusa/src/loaders/index.js @@ -1,34 +1,34 @@ -import { createContainer, asValue } from "awilix" -import requestIp from "request-ip" -import { getManager } from "typeorm" +import { asValue, createContainer } from "awilix" import { getConfigFile } from "medusa-core-utils" import { track } from "medusa-telemetry" - -import expressLoader from "./express" -import redisLoader from "./redis" -import databaseLoader from "./database" -import repositoriesLoader from "./repositories" +import "reflect-metadata" +import requestIp from "request-ip" +import { getManager } from "typeorm" import apiLoader from "./api" +import databaseLoader from "./database" +import defaultsLoader from "./defaults" +import expressLoader from "./express" +import Logger from "./logger" import modelsLoader from "./models" -import servicesLoader from "./services" -import subscribersLoader from "./subscribers" import passportLoader from "./passport" import pluginsLoader, { registerPluginModels } from "./plugins" -import defaultsLoader from "./defaults" -import Logger from "./logger" +import redisLoader from "./redis" +import repositoriesLoader from "./repositories" import searchIndexLoader from "./search-index" +import servicesLoader from "./services" +import subscribersLoader from "./subscribers" export default async ({ directory: rootDirectory, expressApp }) => { const { configModule } = getConfigFile(rootDirectory, `medusa-config`) const container = createContainer() - container.registerAdd = function(name, registration) { - let storeKey = name + "_STORE" + container.registerAdd = function (name, registration) { + const storeKey = name + "_STORE" if (this.registrations[storeKey] === undefined) { this.register(storeKey, asValue([])) } - let store = this.resolve(storeKey) + const store = this.resolve(storeKey) if (this.registrations[name] === undefined) { this.register(name, asArray(store)) @@ -167,6 +167,7 @@ export default async ({ directory: rootDirectory, expressApp }) => { function asArray(resolvers) { return { - resolve: (container, opts) => resolvers.map(r => container.build(r, opts)), + resolve: (container, opts) => + resolvers.map((r) => container.build(r, opts)), } } diff --git a/packages/medusa/src/models/cart.ts b/packages/medusa/src/models/cart.ts index 5588d24c3b..2358d9f5e8 100644 --- a/packages/medusa/src/models/cart.ts +++ b/packages/medusa/src/models/cart.ts @@ -83,37 +83,33 @@ */ import { - Entity, + AfterLoad, BeforeInsert, - Index, Column, - DeleteDateColumn, CreateDateColumn, - UpdateDateColumn, - PrimaryColumn, - OneToOne, - OneToMany, - ManyToOne, - ManyToMany, + DeleteDateColumn, + Entity, + Index, JoinColumn, JoinTable, - AfterLoad, - Timestamp, - BeforeUpdate, + ManyToMany, + ManyToOne, + OneToMany, + OneToOne, + PrimaryColumn, + UpdateDateColumn, } from "typeorm" import { ulid } from "ulid" -import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" - -import { Region } from "./region" +import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { Address } from "./address" -import { LineItem } from "./line-item" -import { Discount } from "./discount" import { Customer } from "./customer" -import { PaymentSession } from "./payment-session" -import { Payment } from "./payment" +import { Discount } from "./discount" import { GiftCard } from "./gift-card" +import { LineItem } from "./line-item" +import { Payment } from "./payment" +import { PaymentSession } from "./payment-session" +import { Region } from "./region" import { ShippingMethod } from "./shipping-method" -import { CustomShippingOption } from "./custom-shipping-option" export enum CartType { DEFAULT = "default", @@ -151,11 +147,9 @@ export class Cart { @JoinColumn({ name: "shipping_address_id" }) shipping_address: Address - @OneToMany( - () => LineItem, - lineItem => lineItem.cart, - { cascade: ["insert", "remove"] } - ) + @OneToMany(() => LineItem, (lineItem) => lineItem.cart, { + cascade: ["insert", "remove"], + }) items: LineItem[] @Index() @@ -204,11 +198,9 @@ export class Cart { payment_session: PaymentSession - @OneToMany( - () => PaymentSession, - paymentSession => paymentSession.cart, - { cascade: true } - ) + @OneToMany(() => PaymentSession, (paymentSession) => paymentSession.cart, { + cascade: true, + }) payment_sessions: PaymentSession[] @Index() @@ -219,11 +211,9 @@ export class Cart { @JoinColumn({ name: "payment_id" }) payment: Payment - @OneToMany( - () => ShippingMethod, - method => method.cart, - { cascade: ["soft-remove", "remove"] } - ) + @OneToMany(() => ShippingMethod, (method) => method.cart, { + cascade: ["soft-remove", "remove"], + }) shipping_methods: ShippingMethod[] @DbAwareColumn({ type: "enum", enum: CartType, default: "default" }) @@ -264,16 +254,18 @@ export class Cart { gift_card_total: number @BeforeInsert() - private beforeInsert() { - if (this.id) return + private beforeInsert(): undefined | void { + if (this.id) { + return + } const id = ulid() this.id = `cart_${id}` } @AfterLoad() - private afterLoad() { + private afterLoad(): void { if (this.payment_sessions) { - this.payment_session = this.payment_sessions.find(p => p.is_selected) + this.payment_session = this.payment_sessions.find((p) => p.is_selected)! } } } diff --git a/packages/medusa/src/models/draft-order.ts b/packages/medusa/src/models/draft-order.ts index 02ed2d3b54..8e7dea6a25 100644 --- a/packages/medusa/src/models/draft-order.ts +++ b/packages/medusa/src/models/draft-order.ts @@ -1,23 +1,22 @@ import { - Entity, - Generated, BeforeInsert, - Index, Column, CreateDateColumn, - UpdateDateColumn, - PrimaryColumn, - OneToOne, + Entity, + Generated, + Index, JoinColumn, + OneToOne, + PrimaryColumn, + UpdateDateColumn, } from "typeorm" import { ulid } from "ulid" import { - resolveDbType, - resolveDbGenerationStrategy, DbAwareColumn, + resolveDbGenerationStrategy, + resolveDbType, } from "../utils/db-aware-column" import { manualAutoIncrement } from "../utils/manual-auto-increment" - import { Cart } from "./cart" import { Order } from "./order" @@ -77,14 +76,18 @@ export class DraftOrder { idempotency_key: string @BeforeInsert() - private async beforeInsert() { + private async beforeInsert(): Promise { if (!this.id) { const id = ulid() this.id = `dorder_${id}` } if (process.env.NODE_ENV === "development" && !this.display_id) { - this.display_id = await manualAutoIncrement("draft_order") + const disId = await manualAutoIncrement("draft_order") + + if (disId) { + this.display_id = disId + } } } } diff --git a/packages/medusa/src/models/money-amount.ts b/packages/medusa/src/models/money-amount.ts index b4e87b716d..d234279794 100644 --- a/packages/medusa/src/models/money-amount.ts +++ b/packages/medusa/src/models/money-amount.ts @@ -1,23 +1,17 @@ import { - Entity, BeforeInsert, Column, - DeleteDateColumn, CreateDateColumn, - UpdateDateColumn, + DeleteDateColumn, + Entity, Index, - RelationId, - PrimaryColumn, - OneToOne, - OneToMany, - ManyToOne, - ManyToMany, JoinColumn, - JoinTable, + ManyToOne, + PrimaryColumn, + UpdateDateColumn, } from "typeorm" import { ulid } from "ulid" -import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" - +import { resolveDbType } from "../utils/db-aware-column" import { Currency } from "./currency" import { ProductVariant } from "./product-variant" import { Region } from "./region" @@ -38,17 +32,15 @@ export class MoneyAmount { amount: number @Column({ type: "int", nullable: true, default: null }) - sale_amount: number + sale_amount?: number @Index() @Column({ nullable: true }) variant_id: string - @ManyToOne( - () => ProductVariant, - variant => variant.prices, - { onDelete: "cascade" } - ) + @ManyToOne(() => ProductVariant, (variant) => variant.prices, { + onDelete: "CASCADE", + }) @JoinColumn({ name: "variant_id" }) variant: ProductVariant @@ -70,8 +62,10 @@ export class MoneyAmount { deleted_at: Date @BeforeInsert() - private beforeInsert() { - if (this.id) return + private beforeInsert(): undefined | void { + if (this.id) { + return + } const id = ulid() this.id = `ma_${id}` } diff --git a/packages/medusa/src/models/order.ts b/packages/medusa/src/models/order.ts index 7b0fcdf3ef..c7cc86c3a5 100644 --- a/packages/medusa/src/models/order.ts +++ b/packages/medusa/src/models/order.ts @@ -1,44 +1,43 @@ import { - Entity, - Generated, BeforeInsert, - Index, Column, CreateDateColumn, - UpdateDateColumn, - PrimaryColumn, - OneToOne, - OneToMany, - ManyToOne, - ManyToMany, + Entity, + Generated, + Index, JoinColumn, JoinTable, + ManyToMany, + ManyToOne, + OneToMany, + OneToOne, + PrimaryColumn, + UpdateDateColumn, } from "typeorm" import { ulid } from "ulid" import { - resolveDbType, - resolveDbGenerationStrategy, DbAwareColumn, + resolveDbGenerationStrategy, + resolveDbType, } from "../utils/db-aware-column" import { manualAutoIncrement } from "../utils/manual-auto-increment" - import { Address } from "./address" -import { LineItem } from "./line-item" +import { Cart } from "./cart" +import { ClaimOrder } from "./claim-order" import { Currency } from "./currency" import { Customer } from "./customer" -import { Region } from "./region" import { Discount } from "./discount" +import { DraftOrder } from "./draft-order" +import { Fulfillment } from "./fulfillment" import { GiftCard } from "./gift-card" import { GiftCardTransaction } from "./gift-card-transaction" +import { LineItem } from "./line-item" import { Payment } from "./payment" -import { Cart } from "./cart" -import { Fulfillment } from "./fulfillment" -import { Return } from "./return" import { Refund } from "./refund" -import { Swap } from "./swap" -import { ClaimOrder } from "./claim-order" +import { Region } from "./region" +import { Return } from "./return" import { ShippingMethod } from "./shipping-method" -import { DraftOrder } from "./draft-order" +import { Swap } from "./swap" export enum OrderStatus { PENDING = "pending", @@ -174,53 +173,29 @@ export class Order { }) gift_cards: GiftCard[] - @OneToMany( - () => ShippingMethod, - method => method.order, - { cascade: ["insert"] } - ) + @OneToMany(() => ShippingMethod, (method) => method.order, { + cascade: ["insert"], + }) shipping_methods: ShippingMethod[] - @OneToMany( - () => Payment, - payment => payment.order, - { cascade: ["insert"] } - ) + @OneToMany(() => Payment, (payment) => payment.order, { cascade: ["insert"] }) payments: Payment[] - @OneToMany( - () => Fulfillment, - fulfillment => fulfillment.order, - { cascade: ["insert"] } - ) + @OneToMany(() => Fulfillment, (fulfillment) => fulfillment.order, { + cascade: ["insert"], + }) fulfillments: Fulfillment[] - @OneToMany( - () => Return, - ret => ret.order, - { cascade: ["insert"] } - ) + @OneToMany(() => Return, (ret) => ret.order, { cascade: ["insert"] }) returns: Return[] - @OneToMany( - () => ClaimOrder, - co => co.order, - { cascade: ["insert"] } - ) + @OneToMany(() => ClaimOrder, (co) => co.order, { cascade: ["insert"] }) claims: ClaimOrder[] - @OneToMany( - () => Refund, - ref => ref.order, - { cascade: ["insert"] } - ) + @OneToMany(() => Refund, (ref) => ref.order, { cascade: ["insert"] }) refunds: Refund[] - @OneToMany( - () => Swap, - swap => swap.order, - { cascade: ["insert"] } - ) + @OneToMany(() => Swap, (swap) => swap.order, { cascade: ["insert"] }) swaps: Swap[] @Column({ nullable: true }) @@ -230,17 +205,12 @@ export class Order { @JoinColumn({ name: "draft_order_id" }) draft_order: DraftOrder - @OneToMany( - () => LineItem, - lineItem => lineItem.order, - { cascade: ["insert"] } - ) + @OneToMany(() => LineItem, (lineItem) => lineItem.order, { + cascade: ["insert"], + }) items: LineItem[] - @OneToMany( - () => GiftCardTransaction, - gc => gc.order - ) + @OneToMany(() => GiftCardTransaction, (gc) => gc.order) gift_card_transactions: GiftCardTransaction[] @Column({ nullable: true, type: resolveDbType("timestamptz") }) @@ -256,7 +226,7 @@ export class Order { metadata: any @Column({ type: "boolean", nullable: true }) - no_notification: Boolean + no_notification: boolean @Column({ nullable: true }) idempotency_key: string @@ -273,14 +243,18 @@ export class Order { gift_card_total: number @BeforeInsert() - private async beforeInsert() { + private async beforeInsert(): Promise { if (!this.id) { const id = ulid() this.id = `order_${id}` } if (process.env.NODE_ENV === "development" && !this.display_id) { - this.display_id = await manualAutoIncrement("order") + const disId = await manualAutoIncrement("order") + + if (disId) { + this.display_id = disId + } } } } diff --git a/packages/medusa/src/models/product-option-value.ts b/packages/medusa/src/models/product-option-value.ts index 379ad87591..eb92dd4391 100644 --- a/packages/medusa/src/models/product-option-value.ts +++ b/packages/medusa/src/models/product-option-value.ts @@ -1,18 +1,17 @@ import { + BeforeInsert, + Column, + CreateDateColumn, + DeleteDateColumn, Entity, Index, JoinColumn, - BeforeInsert, - DeleteDateColumn, - CreateDateColumn, - UpdateDateColumn, ManyToOne, - Column, PrimaryColumn, + UpdateDateColumn, } from "typeorm" import { ulid } from "ulid" -import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column" - +import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column" import { ProductOption } from "./product-option" import { ProductVariant } from "./product-variant" @@ -28,10 +27,7 @@ export class ProductOptionValue { @Column() option_id: string - @ManyToOne( - () => ProductOption, - option => option.values - ) + @ManyToOne(() => ProductOption, (option) => option.values) @JoinColumn({ name: "option_id" }) option: ProductOption @@ -39,11 +35,9 @@ export class ProductOptionValue { @Column() variant_id: string - @ManyToOne( - () => ProductVariant, - variant => variant.options, - { onDelete: "cascade" } - ) + @ManyToOne(() => ProductVariant, (variant) => variant.options, { + onDelete: "CASCADE", + }) @JoinColumn({ name: "variant_id" }) variant: ProductVariant @@ -60,8 +54,10 @@ export class ProductOptionValue { metadata: any @BeforeInsert() - private beforeInsert() { - if (this.id) return + private beforeInsert(): void | undefined { + if (this.id) { + return + } const id = ulid() this.id = `optval_${id}` } diff --git a/packages/medusa/src/repositories/cart.ts b/packages/medusa/src/repositories/cart.ts index 89adbf87cf..c0b640219b 100644 --- a/packages/medusa/src/repositories/cart.ts +++ b/packages/medusa/src/repositories/cart.ts @@ -1,5 +1,5 @@ -import { EntityRepository, FindManyOptions, Repository } from "typeorm" import { flatten, groupBy, map, merge } from "lodash" +import { EntityRepository, FindManyOptions, Repository } from "typeorm" import { Cart } from "../models/cart" @EntityRepository(Cart) @@ -32,7 +32,7 @@ export class CartRepository extends Repository { const entitiesAndRelations = entitiesIdsWithRelations.concat(entities) const entitiesAndRelationsById = groupBy(entitiesAndRelations, "id") - return map(entitiesAndRelationsById, entityAndRelations => + return map(entitiesAndRelationsById, (entityAndRelations) => merge({}, ...entityAndRelations) ) } diff --git a/packages/medusa/src/repositories/product.ts b/packages/medusa/src/repositories/product.ts index b7851f691e..831c6f17e4 100644 --- a/packages/medusa/src/repositories/product.ts +++ b/packages/medusa/src/repositories/product.ts @@ -2,15 +2,19 @@ import { flatten, groupBy, map, merge } from "lodash" import { EntityRepository, FindManyOptions, + FindOperator, OrderByCondition, Repository, } from "typeorm" +import { ProductTag } from ".." import { Product } from "../models/product" type DefaultWithoutRelations = Omit, "relations"> type CustomOptions = { - where?: DefaultWithoutRelations["where"] & { tags?: string[] } + where?: DefaultWithoutRelations["where"] & { + tags?: FindOperator + } order?: OrderByCondition skip?: number take?: number @@ -34,19 +38,25 @@ export class ProductRepository extends Repository { optionsWithoutRelations: FindWithRelationsOptions, shouldCount = false ): Promise<[Product[], number]> { - const tags = optionsWithoutRelations.where.tags - delete optionsWithoutRelations.where.tags + const tags = optionsWithoutRelations?.where?.tags + delete optionsWithoutRelations?.where?.tags let qb = this.createQueryBuilder("product") .select(["product.id"]) - .where(optionsWithoutRelations.where) .skip(optionsWithoutRelations.skip) .take(optionsWithoutRelations.take) - .orderBy(optionsWithoutRelations.order) + + qb = optionsWithoutRelations.where + ? qb.where(optionsWithoutRelations.where) + : qb + + qb = optionsWithoutRelations.order + ? qb.orderBy(optionsWithoutRelations.order) + : qb if (tags) { qb = qb .leftJoinAndSelect("product.tags", "tags") - .andWhere(`tags.id IN (:...ids)`, { ids: tags._value }) + .andWhere(`tags.id IN (:...ids)`, { ids: tags.value }) } if (optionsWithoutRelations.withDeleted) { @@ -54,7 +64,7 @@ export class ProductRepository extends Repository { } let entities: Product[] - let count = null + let count = 0 if (shouldCount) { const result = await qb.getManyAndCount() entities = result[0] @@ -144,7 +154,7 @@ export class ProductRepository extends Repository { public async findWithRelationsAndCount( relations: Array = [], - idsOrOptionsWithoutRelations: FindWithRelationsOptions = {} + idsOrOptionsWithoutRelations: FindWithRelationsOptions = { where: {} } ): Promise<[Product[], number]> { let count: number let entities: Product[] @@ -234,7 +244,7 @@ export class ProductRepository extends Repository { public async findOneWithRelations( relations: Array = [], - optionsWithoutRelations: Omit, "relations"> = {} + optionsWithoutRelations: FindWithRelationsOptions = { where: {} } ): Promise { // Limit 1 optionsWithoutRelations.take = 1 diff --git a/packages/medusa/src/repositories/swap.ts b/packages/medusa/src/repositories/swap.ts index 3ee40c4d21..bb0c03d97d 100644 --- a/packages/medusa/src/repositories/swap.ts +++ b/packages/medusa/src/repositories/swap.ts @@ -1,6 +1,6 @@ -import { EntityRepository, Repository } from "typeorm" -import { Swap } from "../models/swap" import { flatten, groupBy, map, merge } from "lodash" +import { EntityRepository, FindManyOptions, Repository } from "typeorm" +import { Swap } from "../models/swap" @EntityRepository(Swap) export class SwapRepository extends Repository { @@ -34,7 +34,7 @@ export class SwapRepository extends Repository { const entitiesAndRelationsById = groupBy(entitiesAndRelations, "id") - return map(entities, e => merge({}, ...entitiesAndRelationsById[e.id])) + return map(entities, (e) => merge({}, ...entitiesAndRelationsById[e.id])) } public async findOneWithRelations( diff --git a/packages/medusa/src/services/__mocks__/customer.js b/packages/medusa/src/services/__mocks__/customer.js index 78e65409e4..d324cb8968 100644 --- a/packages/medusa/src/services/__mocks__/customer.js +++ b/packages/medusa/src/services/__mocks__/customer.js @@ -1,22 +1,22 @@ -import Scrypt from "scrypt-kdf" import { IdMap } from "medusa-test-utils" +import Scrypt from "scrypt-kdf" export const CustomerServiceMock = { - create: jest.fn().mockImplementation(data => { + create: jest.fn().mockImplementation((data) => { return Promise.resolve({ ...data, id: IdMap.getId("lebron") }) }), update: jest.fn().mockImplementation((id, data) => { return Promise.resolve({ ...data, id: IdMap.getId("lebron") }) }), - decorate: jest.fn().mockImplementation(data => { - let d = Object.assign({}, data) + decorate: jest.fn().mockImplementation((data) => { + const d = Object.assign({}, data) d.decorated = true return d }), - generateResetPasswordToken: jest.fn().mockImplementation(id => { + generateResetPasswordToken: jest.fn().mockImplementation((id) => { return Promise.resolve() }), - retrieve: jest.fn().mockImplementation(id => { + retrieve: jest.fn().mockImplementation((id) => { if (id === IdMap.getId("lebron")) { return Promise.resolve({ id: IdMap.getId("lebron"), @@ -27,7 +27,7 @@ export const CustomerServiceMock = { }) } }), - retrieveByEmail: jest.fn().mockImplementation(email => { + retrieveByEmail: jest.fn().mockImplementation((email) => { if (email === "lebron@james.com") { return Promise.resolve({ id: IdMap.getId("lebron"), @@ -43,7 +43,7 @@ export const CustomerServiceMock = { }) } if (email === "oliver@test.dk") { - return Scrypt.kdf("123456789", { logN: 1, r: 1, p: 1 }).then(hash => ({ + return Scrypt.kdf("123456789", { logN: 1, r: 1, p: 1 }).then((hash) => ({ email, password_hash: hash.toString("base64"), })) diff --git a/packages/medusa/src/services/__mocks__/order.js b/packages/medusa/src/services/__mocks__/order.js index 114298abf3..f5b8dd22bd 100644 --- a/packages/medusa/src/services/__mocks__/order.js +++ b/packages/medusa/src/services/__mocks__/order.js @@ -125,20 +125,20 @@ export const orders = { } export const OrderServiceMock = { - withTransaction: function() { + withTransaction: function () { return this }, - create: jest.fn().mockImplementation(data => { + create: jest.fn().mockImplementation((data) => { return Promise.resolve(orders.testOrder) }), - registerReturnReceived: jest.fn().mockImplementation(data => { + registerReturnReceived: jest.fn().mockImplementation((data) => { return Promise.resolve() }), - createFromCart: jest.fn().mockImplementation(data => { + createFromCart: jest.fn().mockImplementation((data) => { return Promise.resolve(orders.testOrder) }), - update: jest.fn().mockImplementation(data => { + update: jest.fn().mockImplementation((data) => { if (data === IdMap.getId("test-order")) { return Promise.resolve(orders.testOrder) } @@ -159,7 +159,7 @@ export const OrderServiceMock = { } return Promise.resolve(undefined) }), - retrieve: jest.fn().mockImplementation(orderId => { + retrieve: jest.fn().mockImplementation((orderId) => { if (orderId === IdMap.getId("test-order")) { return Promise.resolve(orders.testOrder) } @@ -168,14 +168,14 @@ export const OrderServiceMock = { } return Promise.resolve(undefined) }), - retrieveByCartId: jest.fn().mockImplementation(cartId => { + retrieveByCartId: jest.fn().mockImplementation((cartId) => { return Promise.resolve({ id: IdMap.getId("test-order") }) }), - decorate: jest.fn().mockImplementation(order => { + decorate: jest.fn().mockImplementation((order) => { order.decorated = true return order }), - cancel: jest.fn().mockImplementation(order => { + cancel: jest.fn().mockImplementation((order) => { if (order === IdMap.getId("test-order")) { orders.testOrder.status = "cancelled" return Promise.resolve(orders.testOrder) @@ -183,37 +183,40 @@ export const OrderServiceMock = { return Promise.resolve(undefined) }), - cancelFulfillment: jest.fn().mockImplementation(f => { + cancelFulfillment: jest.fn().mockImplementation((f) => { return Promise.resolve({ f }) }), - archive: jest.fn().mockImplementation(order => { + archive: jest.fn().mockImplementation((order) => { if (order === IdMap.getId("processed-order")) { orders.processedOrder.status = "archived" return Promise.resolve(orders.processedOrder) } return Promise.resolve(undefined) }), - createFulfillment: jest.fn().mockImplementation(order => { + createFulfillment: jest.fn().mockImplementation((order) => { if (order === IdMap.getId("test-order")) { orders.testOrder.fulfillment_status = "fulfilled" return Promise.resolve(orders.testOrder) } return Promise.resolve(undefined) }), - capturePayment: jest.fn().mockImplementation(order => { + capturePayment: jest.fn().mockImplementation((order) => { if (order === IdMap.getId("test-order")) { orders.testOrder.payment_status = "captured" return Promise.resolve(orders.testOrder) } return Promise.resolve(undefined) }), - receiveReturn: jest.fn().mockImplementation(order => { + receiveReturn: jest.fn().mockImplementation((order) => { if (order === IdMap.getId("test-order")) { return Promise.resolve(orders.testOrder) } return Promise.resolve(undefined) }), + list: jest.fn().mockImplementation(() => { + return Promise.resolve([orders.testOrder]) + }), } const mock = jest.fn().mockImplementation(() => { diff --git a/packages/medusa/src/services/__mocks__/search.js b/packages/medusa/src/services/__mocks__/search.js new file mode 100644 index 0000000000..bf1fff131f --- /dev/null +++ b/packages/medusa/src/services/__mocks__/search.js @@ -0,0 +1,9 @@ +export const SearchServiceMock = { + search: jest.fn(() => Promise.resolve([])), +} + +const mock = jest.fn().mockImplementation(() => { + return SearchServiceMock +}) + +export default mock diff --git a/packages/medusa/src/services/__tests__/cart.js b/packages/medusa/src/services/__tests__/cart.js index b6fab2f204..536e5d88e1 100644 --- a/packages/medusa/src/services/__tests__/cart.js +++ b/packages/medusa/src/services/__tests__/cart.js @@ -1344,7 +1344,7 @@ describe("CartService", () => { expect(() => { cartService.findCustomShippingOption(cartCSO, "some-other-so") - }).toThrow(MedusaError) + }).toThrow(Error) }) }) diff --git a/packages/medusa/src/services/__tests__/product-variant.js b/packages/medusa/src/services/__tests__/product-variant.js index fb3b9a8429..c3cf646917 100644 --- a/packages/medusa/src/services/__tests__/product-variant.js +++ b/packages/medusa/src/services/__tests__/product-variant.js @@ -227,45 +227,6 @@ describe("ProductVariantService", () => { }) }) - describe("publishVariant", () => { - const productVariantRepository = MockRepository({ - findOne: (query) => Promise.resolve({ id: IdMap.getId("ironman") }), - }) - - const productVariantService = new ProductVariantService({ - manager: MockManager, - eventBusService, - productVariantRepository, - }) - - beforeEach(async () => { - jest.clearAllMocks() - }) - - it("sucessfully publishes a product", async () => { - const result = await productVariantService.publish(IdMap.getId("ironman")) - - expect(eventBusService.emit).toHaveBeenCalledTimes(1) - expect(eventBusService.emit).toHaveBeenCalledWith( - "product-variant.updated", - { - id: IdMap.getId("ironman"), - } - ) - - expect(productVariantRepository.save).toHaveBeenCalledTimes(1) - expect(productVariantRepository.save).toHaveBeenCalledWith({ - id: IdMap.getId("ironman"), - published: true, - }) - - expect(result).toEqual({ - id: IdMap.getId("ironman"), - published: true, - }) - }) - }) - describe("update", () => { const productVariantRepository = MockRepository({ findOne: (query) => Promise.resolve({ id: IdMap.getId("ironman") }), diff --git a/packages/medusa/src/services/auth.js b/packages/medusa/src/services/auth.ts similarity index 62% rename from packages/medusa/src/services/auth.js rename to packages/medusa/src/services/auth.ts index 364524843d..c573edb378 100644 --- a/packages/medusa/src/services/auth.js +++ b/packages/medusa/src/services/auth.ts @@ -1,5 +1,8 @@ import Scrypt from "scrypt-kdf" import { BaseService } from "medusa-interfaces" +import { AuthenticateResult } from "../types/auth" +import { User } from "../models/user" +import { Customer } from "../models/customer" /** * Can authenticate a user based on email password combination @@ -22,7 +25,7 @@ class AuthService extends BaseService { * @param {string} hash - the hash to compare against * @return {bool} the result of the comparison */ - async comparePassword_(password, hash) { + async comparePassword_(password: string, hash: string): Promise { const buf = Buffer.from(hash, "base64") return Scrypt.verify(buf, password) } @@ -30,19 +33,15 @@ class AuthService extends BaseService { /** * Authenticates a given user with an API token * @param {string} token - the api_token of the user to authenticate - * @return {{ - * success: (bool), - * user: (object | undefined), - * error: (string | undefined) - * }} + * @return {AuthenticateResult} * success: whether authentication succeeded * user: the user document if authentication succeded * error: a string with the error message */ - async authenticateAPIToken(token) { + async authenticateAPIToken(token: string): Promise { if (process.env.NODE_ENV === "development") { try { - const user = await this.userService_.retrieve(token) + const user: User = await this.userService_.retrieve(token) return { success: true, user, @@ -53,7 +52,7 @@ class AuthService extends BaseService { } try { - const user = await this.userService_.retrieveByApiToken(token) + const user: User = await this.userService_.retrieveByApiToken(token) return { success: true, user, @@ -71,16 +70,22 @@ class AuthService extends BaseService { * scrypt to match password with hashed value. * @param {string} email - the email of the user * @param {string} password - the password of the user - * @return {{ success: (bool), user: (object | undefined) }} + * @return {AuthenticateResult} * success: whether authentication succeeded * user: the user document if authentication succeded * error: a string with the error message */ - async authenticate(email, password) { + async authenticate( + email: string, + password: string + ): Promise { try { - const userPasswordHash = await this.userService_.retrieveByEmail(email, { - select: ["password_hash"], - }) + const userPasswordHash: User = await this.userService_.retrieveByEmail( + email, + { + select: ["password_hash"], + } + ) const passwordsMatch = await this.comparePassword_( password, @@ -89,22 +94,19 @@ class AuthService extends BaseService { if (passwordsMatch) { const user = await this.userService_.retrieveByEmail(email) + return { success: true, - user, - } - } else { - return { - success: false, - error: "Invalid email or password", + user: user, } } } catch (error) { - console.log(error) - return { - success: false, - error: "Invalid email or password", - } + // ignore + } + + return { + success: false, + error: "Invalid email or password", } } @@ -113,48 +115,40 @@ class AuthService extends BaseService { * scrypt to match password with hashed value. * @param {string} email - the email of the user * @param {string} password - the password of the user - * @return {{ success: (bool), user: (object | undefined) }} + * @return {{ success: (bool), customer: (object | undefined) }} * success: whether authentication succeeded * user: the user document if authentication succeded * error: a string with the error message */ - async authenticateCustomer(email, password) { + async authenticateCustomer( + email: string, + password: string + ): Promise { try { - const customerPasswordHash = await this.customerService_.retrieveByEmail( - email, - { + const customerPasswordHash: Customer = + await this.customerService_.retrieveByEmail(email, { select: ["password_hash"], - } - ) - if (!customerPasswordHash.password_hash) { - return { - success: false, - error: "Invalid email or password", - } - } + }) + if (customerPasswordHash.password_hash) { + const passwordsMatch = await this.comparePassword_( + password, + customerPasswordHash.password_hash + ) - const passwordsMatch = await this.comparePassword_( - password, - customerPasswordHash.password_hash - ) - - if (passwordsMatch) { - const customer = await this.customerService_.retrieveByEmail(email) - return { - success: true, - customer, - } - } else { - return { - success: false, - error: "Invalid email or password", + if (passwordsMatch) { + const customer = await this.customerService_.retrieveByEmail(email) + return { + success: true, + customer, + } } } } catch (error) { - return { - success: false, - error: "Invalid email or password", - } + // ignore + } + return { + success: false, + error: "Invalid email or password", } } } diff --git a/packages/medusa/src/services/cart.js b/packages/medusa/src/services/cart.js index b7ed1cb7f0..f7347692c7 100644 --- a/packages/medusa/src/services/cart.js +++ b/packages/medusa/src/services/cart.js @@ -1,5 +1,5 @@ import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" +import { MedusaError, Validator } from "medusa-core-utils" import { BaseService } from "medusa-interfaces" /* Provides layer to manipulate carts. @@ -172,7 +172,7 @@ class CartService extends BaseService { // relationSet.add("discounts.parent_discount.regions") relationSet.add("shipping_methods") relationSet.add("region") - relations = [...relationSet] + relations = Array.from(relationSet.values()) select = select.filter((v) => !totalFields.includes(v)) } diff --git a/packages/medusa/src/services/claim.js b/packages/medusa/src/services/claim.js index aef327f1b6..a2b42aaa3c 100644 --- a/packages/medusa/src/services/claim.js +++ b/packages/medusa/src/services/claim.js @@ -346,7 +346,13 @@ class ClaimService extends BaseService { return result }) } - + /** + * @param {string} id - the object containing all data required to create a claim + * @param {Object} config - config object + * @param {Object | undefined} config.metadata - config metadata + * @param {boolean|undefined} config.no_notification - config no notification + * @return {Claim} created claim + */ createFulfillment( id, config = { diff --git a/packages/medusa/src/services/customer.js b/packages/medusa/src/services/customer.js index 8d36b07ce2..0cb4661c3f 100644 --- a/packages/medusa/src/services/customer.js +++ b/packages/medusa/src/services/customer.js @@ -1,8 +1,8 @@ import jwt from "jsonwebtoken" -import Scrypt from "scrypt-kdf" import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" +import { MedusaError, Validator } from "medusa-core-utils" import { BaseService } from "medusa-interfaces" +import Scrypt from "scrypt-kdf" import { Brackets, ILike } from "typeorm" /** @@ -168,6 +168,11 @@ class CustomerService extends BaseService { return customerRepo.find(query) } + /** + * @param {Object} selector - the query object for find + * @param {FindConfig} config - the config object containing query settings + * @return {Promise} the result of the find operation + */ async listAndCount( selector, config = { relations: [], skip: 0, take: 50, order: { created_at: "DESC" } } @@ -398,7 +403,9 @@ class CustomerService extends BaseService { if ("billing_address_id" in update || "billing_address" in update) { const address = billing_address_id || billing_address - await this.updateBillingAddress_(customer, address, addrRepo) + if (typeof address !== "undefined") { + await this.updateBillingAddress_(customer, address, addrRepo) + } } for (const [key, value] of Object.entries(rest)) { diff --git a/packages/medusa/src/services/discount.js b/packages/medusa/src/services/discount.js index a280a1b638..f28b0a5a1e 100644 --- a/packages/medusa/src/services/discount.js +++ b/packages/medusa/src/services/discount.js @@ -312,8 +312,10 @@ class DiscountService extends BaseService { } } - for (const [key, value] of Object.entries(rest)) { - discount[key] = value + for (const key of Object.keys(rest).filter( + (k) => rest[k] !== undefined + )) { + discount[key] = rest[key] } discount.code = discount.code.toUpperCase() diff --git a/packages/medusa/src/services/event-bus.js b/packages/medusa/src/services/event-bus.js index b2771c5640..d49de20ecc 100644 --- a/packages/medusa/src/services/event-bus.js +++ b/packages/medusa/src/services/event-bus.js @@ -216,9 +216,6 @@ class EventBusService { /** * Handles incoming jobs. * @param {Object} job The job object - * @param {string} job.eventName The name of the event to process - * @param {any} job.data Data to send to the subscriber - * * @return {Promise} resolves to the results of the subscriber calls. */ worker_ = (job) => { @@ -245,6 +242,11 @@ class EventBusService { ) } + /** + * Handles incoming jobs. + * @param {Object} job The job object + * @return {Promise} resolves to the results of the subscriber calls. + */ cronWorker_ = (job) => { const { eventName, data } = job.data const observers = this.cronHandlers_[eventName] || [] diff --git a/packages/medusa/src/services/index.ts b/packages/medusa/src/services/index.ts new file mode 100644 index 0000000000..067c3d34be --- /dev/null +++ b/packages/medusa/src/services/index.ts @@ -0,0 +1,37 @@ +export { default as AuthService } from "./auth" +export { default as CartService } from "./cart" +export { default as ClaimService } from "./claim" +export { default as ClaimItemService } from "./claim-item" +export { default as CustomShippingOptionService } from "./custom-shipping-option" +export { default as CustomerService } from "./customer" +export { default as DiscountService } from "./discount" +export { default as DraftOrderService } from "./draft-order" +export { default as EventBusService } from "./event-bus" +export { default as FulfillmentService } from "./fulfillment" +export { default as FulfillmentProviderService } from "./fulfillment-provider" +export { default as GiftCardService } from "./gift-card" +export { default as IdempotencyKeyService } from "./idempotency-key" +export { default as InventoryService } from "./inventory" +export { default as LineItemService } from "./line-item" +export { default as MiddlewareService } from "./middleware" +export { default as NoteService } from "./note" +export { default as NotificationService } from "./notification" +export { default as OauthService } from "./oauth" +export { default as OrderService } from "./order" +export { default as PaymentProviderService } from "./payment-provider" +export { default as ProductService } from "./product" +export { default as ProductCollectionService } from "./product-collection" +export { default as ProductVariantService } from "./product-variant" +export { default as QueryBuilderService } from "./query-builder" +export { default as RegionService } from "./region" +export { default as ReturnService } from "./return" +export { default as ReturnReasonService } from "./return-reason" +export { default as SearchService } from "./search" +export { default as ShippingOptionService } from "./shipping-option" +export { default as ShippingProfileService } from "./shipping-profile" +export { default as StoreService } from "./store" +export { default as SwapService } from "./swap" +export { default as SystemPaymentProviderService } from "./system-payment-provider" +export { default as TotalsService } from "./totals" +export { default as TransactionService } from "./transaction" +export { default as UserService } from "./user" diff --git a/packages/medusa/src/services/note.js b/packages/medusa/src/services/note.js index 65d11bff2a..b5cc986aeb 100644 --- a/packages/medusa/src/services/note.js +++ b/packages/medusa/src/services/note.js @@ -9,7 +9,7 @@ class NoteService extends BaseService { DELETED: "note.deleted", } - constructor({ manager, noteRepository, eventBusService, userService }) { + constructor({ manager, noteRepository, eventBusService }) { super() /** @private @const {EntityManager} */ @@ -35,7 +35,7 @@ class NoteService extends BaseService { const cloned = new NoteService({ manager: transactionManager, noteRepository: this.noteRepository_, - eventBus: this.eventBus_, + eventBusService: this.eventBus_, }) cloned.transactionManager_ = transactionManager @@ -44,9 +44,9 @@ class NoteService extends BaseService { /** * Retrieves a specific note. - * @param {*} id - the id of the note to retrieve. - * @param {*} config - any options needed to query for the result. - * @return {Promise} which resolves to the requested note. + * @param {string} id - the id of the note to retrieve. + * @param {object} config - any options needed to query for the result. + * @return {Promise} which resolves to the requested note. */ async retrieve(id, config = {}) { const noteRepo = this.manager_.getCustomRepository(this.noteRepository_) @@ -69,6 +69,9 @@ class NoteService extends BaseService { /** Fetches all notes related to the given selector * @param {Object} selector - the query object for find * @param {Object} config - the configuration used to find the objects. contains relations, skip, and take. + * @param {string[]} config.relations - Which relations to include in the resulting list of Notes. + * @param {number} config.take - How many Notes to take in the resulting list of Notes. + * @param {number} config.skip - How many Notes to skip in the resulting list of Notes. * @return {Promise} notes related to the given search. */ async list( @@ -88,7 +91,7 @@ class NoteService extends BaseService { /** * Creates a note associated with a given author - * @param {object} data - the note to create + * @param {CreateNoteInput} data - the note to create * @param {*} config - any configurations if needed, including meta data * @return {Promise} resolves to the creation result */ diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index acb34b868b..84fb5bf762 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -211,7 +211,7 @@ class OrderService extends BaseService { const orderRepo = this.manager_.getCustomRepository(this.orderRepository_) let q - if ("q" in selector) { + if (selector.q) { q = selector.q delete selector.q } @@ -619,7 +619,7 @@ class OrderService extends BaseService { * have been created in regards to the shipment. * @param {string} orderId - the id of the order that has been shipped * @param {string} fulfillmentId - the fulfillment that has now been shipped - * @param {TrackingLink[]} trackingLinks - array of tracking numebers + * @param {TrackingLink[] | undefined} trackingLinks - array of tracking numebers * associated with the shipment * @param {Object} config - the config of the order that has been shipped * @param {Dictionary} metadata - optional metadata to add to @@ -886,23 +886,23 @@ class OrderService extends BaseService { ...rest } = update - if ("metadata" in update) { + if (update.metadata) { order.metadata = this.setMetadata_(order, metadata) } - if ("shipping_address" in update) { + if (update.shipping_address) { await this.updateShippingAddress_(order, shipping_address) } - if ("billing_address" in update) { + if (update.billing_address) { await this.updateBillingAddress_(order, billing_address) } - if ("no_notification" in update) { + if (update.no_notification) { order.no_notification = no_notification } - if ("items" in update) { + if (update.items) { for (const item of items) { await this.lineItemService_.withTransaction(manager).create({ ...item, @@ -1307,7 +1307,7 @@ class OrderService extends BaseService { * @param {string} orderId - id of the order to refund. * @param {float} refundAmount - the amount to refund. * @param {string} reason - the reason to refund. - * @param {string} note - note for refund. + * @param {string | undefined} note - note for refund. * @param {Object} config - the config for refund. * @return {Promise} the result of the refund operation. */ diff --git a/packages/medusa/src/services/product-variant.js b/packages/medusa/src/services/product-variant.ts similarity index 71% rename from packages/medusa/src/services/product-variant.js rename to packages/medusa/src/services/product-variant.ts index 3fc26dd65e..612a22bf89 100644 --- a/packages/medusa/src/services/product-variant.js +++ b/packages/medusa/src/services/product-variant.ts @@ -1,6 +1,23 @@ -import { BaseService } from "medusa-interfaces" -import { IsNull, ILike } from "typeorm" import { MedusaError } from "medusa-core-utils" +import { BaseService } from "medusa-interfaces" +import { EntityManager, ILike, IsNull, SelectQueryBuilder } from "typeorm" +import { MoneyAmount } from "../models/money-amount" +import { Product } from "../models/product" +import { ProductOptionValue } from "../models/product-option-value" +import { ProductVariant } from "../models/product-variant" +import { MoneyAmountRepository } from "../repositories/money-amount" +import { ProductRepository } from "../repositories/product" +import { ProductOptionValueRepository } from "../repositories/product-option-value" +import { ProductVariantRepository } from "../repositories/product-variant" +import EventBusService from "../services/event-bus" +import RegionService from "../services/region" +import { FindConfig } from "../types/common" +import { + CreateProductVariantInput, + FilterableProductVariantProps, + ProductVariantPrice, + UpdateProductVariantInput, +} from "../types/product-variant" /** * Provides layer to manipulate product variants. @@ -13,6 +30,14 @@ class ProductVariantService extends BaseService { DELETED: "product-variant.deleted", } + private manager_: EntityManager + private productVariantRepository_: typeof ProductVariantRepository + private productRepository_: typeof ProductRepository + private eventBus_: EventBusService + private regionService_: RegionService + private moneyAmountRepository_: typeof MoneyAmountRepository + private productOptionValueRepository_: typeof ProductOptionValueRepository + constructor({ manager, productVariantRepository, @@ -44,7 +69,7 @@ class ProductVariantService extends BaseService { this.productOptionValueRepository_ = productOptionValueRepository } - withTransaction(transactionManager) { + withTransaction(transactionManager: EntityManager): ProductVariantService { if (!transactionManager) { return this } @@ -67,10 +92,13 @@ class ProductVariantService extends BaseService { /** * Gets a product variant by id. * @param {string} variantId - the id of the product to get. - * @param {Object} config - query config object for variant retrieval. + * @param {FindConfig} config - query config object for variant retrieval. * @return {Promise} the product document. */ - async retrieve(variantId, config = {}) { + async retrieve( + variantId: string, + config: FindConfig = {} + ): Promise { const variantRepo = this.manager_.getCustomRepository( this.productVariantRepository_ ) @@ -91,10 +119,13 @@ class ProductVariantService extends BaseService { /** * Gets a product variant by id. * @param {string} sku - The unique stock keeping unit used to identify the product variant. - * @param {Object} config - query config object for variant retrieval. + * @param {FindConfig} config - query config object for variant retrieval. * @return {Promise} the product document. */ - async retrieveBySKU(sku, config = {}) { + async retrieveBySKU( + sku: string, + config: FindConfig = {} + ): Promise { const variantRepo = this.manager_.getCustomRepository( this.productVariantRepository_ ) @@ -118,8 +149,11 @@ class ProductVariantService extends BaseService { * @param {object} variant - the variant to create * @return {Promise} resolves to the creation result. */ - async create(productOrProductId, variant) { - return this.atomicPhase_(async (manager) => { + async create( + productOrProductId: string | Product, + variant: CreateProductVariantInput + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const productRepo = manager.getCustomRepository(this.productRepository_) const variantRepo = manager.getCustomRepository( this.productVariantRepository_ @@ -127,13 +161,13 @@ class ProductVariantService extends BaseService { const { prices, ...rest } = variant - let product = productOrProductId + let product = productOrProductId as Product if (typeof product === `string`) { - product = await productRepo.findOne({ + product = (await productRepo.findOne({ where: { id: productOrProductId }, relations: ["variants", "variants.options", "options"], - }) + })) as Product } else if (!product.id) { throw new MedusaError( MedusaError.Types.INVALID_DATA, @@ -157,14 +191,13 @@ class ProductVariantService extends BaseService { } }) - let variantExists = undefined - variantExists = product.variants.find((v) => { + const variantExists = product.variants.find((v) => { return v.options.every((option) => { const variantOption = variant.options.find( (o) => option.option_id === o.option_id ) - return option.value === variantOption.value + return option.value === variantOption?.value }) }) @@ -184,19 +217,18 @@ class ProductVariantService extends BaseService { product_id: product.id, } - const productVariant = await variantRepo.create(toCreate) + const productVariant = variantRepo.create(toCreate) const result = await variantRepo.save(productVariant) if (prices) { for (const price of prices) { if (price.region_id) { - await this.setRegionPrice( - result.id, - price.region_id, - price.amount, - price.sale_amount || undefined - ) + await this.setRegionPrice(result.id, { + amount: price.amount, + region_id: price.region_id, + sale_amount: price.sale_amount, + }) } else { await this.setCurrencyPrice(result.id, price) } @@ -214,34 +246,6 @@ class ProductVariantService extends BaseService { }) } - /** - * Publishes an existing variant. - * @param {string} variantId - id of the variant to publish. - * @return {Promise} - */ - async publish(variantId) { - return this.atomicPhase_(async (manager) => { - const variantRepo = manager.getCustomRepository( - this.productVariantRepository_ - ) - - const variant = await this.retrieve(variantId) - - variant.published = true - - const result = await variantRepo.save(variant) - - await this.eventBus_ - .withTransaction(manager) - .emit(ProductVariantService.Events.UPDATED, { - id: result.id, - product_id: result.product_id, - }) - - return result - }) - } - /** * Updates a variant. * Price updates should use dedicated methods. @@ -250,15 +254,18 @@ class ProductVariantService extends BaseService { * @param {object} update - an object with the update values. * @return {Promise} resolves to the update result. */ - async update(variantOrVariantId, update) { - return this.atomicPhase_(async (manager) => { + async update( + variantOrVariantId: string | Partial, + update: UpdateProductVariantInput + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const variantRepo = manager.getCustomRepository( this.productVariantRepository_ ) - let variant = variantOrVariantId + let variant = variantOrVariantId as ProductVariant if (typeof variant === `string`) { - variant = await this.retrieve(variantOrVariantId) + variant = await this.retrieve(variantOrVariantId as string) } else if (!variant.id) { throw new MedusaError( MedusaError.Types.INVALID_DATA, @@ -271,12 +278,11 @@ class ProductVariantService extends BaseService { if (prices) { for (const price of prices) { if (price.region_id) { - await this.setRegionPrice( - variant.id, - price.region_id, - price.amount, - price.sale_amount || undefined - ) + await this.setRegionPrice(variant.id, { + region_id: price.region_id, + amount: price.amount, + sale_amount: price.sale_amount || undefined, + }) } else { await this.setCurrencyPrice(variant.id, price) } @@ -321,28 +327,30 @@ class ProductVariantService extends BaseService { /** * Sets the default price for the given currency. * @param {string} variantId - the id of the variant to set prices for - * @param {string} price - the price for the variant + * @param {ProductVariantPrice} price - the price for the variant * @return {Promise} the result of the update operation */ - async setCurrencyPrice(variantId, price) { - return this.atomicPhase_(async (manager) => { + async setCurrencyPrice( + variantId: string, + price: ProductVariantPrice + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const moneyAmountRepo = manager.getCustomRepository( this.moneyAmountRepository_ ) - let moneyAmount - moneyAmount = await moneyAmountRepo.findOne({ + let moneyAmount = await moneyAmountRepo.findOne({ where: { - currency_code: price.currency_code.toLowerCase(), + currency_code: price.currency_code?.toLowerCase(), variant_id: variantId, region_id: IsNull(), }, }) if (!moneyAmount) { - moneyAmount = await moneyAmountRepo.create({ + moneyAmount = moneyAmountRepo.create({ ...price, - currency_code: price.currency_code.toLowerCase(), + currency_code: price.currency_code?.toLowerCase(), variant_id: variantId, }) } else { @@ -350,8 +358,7 @@ class ProductVariantService extends BaseService { moneyAmount.sale_amount = price.sale_amount } - const result = await moneyAmountRepo.save(moneyAmount) - return result + return await moneyAmountRepo.save(moneyAmount) }) } @@ -363,8 +370,8 @@ class ProductVariantService extends BaseService { * @param {string} regionId - the id of the region to get price for * @return {number} the price specific to the region */ - async getRegionPrice(variantId, regionId) { - return this.atomicPhase_(async (manager) => { + async getRegionPrice(variantId: string, regionId: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const moneyAmountRepo = manager.getCustomRepository( this.moneyAmountRepository_ ) @@ -397,9 +404,9 @@ class ProductVariantService extends BaseService { // Always return sale price, if present if (moneyAmount.sale_amount) { return moneyAmount.sale_amount - } else { - return moneyAmount.amount } + + return moneyAmount.amount }) } @@ -409,14 +416,16 @@ class ProductVariantService extends BaseService { * @param {string} price - the price for the variant. * @return {Promise} the result of the update operation */ - async setRegionPrice(variantId, price) { - return this.atomicPhase_(async (manager) => { + async setRegionPrice( + variantId: string, + price: ProductVariantPrice + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const moneyAmountRepo = manager.getCustomRepository( this.moneyAmountRepository_ ) - let moneyAmount - moneyAmount = await moneyAmountRepo.findOne({ + let moneyAmount = await moneyAmountRepo.findOne({ where: { variant_id: variantId, region_id: price.region_id, @@ -424,7 +433,7 @@ class ProductVariantService extends BaseService { }) if (!moneyAmount) { - moneyAmount = await moneyAmountRepo.create({ + moneyAmount = moneyAmountRepo.create({ ...price, variant_id: variantId, }) @@ -443,11 +452,15 @@ class ProductVariantService extends BaseService { * Option value must be of type string or number. * @param {string} variantId - the variant to decorate. * @param {string} optionId - the option from product. - * @param {string | number} optionValue - option value to add. + * @param {string} optionValue - option value to add. * @return {Promise} the result of the update operation. */ - async updateOptionValue(variantId, optionId, optionValue) { - return this.atomicPhase_(async (manager) => { + async updateOptionValue( + variantId: string, + optionId: string, + optionValue: string + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const productOptionValueRepo = manager.getCustomRepository( this.productOptionValueRepository_ ) @@ -465,8 +478,7 @@ class ProductVariantService extends BaseService { productOptionValue.value = optionValue - const result = await productOptionValueRepo.save(productOptionValue) - return result + return await productOptionValueRepo.save(productOptionValue) }) } @@ -478,23 +490,26 @@ class ProductVariantService extends BaseService { * Option value must be of type string or number. * @param {string} variantId - the variant to decorate. * @param {string} optionId - the option from product. - * @param {string | number} optionValue - option value to add. + * @param {string} optionValue - option value to add. * @return {Promise} the result of the update operation. */ - async addOptionValue(variantId, optionId, optionValue) { - return this.atomicPhase_(async (manager) => { + async addOptionValue( + variantId: string, + optionId: string, + optionValue: string + ): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const productOptionValueRepo = manager.getCustomRepository( this.productOptionValueRepository_ ) - const productOptionValue = await productOptionValueRepo.create({ + const productOptionValue = productOptionValueRepo.create({ variant_id: variantId, option_id: optionId, value: optionValue, }) - const result = await productOptionValueRepo.save(productOptionValue) - return result + return await productOptionValueRepo.save(productOptionValue) }) } @@ -505,11 +520,10 @@ class ProductVariantService extends BaseService { * @param {string} optionId - the option from product. * @return {Promise} empty promise */ - async deleteOptionValue(variantId, optionId) { - return this.atomicPhase_(async (manager) => { - const productOptionValueRepo = manager.getCustomRepository( - this.productOptionValueRepository_ - ) + async deleteOptionValue(variantId: string, optionId: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { + const productOptionValueRepo: ProductOptionValueRepository = + manager.getCustomRepository(this.productOptionValueRepository_) const productOptionValue = await productOptionValueRepo.findOne({ where: { @@ -529,16 +543,19 @@ class ProductVariantService extends BaseService { } /** - * @param {Object} selector - the query object for find - * @param {Object} config - query config object for variant retrieval + * @param {FilterableProductVariantProps} selector - the query object for find + * @param {FindConfig} config - query config object for variant retrieval * @return {Promise} the result of the find operation */ - async list(selector = {}, config = { relations: [], skip: 0, take: 20 }) { + async list( + selector: FilterableProductVariantProps, + config: FindConfig = { relations: [], skip: 0, take: 20 } + ): Promise { const productVariantRepo = this.manager_.getCustomRepository( this.productVariantRepository_ ) - let q + let q: string | undefined if ("q" in selector) { q = selector.q delete selector.q @@ -559,7 +576,7 @@ class ProductVariantService extends BaseService { }, } - query.where = (qb) => { + query.where = (qb: SelectQueryBuilder): void => { qb.where(where).andWhere([ { sku: ILike(`%${q}%`) }, { title: ILike(`%${q}%`) }, @@ -568,7 +585,7 @@ class ProductVariantService extends BaseService { } } - return productVariantRepo.find(query) + return await productVariantRepo.find(query) } /** @@ -576,10 +593,10 @@ class ProductVariantService extends BaseService { * Will never fail due to delete being idempotent. * @param {string} variantId - the id of the variant to delete. Must be * castable as an ObjectId - * @return {Promise} empty promise + * @return {Promise} empty promise */ - async delete(variantId) { - return this.atomicPhase_(async (manager) => { + async delete(variantId: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const variantRepo = manager.getCustomRepository( this.productVariantRepository_ ) @@ -609,7 +626,7 @@ class ProductVariantService extends BaseService { * @param {Object} metadata - the metadata to set * @return {Object} updated metadata object */ - setMetadata_(variant, metadata) { + setMetadata_(variant: ProductVariant, metadata: object): object { const existing = variant.metadata || {} const newData = {} for (const [key, value] of Object.entries(metadata)) { diff --git a/packages/medusa/src/services/product.js b/packages/medusa/src/services/product.js index 61db228ca3..cadac38725 100644 --- a/packages/medusa/src/services/product.js +++ b/packages/medusa/src/services/product.js @@ -448,7 +448,9 @@ class ProductService extends BaseService { } for (const [key, value] of Object.entries(rest)) { - product[key] = value + if (typeof value !== `undefined`) { + product[key] = value + } } const result = await productRepo.save(product) diff --git a/packages/medusa/src/services/return.js b/packages/medusa/src/services/return.js index 21db63b2c9..1e9cfcd65d 100644 --- a/packages/medusa/src/services/return.js +++ b/packages/medusa/src/services/return.js @@ -1,5 +1,5 @@ -import { BaseService } from "medusa-interfaces" import { MedusaError } from "medusa-core-utils" +import { BaseService } from "medusa-interfaces" /** * Handles Returns @@ -496,8 +496,8 @@ class ReturnService extends BaseService { * allowMismatch argument to true, will process the return, ignoring any * mismatches. * @param {string} return_id - the orderId to return to - * @param {string[]} received_items - the items received after return. - * @param {number} refund_amount - the amount to return + * @param {Item[]} received_items - the items received after return. + * @param {number | undefined} refund_amount - the amount to return * @param {bool} allow_mismatch - whether to ignore return/received * product mismatch * @return {Promise} the result of the update operation diff --git a/packages/medusa/src/services/swap.js b/packages/medusa/src/services/swap.js index 5eed9a2c47..a8bbf8240d 100644 --- a/packages/medusa/src/services/swap.js +++ b/packages/medusa/src/services/swap.js @@ -292,7 +292,7 @@ class SwapService extends BaseService { * and an optional return shipping method. * @param {Order} order - the order to base the swap off. * @param {Array} returnItems - the items to return in the swap. - * @param {Array} additionalItems - the items to send to + * @param {Array | undefined} additionalItems - the items to send to * the customer. * @param {ReturnShipping?} returnShipping - an optional shipping method for * returning the returnItems. @@ -1052,7 +1052,7 @@ class SwapService extends BaseService { * @param {string} swapId - the id of the swap that has been shipped. * @param {string} fulfillmentId - the id of the specific fulfillment that * has been shipped - * @param {TrackingLink[]} trackingLinks - the tracking numbers associated + * @param {TrackingLink[] | undefined} trackingLinks - the tracking numbers associated * with the shipment * @param {object} config - optional configurations, includes optional metadata to attach to the shipment, and a noNotification flag. * @return {Promise} the updated swap with new fulfillments and status. diff --git a/packages/medusa/src/services/user.js b/packages/medusa/src/services/user.ts similarity index 75% rename from packages/medusa/src/services/user.js rename to packages/medusa/src/services/user.ts index 6a254f4dd2..81682a3c1d 100644 --- a/packages/medusa/src/services/user.js +++ b/packages/medusa/src/services/user.ts @@ -1,8 +1,23 @@ -import _ from "lodash" -import Scrypt from "scrypt-kdf" import jwt from "jsonwebtoken" -import { Validator, MedusaError } from "medusa-core-utils" +import { MedusaError, Validator } from "medusa-core-utils" import { BaseService } from "medusa-interfaces" +import Scrypt from "scrypt-kdf" +import { EntityManager } from "typeorm" +import { User } from "../models/user" +import { UserRepository } from "../repositories/user" +import { FindConfig } from "../types/common" +import { + CreateUserInput, + FilterableUserProps, + UpdateUserInput, +} from "../types/user" +import EventBusService from "./event-bus" + +type UserServiceProps = { + userRepository: typeof UserRepository + eventBusService: EventBusService + manager: EntityManager +} /** * Provides layer to manipulate users. @@ -13,7 +28,12 @@ class UserService extends BaseService { PASSWORD_RESET: "user.password_reset", } - constructor({ userRepository, eventBusService, manager }) { + private userRepository_: typeof UserRepository + private eventBus_: EventBusService + private manager_: EntityManager + private transactionManager_: EntityManager + + constructor({ userRepository, eventBusService, manager }: UserServiceProps) { super() /** @private @const {UserRepository} */ @@ -26,7 +46,7 @@ class UserService extends BaseService { this.manager_ = manager } - withTransaction(transactionManager) { + withTransaction(transactionManager: EntityManager): UserService { if (!transactionManager) { return this } @@ -47,7 +67,7 @@ class UserService extends BaseService { * @param {string} email - email to validate * @return {string} the validated email */ - validateEmail_(email) { + validateEmail_(email: string): string { const schema = Validator.string().email().required() const { value, error } = schema.validate(email) if (error) { @@ -61,10 +81,10 @@ class UserService extends BaseService { } /** - * @param {Object} selector - the query object for find + * @param {FilterableUserProps} selector - the query object for find * @return {Promise} the result of the find operation */ - async list(selector) { + async list(selector: FilterableUserProps): Promise { const userRepo = this.manager_.getCustomRepository(this.userRepository_) return userRepo.find({ where: selector }) } @@ -73,12 +93,11 @@ class UserService extends BaseService { * Gets a user by id. * Throws in case of DB Error and if user was not found. * @param {string} userId - the id of the user to get. - * @param {Object} config - query configs + * @param {FindConfig} config - query configs * @return {Promise} the user document. */ - async retrieve(userId, config = {}) { + async retrieve(userId: string, config: FindConfig = {}): Promise { const userRepo = this.manager_.getCustomRepository(this.userRepository_) - const validatedId = this.validateId_(userId) const query = this.buildQuery_({ id: validatedId }, config) @@ -101,7 +120,10 @@ class UserService extends BaseService { * @param {string[]} relations - relations to include with the user * @return {Promise} the user document. */ - async retrieveByApiToken(apiToken, relations = []) { + async retrieveByApiToken( + apiToken: string, + relations: string[] = [] + ): Promise { const userRepo = this.manager_.getCustomRepository(this.userRepository_) const user = await userRepo.findOne({ @@ -123,10 +145,13 @@ class UserService extends BaseService { * Gets a user by email. * Throws in case of DB Error and if user was not found. * @param {string} email - the email of the user to get. - * @param {Object} config - query config + * @param {FindConfig} config - query config * @return {Promise} the user document. */ - async retrieveByEmail(email, config = {}) { + async retrieveByEmail( + email: string, + config: FindConfig = {} + ): Promise { const userRepo = this.manager_.getCustomRepository(this.userRepository_) const query = this.buildQuery_({ email: email.toLowerCase() }, config) @@ -147,7 +172,7 @@ class UserService extends BaseService { * @param {string} password - the value to hash * @return {string} hashed password */ - async hashPassword_(password) { + async hashPassword_(password: string): Promise { const buf = await Scrypt.kdf(password, { logN: 1, r: 1, p: 1 }) return buf.toString("base64") } @@ -159,19 +184,23 @@ class UserService extends BaseService { * @param {string} password - user's password to hash * @return {Promise} the result of create */ - async create(user, password) { - return this.atomicPhase_(async (manager) => { + async create(user: CreateUserInput, password: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const userRepo = manager.getCustomRepository(this.userRepository_) + const createData = { ...user } as CreateUserInput & { + password_hash: string + } + const validatedEmail = this.validateEmail_(user.email) if (password) { const hashedPassword = await this.hashPassword_(password) - user.password_hash = hashedPassword + createData.password_hash = hashedPassword } - user.email = validatedEmail + createData.email = validatedEmail - const created = await userRepo.create(user) + const created = userRepo.create(createData) return userRepo.save(created) }) @@ -183,8 +212,8 @@ class UserService extends BaseService { * @param {object} update - the values to be updated on the user * @return {Promise} the result of create */ - async update(userId, update) { - return this.atomicPhase_(async (manager) => { + async update(userId: string, update: UpdateUserInput): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const userRepo = manager.getCustomRepository(this.userRepository_) const validatedId = this.validateId_(userId) @@ -211,7 +240,7 @@ class UserService extends BaseService { } for (const [key, value] of Object.entries(rest)) { - user[key] = value + user[key as keyof User] = value } return userRepo.save(user) @@ -224,8 +253,8 @@ class UserService extends BaseService { * castable as an ObjectId * @return {Promise} the result of the delete operation. */ - async delete(userId) { - return this.atomicPhase_(async (manager) => { + async delete(userId: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const userRepo = manager.getCustomRepository(this.userRepository_) // Should not fail, if user does not exist, since delete is idempotent @@ -249,8 +278,8 @@ class UserService extends BaseService { * @param {string} password - the old password to set * @return {Promise} the result of the update operation */ - async setPassword_(userId, password) { - return this.atomicPhase_(async (manager) => { + async setPassword_(userId: string, password: string): Promise { + return this.atomicPhase_(async (manager: EntityManager) => { const userRepo = manager.getCustomRepository(this.userRepository_) const user = await this.retrieve(userId) @@ -278,7 +307,7 @@ class UserService extends BaseService { * @param {string} userId - the id of the user to reset password for * @return {string} the generated JSON web token */ - async generateResetPasswordToken(userId) { + async generateResetPasswordToken(userId: string): Promise { const user = await this.retrieve(userId) const secret = user.password_hash const expiry = Math.floor(Date.now() / 1000) + 60 * 15 @@ -291,20 +320,6 @@ class UserService extends BaseService { }) return token } - - /** - * Decorates a user. - * @param {User} user - the cart to decorate. - * @param {string[]} fields - the fields to include. - * @param {string[]} expandFields - fields to expand. - * @return {User} return the decorated user. - */ - async decorate(user, fields, expandFields = []) { - const requiredFields = ["id", "metadata"] - const decorated = _.pick(user, fields.concat(requiredFields)) - const final = await this.runDecorators_(decorated) - return final - } } export default UserService diff --git a/packages/medusa/src/types/auth.ts b/packages/medusa/src/types/auth.ts new file mode 100644 index 0000000000..049944a1e6 --- /dev/null +++ b/packages/medusa/src/types/auth.ts @@ -0,0 +1,8 @@ +import { Customer, User } from ".." + +export type AuthenticateResult = { + success: boolean + user?: User + customer?: Customer + error?: string +} diff --git a/packages/medusa/src/types/common.ts b/packages/medusa/src/types/common.ts new file mode 100644 index 0000000000..1adddd5a12 --- /dev/null +++ b/packages/medusa/src/types/common.ts @@ -0,0 +1,161 @@ +import { Transform } from "class-transformer" +import { transformDate } from "../utils/validators/date-transform" +import { Type } from "class-transformer" +import { IsDate, IsNumber, IsOptional, IsString } from "class-validator" +import "reflect-metadata" + +export type PartialPick = { + [P in K]?: T[P] +} + +export interface FindConfig { + select?: (keyof Entity)[] + skip?: number + take?: number + relations?: string[] + order?: "ASC" | "DESC" +} + +export type PaginatedResponse = { limit: number; offset: number; count: number } + +export type DeleteResponse = { + id: string + object: string + deleted: boolean +} + +export class DateComparisonOperator { + @IsOptional() + @IsDate() + @Transform(transformDate) + lt?: Date + + @IsOptional() + @IsDate() + @Transform(transformDate) + gt?: Date + + @IsOptional() + @IsDate() + @Transform(transformDate) + gte?: Date + + @IsOptional() + @IsDate() + @Transform(transformDate) + lte?: Date +} + +export class StringComparisonOperator { + @IsString() + @IsOptional() + lt?: string + + @IsString() + @IsOptional() + gt?: string + + @IsString() + @IsOptional() + gte?: string + + @IsString() + @IsOptional() + lte?: string +} + +export class NumericalComparisonOperator { + @IsNumber() + @IsOptional() + @Type(() => Number) + lt?: number + + @IsNumber() + @IsOptional() + @Type(() => Number) + gt?: number + + @IsNumber() + @IsOptional() + @Type(() => Number) + gte?: number + + @IsNumber() + @IsOptional() + @Type(() => Number) + lte?: number +} + +export class AddressPayload { + @IsOptional() + @IsString() + first_name: string + + @IsOptional() + @IsString() + last_name: string + + @IsOptional() + @IsString() + phone: string + + @IsOptional() + metadata: object + + @IsOptional() + @IsString() + company: string + + @IsOptional() + @IsString() + address_1: string + + @IsOptional() + @IsString() + address_2: string + + @IsOptional() + @IsString() + city: string + + @IsOptional() + @IsString() + country_code: string + + @IsOptional() + @IsString() + province: string + + @IsOptional() + @IsString() + postal_code: string +} + +export class AddressCreatePayload { + @IsString() + first_name: string + @IsString() + last_name: string + @IsOptional() + @IsString() + phone: string + @IsOptional() + metadata: object + @IsOptional() + @IsString() + company: string + @IsString() + address_1: string + @IsOptional() + @IsString() + address_2: string + @IsString() + city: string + @IsString() + country_code: string + @IsOptional() + @IsString() + province: string + @IsString() + postal_code: string +} diff --git a/packages/medusa/src/types/customers.ts b/packages/medusa/src/types/customers.ts new file mode 100644 index 0000000000..965bfd15da --- /dev/null +++ b/packages/medusa/src/types/customers.ts @@ -0,0 +1,7 @@ +import { IsOptional, IsString } from "class-validator" + +export class AdminListCustomerSelector { + @IsString() + @IsOptional() + q?: string +} diff --git a/packages/medusa/src/types/discount.ts b/packages/medusa/src/types/discount.ts new file mode 100644 index 0000000000..0fabd32063 --- /dev/null +++ b/packages/medusa/src/types/discount.ts @@ -0,0 +1,9 @@ +export type QuerySelector = { + q?: string +} + +export class ListSelector { + q?: string + is_dynamic?: boolean + is_disabled?: boolean +} diff --git a/packages/medusa/src/types/draft-orders.ts b/packages/medusa/src/types/draft-orders.ts new file mode 100644 index 0000000000..76b500b14a --- /dev/null +++ b/packages/medusa/src/types/draft-orders.ts @@ -0,0 +1 @@ +export type DraftOrderListSelector = { q?: string } diff --git a/packages/medusa/src/types/note.ts b/packages/medusa/src/types/note.ts new file mode 100644 index 0000000000..3f50496a97 --- /dev/null +++ b/packages/medusa/src/types/note.ts @@ -0,0 +1,26 @@ +import { Note } from "../models/note" +import { User } from "../models/user" +import { PartialPick } from "./common" + +export interface CreateNoteInput { + value: string + resource_type: string + resource_id: string + author_id?: string + author?: User + metadata?: JSON +} + +export type selector = { + resource_id?: string +} + +export type FilterableUserProps = PartialPick< + Note, + | "value" + | "resource_type" + | "resource_id" + | "author_id" + | "updated_at" + | "deleted_at" +> diff --git a/packages/medusa/src/types/orders.ts b/packages/medusa/src/types/orders.ts new file mode 100644 index 0000000000..728d714a0f --- /dev/null +++ b/packages/medusa/src/types/orders.ts @@ -0,0 +1,128 @@ +import { Type } from "class-transformer" +import { + IsString, + IsOptional, + IsArray, + IsEnum, + ValidateNested, + IsNotEmpty, + IsInt, +} from "class-validator" +import { DateComparisonOperator } from "./common" + +enum OrderStatus { + pending = "pending", + completed = "completed", + archived = "archived", + canceled = "canceled", + requires_action = "requires_action", +} + +enum FulfillmentStatus { + not_fulfilled = "not_fulfilled", + fulfilled = "fulfilled", + partially_fulfilled = "partially_fulfilled", + shipped = "shipped", + partially_shipped = "partially_shipped", + canceled = "canceled", + returned = "returned", + partially_returned = "partially_returned", + requires_action = "requires_action", +} + +enum PaymentStatus { + captured = "captured", + awaiting = "awaiting", + not_paid = "not_paid", + refunded = "refunded", + partially_refunded = "partially_refunded", + canceled = "canceled", + requires_action = "requires_action", +} + +export class AdminListOrdersSelector { + @IsString() + @IsOptional() + q?: string + + @IsString() + @IsOptional() + id?: string + + @IsArray() + @IsEnum(OrderStatus, { each: true }) + @IsOptional() + status?: string[] + + @IsArray() + @IsEnum(FulfillmentStatus, { each: true }) + @IsOptional() + fulfillment_status?: string[] + + @IsArray() + @IsEnum(PaymentStatus) + @IsOptional() + payment_status?: string[] + + @IsString() + @IsOptional() + display_id?: string + + @IsString() + @IsOptional() + cart_id?: string + + @IsString() + @IsOptional() + customer_id?: string + + @IsString() + @IsOptional() + email?: string + + @IsString() + @IsOptional() + region_id?: string + + @IsString() + @IsOptional() + currency_code?: string + + @IsString() + @IsOptional() + tax_rate?: string + + @IsOptional() + @ValidateNested() + @Type(() => DateComparisonOperator) + canceled_at?: DateComparisonOperator + + @IsOptional() + @ValidateNested() + @Type(() => DateComparisonOperator) + created_at?: DateComparisonOperator + + @IsOptional() + @ValidateNested() + @Type(() => DateComparisonOperator) + updated_at?: DateComparisonOperator +} + +export class OrdersReturnItem { + @IsString() + @IsNotEmpty() + item_id: string + + @IsInt() + @IsNotEmpty() + @Type(() => Number) + quantity: number + + @IsString() + @IsOptional() + reason_id?: string + + @IsString() + @IsOptional() + note?: string +} diff --git a/packages/medusa/src/types/product-variant.ts b/packages/medusa/src/types/product-variant.ts new file mode 100644 index 0000000000..fd645bf5ff --- /dev/null +++ b/packages/medusa/src/types/product-variant.ts @@ -0,0 +1,132 @@ +import { IsBoolean, IsNumber, IsString, ValidateNested } from "class-validator" +import { IsType } from "../utils/validators/is-type" +import { + DateComparisonOperator, + NumericalComparisonOperator, + StringComparisonOperator, +} from "./common" + +export type ProductVariantPrice = { + currency_code?: string + region_id?: string + amount: number + sale_amount?: number | undefined +} + +export type ProductVariantOption = { + option_id: string + value: string +} + +export type CreateProductVariantInput = { + title?: string + product_id?: string + sku?: string + barcode?: string + ean?: string + upc?: string + variant_rank?: number + inventory_quantity?: number + allow_backorder?: boolean + manage_inventory?: boolean + hs_code?: string + origin_country?: string + mid_code?: string + material?: string + weight?: number + length?: number + height?: number + width?: number + options: ProductVariantOption[] + prices: ProductVariantPrice[] + metadata?: object +} + +export type UpdateProductVariantInput = { + title?: string + product_id: string + sku?: string + barcode?: string + ean?: string + upc?: string + inventory_quantity?: number + allow_backorder?: boolean + manage_inventory?: boolean + hs_code?: string + origin_country?: string + mid_code?: string + material?: string + weight?: number + length?: number + height?: number + width?: number + options: ProductVariantOption[] + prices: ProductVariantPrice[] + metadata?: object +} + +export class FilterableProductVariantProps { + @ValidateNested() + @IsType([String, [String], StringComparisonOperator]) + id?: string | string[] | StringComparisonOperator + + @IsString() + title?: string + + @IsType([String, [String]]) + product_id?: string | string[] + + @IsType([String, [String]]) + sku?: string | string[] + + @IsType([String, [String]]) + barcode?: string | string[] + + @IsType([String, [String]]) + ean?: string | string[] + + @IsType([String]) + upc?: string + + @IsNumber() + inventory_quantity?: number + + @IsBoolean() + allow_backorder?: boolean + + @IsBoolean() + manage_inventory?: boolean + + @IsType([String, [String]]) + hs_code?: string | string[] + + @IsType([String, [String]]) + origin_country?: string | string[] + + @IsType([String, [String]]) + mid_code?: string | string[] + + @IsString() + material?: string + + @IsType([Number, NumericalComparisonOperator]) + weight?: number | NumericalComparisonOperator + + @IsType([Number, NumericalComparisonOperator]) + length?: number | NumericalComparisonOperator + + @IsType([Number, NumericalComparisonOperator]) + height?: number | NumericalComparisonOperator + + @IsType([Number, NumericalComparisonOperator]) + width?: number | NumericalComparisonOperator + + @IsString() + q?: string + + @IsType([DateComparisonOperator]) + created_at?: DateComparisonOperator + + @IsType([DateComparisonOperator]) + updated_at?: DateComparisonOperator +} diff --git a/packages/medusa/src/types/user.ts b/packages/medusa/src/types/user.ts new file mode 100644 index 0000000000..ba137a2ef4 --- /dev/null +++ b/packages/medusa/src/types/user.ts @@ -0,0 +1,30 @@ +import { User } from "../models/user" +import { PartialPick } from "./common" + +export interface CreateUserInput { + id?: string + email: string + first_name?: string + last_name?: string + api_token?: string + metadata?: JSON +} + +export interface UpdateUserInput { + readonly email?: string + first_name?: string + last_name?: string + readonly password_hash?: string + api_token?: string + metadata?: JSON +} + +export type FilterableUserProps = PartialPick< + User, + | "email" + | "first_name" + | "last_name" + | "created_at" + | "updated_at" + | "deleted_at" +> diff --git a/packages/medusa/src/types/validators/xor.ts b/packages/medusa/src/types/validators/xor.ts new file mode 100644 index 0000000000..7117df584d --- /dev/null +++ b/packages/medusa/src/types/validators/xor.ts @@ -0,0 +1,21 @@ +import { + ValidationArguments, + ValidatorConstraint, + ValidatorConstraintInterface, +} from "class-validator" + +// returns true if it has xor relation with the specified key in the constraint +// stolen from: https://github.com/typestack/class-validator/issues/168#issuecomment-373944641 +@ValidatorConstraint({ name: "xorConstraint", async: false }) +export class XorConstraint implements ValidatorConstraintInterface { + validate(propertyValue: string, args: ValidationArguments): boolean { + return ( + (!!propertyValue && !args.object[args.constraints[0]]) || + (!propertyValue && !!args.object[args.constraints[0]]) + ) + } + + defaultMessage(args: ValidationArguments): string { + return `Failed XOR relation between "${args.property}" and "${args.constraints[0]}".` + } +} diff --git a/packages/medusa/src/utils/db-aware-column.ts b/packages/medusa/src/utils/db-aware-column.ts index 216aa60a6e..6f46899d18 100644 --- a/packages/medusa/src/utils/db-aware-column.ts +++ b/packages/medusa/src/utils/db-aware-column.ts @@ -1,6 +1,6 @@ +import { getConfigFile } from "medusa-core-utils" import path from "path" import { Column, ColumnOptions, ColumnType } from "typeorm" -import { getConfigFile } from "medusa-core-utils" const pgSqliteTypeMapping: { [key: string]: ColumnType } = { increment: "rowid", @@ -19,7 +19,10 @@ let dbType: string export function resolveDbType(pgSqlType: ColumnType): ColumnType { if (!dbType) { try { - const { configModule } = getConfigFile(path.resolve("."), `medusa-config`) + const { configModule } = getConfigFile( + path.resolve("."), + `medusa-config` + ) as any dbType = configModule.projectConfig.database_type } catch (error) { // Default to Postgres to allow for e.g. migrations to run @@ -27,7 +30,7 @@ export function resolveDbType(pgSqlType: ColumnType): ColumnType { } } - if (dbType === "sqlite" && pgSqlType in pgSqliteTypeMapping) { + if (dbType === "sqlite" && (pgSqlType as string) in pgSqliteTypeMapping) { return pgSqliteTypeMapping[pgSqlType.toString()] } return pgSqlType @@ -38,7 +41,10 @@ export function resolveDbGenerationStrategy( ): "increment" | "uuid" | "rowid" { if (!dbType) { try { - const { configModule } = getConfigFile(path.resolve("."), `medusa-config`) + const { configModule } = getConfigFile( + path.resolve("."), + `medusa-config` + ) as any dbType = configModule.projectConfig.database_type } catch (error) { // Default to Postgres to allow for e.g. migrations to run @@ -52,7 +58,7 @@ export function resolveDbGenerationStrategy( return pgSqlType } -export function DbAwareColumn(columnOptions: ColumnOptions) { +export function DbAwareColumn(columnOptions: ColumnOptions): PropertyDecorator { const pre = columnOptions.type if (columnOptions.type) { columnOptions.type = resolveDbType(columnOptions.type) diff --git a/packages/medusa/src/utils/manual-auto-increment.ts b/packages/medusa/src/utils/manual-auto-increment.ts index a75a3c0947..2ab0b82d15 100644 --- a/packages/medusa/src/utils/manual-auto-increment.ts +++ b/packages/medusa/src/utils/manual-auto-increment.ts @@ -1,12 +1,22 @@ +import { getConfigFile } from "medusa-core-utils" import path from "path" import { getConnection } from "typeorm" -import { getConfigFile } from "medusa-core-utils" export async function manualAutoIncrement( tableName: string ): Promise { - const { configModule } = getConfigFile(path.resolve("."), `medusa-config`) - const dbType = configModule.projectConfig.database_type + let dbType + try { + const { configModule } = getConfigFile( + path.resolve("."), + `medusa-config` + ) as any + dbType = configModule.projectConfig.database_type + } catch (error) { + // Default to Postgres to allow for e.g. migrations to run + dbType = "postgres" + } + if (dbType === "sqlite") { const connection = getConnection() const [rec] = await connection.query( diff --git a/packages/medusa/src/utils/naming-strategy.ts b/packages/medusa/src/utils/naming-strategy.ts index 18b151a1e8..10e1df06d1 100644 --- a/packages/medusa/src/utils/naming-strategy.ts +++ b/packages/medusa/src/utils/naming-strategy.ts @@ -4,10 +4,10 @@ export class ShortenedNamingStrategy extends DefaultNamingStrategy { eagerJoinRelationAlias(alias: string, propertyPath: string): string { const path = propertyPath .split(".") - .map(p => p.substring(0, 2)) + .map((p) => p.substring(0, 2)) .join("_") - let out = alias + "_" + path - let match = out.match(/_/g) || [] + const out = alias + "_" + path + const match = out.match(/_/g) || [] return out + match.length } } diff --git a/packages/medusa/src/utils/validator.ts b/packages/medusa/src/utils/validator.ts new file mode 100644 index 0000000000..733018bf47 --- /dev/null +++ b/packages/medusa/src/utils/validator.ts @@ -0,0 +1,43 @@ +import { ClassConstructor, plainToClass } from "class-transformer" +import { validate, ValidationError, ValidatorOptions } from "class-validator" +import { MedusaError } from "medusa-core-utils" + +const reduceErrorMessages = (errs: ValidationError[]): string[] => { + return errs.reduce((acc: string[], next) => { + if (next.constraints) { + for (const [_, msg] of Object.entries(next.constraints)) { + acc.push(msg) + } + } + + if (next.children) { + acc.push(...reduceErrorMessages(next.children)) + } + return acc + }, []) +} + +export async function validator( + typedClass: ClassConstructor, + plain: V, + config: ValidatorOptions = {} +): Promise { + const toValidate = plainToClass(typedClass, plain) + // @ts-ignore + const errors = await validate(toValidate, { + whitelist: true, + forbidNonWhitelisted: true, + ...config, + }) + + const errorMessages = reduceErrorMessages(errors) + + if (errors?.length) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + errorMessages.join(", ") + ) + } + + return toValidate +} diff --git a/packages/medusa/src/utils/validators/date-transform.ts b/packages/medusa/src/utils/validators/date-transform.ts new file mode 100644 index 0000000000..4c3ca745fe --- /dev/null +++ b/packages/medusa/src/utils/validators/date-transform.ts @@ -0,0 +1,2 @@ +export const transformDate = ({ value }): Date => + !isNaN(Date.parse(value)) ? new Date(value) : new Date(Number(value) * 1000) diff --git a/packages/medusa/src/utils/validators/greater-than.ts b/packages/medusa/src/utils/validators/greater-than.ts new file mode 100644 index 0000000000..ae8fba3300 --- /dev/null +++ b/packages/medusa/src/utils/validators/greater-than.ts @@ -0,0 +1,34 @@ +import { + registerDecorator, + ValidationArguments, + ValidationOptions, + isDefined, +} from "class-validator" +import { MedusaError } from "medusa-core-utils" + +export function IsGreaterThan( + property: string, + validationOptions?: ValidationOptions +) { + return function (object: any, propertyName: string): void { + registerDecorator({ + name: "IsGreaterThan", + target: object.constructor, + propertyName: propertyName, + constraints: [property], + options: validationOptions, + validator: { + validate(value: any, args: ValidationArguments) { + const [relatedPropertyName] = args.constraints + const relatedValue = args.object[relatedPropertyName] + return relatedValue ? value > relatedValue : isDefined(value) + }, + defaultMessage(args?: ValidationArguments): string { + return `"${propertyName}" must be greater than ${JSON.stringify( + args?.constraints[0] + )}` + }, + }, + }) + } +} diff --git a/packages/medusa/src/utils/validators/is-type.ts b/packages/medusa/src/utils/validators/is-type.ts new file mode 100644 index 0000000000..a216e64b94 --- /dev/null +++ b/packages/medusa/src/utils/validators/is-type.ts @@ -0,0 +1,120 @@ +import { + isArray, + isNumber, + isString, + registerDecorator, + ValidationArguments, + ValidationOptions, +} from "class-validator" +import { isDate } from "lodash" +import { MedusaError } from "medusa-core-utils" +import { validator } from "../validator" + +async function typeValidator( + typedClass: any, + plain: unknown +): Promise { + switch (typedClass) { + case String: + if (!isString(plain)) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `String validation failed: ${plain} is not a string` + ) + } + return true + case Number: + if (!isNumber(Number(plain))) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Number validation failed: ${plain} is not a number` + ) + } + return true + case Date: + if (!isDate(new Date(plain as string))) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + `Date validation failed: ${plain} is not a date` + ) + } + return true + default: + if (isArray(typedClass) && isArray(plain)) { + const errors: Map = new Map() + const result = ( + await Promise.all( + (plain as any[]).map( + async (p) => + await typeValidator(typedClass[0], p).catch((e) => { + errors.set(typedClass[0].name, e.message.split(",")) + return false + }) + ) + ) + ).some(Boolean) + + if (result) { + return true + } + + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + Object.fromEntries(errors.entries()) + ) + } + return ( + (await validator(typedClass, plain).then(() => true)) && + typeof plain === "object" + ) + } +} + +export function IsType(types: any[], validationOptions?: ValidationOptions) { + // eslint-disable-next-line @typescript-eslint/ban-types + return function (object: Object, propertyName: string): void { + registerDecorator({ + name: "IsType", + target: object.constructor, + propertyName: propertyName, + options: validationOptions, + validator: { + async validate(value: unknown, args: ValidationArguments) { + const errors: Map = new Map() + const results = await Promise.all( + types.map( + async (v) => + await typeValidator(v, value).catch((e) => { + errors.set(v.name, e.message.split(",").filter(Boolean)) + return false + }) + ) + ) + + if (results.some(Boolean)) { + return true + } + + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + JSON.stringify({ + message: `${args.property} must be one of: ${types.map( + (t) => `${t.name || (Array.isArray(t) ? t[0]?.name : "")}` + )}`, + details: Object.fromEntries(errors.entries()), + }) + ) + }, + + defaultMessage(validationArguments?: ValidationArguments) { + const names = types.map( + (t) => t.name || (isArray(t) ? `${t[0].name}[]` : "") + ) + return `${validationArguments?.property} must be one of ${names + .join(", ") + .replace(/, ([^,]*)$/, " or $1")}` + }, + }, + }) + } +} diff --git a/packages/medusa/src/utils/validators/iso8601-duration.ts b/packages/medusa/src/utils/validators/iso8601-duration.ts new file mode 100644 index 0000000000..09f44a32d5 --- /dev/null +++ b/packages/medusa/src/utils/validators/iso8601-duration.ts @@ -0,0 +1,26 @@ +import { + registerDecorator, + ValidationArguments, + ValidationOptions, +} from "class-validator" + +export function IsISO8601Duration(validationOptions?: ValidationOptions) { + return function (object: any, propertyName: string): void { + registerDecorator({ + name: "IsGreaterThan", + target: object.constructor, + propertyName: propertyName, + options: validationOptions, + validator: { + validate(value: any, args: ValidationArguments) { + const isoDurationRegex = + /^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?$/ + return isoDurationRegex.test(value) + }, + defaultMessage(args?: ValidationArguments): string { + return `"${propertyName}" must be a valid ISO 8601 duration` + }, + }, + }) + } +} diff --git a/packages/medusa/tsconfig.json b/packages/medusa/tsconfig.json index 958846589c..d81ce7302b 100644 --- a/packages/medusa/tsconfig.json +++ b/packages/medusa/tsconfig.json @@ -1,15 +1,28 @@ { "compilerOptions": { - "lib": [ - "es5", - "es6" - ], + "lib": ["es5", "es6"], "target": "es5", + "outDir": "./dist", "esModuleInterop": true, + "declaration": true, "module": "commonjs", "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "sourceMap": true - } + "sourceMap": true, + "noImplicitReturns": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "noImplicitThis": true, + "allowJs": true, + "skipLibCheck": true, + "downlevelIteration": true // to use ES5 specific tooling + }, + "include": ["./src/**/*", "index.d.ts"], + "exclude": [ + "./dist/**/*", + "./src/**/__tests__", + "./src/**/__mocks__", + "node_modules" + ] } diff --git a/packages/medusa/yarn.lock b/packages/medusa/yarn.lock index a9ddf270d1..87d1b89c29 100644 --- a/packages/medusa/yarn.lock +++ b/packages/medusa/yarn.lock @@ -3,9 +3,9 @@ "@babel/cli@^7.14.3": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.15.7.tgz#62658abedb786d09c1f70229224b11a65440d7a1" - integrity sha512-YW5wOprO2LzMjoWZ5ZG6jfbY9JnkDxuHDwvnrThnuYtByorova/I0HNXJedrUfwuXFQfYOjcqDA4PU3qlZGZjg== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.0.tgz#a729b7a48eb80b49f48a339529fc4129fd7bcef3" + integrity sha512-WLrM42vKX/4atIoQB+eb0ovUof53UUvecb4qGjU2PDDWRiZr50ZpiV8NpcLo7iSxeGYrRG0Mqembsa+UrTAV6Q== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -18,6 +18,13 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" chokidar "^3.4.0" +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" @@ -25,10 +32,22 @@ dependencies: "@babel/highlight" "^7.14.5" -"@babel/compat-data@^7.13.11", "@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/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== + +"@babel/compat-data@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" + integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== "@babel/core@^7.1.0", "@babel/core@^7.14.3", "@babel/core@^7.7.5": version "7.15.5" @@ -51,31 +70,69 @@ semver "^6.3.0" 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== +"@babel/core@^7.12.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.15.4", "@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== + dependencies: + "@babel/types" "^7.16.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": +"@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.14.5": - 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== +"@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.4": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" + integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== @@ -85,7 +142,7 @@ browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.4": +"@babel/helper-create-class-features-plugin@^7.15.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== @@ -97,18 +154,30 @@ "@babel/helper-replace-supers" "^7.15.4" "@babel/helper-split-export-declaration" "^7.15.4" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== +"@babel/helper-create-class-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + +"@babel/helper-create-regexp-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" + integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== +"@babel/helper-define-polyfill-provider@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" + integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -119,14 +188,14 @@ resolve "^1.14.2" semver "^6.1.2" -"@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== +"@babel/helper-explode-assignable-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" + integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4": +"@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== @@ -135,35 +204,44 @@ "@babel/template" "^7.15.4" "@babel/types" "^7.15.4" -"@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== +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== dependencies: - "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" -"@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== +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.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== +"@babel/helper-hoist-variables@^7.15.4", "@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^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== +"@babel/helper-member-expression-to-functions@^7.15.4", "@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4": +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-module-transforms@^7.15.4": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226" integrity sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw== @@ -177,28 +255,42 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.6" -"@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== +"@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== dependencies: - "@babel/types" "^7.15.4" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/helper-optimise-call-expression@^7.15.4", "@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== + dependencies: + "@babel/types" "^7.16.0" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.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== +"@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e" + integrity sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-wrap-function" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-wrap-function" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.4": +"@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== @@ -208,19 +300,29 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@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== +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== dependencies: - "@babel/types" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" - integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" "@babel/helper-split-export-declaration@^7.15.4": version "7.15.4" @@ -229,7 +331,14 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== @@ -239,15 +348,15 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@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== +"@babel/helper-wrap-function@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" + integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== dependencies: - "@babel/helper-function-name" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-function-name" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/helpers@^7.15.4": version "7.15.4" @@ -258,12 +367,21 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/helpers@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5", "@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" @@ -272,150 +390,162 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" - integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" +"@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" + integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== -"@babel/plugin-proposal-async-generator-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e" - integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" + integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.15.4" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" + integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + +"@babel/plugin-proposal-async-generator-functions@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz#e606eb6015fec6fa5978c940f315eae4e300b081" + integrity sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" + integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" - integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== +"@babel/plugin-proposal-class-static-block@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" + integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.12.1": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.4.tgz#fb55442bc83ab4d45dda76b91949706bf22881d2" - integrity sha512-WNER+YLs7avvRukEddhu5PSfSaMMimX2xBFgLQS7Bw16yrUxJGWidO9nQp+yLy9MVybg5Ba3BlhAw+BkdhpDmg== + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.4.tgz#9b35ce0716425a93b978e79099e5f7ba217c1364" + integrity sha512-RESBNX16eNqnBeEVR5sCJpnW0mHiNLNNvGA8PrRuK/4ZJ4TO+6bHleRUuGQYDERVySOKtOhSya/C4MIhwAMAgg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators" "^7.14.5" + "@babel/plugin-syntax-decorators" "^7.16.0" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== +"@babel/plugin-proposal-dynamic-import@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" + integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== +"@babel/plugin-proposal-export-namespace-from@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" + integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== +"@babel/plugin-proposal-json-strings@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" + integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" + integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" + integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" + integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" - integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== +"@babel/plugin-proposal-object-rest-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" + integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.15.4" + "@babel/plugin-transform-parameters" "^7.16.0" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== +"@babel/plugin-proposal-optional-catch-binding@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" + integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== +"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" + integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" - integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== +"@babel/plugin-proposal-private-property-in-object@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" + integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-create-class-features-plugin" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== +"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" + integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": @@ -446,10 +576,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz#eafb9c0cbe09c8afeb964ba3a7bbd63945a72f20" - integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw== +"@babel/plugin-syntax-decorators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" + integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -544,255 +674,255 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-arrow-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" + integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" + integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== dependencies: - "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-module-imports" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" -"@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== +"@babel/plugin-transform-block-scoped-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" + integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.15.3": - 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== +"@babel/plugin-transform-block-scoping@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" + integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4", "@babel/plugin-transform-classes@^7.9.5": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" - integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.16.0", "@babel/plugin-transform-classes@^7.9.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" + integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" -"@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== +"@babel/plugin-transform-computed-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" + integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-destructuring@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" + integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" + integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-duplicate-keys@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" + integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-exponentiation-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" + integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.15.4": - 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== +"@babel/plugin-transform-for-of@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" + integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== dependencies: - "@babel/helper-function-name" "^7.14.5" + "@babel/helper-function-name" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-instanceof@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.14.5.tgz#8568277fbcfd7a3e4f3e6c8b7aa8ce4f60cba6e7" - integrity sha512-3CIpRzBLk5tEwIzjjD86KR8oMYrp1fl9q7kbdJa6O6Lcmkcee9DXfeO6zRXis//5gWRf63o5oDlNBh0VAlmtgw== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.16.0.tgz#2dead81e9ba3e11d6378172ff3fab9967bd2307d" + integrity sha512-12b9/GJI9qisUpZtWlR5bf+ZD1DeNUzM6J4CbQTP7Zega6brRKHRSGDuQc5eJywGHni6Ib/l3RumF9vQ6CD6EQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" + integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-member-expression-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" + integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-modules-amd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.15.4": - 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== +"@babel/plugin-transform-modules-commonjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" + integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== dependencies: - "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-simple-access" "^7.16.0" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.15.4": - 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== +"@babel/plugin-transform-modules-systemjs@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" + integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== dependencies: - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.4" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.15.7" babel-plugin-dynamic-import-node "^2.3.3" -"@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== +"@babel/plugin-transform-modules-umd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" + integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.0" "@babel/helper-plugin-utils" "^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== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" + integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" -"@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== +"@babel/plugin-transform-new-target@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" + integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-object-super@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" + integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" -"@babel/plugin-transform-parameters@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" - integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== +"@babel/plugin-transform-parameters@^7.16.0", "@babel/plugin-transform-parameters@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" + integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-property-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" + integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-regenerator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" + integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== dependencies: regenerator-transform "^0.14.2" -"@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== +"@babel/plugin-transform-reserved-words@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" + integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@^7.12.1": - 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== + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8" + integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== dependencies: - "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-module-imports" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@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== +"@babel/plugin-transform-shorthand-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" + integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" + integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@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== +"@babel/plugin-transform-sticky-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" + integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-template-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" + integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-typeof-symbol@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" + integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -805,19 +935,19 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript" "^7.14.5" -"@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== +"@babel/plugin-transform-unicode-escapes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" + integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@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== +"@babel/plugin-transform-unicode-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" + integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/polyfill@^7.8.7": @@ -829,30 +959,31 @@ regenerator-runtime "^0.13.4" "@babel/preset-env@^7.12.7": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659" - integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw== + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.4.tgz#4f6ec33b2a3fe72d6bfdcdf3859500232563a2e3" + integrity sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA== dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-compilation-targets" "^7.15.4" + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.3" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" - "@babel/plugin-proposal-async-generator-functions" "^7.15.4" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.15.4" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.15.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.15.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions" "^7.16.4" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-class-static-block" "^7.16.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.0" + "@babel/plugin-proposal-export-namespace-from" "^7.16.0" + "@babel/plugin-proposal-json-strings" "^7.16.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-object-rest-spread" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -867,50 +998,50 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.15.3" - "@babel/plugin-transform-classes" "^7.15.4" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.15.4" - "@babel/plugin-transform-function-name" "^7.14.5" - "@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.15.4" - "@babel/plugin-transform-modules-systemjs" "^7.15.4" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@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.15.4" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@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.15.6" - 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.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.0" + "@babel/plugin-transform-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions" "^7.16.0" + "@babel/plugin-transform-block-scoping" "^7.16.0" + "@babel/plugin-transform-classes" "^7.16.0" + "@babel/plugin-transform-computed-properties" "^7.16.0" + "@babel/plugin-transform-destructuring" "^7.16.0" + "@babel/plugin-transform-dotall-regex" "^7.16.0" + "@babel/plugin-transform-duplicate-keys" "^7.16.0" + "@babel/plugin-transform-exponentiation-operator" "^7.16.0" + "@babel/plugin-transform-for-of" "^7.16.0" + "@babel/plugin-transform-function-name" "^7.16.0" + "@babel/plugin-transform-literals" "^7.16.0" + "@babel/plugin-transform-member-expression-literals" "^7.16.0" + "@babel/plugin-transform-modules-amd" "^7.16.0" + "@babel/plugin-transform-modules-commonjs" "^7.16.0" + "@babel/plugin-transform-modules-systemjs" "^7.16.0" + "@babel/plugin-transform-modules-umd" "^7.16.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" + "@babel/plugin-transform-new-target" "^7.16.0" + "@babel/plugin-transform-object-super" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.3" + "@babel/plugin-transform-property-literals" "^7.16.0" + "@babel/plugin-transform-regenerator" "^7.16.0" + "@babel/plugin-transform-reserved-words" "^7.16.0" + "@babel/plugin-transform-shorthand-properties" "^7.16.0" + "@babel/plugin-transform-spread" "^7.16.0" + "@babel/plugin-transform-sticky-regex" "^7.16.0" + "@babel/plugin-transform-template-literals" "^7.16.0" + "@babel/plugin-transform-typeof-symbol" "^7.16.0" + "@babel/plugin-transform-unicode-escapes" "^7.16.0" + "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.0" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.19.1" semver "^6.3.0" -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" @@ -918,19 +1049,19 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-typescript@^7.13.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz#e8fca638a1a0f64f14e1119f7fe4500277840945" - integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow== +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac" + integrity sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-typescript" "^7.15.0" + "@babel/plugin-transform-typescript" "^7.16.0" -"@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== +"@babel/runtime@^7.15.4", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.6": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== dependencies: regenerator-runtime "^0.13.4" @@ -943,7 +1074,16 @@ "@babel/parser" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.15.4": +"@babel/template@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@^7.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== @@ -958,7 +1098,22 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": 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== @@ -966,6 +1121,14 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.16.0", "@babel/types@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + 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" @@ -988,6 +1151,21 @@ enabled "2.0.x" kuler "^2.0.0" +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@hapi/address@^2.1.2": version "2.1.4" resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" @@ -1038,6 +1216,20 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + "@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" @@ -1222,10 +1414,10 @@ "@types/yargs" "^15.0.0" chalk "^3.0.0" -"@medusajs/medusa-cli@^1.1.18": - version "1.1.19" - resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.19.tgz#65507b9694f9b51b1fce3f2f4bd601075b53ce94" - integrity sha512-DuHJBPEhAGV5Mx0P5WTaVrbkLE7CeGdA+s2u6Wnp0cMPS3N6XDv3dBUHjHXiIEUoKHWZfDLyBKV3UUA3r+M6TQ== +"@medusajs/medusa-cli@^1.1.22": + version "1.1.23" + resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.23.tgz#d7272a21c02f9fa3cbe1dc8f9e2840cdd0e1d2f9" + integrity sha512-rqjDFd8hM9Q3rvuxwetv28jp3xHzH5Nt5J129JPCk9Sd8Rj6x2lVbKPbULNwgQ6hk8OsXjOQF2hPEyRt+vJL3A== dependencies: "@babel/polyfill" "^7.8.7" "@babel/runtime" "^7.9.6" @@ -1244,7 +1436,7 @@ joi-objectid "^3.0.1" meant "^1.0.1" medusa-core-utils "^0.1.27" - medusa-telemetry "^0.0.5" + medusa-telemetry "^0.0.10" netrc-parser "^3.1.6" open "^8.0.6" ora "^5.4.1" @@ -1335,16 +1527,16 @@ tslib "^1.9.3" "@oclif/plugin-help@^3": - 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== + version "3.2.4" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-3.2.4.tgz#100e0e09d806e20595096609f2220d009ee096e2" + integrity sha512-kMSfFbv11S7CKFlbWTKDdAe/gC7P2zCFZEDq6BAHjJdA0htHT8FvBhnyoppR0O2jOTjX80wHjU+ItPpjanfuag== dependencies: "@oclif/command" "^1.5.20" "@oclif/config" "^1.15.1" "@oclif/errors" "^1.2.2" chalk "^4.1.0" indent-string "^4.0.0" - lodash.template "^4.4.0" + lodash "^4.17.21" string-width "^4.2.0" strip-ansi "^6.0.0" widest-line "^3.1.0" @@ -1424,6 +1616,40 @@ dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" + integrity sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.25" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz#e42f7046adc65ece2eb6059b77aecfbe9e9f82e0" + integrity sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -1451,15 +1677,27 @@ "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" +"@types/jsonwebtoken@^8.5.5": + version "8.5.5" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz#da5f2f4baee88f052ef3e4db4c1a0afb46cff22c" + integrity sha512-OGqtHQ7N5/Ap/TUwO6IgHDuLiAoTmHhGpNvgkCm/F4N6pKzx/RBSfr2OXZSwC6vkfnsEdb6+7DNZVtiXiwdwFw== + dependencies: + "@types/node" "*" + "@types/lodash@^4.14.168": - version "4.14.175" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.175.tgz#b78dfa959192b01fae0ad90e166478769b215f45" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== + version "4.14.176" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.176.tgz#641150fc1cda36fbfa329de603bbb175d7ee20c0" + integrity sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== "@types/node@*": - version "16.10.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.2.tgz#5764ca9aa94470adb4e1185fe2e9f19458992b2e" - integrity sha512-zCclL4/rx+W5SQTzFs9wyvvyCwoK9QtBpratqz2IYJ3O8Umrn0m3nsTv0wQBk9sRGpvUe9CwPDrQFB10f1FIjQ== + version "16.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" + integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1471,11 +1709,34 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/validator@^13.1.3": + version "13.6.6" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.6.6.tgz#6e6e2d086148db5ae14851614971b715670cbd52" + integrity sha512-+qogUELb4gMhrMjSh/seKmGVvN+uQLfyqJAqYRWqVHsvBsUO2xDBCL8CJ/ZSukbd8vXaoYbpIssAmfLEzzBHEw== + "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" @@ -1514,7 +1775,7 @@ acorn-globals@^4.3.2: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-jsx@^5.2.0: +acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -1529,12 +1790,12 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.0, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1544,6 +1805,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.7.1.tgz#52be6f1736b076074798124293618f132ad07a7e" + integrity sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -1551,6 +1822,11 @@ ansi-align@^3.0.0: dependencies: string-width "^4.1.0" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -1679,9 +1955,9 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -1700,10 +1976,15 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" - integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + version "3.2.2" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.2.tgz#2eb7671034bb2194d45d30e31e24ec7e7f9670cd" + integrity sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g== asynckit@^0.4.0: version "0.4.0" @@ -1734,11 +2015,12 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios-retry@^3.1.9: - version "3.2.0" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.2.0.tgz#eb48e72f90b177fde62329b2896aa8476cfb90ba" - integrity sha512-RK2cLMgIsAQBDhlIsJR5dOhODPigvel18XUv1dDXW+4k1FzebyfRk+C+orot6WPZOYFKSfhLwHPwVmTVOODQ5w== + version "3.2.4" + resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.2.4.tgz#f447a53c3456f5bfeca18f20c3a3272207d082ae" + integrity sha512-Co3UXiv4npi6lM963mfnuH90/YFLKWWDmoBYfxkHT5xtkSSWNqK9zdG3fw5/CP/dsoKB5aMMJCsgab+tp1OxLQ== dependencies: - is-retry-allowed "^1.1.0" + "@babel/runtime" "^7.15.4" + is-retry-allowed "^2.2.0" axios@^0.21.1: version "0.21.4" @@ -1769,14 +2051,14 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^25.5.0: @@ -1788,29 +2070,29 @@ babel-plugin-jest-hoist@^25.5.0: "@babel/types" "^7.3.3" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" + integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.0" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" - integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== +babel-plugin-polyfill-corejs3@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087" + integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.16.2" + "@babel/helper-define-polyfill-provider" "^0.3.0" + core-js-compat "^3.18.0" -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" + integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" + "@babel/helper-define-polyfill-provider" "^0.3.0" babel-plugin-transform-typescript-metadata@^0.3.1: version "0.3.2" @@ -1844,10 +2126,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.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.15.tgz#6917cadd8abe9a1f64c71b5c43ab507df193effc" - integrity sha512-toA8mFdvLeKbbRJ7KvQvpL6VJnzkKURZv7Yd97cXMMNpdjrhp+SZppcNOL2tk6ywgBAs4NC2LCVjtZInMMBS6Q== +babel-preset-medusa-package@^1.1.17: + version "1.1.18" + resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.18.tgz#6a491ae387cf43a318835a5cb9620215b6af5155" + integrity sha512-BJJSbe7jh2qeuQEhMDbyZoWxEsMdENCXKc8lmfZpvPZtjcWNYHEuRqLJ1GdIEz2uYh+1RcPn5yk6xbjVHquV5g== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -1856,6 +2138,7 @@ babel-preset-medusa-package@^1.1.15: "@babel/plugin-transform-instanceof" "^7.12.1" "@babel/plugin-transform-runtime" "^7.12.1" "@babel/preset-env" "^7.12.7" + "@babel/preset-typescript" "^7.16.0" babel-plugin-transform-typescript-metadata "^0.3.1" core-js "^3.7.0" @@ -1990,16 +2273,27 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.16.6, browserslist@^4.17.1: - version "4.17.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.2.tgz#aa15dbd2fab399a399fe4df601bb09363c5458a6" - integrity sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ== +browserslist@^4.17.5: + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== dependencies: - caniuse-lite "^1.0.30001261" - electron-to-chromium "^1.3.854" + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" escalade "^3.1.1" - nanocolors "^0.2.12" - node-releases "^1.1.76" + node-releases "^2.0.1" + picocolors "^1.0.0" + +browserslist@^4.17.6: + version "4.18.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== + dependencies: + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" bser@2.1.1: version "2.1.1" @@ -2032,9 +2326,9 @@ buffer@^5.5.0: ieee754 "^1.1.13" bull@^3.12.1: - version "3.29.2" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.2.tgz#30051fd14c7214b1e90c212585674f77fd982650" - integrity sha512-zWHyza/ElwVvJUqIEDJdUhGKd1V9EHjituUL7sJAmJoxS9Z7QMhYcMOWcgbUlWPgtiKN1g9ZlOtFAoq7C4/SQw== + version "3.29.3" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.29.3.tgz#5b0059b172685b0d6f011d56214e1898ff3a7a0b" + integrity sha512-MOqV1dKLy1YQgP9m3lFolyMxaU+1+o4afzYYf0H4wNM+x/S0I1QPQfkgGlLiH00EyFrvSmeubeCYFP47rTfpjg== dependencies: cron-parser "^2.13.0" debuglog "^1.0.0" @@ -2119,10 +2413,15 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001261: - version "1.0.30001263" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001263.tgz#7ce7a6fb482a137585cbc908aaf38e90c53a16a4" - integrity sha512-doiV5dft6yzWO1WwU19kt8Qz8R0/8DgEziz6/9n2FxUasteZNwNNYSmJO3GLBH8lCVE73AB1RPDPAeYbcO5Cvw== +caniuse-lite@^1.0.30001274: + version "1.0.30001279" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" + integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== + +caniuse-lite@^1.0.30001280: + version "1.0.30001282" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd" + integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg== capture-exit@^2.0.0: version "2.0.0" @@ -2144,7 +2443,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2174,7 +2473,7 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.2.2, chokidar@^3.4.0, chokidar@^3.4.2: +chokidar@^3.4.0, chokidar@^3.4.2, chokidar@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== @@ -2204,6 +2503,11 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== +class-transformer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.4.0.tgz#b52144117b423c516afb44cc1c76dbad31c2165b" + integrity sha512-ETWD/H2TbWbKEi7m9N4Km5+cw1hNcqJSxlSYhsLsNjQzWWiZIYA1zafxpK9PwVfaZ6AqR5rrjPVUBGESm5tQUA== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2214,6 +2518,15 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +class-validator@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.1.tgz#381b2001ee6b9e05afd133671fbdf760da7dec67" + integrity sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg== + dependencies: + "@types/validator" "^13.1.3" + libphonenumber-js "^1.9.7" + validator "^13.5.2" + clean-stack@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" @@ -2242,9 +2555,9 @@ cli-progress@^3.4.0: string-width "^4.2.0" cli-spinners@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cli-ux@^5.4.9: version "5.6.3" @@ -2332,7 +2645,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0, color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -2356,7 +2669,7 @@ color-name@^1.0.0, color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.5.2: +color-string@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== @@ -2364,13 +2677,13 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" -color@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a" - integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w== +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" + color-convert "^1.9.3" + color-string "^1.6.0" colors@^1.1.2, colors@^1.2.1: version "1.4.0" @@ -2378,11 +2691,11 @@ colors@^1.1.2, colors@^1.2.1: integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colorspace@1.1.x: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5" - integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ== + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: - color "3.0.x" + color "^3.1.3" text-hex "1.0.x" combined-stream@^1.0.6, combined-stream@~1.0.6: @@ -2491,12 +2804,12 @@ 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.16.0, core-js-compat@^3.16.2: - version "3.18.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.1.tgz#01942a0877caf9c6e5007c027183cf0bdae6a191" - integrity sha512-XJMYx58zo4W0kLPmIingVZA10+7TuKrMLPt83+EzDmxFJQUMcTVVmQ+n5JP4r6Z14qSzhQBRi3NSWoeVyKKXUg== +core-js-compat@^3.18.0, core-js-compat@^3.19.1: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.1.tgz#fe598f1a9bf37310d77c3813968e9f7c7bb99476" + integrity sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g== dependencies: - browserslist "^4.17.1" + browserslist "^4.17.6" semver "7.0.0" core-js@^2.6.5: @@ -2504,11 +2817,16 @@ core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.6.5, core-js@^3.7.0: +core-js@^3.6.5: version "3.18.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.1.tgz#289d4be2ce0085d40fc1244c0b1a54c00454622f" integrity sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA== +core-js@^3.7.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" + integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2553,7 +2871,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2607,7 +2925,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -2648,7 +2966,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -2820,15 +3138,15 @@ 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.854: - version "1.3.856" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.856.tgz#75dee0eef9702bffabbf4c1293c989cd3cacb7ba" - integrity sha512-lSezYIe1/p5qkEswAfaQUseOBiwGwuCvRl/MKzOEVe++DcmQ92+43dznDl4rFJ4Zpu+kevhwyIf7KjJevyDA/A== +electron-to-chromium@^1.3.886: + version "1.3.894" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.894.tgz#54554ecb40d40ddac7241c4a42887e86180015d8" + integrity sha512-WY8pA4irAZ4cm/Pr7YFPtPLVqj3nU6d0SbfoHF6M7HZNONfPdAnYAarumqQ75go2LuN72uO9wGuCEqnfya/ytg== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +electron-to-chromium@^1.3.896: + version "1.3.900" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.900.tgz#5be2c5818a2a012c511b4b43e87b6ab7a296d4f5" + integrity sha512-SuXbQD8D4EjsaBaJJxySHbC+zq8JrFfxtb4GIr4E9n1BcROyMcRrJCYQNpJ9N+Wjf5mFp7Wp0OHykd14JNEzzQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2852,6 +3170,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -2859,10 +3184,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.2: - version "1.19.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.0.tgz#0a6e6682268e7f5bdc1c740b33ce2578d64538d3" - integrity sha512-oWPrF+7P1nGv/rw9oIInwdkmI1qediEJSvVfHFryBd8mWllCKB5tke3aKyf51J6chgyKmi6mODqdnin2yb88Nw== +es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -2909,7 +3234,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== @@ -2936,7 +3261,7 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^5.0.0: +eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -2944,76 +3269,84 @@ eslint-scope@^5.0.0: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: - "@babel/code-frame" "^7.0.0" + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^5.0.1" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" + glob-parent "^5.1.2" + globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash.merge "^4.6.2" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: +esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -3033,9 +3366,9 @@ estraverse@^4.1.1, estraverse@^4.2.0: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -3243,11 +3576,11 @@ extsprintf@1.3.0: integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -3268,7 +3601,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -3313,12 +3646,12 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: - flat-cache "^2.0.1" + flat-cache "^3.0.4" fill-range@^4.0.0: version "4.0.0" @@ -3358,19 +3691,18 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" + flatted "^3.1.0" + rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== fn.name@1.x.x: version "1.1.0" @@ -3378,9 +3710,9 @@ fn.name@1.x.x: integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.14.0: - version "1.14.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" - integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== + version "1.14.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" + integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== for-each@^0.3.3: version "0.3.3" @@ -3418,9 +3750,9 @@ form-data@~2.3.2: mime-types "^2.1.12" formidable@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.2.tgz#bf69aea2972982675f00865342b982986f6b8dd9" - integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== + version "1.2.6" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.6.tgz#d2a51d60162bbc9b4a055d8457a7c75315d1a168" + integrity sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ== forwarded@0.2.0: version "0.2.0" @@ -3591,7 +3923,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3630,12 +3962,12 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: - type-fest "^0.8.1" + type-fest "^0.20.2" globby@^11.0.1: version "11.0.4" @@ -3869,11 +4201,11 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== -import-fresh@^3.0.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -3887,9 +4219,9 @@ import-lazy@^2.1.0: integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + version "3.0.3" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" + integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -3932,29 +4264,10 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - inquirer@^8.0.0: - version "8.1.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.5.tgz#2dc5159203c826d654915b5fe6990fd17f54a150" - integrity sha512-G6/9xUqmt/r+UvufSyrPpt84NYwhKZ9jLsgMbQzlx804XErNupor8WQdBnBRrXmBfTPpuwf1sV+ss2ovjgdXIg== + version "8.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" + integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -3981,9 +4294,9 @@ internal-slot@^1.0.3: side-channel "^1.0.4" ioredis-mock@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/ioredis-mock/-/ioredis-mock-5.6.0.tgz#f60f9fbc3a53b50f567be9369e2b211ed52c0653" - integrity sha512-Ow+tyKdijg/gA2gSEv7lq8dLp6bO7FnwDXbJ9as37NF23XNRGMLzBc7ITaqMydfrbTodWnLcE2lKEaBs7SBpyA== + version "5.7.0" + resolved "https://registry.yarnpkg.com/ioredis-mock/-/ioredis-mock-5.7.0.tgz#c2f2464313b0c8592cf096d84b0ef4019813fc22" + integrity sha512-Z3U7SoDoLP+LeljcNWWGuldbZKzjzbyBrVa1/j0+GurFIgZlT4Ij+/6IqQlTDwZZkss/Prp3UaOdvr5e0Iow5g== dependencies: fengari "^0.1.4" fengari-interop "^0.1.2" @@ -3991,9 +4304,9 @@ ioredis-mock@^5.6.0: standard-as-callback "^2.1.0" ioredis@^4.17.3, ioredis@^4.27.0: - version "4.27.9" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.27.9.tgz#c27bbade9724f0b8f84c279fb1d567be785ba33d" - integrity sha512-hAwrx9F+OQ0uIvaJefuS3UTqW+ByOLyLIV+j0EH8ClNVxvFyH9Vmb08hCL4yje6mDYT5zMquShhypkd50RRzkg== + version "4.28.0" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.28.0.tgz#5a2be3f37ff2075e2332f280eaeb02ab4d9ff0d3" + integrity sha512-I+zkeeWp3XFgPT2CtJKxvaF5FjGBGt4yGYljRjQecdQKteThuAsKqffeF1lgHVlYnuNeozRbPOCDNZ7tDWPeig== dependencies: cluster-key-slot "^1.1.0" debug "^4.3.1" @@ -4081,9 +4394,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -4276,10 +4589,10 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-retry-allowed@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" + integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== is-shared-array-buffer@^1.0.1: version "1.0.1" @@ -4393,10 +4706,10 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz#e8900b3ed6069759229cf30f7067388d148aeb5e" - integrity sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^4.0.0: version "4.0.3" @@ -4408,6 +4721,17 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -4418,18 +4742,18 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -4889,6 +5213,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5023,7 +5352,15 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -levn@^0.3.0, levn@~0.3.0: +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -5031,6 +5368,11 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +libphonenumber-js@^1.9.7: + version "1.9.42" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.9.42.tgz#41f41d540f89b6e3fd36de7120ddb57b3a468c77" + integrity sha512-UBtU0ylpZPKPT8NLIyQJWj/DToMFxmo3Fm5m6qDc0LATvf0SY0qUhaurCEvukAB9Fo+Ia2Anjzqwoupaa64fXg== + lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" @@ -5043,11 +5385,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5098,6 +5435,11 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -5108,22 +5450,12 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash.template@^4.4.0: - version "4.5.0" - 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" - lodash.templatesettings "^4.0.0" +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash.templatesettings@^4.0.0: - version "4.2.0" - 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" - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5194,11 +5526,11 @@ make-dir@^3.0.0: semver "^6.0.0" makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" map-cache@^0.2.2: version "0.2.2" @@ -5235,25 +5567,25 @@ medusa-core-utils@^0.1.27: "@hapi/joi" "^16.1.8" joi-objectid "^3.0.1" -medusa-core-utils@^1.1.22, medusa-core-utils@^1.1.23: - version "1.1.23" - resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.23.tgz#1e9260d5066117350dbf56dc176dd25e488e90a1" - integrity sha512-3KnfbCGud09xYC7qrc+kw2XmBFa4UuGBOPT2IU3j70BjFhEU9ftD45oolKXNUziOZIIGRf/FIwGj+Lwgy6IAfA== +medusa-core-utils@^1.1.26: + version "1.1.26" + resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.26.tgz#fa1f54402c76e6a3991b9d22ae1e9d7609c86e8f" + integrity sha512-9bwy5aIdKPNxzlJAGrUEt7I1ExQjFS7zcWEDg3D5xjUzcpvP0OeVvV3joP9gUNHFjfEp983jzsmVlt1/bz31UA== dependencies: joi "^17.3.0" joi-objectid "^3.0.1" -medusa-interfaces@^1.1.23: - version "1.1.24" - resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.24.tgz#13d0bc4afbd56c028c9e4bc562b0ce7a2023453c" - integrity sha512-jzdHRN6AmX2Tuh3nbZd9PQJ0z1b6TzAAfyjak2rmakfoXzv19cAcXq5iUV04kQk+659Q+A14ei1LD/IemMYDmA== +medusa-interfaces@^1.1.27: + version "1.1.27" + resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.27.tgz#fd5f5220dd752bcfd174e6eb5d072d731bd80966" + integrity sha512-dsQnsCdP2TQITOrHIZzyYyf4Lu3rW3AgeOzl6NmRWjf5A1KKP5cJcyIg4Te9xOtLUKeP70BvF+fAk7LechtE+Q== dependencies: - medusa-core-utils "^1.1.23" + medusa-core-utils "^1.1.26" -medusa-telemetry@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.5.tgz#d7d08fca5cbecc0e853b4e0406194a92c5206caa" - integrity sha512-h7hP5Lc33OkFhMcvfrPcwINzMOuPoG8Vn8O6niKGFxF9RmmQnJgaAG1J43/Eq9ZWBrWi0n42XBttibKwCMViHw== +medusa-telemetry@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.10.tgz#86fb85048b9e41d0d91f156d590dd519a872077d" + integrity sha512-kskCT4YjCvv8C38qF+zJY9C/fARtHH5cpl2WlxHblBAQY3KXCGBSXLlsgPRT28VIkuDQOZGDjHLg3o+w2XqNPw== dependencies: axios "^0.21.1" axios-retry "^3.1.9" @@ -5265,13 +5597,13 @@ medusa-telemetry@^0.0.5: remove-trailing-slash "^0.1.1" uuid "^8.3.2" -medusa-test-utils@^1.1.25: - version "1.1.26" - resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.26.tgz#badc7213e9acd332c2b4353602c5fc9d16f3c4e6" - integrity sha512-CtDD+5cLMqxuiJNtLljZF1btain7i64K6P3rbdef/kndPwjofBVUb3awoz4bieoZzJZF0GOn+p1kCZNsj2ggew== +medusa-test-utils@^1.1.29: + version "1.1.29" + resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.29.tgz#554ff0c770922be44c2bbc69929881dca371ce80" + integrity sha512-+cNjH6d8sBJjsCohWl/rTPzan8vaDCjyaiNXwbBkrObXdsW511bLcLx5vBj2KgQq7gcdJfVp3ybzB6t1AHGm7g== dependencies: "@babel/plugin-transform-classes" "^7.9.5" - medusa-core-utils "^1.1.23" + medusa-core-utils "^1.1.26" randomatic "^3.1.1" merge-descriptors@1.0.1: @@ -5321,17 +5653,17 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.49.0: - version "1.49.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.32" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.49.0" + mime-db "1.51.0" mime@1.6.0, mime@^1.4.1: version "1.6.0" @@ -5398,9 +5730,9 @@ mixin-deep@^1.2.0: minimist "^1.2.5" moment-timezone@^0.5.31: - version "0.5.33" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.33.tgz#b252fd6bb57f341c9b59a5ab61a8e51a73bbd22c" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== + version "0.5.34" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c" + integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg== dependencies: moment ">= 2.9.0" @@ -5459,11 +5791,6 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nanocolors@^0.2.12: - version "0.2.12" - resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.12.tgz#4d05932e70116078673ea4cc6699a1c56cc77777" - integrity sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5586,25 +5913,25 @@ node-pre-gyp@^0.11.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.76: - version "1.1.76" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.76.tgz#df245b062b0cafbd5282ab6792f7dccc2d97f36e" - integrity sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== nodemon@^2.0.1: - version "2.0.13" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.13.tgz#67d40d3a4d5bd840aa785c56587269cfcf5d24aa" - integrity sha512-UMXMpsZsv1UXUttCn6gv8eQPhn6DR4BW+txnL3IN5IHqrCwcrT/yWHfL35UsClGXknTH79r5xbu+6J1zNHuSyA== + version "2.0.15" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.15.tgz#504516ce3b43d9dc9a955ccd9ec57550a31a8d4e" + integrity sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA== dependencies: - chokidar "^3.2.2" - debug "^3.2.6" + chokidar "^3.5.2" + debug "^3.2.7" ignore-by-default "^1.0.1" minimatch "^3.0.4" - pstree.remy "^1.1.7" + pstree.remy "^1.1.8" semver "^5.7.1" supports-color "^5.5.0" touch "^3.1.0" - undefsafe "^2.0.3" + undefsafe "^2.0.5" update-notifier "^5.1.0" "nopt@2 || 3": @@ -5763,13 +6090,13 @@ object.assign@^4.1.0, object.assign@^4.1.2: object-keys "^1.1.1" object.getownpropertydescriptors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" object.pick@^1.3.0: version "1.3.0" @@ -5812,15 +6139,15 @@ onetime@^5.1.0, onetime@^5.1.2: mimic-fn "^2.1.0" open@^8.0.6: - version "8.2.1" - resolved "https://registry.yarnpkg.com/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af" - integrity sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ== + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== dependencies: define-lazy-prop "^2.0.0" is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -5832,6 +6159,18 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ora@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" @@ -6122,6 +6461,11 @@ pgpass@1.x: dependencies: split2 "^3.1.1" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -6178,6 +6522,11 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -6219,15 +6568,15 @@ progress@^2.0.0: integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 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" - integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz#d3186e58fcf4df1682a150f934ccc27b7893389c" + integrity sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" - function-bind "^1.1.1" + es-abstract "^1.19.1" -prompts@^2.0.1, prompts@^2.4.1: +prompts@^2.0.1: version "2.4.1" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61" integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== @@ -6235,6 +6584,14 @@ prompts@^2.0.1, prompts@^2.4.1: kleur "^3.0.3" sisteransi "^1.0.5" +prompts@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + proxy-addr@~2.0.5: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -6248,7 +6605,7 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pstree.remy@^1.1.7: +pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== @@ -6488,10 +6845,10 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== regexpu-core@^4.7.1: version "4.8.0" @@ -6605,6 +6962,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -6677,14 +7039,7 @@ rimraf@2, rimraf@^2.6.1: dependencies: glob "^7.1.3" -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -6708,17 +7063,10 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - rxjs@^7.2.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.3.0.tgz#39fe4f3461dc1e50be1475b2b85a0a88c1e938c6" - integrity sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw== + version "7.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== dependencies: tslib "~2.1.0" @@ -6803,7 +7151,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -6929,14 +7277,14 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" snapdragon-node@^2.0.1: version "2.1.1" @@ -7139,24 +7487,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - 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" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - 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" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7165,6 +7496,14 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.1.1: + version "2.1.1" + 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" + strip-ansi "^4.0.0" + string.prototype.trimend@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" @@ -7214,7 +7553,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -7243,7 +7582,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.0.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -7311,15 +7650,16 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@^6.0.9: + version "6.7.3" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" + integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" tar@^2.0.0: version "2.2.2" @@ -7387,7 +7727,7 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -7475,7 +7815,7 @@ triple-beam@^1.2.0, triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -tslib@^1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -7502,6 +7842,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -7554,6 +7901,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^4.4.4: + version "4.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" + integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== + uid-safe@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" @@ -7576,12 +7928,10 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" -undefsafe@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -7751,6 +8101,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validator@^13.5.2: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -7852,11 +8207,11 @@ which@^2.0.1, which@^2.0.2: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" widest-line@^3.1.0: version "3.1.0" @@ -7888,7 +8243,7 @@ winston@^3.2.1, winston@^3.3.3: triple-beam "^1.3.0" winston-transport "^4.4.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -7935,13 +8290,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - ws@^7.0.0: version "7.5.5" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" diff --git a/yarn.lock b/yarn.lock index aed4c7b686..7f7d09c054 100644 --- a/yarn.lock +++ b/yarn.lock @@ -144,28 +144,28 @@ resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267" integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== -"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": +"@babel/code-frame@7.10.4", "@babel/code-frame@^7.0.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.14.5", "@babel/code-frame@^7.5.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/code-frame@^7.16.0": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: "@babel/highlight" "^7.16.0" -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.12.7", "@babel/compat-data@^7.15.0": +"@babel/code-frame@^7.5.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.10.4": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== @@ -184,6 +184,11 @@ 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.15.0", "@babel/compat-data@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" + integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -278,16 +283,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.11.5": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== - dependencies: - "@babel/types" "^7.11.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.12.15", "@babel/generator@^7.14.5": +"@babel/generator@^7.12.15": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== @@ -305,37 +301,21 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@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== +"@babel/generator@^7.14.5", "@babel/generator@^7.15.0", "@babel/generator@^7.15.4", "@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== dependencies: - "@babel/types" "^7.15.0" + "@babel/types" "^7.16.0" 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== +"@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== 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" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.0" "@babel/helper-annotate-as-pure@^7.15.4": version "7.15.4" @@ -352,13 +332,13 @@ "@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" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5", "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" + integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-explode-assignable-expression" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/helper-compilation-targets@^7.10.4": version "7.10.4" @@ -371,16 +351,6 @@ levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-compilation-targets@^7.12.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.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - "@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" @@ -391,6 +361,16 @@ browserslist "^4.16.6" semver "^6.3.0" +"@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.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-compilation-targets@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" @@ -401,6 +381,16 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.17.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.15.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" @@ -413,7 +403,19 @@ "@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": +"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" + integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + +"@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" integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== @@ -434,12 +436,12 @@ "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== +"@babel/helper-create-regexp-features-plugin@^7.14.5", "@babel/helper-create-regexp-features-plugin@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" + integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" regexpu-core "^4.7.1" "@babel/helper-define-map@^7.10.4": @@ -465,12 +467,19 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== +"@babel/helper-define-polyfill-provider@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz#8867aed79d3ea6cade40f801efb7ac5c66916b10" + integrity sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ== dependencies: - "@babel/types" "^7.14.5" + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" "@babel/helper-explode-assignable-expression@^7.15.4": version "7.15.4" @@ -479,67 +488,42 @@ 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" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-explode-assignable-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" + integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.16.0" -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== +"@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.15.4", "@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" -"@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== +"@babel/helper-get-function-arity@^7.10.4", "@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@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" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - 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": +"@babel/helper-hoist-variables@^7.10.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" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== +"@babel/helper-hoist-variables@^7.14.5", "@babel/helper-hoist-variables@^7.15.4", "@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.0" "@babel/helper-member-expression-to-functions@^7.10.4": version "7.11.0" @@ -555,26 +539,12 @@ dependencies: "@babel/types" "^7.12.7" -"@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.14.5", "@babel/helper-member-expression-to-functions@^7.15.4", "@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== dependencies: - "@babel/types" "^7.14.5" - -"@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.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/types" "^7.16.0" "@babel/helper-module-imports@^7.10.4": version "7.10.4" @@ -583,27 +553,20 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": - version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" - integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== +"@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.14.5", "@babel/helper-module-imports@^7.15.4", "@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== dependencies: - "@babel/types" "^7.12.5" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": +"@babel/helper-module-imports@^7.12.13": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== 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" @@ -617,7 +580,7 @@ "@babel/types" "^7.11.0" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.15.4": +"@babel/helper-module-transforms@^7.10.5": 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== @@ -646,7 +609,21 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": +"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + +"@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== @@ -667,19 +644,12 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== +"@babel/helper-optimise-call-expression@^7.14.5", "@babel/helper-optimise-call-expression@^7.15.4", "@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== 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/types" "^7.16.0" "@babel/helper-plugin-utils@7.10.4": version "7.10.4" @@ -707,23 +677,14 @@ "@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" - integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== +"@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.0.tgz#d5aa3b086e13a5fe05238ff40c3a5a0c2dab3ead" + integrity sha512-MLM1IOMe9aQBqMWxcRw8dcb9jlM86NIw7KA0Wri91Xkfied+dE0QuBFSBjMNvqzmS0OSIDsMNC24dBEkPUi7ew== dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/types" "^7.12.1" - -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-wrap-function" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/helper-replace-supers@^7.10.4": version "7.10.4" @@ -745,25 +706,15 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@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== +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0", "@babel/helper-replace-supers@^7.15.4", "@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.0" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@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-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/helper-simple-access@^7.10.4": version "7.10.4" @@ -787,19 +738,12 @@ dependencies: "@babel/types" "^7.14.5" -"@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== +"@babel/helper-simple-access@^7.14.8", "@babel/helper-simple-access@^7.15.4", "@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== 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/types" "^7.16.0" "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" @@ -808,12 +752,12 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== dependencies: - "@babel/types" "^7.14.5" + "@babel/types" "^7.16.0" "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": version "7.15.4" @@ -822,26 +766,19 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": +"@babel/helper-split-export-declaration@^7.10.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== +"@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.14.5", "@babel/helper-split-export-declaration@^7.15.4", "@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== 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/types" "^7.16.0" "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" @@ -858,36 +795,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/helper-validator-option@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" - integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== - "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@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" @@ -898,6 +810,16 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-wrap-function@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" + integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== + dependencies: + "@babel/helper-function-name" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" + "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" @@ -934,25 +856,7 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.16.0": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5", "@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== @@ -973,21 +877,33 @@ regenerator-runtime "^0.13.4" v8flags "^3.1.1" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.12.7", "@babel/parser@^7.15.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.7": 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/parser@^7.12.16", "@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7": +"@babel/parser@^7.12.16", "@babel/parser@^7.14.6": 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.15.4", "@babel/parser@^7.15.5", "@babel/parser@^7.3.3": +"@babel/parser@^7.14.7", "@babel/parser@^7.15.0", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.3.tgz#271bafcb811080905a119222edbc17909c82261d" + integrity sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw== + +"@babel/parser@^7.15.5", "@babel/parser@^7.3.3": 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-safari-id-destructuring-collision-in-function-expression@^7.16.0": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" + integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@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" @@ -1006,6 +922,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" + integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -1015,15 +940,6 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-async-generator-functions@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" - integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@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" @@ -1042,6 +958,15 @@ "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" +"@babel/plugin-proposal-async-generator-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.0.tgz#11425d47a60364352f668ad5fbc1d6596b2c5caf" + integrity sha512-nyYmIo7ZqKsY6P4lnVmBlxp9B3a96CscbLotlsNuktMHahkDwoPYEjXrZHU0Tj844Z9f1IthVxQln57mhkcExw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" @@ -1050,7 +975,7 @@ "@babel/helper-create-class-features-plugin" "^7.12.1" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.14.5": +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== @@ -1058,6 +983,14 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" + integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-proposal-class-static-block@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" @@ -1076,14 +1009,23 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.12.1": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz#59bc4dfc1d665b5a6749cf798ff42297ed1b2c1d" - integrity sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg== +"@babel/plugin-proposal-class-static-block@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" + integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@^7.12.1": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.0.tgz#515db5f6891611c0d176b63ede0844fbd9be797b" + integrity sha512-ttvhKuVnQwoNQrcTd1oe6o49ahaZ1kns1fsJKzTVOaS/FJDJoK4qzgVS68xzJhYUMgTnbXW6z/T6rlP3lL7tJw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators" "^7.16.0" "@babel/plugin-proposal-dynamic-import@^7.10.4": version "7.10.4" @@ -1093,7 +1035,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.12.1", "@babel/plugin-proposal-dynamic-import@^7.14.5": +"@babel/plugin-proposal-dynamic-import@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== @@ -1101,6 +1043,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" +"@babel/plugin-proposal-dynamic-import@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" + integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-namespace-from@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" @@ -1109,7 +1059,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.12.1", "@babel/plugin-proposal-export-namespace-from@^7.14.5": +"@babel/plugin-proposal-export-namespace-from@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== @@ -1117,6 +1067,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" + integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" @@ -1125,14 +1083,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" - integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-proposal-json-strings@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" @@ -1141,6 +1091,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/plugin-proposal-json-strings@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" + integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-proposal-logical-assignment-operators@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" @@ -1149,7 +1107,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-logical-assignment-operators@^7.12.1", "@babel/plugin-proposal-logical-assignment-operators@^7.14.5": +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== @@ -1157,6 +1115,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" + integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" @@ -1165,14 +1131,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" - integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" @@ -1181,6 +1139,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" + integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" @@ -1189,7 +1155,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-numeric-separator@^7.12.7", "@babel/plugin-proposal-numeric-separator@^7.14.5": +"@babel/plugin-proposal-numeric-separator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== @@ -1197,7 +1163,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.12.1": +"@babel/plugin-proposal-numeric-separator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" + integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -1237,6 +1211,17 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.15.4" +"@babel/plugin-proposal-object-rest-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" + integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" @@ -1245,14 +1230,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-catch-binding@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" - integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-proposal-optional-catch-binding@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" @@ -1261,6 +1238,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" +"@babel/plugin-proposal-optional-catch-binding@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" + integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" @@ -1270,7 +1255,16 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.14.5": +"@babel/plugin-proposal-optional-chaining@^7.14.2", "@babel/plugin-proposal-optional-chaining@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" + integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== @@ -1287,7 +1281,7 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5": +"@babel/plugin-proposal-private-methods@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== @@ -1295,6 +1289,14 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-methods@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" + integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" @@ -1315,6 +1317,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" + integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" @@ -1323,7 +1335,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== @@ -1331,6 +1343,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" + integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -1345,7 +1365,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.12.1", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -1359,10 +1379,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz#eafb9c0cbe09c8afeb964ba3a7bbd63945a72f20" - integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw== +"@babel/plugin-syntax-decorators@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.0.tgz#eb8d811cdd1060f6ac3c00956bf3f6335505a32f" + integrity sha512-nxnnngZClvlY13nHJAIDow0S7Qzhq64fQ/NlqS+VER3kjW/4F0jLhXjeL8jcwSwz6Ca3rotT5NJD2T9I7lcv7g== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -1471,7 +1491,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@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": +"@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== @@ -1485,6 +1505,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-arrow-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" @@ -1492,13 +1519,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-arrow-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" + integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-async-to-generator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" @@ -1508,7 +1542,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.12.1", "@babel/plugin-transform-async-to-generator@^7.14.5": +"@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== @@ -1517,6 +1551,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" +"@babel/plugin-transform-async-to-generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" + integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== + dependencies: + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" @@ -1524,13 +1567,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.12.1", "@babel/plugin-transform-block-scoped-functions@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-block-scoped-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" + integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-block-scoping@^7.10.4": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" @@ -1538,17 +1588,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.15.3": +"@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== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.15.3": 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" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== +"@babel/plugin-transform-block-scoping@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" + integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -1566,17 +1623,17 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@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== +"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" + integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" globals "^11.1.0" "@babel/plugin-transform-classes@^7.14.5": @@ -1612,13 +1669,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-computed-properties@^7.12.1", "@babel/plugin-transform-computed-properties@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-computed-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" + integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-destructuring@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" @@ -1626,13 +1690,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-destructuring@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" + integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-dotall-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" @@ -1641,7 +1712,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.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": +"@babel/plugin-transform-dotall-regex@^7.14.5": 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== @@ -1649,6 +1720,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" + integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" @@ -1656,13 +1735,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.12.1", "@babel/plugin-transform-duplicate-keys@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-duplicate-keys@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" + integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" @@ -1671,7 +1757,7 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.12.1", "@babel/plugin-transform-exponentiation-operator@^7.14.5": +"@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== @@ -1679,6 +1765,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-exponentiation-operator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" + integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-flow-strip-types@^7.12.10", "@babel/plugin-transform-flow-strip-types@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz#0dc9c1d11dcdc873417903d6df4bed019ef0f85e" @@ -1694,17 +1788,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.15.4": +"@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" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-for-of@^7.15.4": 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" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== +"@babel/plugin-transform-for-of@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" + integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -1716,7 +1817,7 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.12.1", "@babel/plugin-transform-function-name@^7.14.5": +"@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== @@ -1724,6 +1825,14 @@ "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" + integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== + dependencies: + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-instanceof@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.10.4.tgz#05dad934f26e887c0009f6685a6e14fdd962120b" @@ -1732,11 +1841,11 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-instanceof@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.12.1.tgz#085dc5160384a2bdc94c2f51158fab77b70ea73f" - integrity sha512-3sq5iK6kcvYm56NUVEo623eXmSgTT6rUEqrySOtC4IQ+pWAVtPRTkCirXoRhxHxjOdH8wg9L8mftmzUFaHtfAQ== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-instanceof/-/plugin-transform-instanceof-7.16.0.tgz#2dead81e9ba3e11d6378172ff3fab9967bd2307d" + integrity sha512-12b9/GJI9qisUpZtWlR5bf+ZD1DeNUzM6J4CbQTP7Zega6brRKHRSGDuQc5eJywGHni6Ib/l3RumF9vQ6CD6EQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-literals@^7.10.4": version "7.10.4" @@ -1745,13 +1854,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.12.1", "@babel/plugin-transform-literals@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" + integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" @@ -1759,13 +1875,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.12.1", "@babel/plugin-transform-member-expression-literals@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-member-expression-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" + integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-modules-amd@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" @@ -1775,7 +1898,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.12.1", "@babel/plugin-transform-modules-amd@^7.14.5": +"@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== @@ -1784,6 +1907,15 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" + integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" @@ -1794,16 +1926,6 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.12.1", "@babel/plugin-transform-modules-commonjs@^7.15.4": - 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" @@ -1814,6 +1936,26 @@ "@babel/helper-simple-access" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.15.4": + 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.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" + integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.16.0" + 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" @@ -1824,17 +1966,6 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.12.1", "@babel/plugin-transform-modules-systemjs@^7.15.4": - 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" @@ -1846,6 +1977,28 @@ "@babel/helper-validator-identifier" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.15.4": + 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.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" + integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== + dependencies: + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.15.7" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" @@ -1854,7 +2007,7 @@ "@babel/helper-module-transforms" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.12.1", "@babel/plugin-transform-modules-umd@^7.14.5": +"@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== @@ -1862,6 +2015,14 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-modules-umd@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" + integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" @@ -1869,13 +2030,6 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1", "@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-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" @@ -1883,6 +2037,20 @@ 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-named-capturing-groups-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" + integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@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" @@ -1890,13 +2058,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-new-target@^7.12.1", "@babel/plugin-transform-new-target@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-new-target@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" + integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" @@ -1905,7 +2080,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-object-super@^7.12.1", "@babel/plugin-transform-object-super@^7.14.5": +"@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== @@ -1913,6 +2088,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" +"@babel/plugin-transform-object-super@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" + integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/plugin-transform-parameters@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" @@ -1921,12 +2104,12 @@ "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-parameters@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" - integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" + integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-parameters@^7.14.5": version "7.14.5" @@ -1949,13 +2132,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.12.1", "@babel/plugin-transform-property-literals@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-property-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" + integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-react-constant-elements@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" @@ -2014,7 +2204,14 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.14.5": +"@babel/plugin-transform-regenerator@^7.12.1", "@babel/plugin-transform-regenerator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" + integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== + dependencies: + regenerator-transform "^0.14.2" + +"@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== @@ -2028,13 +2225,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-reserved-words@^7.12.1", "@babel/plugin-transform-reserved-words@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-reserved-words@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" + integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-runtime@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" @@ -2046,14 +2250,16 @@ semver "^5.5.1" "@babel/plugin-transform-runtime@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" - integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.0.tgz#3fe0da36c2f0834bef7c4d3e7f2b2db0ee0c8909" + integrity sha512-zlPf1/XFn5+vWdve3AAhf+Sxl+MVa5VlwTwWgnLx23u4GlatSRQJ3Eoo9vllf0a9il3woQsT4SK+5Z7c06h8ag== dependencies: - "@babel/helper-module-imports" "^7.12.1" - "@babel/helper-plugin-utils" "^7.10.4" - resolve "^1.8.1" - semver "^5.5.1" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" + semver "^6.3.0" "@babel/plugin-transform-runtime@^7.12.15": version "7.14.5" @@ -2074,13 +2280,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-shorthand-properties@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" + integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" @@ -2089,7 +2302,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.14.6": +"@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== @@ -2097,6 +2310,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" +"@babel/plugin-transform-spread@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" + integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-transform-sticky-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" @@ -2105,13 +2326,20 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-sticky-regex@^7.12.7", "@babel/plugin-transform-sticky-regex@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-sticky-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" + integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-template-literals@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" @@ -2120,13 +2348,20 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-template-literals@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" + integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-typeof-symbol@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" @@ -2134,13 +2369,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-typeof-symbol@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" + integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-typescript@^7.14.5": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c" @@ -2150,6 +2392,15 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript" "^7.14.5" +"@babel/plugin-transform-typescript@^7.16.0": + version "7.16.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" + integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.16.0" + "@babel/plugin-transform-unicode-escapes@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" @@ -2157,13 +2408,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-escapes@^7.12.1", "@babel/plugin-transform-unicode-escapes@^7.14.5": +"@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== dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-escapes@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" + integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-unicode-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" @@ -2172,7 +2430,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.12.1", "@babel/plugin-transform-unicode-regex@^7.14.5": +"@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== @@ -2180,6 +2438,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-regex@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" + integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/preset-env@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" @@ -2413,76 +2679,84 @@ semver "^6.3.0" "@babel/preset-env@^7.12.7": - version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.7.tgz#54ea21dbe92caf6f10cb1a0a576adc4ebf094b55" - integrity sha512-OnNdfAr1FUQg7ksb7bmbKoby4qFOHw6DKWWUNB9KqnnCldxhxJlP+21dpyaWFmf2h0rTbOkXJtAGevY3XW1eew== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.0.tgz#97228393d217560d6a1c6c56f0adb9d12bca67f5" + integrity sha512-cdTu/W0IrviamtnZiTfixPfIncr2M1VqRrkjzZWlr1B4TVYimCFK5jkyOdP4qw2MrlKHi+b3ORj6x8GoCew8Dg== dependencies: - "@babel/compat-data" "^7.12.7" - "@babel/helper-compilation-targets" "^7.12.5" - "@babel/helper-module-imports" "^7.12.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-validator-option" "^7.12.1" - "@babel/plugin-proposal-async-generator-functions" "^7.12.1" - "@babel/plugin-proposal-class-properties" "^7.12.1" - "@babel/plugin-proposal-dynamic-import" "^7.12.1" - "@babel/plugin-proposal-export-namespace-from" "^7.12.1" - "@babel/plugin-proposal-json-strings" "^7.12.1" - "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" - "@babel/plugin-proposal-numeric-separator" "^7.12.7" - "@babel/plugin-proposal-object-rest-spread" "^7.12.1" - "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.12.7" - "@babel/plugin-proposal-private-methods" "^7.12.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.12.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-async-generator-functions" "^7.16.0" + "@babel/plugin-proposal-class-properties" "^7.16.0" + "@babel/plugin-proposal-class-static-block" "^7.16.0" + "@babel/plugin-proposal-dynamic-import" "^7.16.0" + "@babel/plugin-proposal-export-namespace-from" "^7.16.0" + "@babel/plugin-proposal-json-strings" "^7.16.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" + "@babel/plugin-proposal-numeric-separator" "^7.16.0" + "@babel/plugin-proposal-object-rest-spread" "^7.16.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-private-methods" "^7.16.0" + "@babel/plugin-proposal-private-property-in-object" "^7.16.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.12.1" - "@babel/plugin-transform-arrow-functions" "^7.12.1" - "@babel/plugin-transform-async-to-generator" "^7.12.1" - "@babel/plugin-transform-block-scoped-functions" "^7.12.1" - "@babel/plugin-transform-block-scoping" "^7.12.1" - "@babel/plugin-transform-classes" "^7.12.1" - "@babel/plugin-transform-computed-properties" "^7.12.1" - "@babel/plugin-transform-destructuring" "^7.12.1" - "@babel/plugin-transform-dotall-regex" "^7.12.1" - "@babel/plugin-transform-duplicate-keys" "^7.12.1" - "@babel/plugin-transform-exponentiation-operator" "^7.12.1" - "@babel/plugin-transform-for-of" "^7.12.1" - "@babel/plugin-transform-function-name" "^7.12.1" - "@babel/plugin-transform-literals" "^7.12.1" - "@babel/plugin-transform-member-expression-literals" "^7.12.1" - "@babel/plugin-transform-modules-amd" "^7.12.1" - "@babel/plugin-transform-modules-commonjs" "^7.12.1" - "@babel/plugin-transform-modules-systemjs" "^7.12.1" - "@babel/plugin-transform-modules-umd" "^7.12.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" - "@babel/plugin-transform-new-target" "^7.12.1" - "@babel/plugin-transform-object-super" "^7.12.1" - "@babel/plugin-transform-parameters" "^7.12.1" - "@babel/plugin-transform-property-literals" "^7.12.1" - "@babel/plugin-transform-regenerator" "^7.12.1" - "@babel/plugin-transform-reserved-words" "^7.12.1" - "@babel/plugin-transform-shorthand-properties" "^7.12.1" - "@babel/plugin-transform-spread" "^7.12.1" - "@babel/plugin-transform-sticky-regex" "^7.12.7" - "@babel/plugin-transform-template-literals" "^7.12.1" - "@babel/plugin-transform-typeof-symbol" "^7.12.1" - "@babel/plugin-transform-unicode-escapes" "^7.12.1" - "@babel/plugin-transform-unicode-regex" "^7.12.1" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.12.7" - core-js-compat "^3.7.0" - semver "^5.5.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.0" + "@babel/plugin-transform-async-to-generator" "^7.16.0" + "@babel/plugin-transform-block-scoped-functions" "^7.16.0" + "@babel/plugin-transform-block-scoping" "^7.16.0" + "@babel/plugin-transform-classes" "^7.16.0" + "@babel/plugin-transform-computed-properties" "^7.16.0" + "@babel/plugin-transform-destructuring" "^7.16.0" + "@babel/plugin-transform-dotall-regex" "^7.16.0" + "@babel/plugin-transform-duplicate-keys" "^7.16.0" + "@babel/plugin-transform-exponentiation-operator" "^7.16.0" + "@babel/plugin-transform-for-of" "^7.16.0" + "@babel/plugin-transform-function-name" "^7.16.0" + "@babel/plugin-transform-literals" "^7.16.0" + "@babel/plugin-transform-member-expression-literals" "^7.16.0" + "@babel/plugin-transform-modules-amd" "^7.16.0" + "@babel/plugin-transform-modules-commonjs" "^7.16.0" + "@babel/plugin-transform-modules-systemjs" "^7.16.0" + "@babel/plugin-transform-modules-umd" "^7.16.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" + "@babel/plugin-transform-new-target" "^7.16.0" + "@babel/plugin-transform-object-super" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-transform-property-literals" "^7.16.0" + "@babel/plugin-transform-regenerator" "^7.16.0" + "@babel/plugin-transform-reserved-words" "^7.16.0" + "@babel/plugin-transform-shorthand-properties" "^7.16.0" + "@babel/plugin-transform-spread" "^7.16.0" + "@babel/plugin-transform-sticky-regex" "^7.16.0" + "@babel/plugin-transform-template-literals" "^7.16.0" + "@babel/plugin-transform-typeof-symbol" "^7.16.0" + "@babel/plugin-transform-unicode-escapes" "^7.16.0" + "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.0" + babel-plugin-polyfill-corejs2 "^0.2.3" + babel-plugin-polyfill-corejs3 "^0.3.0" + babel-plugin-polyfill-regenerator "^0.2.3" + core-js-compat "^3.19.0" + semver "^6.3.0" "@babel/preset-flow@^7.12.1": version "7.14.5" @@ -2493,7 +2767,18 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-flow-strip-types" "^7.14.5" -"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.4": +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== @@ -2525,6 +2810,15 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-typescript" "^7.14.5" +"@babel/preset-typescript@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac" + integrity sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-typescript" "^7.16.0" + "@babel/register@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.11.5.tgz#79becf89e0ddd0fba8b92bc279bc0f5d2d7ce2ea" @@ -2562,28 +2856,28 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.11.2", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.11.2": 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" -"@babel/runtime@^7.16.0": +"@babel/runtime@^7.16.0", "@babel/runtime@^7.8.4": version "7.16.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== +"@babel/template@^7.10.4", "@babel/template@^7.14.5", "@babel/template@^7.15.4", "@babel/template@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" "@babel/template@^7.12.7", "@babel/template@^7.3.3": version "7.12.7" @@ -2594,24 +2888,6 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@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" @@ -2627,22 +2903,22 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/traverse@^7.10.4", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.19" -"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": +"@babel/traverse@^7.12.13", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0": version "7.14.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== @@ -2657,37 +2933,7 @@ debug "^4.1.0" globals "^11.1.0" -"@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.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.15.0" - "@babel/types" "^7.15.0" - 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": +"@babel/types@^7.0.0", "@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" integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== @@ -2696,7 +2942,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.4.4": +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.14.5", "@babel/types@^7.15.0", "@babel/types@^7.15.4", "@babel/types@^7.16.0", "@babel/types@^7.4.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + +"@babel/types@^7.10.5": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd" integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== @@ -2704,7 +2958,7 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.12.6", "@babel/types@^7.14.5": +"@babel/types@^7.12.6": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== @@ -2712,7 +2966,7 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" -"@babel/types@^7.14.9", "@babel/types@^7.15.4", "@babel/types@^7.15.6": +"@babel/types@^7.14.9", "@babel/types@^7.15.6": 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== @@ -3009,10 +3263,10 @@ resolve-pathname "^3.0.0" tslib "^2.2.0" -"@eslint/eslintrc@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.2.tgz#6044884f7f93c4ecc2d1694c7486cce91ef8f746" - integrity sha512-x1ZXdEFsvTcnbTZgqcWUL9w2ybgZCw/qbKTPQnab+XnYA2bMQpJCh+/bBzCRfDJaJdlrrQlOk49jNtru9gL/6Q== +"@eslint/eslintrc@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" + integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -3020,7 +3274,7 @@ globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -5169,6 +5423,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -5522,6 +5781,15 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.3.tgz#6ed8e30981b062f8fe6aca8873a37ebcc8cc1c0f" + integrity sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.4" + 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" @@ -5530,6 +5798,14 @@ babel-plugin-polyfill-corejs3@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" core-js-compat "^3.14.0" +babel-plugin-polyfill-corejs3@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.3.0.tgz#fa7ca3d1ee9ddc6193600ffb632c9785d54918af" + integrity sha512-JLwi9vloVdXLjzACL80j24bG6/T1gYxwowG44dg6HN/7aTPdyPbJJidf6ajoA3RPHHtW0j9KMrSOLpIZpAnPpg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.4" + core-js-compat "^3.18.0" + babel-plugin-polyfill-regenerator@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" @@ -5537,6 +5813,13 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" +babel-plugin-polyfill-regenerator@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.3.tgz#2e9808f5027c4336c994992b48a4262580cb8d6d" + integrity sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.4" + babel-plugin-transform-async-to-promises@^0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz#13b6d8ef13676b4e3c576d3600b85344bb1ba346" @@ -5583,9 +5866,9 @@ babel-preset-jest@^26.6.2: babel-preset-current-node-syntax "^1.0.0" babel-preset-medusa-package@^1.0.0: - 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== + version "1.1.18" + resolved "https://registry.yarnpkg.com/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.18.tgz#6a491ae387cf43a318835a5cb9620215b6af5155" + integrity sha512-BJJSbe7jh2qeuQEhMDbyZoWxEsMdENCXKc8lmfZpvPZtjcWNYHEuRqLJ1GdIEz2uYh+1RcPn5yk6xbjVHquV5g== dependencies: "@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1" @@ -5594,6 +5877,7 @@ babel-preset-medusa-package@^1.0.0: "@babel/plugin-transform-instanceof" "^7.12.1" "@babel/plugin-transform-runtime" "^7.12.1" "@babel/preset-env" "^7.12.7" + "@babel/preset-typescript" "^7.16.0" babel-plugin-transform-typescript-metadata "^0.3.1" core-js "^3.7.0" @@ -5782,7 +6066,7 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.16.0, browserslist@^4.16.6: +browserslist@^4.0.0, browserslist@^4.16.0: version "4.16.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== @@ -5814,7 +6098,18 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.75" -browserslist@^4.16.8, browserslist@^4.17.0: +browserslist@^4.16.6, browserslist@^4.17.0, browserslist@^4.17.5, browserslist@^4.17.6: + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== + dependencies: + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +browserslist@^4.16.8: version "4.17.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.0.tgz#1fcd81ec75b41d6d4994fb0831b92ac18c01649c" integrity sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g== @@ -6050,16 +6345,21 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001243: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001243: 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.30001124, caniuse-lite@^1.0.30001252, caniuse-lite@^1.0.30001254: +caniuse-lite@^1.0.30001124, caniuse-lite@^1.0.30001252: 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.30001219, caniuse-lite@^1.0.30001254, caniuse-lite@^1.0.30001274: + version "1.0.30001279" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz#eb06818da481ef5096a3b3760f43e5382ed6b0ce" + integrity sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ== + caniuse-lite@^1.0.30001251: version "1.0.30001252" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz#cb16e4e3dafe948fc4a9bb3307aea054b912019a" @@ -6486,17 +6786,7 @@ colord@^2.6: resolved "https://registry.yarnpkg.com/colord/-/colord-2.7.0.tgz#706ea36fe0cd651b585eb142fe64b6480185270e" integrity sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q== -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== - -colorette@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== - -colorette@^1.4.0: +colorette@^1.2.2, colorette@^1.3.0, colorette@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== @@ -6828,7 +7118,7 @@ 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, core-js-compat@^3.7.0: +core-js-compat@^3.16.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== @@ -6836,6 +7126,14 @@ core-js-compat@^3.16.0, core-js-compat@^3.7.0: browserslist "^4.17.0" semver "7.0.0" +core-js-compat@^3.18.0, core-js-compat@^3.19.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.1.tgz#fe598f1a9bf37310d77c3813968e9f7c7bb99476" + integrity sha512-Q/VJ7jAF/y68+aUsQJ/afPOewdsGkDtcMb40J8MbuWKlK3Y+wtHq8bTHKPj2WKWLIqmS5JhHs4CzHtz6pT2W6g== + dependencies: + browserslist "^4.17.6" + 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" @@ -6855,9 +7153,9 @@ core-js@^3.16.0: integrity sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw== core-js@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.7.0.tgz#b0a761a02488577afbf97179e4681bf49568520f" - integrity sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA== + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" + integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== core-js@^3.9.1: version "3.15.2" @@ -7235,7 +7533,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -7249,13 +7547,6 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -7684,16 +7975,21 @@ 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: +electron-to-chromium@^1.3.562: 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: +electron-to-chromium@^1.3.564: 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.723, electron-to-chromium@^1.3.830, electron-to-chromium@^1.3.886: + version "1.3.894" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.894.tgz#54554ecb40d40ddac7241c4a42887e86180015d8" + integrity sha512-WY8pA4irAZ4cm/Pr7YFPtPLVqj3nU6d0SbfoHF6M7HZNONfPdAnYAarumqQ75go2LuN72uO9wGuCEqnfya/ytg== + 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" @@ -7947,12 +8243,12 @@ eslint-visitor-keys@^3.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== -eslint@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.0.0.tgz#2c2d0ac6353755667ac90c9ff4a9c1315e43fcff" - integrity sha512-03spzPzMAO4pElm44m60Nj08nYonPGQXmw6Ceai/S4QK82IgwWO1EXx1s9namKzVlbVu3Jf81hb+N+8+v21/HQ== +eslint@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" + integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== dependencies: - "@eslint/eslintrc" "^1.0.2" + "@eslint/eslintrc" "^1.0.4" "@humanwhocodes/config-array" "^0.6.0" ajv "^6.10.0" chalk "^4.0.0" @@ -7986,7 +8282,7 @@ eslint@^8.0.0: progress "^2.0.0" regexpp "^3.2.0" semver "^7.2.1" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -9890,9 +10186,9 @@ is-color-stop@^1.1.0: rgba-regex "^1.0.0" is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" @@ -11237,7 +11533,7 @@ lodash.uniq@4.5.0, lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.19: +lodash@^4.17.11: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -11247,7 +11543,7 @@ lodash@^4.17.12, lodash@^4.17.15, lodash@^4.2.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12130,16 +12426,26 @@ node-readfiles@^0.2.0: dependencies: es6-promise "^3.2.1" -node-releases@^1.1.60, node-releases@^1.1.75: +node-releases@^1.1.60: 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: +node-releases@^1.1.61: 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.71, node-releases@^1.1.75: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -13013,6 +13319,11 @@ pgpass@1.x: dependencies: split2 "^3.1.1" +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + picomatch@^2.0.4, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -14108,7 +14419,14 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -14151,7 +14469,7 @@ regexpp@^3.1.0, regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^4.7.0, regexpu-core@^4.7.1: +regexpu-core@^4.7.0: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== @@ -14163,6 +14481,18 @@ regexpu-core@^4.7.0, regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -14177,7 +14507,7 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" -regjsgen@^0.5.1: +regjsgen@^0.5.1, regjsgen@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== @@ -14189,6 +14519,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + rehype-parse@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" @@ -15435,6 +15772,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" @@ -16122,6 +16466,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -16130,16 +16479,34 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + unified@9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8"