diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8142d3ea7..306676228 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,3 +33,9 @@ All notable, unreleased changes to this project will be documented in this file.
- Hide variants and attributes if product has none - #179 by @dominik-zeglen
- Add service account section - #188 by @dominik-zeglen
- Add webhook section - #206 by @benekex2
+- Add variant creator - #177 by @dominik-zeglen
+- Add git hooks - #209 by @dominik-zeglen
+- Do not send customer invitation email - #211 by @dominik-zeglen
+- Send address update mutation only once - #210 by @dominik-zeglen
+- Update sale details design - #207 by @dominik-zeglen
+
diff --git a/locale/messages.pot b/locale/messages.pot
index cbb6f26a6..a5f2fceae 100644
--- a/locale/messages.pot
+++ b/locale/messages.pot
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2019-10-04T11:19:12.447Z\n"
+"POT-Creation-Date: 2019-10-15T15:56:00.137Z\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"MIME-Version: 1.0\n"
@@ -99,6 +99,14 @@ msgctxt "staff member status"
msgid "Active"
msgstr ""
+#: build/locale/src/discounts/components/DiscountDates/DiscountDates.json
+#. [src.discounts.components.DiscountDates.1662220323] - time during discount is active, header
+#. defaultMessage is:
+#. Active Dates
+msgctxt "time during discount is active, header"
+msgid "Active Dates"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherDates/VoucherDates.json
#. [src.discounts.components.VoucherDates.1662220323] - time during voucher is active, header
#. defaultMessage is:
@@ -131,6 +139,22 @@ msgctxt "dialog title"
msgid "Add Address"
msgstr ""
+#: build/locale/src/collections/components/CollectionCreatePage/CollectionCreatePage.json
+#. [src.collections.components.CollectionCreatePage.951411809] - page header
+#. defaultMessage is:
+#. Add Collection
+msgctxt "page header"
+msgid "Add Collection"
+msgstr ""
+
+#: build/locale/src/customers/components/CustomerCreatePage/CustomerCreatePage.json
+#. [src.customers.components.CustomerCreatePage.2622255457] - page header
+#. defaultMessage is:
+#. Add Customer
+msgctxt "page header"
+msgid "Add Customer"
+msgstr ""
+
#: build/locale/src/components/Filter/Filter.json
#. [src.components.Filter.2852521946] - button
#. defaultMessage is:
@@ -171,6 +195,14 @@ msgctxt "dialog header"
msgid "Add Price Rate"
msgstr ""
+#: build/locale/src/orders/components/OrderFulfillmentTrackingDialog/OrderFulfillmentTrackingDialog.json
+#. [src.orders.components.OrderFulfillmentTrackingDialog.606831229] - dialog header
+#. defaultMessage is:
+#. Add Tracking Code
+msgctxt "dialog header"
+msgid "Add Tracking Code"
+msgstr ""
+
#: build/locale/src/attributes/components/AttributeValueEditDialog/AttributeValueEditDialog.json
#. [src.attributes.components.AttributeValueEditDialog.1841790893] - add attribute value
#. defaultMessage is:
@@ -203,22 +235,6 @@ msgctxt "button"
msgid "Add authentication"
msgstr ""
-#: build/locale/src/collections/components/CollectionCreatePage/CollectionCreatePage.json
-#. [src.collections.components.CollectionCreatePage.3958681866] - page header
-#. defaultMessage is:
-#. Add collection
-msgctxt "page header"
-msgid "Add collection"
-msgstr ""
-
-#: build/locale/src/customers/components/CustomerCreatePage/CustomerCreatePage.json
-#. [src.customers.components.CustomerCreatePage.1934221653] - page header
-#. defaultMessage is:
-#. Add customer
-msgctxt "page header"
-msgid "Add customer"
-msgstr ""
-
#: build/locale/src/customers/components/CustomerListPage/CustomerListPage.json
#. [src.customers.components.CustomerListPage.1934221653] - button
#. defaultMessage is:
@@ -359,14 +375,6 @@ msgctxt "fulfillment group tracking number"
msgid "Add tracking"
msgstr ""
-#: build/locale/src/orders/components/OrderFulfillmentTrackingDialog/OrderFulfillmentTrackingDialog.json
-#. [src.orders.components.OrderFulfillmentTrackingDialog.3680864271] - dialog header
-#. defaultMessage is:
-#. Add tracking code
-msgctxt "dialog header"
-msgid "Add tracking code"
-msgstr ""
-
#: build/locale/src/products/components/ProductVariantNavigation/ProductVariantNavigation.json
#. [src.products.components.ProductVariantNavigation.2845381934] - button
#. defaultMessage is:
@@ -639,6 +647,38 @@ msgctxt "voucher"
msgid "Applies to"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.2783195765]
+#. defaultMessage is:
+#. Apply single price to all SKUs
+msgctxt "description"
+msgid "Apply single price to all SKUs"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.3601538615]
+#. defaultMessage is:
+#. Apply single stock to all SKUs
+msgctxt "description"
+msgid "Apply single stock to all SKUs"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.3570949907]
+#. defaultMessage is:
+#. Apply unique prices by attribute to each SKU
+msgctxt "description"
+msgid "Apply unique prices by attribute to each SKU"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.3387090508]
+#. defaultMessage is:
+#. Apply unique stock by attribute to each SKU
+msgctxt "description"
+msgid "Apply unique stock by attribute to each SKU"
+msgstr ""
+
#: build/locale/src/orders/components/OrderCancelDialog/OrderCancelDialog.json
#. [src.orders.components.OrderCancelDialog.3981375672]
#. defaultMessage is:
@@ -1139,6 +1179,10 @@ msgctxt "description"
msgid "Are you sure you want to void this payment?"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.json
+#. [src.products.components.ProductVariantCreateDialog.3922579741] - dialog header
+#. defaultMessage is:
+#. Assign Attribute
#: build/locale/src/productTypes/components/AssignAttributeDialog/AssignAttributeDialog.json
#. [src.productTypes.components.AssignAttributeDialog.3922579741] - dialog header
#. defaultMessage is:
@@ -1267,6 +1311,14 @@ msgctxt "assign attribute value button"
msgid "Assign value"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.168343345] - variant attribute
+#. defaultMessage is:
+#. Attribute
+msgctxt "variant attribute"
+msgid "Attribute"
+msgstr ""
+
#: build/locale/src/attributes/components/AttributeDetails/AttributeDetails.json
#. [src.attributes.components.AttributeDetails.3605174225] - attribute's slug short code label
#. defaultMessage is:
@@ -1464,15 +1516,15 @@ msgid "Back to login"
msgstr ""
#: build/locale/src/categories/components/CategoryBackground/CategoryBackground.json
-#. [src.categories.components.CategoryBackground.1849089820] - section header
+#. [src.categories.components.CategoryBackground.2224943474] - section header
#. defaultMessage is:
-#. Background image (optional)
+#. Background Image (optional)
#: build/locale/src/collections/components/CollectionImage/CollectionImage.json
-#. [src.collections.components.CollectionImage.1849089820] - section header
+#. [src.collections.components.CollectionImage.2224943474] - section header
#. defaultMessage is:
-#. Background image (optional)
+#. Background Image (optional)
msgctxt "section header"
-msgid "Background image (optional)"
+msgid "Background Image (optional)"
msgstr ""
#: build/locale/src/misc.json
@@ -1483,6 +1535,14 @@ msgctxt "tax rate"
msgid "Bikes"
msgstr ""
+#: build/locale/src/customers/components/CustomerAddresses/CustomerAddresses.json
+#. [src.customers.components.CustomerAddresses.4282475982] - subsection header
+#. defaultMessage is:
+#. Billing Address
+msgctxt "subsection header"
+msgid "Billing Address"
+msgstr ""
+
#: build/locale/src/orders/components/OrderCustomer/OrderCustomer.json
#. [src.orders.components.OrderCustomer.4282475982]
#. defaultMessage is:
@@ -1491,14 +1551,6 @@ msgctxt "description"
msgid "Billing Address"
msgstr ""
-#: build/locale/src/customers/components/CustomerAddresses/CustomerAddresses.json
-#. [src.customers.components.CustomerAddresses.2428885633] - subsection header
-#. defaultMessage is:
-#. Billing address
-msgctxt "subsection header"
-msgid "Billing address"
-msgstr ""
-
#: build/locale/src/misc.json
#. [src.books] - tax rate
#. defaultMessage is:
@@ -1511,6 +1563,10 @@ msgstr ""
#. [src.cancel] - button
#. defaultMessage is:
#. Cancel
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.json
+#. [src.products.components.ProductVariantCreateDialog.3528672691] - button
+#. defaultMessage is:
+#. Cancel
msgctxt "button"
msgid "Cancel"
msgstr ""
@@ -1531,6 +1587,14 @@ msgctxt "dialog header"
msgid "Cancel Fulfillment"
msgstr ""
+#: build/locale/src/orders/components/OrderCancelDialog/OrderCancelDialog.json
+#. [src.orders.components.OrderCancelDialog.1258942306] - dialog header
+#. defaultMessage is:
+#. Cancel Order
+msgctxt "dialog header"
+msgid "Cancel Order"
+msgstr ""
+
#: build/locale/src/orders/components/OrderBulkCancelDialog/OrderBulkCancelDialog.json
#. [src.orders.components.OrderBulkCancelDialog.1528036340] - dialog header
#. defaultMessage is:
@@ -1547,14 +1611,6 @@ msgctxt "button"
msgid "Cancel fulfillment"
msgstr ""
-#: build/locale/src/orders/components/OrderCancelDialog/OrderCancelDialog.json
-#. [src.orders.components.OrderCancelDialog.1854613983] - dialog header
-#. defaultMessage is:
-#. Cancel order
-msgctxt "dialog header"
-msgid "Cancel order"
-msgstr ""
-
#: build/locale/src/orders/components/OrderDetailsPage/OrderDetailsPage.json
#. [src.orders.components.OrderDetailsPage.1854613983] - button
#. defaultMessage is:
@@ -1751,6 +1807,14 @@ msgctxt "tax rate"
msgid "Children's clothing"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.2670525734] - variant attribute
+#. defaultMessage is:
+#. Choose attribute
+msgctxt "variant attribute"
+msgid "Choose attribute"
+msgstr ""
+
#: build/locale/src/shipping/components/ShippingZoneCountriesAssignDialog/ShippingZoneCountriesAssignDialog.json
#. [src.shipping.components.ShippingZoneCountriesAssignDialog.2404264158]
#. defaultMessage is:
@@ -1928,11 +1992,11 @@ msgid "Confirm Password"
msgstr ""
#: build/locale/src/orders/components/OrderCustomer/OrderCustomer.json
-#. [src.orders.components.OrderCustomer.1111991638] - subheader
+#. [src.orders.components.OrderCustomer.2312694610] - subheader
#. defaultMessage is:
-#. Contact information
+#. Contact Information
msgctxt "subheader"
-msgid "Contact information"
+msgid "Contact Information"
msgstr ""
#: build/locale/src/pages/components/PageInfo/PageInfo.json
@@ -2139,6 +2203,14 @@ msgctxt "description"
msgid "Country area"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.json
+#. [src.products.components.ProductVariantCreateDialog.4120989039] - create multiple variants, button
+#. defaultMessage is:
+#. Create
+msgctxt "create multiple variants, button"
+msgid "Create"
+msgstr ""
+
#: build/locale/src/services/components/ServiceTokenCreateDialog/ServiceTokenCreateDialog.json
#. [src.services.components.ServiceTokenCreateDialog.4120989039] - create service token, button
#. defaultMessage is:
@@ -2203,6 +2275,14 @@ msgctxt "page header"
msgid "Create Page"
msgstr ""
+#: build/locale/src/pages/views/PageCreate.json
+#. [src.pages.views.1068617485] - header
+#. defaultMessage is:
+#. Create Page
+msgctxt "header"
+msgid "Create Page"
+msgstr ""
+
#: build/locale/src/orders/components/OrderProductAddDialog/OrderProductAddDialog.json
#. [src.orders.components.OrderProductAddDialog.1542417144] - dialog header
#. defaultMessage is:
@@ -2383,14 +2463,6 @@ msgctxt "button"
msgid "Create page"
msgstr ""
-#: build/locale/src/pages/views/PageCreate.json
-#. [src.pages.views.3785394515] - header
-#. defaultMessage is:
-#. Create page
-msgctxt "header"
-msgid "Create page"
-msgstr ""
-
#: build/locale/src/shipping/components/ShippingZoneRateDialog/ShippingZoneRateDialog.json
#. [src.shipping.components.ShippingZoneRateDialog.16061680] - button
#. defaultMessage is:
@@ -2435,6 +2507,14 @@ msgctxt "window title"
msgid "Create variant"
msgstr ""
+#: build/locale/src/products/components/ProductVariants/ProductVariants.json
+#. [src.products.components.ProductVariants.1721716102] - button
+#. defaultMessage is:
+#. Create variants
+msgctxt "button"
+msgid "Create variants"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherListPage/VoucherListPage.json
#. [src.discounts.components.VoucherListPage.614836274] - button
#. defaultMessage is:
@@ -2539,6 +2619,14 @@ msgctxt "description"
msgid "Customer Name"
msgstr ""
+#: build/locale/src/customers/components/CustomerCreateDetails/CustomerCreateDetails.json
+#. [src.customers.components.CustomerCreateDetails.3063084773] - header
+#. defaultMessage is:
+#. Customer Overview
+msgctxt "header"
+msgid "Customer Overview"
+msgstr ""
+
#: build/locale/src/customers/views/CustomerDetails.json
#. [src.customers.views.3901579344]
#. defaultMessage is:
@@ -2555,14 +2643,6 @@ msgctxt "description"
msgid "Customer created"
msgstr ""
-#: build/locale/src/customers/components/CustomerCreateDetails/CustomerCreateDetails.json
-#. [src.customers.components.CustomerCreateDetails.4157831287] - header
-#. defaultMessage is:
-#. Customer overview
-msgctxt "header"
-msgid "Customer overview"
-msgstr ""
-
#: build/locale/src/customers/components/CustomerDetails/CustomerDetails.json
#. [src.customers.components.CustomerDetails.2200102325] - section subheader
#. defaultMessage is:
@@ -2739,6 +2819,30 @@ msgctxt "dialog title"
msgid "Delete Collection"
msgstr ""
+#: build/locale/src/customers/views/CustomerDetails.json
+#. [src.customers.views.1998583641] - dialog header
+#. defaultMessage is:
+#. Delete Customer
+msgctxt "dialog header"
+msgid "Delete Customer"
+msgstr ""
+
+#: build/locale/src/customers/views/CustomerList/CustomerList.json
+#. [src.customers.views.CustomerList.2136923553] - dialog header
+#. defaultMessage is:
+#. Delete Customers
+msgctxt "dialog header"
+msgid "Delete Customers"
+msgstr ""
+
+#: build/locale/src/orders/components/OrderDraftCancelDialog/OrderDraftCancelDialog.json
+#. [src.orders.components.OrderDraftCancelDialog.1961675716] - dialog header
+#. defaultMessage is:
+#. Delete Daft Order
+msgctxt "dialog header"
+msgid "Delete Daft Order"
+msgstr ""
+
#: build/locale/src/products/views/ProductImage.json
#. [src.products.views.1731766393] - dialog header
#. defaultMessage is:
@@ -2747,6 +2851,26 @@ msgctxt "dialog header"
msgid "Delete Image"
msgstr ""
+#: build/locale/src/navigation/views/MenuDetails/index.json
+#. [menuDetailsDeleteMenuHeader] - dialog header
+#. defaultMessage is:
+#. Delete Menu
+#: build/locale/src/navigation/views/MenuList.json
+#. [menuListDeleteMenuHeader] - dialog header
+#. defaultMessage is:
+#. Delete Menu
+msgctxt "dialog header"
+msgid "Delete Menu"
+msgstr ""
+
+#: build/locale/src/navigation/views/MenuList.json
+#. [menuListDeleteMenusHeader] - dialog header
+#. defaultMessage is:
+#. Delete Menus
+msgctxt "dialog header"
+msgid "Delete Menus"
+msgstr ""
+
#: build/locale/src/orders/views/OrderDraftList/OrderDraftList.json
#. [src.orders.views.OrderDraftList.1161115149] - dialog header
#. defaultMessage is:
@@ -2987,36 +3111,12 @@ msgctxt "dialog title"
msgid "Delete collections"
msgstr ""
-#: build/locale/src/customers/views/CustomerDetails.json
-#. [src.customers.views.442409664] - dialog header
-#. defaultMessage is:
-#. Delete customer
-msgctxt "dialog header"
-msgid "Delete customer"
-msgstr ""
-
-#: build/locale/src/customers/views/CustomerList/CustomerList.json
-#. [src.customers.views.CustomerList.1946482599] - dialog header
-#. defaultMessage is:
-#. Delete customers
-msgctxt "dialog header"
-msgid "Delete customers"
-msgstr ""
-
-#: build/locale/src/orders/components/OrderDraftCancelDialog/OrderDraftCancelDialog.json
-#. [src.orders.components.OrderDraftCancelDialog.632633254] - dialog header
-#. defaultMessage is:
-#. Delete draft order
-msgctxt "dialog header"
-msgid "Delete draft order"
-msgstr ""
-
#: build/locale/src/shipping/views/ShippingZoneDetails/ShippingZoneDetailsDialogs.json
-#. [src.shipping.views.ShippingZoneDetails.1947090060] - unassign country, dialog header
+#. [src.shipping.views.ShippingZoneDetails.3133838427] - unassign country, dialog header
#. defaultMessage is:
-#. Delete from shipping zone
+#. Delete from Shipping Zone
msgctxt "unassign country, dialog header"
-msgid "Delete from shipping zone"
+msgid "Delete from Shipping Zone"
msgstr ""
#: build/locale/src/collections/views/CollectionDetails.json
@@ -3027,26 +3127,6 @@ msgctxt "dialog title"
msgid "Delete image"
msgstr ""
-#: build/locale/src/navigation/views/MenuDetails/index.json
-#. [menuDetailsDeleteMenuHeader] - dialog header
-#. defaultMessage is:
-#. Delete menu
-#: build/locale/src/navigation/views/MenuList.json
-#. [menuListDeleteMenuHeader] - dialog header
-#. defaultMessage is:
-#. Delete menu
-msgctxt "dialog header"
-msgid "Delete menu"
-msgstr ""
-
-#: build/locale/src/navigation/views/MenuList.json
-#. [menuListDeleteMenusHeader] - dialog header
-#. defaultMessage is:
-#. Delete menus
-msgctxt "dialog header"
-msgid "Delete menus"
-msgstr ""
-
#: build/locale/src/staff/components/StaffProperties/StaffProperties.json
#. [src.staff.components.StaffProperties.457748370] - button
#. defaultMessage is:
@@ -3163,12 +3243,12 @@ msgctxt "description"
msgid "Discount Code"
msgstr ""
-#: build/locale/src/discounts/components/VoucherValue/VoucherValue.json
-#. [src.discounts.components.VoucherValue.1971417066]
+#: build/locale/src/discounts/components/SaleType/SaleType.json
+#. [src.discounts.components.SaleType.3216816841] - percentage or fixed, header
#. defaultMessage is:
-#. Discount Specific Information
-msgctxt "description"
-msgid "Discount Specific Information"
+#. Discount Type
+msgctxt "percentage or fixed, header"
+msgid "Discount Type"
msgstr ""
#: build/locale/src/discounts/components/VoucherTypes/VoucherTypes.json
@@ -3179,10 +3259,14 @@ msgctxt "header"
msgid "Discount Type"
msgstr ""
-#: build/locale/src/discounts/components/SalePricing/SalePricing.json
-#. [src.discounts.components.SalePricing.1205967018]
+#: build/locale/src/discounts/components/SaleValue/SaleValue.json
+#. [src.discounts.components.SaleValue.1205967018] - sale discount
#. defaultMessage is:
#. Discount Value
+msgctxt "sale discount"
+msgid "Discount Value"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherValue/VoucherValue.json
#. [src.discounts.components.VoucherValue.1205967018]
#. defaultMessage is:
@@ -3319,6 +3403,22 @@ msgctxt "dialog title"
msgid "Edit Address"
msgstr ""
+#: build/locale/src/orders/components/OrderAddressEditDialog/OrderAddressEditDialog.json
+#. [src.orders.components.OrderAddressEditDialog.3982060155] - dialog header
+#. defaultMessage is:
+#. Edit Billing Address
+msgctxt "dialog header"
+msgid "Edit Billing Address"
+msgstr ""
+
+#: build/locale/src/orders/components/OrderCustomerEditDialog/OrderCustomerEditDialog.json
+#. [src.orders.components.OrderCustomerEditDialog.1549172886] - dialog header
+#. defaultMessage is:
+#. Edit Customer Details
+msgctxt "dialog header"
+msgid "Edit Customer Details"
+msgstr ""
+
#: build/locale/src/navigation/components/MenuItemDialog/MenuItemDialog.json
#. [menuItemDialogEditItem] - edit menu item, header
#. defaultMessage is:
@@ -3343,6 +3443,14 @@ msgctxt "dialog header"
msgid "Edit Price Rate"
msgstr ""
+#: build/locale/src/orders/components/OrderAddressEditDialog/OrderAddressEditDialog.json
+#. [src.orders.components.OrderAddressEditDialog.3278396777] - dialog header
+#. defaultMessage is:
+#. Edit Shipping Address
+msgctxt "dialog header"
+msgid "Edit Shipping Address"
+msgstr ""
+
#: build/locale/src/orders/components/OrderShippingMethodEditDialog/OrderShippingMethodEditDialog.json
#. [src.orders.components.OrderShippingMethodEditDialog.3369240294] - dialog header
#. defaultMessage is:
@@ -3367,30 +3475,6 @@ msgctxt "edit weight based shipping method, dialog header"
msgid "Edit Weight Rate"
msgstr ""
-#: build/locale/src/orders/components/OrderAddressEditDialog/OrderAddressEditDialog.json
-#. [src.orders.components.OrderAddressEditDialog.2935008093] - dialog header
-#. defaultMessage is:
-#. Edit billing address
-msgctxt "dialog header"
-msgid "Edit billing address"
-msgstr ""
-
-#: build/locale/src/orders/components/OrderCustomerEditDialog/OrderCustomerEditDialog.json
-#. [src.orders.components.OrderCustomerEditDialog.1411666943] - dialog header
-#. defaultMessage is:
-#. Edit customer details
-msgctxt "dialog header"
-msgid "Edit customer details"
-msgstr ""
-
-#: build/locale/src/orders/components/OrderAddressEditDialog/OrderAddressEditDialog.json
-#. [src.orders.components.OrderAddressEditDialog.462765358] - dialog header
-#. defaultMessage is:
-#. Edit shipping address
-msgctxt "dialog header"
-msgid "Edit shipping address"
-msgstr ""
-
#: build/locale/src/components/SeoForm/SeoForm.json
#. [src.components.SeoForm.3198271020] - button
#. defaultMessage is:
@@ -3563,6 +3647,14 @@ msgctxt "button"
msgid "Finalize"
msgstr ""
+#: build/locale/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.json
+#. [src.orders.components.OrderDraftFinalizeDialog.1161061962] - dialog header
+#. defaultMessage is:
+#. Finalize Draft Order
+msgctxt "dialog header"
+msgid "Finalize Draft Order"
+msgstr ""
+
#: build/locale/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.json
#. [src.orders.components.OrderDraftFinalizeDialog.678764806] - button
#. defaultMessage is:
@@ -3571,14 +3663,6 @@ msgctxt "button"
msgid "Finalize anyway"
msgstr ""
-#: build/locale/src/orders/components/OrderDraftFinalizeDialog/OrderDraftFinalizeDialog.json
-#. [src.orders.components.OrderDraftFinalizeDialog.845440998] - dialog header
-#. defaultMessage is:
-#. Finalize draft order
-msgctxt "dialog header"
-msgid "Finalize draft order"
-msgstr ""
-
#: build/locale/src/intl.json
#. [src.firstName]
#. defaultMessage is:
@@ -3587,6 +3671,14 @@ msgctxt "description"
msgid "First Name"
msgstr ""
+#: build/locale/src/discounts/components/SaleType/SaleType.json
+#. [src.discounts.components.SaleType.46415128] - discount type
+#. defaultMessage is:
+#. Fixed Amount
+msgctxt "discount type"
+msgid "Fixed Amount"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherTypes/VoucherTypes.json
#. [src.discounts.components.VoucherTypes.46415128] - voucher discount type
#. defaultMessage is:
@@ -3628,11 +3720,11 @@ msgid "Fulfill"
msgstr ""
#: build/locale/src/orders/components/OrderFulfillmentDialog/OrderFulfillmentDialog.json
-#. [src.orders.components.OrderFulfillmentDialog.3236546219] - dialog header
+#. [src.orders.components.OrderFulfillmentDialog.3928354289] - dialog header
#. defaultMessage is:
-#. Fulfill products
+#. Fulfill Oroducts
msgctxt "dialog header"
-msgid "Fulfill products"
+msgid "Fulfill Oroducts"
msgstr ""
#: build/locale/src/misc.json
@@ -3931,6 +4023,14 @@ msgctxt "product stock"
msgid "Inventory"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateSummary.json
+#. [src.products.components.ProductVariantCreateDialog.3490038570] - variant stock amount
+#. defaultMessage is:
+#. Inventory
+msgctxt "variant stock amount"
+msgid "Inventory"
+msgstr ""
+
#: build/locale/src/products/components/ProductVariantStock/ProductVariantStock.json
#. [src.products.components.ProductVariantStock.3490038570] - product variant stock
#. defaultMessage is:
@@ -4507,6 +4607,14 @@ msgctxt "tax rate"
msgid "Newspapers"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.json
+#. [src.products.components.ProductVariantCreateDialog.3673120330] - button
+#. defaultMessage is:
+#. Next
+msgctxt "button"
+msgid "Next"
+msgstr ""
+
#: build/locale/src/intl.json
#. [src.no]
#. defaultMessage is:
@@ -5519,6 +5627,14 @@ msgctxt "order history message"
msgid "Payment was voided"
msgstr ""
+#: build/locale/src/discounts/components/SaleType/SaleType.json
+#. [src.discounts.components.SaleType.3688224049] - discount type
+#. defaultMessage is:
+#. Percentage
+msgctxt "discount type"
+msgid "Percentage"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherTypes/VoucherTypes.json
#. [src.discounts.components.VoucherTypes.3688224049] - voucher discount type
#. defaultMessage is:
@@ -5651,6 +5767,14 @@ msgctxt "order payment"
msgid "Preauthorized amount"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateDialog.json
+#. [src.products.components.ProductVariantCreateDialog.904693740] - previous step, button
+#. defaultMessage is:
+#. Previous
+msgctxt "previous step, button"
+msgid "Previous"
+msgstr ""
+
#: build/locale/src/categories/components/CategoryProductList/CategoryProductList.json
#. [src.categories.components.CategoryProductList.1134347598] - product price
#. defaultMessage is:
@@ -5695,10 +5819,34 @@ msgstr ""
#. [src.products.components.ProductListFilter.1134347598]
#. defaultMessage is:
#. Price
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [productVariantCreatePricesPriceInputLabel]
+#. defaultMessage is:
+#. Price
msgctxt "description"
msgid "Price"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.1134347598] - variant price, header
+#. defaultMessage is:
+#. Price
+msgctxt "variant price, header"
+msgid "Price"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [productVariantCreatePricesSetPricePlaceholder] - variant price
+#. defaultMessage is:
+#. Price
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateSummary.json
+#. [src.products.components.ProductVariantCreateDialog.1134347598] - variant price
+#. defaultMessage is:
+#. Price
+msgctxt "variant price"
+msgid "Price"
+msgstr ""
+
#: build/locale/src/products/components/ProductVariants/ProductVariants.json
#. [src.products.components.ProductVariants.1134347598] - product variant price
#. defaultMessage is:
@@ -5747,12 +5895,12 @@ msgctxt "filter by price"
msgid "Price to {price}"
msgstr ""
-#: build/locale/src/discounts/components/SalePricing/SalePricing.json
-#. [src.discounts.components.SalePricing.1099355007] - sale pricing, header
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateTabs.json
+#. [src.products.components.ProductVariantCreateDialog.705096461] - variant creation step
#. defaultMessage is:
-#. Pricing
-msgctxt "sale pricing, header"
-msgid "Pricing"
+#. Prices and SKU
+msgctxt "variant creation step"
+msgid "Prices and SKU"
msgstr ""
#: build/locale/src/products/components/ProductPricing/ProductPricing.json
@@ -5772,11 +5920,11 @@ msgid "Pricing"
msgstr ""
#: build/locale/src/customers/components/CustomerCreateAddress/CustomerCreateAddress.json
-#. [src.customers.components.CustomerCreateAddress.1922654050] - page header
+#. [src.customers.components.CustomerCreateAddress.1751533141] - page header
#. defaultMessage is:
-#. Primary address
+#. Primary Address
msgctxt "page header"
-msgid "Primary address"
+msgid "Primary Address"
msgstr ""
#: build/locale/src/orders/components/OrderDraftDetailsProducts/OrderDraftDetailsProducts.json
@@ -6232,11 +6380,11 @@ msgid "Ready to Capture"
msgstr ""
#: build/locale/src/customers/components/CustomerOrders/CustomerOrders.json
-#. [src.customers.components.CustomerOrders.3878642352] - section header
+#. [src.customers.components.CustomerOrders.1899831623] - section header
#. defaultMessage is:
-#. Recent orders
+#. Recent Orders
msgctxt "section header"
-msgid "Recent orders"
+msgid "Recent Orders"
msgstr ""
#: build/locale/src/taxes/components/CountryList/CountryList.json
@@ -6387,6 +6535,10 @@ msgctxt "product's sku"
msgid "SKU"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateSummary.json
+#. [src.products.components.ProductVariantCreateDialog.693960049]
+#. defaultMessage is:
+#. SKU
#: build/locale/src/products/components/ProductVariants/ProductVariants.json
#. [src.products.components.ProductVariants.693960049]
#. defaultMessage is:
@@ -6839,6 +6991,14 @@ msgctxt "description"
msgid "Select Filter..."
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateTabs.json
+#. [src.products.components.ProductVariantCreateDialog.2478977538] - attribute values, variant creation step
+#. defaultMessage is:
+#. Select Values
+msgctxt "attribute values, variant creation step"
+msgid "Select Values"
+msgstr ""
+
#: build/locale/src/products/components/ProductVariantImages/ProductVariantImages.json
#. [src.products.components.ProductVariantImages.3449133076]
#. defaultMessage is:
@@ -6951,6 +7111,10 @@ msgctxt "button"
msgid "Set as default shipping address"
msgstr ""
+#: build/locale/src/discounts/components/DiscountDates/DiscountDates.json
+#. [src.discounts.components.DiscountDates.1596226028] - voucher end date, switch button
+#. defaultMessage is:
+#. Set end date
#: build/locale/src/discounts/components/VoucherDates/VoucherDates.json
#. [src.discounts.components.VoucherDates.1596226028] - voucher end date, switch button
#. defaultMessage is:
@@ -7023,6 +7187,14 @@ msgctxt "header"
msgid "Shipping"
msgstr ""
+#: build/locale/src/customers/components/CustomerAddresses/CustomerAddresses.json
+#. [src.customers.components.CustomerAddresses.2758581442] - subsection header
+#. defaultMessage is:
+#. Shipping Address
+msgctxt "subsection header"
+msgid "Shipping Address"
+msgstr ""
+
#: build/locale/src/orders/components/OrderCustomer/OrderCustomer.json
#. [src.orders.components.OrderCustomer.2758581442]
#. defaultMessage is:
@@ -7031,6 +7203,14 @@ msgctxt "description"
msgid "Shipping Address"
msgstr ""
+#: build/locale/src/shipping/components/ShippingZonesList/ShippingZonesList.json
+#. [src.shipping.components.ShippingZonesList.120574110] - sort shipping methods by zone, section header
+#. defaultMessage is:
+#. Shipping By Zone
+msgctxt "sort shipping methods by zone, section header"
+msgid "Shipping By Zone"
+msgstr ""
+
#: build/locale/src/intl.json
#. [src.shipping] - shipping section name
#. defaultMessage is:
@@ -7055,22 +7235,6 @@ msgctxt "description"
msgid "Shipping Zone Name"
msgstr ""
-#: build/locale/src/customers/components/CustomerAddresses/CustomerAddresses.json
-#. [src.customers.components.CustomerAddresses.3517722732] - subsection header
-#. defaultMessage is:
-#. Shipping address
-msgctxt "subsection header"
-msgid "Shipping address"
-msgstr ""
-
-#: build/locale/src/shipping/components/ShippingZonesList/ShippingZonesList.json
-#. [src.shipping.components.ShippingZonesList.2942726079] - sort shipping methods by zone, section header
-#. defaultMessage is:
-#. Shipping by zone
-msgctxt "sort shipping methods by zone, section header"
-msgid "Shipping by zone"
-msgstr ""
-
#: build/locale/src/orders/components/OrderHistory/OrderHistory.json
#. [src.orders.components.OrderHistory.651019008] - order history message
#. defaultMessage is:
@@ -7347,6 +7511,30 @@ msgctxt "product stock"
msgid "Stock"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [src.products.components.ProductVariantCreateDialog.3841616483] - variant stock, header
+#. defaultMessage is:
+#. Stock
+msgctxt "variant stock, header"
+msgid "Stock"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [productVariantCreatePricesStockInputLabel]
+#. defaultMessage is:
+#. Stock
+msgctxt "description"
+msgid "Stock"
+msgstr ""
+
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreatePrices.json
+#. [productVariantCreatePricesSetStockPlaceholder] - variant stock
+#. defaultMessage is:
+#. Stock
+msgctxt "variant stock"
+msgid "Stock"
+msgstr ""
+
#: build/locale/src/products/components/ProductVariantStock/ProductVariantStock.json
#. [src.products.components.ProductVariantStock.3841616483] - product variant stock, section header
#. defaultMessage is:
@@ -7371,6 +7559,14 @@ msgctxt "description"
msgid "Store Description"
msgstr ""
+#: build/locale/src/siteSettings/components/SiteSettingsAddress/SiteSettingsAddress.json
+#. [src.siteSettings.components.SiteSettingsAddress.229184360] - section header
+#. defaultMessage is:
+#. Store Information
+msgctxt "section header"
+msgid "Store Information"
+msgstr ""
+
#: build/locale/src/siteSettings/components/SiteSettingsDetails/SiteSettingsDetails.json
#. [src.siteSettings.components.SiteSettingsDetails.529433178]
#. defaultMessage is:
@@ -7379,14 +7575,6 @@ msgctxt "description"
msgid "Store description is shown on taskbar after your store name"
msgstr ""
-#: build/locale/src/siteSettings/components/SiteSettingsAddress/SiteSettingsAddress.json
-#. [src.siteSettings.components.SiteSettingsAddress.1150975268] - section header
-#. defaultMessage is:
-#. Store information
-msgctxt "section header"
-msgid "Store information"
-msgstr ""
-
#: build/locale/src/attributes/components/AttributeProperties/AttributeProperties.json
#. [src.attributes.components.AttributeProperties.1877630205] - attribute properties regarding storefront
#. defaultMessage is:
@@ -7491,6 +7679,14 @@ msgctxt "description"
msgid "Summary"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateTabs.json
+#. [src.products.components.ProductVariantCreateDialog.2745385064] - variant creation step
+#. defaultMessage is:
+#. Summary
+msgctxt "variant creation step"
+msgid "Summary"
+msgstr ""
+
#: build/locale/src/productTypes/components/ProductTypeList/ProductTypeList.json
#. [src.productTypes.components.ProductTypeList.1240292548] - tax rate for a product type
#. defaultMessage is:
@@ -7707,14 +7903,6 @@ msgctxt "description"
msgid "This will be shown to customers at checkout"
msgstr ""
-#: build/locale/src/discounts/components/SalePricing/SalePricing.json
-#. [src.discounts.components.SalePricing.2503204759] - time during which sale is active
-#. defaultMessage is:
-#. Time Frame
-msgctxt "time during which sale is active"
-msgid "Time Frame"
-msgstr ""
-
#: build/locale/src/pages/components/PageInfo/PageInfo.json
#. [src.pages.components.PageInfo.1124600214] - page title
#. defaultMessage is:
@@ -7754,9 +7942,9 @@ msgstr ""
#: build/locale/src/home/components/HomeProductListCard/HomeProductListCard.json
#. [homeProductsListCardHeader] - header
#. defaultMessage is:
-#. Top products
+#. Top Products
msgctxt "header"
-msgid "Top products"
+msgid "Top Products"
msgstr ""
#: build/locale/src/customers/components/CustomerOrders/CustomerOrders.json
@@ -8383,6 +8571,14 @@ msgctxt "sale value"
msgid "Value"
msgstr ""
+#: build/locale/src/discounts/components/SaleValue/SaleValue.json
+#. [src.discounts.components.SaleValue.1148029984] - sale value, header
+#. defaultMessage is:
+#. Value
+msgctxt "sale value, header"
+msgid "Value"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherList/VoucherList.json
#. [src.discounts.components.VoucherList.1148029984] - voucher value
#. defaultMessage is:
@@ -8459,6 +8655,14 @@ msgctxt "attribute values"
msgid "Values"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateSummary.json
+#. [src.products.components.ProductVariantCreateDialog.998917294] - variant name
+#. defaultMessage is:
+#. Variant
+msgctxt "variant name"
+msgid "Variant"
+msgstr ""
+
#: build/locale/src/translations/components/TranslationsProductTypesPage/TranslationsProductTypesPage.json
#. [src.translations.components.TranslationsProductTypesPage.3538502409] - header
#. defaultMessage is:
@@ -8607,6 +8811,14 @@ msgctxt "description"
msgid "Voucher Name"
msgstr ""
+#: build/locale/src/discounts/components/VoucherValue/VoucherValue.json
+#. [src.discounts.components.VoucherValue.1960678372]
+#. defaultMessage is:
+#. Voucher Specific Information
+msgctxt "description"
+msgid "Voucher Specific Information"
+msgstr ""
+
#: build/locale/src/discounts/components/VoucherDetailsPage/VoucherDetailsPage.json
#. [src.discounts.components.VoucherDetailsPage.2071139683]
#. defaultMessage is:
@@ -8711,6 +8923,14 @@ msgctxt "description"
msgid "Yes"
msgstr ""
+#: build/locale/src/products/components/ProductVariantCreateDialog/ProductVariantCreateSummary.json
+#. [src.products.components.ProductVariantCreateDialog.1009678918] - header
+#. defaultMessage is:
+#. You will create variants below
+msgctxt "header"
+msgid "You will create variants below"
+msgstr ""
+
#: build/locale/src/components/AddressEdit/AddressEdit.json
#. [src.components.AddressEdit.2965971965]
#. defaultMessage is:
diff --git a/package-lock.json b/package-lock.json
index 6881d9537..e437333ce 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1742,12 +1742,40 @@
"glob-to-regexp": "^0.3.0"
}
},
+ "@nodelib/fs.scandir": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
+ "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.3",
+ "run-parallel": "^1.1.9"
+ },
+ "dependencies": {
+ "@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+ "dev": true
+ }
+ }
+ },
"@nodelib/fs.stat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
"integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
"dev": true
},
+ "@nodelib/fs.walk": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
+ "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.3",
+ "fastq": "^1.6.0"
+ }
+ },
"@oclif/color": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/@oclif/color/-/color-0.0.0.tgz",
@@ -3416,6 +3444,30 @@
"es6-promisify": "^5.0.0"
}
},
+ "aggregate-error": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "dependencies": {
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ }
+ }
+ },
"airbnb-js-shims": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.0.tgz",
@@ -8938,6 +8990,15 @@
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
},
+ "fastq": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz",
+ "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.0"
+ }
+ },
"fault": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/fault/-/fault-1.0.3.tgz",
@@ -9967,6 +10028,12 @@
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
"dev": true
},
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz",
+ "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==",
+ "dev": true
+ },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
@@ -10911,6 +10978,48 @@
}
}
},
+ "husky": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-3.0.8.tgz",
+ "integrity": "sha512-HFOsgcyrX3qe/rBuqyTt+P4Gxn5P0seJmr215LAZ/vnwK3jWB3r0ck7swbzGRUbufCf9w/lgHPVbF/YXQALgfQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "cosmiconfig": "^5.2.1",
+ "execa": "^1.0.0",
+ "get-stdin": "^7.0.0",
+ "is-ci": "^2.0.0",
+ "opencollective-postinstall": "^2.0.2",
+ "pkg-dir": "^4.2.0",
+ "please-upgrade-node": "^3.2.0",
+ "read-pkg": "^5.1.1",
+ "run-node": "^1.0.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz",
+ "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ }
+ }
+ },
"hyperlinker": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz",
@@ -11536,6 +11645,12 @@
"integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
"dev": true
},
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
"is-object": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
@@ -11611,6 +11726,12 @@
"has": "^1.0.1"
}
},
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "dev": true
+ },
"is-relative": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
@@ -12940,6 +13061,319 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
+ "lint-staged": {
+ "version": "9.4.2",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-9.4.2.tgz",
+ "integrity": "sha512-OFyGokJSWTn2M6vngnlLXjaHhi8n83VIZZ5/1Z26SULRUWgR3ITWpAEQC9Pnm3MC/EpCxlwts/mQWDHNji2+zA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "commander": "^2.20.0",
+ "cosmiconfig": "^5.2.1",
+ "debug": "^4.1.1",
+ "dedent": "^0.7.0",
+ "del": "^5.0.0",
+ "execa": "^2.0.3",
+ "listr": "^0.14.3",
+ "log-symbols": "^3.0.0",
+ "micromatch": "^4.0.2",
+ "normalize-path": "^3.0.0",
+ "please-upgrade-node": "^3.1.1",
+ "string-argv": "^0.3.0",
+ "stringify-object": "^3.3.0"
+ },
+ "dependencies": {
+ "@nodelib/fs.stat": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
+ "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "cross-spawn": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
+ "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "del": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz",
+ "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==",
+ "dev": true,
+ "requires": {
+ "globby": "^10.0.1",
+ "graceful-fs": "^4.2.2",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.1",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "slash": "^3.0.0"
+ }
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "execa": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz",
+ "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "get-stream": "^5.0.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^3.0.0",
+ "onetime": "^5.1.0",
+ "p-finally": "^2.0.0",
+ "signal-exit": "^3.0.2",
+ "strip-final-newline": "^2.0.0"
+ }
+ },
+ "fast-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.0.tgz",
+ "integrity": "sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.0",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.2"
+ },
+ "dependencies": {
+ "merge2": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz",
+ "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==",
+ "dev": true
+ }
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "get-stream": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
+ "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
+ "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globby": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
+ "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+ "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
+ "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
+ "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "p-finally": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
+ "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
+ "dev": true
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz",
+ "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz",
+ "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz",
+ "integrity": "sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"linux-platform-info": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/linux-platform-info/-/linux-platform-info-0.0.3.tgz",
@@ -14588,6 +15022,12 @@
"is-wsl": "^1.1.0"
}
},
+ "opencollective-postinstall": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
+ "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==",
+ "dev": true
+ },
"opn": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
@@ -15071,6 +15511,12 @@
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
+ "picomatch": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz",
+ "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==",
+ "dev": true
+ },
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
@@ -15205,6 +15651,15 @@
}
}
},
+ "please-upgrade-node": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+ "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
"plop": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/plop/-/plop-2.4.0.tgz",
@@ -17080,6 +17535,12 @@
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
"dev": true
},
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
"rimraf": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.0.tgz",
@@ -17124,6 +17585,18 @@
"is-promise": "^2.1.0"
}
},
+ "run-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
+ "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
+ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
+ "dev": true
+ },
"run-queue": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@@ -17239,6 +17712,12 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
},
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
"send": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
@@ -18040,6 +18519,12 @@
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
"integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
},
+ "string-argv": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
+ "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==",
+ "dev": true
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -18164,6 +18649,17 @@
}
}
},
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.0.0"
+ }
+ },
"strip-ansi": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -18182,6 +18678,12 @@
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
"integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
},
+ "strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+ "dev": true
+ },
"style-loader": {
"version": "0.23.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
diff --git a/package.json b/package.json
index a02ae882e..9ba48a59b 100644
--- a/package.json
+++ b/package.json
@@ -115,8 +115,10 @@
"file-loader": "^1.1.11",
"fork-ts-checker-webpack-plugin": "^0.5.2",
"html-webpack-plugin": "^3.2.0",
+ "husky": "^3.0.8",
"jest": "^24.8.0",
"jest-file": "^1.0.0",
+ "lint-staged": "^9.4.2",
"plop": "^2.4.0",
"react-intl-po": "^2.2.2",
"react-test-renderer": "^16.8.6",
@@ -157,6 +159,18 @@
"^lodash-es(.*)$": "lodash/$1"
}
},
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged",
+ "pre-push": "npm run check-types"
+ }
+ },
+ "lint-staged": {
+ "*.{ts,tsx}": [
+ "tslint --fix",
+ "git add"
+ ]
+ },
"scripts": {
"build": "webpack -p",
"extract-json-messages": "rimraf build/locale && babel src 'src/**/*.{ts,tsx}' -o build/dashboard.bundle.js",
@@ -164,9 +178,8 @@
"extract-messages": "npm run extract-json-messages && npm run extract-pot-messages",
"build-messages": "rip po2json 'locale/**/*.po' -m 'build/locale/**/*.json' -o 'locale' -c 'description'",
"build-types": "apollo client:codegen --target=typescript types --globalTypesFile=src/types/globalTypes.ts",
+ "check-types": "tsc --noEmit",
"generate-component": "plop --plopfile .plop/plopfile.js",
- "lint": "tslint 'src/**/*.{ts,tsx}'",
- "lint-fix": "tslint 'src/**/*.{ts,tsx}' --fix",
"start": "webpack-dev-server --open -d",
"storybook": "start-storybook -p 3000 -c src/storybook/",
"build-storybook": "build-storybook -c src/storybook/ -o build/storybook",
diff --git a/src/attributes/fixtures.ts b/src/attributes/fixtures.ts
index 4c236da3a..92ab3ef0d 100644
--- a/src/attributes/fixtures.ts
+++ b/src/attributes/fixtures.ts
@@ -1,3 +1,4 @@
+import { ProductDetails_product_productType_variantAttributes } from "@saleor/products/types/ProductDetails";
import {
AttributeInputTypeEnum,
AttributeValueType
@@ -35,7 +36,10 @@ export const attribute: AttributeDetailsFragment = {
visibleInStorefront: true
};
-export const attributes: AttributeList_attributes_edges_node[] = [
+export const attributes: Array<
+ AttributeList_attributes_edges_node &
+ ProductDetails_product_productType_variantAttributes
+> = [
{
node: {
__typename: "Attribute" as "Attribute",
diff --git a/src/categories/components/CategoryBackground/CategoryBackground.tsx b/src/categories/components/CategoryBackground/CategoryBackground.tsx
index 2c5d9925e..2d43de581 100644
--- a/src/categories/components/CategoryBackground/CategoryBackground.tsx
+++ b/src/categories/components/CategoryBackground/CategoryBackground.tsx
@@ -60,7 +60,7 @@ const CategoryBackground: React.FC