Migrating details fields to product-editor package (#36945)

This commit is contained in:
Joel Thiessen 2023-03-06 14:33:10 -08:00 committed by GitHub
parent 79841c58a5
commit 2332c7c813
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
34 changed files with 148 additions and 60 deletions

View File

@ -0,0 +1,4 @@
Significance: minor
Type: add
Adding DetailsNameField and associated hooks/components.

View File

@ -28,22 +28,34 @@
"access": "public"
},
"dependencies": {
"@automattic/interpolate-components": "^1.2.0",
"@types/lodash": "^4.14.179",
"@types/wordpress__blocks": "^11.0.7",
"@woocommerce/components": "workspace:*",
"@woocommerce/currency": "workspace:*",
"@woocommerce/data": "workspace:^4.1.0",
"@woocommerce/number": "workspace:*",
"@woocommerce/tracks": "workspace:^1.3.0",
"@wordpress/blocks": "^11.17.0",
"@wordpress/components": "^19.5.0",
"@wordpress/compose": "^5.1.2",
"@wordpress/element": "^4.1.1",
"@wordpress/html-entities": "^3.3.1",
"@wordpress/i18n": "^4.26.0",
"@wordpress/icons": "^8.1.0",
"@wordpress/url": "^3.4.1",
"classnames": "^2.3.1",
"lodash": "^4.17.21",
"react-router-dom": "^6.3.0"
},
"devDependencies": {
"@testing-library/react": "^12.1.3",
"@types/react": "^17.0.2",
"@types/wordpress__components": "^19.10.1",
"@types/wordpress__data": "^6.0.0",
"@woocommerce/eslint-plugin": "workspace:*",
"@woocommerce/internal-style-build": "workspace:*",
"@wordpress/block-editor": "^9.8.0",
"@wordpress/browserslist-config": "^4.1.1",
"concurrently": "^7.0.0",
"css-loader": "^3.6.0",
@ -53,6 +65,7 @@
"postcss-loader": "^3.0.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-hooks^8.0.1": "link:@testing-library/react-hooks^8.0.1",
"rimraf": "^3.0.2",
"sass-loader": "^10.2.1",
"ts-jest": "^27.1.3",
@ -75,6 +88,8 @@
},
"peerDependencies": {
"@types/react": "^17.0.2",
"react": "^17.0.2"
"@wordpress/data": "^6.15.0",
"react": "^17.0.2",
"react-dom": "^17.0.2"
}
}

View File

@ -7,6 +7,7 @@ import { plus } from '@wordpress/icons';
import classNames from 'classnames';
import { ProductCategory } from '@woocommerce/data';
import { __experimentalSelectControlMenuItemProps as MenuItemProps } from '@woocommerce/components';
import { createElement } from '@wordpress/element';
type CategoryFieldAddNewItemProps = {
item: Pick< ProductCategory, 'id' | 'name' >;

View File

@ -2,7 +2,7 @@
* External dependencies
*/
import { CheckboxControl, Icon } from '@wordpress/components';
import { useEffect, useState } from '@wordpress/element';
import { useEffect, useState, createElement } from '@wordpress/element';
import { decodeEntities } from '@wordpress/html-entities';
import { chevronDown, chevronUp } from '@wordpress/icons';
import { ProductCategory } from '@woocommerce/data';

View File

@ -1,7 +1,7 @@
/**
* External dependencies
*/
import { useMemo, useState } from '@wordpress/element';
import { useMemo, useState, createElement, Fragment } from '@wordpress/element';
import {
selectControlStateChangeTypes,
Spinner,
@ -15,7 +15,6 @@ import { debounce } from 'lodash';
/**
* Internal dependencies
*/
import './category-field.scss';
import { CategoryFieldItem, CategoryTreeItem } from './category-field-item';
import { useCategorySearch } from './use-category-search';
import { CreateCategoryModal } from './create-category-modal';

View File

@ -5,7 +5,7 @@ import { __ } from '@wordpress/i18n';
import interpolateComponents from '@automattic/interpolate-components';
import { Button, Modal, Spinner, TextControl } from '@wordpress/components';
import { useDebounce } from '@wordpress/compose';
import { useState } from '@wordpress/element';
import { useState, createElement } from '@wordpress/element';
import { useDispatch } from '@wordpress/data';
import {
__experimentalSelectControl as SelectControl,
@ -20,7 +20,6 @@ import {
/**
* Internal dependencies
*/
import './create-category-modal.scss';
import { useCategorySearch } from './use-category-search';
import { CategoryFieldItem } from './category-field-item';

View File

@ -4,11 +4,12 @@
import { __ } from '@wordpress/i18n';
import { useFormContext } from '@woocommerce/components';
import { Product, ProductCategory } from '@woocommerce/data';
import { createElement } from '@wordpress/element';
/**
* Internal dependencies
*/
import { CategoryField } from '../../fields/category-field';
import { CategoryField } from './category-field';
export const DetailsCategoriesField = () => {
const { getInputProps } = useFormContext< Product >();

View File

@ -0,0 +1,2 @@
export * from './details-categories-field';
export * from './category-field';

View File

@ -5,6 +5,7 @@ import { ReactElement, Component } from 'react';
import { render, fireEvent } from '@testing-library/react';
import { Form, FormContext } from '@woocommerce/components';
import { Product, ProductCategory } from '@woocommerce/data';
import { createElement } from '@wordpress/element';
/**
* Internal dependencies

View File

@ -8,7 +8,7 @@ import {
} from '@woocommerce/components';
import { Product } from '@woocommerce/data';
import { BlockInstance, serialize, parse } from '@wordpress/blocks';
import { useState } from '@wordpress/element';
import { useState, createElement } from '@wordpress/element';
export const DetailsDescriptionField = () => {
const { setValue, values } = useFormContext< Product >();

View File

@ -0,0 +1 @@
export * from './details-description-field';

View File

@ -8,15 +8,16 @@ import {
Link,
__experimentalTooltip as Tooltip,
} from '@woocommerce/components';
import { getCheckboxTracks } from '@woocommerce/product-editor';
import interpolateComponents from '@automattic/interpolate-components';
import { Product } from '@woocommerce/data';
import { recordEvent } from '@woocommerce/tracks';
import { createElement, Fragment } from '@wordpress/element';
/**
* Internal dependencies
*/
import { PRODUCT_DETAILS_SLUG } from '../constants';
import { getCheckboxTracks } from '../../utils';
import { PRODUCT_DETAILS_SLUG } from '../../constants';
export const DetailsFeatureField = () => {
const { getCheckboxControlProps } = useFormContext< Product >();

View File

@ -0,0 +1 @@
export * from './details-feature-field';

View File

@ -12,13 +12,13 @@ import {
PRODUCTS_STORE_NAME,
WCDataSelector,
} from '@woocommerce/data';
import { useState } from '@wordpress/element';
import { useState, createElement } from '@wordpress/element';
/**
* Internal dependencies
*/
import { EditProductLinkModal } from '../../shared/edit-product-link-modal';
import { PRODUCT_DETAILS_SLUG } from '../constants';
import { PRODUCT_DETAILS_SLUG } from '../../constants';
import { EditProductLinkModal } from '../edit-product-link-modal';
export const DetailsNameField = ( {} ) => {
const [ showProductLinkEditModal, setShowProductLinkEditModal ] =

View File

@ -0,0 +1 @@
export * from './details-name-field';

View File

@ -8,7 +8,7 @@ import {
} from '@woocommerce/components';
import { Product } from '@woocommerce/data';
import { BlockInstance, serialize, parse } from '@wordpress/blocks';
import { useState } from '@wordpress/element';
import { useState, createElement } from '@wordpress/element';
export const DetailsSummaryField = () => {
const { setValue, values } = useFormContext< Product >();

View File

@ -0,0 +1 @@
export * from './details-summary-field';

View File

@ -3,19 +3,18 @@
*/
import { __ } from '@wordpress/i18n';
import { Button, Modal, TextControl } from '@wordpress/components';
import { useState } from '@wordpress/element';
import { useState, createElement } from '@wordpress/element';
import { useDispatch } from '@wordpress/data';
import { cleanForSlug } from '@wordpress/url';
import interpolateComponents from '@automattic/interpolate-components';
import { Product } from '@woocommerce/data';
import { useFormContext } from '@woocommerce/components';
import { recordEvent } from '@woocommerce/tracks';
import { __experimentalUseProductHelper as useProductHelper } from '@woocommerce/product-editor';
/**
* Internal dependencies
*/
import './edit-product-link-modal.scss';
import { useProductHelper } from '../../hooks/use-product-helper';
type EditProductLinkModalProps = {
product: Product;

View File

@ -4,6 +4,7 @@
import { render } from '@testing-library/react';
import { Product } from '@woocommerce/data';
import userEvent from '@testing-library/user-event';
import { createElement } from '@wordpress/element';
/**
* Internal dependencies

View File

@ -5,3 +5,8 @@ export {
export { WooProductFieldItem as __experimentalWooProductFieldItem } from './woo-product-field-item';
export { WooProductSectionItem as __experimentalWooProductSectionItem } from './woo-product-section-item';
export { WooProductTabItem as __experimentalWooProductTabItem } from './woo-product-tab-item';
export { DetailsNameField as __experimentalDetailsNameField } from './details-name-field';
export { DetailsFeatureField as __experimentalDetailsFeatureField } from './details-feature-field';
export { DetailsCategoriesField as __experimentalDetailsCategoriesField } from './details-categories-field';
export { DetailsSummaryField as __experimentalDetailsSummaryField } from './details-summary-field';
export { DetailsDescriptionField as __experimentalDetailsDescriptionField } from './details-description-field';

View File

@ -1,3 +1,44 @@
export const NUMBERS_AND_ALLOWED_CHARS = '[^-0-9%s1%s2]';
export const NUMBERS_AND_DECIMAL_SEPARATOR = '[^-\\d\\%s]+';
export const ONLY_ONE_DECIMAL_SEPARATOR = '[%s](?=%s*[%s])';
// This should never be a real slug value of any existing shipping class
export const ADD_NEW_SHIPPING_CLASS_OPTION_VALUE =
'__ADD_NEW_SHIPPING_CLASS_OPTION__';
export const UNCATEGORIZED_CATEGORY_SLUG = 'uncategorized';
export const PRODUCT_VARIATION_TITLE_LIMIT = 32;
export const STANDARD_RATE_TAX_CLASS_SLUG = 'standard';
// Fill constants
export const TAB_GENERAL_ID = 'tab/general';
export const TAB_PRICING_ID = 'tab/pricing';
export const TAB_INVENTORY_ID = 'tab/inventory';
export const TAB_SHIPPING_ID = 'tab/shipping';
export const TAB_OPTIONS_ID = 'tab/options';
export const VARIANT_TAB_GENERAL_ID = `variant/${ TAB_GENERAL_ID }`;
export const VARIANT_TAB_PRICING_ID = `variant/${ TAB_PRICING_ID }`;
export const VARIANT_TAB_INVENTORY_ID = `variant/${ TAB_INVENTORY_ID }`;
export const VARIANT_TAB_SHIPPING_ID = `variant/${ TAB_SHIPPING_ID }`;
export const DETAILS_SECTION_ID = `${ TAB_GENERAL_ID }/details`;
export const IMAGES_SECTION_ID = `${ TAB_GENERAL_ID }/images`;
export const ATTRIBUTES_SECTION_ID = `${ TAB_GENERAL_ID }/attributes`;
export const PRICING_SECTION_BASIC_ID = `${ TAB_PRICING_ID }/basic`;
export const PRICING_SECTION_TAXES_ID = `${ TAB_PRICING_ID }/taxes`;
export const PRICING_SECTION_TAXES_ADVANCED_ID = `${ TAB_PRICING_ID }/taxes/advanced`;
export const INVENTORY_SECTION_ID = `${ TAB_INVENTORY_ID }/basic`;
export const INVENTORY_SECTION_ADVANCED_ID = `${ TAB_INVENTORY_ID }/advanced`;
export const SHIPPING_SECTION_BASIC_ID = `${ TAB_SHIPPING_ID }/basic`;
export const SHIPPING_SECTION_DIMENSIONS_ID = `${ TAB_SHIPPING_ID }/dimensions`;
export const VARIANT_PRICING_SECTION_BASIC_ID = `variant/${ PRICING_SECTION_BASIC_ID }`;
export const VARIANT_PRICING_SECTION_TAXES_ID = `variant/${ PRICING_SECTION_TAXES_ID }`;
export const VARIANT_PRICING_SECTION_TAXES_ADVANCED_ID = `variant/${ PRICING_SECTION_TAXES_ADVANCED_ID }`;
export const VARIANT_INVENTORY_SECTION_ID = `variant/${ INVENTORY_SECTION_ID }`;
export const VARIANT_INVENTORY_SECTION_ADVANCED_ID = `variant/${ INVENTORY_SECTION_ADVANCED_ID }`;
export const VARIANT_SHIPPING_SECTION_BASIC_ID = `variant/${ SHIPPING_SECTION_BASIC_ID }`;
export const VARIANT_SHIPPING_SECTION_DIMENSIONS_ID = `variant/${ SHIPPING_SECTION_DIMENSIONS_ID }`;
export const PRODUCT_DETAILS_SLUG = 'product-details';

View File

@ -1,4 +1,5 @@
export * from './components';
export { DETAILS_SECTION_ID, TAB_GENERAL_ID } from './constants';
/**
* Utils

View File

@ -1 +1,4 @@
@import 'components/product-section-layout/style.scss';
@import 'components/edit-product-link-modal/style.scss';
@import 'components/details-categories-field/style.scss';
@import 'components/details-categories-field/create-category-modal.scss';

View File

@ -1 +0,0 @@
export * from './category-field';

View File

@ -6,21 +6,19 @@ import {
__experimentalProductFieldSection as ProductFieldSection,
__experimentalWooProductSectionItem as WooProductSectionItem,
__experimentalWooProductFieldItem as WooProductFieldItem,
__experimentalDetailsNameField as DetailsNameField,
__experimentalDetailsFeatureField as DetailsFeatureField,
__experimentalDetailsCategoriesField as DetailsCategoriesField,
__experimentalDetailsSummaryField as DetailsSummaryField,
__experimentalDetailsDescriptionField as DetailsDescriptionField,
DETAILS_SECTION_ID,
TAB_GENERAL_ID,
} from '@woocommerce/product-editor';
/**
* Internal dependencies
*/
import {
DetailsNameField,
DetailsCategoriesField,
DetailsFeatureField,
DetailsSummaryField,
DetailsDescriptionField,
} from './index';
import { DETAILS_SECTION_ID, PLUGIN_ID, TAB_GENERAL_ID } from '../constants';
import { PLUGIN_ID } from '../constants';
import './product-details-section.scss';
export const DetailsSectionFills = () => (

View File

@ -1,6 +1 @@
export * from './details-field-name';
export * from './details-field-categories';
export * from './details-field-feature';
export * from './details-field-summary';
export * from './details-field-description';
export * from './details-section-fills';

View File

@ -0,0 +1,4 @@
Significance: minor
Type: update
Moving some components out of core and into product-editor package.

View File

@ -1299,7 +1299,11 @@ importers:
packages/js/product-editor:
specifiers:
'@automattic/interpolate-components': ^1.2.0
'@testing-library/react': ^12.1.3
'@types/lodash': ^4.14.179
'@types/react': ^17.0.2
'@types/wordpress__blocks': ^11.0.7
'@types/wordpress__components': ^19.10.1
'@types/wordpress__data': ^6.0.0
'@woocommerce/components': workspace:*
@ -1309,18 +1313,28 @@ importers:
'@woocommerce/internal-style-build': workspace:*
'@woocommerce/number': workspace:*
'@woocommerce/tracks': workspace:^1.3.0
'@wordpress/block-editor': ^9.8.0
'@wordpress/blocks': ^11.17.0
'@wordpress/browserslist-config': ^4.1.1
'@wordpress/components': ^19.5.0
'@wordpress/compose': ^5.1.2
'@wordpress/data': ^6.15.0
'@wordpress/element': ^4.1.1
'@wordpress/html-entities': ^3.3.1
'@wordpress/i18n': ^4.26.0
'@wordpress/icons': ^8.1.0
'@wordpress/url': ^3.4.1
classnames: ^2.3.1
concurrently: ^7.0.0
css-loader: ^3.6.0
eslint: ^8.32.0
jest: ^27.5.1
jest-cli: ^27.5.1
lodash: ^4.17.21
postcss-loader: ^3.0.0
react: ^17.0.2
react-dom: ^17.0.2
react-hooks^8.0.1: link:@testing-library/react-hooks^8.0.1
react-router-dom: ^6.3.0
rimraf: ^3.0.2
sass-loader: ^10.2.1
@ -1329,21 +1343,34 @@ importers:
webpack: ^5.70.0
webpack-cli: ^3.3.12
dependencies:
'@automattic/interpolate-components': 1.2.1_pxzommwrsowkd4kgag6q3sluym
'@types/lodash': 4.14.184
'@types/wordpress__blocks': 11.0.7_sfoxds7t5ydpegc3knd667wn6m
'@woocommerce/components': link:../components
'@woocommerce/currency': link:../currency
'@woocommerce/data': link:../data
'@woocommerce/number': link:../number
'@woocommerce/tracks': link:../tracks
'@wordpress/blocks': 11.18.0_react@17.0.2
'@wordpress/components': 19.12.0_tufdcic6wklrwyy3rhbsbktylu
'@wordpress/compose': 5.17.0_react@17.0.2
'@wordpress/data': 6.15.0_react@17.0.2
'@wordpress/element': 4.20.0
'@wordpress/html-entities': 3.19.0
'@wordpress/i18n': 4.26.0
'@wordpress/icons': 8.4.0
'@wordpress/url': 3.20.0
classnames: 2.3.1
lodash: 4.17.21
react-router-dom: 6.3.0_sfoxds7t5ydpegc3knd667wn6m
devDependencies:
'@testing-library/react': 12.1.4_sfoxds7t5ydpegc3knd667wn6m
'@types/react': 17.0.50
'@types/wordpress__components': 19.10.1_sfoxds7t5ydpegc3knd667wn6m
'@types/wordpress__data': 6.0.0
'@woocommerce/eslint-plugin': link:../eslint-plugin
'@woocommerce/internal-style-build': link:../internal-style-build
'@wordpress/block-editor': 9.8.0_vcke6catv4iqpjdw24uwvlzyyi
'@wordpress/browserslist-config': 4.1.3
concurrently: 7.0.0
css-loader: 3.6.0_webpack@5.70.0
@ -1353,6 +1380,7 @@ importers:
postcss-loader: 3.0.0
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
react-hooks^8.0.1: link:@testing-library/react-hooks^8.0.1
rimraf: 3.0.2
sass-loader: 10.2.1_webpack@5.70.0
ts-jest: 27.1.3_77oryishcckaigojnzbhxsiona
@ -3414,7 +3442,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.12.9
'@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.12.9
'@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.12.9
'@babel/helper-plugin-utils': 7.19.0
transitivePeerDependencies:
- supports-color
@ -3427,7 +3455,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.16.12
'@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.16.12
'@babel/helper-create-class-features-plugin': 7.19.0_@babel+core@7.16.12
'@babel/helper-plugin-utils': 7.19.0
transitivePeerDependencies:
- supports-color
@ -13010,8 +13038,8 @@ packages:
resolution: {integrity: sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==}
engines: {node: '>=12'}
dependencies:
'@babel/code-frame': 7.16.7
'@babel/runtime': 7.17.7
'@babel/code-frame': 7.18.6
'@babel/runtime': 7.19.0
'@types/aria-query': 4.2.2
aria-query: 5.0.0
chalk: 4.1.2
@ -13099,7 +13127,7 @@ packages:
react: '*'
react-dom: '*'
dependencies:
'@babel/runtime': 7.17.7
'@babel/runtime': 7.19.0
'@testing-library/dom': 8.11.3
'@types/react-dom': 18.0.9
react: 17.0.2
@ -14993,7 +15021,7 @@ packages:
'@wordpress/element': 4.20.0
'@wordpress/hooks': 3.26.0
'@wordpress/html-entities': 3.19.0
'@wordpress/i18n': 4.19.0
'@wordpress/i18n': 4.26.0
'@wordpress/icons': 9.10.0
'@wordpress/is-shallow-equal': 4.19.0
'@wordpress/keyboard-shortcuts': 3.17.0_react@17.0.2
@ -15101,7 +15129,7 @@ packages:
'@wordpress/element': 4.20.0
'@wordpress/hooks': 3.26.0
'@wordpress/html-entities': 3.19.0
'@wordpress/i18n': 4.19.0
'@wordpress/i18n': 4.26.0
'@wordpress/is-shallow-equal': 4.19.0
'@wordpress/shortcode': 3.19.0
change-case: 4.1.2
@ -15872,7 +15900,7 @@ packages:
'@wordpress/element': 4.20.0
'@wordpress/is-shallow-equal': 4.19.0
'@wordpress/priority-queue': 2.19.0
'@wordpress/redux-routine': 4.4.1_redux@4.2.0
'@wordpress/redux-routine': 4.19.0_redux@4.2.0
equivalent-key-map: 0.2.2
is-promise: 4.0.0
lodash: 4.17.21
@ -16452,6 +16480,7 @@ packages:
memize: 1.1.0
sprintf-js: 1.1.2
tannin: 1.2.0
dev: false
/@wordpress/i18n/4.26.0:
resolution: {integrity: sha512-W94aIByO+3YraI7fJbk+3STnz3e0hhrtBPPjKK1XvT4+3RZiKPaVN2Y8mvCCknbaAILCT+CixUBJOgq6m6bwjQ==}
@ -16977,19 +17006,6 @@ packages:
redux: 4.2.0
rungen: 0.3.2
/@wordpress/redux-routine/4.4.1_redux@4.2.0:
resolution: {integrity: sha512-AqSEWN0PNxp00g1da+laL2rr0SP0AAfGpoqfzd55wIjWMQnHEf2pDsLvo6gQ9jyauuY5Wn2GUsYmGjQ+WjSf4w==}
engines: {node: '>=12'}
peerDependencies:
redux: '>=4'
dependencies:
'@babel/runtime': 7.19.0
is-promise: 4.0.0
lodash: 4.17.21
redux: 4.2.0
rungen: 0.3.2
dev: false
/@wordpress/reusable-blocks/3.17.0_vcke6catv4iqpjdw24uwvlzyyi:
resolution: {integrity: sha512-7ZfhtpWGvtT7xWqY/mCwC93zFHTVPQf8SZRjy2jAhcl7RNY6KZpW82rMRKNROEKJ4cYbTOMMf7WL2ulYi6cNFw==}
engines: {node: '>=12'}
@ -22788,9 +22804,9 @@ packages:
has: 1.0.3
is-core-module: 2.10.0
is-glob: 4.0.3
minimatch: 3.1.2
minimatch: 3.0.4
object.values: 1.1.5
resolve: 1.22.1
resolve: 1.20.0
tsconfig-paths: 3.14.0
transitivePeerDependencies:
- eslint-import-resolver-typescript
@ -22850,9 +22866,9 @@ packages:
has: 1.0.3
is-core-module: 2.10.0
is-glob: 4.0.3
minimatch: 3.1.2
minimatch: 3.0.4
object.values: 1.1.5
resolve: 1.22.1
resolve: 1.20.0
tsconfig-paths: 3.14.0
transitivePeerDependencies:
- eslint-import-resolver-typescript
@ -30305,7 +30321,7 @@ packages:
inherits: 2.0.4
/lz-string/1.4.4:
resolution: {integrity: sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=}
resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==}
hasBin: true
/make-dir/1.3.0:
@ -31345,7 +31361,6 @@ packages:
resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==}
dependencies:
brace-expansion: 1.1.11
dev: true
/minimatch/3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}