diff --git a/assets/js/modules/search-console/components/dashboard/LegacyDashboardWidgetPopularKeywordsTable.js b/assets/js/modules/search-console/components/dashboard/LegacyDashboardWidgetPopularKeywordsTable.js
index 00e11f0984e..cf4e7045163 100644
--- a/assets/js/modules/search-console/components/dashboard/LegacyDashboardWidgetPopularKeywordsTable.js
+++ b/assets/js/modules/search-console/components/dashboard/LegacyDashboardWidgetPopularKeywordsTable.js
@@ -39,10 +39,12 @@ import Layout from '../../../../components/layout/Layout';
import {
isDataZeroSearchConsole,
} from '../../util';
-import { getCurrentDateRangeDayCount } from '../../../../util/date-range';
-import { STORE_NAME } from '../../datastore/constants';
+import { STORE_NAME, DATE_RANGE_OFFSET } from '../../datastore/constants';
import { CORE_SITE } from '../../../../googlesitekit/datastore/site/constants';
+import { CORE_USER } from '../../../../googlesitekit/datastore/user/constants';
import TableOverflowContainer from '../../../../components/TableOverflowContainer';
+import { generateDateRangeArgs } from '../../util/report-date-range-args';
+
const { useSelect } = Data;
const LegacyDashboardWidgetPopularKeywordsTable = ( props ) => {
@@ -52,9 +54,10 @@ const LegacyDashboardWidgetPopularKeywordsTable = ( props ) => {
const referenceSiteURL = useSelect( ( select ) => {
return untrailingslashit( select( CORE_SITE ).getReferenceSiteURL() );
} );
+ const { startDate, endDate } = useSelect( ( select ) => select( CORE_USER ).getDateRangeDates( { offsetDays: DATE_RANGE_OFFSET } ) );
const baseServiceArgs = {
resource_id: domain,
- num_of_days: getCurrentDateRangeDayCount(),
+ ...generateDateRangeArgs( { startDate, endDate } ),
};
if ( isDomainProperty && referenceSiteURL ) {
baseServiceArgs.page = `*${ referenceSiteURL }`;
diff --git a/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetKeywordTable.js b/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetKeywordTable.js
index 1deaebdae58..daf6e2b1ef0 100644
--- a/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetKeywordTable.js
+++ b/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetKeywordTable.js
@@ -35,10 +35,12 @@ import withData from '../../../../components/higherorder/withData';
import { TYPE_MODULES } from '../../../../components/data';
import { getDataTableFromData } from '../../../../components/data-table';
import PreviewTable from '../../../../components/PreviewTable';
-import { STORE_NAME } from '../../datastore/constants';
+import { STORE_NAME, DATE_RANGE_OFFSET } from '../../datastore/constants';
import { CORE_SITE } from '../../../../googlesitekit/datastore/site/constants';
-import { getCurrentDateRangeDayCount } from '../../../../util/date-range';
+import { CORE_USER } from '../../../../googlesitekit/datastore/user/constants';
import TableOverflowContainer from '../../../../components/TableOverflowContainer';
+import { generateDateRangeArgs } from '../../util/report-date-range-args';
+
const { useSelect } = Data;
const LegacySearchConsoleDashboardWidgetKeywordTable = ( props ) => {
@@ -49,9 +51,11 @@ const LegacySearchConsoleDashboardWidgetKeywordTable = ( props ) => {
const referenceSiteURL = useSelect( ( select ) => {
return untrailingslashit( select( CORE_SITE ).getReferenceSiteURL() );
} );
+ const { startDate, endDate } = useSelect( ( select ) => select( CORE_USER ).getDateRangeDates( { offsetDays: DATE_RANGE_OFFSET } ) );
+
const baseServiceURLArgs = {
resource_id: domain,
- num_of_days: getCurrentDateRangeDayCount(),
+ ...generateDateRangeArgs( { startDate, endDate } ),
};
if ( url ) {
baseServiceURLArgs.page = `!${ url }`;
diff --git a/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetTopLevel.js b/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetTopLevel.js
index 56e607d60c3..eef7f3b5178 100644
--- a/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetTopLevel.js
+++ b/assets/js/modules/search-console/components/dashboard/LegacySearchConsoleDashboardWidgetTopLevel.js
@@ -43,9 +43,9 @@ import extractForSparkline from '../../../../util/extract-for-sparkline';
import CTA from '../../../../components/legacy-notifications/cta';
import { CORE_SITE } from '../../../../googlesitekit/datastore/site/constants';
import { CORE_USER } from '../../../../googlesitekit/datastore/user/constants';
-import { STORE_NAME } from '../../datastore/constants';
-import { getCurrentDateRangeDayCount } from '../../../../util/date-range';
+import { STORE_NAME, DATE_RANGE_OFFSET } from '../../datastore/constants';
import getNoDataComponent from '../../../../components/legacy-notifications/nodata';
+import { generateDateRangeArgs } from '../../util/report-date-range-args';
const { useSelect } = Data;
@@ -54,15 +54,15 @@ function LegacySearchConsoleDashboardWidgetTopLevel( { data } ) {
const url = useSelect( ( select ) => select( CORE_SITE ).getCurrentEntityURL() );
const propertyID = useSelect( ( select ) => select( STORE_NAME ).getPropertyID() );
- const dateRange = useSelect( ( select ) => select( CORE_USER ).getDateRange() );
const isDomainProperty = useSelect( ( select ) => select( STORE_NAME ).isDomainProperty() );
const referenceSiteURL = useSelect( ( select ) => {
return untrailingslashit( select( CORE_SITE ).getReferenceSiteURL() );
} );
+ const { startDate, endDate } = useSelect( ( select ) => select( CORE_USER ).getDateRangeDates( { offsetDays: DATE_RANGE_OFFSET } ) );
const serviceBaseURLArgs = {
resource_id: propertyID,
- num_of_days: getCurrentDateRangeDayCount( dateRange ),
+ ...generateDateRangeArgs( { startDate, endDate } ),
};
if ( url ) {
serviceBaseURLArgs.page = `!${ url }`;
diff --git a/assets/js/modules/search-console/components/dashboard/SearchConsoleDashboardWidgetSiteStats.js b/assets/js/modules/search-console/components/dashboard/SearchConsoleDashboardWidgetSiteStats.js
index 27168aaba12..987d2d60306 100644
--- a/assets/js/modules/search-console/components/dashboard/SearchConsoleDashboardWidgetSiteStats.js
+++ b/assets/js/modules/search-console/components/dashboard/SearchConsoleDashboardWidgetSiteStats.js
@@ -58,7 +58,7 @@ class SearchConsoleDashboardWidgetSiteStats extends Component {
height: 270,
width: '100%',
chartArea: {
- height: '80%',
+ height: '77%',
width: '87%',
},
legend: {
@@ -85,24 +85,24 @@ class SearchConsoleDashboardWidgetSiteStats extends Component {
minorGridlines: {
color: '#eee',
},
- textStyle: {
- color: '#616161',
- fontSize: 12,
- },
- titleTextStyle: {
- color: '#616161',
- fontSize: 12,
- italic: false,
- },
},
};
options.series = series;
options.vAxes = vAxes;
- // Clean up chart if more than three stats are selected.
- if ( 3 <= selectedStats.length ) {
- options.vAxis.textPosition = 'none';
+ if ( selectedStats.length < 3 ) {
+ options.vAxis.textStyle = {
+ color: '#616161',
+ fontSize: 12,
+ };
+ options.vAxis.titleTextStyle = {
+ color: '#616161',
+ fontSize: 12,
+ italic: false,
+ };
+ } else {
+ // Clean up chart if three or more stats are selected.
options.vAxis.gridlines.color = '#fff';
options.vAxis.minorGridlines.color = '#fff';
options.chartArea.width = '98%';
diff --git a/assets/js/modules/search-console/components/wp-dashboard/WPSearchConsoleDashboardWidgetOverview.js b/assets/js/modules/search-console/components/wp-dashboard/WPSearchConsoleDashboardWidgetOverview.js
deleted file mode 100644
index 83ec9d5f0e8..00000000000
--- a/assets/js/modules/search-console/components/wp-dashboard/WPSearchConsoleDashboardWidgetOverview.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * WPSearchConsoleDashboardWidgetOverview component.
- *
- * Site Kit by Google, Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * WordPress dependencies
- */
-import { __, _x } from '@wordpress/i18n';
-import { Component, Fragment } from '@wordpress/element';
-
-/**
- * Internal dependencies
- */
-import { getTimeInSeconds } from '../../../../util';
-import PreviewBlocks from '../../../../components/PreviewBlock';
-import DataBlock from '../../../../components/DataBlock';
-import withData from '../../../../components/higherorder/withData';
-import { TYPE_MODULES } from '../../../../components/data';
-import {
- extractSearchConsoleDashboardData,
- isDataZeroSearchConsole,
-} from '../../util';
-import getNoDataComponent from '../../../../components/legacy-notifications/nodata';
-
-class WPSearchConsoleDashboardWidgetOverview extends Component {
- render() {
- const { data } = this.props;
-
- if ( ! data || ! data.length ) {
- return null;
- }
- const processedData = extractSearchConsoleDashboardData( data );
-
- const {
- totalClicks,
- totalImpressions,
- totalClicksChange,
- totalImpressionsChange,
- } = processedData;
-
- return (
-
- { ! data.length
- ?
- { getNoDataComponent( _x( 'Search Console', 'Service name', 'google-site-kit' ) ) }
-
- :
-
-
-
- }
-
- );
- }
-}
-
-export default withData(
- WPSearchConsoleDashboardWidgetOverview,
- [
- {
- type: TYPE_MODULES,
- identifier: 'search-console',
- datapoint: 'searchanalytics',
- data: {
- dimensions: 'date',
- compareDateRanges: true,
- },
- priority: 1,
- maxAge: getTimeInSeconds( 'day' ),
- context: [ 'WPDashboard' ],
- },
- ],
-
,
- {},
- isDataZeroSearchConsole
-);
diff --git a/assets/js/modules/search-console/constants.js b/assets/js/modules/search-console/constants.js
new file mode 100644
index 00000000000..baa96ad5ae2
--- /dev/null
+++ b/assets/js/modules/search-console/constants.js
@@ -0,0 +1,20 @@
+/**
+ * Search Console module constants
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export const CONTEXT_MODULE_SEARCH_CONSOLE = 'moduleSearchConsole';
+export const AREA_MODULE_SEARCH_CONSOLE_MAIN = 'moduleSearchConsoleMain';
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-mock-data.json b/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-mock-data.json
new file mode 100644
index 00000000000..9b819c7bbd6
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-mock-data.json
@@ -0,0 +1,506 @@
+[
+ {
+ "clicks":1,
+ "ctr":0.019230769230769232,
+ "impressions":52,
+ "keys":[
+ "2020-12-03"
+ ],
+ "position":2.5576923076923075
+ },
+ {
+ "clicks":1,
+ "ctr":0.024390243902439025,
+ "impressions":41,
+ "keys":[
+ "2020-12-04"
+ ],
+ "position":2.4878048780487805
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2020-12-05"
+ ],
+ "position":3.6875
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-06"
+ ],
+ "position":2.7407407407407405
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2020-12-07"
+ ],
+ "position":2.9433962264150946
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":45,
+ "keys":[
+ "2020-12-08"
+ ],
+ "position":2.3555555555555556
+ },
+ {
+ "clicks":2,
+ "ctr":0.02531645569620253,
+ "impressions":79,
+ "keys":[
+ "2020-12-09"
+ ],
+ "position":2.6835443037974684
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-10"
+ ],
+ "position":2.537037037037037
+ },
+ {
+ "clicks":1,
+ "ctr":0.027777777777777776,
+ "impressions":36,
+ "keys":[
+ "2020-12-11"
+ ],
+ "position":2.611111111111111
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-12"
+ ],
+ "position":3.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":24,
+ "keys":[
+ "2020-12-13"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-14"
+ ],
+ "position":2.5740740740740744
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":41,
+ "keys":[
+ "2020-12-15"
+ ],
+ "position":2.5365853658536586
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2020-12-16"
+ ],
+ "position":2.1842105263157894
+ },
+ {
+ "clicks":2,
+ "ctr":0.05714285714285714,
+ "impressions":35,
+ "keys":[
+ "2020-12-17"
+ ],
+ "position":2.0857142857142854
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2020-12-18"
+ ],
+ "position":3.1666666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-19"
+ ],
+ "position":2.1538461538461537
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-20"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":30,
+ "keys":[
+ "2020-12-21"
+ ],
+ "position":2.6333333333333333
+ },
+ {
+ "clicks":1,
+ "ctr":0.03225806451612903,
+ "impressions":31,
+ "keys":[
+ "2020-12-22"
+ ],
+ "position":2.258064516129032
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-23"
+ ],
+ "position":2.5925925925925926
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":19,
+ "keys":[
+ "2020-12-24"
+ ],
+ "position":2.5789473684210527
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":7,
+ "keys":[
+ "2020-12-25"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-26"
+ ],
+ "position":2.0769230769230766
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-27"
+ ],
+ "position":2.166666666666667
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2020-12-28"
+ ],
+ "position":2.607142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2020-12-29"
+ ],
+ "position":2.75
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2020-12-30"
+ ],
+ "position":7.357142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-31"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2021-01-01"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2021-01-02"
+ ],
+ "position":2.2142857142857144
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":23,
+ "keys":[
+ "2021-01-03"
+ ],
+ "position":2.782608695652174
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2021-01-04"
+ ],
+ "position":2.452830188679245
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2021-01-05"
+ ],
+ "position":2.5476190476190474
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":35,
+ "keys":[
+ "2021-01-06"
+ ],
+ "position":2.314285714285714
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":44,
+ "keys":[
+ "2021-01-07"
+ ],
+ "position":3.340909090909091
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":48,
+ "keys":[
+ "2021-01-08"
+ ],
+ "position":3.3541666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2021-01-09"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2021-01-10"
+ ],
+ "position":3.375
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2021-01-11"
+ ],
+ "position":2.1578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2021-01-12"
+ ],
+ "position":2.725
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":76,
+ "keys":[
+ "2021-01-13"
+ ],
+ "position":2.6578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":64,
+ "keys":[
+ "2021-01-14"
+ ],
+ "position":2.625
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":33,
+ "keys":[
+ "2021-01-15"
+ ],
+ "position":2.606060606060606
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":49,
+ "keys":[
+ "2021-01-16"
+ ],
+ "position":2.63265306122449
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":21,
+ "keys":[
+ "2021-01-17"
+ ],
+ "position":2.4761904761904763
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":50,
+ "keys":[
+ "2021-01-18"
+ ],
+ "position":2.62
+ },
+ {
+ "clicks":2,
+ "ctr":0.03571428571428571,
+ "impressions":56,
+ "keys":[
+ "2021-01-19"
+ ],
+ "position":4
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":52,
+ "keys":[
+ "2021-01-20"
+ ],
+ "position":2.6346153846153846
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":63,
+ "keys":[
+ "2021-01-21"
+ ],
+ "position":2.4603174603174605
+ },
+ {
+ "clicks":1,
+ "ctr":0.02040816326530612,
+ "impressions":49,
+ "keys":[
+ "2021-01-22"
+ ],
+ "position":2.2653061224489797
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":15,
+ "keys":[
+ "2021-01-23"
+ ],
+ "position":2.7333333333333334
+ },
+ {
+ "clicks":1,
+ "ctr":0.03571428571428571,
+ "impressions":28,
+ "keys":[
+ "2021-01-24"
+ ],
+ "position":2.571428571428571
+ },
+ {
+ "clicks":2,
+ "ctr":0.04,
+ "impressions":50,
+ "keys":[
+ "2021-01-25"
+ ],
+ "position":5.84
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":56,
+ "keys":[
+ "2021-01-26"
+ ],
+ "position":8.303571428571429
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":39,
+ "keys":[
+ "2021-01-27"
+ ],
+ "position":2.564102564102564
+ }
+ ]
\ No newline at end of file
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-options.json b/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-options.json
new file mode 100644
index 00000000000..d8f27611c3f
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/adminbar-search-console-options.json
@@ -0,0 +1,6 @@
+{
+ "startDate":"2020-12-03",
+ "endDate":"2021-01-27",
+ "dimensions":"date",
+ "url":"https://www.sitekitbygoogle.com/blog/"
+ }
\ No newline at end of file
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/index.js b/assets/js/modules/search-console/datastore/__fixtures__/index.js
index aabc695384b..75eae69ad88 100644
--- a/assets/js/modules/search-console/datastore/__fixtures__/index.js
+++ b/assets/js/modules/search-console/datastore/__fixtures__/index.js
@@ -17,3 +17,10 @@
*/
export { default as report } from './report';
+export { default as adminbarSearchConsoleMockData } from './adminbar-search-console-mock-data';
+export { default as adminbarSearchConsoleOptions } from './adminbar-search-console-options';
+export { default as wpDashboardClicksArgs } from './wp-dashboard-clicks-args.json';
+export { default as wpDashboardClicksData } from './wp-dashboard-clicks-data.json';
+export { default as wpDashboardImpressionsArgs } from './wp-dashboard-impressions-args.json';
+export { default as wpDashboardImpressionsData } from './wp-dashboard-impressions-data.json';
+
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-args.json b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-args.json
new file mode 100644
index 00000000000..241f2fcf2ab
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-args.json
@@ -0,0 +1,14 @@
+{
+ "startDate": "2020-12-26",
+ "endDate": "2021-01-22",
+ "compareStartDate": "2020-11-28",
+ "compareEndDate": "2020-12-25",
+ "dimensions": "ga:date",
+ "limit": 10,
+ "metrics": [
+ {
+ "expression": "ga:avgSessionDuration",
+ "alias": "Average Session Duration"
+ }
+ ]
+}
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-data.json b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-data.json
new file mode 100644
index 00000000000..9b819c7bbd6
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-clicks-data.json
@@ -0,0 +1,506 @@
+[
+ {
+ "clicks":1,
+ "ctr":0.019230769230769232,
+ "impressions":52,
+ "keys":[
+ "2020-12-03"
+ ],
+ "position":2.5576923076923075
+ },
+ {
+ "clicks":1,
+ "ctr":0.024390243902439025,
+ "impressions":41,
+ "keys":[
+ "2020-12-04"
+ ],
+ "position":2.4878048780487805
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2020-12-05"
+ ],
+ "position":3.6875
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-06"
+ ],
+ "position":2.7407407407407405
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2020-12-07"
+ ],
+ "position":2.9433962264150946
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":45,
+ "keys":[
+ "2020-12-08"
+ ],
+ "position":2.3555555555555556
+ },
+ {
+ "clicks":2,
+ "ctr":0.02531645569620253,
+ "impressions":79,
+ "keys":[
+ "2020-12-09"
+ ],
+ "position":2.6835443037974684
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-10"
+ ],
+ "position":2.537037037037037
+ },
+ {
+ "clicks":1,
+ "ctr":0.027777777777777776,
+ "impressions":36,
+ "keys":[
+ "2020-12-11"
+ ],
+ "position":2.611111111111111
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-12"
+ ],
+ "position":3.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":24,
+ "keys":[
+ "2020-12-13"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-14"
+ ],
+ "position":2.5740740740740744
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":41,
+ "keys":[
+ "2020-12-15"
+ ],
+ "position":2.5365853658536586
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2020-12-16"
+ ],
+ "position":2.1842105263157894
+ },
+ {
+ "clicks":2,
+ "ctr":0.05714285714285714,
+ "impressions":35,
+ "keys":[
+ "2020-12-17"
+ ],
+ "position":2.0857142857142854
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2020-12-18"
+ ],
+ "position":3.1666666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-19"
+ ],
+ "position":2.1538461538461537
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-20"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":30,
+ "keys":[
+ "2020-12-21"
+ ],
+ "position":2.6333333333333333
+ },
+ {
+ "clicks":1,
+ "ctr":0.03225806451612903,
+ "impressions":31,
+ "keys":[
+ "2020-12-22"
+ ],
+ "position":2.258064516129032
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-23"
+ ],
+ "position":2.5925925925925926
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":19,
+ "keys":[
+ "2020-12-24"
+ ],
+ "position":2.5789473684210527
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":7,
+ "keys":[
+ "2020-12-25"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-26"
+ ],
+ "position":2.0769230769230766
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-27"
+ ],
+ "position":2.166666666666667
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2020-12-28"
+ ],
+ "position":2.607142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2020-12-29"
+ ],
+ "position":2.75
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2020-12-30"
+ ],
+ "position":7.357142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-31"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2021-01-01"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2021-01-02"
+ ],
+ "position":2.2142857142857144
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":23,
+ "keys":[
+ "2021-01-03"
+ ],
+ "position":2.782608695652174
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2021-01-04"
+ ],
+ "position":2.452830188679245
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2021-01-05"
+ ],
+ "position":2.5476190476190474
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":35,
+ "keys":[
+ "2021-01-06"
+ ],
+ "position":2.314285714285714
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":44,
+ "keys":[
+ "2021-01-07"
+ ],
+ "position":3.340909090909091
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":48,
+ "keys":[
+ "2021-01-08"
+ ],
+ "position":3.3541666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2021-01-09"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2021-01-10"
+ ],
+ "position":3.375
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2021-01-11"
+ ],
+ "position":2.1578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2021-01-12"
+ ],
+ "position":2.725
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":76,
+ "keys":[
+ "2021-01-13"
+ ],
+ "position":2.6578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":64,
+ "keys":[
+ "2021-01-14"
+ ],
+ "position":2.625
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":33,
+ "keys":[
+ "2021-01-15"
+ ],
+ "position":2.606060606060606
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":49,
+ "keys":[
+ "2021-01-16"
+ ],
+ "position":2.63265306122449
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":21,
+ "keys":[
+ "2021-01-17"
+ ],
+ "position":2.4761904761904763
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":50,
+ "keys":[
+ "2021-01-18"
+ ],
+ "position":2.62
+ },
+ {
+ "clicks":2,
+ "ctr":0.03571428571428571,
+ "impressions":56,
+ "keys":[
+ "2021-01-19"
+ ],
+ "position":4
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":52,
+ "keys":[
+ "2021-01-20"
+ ],
+ "position":2.6346153846153846
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":63,
+ "keys":[
+ "2021-01-21"
+ ],
+ "position":2.4603174603174605
+ },
+ {
+ "clicks":1,
+ "ctr":0.02040816326530612,
+ "impressions":49,
+ "keys":[
+ "2021-01-22"
+ ],
+ "position":2.2653061224489797
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":15,
+ "keys":[
+ "2021-01-23"
+ ],
+ "position":2.7333333333333334
+ },
+ {
+ "clicks":1,
+ "ctr":0.03571428571428571,
+ "impressions":28,
+ "keys":[
+ "2021-01-24"
+ ],
+ "position":2.571428571428571
+ },
+ {
+ "clicks":2,
+ "ctr":0.04,
+ "impressions":50,
+ "keys":[
+ "2021-01-25"
+ ],
+ "position":5.84
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":56,
+ "keys":[
+ "2021-01-26"
+ ],
+ "position":8.303571428571429
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":39,
+ "keys":[
+ "2021-01-27"
+ ],
+ "position":2.564102564102564
+ }
+ ]
\ No newline at end of file
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-args.json b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-args.json
new file mode 100644
index 00000000000..ac8b0e348e6
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-args.json
@@ -0,0 +1,5 @@
+{
+ "startDate": "2020-11-28",
+ "endDate": "2021-01-22",
+ "dimensions": "date"
+}
diff --git a/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-data.json b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-data.json
new file mode 100644
index 00000000000..9b819c7bbd6
--- /dev/null
+++ b/assets/js/modules/search-console/datastore/__fixtures__/wp-dashboard-impressions-data.json
@@ -0,0 +1,506 @@
+[
+ {
+ "clicks":1,
+ "ctr":0.019230769230769232,
+ "impressions":52,
+ "keys":[
+ "2020-12-03"
+ ],
+ "position":2.5576923076923075
+ },
+ {
+ "clicks":1,
+ "ctr":0.024390243902439025,
+ "impressions":41,
+ "keys":[
+ "2020-12-04"
+ ],
+ "position":2.4878048780487805
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2020-12-05"
+ ],
+ "position":3.6875
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-06"
+ ],
+ "position":2.7407407407407405
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2020-12-07"
+ ],
+ "position":2.9433962264150946
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":45,
+ "keys":[
+ "2020-12-08"
+ ],
+ "position":2.3555555555555556
+ },
+ {
+ "clicks":2,
+ "ctr":0.02531645569620253,
+ "impressions":79,
+ "keys":[
+ "2020-12-09"
+ ],
+ "position":2.6835443037974684
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-10"
+ ],
+ "position":2.537037037037037
+ },
+ {
+ "clicks":1,
+ "ctr":0.027777777777777776,
+ "impressions":36,
+ "keys":[
+ "2020-12-11"
+ ],
+ "position":2.611111111111111
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-12"
+ ],
+ "position":3.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":24,
+ "keys":[
+ "2020-12-13"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":54,
+ "keys":[
+ "2020-12-14"
+ ],
+ "position":2.5740740740740744
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":41,
+ "keys":[
+ "2020-12-15"
+ ],
+ "position":2.5365853658536586
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2020-12-16"
+ ],
+ "position":2.1842105263157894
+ },
+ {
+ "clicks":2,
+ "ctr":0.05714285714285714,
+ "impressions":35,
+ "keys":[
+ "2020-12-17"
+ ],
+ "position":2.0857142857142854
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2020-12-18"
+ ],
+ "position":3.1666666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-19"
+ ],
+ "position":2.1538461538461537
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-20"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":30,
+ "keys":[
+ "2020-12-21"
+ ],
+ "position":2.6333333333333333
+ },
+ {
+ "clicks":1,
+ "ctr":0.03225806451612903,
+ "impressions":31,
+ "keys":[
+ "2020-12-22"
+ ],
+ "position":2.258064516129032
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":27,
+ "keys":[
+ "2020-12-23"
+ ],
+ "position":2.5925925925925926
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":19,
+ "keys":[
+ "2020-12-24"
+ ],
+ "position":2.5789473684210527
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":7,
+ "keys":[
+ "2020-12-25"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":13,
+ "keys":[
+ "2020-12-26"
+ ],
+ "position":2.0769230769230766
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":12,
+ "keys":[
+ "2020-12-27"
+ ],
+ "position":2.166666666666667
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2020-12-28"
+ ],
+ "position":2.607142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2020-12-29"
+ ],
+ "position":2.75
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2020-12-30"
+ ],
+ "position":7.357142857142857
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2020-12-31"
+ ],
+ "position":2.2857142857142856
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":14,
+ "keys":[
+ "2021-01-01"
+ ],
+ "position":3
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":28,
+ "keys":[
+ "2021-01-02"
+ ],
+ "position":2.2142857142857144
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":23,
+ "keys":[
+ "2021-01-03"
+ ],
+ "position":2.782608695652174
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":53,
+ "keys":[
+ "2021-01-04"
+ ],
+ "position":2.452830188679245
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":42,
+ "keys":[
+ "2021-01-05"
+ ],
+ "position":2.5476190476190474
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":35,
+ "keys":[
+ "2021-01-06"
+ ],
+ "position":2.314285714285714
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":44,
+ "keys":[
+ "2021-01-07"
+ ],
+ "position":3.340909090909091
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":48,
+ "keys":[
+ "2021-01-08"
+ ],
+ "position":3.3541666666666665
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":18,
+ "keys":[
+ "2021-01-09"
+ ],
+ "position":2.5
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":16,
+ "keys":[
+ "2021-01-10"
+ ],
+ "position":3.375
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":38,
+ "keys":[
+ "2021-01-11"
+ ],
+ "position":2.1578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":40,
+ "keys":[
+ "2021-01-12"
+ ],
+ "position":2.725
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":76,
+ "keys":[
+ "2021-01-13"
+ ],
+ "position":2.6578947368421053
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":64,
+ "keys":[
+ "2021-01-14"
+ ],
+ "position":2.625
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":33,
+ "keys":[
+ "2021-01-15"
+ ],
+ "position":2.606060606060606
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":49,
+ "keys":[
+ "2021-01-16"
+ ],
+ "position":2.63265306122449
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":21,
+ "keys":[
+ "2021-01-17"
+ ],
+ "position":2.4761904761904763
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":50,
+ "keys":[
+ "2021-01-18"
+ ],
+ "position":2.62
+ },
+ {
+ "clicks":2,
+ "ctr":0.03571428571428571,
+ "impressions":56,
+ "keys":[
+ "2021-01-19"
+ ],
+ "position":4
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":52,
+ "keys":[
+ "2021-01-20"
+ ],
+ "position":2.6346153846153846
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":63,
+ "keys":[
+ "2021-01-21"
+ ],
+ "position":2.4603174603174605
+ },
+ {
+ "clicks":1,
+ "ctr":0.02040816326530612,
+ "impressions":49,
+ "keys":[
+ "2021-01-22"
+ ],
+ "position":2.2653061224489797
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":15,
+ "keys":[
+ "2021-01-23"
+ ],
+ "position":2.7333333333333334
+ },
+ {
+ "clicks":1,
+ "ctr":0.03571428571428571,
+ "impressions":28,
+ "keys":[
+ "2021-01-24"
+ ],
+ "position":2.571428571428571
+ },
+ {
+ "clicks":2,
+ "ctr":0.04,
+ "impressions":50,
+ "keys":[
+ "2021-01-25"
+ ],
+ "position":5.84
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":56,
+ "keys":[
+ "2021-01-26"
+ ],
+ "position":8.303571428571429
+ },
+ {
+ "clicks":0,
+ "ctr":0,
+ "impressions":39,
+ "keys":[
+ "2021-01-27"
+ ],
+ "position":2.564102564102564
+ }
+ ]
\ No newline at end of file
diff --git a/assets/js/modules/search-console/datastore/index.js b/assets/js/modules/search-console/datastore/index.js
index 11fb44d555c..6362e695ccb 100644
--- a/assets/js/modules/search-console/datastore/index.js
+++ b/assets/js/modules/search-console/datastore/index.js
@@ -47,7 +47,8 @@ export const reducer = store.reducer;
export const resolvers = store.resolvers;
export const selectors = store.selectors;
-// Register this baseModuleStore on the global registry.
-Data.registerStore( STORE_NAME, store );
+export const registerStore = ( registry ) => {
+ registry.registerStore( STORE_NAME, store );
+};
export default store;
diff --git a/assets/js/modules/search-console/index.js b/assets/js/modules/search-console/index.js
index 8e5e0a52b93..1415150525a 100644
--- a/assets/js/modules/search-console/index.js
+++ b/assets/js/modules/search-console/index.js
@@ -19,15 +19,11 @@
/**
* WordPress dependencies
*/
-import domReady from '@wordpress/dom-ready';
+import { __ } from '@wordpress/i18n';
/**
* Internal dependencies
*/
-import Modules from 'googlesitekit-modules';
-import Widgets from 'googlesitekit-widgets';
-import './datastore';
-import { STORE_NAME } from './datastore/constants';
import { SettingsView } from './components/settings';
import DashboardImpressionsWidget from './components/dashboard/DashboardImpressionsWidget';
import DashboardClicksWidget from './components/dashboard/DashboardClicksWidget';
@@ -39,24 +35,30 @@ import {
AREA_PAGE_DASHBOARD_SEARCH_FUNNEL,
} from '../../googlesitekit/widgets/default-areas';
import SearchConsoleIcon from '../../../svg/search-console.svg';
+import { STORE_NAME } from './datastore/constants';
+import { CONTEXT_MODULE_SEARCH_CONSOLE, AREA_MODULE_SEARCH_CONSOLE_MAIN } from './constants';
+import { WIDGET_AREA_STYLES } from '../../googlesitekit/widgets/datastore/constants';
-domReady( () => {
- // IMPORTANT: When updating arguments here, also update the same call in
- // `provideModuleRegistrations`.
- Modules.registerModule(
+export { registerStore } from './datastore';
+
+export const registerModule = ( modules ) => {
+ modules.registerModule(
'search-console',
{
storeName: STORE_NAME,
SettingsViewComponent: SettingsView,
Icon: SearchConsoleIcon,
+ screenWidgetContext: CONTEXT_MODULE_SEARCH_CONSOLE,
}
);
+};
- Widgets.registerWidget(
+export const registerWidgets = ( widgets ) => {
+ widgets.registerWidget(
'searchConsoleImpressions',
{
Component: DashboardImpressionsWidget,
- width: Widgets.WIDGET_WIDTHS.QUARTER,
+ width: widgets.WIDGET_WIDTHS.QUARTER,
priority: 1,
wrapWidget: true,
},
@@ -65,11 +67,11 @@ domReady( () => {
AREA_PAGE_DASHBOARD_SEARCH_FUNNEL,
],
);
- Widgets.registerWidget(
+ widgets.registerWidget(
'searchConsoleClicks',
{
Component: DashboardClicksWidget,
- width: Widgets.WIDGET_WIDTHS.QUARTER,
+ width: widgets.WIDGET_WIDTHS.QUARTER,
priority: 2,
wrapWidget: true,
},
@@ -78,11 +80,11 @@ domReady( () => {
AREA_PAGE_DASHBOARD_SEARCH_FUNNEL,
],
);
- Widgets.registerWidget(
+ widgets.registerWidget(
'searchConsolePopularKeywords',
{
Component: DashboardPopularKeywordsWidget,
- width: [ Widgets.WIDGET_WIDTHS.HALF, Widgets.WIDGET_WIDTHS.FULL ],
+ width: [ widgets.WIDGET_WIDTHS.HALF, widgets.WIDGET_WIDTHS.FULL ],
priority: 1,
wrapWidget: false,
},
@@ -91,4 +93,13 @@ domReady( () => {
AREA_PAGE_DASHBOARD_POPULARITY,
],
);
-} );
+ widgets.registerWidgetArea(
+ AREA_MODULE_SEARCH_CONSOLE_MAIN,
+ {
+ priority: 1,
+ style: WIDGET_AREA_STYLES.BOXES,
+ title: __( 'Overview', 'google-site-kit' ),
+ },
+ CONTEXT_MODULE_SEARCH_CONSOLE,
+ );
+};
diff --git a/assets/js/modules/search-console/index.legacy.js b/assets/js/modules/search-console/index.legacy.js
index 9e3dcc0c46f..e04285b3126 100644
--- a/assets/js/modules/search-console/index.legacy.js
+++ b/assets/js/modules/search-console/index.legacy.js
@@ -27,8 +27,6 @@ import { addFilter } from '@wordpress/hooks';
import { createAddToFilter } from '../../util/helpers';
import PostSearcher from '../../components/PostSearcher';
import GoogleSitekitSearchConsoleDashboardWidget from './components/dashboard/GoogleSitekitSearchConsoleDashboardWidget';
-import GoogleSitekitSearchConsoleAdminbarWidget from './components/adminbar/GoogleSitekitSearchConsoleAdminbarWidget';
-import WPSearchConsoleDashboardWidget from './components/wp-dashboard/WPSearchConsoleDashboardWidget';
import LegacyDashboardSearchFunnel from './components/dashboard/LegacyDashboardSearchFunnel.js';
import LegacySearchConsoleDashboardWidgetTopLevel from './components/dashboard/LegacySearchConsoleDashboardWidgetTopLevel';
import DashboardDetailsWidgetKeywordsTable from './components/dashboard-details/DashboardDetailsWidgetKeywordsTable';
@@ -39,8 +37,6 @@ import LegacyDashboardPopularity from './components/dashboard/LegacyDashboardPop
const slug = 'search-console';
const addGoogleSitekitSearchConsoleDashboardWidget = createAddToFilter(
);
-const addGoogleSitekitSearchConsoleAdminbarWidget = createAddToFilter(
);
-const addWPSearchConsoleDashboardWidget = createAddToFilter(
);
const addLegacyDashboardSearchFunnel = createAddToFilter(
);
const addLegacySearchConsoleDashboardWidgetTopLevel = createAddToFilter(
);
@@ -80,13 +76,6 @@ addFilter( 'googlesitekit.DashboardPopularity',
'googlesitekit.DashboardPPostSearcherModule',
addPostSearcher, 30 );
-/**
- * Add components to the WordPress Dashboard widget.
- */
-addFilter( 'googlesitekit.WPDashboardHeader',
- 'googlesitekit.SearchConsole',
- addWPSearchConsoleDashboardWidget, 11 );
-
/**
* Add components to the module detail page.
*/
@@ -97,10 +86,3 @@ addFilter( 'googlesitekit.ModuleApp-' + slug,
addFilter( `googlesitekit.showDateRangeSelector-${ slug }`,
'googlesitekit.searchConsoleShowDateRangeSelector',
() => true );
-
-/**
- * Add components to the adminbar.
- */
-addFilter( 'googlesitekit.AdminbarModules',
- 'googlesitekit.SearchConsole',
- addGoogleSitekitSearchConsoleAdminbarWidget );
diff --git a/assets/js/modules/search-console/util/report-date-range-args.js b/assets/js/modules/search-console/util/report-date-range-args.js
new file mode 100644
index 00000000000..862bd42288c
--- /dev/null
+++ b/assets/js/modules/search-console/util/report-date-range-args.js
@@ -0,0 +1,51 @@
+/**
+ * Report date range args utils.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * External dependencies
+ */
+import invariant from 'invariant';
+
+/**
+ * Internal dependencies
+ */
+import { isValidDateString } from '../../../googlesitekit/datastore/user/utils/is-valid-date-string';
+
+/**
+ * Generates a date range object with the appropriate structure to pass to report selectors.
+ *
+ * @since 1.26.0
+ *
+ * @param {Object} dates Object containing the dates.
+ * @param {string} dates.startDate Start date in YYYY-MM-DD format.
+ * @param {string} dates.endDate End date in YYYY-MM-DD format.
+ * @param {string} [dates.compareStartDate] Optional. Start date in YYYY-MM-DD format.
+ * @param {string} [dates.compareEndDate] Optional. End date in YYYY-MM-DD format.
+ * @return {Object} Date range object.
+ */
+export const generateDateRangeArgs = ( dates ) => {
+ const { startDate, endDate } = dates;
+
+ invariant( isValidDateString( startDate ), 'A valid startDate is required.' );
+ invariant( isValidDateString( endDate ), 'A valid endDate is required.' );
+
+ return {
+ start_date: startDate.replace( /-/g, '' ),
+ end_date: endDate.replace( /-/g, '' ),
+ };
+};
+
diff --git a/assets/js/modules/search-console/util/report-date-range-args.test.js b/assets/js/modules/search-console/util/report-date-range-args.test.js
new file mode 100644
index 00000000000..d1731dbd6ac
--- /dev/null
+++ b/assets/js/modules/search-console/util/report-date-range-args.test.js
@@ -0,0 +1,48 @@
+/**
+ * Tests for reporting date range utilities.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { generateDateRangeArgs } from './report-date-range-args';
+
+describe( 'Search Console reporting date range arguments', () => {
+ describe( 'generateDateRangeArgs', () => {
+ it( 'should throw if `startDate` or `endDate` arguments are not provided', () => {
+ expect(
+ () => generateDateRangeArgs( { startDate: '2020-12-18' } )
+ ).toThrow( 'A valid endDate is required' );
+
+ expect(
+ () => generateDateRangeArgs( { endDate: '2021-01-14' } )
+ ).toThrow( 'A valid startDate is required' );
+ } );
+
+ it( 'should return an object containing a `start_date` key, the value of which is the `startDate` argument with "-" stripped', () => {
+ const result = generateDateRangeArgs( {
+ startDate: '2020-12-18',
+ endDate: '2021-01-14',
+ } );
+ expect( result.start_date ).toBe( '20201218' );
+ } );
+
+ it( 'should return an object containing a `end_date` key, the value of which is the `endDate` argument with "-" stripped', () => {
+ const result = generateDateRangeArgs( {
+ startDate: '2020-12-18',
+ endDate: '2021-01-14',
+ } );
+ expect( result.end_date ).toBe( '20210114' );
+ } );
+ } );
+} );
diff --git a/assets/js/modules/tagmanager/components/common/AMPContainerSelect.js b/assets/js/modules/tagmanager/components/common/AMPContainerSelect.js
index 03cabeba514..b30488e8220 100644
--- a/assets/js/modules/tagmanager/components/common/AMPContainerSelect.js
+++ b/assets/js/modules/tagmanager/components/common/AMPContainerSelect.js
@@ -42,7 +42,7 @@ export default function AMPContainerSelect() {
const onSelect = useCallback( ( index, item ) => {
const {
value: newContainerID,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
internalId: newInternalContainerID,
} = item.dataset;
if ( ampContainerID !== newContainerID ) {
diff --git a/assets/js/modules/tagmanager/components/common/AMPContainerSelect.test.js b/assets/js/modules/tagmanager/components/common/AMPContainerSelect.test.js
index 1613ff1aa70..d85363b44d2 100644
--- a/assets/js/modules/tagmanager/components/common/AMPContainerSelect.test.js
+++ b/assets/js/modules/tagmanager/components/common/AMPContainerSelect.test.js
@@ -41,12 +41,12 @@ describe( 'AMPContainerSelect', () => {
it( 'should render an option for each AMP container of the currently selected account.', () => {
const account = factories.accountBuilder();
const webContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/acronym-case
);
const ampContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/acronym-case
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -68,7 +68,7 @@ describe( 'AMPContainerSelect', () => {
const { account, containers } = factories.buildAccountWithContainers(
{ container: { usageContext: [ CONTEXT_AMP ] } }
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -85,7 +85,7 @@ describe( 'AMPContainerSelect', () => {
const { account, containers } = factories.buildAccountWithContainers(
{ container: { usageContext: [ CONTEXT_AMP ] } }
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -105,7 +105,7 @@ describe( 'AMPContainerSelect', () => {
{ container: { usageContext: [ CONTEXT_AMP ] } }
);
const ampContainer = containers[ 0 ];
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -124,15 +124,15 @@ describe( 'AMPContainerSelect', () => {
await untilResolved( registry, STORE_NAME ).getContainers( accountID );
} );
- expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( ampContainer.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( ampContainer.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( ampContainer.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( ampContainer.containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'should render a loading state while accounts have not been loaded', () => {
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/accounts/ );
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/ );
const account = factories.accountBuilder();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
const { queryByRole } = render(
, { registry } );
@@ -144,7 +144,7 @@ describe( 'AMPContainerSelect', () => {
it( 'should render a loading state while containers are loading', () => {
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/ );
const account = factories.accountBuilder();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
registry.dispatch( STORE_NAME ).setAccountID( accountID );
@@ -157,7 +157,7 @@ describe( 'AMPContainerSelect', () => {
it( 'should be labeled as "Container" in a primary AMP context', () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -171,7 +171,7 @@ describe( 'AMPContainerSelect', () => {
it( 'should be labeled as "AMP Container" in a secondary AMP context', () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
diff --git a/assets/js/modules/tagmanager/components/common/AccountCreate.test.js b/assets/js/modules/tagmanager/components/common/AccountCreate.test.js
index 29afe0cbc72..0e2998d28ba 100644
--- a/assets/js/modules/tagmanager/components/common/AccountCreate.test.js
+++ b/assets/js/modules/tagmanager/components/common/AccountCreate.test.js
@@ -54,7 +54,7 @@ describe( 'AccountCreate', () => {
it( 'resets accounts when the re-fetch accounts link is clicked', async () => {
const accountA = factories.accountBuilder();
const accountB = factories.accountBuilder();
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountA.accountId );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ accountA ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
diff --git a/assets/js/modules/tagmanager/components/common/AccountSelect.js b/assets/js/modules/tagmanager/components/common/AccountSelect.js
index 9a8bdd5c6f5..5e20990dc22 100644
--- a/assets/js/modules/tagmanager/components/common/AccountSelect.js
+++ b/assets/js/modules/tagmanager/components/common/AccountSelect.js
@@ -64,13 +64,13 @@ export default function AccountSelect() {
>
{ ( accounts || [] )
.concat( {
- accountId: ACCOUNT_CREATE, // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: ACCOUNT_CREATE, // eslint-disable-line sitekit/acronym-case
name: __( 'Set up a new account', 'google-site-kit' ),
} )
- .map( ( { accountId, name } ) => ( // eslint-disable-line sitekit/camelcase-acronyms
+ .map( ( { accountId, name } ) => ( // eslint-disable-line sitekit/acronym-case
{ name }
diff --git a/assets/js/modules/tagmanager/components/common/AccountSelect.test.js b/assets/js/modules/tagmanager/components/common/AccountSelect.test.js
index 7b8cadca52e..623bcec1c72 100644
--- a/assets/js/modules/tagmanager/components/common/AccountSelect.test.js
+++ b/assets/js/modules/tagmanager/components/common/AccountSelect.test.js
@@ -36,7 +36,7 @@ describe( 'AccountSelect', () => {
// Set set no existing tag by default.
registry.dispatch( STORE_NAME ).receiveGetExistingTag( null );
// Receive containers for the first account in fixtures to prevent fetching in getAccounts resolver.
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetContainers( [], { accountID: fixtures.accounts[ 0 ].accountId } );
// Prevent error when loading site info.
registry.dispatch( CORE_SITE ).receiveSiteInfo( {} );
diff --git a/assets/js/modules/tagmanager/components/common/ContainerSelect.js b/assets/js/modules/tagmanager/components/common/ContainerSelect.js
index f845753ecd5..96550d5e1b8 100644
--- a/assets/js/modules/tagmanager/components/common/ContainerSelect.js
+++ b/assets/js/modules/tagmanager/components/common/ContainerSelect.js
@@ -63,15 +63,15 @@ export default function ContainerSelect( {
>
{ ( containers || [] )
.concat( {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
publicId: CONTAINER_CREATE,
name: __( 'Set up a new container', 'google-site-kit' ),
} )
- .map( ( { publicId, name, containerId } ) => ( // eslint-disable-line sitekit/camelcase-acronyms
+ .map( ( { publicId, name, containerId } ) => ( // eslint-disable-line sitekit/acronym-case
{ name }
diff --git a/assets/js/modules/tagmanager/components/common/ContainerSelect.test.js b/assets/js/modules/tagmanager/components/common/ContainerSelect.test.js
index 4242df0da46..4f5f133adad 100644
--- a/assets/js/modules/tagmanager/components/common/ContainerSelect.test.js
+++ b/assets/js/modules/tagmanager/components/common/ContainerSelect.test.js
@@ -37,7 +37,7 @@ describe( 'ContainerSelect', () => {
it( 'should be disabled if there is an existing tag', async () => {
const account = factories.accountBuilder();
- const { accountId: accountID } = account; // eslint-disable-line sitekit/camelcase-acronyms
+ const { accountId: accountID } = account; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( [], { accountID } );
@@ -56,7 +56,7 @@ describe( 'ContainerSelect', () => {
it( 'should be disabled if the selected account is not a valid account', async () => {
const account = factories.accountBuilder();
- const { accountId: accountID } = account; // eslint-disable-line sitekit/camelcase-acronyms
+ const { accountId: accountID } = account; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( [], { accountID } );
diff --git a/assets/js/modules/tagmanager/components/common/WebContainerSelect.js b/assets/js/modules/tagmanager/components/common/WebContainerSelect.js
index 148dc113be8..1d86ba9fa8c 100644
--- a/assets/js/modules/tagmanager/components/common/WebContainerSelect.js
+++ b/assets/js/modules/tagmanager/components/common/WebContainerSelect.js
@@ -42,7 +42,7 @@ export default function WebContainerSelect() {
const onSelect = useCallback( ( index, item ) => {
const {
value: newContainerID,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
internalId: newInternalContainerID,
} = item.dataset;
if ( containerID !== newContainerID ) {
diff --git a/assets/js/modules/tagmanager/components/common/WebContainerSelect.test.js b/assets/js/modules/tagmanager/components/common/WebContainerSelect.test.js
index a03551c5fba..8ea71ffab51 100644
--- a/assets/js/modules/tagmanager/components/common/WebContainerSelect.test.js
+++ b/assets/js/modules/tagmanager/components/common/WebContainerSelect.test.js
@@ -41,12 +41,12 @@ describe( 'WebContainerSelect', () => {
it( 'should render an option for each web container of the currently selected account.', () => {
const account = factories.accountBuilder();
const webContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/acronym-case
);
const ampContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/acronym-case
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -68,7 +68,7 @@ describe( 'WebContainerSelect', () => {
const { account, containers } = factories.buildAccountWithContainers(
{ container: { usageContext: [ CONTEXT_WEB ] } }
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -85,7 +85,7 @@ describe( 'WebContainerSelect', () => {
const { account, containers } = factories.buildAccountWithContainers(
{ container: { usageContext: [ CONTEXT_WEB ] } }
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -105,7 +105,7 @@ describe( 'WebContainerSelect', () => {
{ container: { usageContext: [ CONTEXT_WEB ] } }
);
const webContainer = containers[ 0 ];
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -124,15 +124,15 @@ describe( 'WebContainerSelect', () => {
await untilResolved( registry, STORE_NAME ).getContainers( accountID );
} );
- expect( registry.select( STORE_NAME ).getContainerID() ).toBe( webContainer.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( webContainer.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerID() ).toBe( webContainer.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( webContainer.containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'should render a loading state while accounts have not been loaded', () => {
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/accounts/ );
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/ );
const account = factories.accountBuilder();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
const { queryAllByRole, queryByRole } = render(
, { registry } );
@@ -145,7 +145,7 @@ describe( 'WebContainerSelect', () => {
it( 'should render a loading state while containers are loading', () => {
freezeFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/ );
const account = factories.accountBuilder();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
registry.dispatch( STORE_NAME ).setAccountID( accountID );
@@ -159,7 +159,7 @@ describe( 'WebContainerSelect', () => {
it( 'should be labeled as "Container" in a no AMP context', () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
@@ -173,7 +173,7 @@ describe( 'WebContainerSelect', () => {
it( 'should be labeled as "Web Container" in a secondary AMP context', () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).finishResolution( 'getAccounts', [] );
diff --git a/assets/js/modules/tagmanager/components/settings/SettingsEdit.js b/assets/js/modules/tagmanager/components/settings/SettingsEdit.js
index cf9eba7be05..ce7e297b7c9 100644
--- a/assets/js/modules/tagmanager/components/settings/SettingsEdit.js
+++ b/assets/js/modules/tagmanager/components/settings/SettingsEdit.js
@@ -23,6 +23,7 @@ import Data from 'googlesitekit-data';
import ProgressBar from '../../../../components/ProgressBar';
import { STORE_NAME, ACCOUNT_CREATE } from '../../datastore/constants';
import { useExistingTagEffect } from '../../hooks';
+import useGAPropertyIDEffect from '../../hooks/useGAPropertyIDEffect';
import {
AccountCreate,
ExistingTagError,
@@ -41,6 +42,8 @@ export default function SettingsEdit() {
// Set the accountID and containerID if there is an existing tag.
useExistingTagEffect();
+ // Synchronize the gaPropertyID setting with the singular GA property ID in selected containers.
+ useGAPropertyIDEffect();
let viewComponent;
// Here we also check for `hasResolvedAccounts` to prevent showing a different case below
diff --git a/assets/js/modules/tagmanager/components/settings/SettingsEdit.test.js b/assets/js/modules/tagmanager/components/settings/SettingsEdit.test.js
index c2ae8881c49..4817eeb169a 100644
--- a/assets/js/modules/tagmanager/components/settings/SettingsEdit.test.js
+++ b/assets/js/modules/tagmanager/components/settings/SettingsEdit.test.js
@@ -42,7 +42,7 @@ describe( 'SettingsEdit', () => {
};
const { account, containers } = buildAccountWithContainers( args );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry = createTestRegistry();
diff --git a/assets/js/modules/tagmanager/components/setup/SetupForm.js b/assets/js/modules/tagmanager/components/setup/SetupForm.js
index e79f09f49bb..cc53ba76a54 100644
--- a/assets/js/modules/tagmanager/components/setup/SetupForm.js
+++ b/assets/js/modules/tagmanager/components/setup/SetupForm.js
@@ -78,13 +78,6 @@ export default function SetupForm( { finishSetup } ) {
// If submitChanges was successful, disable autoSubmit (in case it was restored).
setValues( FORM_SETUP, { autoSubmit: false } );
- // If a singular property ID is set in the container(s) and Analytics is active,
- // we disable the snippet output via Analytics to prevent duplicate measurement.
- if ( singleAnalyticsPropertyID && analyticsModuleActive ) {
- dispatchAnalytics.setUseSnippet( false );
- await throwOnError( () => dispatchAnalytics.saveSettings() );
- }
-
// If submitting with Analytics setup, and Analytics is not active,
// activate it, and navigate to its reauth/setup URL to proceed with its setup.
if ( submitMode === SETUP_MODE_WITH_ANALYTICS && ! analyticsModuleActive ) {
diff --git a/assets/js/modules/tagmanager/components/setup/SetupMain.js b/assets/js/modules/tagmanager/components/setup/SetupMain.js
index 4ccb0e7e5c2..a3590479f56 100644
--- a/assets/js/modules/tagmanager/components/setup/SetupMain.js
+++ b/assets/js/modules/tagmanager/components/setup/SetupMain.js
@@ -41,6 +41,7 @@ import {
AccountCreate,
ExistingTagError,
} from '../common';
+import useGAPropertyIDEffect from '../../hooks/useGAPropertyIDEffect';
const { useSelect } = Data;
export default function SetupMain( { finishSetup } ) {
@@ -56,6 +57,8 @@ export default function SetupMain( { finishSetup } ) {
// Set the accountID and containerID if there is an existing tag.
useExistingTagEffect();
+ // Synchronize the gaPropertyID setting with the singular GA property ID in selected containers.
+ useGAPropertyIDEffect();
let viewComponent;
// Here we also check for `hasResolvedAccounts` to prevent showing a different case below
diff --git a/assets/js/modules/tagmanager/components/setup/SetupMain.test.js b/assets/js/modules/tagmanager/components/setup/SetupMain.test.js
index 0c84c7662c4..47cc6369522 100644
--- a/assets/js/modules/tagmanager/components/setup/SetupMain.test.js
+++ b/assets/js/modules/tagmanager/components/setup/SetupMain.test.js
@@ -42,7 +42,7 @@ describe( 'SetupMain', () => {
};
const { account, containers } = buildAccountWithContainers( args );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry = createTestRegistry();
diff --git a/assets/js/modules/tagmanager/datastore/__factories__/builders.js b/assets/js/modules/tagmanager/datastore/__factories__/builders.js
index a9e23435bda..6410affe23a 100644
--- a/assets/js/modules/tagmanager/datastore/__factories__/builders.js
+++ b/assets/js/modules/tagmanager/datastore/__factories__/builders.js
@@ -41,14 +41,14 @@ import { CONTEXT_WEB, CONTEXT_AMP } from '../constants';
export const accountBuilder = build( 'Tag Manager Account', {
fields: {
path: 'accounts/{accountId}',
- accountId: sequence( ( num ) => `${ 100 + num }` ), // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: sequence( ( num ) => `${ 100 + num }` ), // eslint-disable-line sitekit/acronym-case
name: fake( ( { lorem } ) => lorem.words() ),
},
postBuild: ( account ) => {
- const { accountId } = account; // eslint-disable-line sitekit/camelcase-acronyms
+ const { accountId } = account; // eslint-disable-line sitekit/acronym-case
return {
...account,
- path: `accounts/${ accountId }`, // eslint-disable-line sitekit/camelcase-acronyms
+ path: `accounts/${ accountId }`, // eslint-disable-line sitekit/acronym-case
};
},
} );
@@ -68,10 +68,10 @@ export const accountBuilder = build( 'Tag Manager Account', {
export const containerBuilder = build( 'Tag Manager Container', {
fields: {
path: 'accounts/{accountId}/containers/{containerId}',
- accountId: fake( ( { random } ) => random.number().toString() ), // eslint-disable-line sitekit/camelcase-acronyms
- containerId: sequence( ( num ) => `${ 200 + num }` ), // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: fake( ( { random } ) => random.number().toString() ), // eslint-disable-line sitekit/acronym-case
+ containerId: sequence( ( num ) => `${ 200 + num }` ), // eslint-disable-line sitekit/acronym-case
name: fake( ( { lorem } ) => lorem.words() ),
- publicId: fake( ( { random } ) => { // eslint-disable-line sitekit/camelcase-acronyms
+ publicId: fake( ( { random } ) => { // eslint-disable-line sitekit/acronym-case
const char = random.alphaNumeric;
return `GTM-FAKE${ char() }${ char() }${ char() }`.toUpperCase();
} ),
@@ -79,15 +79,15 @@ export const containerBuilder = build( 'Tag Manager Container', {
oneOf( CONTEXT_WEB, CONTEXT_AMP ),
],
fingerprint: Date.now().toString(),
- tagManagerUrl: 'https://tagmanager.google.com/#/container/accounts/{accountId}/containers/{containerId}/workspaces?apiLink=container', // eslint-disable-line sitekit/camelcase-acronyms
+ tagManagerUrl: 'https://tagmanager.google.com/#/container/accounts/{accountId}/containers/{containerId}/workspaces?apiLink=container', // eslint-disable-line sitekit/acronym-case
},
postBuild: ( container ) => {
- const { accountId, containerId } = container; // eslint-disable-line sitekit/camelcase-acronyms
+ const { accountId, containerId } = container; // eslint-disable-line sitekit/acronym-case
return {
...container,
- path: `accounts/${ accountId }/containers/${ containerId }`, // eslint-disable-line sitekit/camelcase-acronyms
- tagManagerUrl: `https://tagmanager.google.com/#/container/accounts/${ accountId }/containers/${ containerId }/workspaces?apiLink=container`, // eslint-disable-line sitekit/camelcase-acronyms
+ path: `accounts/${ accountId }/containers/${ containerId }`, // eslint-disable-line sitekit/acronym-case
+ tagManagerUrl: `https://tagmanager.google.com/#/container/accounts/${ accountId }/containers/${ containerId }/workspaces?apiLink=container`, // eslint-disable-line sitekit/acronym-case
};
},
} );
@@ -129,7 +129,7 @@ export function buildAccountWithContainers( {
count,
{
...containerOverrides,
- accountId: account.accountId, // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: account.accountId, // eslint-disable-line sitekit/acronym-case
},
);
@@ -139,7 +139,7 @@ export function buildAccountWithContainers( {
};
}
-/* eslint-disable sitekit/camelcase-acronyms */
+/* eslint-disable sitekit/acronym-case */
export const defaultTagWeb = ( { accountId, containerId } = {} ) => (
{
accountId,
@@ -356,7 +356,7 @@ const analyticsTagAMP = ( propertyID, { accountId, containerId } = {} ) => {
],
};
};
-/* eslint-enable sitekit/camelcase-acronyms */
+/* eslint-enable sitekit/acronym-case */
export const buildLiveContainerVersionWeb = ( {
accountID = '100',
@@ -364,7 +364,7 @@ export const buildLiveContainerVersionWeb = ( {
} = {} ) => {
return liveContainerVersionBuilder( {
overrides: {
- accountId: accountID, // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: accountID, // eslint-disable-line sitekit/acronym-case
container: {
usageContext: [ CONTEXT_WEB ],
},
@@ -386,7 +386,7 @@ export const buildLiveContainerVersionAMP = ( {
} = {} ) => {
return liveContainerVersionBuilder( {
overrides: {
- accountId: accountID, // eslint-disable-line sitekit/camelcase-acronyms
+ accountId: accountID, // eslint-disable-line sitekit/acronym-case
container: {
usageContext: [ CONTEXT_AMP ],
},
diff --git a/assets/js/modules/tagmanager/datastore/__factories__/utils.js b/assets/js/modules/tagmanager/datastore/__factories__/utils.js
index 6a84c2b550b..0971a074913 100644
--- a/assets/js/modules/tagmanager/datastore/__factories__/utils.js
+++ b/assets/js/modules/tagmanager/datastore/__factories__/utils.js
@@ -25,13 +25,13 @@ import {
buildLiveContainerVersionAMP,
} from './builders';
-export const parseLiveContainerVersionIDs = ( { accountId, containerId, container }, callback ) => { // eslint-disable-line sitekit/camelcase-acronyms
+export const parseLiveContainerVersionIDs = ( { accountId, containerId, container }, callback ) => { // eslint-disable-line sitekit/acronym-case
const ids = {
- accountID: accountId, // eslint-disable-line sitekit/camelcase-acronyms
- containerID: container.publicId, // eslint-disable-line sitekit/camelcase-acronyms
- ampContainerID: container.publicId, // eslint-disable-line sitekit/camelcase-acronyms
- internalContainerID: containerId, // eslint-disable-line sitekit/camelcase-acronyms
- internalAMPContainerID: containerId, // eslint-disable-line sitekit/camelcase-acronyms
+ accountID: accountId, // eslint-disable-line sitekit/acronym-case
+ containerID: container.publicId, // eslint-disable-line sitekit/acronym-case
+ ampContainerID: container.publicId, // eslint-disable-line sitekit/acronym-case
+ internalContainerID: containerId, // eslint-disable-line sitekit/acronym-case
+ internalAMPContainerID: containerId, // eslint-disable-line sitekit/acronym-case
};
if ( callback ) {
callback( ids );
diff --git a/assets/js/modules/tagmanager/datastore/accounts.js b/assets/js/modules/tagmanager/datastore/accounts.js
index 4cd0d67a5a3..3fd93354d0c 100644
--- a/assets/js/modules/tagmanager/datastore/accounts.js
+++ b/assets/js/modules/tagmanager/datastore/accounts.js
@@ -109,21 +109,21 @@ export const baseActions = {
const { isAMP, isSecondaryAMP } = select( CORE_SITE );
if ( ! isAMP() || isSecondaryAMP() ) {
const webContainers = select( STORE_NAME ).getWebContainers( accountID );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const webContainer = webContainers[ 0 ] || { publicId: CONTAINER_CREATE, containerId: '' };
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setContainerID( webContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setInternalContainerID( webContainer.containerId );
}
if ( isAMP() ) {
const ampContainers = select( STORE_NAME ).getAMPContainers( accountID );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const ampContainer = ampContainers[ 0 ] || { publicId: CONTAINER_CREATE, containerId: '' };
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setAMPContainerID( ampContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setInternalAMPContainerID( ampContainer.containerId );
}
},
@@ -163,7 +163,7 @@ export const baseResolvers = {
}
if ( accounts?.length && ! select( STORE_NAME ).getAccountID() ) {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).selectAccount( accounts[ 0 ].accountId );
}
},
diff --git a/assets/js/modules/tagmanager/datastore/accounts.test.js b/assets/js/modules/tagmanager/datastore/accounts.test.js
index df467604048..30a20c50404 100644
--- a/assets/js/modules/tagmanager/datastore/accounts.test.js
+++ b/assets/js/modules/tagmanager/datastore/accounts.test.js
@@ -147,7 +147,7 @@ describe( 'modules/tagmanager accounts', () => {
container: { usageContext: [ CONTEXT_WEB ] },
count: 3,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
const [ firstContainer ] = containers;
let resolveResponse;
const responsePromise = new Promise( ( resolve ) => {
@@ -171,8 +171,8 @@ describe( 'modules/tagmanager accounts', () => {
await promise;
expect( registry.select( STORE_NAME ).getAccountID() ).toBe( accountID );
- expect( registry.select( STORE_NAME ).getContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getWebContainers( accountID ) ).toEqual( containers );
@@ -185,14 +185,14 @@ describe( 'modules/tagmanager accounts', () => {
container: { usageContext: [ CONTEXT_WEB ] },
count: 3,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
const [ firstContainer ] = containers;
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
await registry.dispatch( STORE_NAME ).selectAccount( accountID );
- expect( registry.select( STORE_NAME ).getContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( '' );
} );
@@ -218,7 +218,7 @@ describe( 'modules/tagmanager accounts', () => {
container: { usageContext: [ CONTEXT_AMP ] },
count: 3,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
const [ firstContainer ] = containers;
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
@@ -226,8 +226,8 @@ describe( 'modules/tagmanager accounts', () => {
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( '' );
- expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( firstContainer.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( firstContainer.containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'selects "set up a new container" if there are none', async () => {
@@ -247,19 +247,19 @@ describe( 'modules/tagmanager accounts', () => {
beforeEach( () => registry.dispatch( CORE_SITE ).receiveSiteInfo( { ampMode: AMP_MODE_SECONDARY } ) );
it( 'selects both first containers for the selected account', async () => {
- const { accountId } = factories.accountBuilder(); // eslint-disable-line sitekit/camelcase-acronyms
- const accountID = accountId; // eslint-disable-line sitekit/camelcase-acronyms
- const webContainers = factories.buildContainers( 3, { accountId, usageContext: [ CONTEXT_WEB ] } ); // eslint-disable-line sitekit/camelcase-acronyms
- const ampContainers = factories.buildContainers( 3, { accountId, usageContext: [ CONTEXT_AMP ] } ); // eslint-disable-line sitekit/camelcase-acronyms
+ const { accountId } = factories.accountBuilder(); // eslint-disable-line sitekit/acronym-case
+ const accountID = accountId; // eslint-disable-line sitekit/acronym-case
+ const webContainers = factories.buildContainers( 3, { accountId, usageContext: [ CONTEXT_WEB ] } ); // eslint-disable-line sitekit/acronym-case
+ const ampContainers = factories.buildContainers( 3, { accountId, usageContext: [ CONTEXT_AMP ] } ); // eslint-disable-line sitekit/acronym-case
const containers = [ ...webContainers, ...ampContainers ];
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
await registry.dispatch( STORE_NAME ).selectAccount( accountID );
- expect( registry.select( STORE_NAME ).getContainerID() ).toBe( webContainers[ 0 ].publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( webContainers[ 0 ].containerId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( ampContainers[ 0 ].publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( ampContainers[ 0 ].containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerID() ).toBe( webContainers[ 0 ].publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( webContainers[ 0 ].containerId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( ampContainers[ 0 ].publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( ampContainers[ 0 ].containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'selects "set up a new container" if there are none', async () => {
diff --git a/assets/js/modules/tagmanager/datastore/base.js b/assets/js/modules/tagmanager/datastore/base.js
index 42169ee2abf..097cb8c68b6 100644
--- a/assets/js/modules/tagmanager/datastore/base.js
+++ b/assets/js/modules/tagmanager/datastore/base.js
@@ -33,6 +33,7 @@ let baseModuleStore = Modules.createModuleStore( 'tagmanager', {
'internalAMPContainerID',
'useSnippet',
'ownerID',
+ 'gaPropertyID',
],
submitChanges,
validateCanSubmitChanges,
@@ -40,22 +41,26 @@ let baseModuleStore = Modules.createModuleStore( 'tagmanager', {
// Rename generated pieces to adhere to our convention.
baseModuleStore = ( ( { actions, selectors, ...store } ) => {
- // eslint-disable-next-line sitekit/camelcase-acronyms
- const { setAmpContainerID, ...restActions } = actions;
- // eslint-disable-next-line sitekit/camelcase-acronyms
- const { getAmpContainerID, ...restSelectors } = selectors;
+ // eslint-disable-next-line sitekit/acronym-case
+ const { setAmpContainerID, setGaPropertyID, ...restActions } = actions;
+ // eslint-disable-next-line sitekit/acronym-case
+ const { getAmpContainerID, getGaPropertyID, ...restSelectors } = selectors;
return {
...store,
actions: {
...restActions,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
setAMPContainerID: setAmpContainerID,
+ // eslint-disable-next-line sitekit/acronym-case
+ setGAPropertyID: setGaPropertyID,
},
selectors: {
...restSelectors,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
getAMPContainerID: getAmpContainerID,
+ // eslint-disable-next-line sitekit/acronym-case
+ getGAPropertyID: getGaPropertyID,
},
};
} )( baseModuleStore );
diff --git a/assets/js/modules/tagmanager/datastore/containers.js b/assets/js/modules/tagmanager/datastore/containers.js
index 7afdc27e5a9..e93b16d1b44 100644
--- a/assets/js/modules/tagmanager/datastore/containers.js
+++ b/assets/js/modules/tagmanager/datastore/containers.js
@@ -149,11 +149,11 @@ const baseActions = {
}
if ( container.usageContext.includes( CONTEXT_WEB ) ) {
dispatch( STORE_NAME ).setContainerID( containerID );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setInternalContainerID( container.containerId );
} else if ( container.usageContext.includes( CONTEXT_AMP ) ) {
dispatch( STORE_NAME ).setAMPContainerID( containerID );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
dispatch( STORE_NAME ).setInternalAMPContainerID( container.containerId );
}
},
@@ -230,7 +230,7 @@ const baseSelectors = {
return undefined;
}
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
return containers.find( ( { publicId } ) => containerID === publicId ) || null;
} ),
diff --git a/assets/js/modules/tagmanager/datastore/containers.test.js b/assets/js/modules/tagmanager/datastore/containers.test.js
index dc7cf9629e1..75fa9f0a665 100644
--- a/assets/js/modules/tagmanager/datastore/containers.test.js
+++ b/assets/js/modules/tagmanager/datastore/containers.test.js
@@ -40,6 +40,7 @@ describe( 'modules/tagmanager containers', () => {
internalAMPContainerID: '',
internalContainerID: '',
useSnippet: true,
+ gaPropertyID: '',
};
beforeAll( () => {
@@ -64,7 +65,7 @@ describe( 'modules/tagmanager containers', () => {
describe( 'actions', () => {
describe( 'createContainer', () => {
it( 'creates a container and adds it to the store ', async () => {
- const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/acronym-case
const usageContext = fixtures.createContainer.usageContext[ 0 ];
const containerName = 'sitekit';
@@ -94,7 +95,7 @@ describe( 'modules/tagmanager containers', () => {
} );
it( 'sets isDoingCreateContainer ', async () => {
- const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/acronym-case
const usageContext = fixtures.createContainer.usageContext[ 0 ];
muteFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/create-container/ );
@@ -107,7 +108,7 @@ describe( 'modules/tagmanager containers', () => {
} );
it( 'dispatches an error if the request fails ', async () => {
- const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = fixtures.createContainer.accountId; // eslint-disable-line sitekit/acronym-case
const usageContext = fixtures.createContainer.usageContext[ 0 ];
const containerName = 'sitekit';
const errorResponse = {
@@ -140,34 +141,38 @@ describe( 'modules/tagmanager containers', () => {
const { account, containers } = factories.buildAccountWithContainers( {
container: { usageContext: [ CONTEXT_WEB ] },
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
+
const [ container ] = containers;
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
+
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( '' );
- await registry.dispatch( STORE_NAME ).selectContainerByID( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
+ await registry.dispatch( STORE_NAME ).selectContainerByID( container.publicId ); // eslint-disable-line sitekit/acronym-case
- expect( registry.select( STORE_NAME ).getContainerID() ).toBe( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( container.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerID() ).toBe( container.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( container.containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'sets the ampContainerID and internalAMPContainerID for an AMP container', async () => {
const { account, containers } = factories.buildAccountWithContainers( {
container: { usageContext: [ CONTEXT_AMP ] },
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
+
const [ container ] = containers;
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
+
expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( '' );
expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( '' );
- await registry.dispatch( STORE_NAME ).selectContainerByID( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
+ await registry.dispatch( STORE_NAME ).selectContainerByID( container.publicId ); // eslint-disable-line sitekit/acronym-case
- expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( container.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( container.publicId ); // eslint-disable-line sitekit/acronym-case
+ expect( registry.select( STORE_NAME ).getInternalAMPContainerID() ).toBe( container.containerId ); // eslint-disable-line sitekit/acronym-case
} );
it( 'does nothing for a containerID that does not exist in state', async () => {
@@ -197,18 +202,18 @@ describe( 'modules/tagmanager containers', () => {
it( 'returns the full container object for a container in state with a matching publicId', () => {
const { account, containers } = factories.buildAccountWithContainers( { count: 5 } );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
const container = containers[ 2 ];
- expect( registry.select( STORE_NAME ).getContainerByID( accountID, container.publicId ) ).toEqual( container ); // eslint-disable-line sitekit/camelcase-acronyms
+ expect( registry.select( STORE_NAME ).getContainerByID( accountID, container.publicId ) ).toEqual( container ); // eslint-disable-line sitekit/acronym-case
} );
} );
describe( 'getContainers', () => {
it( 'uses a resolver to make a network request', async () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
fetchMock.getOnce(
/^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/,
@@ -237,7 +242,7 @@ describe( 'modules/tagmanager containers', () => {
it( 'does not make a network request if containers for this account are already present', async () => {
const { account, containers } = factories.buildAccountWithContainers();
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
@@ -279,9 +284,9 @@ describe( 'modules/tagmanager containers', () => {
it( 'uses the getContainers resolver to make a network request', async () => {
const account = factories.accountBuilder();
const containers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/acronym-case
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
fetchMock.getOnce(
/^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/,
@@ -311,13 +316,13 @@ describe( 'modules/tagmanager containers', () => {
it( 'returns only containers with a web usageContext', () => {
const account = factories.accountBuilder();
const webContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/acronym-case
);
const ampContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/acronym-case
);
const containers = [ ...webContainers, ...ampContainers ];
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
@@ -331,9 +336,9 @@ describe( 'modules/tagmanager containers', () => {
it( 'uses the getContainers resolver to make a network request', async () => {
const account = factories.accountBuilder();
const containers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/acronym-case
);
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
fetchMock.getOnce(
/^\/google-site-kit\/v1\/modules\/tagmanager\/data\/containers/,
@@ -363,13 +368,13 @@ describe( 'modules/tagmanager containers', () => {
it( 'returns only containers with an AMP usageContext', () => {
const account = factories.accountBuilder();
const webContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } // eslint-disable-line sitekit/acronym-case
);
const ampContainers = factories.buildContainers(
- 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/camelcase-acronyms
+ 3, { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } // eslint-disable-line sitekit/acronym-case
);
const containers = [ ...webContainers, ...ampContainers ];
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
diff --git a/assets/js/modules/tagmanager/datastore/index.js b/assets/js/modules/tagmanager/datastore/index.js
index d820bd1301a..d0eae6cc96e 100644
--- a/assets/js/modules/tagmanager/datastore/index.js
+++ b/assets/js/modules/tagmanager/datastore/index.js
@@ -39,9 +39,6 @@ const store = Data.combineStores(
service
);
-// Register this store on the global registry.
-Data.registerStore( STORE_NAME, store );
-
export const {
initialState,
actions,
@@ -51,4 +48,8 @@ export const {
selectors,
} = store;
+export const registerStore = ( registry ) => {
+ registry.registerStore( STORE_NAME, store );
+};
+
export default store;
diff --git a/assets/js/modules/tagmanager/datastore/index.test.js b/assets/js/modules/tagmanager/datastore/index.test.js
index a2d43639fd5..efcec97a2f3 100644
--- a/assets/js/modules/tagmanager/datastore/index.test.js
+++ b/assets/js/modules/tagmanager/datastore/index.test.js
@@ -31,7 +31,7 @@ describe( 'modules/tagmanager', () => {
const actions = dispatch( STORE_NAME );
expect( actions.setAMPContainerID ).toBeInstanceOf( Function );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( actions.setAmpContainerID ).not.toBeInstanceOf( Function );
} );
} );
@@ -42,7 +42,7 @@ describe( 'modules/tagmanager', () => {
const selectors = select( STORE_NAME );
expect( selectors.getAMPContainerID ).toBeInstanceOf( Function );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( selectors.getAmpContainerID ).not.toBeInstanceOf( Function );
} );
} );
diff --git a/assets/js/modules/tagmanager/datastore/settings.js b/assets/js/modules/tagmanager/datastore/settings.js
index fec09360b8d..e9bc1630f49 100644
--- a/assets/js/modules/tagmanager/datastore/settings.js
+++ b/assets/js/modules/tagmanager/datastore/settings.js
@@ -67,8 +67,8 @@ export async function submitChanges( { select, dispatch } ) {
return { error };
}
- await dispatch( STORE_NAME ).setContainerID( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- await dispatch( STORE_NAME ).setInternalContainerID( container.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ await dispatch( STORE_NAME ).setContainerID( container.publicId ); // eslint-disable-line sitekit/acronym-case
+ await dispatch( STORE_NAME ).setInternalContainerID( container.containerId ); // eslint-disable-line sitekit/acronym-case
}
const ampContainerID = select( STORE_NAME ).getAMPContainerID();
@@ -81,8 +81,8 @@ export async function submitChanges( { select, dispatch } ) {
return { error };
}
- await dispatch( STORE_NAME ).setAMPContainerID( container.publicId ); // eslint-disable-line sitekit/camelcase-acronyms
- await dispatch( STORE_NAME ).setInternalAMPContainerID( container.containerId ); // eslint-disable-line sitekit/camelcase-acronyms
+ await dispatch( STORE_NAME ).setAMPContainerID( container.publicId ); // eslint-disable-line sitekit/acronym-case
+ await dispatch( STORE_NAME ).setInternalAMPContainerID( container.containerId ); // eslint-disable-line sitekit/acronym-case
}
// This action shouldn't be called if settings haven't changed,
@@ -93,6 +93,13 @@ export async function submitChanges( { select, dispatch } ) {
if ( error ) {
return { error };
}
+
+ // Fetch the latest settings in the Analytics store so that we can update
+ // the filtered value of canUseSnippet.
+ const analyticsModuleConnected = select( CORE_MODULES ).isModuleConnected( 'analytics' );
+ if ( analyticsModuleConnected ) {
+ await dispatch( MODULES_ANALYTICS ).fetchGetSettings();
+ }
}
await API.invalidateCache( 'modules', 'tagmanager' );
diff --git a/assets/js/modules/tagmanager/datastore/settings.test.js b/assets/js/modules/tagmanager/datastore/settings.test.js
index 3476b2b061a..59b7c6aa533 100644
--- a/assets/js/modules/tagmanager/datastore/settings.test.js
+++ b/assets/js/modules/tagmanager/datastore/settings.test.js
@@ -38,6 +38,7 @@ import {
createTestRegistry,
unsubscribeFromAll,
muteFetch,
+ provideModules,
} from '../../../../../tests/js/utils';
import { getItem, setItem } from '../../../googlesitekit/api/cache';
import { createCacheKey } from '../../../googlesitekit/api';
@@ -72,15 +73,11 @@ describe( 'modules/tagmanager settings', () => {
accountID: '100',
containerID: 'GTM-WEB1234',
internalContainerID: '300',
- // ampContainerID: '',
- // internalAMPContainerID: '',
useSnippet: true,
};
const validSettingsAMP = {
accountID: '100',
- // containerID: '',
- // internalContainerID: '',
ampContainerID: 'GTM-AMP1234',
internalAMPContainerID: '399',
useSnippet: true,
@@ -98,6 +95,11 @@ describe( 'modules/tagmanager settings', () => {
beforeEach( () => {
registry = createTestRegistry();
+ // TODO: the analytics module should not be connected by default in the module fixtures assets/js/googlesitekit/modules/datastore/fixtures.json
+ provideModules( registry, [ {
+ slug: 'analytics',
+ active: false,
+ } ] );
registry.dispatch( CORE_SITE ).receiveSiteInfo( {} );
} );
@@ -168,9 +170,9 @@ describe( 'modules/tagmanager settings', () => {
);
expect( result.error ).toBeFalsy();
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( createdContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( createdContainer.containerId );
} );
@@ -278,7 +280,7 @@ describe( 'modules/tagmanager settings', () => {
ampContainerName: 'Sitekit AMP',
} );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const createdAMPContainer = containerBuilder( { accountId: '12345', usageContext: [ CONTEXT_AMP ] } );
fetchMock.postOnce(
@@ -310,7 +312,7 @@ describe( 'modules/tagmanager settings', () => {
}
);
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( createdAMPContainer.publicId );
} );
} );
@@ -331,9 +333,9 @@ describe( 'modules/tagmanager settings', () => {
} );
const account = accountBuilder();
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const createdWebContainer = containerBuilder( { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] } );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const createdAMPContainer = containerBuilder( { accountId: account.accountId, usageContext: [ CONTEXT_AMP ] } );
fetchMock.postOnce(
@@ -364,9 +366,9 @@ describe( 'modules/tagmanager settings', () => {
const { error } = await registry.dispatch( STORE_NAME ).submitChanges();
expect( error ).toBe( undefined );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( createdWebContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getAMPContainerID() ).toBe( createdAMPContainer.publicId );
} );
} );
@@ -456,7 +458,7 @@ describe( 'modules/tagmanager settings', () => {
container: { usageContext: [ CONTEXT_WEB ] },
count: 2,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
@@ -474,7 +476,7 @@ describe( 'modules/tagmanager settings', () => {
container: { usageContext: [ CONTEXT_WEB ] },
count: 2,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
@@ -575,7 +577,7 @@ describe( 'modules/tagmanager settings', () => {
const { accountID } = buildAndReceiveWebAndAMP( { webPropertyID: 'UA-12345-1', ampPropertyID: 'UA-12345-1' } );
const { containers } = buildAccountWithContainers( {
- account: { accountId: accountID }, // eslint-disable-line sitekit/camelcase-acronyms
+ account: { accountId: accountID }, // eslint-disable-line sitekit/acronym-case
container: { usageContext: [ CONTEXT_AMP ] },
count: 2,
} );
@@ -596,7 +598,7 @@ describe( 'modules/tagmanager settings', () => {
const { accountID } = buildAndReceiveWebAndAMP( { webPropertyID: 'UA-12345-1', ampPropertyID: 'UA-12345-1' } );
const { containers } = buildAccountWithContainers( {
- account: { accountId: accountID }, // eslint-disable-line sitekit/camelcase-acronyms
+ account: { accountId: accountID }, // eslint-disable-line sitekit/acronym-case
container: { usageContext: [ CONTEXT_AMP ] },
count: 2,
} );
@@ -771,7 +773,7 @@ describe( 'modules/tagmanager settings', () => {
container: { usageContext: [ CONTEXT_WEB, CONTEXT_AMP ] },
count: 2,
} );
- const accountID = account.accountId; // eslint-disable-line sitekit/camelcase-acronyms
+ const accountID = account.accountId; // eslint-disable-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setAccountID( accountID );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
diff --git a/assets/js/modules/tagmanager/datastore/tags.test.js b/assets/js/modules/tagmanager/datastore/tags.test.js
index 35dea611ba9..a96b115dd3f 100644
--- a/assets/js/modules/tagmanager/datastore/tags.test.js
+++ b/assets/js/modules/tagmanager/datastore/tags.test.js
@@ -116,7 +116,7 @@ describe( 'modules/tagmanager existing-tag', () => {
describe( 'getTagPermission', () => {
it( 'uses a resolver to make a network request', async () => {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const { accountId: accountID, publicId: containerID } = factories.containerBuilder();
const permission = true;
const permissionResponse = { accountID, containerID, permission };
@@ -203,13 +203,13 @@ describe( 'modules/tagmanager existing-tag', () => {
it( 'returns true if a user has access to this tag', async () => {
const container = factories.containerBuilder();
const permissionResponse = {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
accountID: container.accountId,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
containerID: container.publicId,
permission: true,
};
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const containerID = container.publicId;
registry.dispatch( STORE_NAME ).receiveGetTagPermission( permissionResponse, { containerID } );
@@ -219,13 +219,13 @@ describe( 'modules/tagmanager existing-tag', () => {
it( 'returns false if a user cannot access the requested tag', async () => {
const container = factories.containerBuilder();
const permissionResponse = {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
accountID: container.accountId,
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
containerID: container.publicId,
permission: false,
};
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const containerID = container.publicId;
registry.dispatch( STORE_NAME ).receiveGetTagPermission( permissionResponse, { containerID } );
@@ -233,7 +233,7 @@ describe( 'modules/tagmanager existing-tag', () => {
} );
it( 'returns undefined if the tag permission is not loaded yet', async () => {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const { publicId: containerID } = factories.containerBuilder();
muteFetch( /^\/google-site-kit\/v1\/modules\/tagmanager\/data\/tag-permission/ );
diff --git a/assets/js/modules/tagmanager/hooks/useExistingTagEffect.test.js b/assets/js/modules/tagmanager/hooks/useExistingTagEffect.test.js
index 6b30dfcac42..06db401b31b 100644
--- a/assets/js/modules/tagmanager/hooks/useExistingTagEffect.test.js
+++ b/assets/js/modules/tagmanager/hooks/useExistingTagEffect.test.js
@@ -37,19 +37,19 @@ describe( 'useExistingTagEffect', () => {
it( 'sets the accountID and containerID when there is an existing tag with permission', async () => {
const account = factories.accountBuilder();
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
const accountID = account.accountId;
const containers = factories.buildContainers(
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
3, { accountId: account.accountId, usageContext: [ CONTEXT_WEB ] }
);
const [ firstContainer, existingContainer ] = containers;
registry.dispatch( STORE_NAME ).receiveGetAccounts( [ account ] );
registry.dispatch( STORE_NAME ).receiveGetContainers( containers, { accountID } );
registry.dispatch( STORE_NAME ).setAccountID( accountID );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setContainerID( firstContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).setInternalContainerID( firstContainer.containerId );
let rerender;
@@ -59,25 +59,25 @@ describe( 'useExistingTagEffect', () => {
resolve();
} ) );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( firstContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( firstContainer.containerId );
await act( () => new Promise( async ( resolve ) => {
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetTagPermission( { accountID, permission: true }, { containerID: existingContainer.publicId } );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
registry.dispatch( STORE_NAME ).receiveGetExistingTag( existingContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
await untilResolved( registry, STORE_NAME ).getTagPermission( existingContainer.publicId );
rerender();
resolve();
} ) );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getContainerID() ).toBe( existingContainer.publicId );
- // eslint-disable-next-line sitekit/camelcase-acronyms
+ // eslint-disable-next-line sitekit/acronym-case
expect( registry.select( STORE_NAME ).getInternalContainerID() ).toBe( existingContainer.containerId );
} );
} );
diff --git a/assets/js/modules/search-console/components/adminbar/GoogleSitekitSearchConsoleAdminbarWidget.js b/assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.js
similarity index 53%
rename from assets/js/modules/search-console/components/adminbar/GoogleSitekitSearchConsoleAdminbarWidget.js
rename to assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.js
index cd24f75c620..50b0b767088 100644
--- a/assets/js/modules/search-console/components/adminbar/GoogleSitekitSearchConsoleAdminbarWidget.js
+++ b/assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.js
@@ -1,5 +1,5 @@
/**
- * GoogleSitekitSearchConsoleAdminbarWidget component.
+ * Tag Manager useGAPropertyIDEffect custom hook.
*
* Site Kit by Google, Copyright 2021 Google LLC
*
@@ -17,25 +17,24 @@
*/
/**
- * Internal dependencies
+ * WordPress dependencies
*/
-import SearchConsoleAdminbarWidgetOverview from './SearchConsoleAdminbarWidgetOverview';
+import { useEffect } from '@wordpress/element';
/**
- * WordPress dependencies
+ * Internal dependencies
*/
-import { Component } from '@wordpress/element';
+import Data from 'googlesitekit-data';
+import { STORE_NAME } from '../datastore/constants';
+const { useSelect, useDispatch } = Data;
-class GoogleSitekitSearchConsoleAdminbarWidget extends Component {
- render() {
- if ( typeof global._googlesitekitLegacyData.permaLink !== typeof undefined && '' === global._googlesitekitLegacyData.permaLink ) {
- return null;
- }
+export default function useGAPropertyIDEffect() {
+ const singleAnalyticsPropertyID = useSelect( ( select ) => select( STORE_NAME ).getSingleAnalyticsPropertyID() );
+ const { setGAPropertyID } = useDispatch( STORE_NAME );
- return (
-
- );
- }
+ useEffect( () => {
+ if ( singleAnalyticsPropertyID !== undefined ) {
+ setGAPropertyID( singleAnalyticsPropertyID || '' );
+ }
+ }, [ singleAnalyticsPropertyID ] );
}
-
-export default GoogleSitekitSearchConsoleAdminbarWidget;
diff --git a/assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.test.js b/assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.test.js
new file mode 100644
index 00000000000..9a8fde744a4
--- /dev/null
+++ b/assets/js/modules/tagmanager/hooks/useGAPropertyIDEffect.test.js
@@ -0,0 +1,58 @@
+/**
+ * Tag Manager useGAPropertyIDEffect hook tests.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Internal dependencies
+ */
+import { renderHook, actHook as act } from '../../../../../tests/js/test-utils';
+import { createTestRegistry } from '../../../../../tests/js/utils';
+import { STORE_NAME } from '../datastore/constants';
+import {
+ createBuildAndReceivers,
+} from '../datastore/__factories__/utils';
+import useGAPropertyIDEffect from './useGAPropertyIDEffect';
+
+describe( 'useGAPropertyIDEffect', () => {
+ let registry;
+ beforeEach( () => {
+ registry = createTestRegistry();
+ // Set settings to prevent fetch in resolver.
+ registry.dispatch( STORE_NAME ).receiveGetSettings( {} );
+ // Set set no existing tag.
+ registry.dispatch( STORE_NAME ).receiveGetExistingTag( null );
+ } );
+
+ it( 'sets the gaPropertyID with the current detected singular property ID in selected containers', async () => {
+ const { buildAndReceiveWebAndAMP } = createBuildAndReceivers( registry );
+
+ const TEST_GA_PROPERTY_ID = 'UA-123456789-1';
+
+ buildAndReceiveWebAndAMP( {
+ webPropertyID: TEST_GA_PROPERTY_ID,
+ } );
+
+ await act( () => new Promise( async ( resolve ) => {
+ renderHook( () => useGAPropertyIDEffect(), { registry } );
+ resolve();
+ } ) );
+
+ const propertyID = registry.select( STORE_NAME ).getGAPropertyID();
+
+ expect( propertyID ).toBe( TEST_GA_PROPERTY_ID );
+ } );
+} );
diff --git a/assets/js/modules/tagmanager/index.js b/assets/js/modules/tagmanager/index.js
index 61e5d5a96cf..4537fc7f69e 100644
--- a/assets/js/modules/tagmanager/index.js
+++ b/assets/js/modules/tagmanager/index.js
@@ -16,25 +16,18 @@
* limitations under the License.
*/
-/**
- * WordPress dependencies
- */
-import domReady from '@wordpress/dom-ready';
-
/**
* Internal dependencies
*/
-import Modules from 'googlesitekit-modules';
-import './datastore';
-import { STORE_NAME } from './datastore/constants';
import { SetupMain } from './components/setup';
import { SettingsEdit, SettingsView } from './components/settings';
import TagManagerIcon from '../../../svg/tagmanager.svg';
+import { STORE_NAME } from './datastore/constants';
+
+export { registerStore } from './datastore';
-domReady( () => {
- // IMPORTANT: When updating arguments here, also update the same call in
- // `provideModuleRegistrations`.
- Modules.registerModule(
+export const registerModule = ( modules ) => {
+ modules.registerModule(
'tagmanager',
{
storeName: STORE_NAME,
@@ -44,4 +37,4 @@ domReady( () => {
Icon: TagManagerIcon,
}
);
-} );
+};
diff --git a/assets/js/pagead2.ads.js b/assets/js/pagead2.ads.js
deleted file mode 100644
index d3806cb2632..00000000000
--- a/assets/js/pagead2.ads.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * This file is intended to detect active ad blocker.
- *
- * Ad blockers block URLs containing the word "ads.js" including this file. The
- * popular AdBlock extension lets that pass though, hence the filename also
- * includes "pagead2" which is blocked by AdBlock.
- *
- * If the file does load, `googlesitekit.canAdsRun` is set to true. If the
- * AdSense datastore is loaded, an action to flag the adblocker inactive will
- * be dispatched.
- */
-
-if ( global._googlesitekitLegacyData === undefined ) {
- global._googlesitekitLegacyData = {};
-}
-
-global._googlesitekitLegacyData.canAdsRun = true;
-
-// Ensure that this flag does not get wiped at a later stage during pageload.
-document.addEventListener( 'DOMContentLoaded', function() {
- global._googlesitekitLegacyData.canAdsRun = true;
-} );
-
-// If registry and AdSense datastore are loaded, use that instead of the global.
-// eslint-disable-next-line no-unused-expressions
-global.googlesitekit?.data?.dispatch?.( 'modules/adsense' )?.receiveIsAdBlockerActive( false );
diff --git a/assets/js/util/convert-time.js b/assets/js/util/convert-time.js
new file mode 100644
index 00000000000..09f26b979fb
--- /dev/null
+++ b/assets/js/util/convert-time.js
@@ -0,0 +1,46 @@
+/**
+ * Time related utility functions.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Converts seconds into an array with the following values [HH, MM, SS, MS] as described below.
+ * HH: hours.
+ * MM: minutes.
+ * SS: seconds.
+ * MS: milliseconds.
+ *
+ * For example, passing 196.385 returns [ 0, 3, 16, 385 ].
+ *
+ * @since 1.27.0
+ *
+ * @param {number} seconds The number of seconds.
+ * @return {Array} Array containing the hours, minutes, seconds and milliseconds.
+ */
+export const convertSecondsToArray = ( seconds ) => {
+ seconds = parseFloat( seconds );
+
+ if ( isNaN( seconds ) || 0 === seconds ) {
+ return [ 0, 0, 0, 0 ];
+ }
+
+ return [
+ Math.floor( seconds / 60 / 60 ),
+ Math.floor( ( seconds / 60 ) % 60 ),
+ Math.floor( seconds % 60 ),
+ ( Math.floor( seconds * 1000 ) ) - ( Math.floor( seconds ) * 1000 ),
+ ];
+};
diff --git a/assets/js/util/convert-time.test.js b/assets/js/util/convert-time.test.js
new file mode 100644
index 00000000000..ec9892040fb
--- /dev/null
+++ b/assets/js/util/convert-time.test.js
@@ -0,0 +1,60 @@
+/**
+ * Time related utility functions tests.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Internal dependencies
+ */
+import { convertSecondsToArray } from './convert-time';
+
+describe( 'convertSecondsToArray', () => {
+ it.each( [
+ [
+ 'should return an array with 0 as values if a string is passed as parameter',
+ 'test',
+ [ 0, 0, 0, 0 ],
+ ],
+ [
+ 'should return an array with 0 as values if an object is passed as parameter',
+ {},
+ [ 0, 0, 0, 0 ],
+ ],
+ [
+ 'should return an array with 0 as values if an array is passed as parameter',
+ [],
+ [ 0, 0, 0, 0 ],
+ ],
+ [
+ 'should return an array with 0 as values if a boolean is passed as parameter',
+ true,
+ [ 0, 0, 0, 0 ],
+ ],
+ [
+ 'should return an array with the correct values if seconds and milliseconds are passed as parameter',
+ 196.385,
+ [ 0, 3, 16, 385 ],
+ ],
+ [
+ 'should return an array with the correct values if seconds are passed as parameter',
+ 196,
+ [ 0, 3, 16, 0 ],
+ ],
+ ] )( '%s', async ( _, args, expected ) => {
+ const secondsArray = convertSecondsToArray( args );
+ expect( secondsArray ).toEqual( expected );
+ } );
+} );
diff --git a/assets/js/components/adminbar/LegacyAdminBarModules.js b/assets/js/util/create-incremental-array-by-size.js
similarity index 60%
rename from assets/js/components/adminbar/LegacyAdminBarModules.js
rename to assets/js/util/create-incremental-array-by-size.js
index d5e8a5fcda7..bd43688037e 100644
--- a/assets/js/components/adminbar/LegacyAdminBarModules.js
+++ b/assets/js/util/create-incremental-array-by-size.js
@@ -1,5 +1,5 @@
/**
- * AdminbarModules component.
+ * Create Incremental Array by Size utility.
*
* Site Kit by Google, Copyright 2021 Google LLC
*
@@ -17,17 +17,12 @@
*/
/**
- * WordPress dependencies
+ * Creates an array of length equal to size with incremental values starting at 0.
+ *
+ * @since 1.28.0
+ *
+ * @param {number} size Array length.
+ * @return {number[]} Array of incremental numbers.
+ * @example createIncrementalArrayBySize(3); // [0, 1, 2]
*/
-import { withFilters } from '@wordpress/components';
-import { Component, Fragment } from '@wordpress/element';
-
-class LegacyAdminBarModules extends Component {
- render() {
- return (
-
- );
- }
-}
-
-export default withFilters( 'googlesitekit.AdminbarModules' )( LegacyAdminBarModules );
+export const createIncrementalArrayBySize = ( size ) => new Array( size ?? 0 ).fill().map( ( _, i ) => i );
diff --git a/assets/js/util/create-incremental-array-by-size.test.js b/assets/js/util/create-incremental-array-by-size.test.js
new file mode 100644
index 00000000000..586a96b195d
--- /dev/null
+++ b/assets/js/util/create-incremental-array-by-size.test.js
@@ -0,0 +1,40 @@
+/**
+ * Create Incremental Array by Size utility tests.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Internal dependencies
+ */
+import { createIncrementalArrayBySize } from './create-incremental-array-by-size';
+
+describe( 'createIncrementalArrayBySize', () => {
+ // [ size, expectedReturnValue ]
+ const valuesToTest = [
+ [ undefined, [] ],
+ [ null, [] ],
+ [ 0, [] ],
+ [ 1, [ 0 ] ],
+ [ 2, [ 0, 1 ] ],
+ [ 3, [ 0, 1, 2 ] ],
+ [ 4, [ 0, 1, 2, 3 ] ],
+ [ 5, [ 0, 1, 2, 3, 4 ] ],
+ ];
+
+ it.each( valuesToTest )( 'with size equal to %s, should return %s', ( size, expected ) => {
+ expect( createIncrementalArrayBySize( size ) ).toEqual( expected );
+ } );
+} );
diff --git a/assets/js/util/date-range.js b/assets/js/util/date-range.js
index feb7a438f8c..763dd4d88f2 100644
--- a/assets/js/util/date-range.js
+++ b/assets/js/util/date-range.js
@@ -21,21 +21,16 @@
*/
import { _n, sprintf } from '@wordpress/i18n';
-/**
- * Internal dependencies
- */
-import Data from 'googlesitekit-data';
-import { CORE_USER } from '../googlesitekit/datastore/user/constants';
-
/**
* Gets the current dateRange day count.
*
* @since 1.19.0
+ * @since 1.26.0 `dateRange` is now a required argument.
*
- * @param {string} [dateRange] Optional. The date range slug.
+ * @param {string} dateRange The date range slug.
* @return {number} The number of days in the range.
*/
-export function getCurrentDateRangeDayCount( dateRange = getCurrentDateRangeSlug() ) {
+export function getCurrentDateRangeDayCount( dateRange ) {
const daysMatch = dateRange.match( /last-(\d+)-days/ );
if ( daysMatch && daysMatch[ 1 ] ) {
@@ -45,17 +40,6 @@ export function getCurrentDateRangeDayCount( dateRange = getCurrentDateRangeSlug
throw new Error( 'Unrecognized date range slug.' );
}
-/**
- * Gets the current dateRange slug.
- *
- * @since 1.8.0
- *
- * @return {string} The date range slug.
- */
-export function getCurrentDateRangeSlug() {
- return Data.select( CORE_USER ).getDateRange();
-}
-
/**
* Gets the hash of available date ranges.
*
diff --git a/assets/js/util/i18n.js b/assets/js/util/i18n.js
index 0072a3cd3a8..cd3573d55b0 100644
--- a/assets/js/util/i18n.js
+++ b/assets/js/util/i18n.js
@@ -24,7 +24,7 @@ import { get, isFinite, isPlainObject } from 'lodash';
/**
* WordPress dependencies
*/
-import { __, sprintf } from '@wordpress/i18n';
+import { __, sprintf, _x } from '@wordpress/i18n';
/**
* Converts seconds to a display ready string indicating
@@ -33,28 +33,113 @@ import { __, sprintf } from '@wordpress/i18n';
* For example, passing 65 returns '1m 5s'.
*
* @since 1.0.0
+ * @since 1.28.0 Refactored and renamed to improve localization.
+ * @private
*
- * @param {number} seconds The number of seconds.
+ * @param {number} durationInSeconds The number of seconds.
+ * @param {(Intl.NumberFormatOptions)} [options] Optional formatting options.
* @return {string} Human readable string indicating time elapsed.
+ */
+const durationFormat = ( durationInSeconds, options = {} ) => {
+ const { formatUnit, formatDecimal } = createDurationFormat( durationInSeconds, options );
+
+ try {
+ // Some browsers, e.g. Safari, throw a RangeError when options.style is
+ // not one of decimal, percent, or currency.
+ return formatUnit();
+ } catch {
+ // Fallback to XXh YYm ZZs using localized decimals with hardcoded units.
+ return formatDecimal();
+ }
+};
+
+/**
+ * Creates duration formatting utilities.
+ *
+ * Not intended to be used directly.
+ * Use `numFmt( number, { style: 'duration' } )` instead.
*
+ * @since n.e.x.t
+ * @private
+ *
+ * @param {number} durationInSeconds Duration to format.
+ * @param {Object} [options] Formatting options.
+ * @return {Object} Formatting functions.
*/
-export const prepareSecondsForDisplay = ( seconds ) => {
- seconds = parseInt( seconds, 10 );
+export const createDurationFormat = ( durationInSeconds, options = {} ) => {
+ durationInSeconds = parseInt( durationInSeconds, 10 );
- if ( isNaN( seconds ) || 0 === seconds ) {
- return '0.0s';
+ if ( Number.isNaN( durationInSeconds ) ) {
+ durationInSeconds = 0;
}
- const results = {};
- results.hours = Math.floor( seconds / 60 / 60 );
- results.minutes = Math.floor( ( seconds / 60 ) % 60 );
- results.seconds = Math.floor( seconds % 60 );
- const returnString =
- ( results.hours ? results.hours + 'h ' : '' ) +
- ( results.minutes ? results.minutes + 'm ' : '' ) +
- ( results.seconds ? results.seconds + 's ' : '' );
+ const hours = Math.floor( durationInSeconds / 60 / 60 );
+ const minutes = Math.floor( ( durationInSeconds / 60 ) % 60 );
+ const seconds = Math.floor( durationInSeconds % 60 );
+
+ return {
+ hours,
+ minutes,
+ seconds,
+ formatUnit() {
+ const { unitDisplay = 'short', ...restOptions } = options;
+ const commonOptions = {
+ unitDisplay,
+ ...restOptions,
+ style: 'unit',
+ };
- return returnString.trim();
+ if ( durationInSeconds === 0 ) {
+ return numberFormat( seconds, { ...commonOptions, unit: 'second' } );
+ }
+
+ return sprintf(
+ /* translators: 1: formatted seconds, 2: formatted minutes, 3: formatted hours */
+ _x( '%3$s %2$s %1$s', 'duration of time: hh mm ss', 'google-site-kit' ),
+ seconds ? numberFormat( seconds, { ...commonOptions, unit: 'second' } ) : '',
+ minutes ? numberFormat( minutes, { ...commonOptions, unit: 'minute' } ) : '',
+ hours ? numberFormat( hours, { ...commonOptions, unit: 'hour' } ) : '',
+ ).trim();
+ },
+ /**
+ * Formats the duration using integers and translatable strings.
+ * This is only used as a fallback when the above `formatUnit` fails.
+ *
+ * @since n.e.x.t
+ *
+ * @return {string} Formatted duration.
+ */
+ formatDecimal() {
+ const formattedSeconds = sprintf(
+ // translators: %s number of seconds with "s" as the abbreviated unit.
+ __( '%ds', 'google-site-kit' ),
+ seconds
+ );
+
+ if ( durationInSeconds === 0 ) {
+ return formattedSeconds;
+ }
+
+ const formattedMinutes = sprintf(
+ // translators: %s number of minutes with "m" as the abbreviated unit.
+ __( '%dm', 'google-site-kit' ),
+ minutes
+ );
+ const formattedHours = sprintf(
+ // translators: %s number of hours with "h" as the abbreviated unit.
+ __( '%dh', 'google-site-kit' ),
+ hours
+ );
+
+ return sprintf(
+ /* translators: 1: formatted seconds, 2: formatted minutes, 3: formatted hours */
+ _x( '%3$s %2$s %1$s', 'duration of time: hh mm ss', 'google-site-kit' ),
+ seconds ? formattedSeconds : '',
+ minutes ? formattedMinutes : '',
+ hours ? formattedHours : '',
+ ).trim();
+ },
+ };
};
/**
@@ -163,9 +248,9 @@ export const numFmt = ( number, options = {} ) => {
maximumFractionDigits: 2,
};
} else if ( 's' === options ) {
- formatOptions = {
- style: 'duration',
- };
+ return durationFormat( number, {
+ unitDisplay: 'narrow',
+ } );
} else if ( !! options && typeof options === 'string' ) {
formatOptions = {
style: 'currency',
@@ -180,10 +265,8 @@ export const numFmt = ( number, options = {} ) => {
if ( 'metric' === style ) {
return readableLargeNumber( number );
- }
-
- if ( 'duration' === style ) {
- return prepareSecondsForDisplay( number );
+ } else if ( 'duration' === style ) {
+ return durationFormat( number, options );
}
return numberFormat( number, formatOptions );
diff --git a/assets/js/util/index.js b/assets/js/util/index.js
index 95e026b0368..fd1aef09a29 100644
--- a/assets/js/util/index.js
+++ b/assets/js/util/index.js
@@ -47,6 +47,7 @@ export * from './storage';
export * from './i18n';
export * from './helpers';
export * from './markdown';
+export * from './convert-time';
/**
* Removes a parameter from a URL string.
@@ -436,22 +437,3 @@ export const decodeHTMLEntity = ( str ) => {
return unescape( decoded );
};
-
-/**
- * Gets the meta key for the given user option.
- *
- * @since 1.3.0
- *
- * @param {string} userOptionName User option name.
- * @param {Object} _googlesitekitBaseData Site Kit base data (used for testing).
- * @return {string} Meta key name.
- */
-export function getMetaKeyForUserOption( userOptionName, _googlesitekitBaseData = global._googlesitekitBaseData ) {
- const { blogPrefix, isNetworkMode } = _googlesitekitBaseData;
-
- if ( ! isNetworkMode ) {
- return blogPrefix + userOptionName;
- }
-
- return userOptionName;
-}
diff --git a/assets/js/util/test/durationFormat.js b/assets/js/util/test/durationFormat.js
new file mode 100644
index 00000000000..dbc42d2afa5
--- /dev/null
+++ b/assets/js/util/test/durationFormat.js
@@ -0,0 +1,103 @@
+/**
+ * Duration Formatting tests.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import { createDurationFormat } from '../i18n';
+
+describe( 'durationFormat', () => {
+ describe( 'formatUnit', () => {
+ it.each( [
+ [
+ 0,
+ {},
+ '0 sec',
+ 'en-US',
+ ],
+ [
+ 0,
+ { unitDisplay: 'narrow' },
+ '0s',
+ 'en-US',
+ ],
+ [
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ {},
+ '3 hr 5 min 12 sec',
+ 'en-US',
+ ],
+ [
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ { unitDisplay: 'narrow' },
+ '3h 5m 12s',
+ 'en-US',
+ ],
+ [
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ { unitDisplay: 'long' },
+ '3 hours 5 minutes 12 seconds',
+ 'en-US',
+ ],
+ ] )( 'formats %s seconds with options %o as %s', ( duration, options, expected, locale ) => {
+ const { formatUnit } = createDurationFormat( duration, { locale, ...options } );
+ expect( formatUnit() ).toStrictEqual( expected );
+ } );
+ } );
+
+ describe( 'formatDecimal', () => {
+ it.each( [
+ [
+ 0,
+ '0s',
+ ],
+ [
+ 9,
+ `9s`,
+ ],
+ [
+ 12,
+ `12s`,
+ ],
+ [
+ 35,
+ '35s',
+ ],
+ [
+ 60,
+ '1m',
+ ],
+ [
+ 65,
+ '1m 5s',
+ ],
+ [
+ 125,
+ '2m 5s',
+ ],
+ [
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ '3h 5m 12s',
+ ],
+ [
+ ( 60 * 60 * 7 ) + ( 60 * 2 ) + 42,
+ '7h 2m 42s',
+ ],
+ ] )( 'formats %s seconds with options %o as %s', ( duration, expected ) => {
+ const { formatDecimal } = createDurationFormat( duration );
+ expect( formatDecimal() ).toStrictEqual( expected );
+ } );
+ } );
+} );
diff --git a/assets/js/util/test/getMetaKeyForUserOption.js b/assets/js/util/test/getMetaKeyForUserOption.js
deleted file mode 100644
index 9bab7e79221..00000000000
--- a/assets/js/util/test/getMetaKeyForUserOption.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Internal dependencies
- */
-import { getMetaKeyForUserOption } from '../';
-
-const valuesToTest = [
- [
- 'test_user_option',
- { blogPrefix: '', isNetworkMode: false },
- 'test_user_option',
- ],
- [
- 'test_user_option',
- { blogPrefix: 'wp_', isNetworkMode: false },
- 'wp_test_user_option',
- ],
- [
- 'test_user_option',
- { blogPrefix: 'wp_1_', isNetworkMode: false },
- 'wp_1_test_user_option',
- ],
- [
- 'test_user_option',
- { blogPrefix: '', isNetworkMode: true },
- 'test_user_option',
- ],
- [
- 'test_user_option',
- { blogPrefix: 'wp_', isNetworkMode: true },
- 'test_user_option',
- ],
- [
- 'test_user_option',
- { blogPrefix: 'wp_1_', isNetworkMode: true },
- 'test_user_option',
- ],
-];
-
-describe( 'getMetaKeyForUserOption', () => {
- it.each( valuesToTest )( 'should format the user option %s with _googlesitekitBaseData %p', ( userOptionName, _googlesitekitBaseData, expected ) => {
- expect( getMetaKeyForUserOption( userOptionName, _googlesitekitBaseData ) ).toStrictEqual( expected );
- } );
-} );
diff --git a/assets/js/util/test/numFmt.js b/assets/js/util/test/numFmt.js
index a4d0d30d9a2..248c1bb4d39 100644
--- a/assets/js/util/test/numFmt.js
+++ b/assets/js/util/test/numFmt.js
@@ -107,6 +107,78 @@ describe( 'numFmt', () => {
'',
`999`,
],
+ [
+ 'en_US',
+ 9,
+ 's',
+ `9s`,
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ 's',
+ '3h 5m 12s',
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ { style: 'duration' },
+ '3 hr 5 min 12 sec',
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ { style: 'duration', unitDisplay: 'narrow' },
+ '3h 5m 12s',
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ { style: 'duration', unitDisplay: 'long' },
+ '3 hours 5 minutes 12 seconds',
+ ],
+ [
+ 'en_US',
+ 65,
+ 's',
+ '1m 5s',
+ ],
+ [
+ 'en_US',
+ 125,
+ 's',
+ '2m 5s',
+ ],
+ [
+ 'en_US',
+ 35,
+ 's',
+ '35s',
+ ],
+ [
+ 'en_US',
+ 60,
+ 's',
+ '1m',
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
+ 's',
+ '3h 5m 12s',
+ ],
+ [
+ 'en_US',
+ ( 60 * 60 * 7 ) + ( 60 * 2 ) + 42,
+ 's',
+ '7h 2m 42s',
+ ],
+ [
+ 'en_US',
+ 0,
+ 's',
+ '0s',
+ ],
];
it.each( siteKitLocales )( 'formats numbers correctly with locale variant %s', ( locale, number, unit, expected ) => {
diff --git a/assets/js/util/test/prepareSecondsForDisplay.js b/assets/js/util/test/prepareSecondsForDisplay.js
deleted file mode 100644
index a1dca814483..00000000000
--- a/assets/js/util/test/prepareSecondsForDisplay.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Internal dependencies
- */
-import { prepareSecondsForDisplay } from '../';
-
-const valuesToTest = [
- [
- 65,
- '1m 5s',
- ],
- [
- 125,
- '2m 5s',
- ],
- [
- 35,
- '35s',
- ],
- [
- 60,
- '1m',
- ],
- [
- 65,
- '1m 5s',
- ],
- [
- ( 60 * 60 * 3 ) + ( 60 * 5 ) + 12,
- '3h 5m 12s',
- ],
- [
- ( 60 * 60 * 7 ) + ( 60 * 2 ) + 42,
- '7h 2m 42s',
- ],
-];
-
-describe( 'prepareSecondsForDisplay', () => {
- it.each( valuesToTest )( 'should turn %d into %s', ( seconds, expected ) => {
- expect( prepareSecondsForDisplay( seconds ) ).toStrictEqual( expected );
- } );
-} );
diff --git a/assets/js/util/tracking/createTrackEvent.js b/assets/js/util/tracking/createTrackEvent.js
index faab37180c7..7877de89c93 100644
--- a/assets/js/util/tracking/createTrackEvent.js
+++ b/assets/js/util/tracking/createTrackEvent.js
@@ -3,6 +3,7 @@
* Internal dependencies
*/
import createDataLayerPush from './createDataLayerPush';
+import { enabledFeatures } from '../../features/index';
/**
* Returns a function which, when invoked tracks a single event.
@@ -55,6 +56,7 @@ export default function createTrackEvent( config, dataLayerTarget, _global ) {
dimension2: isFirstAdmin ? 'true' : 'false',
dimension3: userIDHash,
dimension4: global.GOOGLESITEKIT_VERSION || '',
+ dimension5: enabledFeatures.join( ', ' ),
};
return new Promise( ( resolve ) => {
diff --git a/assets/js/util/tracking/index.test.js b/assets/js/util/tracking/index.test.js
index 6c2798db414..a4b1e67c6e2 100644
--- a/assets/js/util/tracking/index.test.js
+++ b/assets/js/util/tracking/index.test.js
@@ -1,3 +1,11 @@
+/**
+ * Mock enabledFeatures.
+ */
+jest.mock( '../../features/index', () => {
+ return {
+ enabledFeatures: [ 'feature1', 'feature2' ],
+ };
+} );
/**
* Internal dependencies
@@ -106,6 +114,7 @@ describe( 'trackEvent', () => {
dimension2: 'true',
dimension3: config.userIDHash,
dimension4: global.GOOGLESITEKIT_VERSION || '',
+ dimension5: 'feature1, feature2',
} ) );
expect( pushArgs[ 0 ][ 2 ] ).toHaveProperty( 'event_callback' );
} );
diff --git a/assets/js/util/when-active.js b/assets/js/util/when-active.js
index d3ff0a72695..cb6acc38677 100644
--- a/assets/js/util/when-active.js
+++ b/assets/js/util/when-active.js
@@ -16,11 +16,6 @@
* limitations under the License.
*/
-/**
- * WordPress dependencies
- */
-import { createElement } from '@wordpress/element';
-
/**
* Internal dependencies
*/
@@ -45,14 +40,19 @@ const { useSelect } = Data;
* @param {WPComponent|null} [options.IncompleteComponent] Optional. Fallback component to render when the module is active but not connected.
* @return {Function} Enhancing function.
*/
-export default function whenActive( { moduleName, FallbackComponent = null, IncompleteComponent = null } ) {
- return ( wrappedComponent ) => {
- const whenActiveComponent = ( props ) => {
+export default function whenActive( {
+ moduleName,
+ FallbackComponent,
+ IncompleteComponent = null,
+} ) {
+ return ( WrappedComponent ) => {
+ const WhenActiveComponent = ( props ) => {
+ const { WidgetNull } = props;
// The following eslint rule is disabled because it treats the following hook as such that doesn't adhere
// the "rules of hooks" which is incorrect because the following hook is a valid one.
-
// eslint-disable-next-line react-hooks/rules-of-hooks
const module = useSelect( ( select ) => select( CORE_MODULES ).getModule( moduleName ) );
+ const WhenFallbackComponent = FallbackComponent || WidgetNull;
// Return null if the module is not loaded yet or doesn't exist.
if ( ! module ) {
@@ -61,7 +61,7 @@ export default function whenActive( { moduleName, FallbackComponent = null, Inco
// Return a fallback if the module is not active.
if ( module.active === false ) {
- return FallbackComponent !== null ?
: null;
+ return
;
}
// Return a fallback if the module is active but not connected yet.
@@ -69,19 +69,20 @@ export default function whenActive( { moduleName, FallbackComponent = null, Inco
if ( IncompleteComponent !== null ) {
return
;
}
- // If there isn't a IncompleteComponent then use the FallbackComponent if available.
- return FallbackComponent !== null ?
: null;
+
+ // If there isn't a IncompleteComponent then use the WhenFallbackComponent.
+ return
;
}
// Return the active and connected component.
- return createElement( wrappedComponent, props );
+ return
;
};
- whenActiveComponent.displayName = `When${ kebabCaseToPascalCase( moduleName ) }Active`;
- if ( wrappedComponent.displayName || wrappedComponent.name ) {
- whenActiveComponent.displayName += `(${ wrappedComponent.displayName || wrappedComponent.name })`;
+ WhenActiveComponent.displayName = `When${ kebabCaseToPascalCase( moduleName ) }Active`;
+ if ( WrappedComponent.displayName || WrappedComponent.name ) {
+ WhenActiveComponent.displayName += `(${ WrappedComponent.displayName || WrappedComponent.name })`;
}
- return whenActiveComponent;
+ return WhenActiveComponent;
};
}
diff --git a/assets/sass/admin.scss b/assets/sass/admin.scss
index 63719ba4660..d4fd56734de 100644
--- a/assets/sass/admin.scss
+++ b/assets/sass/admin.scss
@@ -37,6 +37,7 @@
@import "@material/menu/mdc-menu";
@import "@material/menu-surface/mdc-menu-surface";
@import "@material/radio/mdc-radio";
+@import "@material/react-card/index";
@import "@material/react-select/index";
@import "@material/react-tab/index";
@import "@material/react-tab-bar/index";
@@ -97,6 +98,7 @@
@import "components/global/googlesitekit-overlay";
@import "components/global/googlesitekit-page";
@import "components/global/googlesitekit-pagespeed-dashboard-widget";
+@import "components/global/googlesitekit-page-footer";
@import "components/global/googlesitekit-page-header";
@import "components/global/googlesitekit-percent-circle";
@import "components/global/googlesitekit-post-searcher";
@@ -145,6 +147,9 @@
@import "components/user-input/googlesitekit-user-input-controls";
@import "components/user-input/googlesitekit-user-input-notification";
+// Tour Tooltip
+@import "components/tour-tooltip/googlesitekit-tour-tooltip";
+
// Widget Styles
@import "widgets/widget-area";
@import "widgets/widget-context";
@@ -154,6 +159,7 @@
// Utilities
@import "utilities/alignment";
+@import "utilities/font-weight";
@import "utilities/margin";
@import "utilities/overflow";
@import "utilities/text-align";
diff --git a/assets/sass/adminbar.scss b/assets/sass/adminbar.scss
index af3a50c8034..243f3ccbfb2 100644
--- a/assets/sass/adminbar.scss
+++ b/assets/sass/adminbar.scss
@@ -51,3 +51,6 @@
@import "components/global/googlesitekit-notifications-counter";
@import "components/global/googlesitekit-preview-block";
@import "components/global/googlesitekit-noscript";
+
+// Utilities
+@import "utilities/font-weight";
diff --git a/assets/sass/base/_defaults.scss b/assets/sass/base/_defaults.scss
index 62f7ee759e1..36880b6df59 100644
--- a/assets/sass/base/_defaults.scss
+++ b/assets/sass/base/_defaults.scss
@@ -191,5 +191,5 @@
}
.googlesitekit-hidden {
- display: none;
+ display: none !important;
}
diff --git a/assets/sass/components/adminbar/_googlesitekit-adminbar.scss b/assets/sass/components/adminbar/_googlesitekit-adminbar.scss
index 6ca3fd0ecac..d03b30c2b4f 100644
--- a/assets/sass/components/adminbar/_googlesitekit-adminbar.scss
+++ b/assets/sass/components/adminbar/_googlesitekit-adminbar.scss
@@ -42,6 +42,7 @@
.googlesitekit-plugin.ab-sub-wrapper {
left: 0;
+ width: 100%;
}
.googlesitekit-plugin .googlesitekit-adminbar {
diff --git a/assets/sass/components/adminbar/_googlesitekit-wp-adminbar.scss b/assets/sass/components/adminbar/_googlesitekit-wp-adminbar.scss
index 3333a0b744f..7a61fe31c59 100644
--- a/assets/sass/components/adminbar/_googlesitekit-wp-adminbar.scss
+++ b/assets/sass/components/adminbar/_googlesitekit-wp-adminbar.scss
@@ -45,8 +45,6 @@
opacity: 0.6;
padding: 0;
position: relative;
- speak: none;
- vertical-align: middle;
width: 26px;
@media (min-width: $bp-wpAdminBarTablet) {
diff --git a/assets/sass/components/dashboard/_googlesitekit-dashboard-single-url.scss b/assets/sass/components/dashboard/_googlesitekit-dashboard-single-url.scss
index 362f66e701a..d5fcd659eb5 100644
--- a/assets/sass/components/dashboard/_googlesitekit-dashboard-single-url.scss
+++ b/assets/sass/components/dashboard/_googlesitekit-dashboard-single-url.scss
@@ -22,6 +22,19 @@
margin: 10px 0 0 0;
}
+ .googlesitekit-dashboard-single-url__entity-header {
+
+ // Use the same spacing as is used in layout grids.
+ @each $size in map-keys($mdc-layout-grid-columns) {
+
+ @include mdc-layout-grid-media-query_($size) {
+ $gutter: map-get($mdc-layout-grid-default-gutter, $size);
+
+ margin-top: var(--mdc-layout-grid-gutter-#{$size}, $gutter);
+ }
+ }
+ }
+
.googlesitekit-dashboard-single-url__title {
margin: 0 0 10px 0;
}
diff --git a/assets/sass/components/global/_googlesitekit-chart-loading.scss b/assets/sass/components/global/_googlesitekit-chart-loading.scss
index da96041ae11..6010b1c213c 100644
--- a/assets/sass/components/global/_googlesitekit-chart-loading.scss
+++ b/assets/sass/components/global/_googlesitekit-chart-loading.scss
@@ -16,7 +16,8 @@
* limitations under the License.
*/
-.googlesitekit-chart-loading {
+.googlesitekit-chart-loading,
+.googlesitekit-chart-v2-loading {
align-items: center;
display: flex;
flex-wrap: wrap;
@@ -24,7 +25,9 @@
justify-items: center;
width: 100%;
+ .googlesitekit-chart-v2-loading__wrapper,
.googlesitekit-chart-loading__wrapper {
+ margin: 0 auto;
text-align: center;
width: 100%;
}
diff --git a/assets/sass/components/global/_googlesitekit-chart.scss b/assets/sass/components/global/_googlesitekit-chart.scss
index 34dfe04c10e..7d083cf0ba2 100644
--- a/assets/sass/components/global/_googlesitekit-chart.scss
+++ b/assets/sass/components/global/_googlesitekit-chart.scss
@@ -23,3 +23,24 @@
margin-top: $grid-gap-phone;
}
}
+
+.googlesitekit-chart-v2 {
+ position: relative;
+}
+
+.googlesitekit-chart-v2--PieChart svg > g > g {
+ pointer-events: none;
+}
+
+.googlesitekit-chart-v2--PieChart svg > g:last-child > g:last-child {
+ pointer-events: none;
+}
+
+.googlesitekit-chart-v2--PieChart div.google-visualization-tooltip {
+ pointer-events: none;
+}
+
+.googlesitekit-chart-v2-loading__forced {
+ height: 100%;
+ width: 100%;
+}
diff --git a/assets/sass/components/global/_googlesitekit-page-footer.scss b/assets/sass/components/global/_googlesitekit-page-footer.scss
new file mode 100644
index 00000000000..514b8d9614d
--- /dev/null
+++ b/assets/sass/components/global/_googlesitekit-page-footer.scss
@@ -0,0 +1,23 @@
+/**
+ * Page footer styles.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.googlesitekit-page-footer {
+ display: flex;
+ justify-content: flex-end;
+ margin: 0;
+}
diff --git a/assets/sass/components/global/_googlesitekit-preview-table.scss b/assets/sass/components/global/_googlesitekit-preview-table.scss
index 13b691fff7e..9be2df13260 100644
--- a/assets/sass/components/global/_googlesitekit-preview-table.scss
+++ b/assets/sass/components/global/_googlesitekit-preview-table.scss
@@ -17,6 +17,7 @@
*/
.googlesitekit-preview-table {
+ width: 100%;
&--padding {
padding: $grid-gap-phone;
diff --git a/assets/sass/components/global/_googlesitekit-publisher-wins.scss b/assets/sass/components/global/_googlesitekit-publisher-wins.scss
index 17b1c792619..8309204624f 100644
--- a/assets/sass/components/global/_googlesitekit-publisher-wins.scss
+++ b/assets/sass/components/global/_googlesitekit-publisher-wins.scss
@@ -84,6 +84,13 @@
display: inline-block;
max-width: 100%;
}
+
+ @media (max-width: $bp-mobileOnly ), (min-width: $bp-desktop) {
+
+ svg {
+ width: 200px;
+ }
+ }
}
.googlesitekit-publisher-win__detect {
diff --git a/assets/sass/components/tour-tooltip/_googlesitekit-tour-tooltip.scss b/assets/sass/components/tour-tooltip/_googlesitekit-tour-tooltip.scss
new file mode 100644
index 00000000000..d2a9df056f9
--- /dev/null
+++ b/assets/sass/components/tour-tooltip/_googlesitekit-tour-tooltip.scss
@@ -0,0 +1,121 @@
+/**
+ * TourTooltip component styles.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+$a-tags: "a, a:active, a:hover, a:visited";
+$indicator-inactive: #649df5;
+
+.react-joyride__overlay {
+ mix-blend-mode: multiply !important;
+}
+
+.react-joyride__spotlight {
+ background-color: $c-white !important;
+ border: 2px solid $c-royal-blue !important;
+}
+
+.googlesitekit-tour-tooltip {
+
+ .googlesitekit-tooltip-card {
+ background-color: $c-royal-blue;
+ border-radius: 8px;
+ box-shadow: none;
+ color: $c-white;
+ position: relative;
+
+ #{$a-tags} {
+ color: $c-white;
+ }
+ }
+}
+
+.googlesitekit-tooltip-title {
+ color: $c-white;
+ font-family: $f-secondary;
+ font-weight: $fw-secondary-light;
+ margin-bottom: 4px;
+ margin-top: 0;
+
+ @include responsive-text("body2", "body2");
+}
+
+.googlesitekit-tooltip-body {
+ box-sizing: border-box;
+ font-family: $f-primary;
+ font-weight: $fw-primary-light;
+ max-width: 352px;
+ padding: 24px 56px 2px 24px;
+
+ @include responsive-text("body3", "body3");
+}
+
+.googlesitekit-tooltip-buttons {
+ line-height: 1em;
+}
+
+.googlesitekit-tooltip-button,
+.googlesitekit-tooltip-button:not(:disabled) {
+ color: $c-white;
+ height: auto;
+ letter-spacing: normal;
+ line-height: 1em;
+ min-width: initial;
+ padding: 0;
+ text-transform: none;
+
+ &:not(:first-of-type) {
+ margin-left: 28px;
+ }
+}
+
+.googlesitekit-tooltip-close {
+ height: auto;
+ min-width: auto;
+ padding: 0;
+ position: absolute;
+ right: 29px;
+ top: 29px;
+}
+
+.mdc-card__actions.googlesitekit-tooltip-actions {
+ align-items: center;
+ display: flex;
+ justify-content: space-between;
+ padding: 12px 24px 18px 24px;
+ text-align: right;
+}
+
+.googlesitekit-tooltip-indicators {
+ display: flex;
+ margin: 0;
+ margin-right: 16px;
+ padding: 0;
+}
+
+.googlesitekit-tooltip-indicator {
+ background: $indicator-inactive;
+ border-radius: 50%;
+ height: 8px;
+ list-style: none;
+ margin-bottom: 0;
+ margin-right: 8px;
+ width: 8px;
+}
+
+.googlesitekit-tooltip-indicator.active {
+ background: $c-white;
+}
diff --git a/assets/sass/components/user-input/googlesitekit-user-input-controls.scss b/assets/sass/components/user-input/googlesitekit-user-input-controls.scss
index 811a5efda9c..0b3251ac89a 100644
--- a/assets/sass/components/user-input/googlesitekit-user-input-controls.scss
+++ b/assets/sass/components/user-input/googlesitekit-user-input-controls.scss
@@ -83,30 +83,41 @@
.googlesitekit-user-input__text-options {
border: 2px solid $c-jumbo;
border-radius: 4px;
- display: flex;
- height: 56px;
margin: 13px 0 8px;
- padding: 12px;
+ padding: 0 12px;
@media (min-width: $bp-tablet) {
margin-top: 0;
}
+ > div {
+ margin: 12px;
+ margin-left: 0;
+ }
+
+ .mdc-text-field,
+ .mdc-text-field__input {
+ background-color: transparent;
+ }
+
.mdc-text-field {
height: 32px;
width: 100%;
}
.mdc-text-field__input {
- background-color: $c-white;
border: none;
margin: 0;
- padding: 0 12px;
+ padding: 0 6px;
&::placeholder {
color: $c-user-input-placeholder;
}
}
+
+ .mdc-line-ripple {
+ display: none;
+ }
}
.googlesitekit-user-input__text-option {
@@ -114,9 +125,8 @@
background-color: $c-solitude;
border-radius: 100px;
color: $c-denim;
- display: flex;
+ display: inline-flex;
font-weight: 500;
- margin-right: 12px;
padding: 3px 3px 3px 12px;
white-space: nowrap;
@@ -125,6 +135,21 @@
margin: 0;
min-width: 0;
padding: 0 12px;
+
+ svg {
+
+ path {
+ fill: $c-user-input-placeholder;
+ }
+ }
}
}
+
+ .googlesitekit-user-input__text-option + div {
+ margin-top: 0;
+ }
+
+ .googlesitekit-user-input__text-options > div:last-child {
+ margin-right: 0;
+ }
}
diff --git a/assets/sass/components/user-input/googlesitekit-user-input-preview.scss b/assets/sass/components/user-input/googlesitekit-user-input-preview.scss
index 5977b13ed86..ba13d6c3b17 100644
--- a/assets/sass/components/user-input/googlesitekit-user-input-preview.scss
+++ b/assets/sass/components/user-input/googlesitekit-user-input-preview.scss
@@ -54,13 +54,14 @@
.googlesitekit-user-input__preview-answer {
align-items: center;
background-color: $c-solitude;
- border-radius: 100px;
+ border-radius: 30px;
color: $c-denim;
display: flex;
font-weight: $fw-secondary-medium;
margin-bottom: 12px;
margin-right: 12px;
padding: 8px 13px;
+ word-break: break-word;
@include responsive-text("body1", "body3");
}
diff --git a/assets/sass/utilities/_font-weight.scss b/assets/sass/utilities/_font-weight.scss
new file mode 100644
index 00000000000..2f41415ce92
--- /dev/null
+++ b/assets/sass/utilities/_font-weight.scss
@@ -0,0 +1,25 @@
+/**
+ * Font Weight utilities.
+ *
+ * Site Kit by Google, Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.googlesitekit-plugin {
+
+ .googlesitekit-font-weight-bold {
+ font-weight: 700 !important;
+ }
+
+}
diff --git a/assets/sass/utilities/_margin.scss b/assets/sass/utilities/_margin.scss
index cda0e294d50..c70a9e1fe57 100644
--- a/assets/sass/utilities/_margin.scss
+++ b/assets/sass/utilities/_margin.scss
@@ -25,4 +25,8 @@
.googlesitekit-margin-left-1rem {
margin-left: 1rem;
}
+
+ .googlesitekit-margin-left-auto {
+ margin-left: auto;
+ }
}
diff --git a/assets/sass/vendor/_mdc-dialog.scss b/assets/sass/vendor/_mdc-dialog.scss
index 5360f247f49..3a38043e4d9 100644
--- a/assets/sass/vendor/_mdc-dialog.scss
+++ b/assets/sass/vendor/_mdc-dialog.scss
@@ -27,8 +27,4 @@
justify-content: space-between;
margin: 1em 0;
}
-
- .googlesitekit-cta-link {
- margin-left: $grid-gap-phone;
- }
}
diff --git a/assets/sass/vendor/_mdc-switch.scss b/assets/sass/vendor/_mdc-switch.scss
index 4544abc0b1a..042708f9ad0 100644
--- a/assets/sass/vendor/_mdc-switch.scss
+++ b/assets/sass/vendor/_mdc-switch.scss
@@ -24,6 +24,12 @@
transition: none;
vertical-align: middle;
width: 68px;
+
+ // Prevent the background checkbox from becoming visible when a switch
+ // loads or is set in the disabled state.
+ &::before {
+ opacity: 0 !important;
+ }
}
+ label {
diff --git a/assets/sass/widgets/_googlesitekit-widget-analyticsAllTraffic.scss b/assets/sass/widgets/_googlesitekit-widget-analyticsAllTraffic.scss
index 59a5b9fc97e..689a6f9d42b 100644
--- a/assets/sass/widgets/_googlesitekit-widget-analyticsAllTraffic.scss
+++ b/assets/sass/widgets/_googlesitekit-widget-analyticsAllTraffic.scss
@@ -18,6 +18,7 @@
.googlesitekit-plugin {
+ .googlesitekit-widget.googlesitekit-widget--legacy-all-traffic-widget,
.googlesitekit-widget.googlesitekit-widget--analyticsAllTraffic {
.mdc-tab-scroller__scroll-content {
@@ -44,6 +45,10 @@
letter-spacing: normal;
text-transform: none;
}
+
+ .googlesitekit-widget__footer {
+ padding-top: 0;
+ }
}
.googlesitekit-widget--analyticsAllTraffic__user-count-chart {
@@ -73,6 +78,7 @@
}
.googlesitekit-widget--analyticsAllTraffic__dimensions {
+ min-height: 450px;
padding-top: 30px;
position: relative;
@@ -104,6 +110,11 @@
svg {
vertical-align: bottom;
}
+
+ .googlesitekit-cta-link {
+ font-size: 1em;
+ letter-spacing: 0.04em;
+ }
}
.googlesitekit-widget--analyticsAllTraffic__totalcount--loading {
@@ -118,14 +129,19 @@
}
.googlesitekit-widget--analyticsAllTraffic__dimensions-chart {
+ height: 100%;
position: relative;
+ width: 100%;
+ }
- &.googlesitekit-widget--analyticsAllTraffic__dimensions--loading {
- visibility: hidden;
- }
+ .googlesitekit-widget--analyticsAllTraffic__dimensions-chart .googlesitekit-chart-v2-loading {
+ padding-bottom: 32px;
+ padding-top: 32px;
+ }
+ .googlesitekit-widget--analyticsAllTraffic__selectable {
// Use pointer when hovering over chart slice or legend entry.
- .googlesitekit-line-chart > div > div > div > svg {
+ .googlesitekit-chart-v2__inner > div > div > div > svg {
& > g > path,
& > g > g {
@@ -134,6 +150,14 @@
}
}
+ .googlesitekit-widget--analyticsAllTraffic__slice-selected {
+ // Allow interacting with tooltip (e.g. to click links) when slice is
+ // selected.
+ .googlesitekit-chart-v2--PieChart div.google-visualization-tooltip {
+ pointer-events: auto;
+ }
+ }
+
.googlesitekit-widget--analyticsAllTraffic__dimensions-chart-title {
color: $c-scarpa-flow;
font-size: 16px;
@@ -151,6 +175,14 @@
}
}
+ .googlesitekit-widget--analyticsAllTraffic__tabs--small {
+ text-align: center;
+
+ @media (min-width: $bp-tablet) {
+ display: none;
+ }
+ }
+
.googlesitekit-widget--analyticsAllTraffic__tabs--loading {
display: flex;
flex-direction: row;
@@ -160,4 +192,97 @@
margin: 0 10px;
}
}
+
+ .googlesitekit-widget--analyticsAllTraffic__totals {
+ // HACK: Fixes jumping of widget when a dimension is selected.
+ @media (min-width: $bp-desktop) {
+ height: 1px;
+ }
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__chart {
+ min-height: 368px;
+ position: relative;
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__legend {
+ margin-top: -6px;
+ text-align: center;
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__legend-slice {
+ align-items: center;
+ border-radius: 4px;
+ color: $c-cape-cod;
+ display: inline-flex;
+ font-size: 12px;
+ font-weight: $fw-primary-normal;
+ margin: 0 4px 0 0;
+ padding: 7px 4px;
+ position: relative;
+
+ &:hover {
+ text-decoration: none;
+ }
+
+ &:focus {
+ outline: none;
+ }
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__label {
+ display: flex;
+ flex-direction: column;
+
+ &::after {
+ content: attr(data-label);
+ display: inline-flex;
+ font-weight: $fw-primary-medium;
+ height: 0;
+ visibility: hidden;
+ }
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__dot {
+ border-radius: 50%;
+ display: inline-block;
+ height: 12px;
+ margin: 0 4px 0 0;
+ width: 12px;
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__underlay {
+ display: block;
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ transition: opacity $t-default ease-in-out;
+ width: 100%;
+ z-index: 1;
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__legend-active {
+ font-weight: $fw-primary-medium;
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__legend-active,
+ .googlesitekit-widget--analyticsAllTraffic__legend-slice:hover {
+
+ .googlesitekit-widget--analyticsAllTraffic__underlay {
+ opacity: 0.16;
+ }
+ }
+
+ .googlesitekit-widget--analyticsAllTraffic__legend-others {
+ cursor: text;
+
+ &:hover {
+
+ .googlesitekit-widget--analyticsAllTraffic__underlay {
+ opacity: 0;
+ }
+ }
+ }
}
diff --git a/assets/svg/close.svg b/assets/svg/close.svg
new file mode 100644
index 00000000000..a1151595293
--- /dev/null
+++ b/assets/svg/close.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/svg/rocket.svg b/assets/svg/rocket.svg
new file mode 100644
index 00000000000..0c92a1982ca
--- /dev/null
+++ b/assets/svg/rocket.svg
@@ -0,0 +1,957 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/svg/sun-small.svg b/assets/svg/sun-small.svg
new file mode 100644
index 00000000000..c8568ffef20
--- /dev/null
+++ b/assets/svg/sun-small.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/svg/thumbs-up.svg b/assets/svg/thumbs-up.svg
new file mode 100644
index 00000000000..c79e885e367
--- /dev/null
+++ b/assets/svg/thumbs-up.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/bin/local-env/docker-compose.yml b/bin/local-env/docker-compose.yml
index 24a5bfd4630..befbc98cb88 100755
--- a/bin/local-env/docker-compose.yml
+++ b/bin/local-env/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3.1'
services:
wordpress:
- image: wordpress
+ image: wordpress:5.6-php7.4
restart: always
ports:
- 9002:80
diff --git a/bin/local-env/install-wordpress.sh b/bin/local-env/install-wordpress.sh
index d6cfa706bb5..cb09cef07b6 100755
--- a/bin/local-env/install-wordpress.sh
+++ b/bin/local-env/install-wordpress.sh
@@ -127,6 +127,8 @@ container chmod 767 /var/www/html/favicon.ico
# Activate Google Site Kit plugin.
status_message "Activating Google Site Kit plugin..."
wp plugin activate google-site-kit --quiet
+# Reset post-activate state.
+wp google-site-kit reset
# Set pretty permalinks.
status_message "Setting permalink structure..."
diff --git a/bin/release b/bin/release
index 0df210752cb..1c812caba97 100755
--- a/bin/release
+++ b/bin/release
@@ -31,11 +31,6 @@ const fse = require( 'fs-extra' );
const getRepoInfo = require( 'git-repo-info' );
const sanitizeFilename = require( 'sanitize-filename' );
-/**
- * Internal dependencies
- */
-const { flagMode } = require( '../dist/config.json' );
-
/**
* Retrieves the plugin version from the plugin's file header.
*
@@ -119,12 +114,10 @@ async function makeRelease() {
cp( 'google-site-kit.php' ),
cp( 'uninstall.php' ),
cp( 'dist/assets' ),
+ cp( 'dist/config.json' ),
cp( 'includes' ),
cp( 'third-party' ),
];
- if ( 'production' !== flagMode ) {
- fileCopyPromises.push( cp( 'dist/config.json' ) );
- }
await Promise.all( fileCopyPromises );
// Archive the release directory.
diff --git a/composer.json b/composer.json
index 9821b3f8958..465334540a7 100644
--- a/composer.json
+++ b/composer.json
@@ -8,7 +8,7 @@
"automattic/vipwpcs": "^2",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"phpcompatibility/phpcompatibility-wp": "^2.1",
- "phpunit/phpunit": "^5",
+ "phpunit/phpunit": "^5 || ^6 || ^7",
"roave/security-advisories": "dev-master",
"squizlabs/php_codesniffer": "^3.3",
"wp-coding-standards/wpcs": "^2"
@@ -17,7 +17,7 @@
"php": ">=5.6",
"ext-json": "*",
"ext-openssl": "*",
- "google/apiclient": "^2.0",
+ "google/apiclient": "^2.9.1",
"google/apiclient-services": ">=0.157",
"guzzlehttp/guzzle": "^5.3.3"
},
@@ -72,6 +72,7 @@
],
"lint": "phpcs",
"lint-fix": "phpcbf",
- "test": "phpunit"
+ "test": "phpunit",
+ "test:multisite": "@test --configuration=phpunit.multisite.xml"
}
}
diff --git a/composer.lock b/composer.lock
index 5f5a9d73cf1..b5a022d1a94 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "dc8550f99bcd00b51d3a7d1023fb1afd",
+ "content-hash": "b2ce68fa0476c37ca176ea3869c7cb65",
"packages": [
{
"name": "firebase/php-jwt",
@@ -54,38 +54,42 @@
"jwt",
"php"
],
+ "support": {
+ "issues": "https://github.com/firebase/php-jwt/issues",
+ "source": "https://github.com/firebase/php-jwt/tree/master"
+ },
"time": "2020-03-25T18:49:23+00:00"
},
{
"name": "google/apiclient",
- "version": "v2.8.3",
+ "version": "v2.9.1",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client.git",
- "reference": "81696e6206322e38c643cfcc96c4494ccfef8a32"
+ "reference": "2fb6e702aca5d68203fa737f89f6f774022494c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/81696e6206322e38c643cfcc96c4494ccfef8a32",
- "reference": "81696e6206322e38c643cfcc96c4494ccfef8a32",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/2fb6e702aca5d68203fa737f89f6f774022494c6",
+ "reference": "2fb6e702aca5d68203fa737f89f6f774022494c6",
"shasum": ""
},
"require": {
"firebase/php-jwt": "~2.0||~3.0||~4.0||~5.0",
"google/apiclient-services": "~0.13",
"google/auth": "^1.10",
- "guzzlehttp/guzzle": "~5.3.1||~6.0||~7.0",
+ "guzzlehttp/guzzle": "~5.3.3||~6.0||~7.0",
"guzzlehttp/psr7": "^1.2",
"monolog/monolog": "^1.17|^2.0",
- "php": ">=5.4",
- "phpseclib/phpseclib": "~0.3.10||~2.0"
+ "php": "^5.6|^7.0|^8.0",
+ "phpseclib/phpseclib": "~2.0||^3.0.2"
},
"require-dev": {
- "cache/filesystem-adapter": "^0.3.2",
+ "cache/filesystem-adapter": "^0.3.2|^1.1",
"composer/composer": "^1.10",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
"phpcompatibility/php-compatibility": "^9.2",
- "phpunit/phpunit": "^4.8.36|^5.0",
+ "phpunit/phpunit": "^5.7||^8.5.13",
"squizlabs/php_codesniffer": "~2.3",
"symfony/css-selector": "~2.1",
"symfony/dom-crawler": "~2.1"
@@ -119,7 +123,11 @@
"keywords": [
"google"
],
- "time": "2020-11-17T17:33:35+00:00"
+ "support": {
+ "issues": "https://github.com/googleapis/google-api-php-client/issues",
+ "source": "https://github.com/googleapis/google-api-php-client/tree/v2.9.1"
+ },
+ "time": "2021-01-19T17:48:59+00:00"
},
{
"name": "google/apiclient-services",
@@ -160,16 +168,16 @@
},
{
"name": "google/auth",
- "version": "v1.14.3",
+ "version": "v1.15.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-auth-library-php.git",
- "reference": "c1503299c779af0cbc99b43788f75930988852cf"
+ "reference": "b346c07de6613e26443d7b4830e5e1933b830dc4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/c1503299c779af0cbc99b43788f75930988852cf",
- "reference": "c1503299c779af0cbc99b43788f75930988852cf",
+ "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/b346c07de6613e26443d7b4830e5e1933b830dc4",
+ "reference": "b346c07de6613e26443d7b4830e5e1933b830dc4",
"shasum": ""
},
"require": {
@@ -182,7 +190,7 @@
},
"require-dev": {
"guzzlehttp/promises": "0.1.1|^1.3",
- "kelvinmo/simplejwt": "^0.2.5",
+ "kelvinmo/simplejwt": "^0.2.5|^0.5.1",
"phpseclib/phpseclib": "^2",
"phpunit/phpunit": "^4.8.36|^5.7",
"sebastian/comparator": ">=1.2.3",
@@ -208,7 +216,12 @@
"google",
"oauth2"
],
- "time": "2020-10-16T21:33:48+00:00"
+ "support": {
+ "docs": "https://googleapis.github.io/google-auth-library-php/master/",
+ "issues": "https://github.com/googleapis/google-auth-library-php/issues",
+ "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.15.0"
+ },
+ "time": "2021-02-05T20:50:04+00:00"
},
{
"name": "guzzlehttp/guzzle",
@@ -332,6 +345,10 @@
"uri",
"url"
],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/1.7.0"
+ },
"time": "2020-09-30T07:37:11+00:00"
},
{
@@ -507,6 +524,10 @@
"logging",
"psr-3"
],
+ "support": {
+ "issues": "https://github.com/Seldaek/monolog/issues",
+ "source": "https://github.com/Seldaek/monolog/tree/1.26.0"
+ },
"funding": [
{
"url": "https://github.com/Seldaek",
@@ -563,6 +584,9 @@
"psr",
"psr-6"
],
+ "support": {
+ "source": "https://github.com/php-fig/cache/tree/master"
+ },
"time": "2016-08-06T20:24:11+00:00"
},
{
@@ -613,6 +637,9 @@
"request",
"response"
],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/master"
+ },
"time": "2016-08-06T14:39:51+00:00"
},
{
@@ -660,6 +687,9 @@
"psr",
"psr-3"
],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.3"
+ },
"time": "2020-03-23T09:12:05+00:00"
},
{
@@ -700,6 +730,10 @@
}
],
"description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
"time": "2019-03-08T08:55:37+00:00"
},
{
@@ -2914,5 +2948,5 @@
"platform-overrides": {
"php": "5.6"
},
- "plugin-api-version": "1.1.0"
+ "plugin-api-version": "2.0.0"
}
diff --git a/feature-flags.json b/feature-flags.json
index bd703834c4c..ba910b1c25f 100644
--- a/feature-flags.json
+++ b/feature-flags.json
@@ -1,9 +1,8 @@
-{
- "serviceSetupV2": "development",
- "storeErrorNotifications": "development",
- "userInput": "development",
- "widgets.adminBar": "development",
- "widgets.dashboard": "development",
- "widgets.pageDashboard": "development",
- "widgets.wpDashboard": "development"
-}
+[
+ "serviceSetupV2",
+ "storeErrorNotifications",
+ "userInput",
+ "widgets.dashboard",
+ "widgets.pageDashboard",
+ "widgets.moduleScreens"
+]
diff --git a/google-site-kit.php b/google-site-kit.php
index c4d8133bf89..3cc4de486fe 100644
--- a/google-site-kit.php
+++ b/google-site-kit.php
@@ -11,7 +11,7 @@
* Plugin Name: Site Kit by Google
* Plugin URI: https://sitekit.withgoogle.com
* Description: Site Kit is a one-stop solution for WordPress users to use everything Google has to offer to make them successful on the web.
- * Version: 1.25.0
+ * Version: 1.28.0
* Author: Google
* Author URI: https://opensource.google.com
* License: Apache License 2.0
@@ -24,7 +24,7 @@
}
// Define most essential constants.
-define( 'GOOGLESITEKIT_VERSION', '1.25.0' );
+define( 'GOOGLESITEKIT_VERSION', '1.28.0' );
define( 'GOOGLESITEKIT_PLUGIN_MAIN_FILE', __FILE__ );
define( 'GOOGLESITEKIT_PHP_MINIMUM', '5.6.0' );
diff --git a/includes/Core/Admin/Screen.php b/includes/Core/Admin/Screen.php
index dd2946bf10d..412498f0485 100644
--- a/includes/Core/Admin/Screen.php
+++ b/includes/Core/Admin/Screen.php
@@ -12,6 +12,7 @@
use Google\Site_Kit\Context;
use Google\Site_Kit\Core\Assets\Assets;
+use Google\Site_Kit\Core\Util\Google_Icon;
use Google\Site_Kit\Core\Util\Requires_Javascript_Trait;
/**
@@ -129,9 +130,60 @@ public function add( Context $context ) {
$this->args['capability'],
$this->slug,
'',
- $context->url( 'dist/assets/images/logo-g_white_small.png' )
+ 'data:image/svg+xml;base64,' . Google_Icon::to_base64()
);
$menu_slug = $this->slug;
+
+ /**
+ * An SVG icon file needs to be colored (filled) based on the theme color setting.
+ *
+ * This exists in js as wp.svgPainter() per:
+ * https://github.com/WordPress/WordPress/blob/master/wp-admin/js/svg-painter.js
+ *
+ * The downside of the js approach is that we get a brief flash of an unstyled icon
+ * until the JS runs.
+ *
+ * A user can pick a custom Admin Color Scheme, which is only available in admin_init
+ * or later actions. add_menu_page runs on the admin_menu action, which precedes admin_init
+ * per https://codex.wordpress.org/Plugin_API/Action_Reference
+ *
+ * WordPress provides some color schemes out of the box, but they can also be added via
+ * wp_admin_css_color()
+ *
+ * Our workaround is to set the icon and subsequently replace it in current_screen, which is
+ * what we do in the following action.
+ */
+ add_action(
+ 'current_screen',
+ function() {
+ global $menu, $_wp_admin_css_colors;
+
+ if ( ! is_array( $menu ) ) {
+ return;
+ }
+
+ $color_scheme = get_user_option( 'admin_color' ) ?: 'fresh';
+
+ // If we're on one of the sitekit pages, use the 'current' color, otherwise use the 'base' color.
+ // @see wp_admin_css_color().
+ $color_key = false === strpos( get_current_screen()->id, 'googlesitekit' ) ? 'base' : 'current';
+
+ if ( empty( $_wp_admin_css_colors[ $color_scheme ]->icon_colors[ $color_key ] ) ) {
+ return;
+ }
+
+ $color = $_wp_admin_css_colors[ $color_scheme ]->icon_colors[ $color_key ];
+
+ foreach ( $menu as &$item ) {
+ if ( 'googlesitekit-dashboard' === $item[2] ) {
+ $item[6] = 'data:image/svg+xml;base64,' . Google_Icon::to_base64( Google_Icon::with_fill( $color ) );
+ break;
+ }
+ }
+
+ },
+ 100
+ );
}
// Set parent slug to actual slug of main Site Kit menu.
@@ -181,11 +233,6 @@ public function enqueue_assets( Assets $assets ) {
// Enqueue base admin screen stylesheet.
$assets->enqueue_asset( 'googlesitekit-admin-css' );
- // Helps detection of enabled ad blockers to warn users before activating or setup AdSense module.
- if ( $this->is_ad_blocker_detection_required() ) {
- $assets->enqueue_asset( 'googlesitekit-pagead2.ads' );
- }
-
if ( $this->args['enqueue_callback'] ) {
call_user_func( $this->args['enqueue_callback'], $assets );
}
@@ -213,27 +260,4 @@ private function render( Context $context ) {
slug, $screens, true ) ) {
- return true;
- }
-
- return false;
- }
}
diff --git a/includes/Core/Admin_Bar/Admin_Bar.php b/includes/Core/Admin_Bar/Admin_Bar.php
index bac55fa22e8..d9bc68ab3ac 100644
--- a/includes/Core/Admin_Bar/Admin_Bar.php
+++ b/includes/Core/Admin_Bar/Admin_Bar.php
@@ -11,7 +11,6 @@
namespace Google\Site_Kit\Core\Admin_Bar;
use Google\Site_Kit\Context;
-use Google\Site_Kit\Core\Modules\Module_With_Admin_Bar;
use Google\Site_Kit\Core\Modules\Modules;
use Google\Site_Kit\Core\Permissions\Permissions;
use Google\Site_Kit\Core\Assets\Assets;
@@ -202,14 +201,6 @@ public function is_active() {
$current_url = $entity->get_url();
- $display = false;
- foreach ( $this->modules->get_active_modules() as $module ) {
- if ( $module instanceof Module_With_Admin_Bar && $module->is_active_in_admin_bar( $current_url ) ) {
- $display = true;
- break;
- }
- }
-
/**
* Filters whether the Site Kit admin bar menu should be displayed.
*
@@ -222,7 +213,7 @@ public function is_active() {
* @param bool $display Whether to display the admin bar menu.
* @param string $current_url The URL of the current request.
*/
- return apply_filters( 'googlesitekit_show_admin_bar_menu', $display, $current_url );
+ return apply_filters( 'googlesitekit_show_admin_bar_menu', true, $current_url );
}
/**
diff --git a/includes/Core/Assets/Assets.php b/includes/Core/Assets/Assets.php
index 3b1ecce1dda..0ef58949745 100644
--- a/includes/Core/Assets/Assets.php
+++ b/includes/Core/Assets/Assets.php
@@ -314,6 +314,7 @@ private function get_assets() {
'googlesitekit-datastore-location',
'googlesitekit-datastore-site',
'googlesitekit-datastore-user',
+ 'googlesitekit-datastore-ui',
'googlesitekit-widgets',
);
@@ -392,7 +393,7 @@ private function get_assets() {
'in_footer' => false,
'before_print' => function( $handle ) {
// The "42" version is important because it contains a fix for the tooltip flickering issue.
- wp_add_inline_script( $handle, 'google.charts.load( "42", { packages: [ "corechart" ] } );' );
+ wp_add_inline_script( $handle, 'google.charts.load( "current", { packages: [ "corechart" ] } );' );
},
)
),
@@ -500,6 +501,15 @@ private function get_assets() {
),
)
),
+ new Script(
+ 'googlesitekit-datastore-ui',
+ array(
+ 'src' => $base_url . 'js/googlesitekit-datastore-ui.js',
+ 'dependencies' => array(
+ 'googlesitekit-data',
+ ),
+ )
+ ),
new Script(
'googlesitekit-modules',
array(
@@ -531,12 +541,6 @@ private function get_assets() {
)
),
// End JSR Assets.
- new Script(
- 'googlesitekit-pagead2.ads',
- array(
- 'src' => $base_url . 'js/pagead2.ads.js',
- )
- ),
new Script(
'googlesitekit-dashboard-splash',
array(
@@ -655,6 +659,7 @@ private function get_inline_base_data() {
'timezone' => get_option( 'timezone_string' ),
'siteName' => get_bloginfo( 'name' ),
'enabledFeatures' => Feature_Flags::get_enabled_features(),
+ 'webStoriesActive' => defined( 'WEBSTORIES_VERSION' ),
);
/**
diff --git a/includes/Core/Authentication/Authentication.php b/includes/Core/Authentication/Authentication.php
index e9205bd63b2..410332380bb 100644
--- a/includes/Core/Authentication/Authentication.php
+++ b/includes/Core/Authentication/Authentication.php
@@ -254,6 +254,7 @@ public function register() {
add_filter( 'googlesitekit_admin_notices', $this->get_method_proxy( 'authentication_admin_notices' ) );
add_filter( 'googlesitekit_inline_base_data', $this->get_method_proxy( 'inline_js_base_data' ) );
add_filter( 'googlesitekit_setup_data', $this->get_method_proxy( 'inline_js_setup_data' ) );
+ add_filter( 'googlesitekit_is_feature_enabled', $this->get_method_proxy( 'filter_features_via_proxy' ), 10, 2 );
add_action( 'init', $this->get_method_proxy( 'handle_oauth' ) );
add_action( 'admin_init', $this->get_method_proxy( 'check_connected_proxy_url' ) );
@@ -281,7 +282,6 @@ function () {
$site_code = $this->context->input()->filter( INPUT_GET, 'googlesitekit_site_code', FILTER_SANITIZE_STRING );
$this->handle_site_code( $code, $site_code );
- $this->require_user_input();
$this->redirect_to_proxy( $code );
}
);
@@ -293,7 +293,16 @@ function () {
}
);
- add_action( 'googlesitekit_authorize_user', $this->get_method_proxy( 'set_connected_proxy_url' ) );
+ add_action(
+ 'googlesitekit_authorize_user',
+ function () {
+ if ( ! $this->credentials->using_proxy() ) {
+ return;
+ }
+ $this->set_connected_proxy_url();
+ $this->require_user_input();
+ }
+ );
add_filter(
'googlesitekit_rest_routes',
@@ -316,24 +325,17 @@ function( $routes ) {
add_filter(
'googlesitekit_user_data',
function( $user ) {
- $user['connectURL'] = esc_url_raw( $this->get_connect_url() );
-
if ( $this->profile->has() ) {
$profile_data = $this->profile->get();
$user['user']['email'] = $profile_data['email'];
$user['user']['picture'] = $profile_data['photo'];
}
- $user['verified'] = $this->verification->has();
-
- return $user;
- }
- );
-
- add_filter(
- 'googlesitekit_user_data',
- function( $user ) {
+ $user['connectURL'] = esc_url_raw( $this->get_connect_url() );
+ $user['initialVersion'] = $this->initial_version->get();
$user['userInputState'] = $this->user_input_state->get();
+ $user['verified'] = $this->verification->has();
+
return $user;
}
);
@@ -1057,17 +1059,15 @@ private function handle_site_code( $code, $site_code ) {
wp_die( esc_html__( 'You don\'t have permissions to set up Site Kit.', 'google-site-kit' ), 403 );
}
- try {
- $data = $this->google_proxy->exchange_site_code( $site_code, $code );
-
- $this->credentials->set(
- array(
- 'oauth2_client_id' => $data['site_id'],
- 'oauth2_client_secret' => $data['site_secret'],
- )
- );
- } catch ( Exception $exception ) {
- $error_message = $exception->getMessage();
+ $data = $this->google_proxy->exchange_site_code( $site_code, $code );
+ if ( is_wp_error( $data ) ) {
+ $error_message = $data->get_error_message();
+ if ( empty( $error_message ) ) {
+ $error_message = $data->get_error_code();
+ if ( empty( $error_message ) ) {
+ $error_message = 'unknown_error';
+ }
+ }
// If missing verification, rely on the redirect back to the proxy,
// passing the site code instead of site ID.
@@ -1082,16 +1082,17 @@ function ( $params ) use ( $site_code ) {
return;
}
- if ( ! $error_message ) {
- $error_message = 'unknown_error';
- }
-
$this->user_options->set( OAuth_Client::OPTION_ERROR_CODE, $error_message );
- wp_safe_redirect(
- $this->context->admin_url( 'splash' )
- );
+ wp_safe_redirect( $this->context->admin_url( 'splash' ) );
exit;
}
+
+ $this->credentials->set(
+ array(
+ 'oauth2_client_id' => $data['site_id'],
+ 'oauth2_client_secret' => $data['site_secret'],
+ )
+ );
}
/**
@@ -1104,15 +1105,12 @@ private function require_user_input() {
return;
}
+ // Refresh user input settings from the proxy.
+ // This will ensure the user input state is updated as well.
+ $this->user_input_settings->set_settings( null );
+
if ( User_Input_State::VALUE_COMPLETED !== $this->user_input_state->get() ) {
$this->user_input_state->set( User_Input_State::VALUE_REQUIRED );
- // Set the `mode` query parameter in the proxy setup URL.
- add_filter(
- 'googlesitekit_proxy_setup_url_params',
- function ( $params ) {
- return array_merge( $params, array( 'mode' => 'user_input' ) );
- }
- );
}
}
@@ -1277,4 +1275,36 @@ private function verify_user_input_settings() {
}
}
+ /**
+ * Filters feature flags using features received from the proxy server.
+ *
+ * @since 1.27.0
+ *
+ * @param boolean $feature_enabled Original value of the feature.
+ * @param string $feature_name Feature name.
+ * @return boolean State flag from the proxy server if it is available, otherwise the original value.
+ */
+ private function filter_features_via_proxy( $feature_enabled, $feature_name ) {
+ if ( ! $this->credentials->has() ) {
+ return $feature_enabled;
+ }
+
+ $transient_name = 'googlesitekit_remote_features';
+ $features = $this->transients->get( $transient_name );
+ if ( false === $features ) {
+ $features = $this->google_proxy->get_features( $this->credentials );
+ if ( is_wp_error( $features ) ) {
+ $this->transients->set( $transient_name, array(), HOUR_IN_SECONDS );
+ } else {
+ $this->transients->set( $transient_name, $features, DAY_IN_SECONDS );
+ }
+ }
+
+ if ( ! is_wp_error( $features ) && isset( $features[ $feature_name ]['enabled'] ) ) {
+ return filter_var( $features[ $feature_name ]['enabled'], FILTER_VALIDATE_BOOLEAN );
+ }
+
+ return $feature_enabled;
+ }
+
}
diff --git a/includes/Core/Authentication/Clients/Google_Site_Kit_Client.php b/includes/Core/Authentication/Clients/Google_Site_Kit_Client.php
index 13a7866dd8f..49db58d514a 100644
--- a/includes/Core/Authentication/Clients/Google_Site_Kit_Client.php
+++ b/includes/Core/Authentication/Clients/Google_Site_Kit_Client.php
@@ -184,22 +184,18 @@ public function fetchAccessTokenWithRefreshToken( $refresh_token = null ) {
}
$this->setAccessToken( $token_response );
- // TODO: In the future, once the old authentication mechanism no longer exists, this check can be removed.
- // For now the below action should only fire for the proxy despite not clarifying that in the hook name.
- if ( $this instanceof Google_Site_Kit_Proxy_Client ) {
- /**
- * Fires when the current user has just been reauthorized to access Google APIs with a refreshed access token.
- *
- * In other words, this action fires whenever Site Kit has just obtained a new access token based on
- * the refresh token for the current user, which typically happens once every hour when using Site Kit,
- * since that is the lifetime of every access token.
- *
- * @since 1.25.0
- *
- * @param array $token_response Token response data.
- */
- do_action( 'googlesitekit_reauthorize_user', $token_response );
- }
+ /**
+ * Fires when the current user has just been reauthorized to access Google APIs with a refreshed access token.
+ *
+ * In other words, this action fires whenever Site Kit has just obtained a new access token based on
+ * the refresh token for the current user, which typically happens once every hour when using Site Kit,
+ * since that is the lifetime of every access token.
+ *
+ * @since 1.25.0
+ *
+ * @param array $token_response Token response data.
+ */
+ do_action( 'googlesitekit_reauthorize_user', $token_response );
}
return $token_response;
diff --git a/includes/Core/Authentication/Clients/Google_Site_Kit_Proxy_Client.php b/includes/Core/Authentication/Clients/Google_Site_Kit_Proxy_Client.php
index c852ad6fd7c..0ec2327b585 100644
--- a/includes/Core/Authentication/Clients/Google_Site_Kit_Proxy_Client.php
+++ b/includes/Core/Authentication/Clients/Google_Site_Kit_Proxy_Client.php
@@ -51,6 +51,8 @@ public function __construct( array $config = array() ) {
unset( $config['proxy_base_path'] );
parent::__construct( $config );
+
+ $this->setApplicationName( Google_Proxy::get_application_name() );
}
/**
diff --git a/includes/Core/Authentication/Clients/OAuth_Client.php b/includes/Core/Authentication/Clients/OAuth_Client.php
index 2ab6698425f..b5a60070665 100644
--- a/includes/Core/Authentication/Clients/OAuth_Client.php
+++ b/includes/Core/Authentication/Clients/OAuth_Client.php
@@ -160,27 +160,6 @@ final class OAuth_Client {
*/
private $client_credentials = false;
- /**
- * Custom retry map to define which api responses should be retried based on our retry config.
- *
- * Copied from the default $retryMap within Google_Client/Task/Runner with the addition of lighthouseError.
- *
- * @since 1.22.0
- * @var array $retry_map Map of errors with retry counts.
- */
- protected $retry_map = array(
- '500' => Runner::TASK_RETRY_ALWAYS,
- '503' => Runner::TASK_RETRY_ALWAYS,
- 'rateLimitExceeded' => Runner::TASK_RETRY_ALWAYS,
- 'userRateLimitExceeded' => Runner::TASK_RETRY_ALWAYS,
- 6 => Runner::TASK_RETRY_ALWAYS, // CURLE_COULDNT_RESOLVE_HOST.
- 7 => Runner::TASK_RETRY_ALWAYS, // CURLE_COULDNT_CONNECT.
- 28 => Runner::TASK_RETRY_ALWAYS, // CURLE_OPERATION_TIMEOUTED.
- 35 => Runner::TASK_RETRY_ALWAYS, // CURLE_SSL_CONNECT_ERROR.
- 52 => Runner::TASK_RETRY_ALWAYS, // CURLE_GOT_NOTHING.
- 'lighthouseError' => Runner::TASK_RETRY_NEVER,
- );
-
/**
* Constructor.
*
@@ -247,22 +226,15 @@ private function setup_client() {
$client = new Google_Site_Kit_Client();
}
- $application_name = $this->get_application_name();
- // The application name is included in the Google client's user-agent for requests to Google APIs.
- $client->setApplicationName( $application_name );
-
// Enable exponential retries, try up to three times.
$client->setConfig( 'retry', array( 'retries' => 3 ) );
- // Set a custom retryMap for the REST Runner.
- $client->setConfig( 'retry_map', $this->retry_map );
-
// Override the default user-agent for the Guzzle client. This is used for oauth/token requests.
// By default this header uses the generic Guzzle client's user-agent and includes
// Guzzle, cURL, and PHP versions as it is normally shared.
// In our case however, the client is namespaced to be used by Site Kit only.
$http_client = $client->getHttpClient();
- $http_client->setDefaultOption( 'headers/User-Agent', $application_name );
+ $http_client->setDefaultOption( 'headers/User-Agent', Google_Proxy::get_application_name() );
// Configure the Google_Client's HTTP client to use to use the same HTTP proxy as WordPress HTTP, if set.
if ( $this->http_proxy->is_enabled() ) {
@@ -750,23 +722,19 @@ function( $scope ) {
$this->refresh_profile_data( 2 * MINUTE_IN_SECONDS );
- // TODO: In the future, once the old authentication mechanism no longer exists, this check can be removed.
- // For now the below action should only fire for the proxy despite not clarifying that in the hook name.
- if ( $this->credentials->using_proxy() ) {
- /**
- * Fires when the current user has just been authorized to access Google APIs.
- *
- * In other words, this action fires whenever Site Kit has just obtained a new set of access token and
- * refresh token for the current user, which may happen to set up the initial connection or to request
- * access to further scopes.
- *
- * @since 1.3.0
- * @since 1.6.0 The $token_response parameter was added.
- *
- * @param array $token_response Token response data.
- */
- do_action( 'googlesitekit_authorize_user', $token_response );
- }
+ /**
+ * Fires when the current user has just been authorized to access Google APIs.
+ *
+ * In other words, this action fires whenever Site Kit has just obtained a new set of access token and
+ * refresh token for the current user, which may happen to set up the initial connection or to request
+ * access to further scopes.
+ *
+ * @since 1.3.0
+ * @since 1.6.0 The $token_response parameter was added.
+ *
+ * @param array $token_response Token response data.
+ */
+ do_action( 'googlesitekit_authorize_user', $token_response );
// This must happen after googlesitekit_authorize_user as the permissions checks depend on
// values set which affect the meta capability mapping.
@@ -855,49 +823,20 @@ public function using_proxy() {
*
* @since 1.0.0
* @since 1.1.2 Added googlesitekit_proxy_setup_url_params filter.
+ * @since 1.27.0 Error code is no longer used.
*
* @param string $access_code Optional. Temporary access code for an undelegated access token. Default empty string.
- * @param string $error_code Optional. Error code, if the user should be redirected because of an error. Default empty string.
* @return string URL to the setup page on the authentication proxy.
*/
- public function get_proxy_setup_url( $access_code = '', $error_code = '' ) {
- $query_params = array(
- 'scope' => rawurlencode( implode( ' ', $this->get_required_scopes() ) ),
- 'supports' => rawurlencode( implode( ' ', $this->get_proxy_setup_supports() ) ),
- 'nonce' => rawurlencode( wp_create_nonce( Google_Proxy::ACTION_SETUP ) ),
- );
+ public function get_proxy_setup_url( $access_code = '' ) {
+ $scope = rawurlencode( implode( ' ', $this->get_required_scopes() ) );
+ $query_params = array( 'scope' => $scope );
if ( ! empty( $access_code ) ) {
$query_params['code'] = $access_code;
}
- if ( $this->credentials->has() ) {
- $query_params['site_id'] = $this->credentials->get()['oauth2_client_id'];
- }
-
- /**
- * Filters parameters included in proxy setup URL.
- *
- * @since 1.1.2
- *
- * @param string $access_code Temporary access code for an undelegated access token.
- * @param string $error_code Error code, if the user should be redirected because of an error.
- */
- $query_params = apply_filters( 'googlesitekit_proxy_setup_url_params', $query_params, $access_code, $error_code );
-
- // If no site identification information is present, we need to provide details for a new site.
- if ( empty( $query_params['site_id'] ) && empty( $query_params['site_code'] ) ) {
- $site_fields = array_map( 'rawurlencode', $this->google_proxy->get_site_fields() );
- $query_params = array_merge( $query_params, $site_fields );
- }
-
- $user_fields = array_map( 'rawurlencode', $this->google_proxy->get_user_fields() );
- $query_params = array_merge( $query_params, $user_fields );
-
- $query_params['application_name'] = rawurlencode( $this->get_application_name() );
- $query_params['hl'] = get_user_locale();
-
- return add_query_arg( $query_params, $this->google_proxy->url( Google_Proxy::SETUP_URI ) );
+ return $this->google_proxy->setup_url( $this->credentials, $query_params );
}
/**
@@ -925,41 +864,6 @@ private function should_update_owner_id( $user_id ) {
return true;
}
- /**
- * Gets the list of features to declare support for when setting up with the proxy.
- *
- * @since 1.1.0
- * @since 1.1.2 Added 'credentials_retrieval'
- * @since 1.2.0 Added 'short_verification_token' (Supported as of 1.0.1)
- * @return array Array of supported features.
- */
- private function get_proxy_setup_supports() {
- return array_filter(
- array(
- 'credentials_retrieval',
- 'short_verification_token',
- $this->supports_file_verification() ? 'file_verification' : false,
- )
- );
- }
-
- /**
- * Checks if the site supports file-based site verification.
- *
- * The site must be a root install, with no path in the home URL
- * to be able to serve the verification response properly.
- *
- * @since 1.1.0
- * @see \WP_Rewrite::rewrite_rules for robots.txt
- *
- * @return bool
- */
- private function supports_file_verification() {
- $home_path = wp_parse_url( $this->context->get_canonical_home_url(), PHP_URL_PATH );
-
- return ( ! $home_path || '/' === $home_path );
- }
-
/**
* Returns the permissions URL to the authentication proxy.
*
@@ -976,28 +880,10 @@ public function get_proxy_permissions_url() {
return '';
}
- $query_args = array( 'token' => $access_token );
-
- $credentials = $this->get_client_credentials();
- if ( is_object( $credentials ) && ! empty( $credentials->web->client_id ) ) {
- $query_args['site_id'] = $credentials->web->client_id;
- }
-
- $query_args['application_name'] = rawurlencode( $this->get_application_name() );
- $query_args['hl'] = get_user_locale();
-
- return add_query_arg( $query_args, $this->google_proxy->url( Google_Proxy::PERMISSIONS_URI ) );
- }
-
- /**
- * Returns the application name: a combination of the namespace and version.
- *
- * @since 1.8.1
- *
- * @return string The application name.
- */
- private function get_application_name() {
- return 'wordpress/google-site-kit/' . GOOGLESITEKIT_VERSION;
+ return $this->google_proxy->permissions_url(
+ $this->credentials,
+ array( 'token' => $access_token )
+ );
}
/**
diff --git a/includes/Core/Authentication/Google_Proxy.php b/includes/Core/Authentication/Google_Proxy.php
index 91b61d62334..348b04bc5ef 100644
--- a/includes/Core/Authentication/Google_Proxy.php
+++ b/includes/Core/Authentication/Google_Proxy.php
@@ -11,6 +11,7 @@
namespace Google\Site_Kit\Core\Authentication;
use Google\Site_Kit\Context;
+use Google\Site_Kit\Core\Util\Feature_Flags;
use WP_Error;
use Exception;
@@ -32,6 +33,7 @@ class Google_Proxy {
const SETUP_URI = '/site-management/setup/';
const PERMISSIONS_URI = '/site-management/permissions/';
const USER_INPUT_SETTINGS_URI = '/site-management/settings/';
+ const FEATURES_URI = '/site-management/features/';
const ACTION_SETUP = 'googlesitekit_proxy_setup';
const ACTION_PERMISSIONS = 'googlesitekit_proxy_permissions';
@@ -54,6 +56,114 @@ public function __construct( Context $context ) {
$this->context = $context;
}
+ /**
+ * Returns the application name: a combination of the namespace and version.
+ *
+ * @since 1.27.0
+ *
+ * @return string The application name.
+ */
+ public static function get_application_name() {
+ return 'wordpress/google-site-kit/' . GOOGLESITEKIT_VERSION;
+ }
+
+ /**
+ * Gets the list of features to declare support for when setting up with the proxy.
+ *
+ * @since 1.27.0
+ *
+ * @return array Array of supported features.
+ */
+ private function get_supports() {
+ $supports = array(
+ 'credentials_retrieval',
+ 'short_verification_token',
+ // Informs the proxy the user input feature is generally supported.
+ 'user_input_flow',
+ );
+
+ $home_path = wp_parse_url( $this->context->get_canonical_home_url(), PHP_URL_PATH );
+ if ( ! $home_path || '/' === $home_path ) {
+ $supports[] = 'file_verification';
+ }
+
+ // Informs the proxy the user input feature is already enabled locally.
+ // TODO: Remove once the feature is fully rolled out.
+ if ( Feature_Flags::enabled( 'userInput' ) ) {
+ $supports[] = 'user_input_flow_feature';
+ }
+
+ return $supports;
+ }
+
+ /**
+ * Returns the setup URL to the authentication proxy.
+ *
+ * @since 1.27.0
+ *
+ * @param Credentials $credentials Credentials instance.
+ * @param array $query_params Optional. Additional query parameters.
+ * @return string URL to the setup page on the authentication proxy.
+ */
+ public function setup_url( Credentials $credentials, array $query_params = array() ) {
+ $params = array_merge(
+ $query_params,
+ array(
+ 'supports' => rawurlencode( implode( ' ', $this->get_supports() ) ),
+ 'nonce' => rawurlencode( wp_create_nonce( self::ACTION_SETUP ) ),
+ )
+ );
+
+ if ( $credentials->has() ) {
+ $creds = $credentials->get();
+ $params['site_id'] = $creds['oauth2_client_id'];
+ }
+
+ /**
+ * Filters parameters included in proxy setup URL.
+ *
+ * @since 1.27.0
+ */
+ $params = apply_filters( 'googlesitekit_proxy_setup_url_params', $params );
+
+ // If no site identification information is present, we need to provide details for a new site.
+ if ( empty( $params['site_id'] ) && empty( $params['site_code'] ) ) {
+ $site_fields = array_map( 'rawurlencode', $this->get_site_fields() );
+ $params = array_merge( $params, $site_fields );
+ }
+
+ $user_fields = array_map( 'rawurlencode', $this->get_user_fields() );
+ $params = array_merge( $params, $user_fields );
+
+ $params['application_name'] = rawurlencode( self::get_application_name() );
+ $params['hl'] = get_user_locale();
+
+ return add_query_arg( $params, $this->url( self::SETUP_URI ) );
+ }
+
+ /**
+ * Returns the permissions URL to the authentication proxy.
+ *
+ * This only returns a URL if the user already has an access token set.
+ *
+ * @since 1.27.0
+ *
+ * @param Credentials $credentials Credentials instance.
+ * @param array $query_args Optional. Additional query parameters.
+ * @return string URL to the permissions page on the authentication proxy on success, or an empty string on failure.
+ */
+ public function permissions_url( Credentials $credentials, array $query_args = array() ) {
+ if ( $credentials->has() ) {
+ $creds = $credentials->get();
+ $query_args['site_id'] = $creds['oauth2_client_id'];
+ }
+
+ $query_args['application_name'] = rawurlencode( self::get_application_name() );
+ $query_args['hl'] = get_user_locale();
+
+ return add_query_arg( $query_args, $this->url( self::PERMISSIONS_URI ) );
+ }
+
/**
* Gets a URL to the proxy with optional path.
*
@@ -78,6 +188,75 @@ public function url( $path = '' ) {
return $url;
}
+ /**
+ * Sends a POST request to the Google Proxy server.
+ *
+ * @since 1.27.0
+ *
+ * @param string $uri Endpoint to send the request to.
+ * @param Credentials $credentials Credentials instance.
+ * @param array $args Array of request arguments.
+ * @return array|WP_Error The response as an associative array or WP_Error on failure.
+ */
+ private function request( $uri, $credentials, array $args = array() ) {
+ $request_args = array(
+ 'headers' => ! empty( $args['headers'] ) && is_array( $args['headers'] ) ? $args['headers'] : array(),
+ 'body' => ! empty( $args['body'] ) && is_array( $args['body'] ) ? $args['body'] : array(),
+ );
+
+ if ( $credentials && $credentials instanceof Credentials ) {
+ if ( ! $credentials->has() ) {
+ return new WP_Error(
+ 'oauth_credentials_not_exist',
+ __( 'OAuth credentials haven\'t been found.', 'google-site-kit' ),
+ array( 'status' => 401 )
+ );
+ }
+
+ $creds = $credentials->get();
+ $request_args['body']['site_id'] = $creds['oauth2_client_id'];
+ $request_args['body']['site_secret'] = $creds['oauth2_client_secret'];
+ }
+
+ if ( ! empty( $args['access_token'] ) && is_string( $args['access_token'] ) ) {
+ $request_args['headers']['Authorization'] = 'Bearer ' . $args['access_token'];
+ }
+
+ if ( isset( $args['mode'] ) && 'async' === $args['mode'] ) {
+ $request_args['timeout'] = 0.01;
+ $request_args['blocking'] = false;
+ }
+
+ if ( ! empty( $args['json_request'] ) ) {
+ $request_args['headers']['Content-Type'] = 'application/json';
+ $request_args['body'] = wp_json_encode( $request_args['body'] );
+ }
+
+ $url = $this->url( $uri );
+ $response = wp_remote_post( $url, $request_args );
+ if ( is_wp_error( $response ) ) {
+ return $response;
+ }
+
+ $code = wp_remote_retrieve_response_code( $response );
+ $body = wp_remote_retrieve_body( $response );
+ $body = json_decode( $body, true );
+ if ( $code < 200 || 299 < $code ) {
+ $message = is_array( $body ) && ! empty( $body['error'] ) ? $body['error'] : '';
+ return new WP_Error( 'request_failed', $message, array( 'status' => $code ) );
+ }
+
+ if ( is_null( $body ) ) {
+ return new WP_Error(
+ 'failed_to_parse_response',
+ __( 'Failed to parse response.', 'google-site-kit' ),
+ array( 'status' => 500 )
+ );
+ }
+
+ return $body;
+ }
+
/**
* Gets site fields.
*
@@ -105,34 +284,7 @@ public function get_site_fields() {
* @return array|WP_Error The response as an associative array or WP_Error on failure.
*/
public function fetch_site_fields( Credentials $credentials ) {
- if ( ! $credentials->has() ) {
- return new WP_Error( 'oauth_credentials_not_exist' );
- }
-
- $creds = $credentials->get();
-
- $request_args = array(
- 'body' => array(
- 'site_id' => $creds['oauth2_client_id'],
- 'site_secret' => $creds['oauth2_client_secret'],
- ),
- );
-
- $response = wp_remote_post( $this->url( self::OAUTH2_SITE_URI ), $request_args );
-
- if ( is_wp_error( $response ) ) {
- return $response;
- }
-
- $raw_body = wp_remote_retrieve_body( $response );
-
- $response_data = json_decode( $raw_body, true );
-
- if ( ! $response_data || isset( $response_data['error'] ) ) {
- return new WP_Error( isset( $response_data['error'] ) ? $response_data['error'] : 'failed_to_parse_response' );
- }
-
- return $response_data;
+ return $this->request( self::OAUTH2_SITE_URI, $credentials );
}
/**
@@ -145,16 +297,14 @@ public function fetch_site_fields( Credentials $credentials ) {
* @return boolean|WP_Error Boolean do the site fields match or WP_Error on failure.
*/
public function are_site_fields_synced( Credentials $credentials ) {
- $fetch_site_fields = $this->fetch_site_fields( $credentials );
-
- if ( is_wp_error( $fetch_site_fields ) ) {
- return $fetch_site_fields;
+ $site_fields = $this->fetch_site_fields( $credentials );
+ if ( is_wp_error( $site_fields ) ) {
+ return $site_fields;
}
$get_site_fields = $this->get_site_fields();
-
foreach ( $get_site_fields as $key => $site_field ) {
- if ( ! array_key_exists( $key, $fetch_site_fields ) || $fetch_site_fields[ $key ] !== $site_field ) {
+ if ( ! array_key_exists( $key, $site_fields ) || $site_fields[ $key ] !== $site_field ) {
return false;
}
}
@@ -188,42 +338,10 @@ public function get_user_fields() {
* @since 1.20.0
*
* @param Credentials $credentials Credentials instance.
- * @return array Response data.
- *
- * @throws Exception Thrown when the request resulted in an error response,
- * or when credentials are not set.
+ * @return array|WP_Error Response data on success, otherwise WP_Error object.
*/
public function unregister_site( Credentials $credentials ) {
- if ( ! $credentials->has() ) {
- throw new Exception( 'oauth_credentials_not_exist' );
- }
-
- $creds = $credentials->get();
-
- $response = wp_remote_post(
- $this->url( self::OAUTH2_DELETE_SITE_URI ),
- array(
- 'body' => array(
- 'site_id' => $creds['oauth2_client_id'],
- 'site_secret' => $creds['oauth2_client_secret'],
- ),
- )
- );
-
- if ( is_wp_error( $response ) ) {
- throw new Exception( $response->get_error_code() );
- }
-
- $raw_body = wp_remote_retrieve_body( $response );
- $response_data = json_decode( $raw_body, true );
-
- if ( ! $response_data || isset( $response_data['error'] ) ) {
- throw new Exception(
- isset( $response_data['error'] ) ? $response_data['error'] : 'failed_to_parse_response'
- );
- }
-
- return $response_data;
+ return $this->request( self::OAUTH2_DELETE_SITE_URI, $credentials );
}
/**
@@ -233,31 +351,47 @@ public function unregister_site( Credentials $credentials ) {
*
* @param Credentials $credentials Credentials instance.
* @param string $mode Sync mode.
- * @return array Response of the wp_remote_post request or NULL if there are no credentials.
+ * @return array|WP_Error Response of the wp_remote_post request.
*/
public function sync_site_fields( Credentials $credentials, $mode = 'async' ) {
- if ( ! $credentials->has() ) {
- return null;
- }
-
- $creds = $credentials->get();
-
- $request_args = array(
- 'body' => array_merge(
- $this->get_site_fields(),
- array(
- 'site_id' => $creds['oauth2_client_id'],
- 'site_secret' => $creds['oauth2_client_secret'],
- )
- ),
+ return $this->request(
+ self::OAUTH2_SITE_URI,
+ $credentials,
+ array(
+ 'mode' => $mode,
+ 'body' => $this->get_site_fields(),
+ )
);
+ }
- if ( 'async' === $mode ) {
- $request_args['timeout'] = 0.01;
- $request_args['blocking'] = false;
+ /**
+ * Synchronizes user input settings with the proxy.
+ *
+ * @since 1.27.0
+ *
+ * @param Credentials $credentials Credentials instance.
+ * @param string $access_token Access token.
+ * @param array|null $settings Settings array.
+ * @return array|WP_Error Response of the wp_remote_post request.
+ */
+ public function sync_user_input_settings( Credentials $credentials, $access_token, $settings = null ) {
+ $body = array();
+ if ( ! empty( $settings ) ) {
+ $body = array(
+ 'settings' => $settings,
+ 'client_user_id' => (string) get_current_user_id(),
+ );
}
- return wp_remote_post( $this->url( self::OAUTH2_SITE_URI ), $request_args );
+ return $this->request(
+ self::USER_INPUT_SETTINGS_URI,
+ $credentials,
+ array(
+ 'json_request' => true,
+ 'access_token' => $access_token,
+ 'body' => $body,
+ )
+ );
}
/**
@@ -267,13 +401,12 @@ public function sync_site_fields( Credentials $credentials, $mode = 'async' ) {
*
* @param string $site_code Site code identifying the site.
* @param string $undelegated_code Undelegated code identifying the undelegated token.
- * @return array Response data containing site_id and site_secret.
- *
- * @throws Exception Thrown when the request resulted in an error response.
+ * @return array|WP_Error Response data containing site_id and site_secret on success, WP_Error object on failure.
*/
public function exchange_site_code( $site_code, $undelegated_code ) {
- $response = wp_remote_post(
- $this->url( self::OAUTH2_SITE_URI ),
+ $response_data = $this->request(
+ self::OAUTH2_SITE_URI,
+ null,
array(
'body' => array(
'code' => $undelegated_code,
@@ -282,23 +415,40 @@ public function exchange_site_code( $site_code, $undelegated_code ) {
)
);
- if ( is_wp_error( $response ) ) {
- throw new Exception( $response->get_error_code() );
- }
-
- $raw_body = wp_remote_retrieve_body( $response );
- $response_data = json_decode( $raw_body, true );
-
- if ( ! $response_data || isset( $response_data['error'] ) ) {
- throw new Exception(
- isset( $response_data['error'] ) ? $response_data['error'] : 'failed_to_parse_response'
- );
+ if ( is_wp_error( $response_data ) ) {
+ return $response_data;
}
if ( ! isset( $response_data['site_id'], $response_data['site_secret'] ) ) {
- throw new Exception( 'oauth_credentials_not_exist' );
+ return new WP_Error(
+ 'oauth_credentials_not_exist',
+ __( 'OAuth credentials haven\'t been found.', 'google-site-kit' ),
+ array( 'status' => 401 )
+ );
}
return $response_data;
}
+
+ /**
+ * Gets remote features.
+ *
+ * @since 1.27.0
+ *
+ * @param Credentials $credentials Credentials instance.
+ * @return array|WP_Error Response of the wp_remote_post request.
+ */
+ public function get_features( Credentials $credentials ) {
+ return $this->request(
+ self::FEATURES_URI,
+ $credentials,
+ array(
+ 'body' => array(
+ 'platform' => 'wordpress/google-site-kit',
+ 'version' => GOOGLESITEKIT_VERSION,
+ ),
+ )
+ );
+ }
+
}
diff --git a/includes/Core/CLI/Reset_CLI_Command.php b/includes/Core/CLI/Reset_CLI_Command.php
index f9c067f2416..1240b431348 100644
--- a/includes/Core/CLI/Reset_CLI_Command.php
+++ b/includes/Core/CLI/Reset_CLI_Command.php
@@ -11,6 +11,7 @@
namespace Google\Site_Kit\Core\CLI;
use Google\Site_Kit\Core\Util\Reset;
+use Google\Site_Kit\Core\Util\Reset_Persistent;
use WP_CLI;
/**
@@ -27,16 +28,29 @@ class Reset_CLI_Command extends CLI_Command {
*
* ## OPTIONS
*
+ * [--persistent]
+ * : Additionally deletes persistent options.
+ *
* ## EXAMPLES
*
* wp google-site-kit reset
+ * wp google-site-kit reset --persistent
*
* @since 1.11.0
+ * @since 1.27.0 Added --persistent flag to delete persistent options.
+ *
+ * @param array $args Positional args.
+ * @param array $assoc_args Additional flags.
*/
- public function __invoke() {
+ public function __invoke( $args, $assoc_args ) {
$reset = new Reset( $this->context );
$reset->all();
+ if ( isset( $assoc_args['persistent'] ) && true === $assoc_args['persistent'] ) {
+ $reset_persistent = new Reset_Persistent( $this->context );
+ $reset_persistent->all();
+ }
+
WP_CLI::success( 'Settings successfully reset.' );
}
diff --git a/includes/Core/Feature_Tours/Dismissed_Tours.php b/includes/Core/Feature_Tours/Dismissed_Tours.php
new file mode 100644
index 00000000000..27b3c41af71
--- /dev/null
+++ b/includes/Core/Feature_Tours/Dismissed_Tours.php
@@ -0,0 +1,95 @@
+get(), $tour_slug );
+
+ $this->set( $value );
+ }
+
+ /**
+ * Gets the value of the setting.
+ *
+ * @since 1.27.0
+ *
+ * @return array Value set for the option, or default if not set.
+ */
+ public function get() {
+ $value = parent::get();
+
+ return is_array( $value ) ? $value : array();
+ }
+
+ /**
+ * Gets the expected value type.
+ *
+ * @since 1.27.0
+ *
+ * @return string The type name.
+ */
+ protected function get_type() {
+ return 'array';
+ }
+
+ /**
+ * Gets the default value.
+ *
+ * @since 1.27.0
+ *
+ * @return array The default value.
+ */
+ protected function get_default() {
+ return array();
+ }
+
+ /**
+ * Gets the callback for sanitizing the setting's value before saving.
+ *
+ * @since 1.27.0
+ *
+ * @return Closure
+ */
+ protected function get_sanitize_callback() {
+ return function ( $value ) {
+ return is_array( $value )
+ ? array_values( array_unique( $value ) )
+ : $this->get();
+ };
+ }
+}
diff --git a/includes/Core/Feature_Tours/Feature_Tours.php b/includes/Core/Feature_Tours/Feature_Tours.php
new file mode 100644
index 00000000000..0b9ac67b4fd
--- /dev/null
+++ b/includes/Core/Feature_Tours/Feature_Tours.php
@@ -0,0 +1,81 @@
+context = $context;
+ $this->user_options = $user_options ?: new User_Options( $context );
+ $this->dismissed_tours = new Dismissed_Tours( $this->user_options );
+ $this->rest_controller = new REST_Feature_Tours_Controller( $context, $this->user_options );
+ }
+
+ /**
+ * Registers functionality through WordPress hooks.
+ *
+ * @since 1.27.0
+ */
+ public function register() {
+ $this->dismissed_tours->register();
+ $this->rest_controller->register();
+ }
+}
diff --git a/includes/Core/Feature_Tours/REST_Feature_Tours_Controller.php b/includes/Core/Feature_Tours/REST_Feature_Tours_Controller.php
new file mode 100644
index 00000000000..d089493cad5
--- /dev/null
+++ b/includes/Core/Feature_Tours/REST_Feature_Tours_Controller.php
@@ -0,0 +1,149 @@
+context = $context;
+ $this->user_options = $user_options ?: new User_Options( $context );
+ $this->dismissed_tours = new Dismissed_Tours( $this->user_options );
+ }
+
+ /**
+ * Registers functionality through WordPress hooks.
+ *
+ * @since 1.27.0
+ */
+ public function register() {
+ add_filter(
+ 'googlesitekit_rest_routes',
+ function ( $routes ) {
+ return array_merge( $routes, $this->get_rest_routes() );
+ }
+ );
+
+ add_filter(
+ 'googlesitekit_apifetch_preload_paths',
+ function ( $paths ) {
+ $feature_tour_routes = array(
+ '/' . REST_Routes::REST_ROOT . '/core/user/data/dismissed-tours',
+ );
+
+ return array_merge( $paths, $feature_tour_routes );
+ }
+ );
+ }
+
+ /**
+ * Gets REST route instances.
+ *
+ * @since 1.27.0
+ *
+ * @return REST_Route[] List of REST_Route objects.
+ */
+ protected function get_rest_routes() {
+ $can_authenticate = function () {
+ return current_user_can( Permissions::AUTHENTICATE );
+ };
+
+ return array(
+ new REST_Route(
+ 'core/user/data/dismissed-tours',
+ array(
+ 'methods' => WP_REST_Server::READABLE,
+ 'callback' => function () {
+ return new WP_REST_Response( $this->dismissed_tours->get() );
+ },
+ 'permission_callback' => $can_authenticate,
+ )
+ ),
+ new REST_Route(
+ 'core/user/data/dismiss-tour',
+ array(
+ 'methods' => WP_REST_Server::CREATABLE,
+ 'callback' => function ( WP_REST_Request $request ) {
+ $data = $request['data'];
+
+ if ( empty( $data['slug'] ) ) {
+ return new WP_Error(
+ 'missing_required_param',
+ /* translators: %s: Missing parameter name */
+ sprintf( __( 'Request parameter is empty: %s.', 'google-site-kit' ), 'slug' ),
+ array( 'status' => 400 )
+ );
+ }
+
+ $this->dismissed_tours->add( $data['slug'] );
+
+ return new WP_REST_Response( $this->dismissed_tours->get() );
+ },
+ 'permission_callback' => $can_authenticate,
+ 'args' => array(
+ 'data' => array(
+ 'type' => 'object',
+ 'required' => true,
+ ),
+ ),
+ )
+ ),
+ );
+ }
+}
diff --git a/includes/Core/Modules/Module_With_Admin_Bar.php b/includes/Core/Modules/Module_With_Admin_Bar.php
deleted file mode 100644
index e467e810306..00000000000
--- a/includes/Core/Modules/Module_With_Admin_Bar.php
+++ /dev/null
@@ -1,24 +0,0 @@
-screen ) {
- $this->screen = new Screen(
- Screens::PREFIX . 'module-' . $this->slug,
+ $module_screen_slug = 'module-' . $this->slug;
+ $this->screen = new Screen(
+ Screens::PREFIX . $module_screen_slug,
array(
- 'title' => $this->name,
- 'capability' => Permissions::VIEW_MODULE_DETAILS,
- 'enqueue_callback' => function( Assets $assets ) {
+ 'title' => $this->name,
+ 'capability' => Permissions::VIEW_MODULE_DETAILS,
+ 'enqueue_callback' => function ( Assets $assets ) {
$assets->enqueue_asset( 'googlesitekit-module' );
},
- 'render_callback' => function( Context $context ) {
+ 'initialize_callback' => function () use ( $module_screen_slug ) {
+ $reauth = $this->context->input()->filter( INPUT_GET, 'reAuth', FILTER_VALIDATE_BOOLEAN );
+ // If the module is not set up yet, and `reAuth` is not enabled
+ // via the query parameter, then redirect to this URL.
+ if ( ! $reauth && ! $this->is_connected() ) {
+ wp_safe_redirect(
+ $this->context->admin_url(
+ $module_screen_slug,
+ array(
+ 'slug' => $this->slug,
+ 'reAuth' => true,
+ )
+ )
+ );
+ exit();
+ }
+ },
+ 'render_callback' => function ( Context $context ) {
$module_info = $this->prepare_info_for_js();
?>
', wp_json_encode( $config ) );
+ }
}
diff --git a/includes/Modules/AdSense/Settings.php b/includes/Modules/AdSense/Settings.php
index 393db9e0a24..9bd4e984fbd 100644
--- a/includes/Modules/AdSense/Settings.php
+++ b/includes/Modules/AdSense/Settings.php
@@ -158,6 +158,7 @@ protected function get_default() {
'accountSetupComplete' => false,
'siteSetupComplete' => false,
'useSnippet' => true,
+ 'webStoriesAdUnit' => '',
);
}
diff --git a/includes/Modules/AdSense/Tag_Guard.php b/includes/Modules/AdSense/Tag_Guard.php
index b144325989d..9f2a6f5f50c 100644
--- a/includes/Modules/AdSense/Tag_Guard.php
+++ b/includes/Modules/AdSense/Tag_Guard.php
@@ -30,6 +30,12 @@ class Tag_Guard extends Module_Tag_Guard {
*/
public function can_activate() {
$settings = $this->settings->get();
+
+ // For web stories, the tag must only be rendered if a story-specific ad unit is provided.
+ if ( is_singular( 'web-story' ) && empty( $settings['webStoriesAdUnit'] ) ) {
+ return false;
+ }
+
return ! empty( $settings['useSnippet'] ) && ! empty( $settings['clientID'] );
}
diff --git a/includes/Modules/Analytics.php b/includes/Modules/Analytics.php
index a5634a44ed6..481d536fa46 100644
--- a/includes/Modules/Analytics.php
+++ b/includes/Modules/Analytics.php
@@ -12,7 +12,6 @@
use Google\Site_Kit\Core\Modules\Module;
use Google\Site_Kit\Core\Modules\Module_Settings;
-use Google\Site_Kit\Core\Modules\Module_With_Admin_Bar;
use Google\Site_Kit\Core\Modules\Module_With_Debug_Fields;
use Google\Site_Kit\Core\Modules\Module_With_Screen;
use Google\Site_Kit\Core\Modules\Module_With_Screen_Trait;
@@ -41,9 +40,6 @@
use Google\Site_Kit\Modules\Analytics\Web_Tag;
use Google\Site_Kit\Modules\Analytics\Proxy_AccountTicket;
use Google\Site_Kit\Modules\Analytics\Advanced_Tracking;
-use Google\Site_Kit_Dependencies\Google_Service_AnalyticsReporting_DateRangeValues;
-use Google\Site_Kit_Dependencies\Google_Service_AnalyticsReporting_Report;
-use Google\Site_Kit_Dependencies\Google_Service_AnalyticsReporting_ReportData;
use Google\Site_Kit_Dependencies\Google_Service_Analytics;
use Google\Site_Kit_Dependencies\Google_Service_AnalyticsReporting;
use Google\Site_Kit_Dependencies\Google_Service_AnalyticsReporting_GetReportsRequest;
@@ -72,7 +68,7 @@
* @ignore
*/
final class Analytics extends Module
- implements Module_With_Screen, Module_With_Scopes, Module_With_Settings, Module_With_Assets, Module_With_Admin_Bar, Module_With_Debug_Fields, Module_With_Owner {
+ implements Module_With_Screen, Module_With_Scopes, Module_With_Settings, Module_With_Assets, Module_With_Debug_Fields, Module_With_Owner {
use Method_Proxy_Trait;
use Module_With_Assets_Trait;
use Module_With_Owner_Trait;
@@ -205,22 +201,6 @@ public function on_deactivation() {
$this->options->delete( 'googlesitekit_analytics_adsense_linked' );
}
- /**
- * Checks if the module is active in the admin bar for the given URL.
- *
- * @since 1.4.0
- *
- * @param string $url URL to determine active state for.
- * @return bool
- */
- public function is_active_in_admin_bar( $url ) {
- if ( ! $this->is_connected() ) {
- return false;
- }
-
- return $this->has_data_for_url( $url );
- }
-
/**
* Gets an array of debug field definitions.
*
@@ -977,6 +957,16 @@ protected function create_analytics_site_data_request( array $args = array() ) {
}
$dimension_filter_clauses = array();
+
+ $hostname = wp_parse_url( $this->context->get_reference_site_url(), PHP_URL_HOST );
+ $dimension_filter = new Google_Service_AnalyticsReporting_DimensionFilter();
+ $dimension_filter->setDimensionName( 'ga:hostname' );
+ $dimension_filter->setOperator( 'EXACT' );
+ $dimension_filter->setExpressions( array( $hostname ) );
+ $dimension_filter_clause = new Google_Service_AnalyticsReporting_DimensionFilterClause();
+ $dimension_filter_clause->setFilters( array( $dimension_filter ) );
+ $dimension_filter_clauses[] = $dimension_filter_clause;
+
if ( ! empty( $args['dimension_filters'] ) ) {
$dimension_filters = $args['dimension_filters'];
$dimension_filter_clause = new Google_Service_AnalyticsReporting_DimensionFilterClause();
@@ -996,9 +986,7 @@ protected function create_analytics_site_data_request( array $args = array() ) {
$dimension_filter_clauses[] = $dimension_filter_clause;
}
- if ( ! empty( $dimension_filter_clauses ) ) {
- $request->setDimensionFilterClauses( $dimension_filter_clauses );
- }
+ $request->setDimensionFilterClauses( $dimension_filter_clauses );
if ( ! empty( $args['row_limit'] ) ) {
$request->setPageSize( $args['row_limit'] );
@@ -1274,62 +1262,6 @@ protected function setup_assets() {
);
}
- /**
- * Checks whether Analytics data exists for the given URL.
- *
- * @since 1.4.0
- *
- * @param string $url The url to check data for.
- * @return bool
- */
- protected function has_data_for_url( $url ) {
- if ( ! $url ) {
- return false;
- }
-
- $transient_key = 'googlesitekit_analytics_has_data_' . md5( $url );
- $has_data = get_transient( $transient_key );
-
- if ( false === $has_data ) {
- /* @var Google_Service_AnalyticsReporting_Report[]|WP_Error $reports Array of reporting report instances. */
- $reports = $this->get_data(
- 'report',
- array(
- 'url' => $url,
- 'metrics' => array(
- array( 'expression' => 'ga:users' ),
- array( 'expression' => 'ga:sessions' ),
- ),
- )
- );
-
- if ( is_wp_error( $reports ) ) {
- $reports = array(); // Bypass data check and cache.
- }
-
- foreach ( $reports as $report ) {
- /* @var Google_Service_AnalyticsReporting_Report $report Report instance. */
- $report_data = $report->getData();
- /* @var Google_Service_AnalyticsReporting_ReportData $report_data Report data instance. */
- foreach ( $report_data->getTotals() as $date_range_values ) {
- /* @var Google_Service_AnalyticsReporting_DateRangeValues $date_range_values Values instance. */
- if (
- isset( $date_range_values[0], $date_range_values[1] )
- && ( 0 < $date_range_values[0] || 0 < $date_range_values[1] )
- ) {
- $has_data = true;
- break 2;
- }
- }
- }
-
- // Cache "data found" status for one day, "no data" status for one hour.
- set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS );
- }
-
- return (bool) $has_data;
- }
-
/**
* Determines the Analytics account ID from a given Analytics property ID.
*
diff --git a/includes/Modules/Analytics/Settings.php b/includes/Modules/Analytics/Settings.php
index aa8c588ea5e..f66a8744c0f 100644
--- a/includes/Modules/Analytics/Settings.php
+++ b/includes/Modules/Analytics/Settings.php
@@ -56,6 +56,13 @@ function ( $default ) {
$default['adsenseLinked'] = (bool) $this->options->get( 'googlesitekit_analytics_adsense_linked' );
}
+ // `canUseSnippet` is a computed setting, so this sets the value if settings have not been saved yet.
+ // This filter is documented below.
+ $can_use_snippet = apply_filters( 'googlesitekit_analytics_can_use_snippet', true );
+ if ( is_bool( $can_use_snippet ) ) {
+ $default['canUseSnippet'] = $can_use_snippet;
+ }
+
return $default;
}
);
@@ -121,11 +128,24 @@ function ( $option ) {
* @param bool $adsense_linked Null by default, will fallback to the option value if not set.
*/
$adsense_linked = apply_filters( 'googlesitekit_analytics_adsense_linked', null );
-
if ( is_bool( $adsense_linked ) ) {
$option['adsenseLinked'] = $adsense_linked;
}
+ /**
+ * Filters the state of the can use snipped setting.
+ *
+ * This filter exists so that useSnippet can be restored to true when the Tag Manager module
+ * is disconnected, ensuring the Analytics snippet is always included.
+ *
+ * @since 1.28.0
+ * @param bool $can_use_snippet Whether or not `useSnippet` can control snippet output. Default: `true`.
+ */
+ $can_use_snippet = apply_filters( 'googlesitekit_analytics_can_use_snippet', true );
+ if ( is_bool( $can_use_snippet ) ) {
+ $option['canUseSnippet'] = $can_use_snippet;
+ }
+
return $option;
}
);
@@ -165,6 +185,7 @@ protected function get_default() {
'propertyID' => '',
'trackingDisabled' => array( 'loggedinUsers' ),
'useSnippet' => true,
+ 'canUseSnippet' => true,
);
}
@@ -181,6 +202,9 @@ protected function get_sanitize_callback() {
if ( isset( $option['useSnippet'] ) ) {
$option['useSnippet'] = (bool) $option['useSnippet'];
}
+ if ( isset( $option['canUseSnippet'] ) ) {
+ $option['canUseSnippet'] = (bool) $option['canUseSnippet'];
+ }
if ( isset( $option['anonymizeIP'] ) ) {
$option['anonymizeIP'] = (bool) $option['anonymizeIP'];
}
diff --git a/includes/Modules/Analytics/Tag_Guard.php b/includes/Modules/Analytics/Tag_Guard.php
index b2444cf19eb..5f2879405d5 100644
--- a/includes/Modules/Analytics/Tag_Guard.php
+++ b/includes/Modules/Analytics/Tag_Guard.php
@@ -30,7 +30,7 @@ class Tag_Guard extends Module_Tag_Guard {
*/
public function can_activate() {
$settings = $this->settings->get();
- return ! empty( $settings['useSnippet'] ) && ! empty( $settings['propertyID'] );
+ return $settings['canUseSnippet'] && ! empty( $settings['useSnippet'] ) && ! empty( $settings['propertyID'] );
}
}
diff --git a/includes/Modules/Search_Console.php b/includes/Modules/Search_Console.php
index 2875b4468bd..c6470cbe77c 100644
--- a/includes/Modules/Search_Console.php
+++ b/includes/Modules/Search_Console.php
@@ -12,7 +12,6 @@
use Google\Site_Kit\Core\Modules\Module;
use Google\Site_Kit\Core\Modules\Module_Settings;
-use Google\Site_Kit\Core\Modules\Module_With_Admin_Bar;
use Google\Site_Kit\Core\Modules\Module_With_Debug_Fields;
use Google\Site_Kit\Core\Modules\Module_With_Owner;
use Google\Site_Kit\Core\Modules\Module_With_Screen;
@@ -34,8 +33,6 @@
use Google\Site_Kit\Modules\Search_Console\Settings;
use Google\Site_Kit_Dependencies\Google_Service_Exception;
use Google\Site_Kit_Dependencies\Google_Service_SearchConsole;
-use Google\Site_Kit_Dependencies\Google_Service_SearchConsole_ApiDataRow;
-use Google\Site_Kit_Dependencies\Google_Service_SearchConsole_SearchAnalyticsQueryResponse;
use Google\Site_Kit_Dependencies\Google_Service_SearchConsole_SitesListResponse;
use Google\Site_Kit_Dependencies\Google_Service_SearchConsole_WmxSite;
use Google\Site_Kit_Dependencies\Google_Service_SearchConsole_SearchAnalyticsQueryRequest;
@@ -53,7 +50,7 @@
* @ignore
*/
final class Search_Console extends Module
- implements Module_With_Screen, Module_With_Scopes, Module_With_Settings, Module_With_Assets, Module_With_Admin_Bar, Module_With_Debug_Fields, Module_With_Owner {
+ implements Module_With_Screen, Module_With_Scopes, Module_With_Settings, Module_With_Assets, Module_With_Debug_Fields, Module_With_Owner {
use Module_With_Screen_Trait, Module_With_Scopes_Trait, Module_With_Settings_Trait, Google_URL_Matcher_Trait, Module_With_Assets_Trait;
/**
@@ -131,22 +128,6 @@ public function get_scopes() {
);
}
- /**
- * Checks if the module is active in the admin bar for the given URL.
- *
- * @since 1.4.0
- *
- * @param string $url URL to determine active state for.
- * @return bool
- */
- public function is_active_in_admin_bar( $url ) {
- if ( ! $this->get_property_id() ) {
- return false;
- }
-
- return $this->has_data_for_url( $url );
- }
-
/**
* Gets an array of debug field definitions.
*
@@ -425,54 +406,6 @@ protected function create_search_analytics_data_request( array $args = array() )
->query( $property_id, $request );
}
- /**
- * Checks whether Search Console data exists for the given URL.
- *
- * The result of this query is stored in a transient.
- *
- * @since 1.0.0
- *
- * @param string $url The url to check data for.
- * @return bool True if Search Console data exists, false otherwise.
- */
- protected function has_data_for_url( $url ) {
- if ( ! $url ) {
- return false;
- }
-
- $transient_key = 'googlesitekit_sc_data_' . md5( $url );
- $has_data = get_transient( $transient_key );
-
- if ( false === $has_data ) {
- /* @var Google_Service_SearchConsole_ApiDataRow[]|WP_Error $response_rows Array of data rows. */
- $response_rows = $this->get_data(
- 'searchanalytics',
- array(
- 'url' => $url,
- 'dimensions' => 'date',
- 'compareDateRanges' => true,
- )
- );
-
- if ( is_wp_error( $response_rows ) ) {
- $response_rows = array(); // Bypass data check and cache.
- }
-
- foreach ( $response_rows as $data_row ) {
- /* @var Google_Service_SearchConsole_ApiDataRow $data_row Data row instance. */
- if ( 0 < $data_row->getImpressions() ) {
- $has_data = true;
- break;
- }
- }
-
- // Cache "data found" status for one day, "no data" status for one hour.
- set_transient( $transient_key, (int) $has_data, $has_data ? DAY_IN_SECONDS : HOUR_IN_SECONDS );
- }
-
- return (bool) $has_data;
- }
-
/**
* Gets the property ID.
*
diff --git a/includes/Modules/Site_Verification.php b/includes/Modules/Site_Verification.php
index 11440fd7bb2..98c35b88e32 100644
--- a/includes/Modules/Site_Verification.php
+++ b/includes/Modules/Site_Verification.php
@@ -85,6 +85,9 @@ function() {
add_action(
'googlesitekit_authorize_user',
function() {
+ if ( ! $this->authentication->credentials()->using_proxy() ) {
+ return;
+ }
$this->user_options->set( Verification::OPTION, 'verified' );
}
);
diff --git a/includes/Modules/Tag_Manager.php b/includes/Modules/Tag_Manager.php
index 20d7a8b0539..149fdcf619f 100644
--- a/includes/Modules/Tag_Manager.php
+++ b/includes/Modules/Tag_Manager.php
@@ -93,6 +93,8 @@ public function register() {
// Tag Manager tag placement logic.
add_action( 'template_redirect', $this->get_method_proxy( 'register_tag' ) );
+ // Filter the Analytics `canUseSnippet` value.
+ add_action( 'googlesitekit_analytics_can_use_snippet', $this->get_method_proxy( 'can_analytics_use_snippet' ) );
}
/**
@@ -638,4 +640,24 @@ private function register_tag() {
}
}
+ /**
+ * Filters whether or not the Analytics module's snippet should be controlled by its `useSnippet` setting.
+ *
+ * @since 1.28.0
+ *
+ * @param boolean $original_value Original value of useSnippet setting.
+ * @return boolean Filtered value.
+ */
+ private function can_analytics_use_snippet( $original_value ) {
+ $settings = $this->get_settings()->get();
+
+ // This disables the Analytics snippet if there is a GA tag in the
+ // configured containers, and the GTM snippet is enabled.
+ if ( ! empty( $settings['gaPropertyID'] ) && $settings['useSnippet'] ) {
+ return false;
+ }
+
+ return $original_value;
+ }
+
}
diff --git a/includes/Modules/Tag_Manager/Settings.php b/includes/Modules/Tag_Manager/Settings.php
index bf72901b88a..7ddeeacc3d6 100644
--- a/includes/Modules/Tag_Manager/Settings.php
+++ b/includes/Modules/Tag_Manager/Settings.php
@@ -80,6 +80,7 @@ protected function get_default() {
'internalContainerID' => '',
'internalAMPContainerID' => '',
'useSnippet' => true,
+ 'gaPropertyID' => '',
);
}
diff --git a/includes/Plugin.php b/includes/Plugin.php
index 8e586a8774f..b2feb397882 100644
--- a/includes/Plugin.php
+++ b/includes/Plugin.php
@@ -10,6 +10,8 @@
namespace Google\Site_Kit;
+use Google\Site_Kit\Core\Feature_Tours\Feature_Tours;
+use Google\Site_Kit\Core\Util\Build_Mode;
use Google\Site_Kit\Core\Util\Feature_Flags;
use Google\Site_Kit\Core\Util\JSON_File;
@@ -169,6 +171,7 @@ function() use ( $options, $activation_flag ) {
$screens->register();
( new Core\Util\Reset( $this->context ) )->register();
+ ( new Core\Util\Reset_Persistent( $this->context ) )->register();
( new Core\Util\Developer_Plugin_Installer( $this->context ) )->register();
( new Core\Util\Tracking( $this->context, $user_options, $screens ) )->register();
( new Core\REST_API\REST_Routes( $this->context, $authentication, $modules ) )->register();
@@ -180,6 +183,7 @@ function() use ( $options, $activation_flag ) {
( new Core\Util\Health_Checks( $authentication ) )->register();
( new Core\Admin\Standalone( $this->context ) )->register();
( new Core\Util\Activation_Notice( $this->context, $activation_flag, $assets ) )->register();
+ ( new Core\Feature_Tours\Feature_Tours( $this->context, $user_options ) )->register();
( new Core\Util\Migration_1_3_0( $this->context, $options, $user_options ) )->register();
( new Core\Util\Migration_1_8_1( $this->context, $options, $user_options, $authentication ) )->register();
@@ -246,7 +250,7 @@ public static function load( $main_file ) {
}
$config = new JSON_File( GOOGLESITEKIT_PLUGIN_DIR_PATH . 'dist/config.json' );
- Feature_Flags::set_mode( $config['flagMode'] );
+ Build_Mode::set_mode( $config['buildMode'] );
Feature_Flags::set_features( (array) $config['features'] );
static::$instance = new static( $main_file );
@@ -254,4 +258,5 @@ public static function load( $main_file ) {
return true;
}
+
}
diff --git a/package-lock.json b/package-lock.json
index 312bd1cbca0..d846fab5c28 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -104,13 +104,6 @@
"@babel/types": "^7.10.4"
}
},
- "@babel/helper-module-imports": {
- "version": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
"@babel/highlight": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
@@ -1625,468 +1618,358 @@
"@babel/helper-plugin-utils": "^7.10.4"
},
"dependencies": {
- "@babel/code-frame": {
+ "@babel/helper-plugin-utils": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
+ "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
+ "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz",
+ "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz",
+ "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
+ }
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
+ "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
+ "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
+ "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-module-imports": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
"requires": {
- "@babel/highlight": "^7.10.4"
+ "@babel/types": "^7.10.4"
}
},
- "@babel/generator": {
+ "@babel/helper-plugin-utils": {
"version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
"requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
+ "@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
- "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
- "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-flow": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz",
- "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- }
- }
- },
- "@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz",
- "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
- "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
- }
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
- "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
- "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
- "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
- "requires": {
- "@babel/helper-module-imports": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-remap-async-to-generator": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-module-imports": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- }
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
- "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz",
- "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "lodash": "^4.17.13"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
- "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.10.4",
- "@babel/helper-define-map": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-optimise-call-expression": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-replace-supers": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "globals": "^11.1.0"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
+ "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz",
+ "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
+ "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-define-map": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "requires": {
+ "@babel/highlight": "^7.10.4"
}
},
"@babel/helper-function-name": {
@@ -2346,573 +2229,105 @@
}
}
},
- "@babel/plugin-transform-literals": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
- "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
- "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- }
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz",
- "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==",
- "requires": {
- "@babel/helper-module-transforms": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
- "requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-module-imports": {
- "version": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
- "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
- "requires": {
- "@babel/helper-module-transforms": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/helper-simple-access": "^7.10.4",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
- "requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-module-imports": {
- "version": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz",
- "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==",
- "requires": {
- "@babel/helper-hoist-variables": "^7.10.4",
- "@babel/helper-module-transforms": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
- "requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-module-imports": {
- "version": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
- "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
- "requires": {
- "@babel/helper-module-transforms": "^7.10.4",
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
- "requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-module-imports": {
- "version": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
- "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
+ "@babel/plugin-transform-literals": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
+ "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
+ "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz",
+ "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
+ "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz",
+ "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
+ "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-plugin-utils": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
+ }
+ }
+ },
"@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
@@ -2945,120 +2360,10 @@
"@babel/helper-replace-supers": "^7.10.4"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/generator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
- "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
- "requires": {
- "@babel/types": "^7.10.4",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
- "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
- "requires": {
- "@babel/helper-get-function-arity": "^7.10.4",
- "@babel/template": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
- "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
- "requires": {
- "@babel/types": "^7.10.4"
- }
- },
"@babel/helper-plugin-utils": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
"integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg=="
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
- "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA=="
- },
- "@babel/template": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
- "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4"
- }
- },
- "@babel/traverse": {
- "version": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
- "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.10.4",
- "@babel/helper-function-name": "^7.10.4",
- "@babel/helper-split-export-declaration": "^7.10.4",
- "@babel/parser": "^7.10.4",
- "@babel/types": "^7.10.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
- }
- },
- "@babel/types": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
- "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
- },
- "debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
@@ -4152,6 +3457,14 @@
"@types/faker": "^4.1.9",
"faker": "4.1.0",
"lodash": "^4.17.15"
+ },
+ "dependencies": {
+ "faker": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz",
+ "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=",
+ "dev": true
+ }
}
},
"@jest/console": {
@@ -4740,6 +4053,19 @@
}
}
},
+ "@material/card": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@material/card/-/card-2.3.0.tgz",
+ "integrity": "sha512-udVIanyz3KhZ8IfZjX2Yg+YJxU+oYdP9RbCM3hl7l1aqvNr8WSAy/YZ60Ue54fuN+0CpXiNpz1J8GyDktUZKKg==",
+ "requires": {
+ "@material/elevation": "^1.1.0",
+ "@material/feature-targeting": "^0.44.1",
+ "@material/ripple": "^2.3.0",
+ "@material/rtl": "^0.42.0",
+ "@material/shape": "^1.1.1",
+ "@material/theme": "^1.1.0"
+ }
+ },
"@material/checkbox": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-2.3.0.tgz",
@@ -4970,6 +4296,16 @@
"tslib": "^1.9.3"
}
},
+ "@material/react-card": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/@material/react-card/-/react-card-0.15.0.tgz",
+ "integrity": "sha512-84+hi8SipYPRzBf7NX/3K/FElx/yPGrts7Ip1DnOVcvTXlI4jVTNg0UTdGxEgG+xLdsjo9gQLMsz1EA4Y7nOCA==",
+ "requires": {
+ "@material/card": "^2.1.1",
+ "@material/react-ripple": "^0.15.0",
+ "classnames": "^2.2.6"
+ }
+ },
"@material/react-checkbox": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/@material/react-checkbox/-/react-checkbox-0.15.0.tgz",
@@ -4978,20 +4314,6 @@
"@material/checkbox": "^2.1.1",
"@material/react-ripple": "^0.15.0",
"classnames": "^2.2.6"
- },
- "dependencies": {
- "@material/ripple": {
- "version": "https://registry.npmjs.org/@material/ripple/-/ripple-1.1.0.tgz",
- "integrity": "sha512-mkfDBZAmxjpRG7V9TrfOmLxt1g/wvGHCXtYPgvH7W8ozjf53edqxLOFENEdvHbie27y9nyixzXn0gzU0HnxSeA==",
- "requires": {
- "@material/animation": "^1.0.0",
- "@material/base": "^1.0.0",
- "@material/dom": "^1.1.0",
- "@material/feature-targeting": "^0.44.1",
- "@material/theme": "^1.1.0",
- "tslib": "^1.9.3"
- }
- }
}
},
"@material/react-floating-label": {
@@ -5394,52 +4716,6 @@
"@material/react-notched-outline": "^0.15.0",
"@material/textfield": "^2.3.1",
"classnames": "^2.2.6"
- },
- "dependencies": {
- "@material/floating-label": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-2.3.0.tgz",
- "integrity": "sha512-OYcNmf+mVzW+rphDgVkyWES+SbivA6Y2+0amVDD9E9X6hLjO+L1dtIP3rC7lp0Y2Ey9rkuRORsUoriFvN7xQQw==",
- "requires": {
- "@material/animation": "^1.0.0",
- "@material/base": "^1.0.0",
- "@material/rtl": "^0.42.0",
- "@material/theme": "^1.1.0",
- "@material/typography": "^2.3.0",
- "tslib": "^1.9.3"
- }
- },
- "@material/line-ripple": {
- "version": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-2.3.0.tgz",
- "integrity": "sha512-gDjUlrM6P182ldY4CYiBMcdcUtch1DWd1osgp5STJXxth6ukRCNIdDigrKCHtyJKB8eXeNORwWs39xWZOGihbA==",
- "requires": {
- "@material/animation": "^1.0.0",
- "@material/base": "^1.0.0",
- "@material/theme": "^1.1.0",
- "tslib": "^1.9.3"
- }
- },
- "@material/notched-outline": {
- "version": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-2.3.0.tgz",
- "integrity": "sha512-EDhpCGcMi1gW12qzXsdKHr6aYxa80s94tn9/G1r7eJu/BOVTYt20qjqoYQJE6i8XxcD1t5xcNdQ7StgGpk2MGA==",
- "requires": {
- "@material/animation": "^1.0.0",
- "@material/base": "^1.0.0",
- "@material/floating-label": "^2.3.0",
- "@material/rtl": "^0.42.0",
- "@material/shape": "^1.1.1",
- "@material/theme": "^1.1.0",
- "tslib": "^1.9.3"
- }
- },
- "@material/typography": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@material/typography/-/typography-2.3.0.tgz",
- "integrity": "sha512-NtWVVvwG9Te6/kuIl4fEwDcXGCS7mfPgo5CKPyxcK6y0hJHv6yRHpipJT9D4ZlXw0sQx9B33doOK7iYJtwBBZw==",
- "requires": {
- "@material/feature-targeting": "^0.44.1"
- }
- }
}
},
"@material/ripple": {
@@ -5956,12 +5232,6 @@
"resolved": "https://registry.npmjs.org/@react-hook/merged-ref/-/merged-ref-1.3.0.tgz",
"integrity": "sha512-9p7fbPZ37n1Cbw37f3EtrcR9TwVjMkoTKwYbG7URO2HDlnOzuNTjsd/VK0/4i52SwKmOa6lBwz6Pr9g0pIyaCg=="
},
- "@sindresorhus/is": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
- "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==",
- "dev": true
- },
"@sinonjs/commons": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz",
@@ -8338,6 +7608,22 @@
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
},
+ "@types/eslint": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
+ "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.46",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
+ "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
+ "dev": true
+ },
"@types/faker": {
"version": "4.1.12",
"resolved": "https://registry.npmjs.org/@types/faker/-/faker-4.1.12.tgz",
@@ -8418,59 +7704,6 @@
"requires": {
"jest-diff": "^25.2.1",
"pretty-format": "^25.2.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "react-is": {
- "version": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"@types/jquery": {
@@ -9168,11 +8401,21 @@
},
"dependencies": {
"@wordpress/priority-queue": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-1.7.0.tgz",
- "integrity": "sha512-fwHOW48lYRV2CpP43LwET+ZQrNDK325V9fFMMpc0tgJfdSfgT9gwztOEx5vbbfkwzJXIdxTW+ILhoH20CuiSug==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-1.10.0.tgz",
+ "integrity": "sha512-3ejPX/6ECUN1FAqbL1BvqP77aRrGx5C41HeNZZT9ZzErJWVGfE0NRFfCt7knT0/LumdERApHkswBp3DQ5J18RQ==",
"requires": {
- "@babel/runtime": "^7.9.2"
+ "@babel/runtime": "^7.12.5"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.12.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
+ "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ }
}
}
}
@@ -9455,16 +8698,6 @@
}
}
},
- "array-includes": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz",
- "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==",
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0",
- "is-string": "^1.0.5"
- }
- },
"babel-eslint": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
@@ -9488,49 +8721,6 @@
"ms": "^2.1.1"
}
},
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "es-abstract": {
- "version": "1.17.6",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
- "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.0",
- "is-regex": "^1.1.0",
- "object-inspect": "^1.7.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.0",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- },
- "dependencies": {
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- }
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
"eslint-plugin-jest": {
"version": "23.17.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.17.1.tgz",
@@ -9609,16 +8799,6 @@
"type-fest": "^0.8.1"
}
},
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
- },
- "is-callable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
- "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
- },
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
@@ -9628,22 +8808,6 @@
"is-extglob": "^2.1.1"
}
},
- "is-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
- "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -9662,29 +8826,12 @@
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
- "jsx-ast-utils": {
- "version": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
- "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
- "requires": {
- "array-includes": "^3.1.1",
- "object.assign": "^4.1.0"
- }
- },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "object.entries": {
- "version": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz",
- "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==",
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5",
- "has": "^1.0.3"
- }
- },
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
@@ -10868,16 +10015,16 @@
"integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
},
"mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ "version": "1.46.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+ "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
},
"mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "version": "2.1.29",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+ "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
"requires": {
- "mime-db": "1.44.0"
+ "mime-db": "1.46.0"
}
},
"minimist": {
@@ -11180,9 +10327,9 @@
}
},
"ws": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
- "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ=="
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz",
+ "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA=="
}
}
},
@@ -11344,75 +10491,6 @@
"string.prototype.padend": "^3.0.0",
"string.prototype.padstart": "^3.0.0",
"symbol.prototype.description": "^1.0.0"
- },
- "dependencies": {
- "define-properties": {
- "version": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "es-abstract": {
- "version": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
- "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
- "requires": {
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1",
- "is-callable": "^1.2.0",
- "is-regex": "^1.1.0",
- "object-inspect": "^1.7.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.0",
- "string.prototype.trimend": "^1.0.1",
- "string.prototype.trimstart": "^1.0.1"
- },
- "dependencies": {
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- }
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "has-symbols": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
- "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
- },
- "is-callable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
- "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw=="
- },
- "is-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
- "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- }
}
},
"airbnb-prop-types": {
@@ -11739,29 +10817,6 @@
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
- "arch": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz",
- "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==",
- "dev": true
- },
- "archive-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
- "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
- "dev": true,
- "requires": {
- "file-type": "^4.2.0"
- },
- "dependencies": {
- "file-type": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
- "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
- "dev": true
- }
- }
- },
"archiver": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz",
@@ -13417,266 +12472,6 @@
"integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=",
"dev": true
},
- "bin-build": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz",
- "integrity": "sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==",
- "dev": true,
- "requires": {
- "decompress": "^4.0.0",
- "download": "^6.2.2",
- "execa": "^0.7.0",
- "p-map-series": "^1.0.0",
- "tempfile": "^2.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.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"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "bin-check": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz",
- "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "executable": "^4.1.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.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"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
- "bin-version": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz",
- "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "find-versions": "^3.0.0"
- }
- },
- "bin-version-check": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz",
- "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==",
- "dev": true,
- "requires": {
- "bin-version": "^3.0.0",
- "semver": "^5.6.0",
- "semver-truncate": "^1.1.2"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "bin-wrapper": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
- "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
- "dev": true,
- "requires": {
- "bin-check": "^4.1.0",
- "bin-version-check": "^4.0.0",
- "download": "^7.1.0",
- "import-lazy": "^3.1.0",
- "os-filter-obj": "^2.0.0",
- "pify": "^4.0.1"
- },
- "dependencies": {
- "download": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz",
- "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
- "dev": true,
- "requires": {
- "archive-type": "^4.0.0",
- "caw": "^2.0.1",
- "content-disposition": "^0.5.2",
- "decompress": "^4.2.0",
- "ext-name": "^5.0.0",
- "file-type": "^8.1.0",
- "filenamify": "^2.0.0",
- "get-stream": "^3.0.0",
- "got": "^8.3.1",
- "make-dir": "^1.2.0",
- "p-event": "^2.1.0",
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "file-type": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz",
- "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "got": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
- "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^0.7.0",
- "cacheable-request": "^2.1.1",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "into-stream": "^3.1.0",
- "is-retry-allowed": "^1.1.0",
- "isurl": "^1.0.0-alpha5",
- "lowercase-keys": "^1.0.0",
- "mimic-response": "^1.0.0",
- "p-cancelable": "^0.4.0",
- "p-timeout": "^2.0.1",
- "pify": "^3.0.0",
- "safe-buffer": "^5.1.1",
- "timed-out": "^4.0.1",
- "url-parse-lax": "^3.0.0",
- "url-to-options": "^1.0.1"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
- "import-lazy": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
- "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
- "dev": true
- },
- "p-cancelable": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz",
- "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
- "dev": true
- },
- "p-event": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz",
- "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
- "dev": true,
- "requires": {
- "p-timeout": "^2.0.1"
- }
- },
- "p-timeout": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
- "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
- "dev": true,
- "requires": {
- "p-finally": "^1.0.0"
- }
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0"
- }
- }
- }
- },
"binary-extensions": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
@@ -13691,16 +12486,6 @@
"file-uri-to-path": "1.0.0"
}
},
- "bl": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
- "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
- }
- },
"block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
@@ -14114,22 +12899,6 @@
"isarray": "^1.0.0"
}
},
- "buffer-alloc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
- "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
- "dev": true,
- "requires": {
- "buffer-alloc-unsafe": "^1.1.0",
- "buffer-fill": "^1.0.0"
- }
- },
- "buffer-alloc-unsafe": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
- "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
- "dev": true
- },
"buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -14141,12 +12910,6 @@
"integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=",
"dev": true
},
- "buffer-fill": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
- "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
- "dev": true
- },
"buffer-from": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -14173,93 +12936,6 @@
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
"dev": true
},
- "cacache": {
- "version": "13.0.1",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
- "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==",
- "dev": true,
- "requires": {
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.2",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "minipass": "^3.0.0",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "p-map": "^3.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.7.1",
- "ssri": "^7.0.0",
- "unique-filename": "^1.1.1"
- },
- "dependencies": {
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
- "dev": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "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"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -14276,78 +12952,6 @@
"unset-value": "^1.0.0"
}
},
- "cacheable-request": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
- "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
- "dev": true,
- "requires": {
- "clone-response": "1.0.2",
- "get-stream": "3.0.0",
- "http-cache-semantics": "3.8.1",
- "keyv": "3.0.0",
- "lowercase-keys": "1.0.0",
- "normalize-url": "2.0.1",
- "responselike": "1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "lowercase-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
- "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
- "dev": true
- },
- "normalize-url": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
- "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
- "dev": true,
- "requires": {
- "prepend-http": "^2.0.0",
- "query-string": "^5.0.1",
- "sort-keys": "^2.0.0"
- }
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "dev": true
- },
- "query-string": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
- "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
- "dev": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "sort-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
- "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
- }
- }
- },
"call-me-maybe": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
@@ -14461,18 +13065,6 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
- "caw": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz",
- "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==",
- "dev": true,
- "requires": {
- "get-proxy": "^2.0.0",
- "isurl": "^1.0.0-alpha5",
- "tunnel-agent": "^0.6.0",
- "url-to-options": "^1.0.1"
- }
- },
"ccount": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz",
@@ -14855,12 +13447,6 @@
"restore-cursor": "^2.0.0"
}
},
- "cli-spinners": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz",
- "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==",
- "dev": true
- },
"cli-table3": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz",
@@ -15022,15 +13608,6 @@
}
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"clone-stats": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
@@ -15215,16 +13792,6 @@
"typedarray": "^0.0.6"
}
},
- "config-chain": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
- "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
- "dev": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
"consola": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/consola/-/consola-2.14.0.tgz",
@@ -15244,12 +13811,6 @@
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
- "console-stream": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz",
- "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=",
- "dev": true
- },
"consolidated-events": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/consolidated-events/-/consolidated-events-2.0.2.tgz",
@@ -16142,140 +14703,17 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
- "decompress": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz",
- "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.0.0",
- "decompress-tarbz2": "^4.0.0",
- "decompress-targz": "^4.0.0",
- "decompress-unzip": "^4.0.1",
- "graceful-fs": "^4.1.10",
- "make-dir": "^1.0.0",
- "pify": "^2.3.0",
- "strip-dirs": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "decompress-tar": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz",
- "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==",
- "dev": true,
- "requires": {
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0",
- "tar-stream": "^1.5.2"
- },
- "dependencies": {
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true
- }
- }
- },
- "decompress-tarbz2": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz",
- "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.1.0",
- "file-type": "^6.1.0",
- "is-stream": "^1.1.0",
- "seek-bzip": "^1.0.5",
- "unbzip2-stream": "^1.0.9"
- },
- "dependencies": {
- "file-type": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz",
- "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==",
- "dev": true
- }
- }
- },
- "decompress-targz": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz",
- "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==",
- "dev": true,
- "requires": {
- "decompress-tar": "^4.1.1",
- "file-type": "^5.2.0",
- "is-stream": "^1.1.0"
- },
- "dependencies": {
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true
- }
- }
- },
- "decompress-unzip": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
- "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
- "dev": true,
- "requires": {
- "file-type": "^3.8.0",
- "get-stream": "^2.2.0",
- "pify": "^2.3.0",
- "yauzl": "^2.4.2"
- },
- "dependencies": {
- "file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
- "dev": true
- },
- "get-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
- "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
- "dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
- },
"dedent": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
"integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
"dev": true
},
+ "deep-diff": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-1.0.2.tgz",
+ "integrity": "sha512-aWS3UIVH+NPGCD1kki+DCU9Dua032iSsO43LqQpcs4R3+dVv7tX0qBGjiVHJHjplsoUM2XRO/KB92glqc68awg=="
+ },
"deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
@@ -16319,23 +14757,6 @@
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
"integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
},
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2"
- },
- "dependencies": {
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- }
- }
- },
"define-properties": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
@@ -16685,39 +15106,6 @@
"dotenv-defaults": "^1.0.2"
}
},
- "download": {
- "version": "6.2.5",
- "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz",
- "integrity": "sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==",
- "dev": true,
- "requires": {
- "caw": "^2.0.0",
- "content-disposition": "^0.5.2",
- "decompress": "^4.0.0",
- "ext-name": "^5.0.0",
- "file-type": "5.2.0",
- "filenamify": "^2.0.0",
- "get-stream": "^3.0.0",
- "got": "^7.0.0",
- "make-dir": "^1.0.0",
- "p-event": "^1.0.0",
- "pify": "^3.0.0"
- },
- "dependencies": {
- "file-type": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
- "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
- "dev": true
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
"downshift": {
"version": "5.4.6",
"resolved": "https://registry.npmjs.org/downshift/-/downshift-5.4.6.tgz",
@@ -16741,12 +15129,6 @@
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
},
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
- },
"duplexify": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz",
@@ -17521,116 +15903,167 @@
}
},
"eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.20.0.tgz",
+ "integrity": "sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.3.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",
+ "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",
+ "file-entry-cache": "^6.0.0",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^5.0.0",
"globals": "^12.1.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": "^4.17.20",
"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.4",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
- "acorn": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
- "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
"dev": true,
"requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "@babel/highlight": "^7.10.4"
}
},
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "@babel/helper-validator-identifier": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+ "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
+ "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
"dev": true,
"requires": {
- "type-fest": "^0.11.0"
+ "@babel/helper-validator-identifier": "^7.12.11",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
},
"dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
}
}
},
+ "@eslint/eslintrc": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz",
+ "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^12.1.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "lodash": "^4.17.20",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+ "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "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-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
"dev": true
},
- "ansi-styles": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
- "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
- "dev": true,
- "requires": {
- "@types/color-name": "^1.1.1",
- "color-convert": "^2.0.1"
- }
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
},
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
- "restore-cursor": "^3.1.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
- "cli-width": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
- "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
- "dev": true
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -17646,13 +16079,24 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
"debug": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
- "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
"dev": true,
"requires": {
- "ms": "^2.1.1"
+ "ms": "2.1.2"
}
},
"doctrine": {
@@ -17670,30 +16114,56 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
- "eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
}
},
"eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
+ "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
"dev": true
},
"espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"requires": {
- "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"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true
+ }
}
},
"fast-deep-equal": {
@@ -17702,15 +16172,31 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
- "figures": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
- "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "file-entry-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
+ "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
"dev": true,
"requires": {
- "escape-string-regexp": "^1.0.5"
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
}
},
+ "flatted": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz",
+ "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==",
+ "dev": true
+ },
"glob-parent": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
@@ -17747,145 +16233,140 @@
"dev": true
},
"import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"requires": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
}
},
- "inquirer": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.0.tgz",
- "integrity": "sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==",
- "dev": true,
- "requires": {
- "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.15",
- "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"
- },
- "dependencies": {
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
- }
- },
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
"js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
"dev": true
},
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "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==",
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true,
"requires": {
- "mimic-fn": "^2.1.0"
+ "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"
}
},
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "semver": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+ "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
"dev": true,
"requires": {
- "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"
+ "lru-cache": "^6.0.0"
}
},
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "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": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
+ "shebang-regex": "^3.0.0"
}
},
- "run-async": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
- "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "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
},
- "rxjs": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz",
- "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==",
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
"requires": {
- "tslib": "^1.9.0"
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ }
}
},
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -17895,33 +16376,78 @@
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "table": {
+ "version": "6.0.7",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz",
+ "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^7.0.2",
+ "lodash": "^4.17.20",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.0"
},
"dependencies": {
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "ajv": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.1.0.tgz",
+ "integrity": "sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
}
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
}
}
},
- "strip-json-comments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz",
- "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==",
- "dev": true
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
},
- "supports-color": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
- "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "isexe": "^2.0.0"
}
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
}
}
},
@@ -17976,195 +16502,6 @@
}
}
},
- "eslint-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz",
- "integrity": "sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^3.3.1",
- "fs-extra": "^8.1.0",
- "loader-utils": "^2.0.0",
- "object-hash": "^2.0.3",
- "schema-utils": "^2.6.5"
- },
- "dependencies": {
- "@types/json-schema": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
- "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
- "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==",
- "dev": true,
- "requires": {
- "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-keywords": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz",
- "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==",
- "dev": true
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "fs-extra": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
- "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
- "dev": true
- },
- "json5": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
- "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
- }
- },
"eslint-module-utils": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz",
@@ -18862,6 +17199,137 @@
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
"integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
},
+ "eslint-webpack-plugin": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.5.1.tgz",
+ "integrity": "sha512-LB6baXTm62IwSu5gxj4xQ8URsMc1Wk95WLcK8pFklLvk4i66lS5v5knpVzCLG9u7NXYThfIMdvr/lYe2A3ZbWw==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "^7.2.6",
+ "arrify": "^2.0.1",
+ "jest-worker": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "schema-utils": "^3.0.0"
+ },
+ "dependencies": {
+ "@types/json-schema": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
+ "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "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-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "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"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "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"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "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
+ },
+ "jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "schema-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+ "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.6",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "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"
+ }
+ }
+ }
+ },
"espree": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
@@ -18885,12 +17353,20 @@
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"esquery": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
- "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
"requires": {
- "estraverse": "^4.0.0"
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true
+ }
}
},
"esrecurse": {
@@ -18961,76 +17437,6 @@
"safe-buffer": "^5.1.1"
}
},
- "exec-buffer": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
- "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "p-finally": "^1.0.0",
- "pify": "^3.0.0",
- "rimraf": "^2.5.4",
- "tempfile": "^2.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.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"
- }
- },
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
"exec-sh": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
@@ -19058,22 +17464,10 @@
"clone-regexp": "^2.1.0"
}
},
- "executable": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
- "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
- "dev": true,
- "requires": {
- "pify": "^2.2.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
- }
+ "exenv": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",
+ "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="
},
"exif-parser": {
"version": "0.1.12",
@@ -19310,25 +17704,6 @@
}
}
},
- "ext-list": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
- "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==",
- "dev": true,
- "requires": {
- "mime-db": "^1.28.0"
- }
- },
- "ext-name": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz",
- "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==",
- "dev": true,
- "requires": {
- "ext-list": "^2.0.0",
- "sort-keys-length": "^1.0.0"
- }
- },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -19481,9 +17856,9 @@
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"faker": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz",
- "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/faker/-/faker-5.4.0.tgz",
+ "integrity": "sha512-Y9n/Ky/xZx/Bj8DePvXspUYRtHl/rGQytoIT5LaxmNwSe3wWyOeOXb3lT6Dpipq240PVpeFaGKzScz/5fvff2g==",
"dev": true
},
"fast-deep-equal": {
@@ -19815,35 +18190,12 @@
}
}
},
- "file-type": {
- "version": "12.4.2",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz",
- "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
- "dev": true
- },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
- "filename-reserved-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
- "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
- "dev": true
- },
- "filenamify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz",
- "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==",
- "dev": true,
- "requires": {
- "filename-reserved-regex": "^2.0.0",
- "strip-outer": "^1.0.0",
- "trim-repeated": "^1.0.0"
- }
- },
"filesize": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
@@ -20029,23 +18381,6 @@
"locate-path": "^3.0.0"
}
},
- "find-versions": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz",
- "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==",
- "dev": true,
- "requires": {
- "semver-regex": "^2.0.0"
- },
- "dependencies": {
- "semver-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz",
- "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==",
- "dev": true
- }
- }
- },
"flat-cache": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
@@ -20303,12 +18638,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
- "fsevents": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz",
- "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==",
- "dev": true
- },
"fstream": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
@@ -20407,208 +18736,76 @@
"is-fullwidth-code-point": "^1.0.0",
"strip-ansi": "^3.0.0"
}
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "gaze": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
- "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
- "requires": {
- "globule": "^1.0.0"
- }
- },
- "gensync": {
- "version": "1.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
- "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
- },
- "get-own-enumerable-property-symbols": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
- "dev": true
- },
- "get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
- },
- "get-proxy": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz",
- "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==",
- "dev": true,
- "requires": {
- "npm-conf": "^1.1.0"
- }
- },
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "gettext-parser": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
- "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
- "requires": {
- "encoding": "^0.1.12",
- "safe-buffer": "^5.1.1"
- }
- },
- "gifsicle": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.1.0.tgz",
- "integrity": "sha512-hQsOH7yjC7fMokntysN6f2QuxrnX+zmKKKVy0sC3Vhtnk8WrOxLdfH/Z2PNn7lVVx+1+drzIeAe8ufcmdSC/8g==",
- "dev": true,
- "optional": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^4.0.0",
- "execa": "^4.0.0",
- "logalot": "^2.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "optional": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "execa": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz",
- "integrity": "sha512-QI2zLa6CjGWdiQsmSkZoGtDx2N+cQIGb3yNolGTdjSQzydzLgYYf8LRuagp7S7fPimjcrzUDSUFd/MgzELMi4Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "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"
- }
- },
- "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,
- "optional": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "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,
- "optional": true
- },
- "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,
- "optional": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "optional": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "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,
- "optional": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "optional": true
- },
- "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,
- "optional": 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,
- "optional": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "optional": true,
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
- "isexe": "^2.0.0"
+ "ansi-regex": "^2.0.0"
}
}
}
},
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "gettext-parser": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.4.0.tgz",
+ "integrity": "sha512-sedZYLHlHeBop/gZ1jdg59hlUEcpcZJofLq2JFwJT1zTqAU3l2wFv6IsuwFHGqbiT9DWzMUW4/em2+hspnmMMA==",
+ "requires": {
+ "encoding": "^0.1.12",
+ "safe-buffer": "^5.1.1"
+ }
+ },
"git-repo-info": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz",
@@ -20832,36 +19029,6 @@
"delegate": "^3.1.2"
}
},
- "got": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
- "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
- "dev": true,
- "requires": {
- "decompress-response": "^3.2.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-plain-obj": "^1.1.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "isurl": "^1.0.0-alpha5",
- "lowercase-keys": "^1.0.0",
- "p-cancelable": "^0.3.0",
- "p-timeout": "^1.1.1",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "url-parse-lax": "^1.0.0",
- "url-to-options": "^1.0.1"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
- }
- }
- },
"graceful-fs": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
@@ -20968,26 +19135,11 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
- "has-symbol-support-x": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==",
- "dev": true
- },
"has-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
},
- "has-to-string-tag-x": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
- "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
- "dev": true,
- "requires": {
- "has-symbol-support-x": "^1.4.1"
- }
- },
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
@@ -21289,12 +19441,6 @@
}
}
},
- "http-cache-semantics": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
- "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
- "dev": true
- },
"http-errors": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
@@ -21456,490 +19602,13 @@
}
},
"parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "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"
- }
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
- "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1",
- "lines-and-columns": "^1.1.6"
- }
- }
- }
- },
- "resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "hyphenate-style-name": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
- "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
- },
- "iconv-lite": {
- "version": "0.4.23",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
- "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
- "requires": {
- "postcss": "^7.0.14"
- }
- },
- "ieee754": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
- "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
- },
- "ignore-emit-webpack-plugin": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/ignore-emit-webpack-plugin/-/ignore-emit-webpack-plugin-2.0.3.tgz",
- "integrity": "sha512-ahTYD5KZ3DiZG9goS8NCxBaPEfXsPLH5JeWKmFTThD8lsPen6R4tLnWcN/mrksK5cDqyxOzmRL12feJQZjffuA=="
- },
- "imagemin": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz",
- "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==",
- "dev": true,
- "requires": {
- "file-type": "^12.0.0",
- "globby": "^10.0.0",
- "graceful-fs": "^4.2.2",
- "junk": "^3.1.0",
- "make-dir": "^3.0.0",
- "p-pipe": "^3.0.0",
- "replace-ext": "^1.0.0"
- },
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
- "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==",
- "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"
- }
- },
- "fast-glob": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
- "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
- },
- "dependencies": {
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "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"
- }
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globby": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz",
- "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==",
- "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.4",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
- "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
- "dev": true
- },
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "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
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "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"
- }
- },
- "path-type": {
- "version": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "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"
- }
- }
- }
- },
- "imagemin-cli": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-cli/-/imagemin-cli-6.0.0.tgz",
- "integrity": "sha512-ZDQqZWnIxf4UEG6KSfCtddq625V+NnNmYgZOdyyQU1CkwTQV7ameE3bWYplGlpwYFOAXs71AbBBT3wEC1upBAA==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.1",
- "get-stdin": "^8.0.0",
- "imagemin": "^7.0.0",
- "imagemin-gifsicle": "^7.0.0",
- "imagemin-jpegtran": "^6.0.0",
- "imagemin-optipng": "^7.0.0",
- "imagemin-svgo": "^7.0.0",
- "lodash.pairs": "^3.0.1",
- "meow": "^7.0.1",
- "ora": "^4.0.3",
- "plur": "^4.0.0",
- "strip-indent": "^3.0.0"
- },
- "dependencies": {
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "camelcase-keys": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
- "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "map-obj": "^4.0.0",
- "quick-lru": "^4.0.1"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "get-stdin": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
- "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
- "dev": true
- },
- "imagemin-jpegtran": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-6.0.0.tgz",
- "integrity": "sha512-Ih+NgThzqYfEWv9t58EItncaaXIHR0u9RuhKa8CtVBlMBvY0dCIxgQJQCfwImA4AV1PMfmUKlkyIHJjb7V4z1g==",
- "dev": true,
- "optional": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "is-jpg": "^2.0.0",
- "jpegtran-bin": "^4.0.0"
- }
- },
- "imagemin-optipng": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-7.1.0.tgz",
- "integrity": "sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "exec-buffer": "^3.0.0",
- "is-png": "^2.0.0",
- "optipng-bin": "^6.0.0"
- }
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "irregular-plurals": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.2.0.tgz",
- "integrity": "sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "map-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz",
- "integrity": "sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==",
- "dev": true
- },
- "meow": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz",
- "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==",
- "dev": true,
- "requires": {
- "@types/minimist": "^1.2.0",
- "camelcase-keys": "^6.2.2",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^2.5.0",
- "read-pkg-up": "^7.0.1",
- "redent": "^3.0.0",
- "trim-newlines": "^3.0.0",
- "type-fest": "^0.13.1",
- "yargs-parser": "^18.1.3"
- }
- },
- "minimist-options": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "dev": true,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
- },
- "dependencies": {
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- }
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "parse-json": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
- "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true,
"requires": {
- "@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"
+ "json-parse-better-errors": "^1.0.1"
}
},
"path-exists": {
@@ -21954,21 +19623,15 @@
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
- "plur": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz",
- "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==",
+ "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": {
- "irregular-plurals": "^3.2.0"
+ "find-up": "^4.0.0"
}
},
- "quick-lru": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
- "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
- "dev": true
- },
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -21981,302 +19644,83 @@
"type-fest": "^0.6.0"
},
"dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
}
}
},
- "redent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
- "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
- "dev": true,
- "requires": {
- "indent-string": "^4.0.0",
- "strip-indent": "^3.0.0"
- }
- },
"resolve": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
- "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"requires": {
- "is-core-module": "^2.0.0",
"path-parse": "^1.0.6"
}
},
- "strip-indent": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
- "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
- "dev": true,
- "requires": {
- "min-indent": "^1.0.0"
- }
- },
- "trim-newlines": {
+ "slash": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz",
- "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
"dev": true
}
}
},
- "imagemin-gifsicle": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz",
- "integrity": "sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==",
- "dev": true,
- "optional": true,
- "requires": {
- "execa": "^1.0.0",
- "gifsicle": "^5.0.0",
- "is-gif": "^3.0.0"
- }
+ "hyphenate-style-name": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
+ "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
},
- "imagemin-jpegtran": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-jpegtran/-/imagemin-jpegtran-7.0.0.tgz",
- "integrity": "sha512-MJoyTCW8YjMJf56NorFE41SR/WkaGA3IYk4JgvMlRwguJEEd3PnP9UxA8Y2UWjquz8d+On3Ds/03ZfiiLS8xTQ==",
- "dev": true,
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"requires": {
- "exec-buffer": "^3.0.0",
- "is-jpg": "^2.0.0",
- "jpegtran-bin": "^5.0.0"
- },
- "dependencies": {
- "jpegtran-bin": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-5.0.2.tgz",
- "integrity": "sha512-4FSmgIcr8d5+V6T1+dHbPZjaFH0ogVyP4UVsE+zri7S9YLO4qAT2our4IN3sW3STVgNTbqPermdIgt2XuAJ4EA==",
- "dev": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^4.0.0",
- "logalot": "^2.0.0"
- }
- }
+ "safer-buffer": ">= 2.1.2 < 3"
}
},
- "imagemin-optipng": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz",
- "integrity": "sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==",
- "dev": true,
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
"requires": {
- "exec-buffer": "^3.0.0",
- "is-png": "^2.0.0",
- "optipng-bin": "^7.0.0"
- },
- "dependencies": {
- "optipng-bin": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-7.0.0.tgz",
- "integrity": "sha512-mesUAwfedu5p9gRQwlYgD6Svw5IH3VUIWDJj/9cNpP3yFNbbEVqkTMWYhrIEn/cxmbGA3LpZrdoV2Yl8OfmnIA==",
- "dev": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^4.0.0",
- "logalot": "^2.0.0"
- }
- }
+ "postcss": "^7.0.14"
}
},
- "imagemin-svgo": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz",
- "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-svg": "^4.2.1",
- "svgo": "^1.3.2"
- }
+ "ieee754": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA=="
},
- "imagemin-webpack": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/imagemin-webpack/-/imagemin-webpack-5.1.1.tgz",
- "integrity": "sha512-ZsHHBL/NbX3sepz8shBS8iPLMm8vByUgXTcj5nC4hcv7OZymSgPZay3ODrOodWN6UubefBRRIYpskyywd5Ah0w==",
- "dev": true,
- "requires": {
- "cacache": "^13.0.1",
- "deepmerge": "^4.2.2",
- "find-cache-dir": "^3.1.0",
- "imagemin": "^7.0.1",
- "loader-utils": "^1.2.3",
- "p-limit": "^2.2.1",
- "serialize-javascript": "^2.1.2",
- "webpack-sources": "^1.4.3"
- },
- "dependencies": {
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "find-cache-dir": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
- "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
- },
- "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"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- }
- }
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ },
+ "ignore-emit-webpack-plugin": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/ignore-emit-webpack-plugin/-/ignore-emit-webpack-plugin-2.0.3.tgz",
+ "integrity": "sha512-ahTYD5KZ3DiZG9goS8NCxBaPEfXsPLH5JeWKmFTThD8lsPen6R4tLnWcN/mrksK5cDqyxOzmRL12feJQZjffuA=="
},
"imagesloaded": {
"version": "4.1.4",
@@ -22495,16 +19939,6 @@
"resolved": "https://registry.npmjs.org/intl-locales-supported/-/intl-locales-supported-1.8.12.tgz",
"integrity": "sha512-FJPl7p1LYO/C+LpwlDcvVpq7AeFTdFgwnq1JjdNYKjb51xkIxssXRR8LaA0fJFogjwRRztqw1ahgSJMSZsSFdw=="
},
- "into-stream": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
- "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
- "dev": true,
- "requires": {
- "from2": "^2.1.1",
- "p-is-promise": "^1.1.0"
- }
- },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -22637,15 +20071,6 @@
"rgba-regex": "^1.0.0"
}
},
- "is-core-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz",
- "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
"is-data-descriptor": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@@ -22735,25 +20160,6 @@
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="
},
- "is-gif": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-3.0.0.tgz",
- "integrity": "sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==",
- "dev": true,
- "optional": true,
- "requires": {
- "file-type": "^10.4.0"
- },
- "dependencies": {
- "file-type": {
- "version": "10.11.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz",
- "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==",
- "dev": true,
- "optional": true
- }
- }
- },
"is-glob": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
@@ -22767,17 +20173,10 @@
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz",
"integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A=="
},
- "is-interactive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "dev": true
- },
- "is-jpg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
- "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=",
- "dev": true
+ "is-lite": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.8.0.tgz",
+ "integrity": "sha512-w/+euF/pELyAgLA6Pai8Vp3l2EMJygQx1wGkKf/Gu7/qTWxZvYFKrdVF4qbi9YdVmISzB/jE4Q7yO9alrHQa8A=="
},
"is-map": {
"version": "2.0.1",
@@ -22785,12 +20184,6 @@
"integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
"dev": true
},
- "is-natural-number": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
- "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
- "dev": true
- },
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@@ -22820,12 +20213,6 @@
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
"dev": true
},
- "is-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
- "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
- "dev": true
- },
"is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -22862,12 +20249,6 @@
"isobject": "^3.0.1"
}
},
- "is-png": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-png/-/is-png-2.0.0.tgz",
- "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==",
- "dev": true
- },
"is-potential-custom-element-name": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
@@ -22899,12 +20280,6 @@
"integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
"dev": true
},
- "is-retry-allowed": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
- "dev": true
- },
"is-root": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
@@ -22932,25 +20307,6 @@
"resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
"integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY="
},
- "is-svg": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz",
- "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==",
- "dev": true,
- "optional": true,
- "requires": {
- "html-comment-regex": "^1.1.2"
- },
- "dependencies": {
- "html-comment-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
- "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
- "dev": true,
- "optional": true
- }
- }
- },
"is-symbol": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz",
@@ -23166,16 +20522,6 @@
"istanbul-lib-report": "^3.0.0"
}
},
- "isurl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
- "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
- "dev": true,
- "requires": {
- "has-to-string-tag-x": "^1.2.0",
- "is-object": "^1.0.1"
- }
- },
"iterate-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz",
@@ -25141,18 +22487,6 @@
"integrity": "sha1-U+RI7J0mPmgyZkZ+lELSxaLvVII=",
"dev": true
},
- "jpegtran-bin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jpegtran-bin/-/jpegtran-bin-4.0.0.tgz",
- "integrity": "sha512-2cRl1ism+wJUoYAYFt6O/rLBfpXNWG2dUWbgcEkTt5WGMnqI46eEro8T4C5zGROxKRqyKpCBSdHPvt5UYCtxaQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^4.0.0",
- "logalot": "^2.0.0"
- }
- },
"js-base64": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.2.tgz",
@@ -25361,12 +22695,6 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
},
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
- "dev": true
- },
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -25472,20 +22800,10 @@
}
}
},
- "junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "dev": true
- },
- "keyv": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
- "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.0"
- }
+ "just-detect-adblock": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/just-detect-adblock/-/just-detect-adblock-1.1.0.tgz",
+ "integrity": "sha512-xtgnwBBZaLtKspGo6jDX/H0FDsHrn41mQVWhNHge7pZe6Nj2gU2izfC09O0rPU/i97iMcJFVjbecFiTAvmNhLQ=="
},
"kind-of": {
"version": "6.0.2",
@@ -25721,18 +23039,6 @@
"ms": "^2.1.1"
}
},
- "del": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
- "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
- "requires": {
- "globby": "^6.1.0",
- "is-path-cwd": "^1.0.0",
- "p-map": "^1.1.1",
- "pify": "^3.0.0",
- "rimraf": "^2.2.8"
- }
- },
"execa": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.0.2.tgz",
@@ -25768,25 +23074,6 @@
"pump": "^3.0.0"
}
},
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
- }
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -25809,11 +23096,6 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
- },
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
@@ -25899,29 +23181,6 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "requires": {
- "glob": "^7.1.3"
- },
- "dependencies": {
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- }
- }
- },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -26141,12 +23400,6 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
},
- "lodash._getnative": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
"lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
@@ -26215,18 +23468,6 @@
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
- "lodash.isarguments": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
@@ -26244,32 +23485,12 @@
"integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=",
"dev": true
},
- "lodash.keys": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
- "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
- "dev": true,
- "requires": {
- "lodash._getnative": "^3.0.0",
- "lodash.isarguments": "^3.0.0",
- "lodash.isarray": "^3.0.0"
- }
- },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
"dev": true
},
- "lodash.pairs": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lodash.pairs/-/lodash.pairs-3.0.1.tgz",
- "integrity": "sha1-u+CNV4bu6qCaFckevw3LfSvjJqk=",
- "dev": true,
- "requires": {
- "lodash.keys": "^3.0.0"
- }
- },
"lodash.snakecase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
@@ -26510,28 +23731,6 @@
}
}
},
- "logalot": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz",
- "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=",
- "dev": true,
- "requires": {
- "figures": "^1.3.5",
- "squeak": "^1.0.0"
- },
- "dependencies": {
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.5",
- "object-assign": "^4.1.0"
- }
- }
- }
- },
"lolex": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
@@ -26584,12 +23783,6 @@
}
}
},
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true
- },
"lowlight": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz",
@@ -26600,18 +23793,6 @@
"highlight.js": "~9.13.0"
}
},
- "lpad-align": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz",
- "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1",
- "indent-string": "^2.1.0",
- "longest": "^1.0.0",
- "meow": "^3.3.0"
- }
- },
"lru-cache": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
@@ -26621,15 +23802,6 @@
"yallist": "^2.1.2"
}
},
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
"makeerror": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
@@ -26896,21 +24068,11 @@
"strip-bom": "^2.0.0"
}
},
- "lodash": {
- "version": "3.10.1",
- "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
- "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y="
- },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
- "onetime": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k="
- },
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
@@ -27161,12 +24323,6 @@
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"dev": true
},
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true
- },
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
@@ -27493,6 +24649,11 @@
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
},
+ "nested-property": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-4.0.0.tgz",
+ "integrity": "sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA=="
+ },
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -27822,16 +24983,6 @@
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==",
"dev": true
},
- "npm-conf": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
- "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
- "dev": true,
- "requires": {
- "config-chain": "^1.1.11",
- "pify": "^3.0.0"
- }
- },
"npm-package-json-lint": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/npm-package-json-lint/-/npm-package-json-lint-5.1.0.tgz",
@@ -28385,12 +25536,6 @@
"resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz",
"integrity": "sha1-rwt5f/6+r4pSxmN87b6IFs/sG8g="
},
- "object-hash": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz",
- "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==",
- "dev": true
- },
"object-inspect": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
@@ -28714,201 +25859,6 @@
"wordwrap": "~1.0.0"
}
},
- "optipng-bin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-6.0.0.tgz",
- "integrity": "sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==",
- "dev": true,
- "optional": true,
- "requires": {
- "bin-build": "^3.0.0",
- "bin-wrapper": "^4.0.0",
- "logalot": "^2.0.0"
- }
- },
- "ora": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz",
- "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==",
- "dev": true,
- "requires": {
- "chalk": "^3.0.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.2.0",
- "is-interactive": "^1.0.0",
- "log-symbols": "^3.0.0",
- "mute-stream": "0.0.8",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dev": true,
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "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"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "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
- },
- "mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
- },
- "onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dev": true,
- "requires": {
- "mimic-fn": "^2.1.0"
- }
- },
- "restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dev": true,
- "requires": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -28929,15 +25879,6 @@
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
},
- "os-filter-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz",
- "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==",
- "dev": true,
- "requires": {
- "arch": "^2.1.0"
- }
- },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -28957,37 +25898,16 @@
"os-tmpdir": "^1.0.0"
}
},
- "p-cancelable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
- "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==",
- "dev": true
- },
"p-each-series": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz",
"integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ=="
},
- "p-event": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
- "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
- "dev": true,
- "requires": {
- "p-timeout": "^1.1.1"
- }
- },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
- "p-is-promise": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
- "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
- "dev": true
- },
"p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
@@ -29007,38 +25927,9 @@
"p-map": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
- "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
- },
- "p-map-series": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
- "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
- "dev": true,
- "requires": {
- "p-reduce": "^1.0.0"
- }
- },
- "p-pipe": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz",
- "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
"dev": true
},
- "p-reduce": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
- "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
- "dev": true
- },
- "p-timeout": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
- "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
- "dev": true,
- "requires": {
- "p-finally": "^1.0.0"
- }
- },
"p-try": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz",
@@ -29300,7 +26191,8 @@
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
},
"pinkie": {
"version": "2.0.4",
@@ -29544,8 +26436,7 @@
"popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
- "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
- "dev": true
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
},
"portfinder": {
"version": "1.0.20",
@@ -30067,21 +26958,6 @@
"postcss": "^7.0.0",
"postcss-load-config": "^2.0.0",
"schema-utils": "^1.0.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
}
},
"postcss-logical": {
@@ -30763,10 +27639,6 @@
"supports-color": "^6.1.0"
}
},
- "postcss-value-parser": {
- "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ=="
- },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -31471,12 +28343,6 @@
"xtend": "^4.0.0"
}
},
- "proto-list": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
- "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
- "dev": true
- },
"proxy-addr": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
@@ -32124,6 +28990,45 @@
"integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==",
"dev": true
},
+ "react-floater": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/react-floater/-/react-floater-0.7.2.tgz",
+ "integrity": "sha512-YKixUNXdySMqo4gh6ZGVLI/h7cI59MFQKOG38jAdBJl7XVC///w+sa7dmz+o2xWe4oUSey3z2vmg+AtX7A7Kug==",
+ "requires": {
+ "deepmerge": "^4.2.2",
+ "exenv": "^1.2.2",
+ "is-lite": "^0.6.0",
+ "popper.js": "^1.16.0",
+ "react-proptype-conditional-require": "^1.0.4",
+ "tree-changes": "^0.5.1"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ },
+ "is-lite": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/is-lite/-/is-lite-0.6.0.tgz",
+ "integrity": "sha512-kJ16DuwOhtZg7RimZOf+zK86XOlPeNGGy20MhAfjN/zozuetECxOEtUDUAtzC5n21Yd2lVx6LqZvO1Zvd5DYhw=="
+ },
+ "nested-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-1.0.1.tgz",
+ "integrity": "sha512-BnBBoo/8bBNRdAnJc7+m79oWk7dXwW1+vCesaEQhfDGVwXGLMvmI4NwYgLTW94R/x+R2s/yr2g/hB/4w/YSAvA=="
+ },
+ "tree-changes": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.5.1.tgz",
+ "integrity": "sha512-O873xzV2xRZ6N059Mn06QzmGKEE21LlvIPbsk2G+GS9ZX5OCur6PIwuuh0rWpAPvLWQZPj0XObyG27zZyLHUzw==",
+ "requires": {
+ "deep-diff": "^1.0.2",
+ "nested-property": "1.0.1"
+ }
+ }
+ }
+ },
"react-focus-lock": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.4.0.tgz",
@@ -32138,6 +29043,14 @@
"use-sidecar": "^1.0.1"
}
},
+ "react-google-charts": {
+ "version": "3.0.15",
+ "resolved": "https://registry.npmjs.org/react-google-charts/-/react-google-charts-3.0.15.tgz",
+ "integrity": "sha512-78s5xOQOJvL+jIewrWQZEHtlVk+5Yh4zZy+ODA1on1o1FaRjKWXxoo4n4JQl1XuqkF/A9NWque3KqM6pMggjzQ==",
+ "requires": {
+ "react-load-script": "^0.0.6"
+ }
+ },
"react-helmet-async": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.0.6.tgz",
@@ -32165,12 +29078,46 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.4.tgz",
"integrity": "sha512-PVadd+WaUDOAciICm/J1waJaSvgq+4rHE/K70j0PFqKhkTBsPv/82UGQJNXAngz1fOQLLxI6z1sEDmJDQhCTAA=="
},
+ "react-joyride": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.3.0.tgz",
+ "integrity": "sha512-aY7+dgmBKbgGoMjN828qXnMAqeA6QvwvSWxj/fyvxIIIx0iu3wNVT/A5NZ0wHxiVDav+Df9YZuL412Q6C0l7gw==",
+ "requires": {
+ "deep-diff": "^1.0.2",
+ "deepmerge": "^4.2.2",
+ "exenv": "^1.2.2",
+ "is-lite": "^0.8.0",
+ "nested-property": "^4.0.0",
+ "react-floater": "^0.7.2",
+ "react-is": "^16.13.1",
+ "scroll": "^3.0.1",
+ "scrollparent": "^2.0.1",
+ "tree-changes": "^0.6.1"
+ },
+ "dependencies": {
+ "deepmerge": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ }
+ }
+ },
"react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
"dev": true
},
+ "react-load-script": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/react-load-script/-/react-load-script-0.0.6.tgz",
+ "integrity": "sha512-aRGxDGP9VoLxcsaYvKWIW+LRrMOzz2eEcubTS4NvQPPugjk2VvMhow0wWTkSl7RxookomD1MwcP4l5UStg5ShQ=="
+ },
"react-moment-proptypes": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/react-moment-proptypes/-/react-moment-proptypes-1.7.0.tgz",
@@ -32244,6 +29191,11 @@
"prop-types": "^15.5.8"
}
},
+ "react-proptype-conditional-require": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/react-proptype-conditional-require/-/react-proptype-conditional-require-1.0.4.tgz",
+ "integrity": "sha1-acLVdB5t9eCPIw82u8KUTuEiJVU="
+ },
"react-resize-aware": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/react-resize-aware/-/react-resize-aware-3.0.1.tgz",
@@ -32748,9 +29700,9 @@
}
},
"regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true
},
"regexpu-core": {
@@ -32971,27 +29923,6 @@
"uuid": "^3.3.2"
},
"dependencies": {
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
- },
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
@@ -33156,15 +30087,6 @@
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dev": true,
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@@ -33298,9 +30220,9 @@
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
},
"rxjs": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
- "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
+ "version": "6.6.6",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz",
+ "integrity": "sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
@@ -33603,6 +30525,16 @@
"resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz",
"integrity": "sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ=="
},
+ "scroll": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scroll/-/scroll-3.0.1.tgz",
+ "integrity": "sha512-pz7y517OVls1maEzlirKO5nPYle9AXsFzTMNJrRGmT951mzpIBy7sNHOg5o/0MQd/NqliCiWnAi0kZneMPFLcg=="
+ },
+ "scrollparent": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/scrollparent/-/scrollparent-2.0.1.tgz",
+ "integrity": "sha1-cV1bnMV3YPsivczDvvtb/gaxoxc="
+ },
"scss-tokenizer": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
@@ -33627,26 +30559,6 @@
"resolved": "https://registry.npmjs.org/seamless-scroll-polyfill/-/seamless-scroll-polyfill-1.0.10.tgz",
"integrity": "sha512-T6kBngvA2600YSmIEAQUpjvM77dDxNOXuTqAaCE8Y2bjb5pITHVdxvds+e7dIL4gdA3QczQrmgpCWTRMGpodqQ=="
},
- "seek-bzip": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz",
- "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=",
- "dev": true,
- "requires": {
- "commander": "~2.8.1"
- },
- "dependencies": {
- "commander": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "dev": true,
- "requires": {
- "graceful-readlink": ">= 1.0.0"
- }
- }
- }
- },
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
@@ -33669,15 +30581,6 @@
"integrity": "sha512-3dPcmFqxblWB/cppQ2qXWqlp9b6GLgAS032+Ec5E0waDVHTkwYIL+7BFI9UqEe0tkoHle2f3pBgvT/Xl95+Dig==",
"dev": true
},
- "semver-truncate": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
- "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
- "dev": true,
- "requires": {
- "semver": "^5.3.0"
- }
- },
"send": {
"version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
@@ -33724,12 +30627,6 @@
}
}
},
- "serialize-javascript": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
- "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
- "dev": true
- },
"serve-favicon": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
@@ -34168,15 +31065,6 @@
"is-plain-obj": "^1.0.0"
}
},
- "sort-keys-length": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
- "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
- "dev": true,
- "requires": {
- "sort-keys": "^1.0.0"
- }
- },
"source-list-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
@@ -34321,53 +31209,6 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
- "squeak": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz",
- "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=",
- "dev": true,
- "requires": {
- "chalk": "^1.0.0",
- "console-stream": "^0.1.1",
- "lpad-align": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- },
"sshpk": {
"version": "1.14.2",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
@@ -34384,16 +31225,6 @@
"tweetnacl": "~0.14.0"
}
},
- "ssri": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz",
- "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "minipass": "^3.1.1"
- }
- },
"stable": {
"version": "0.1.8",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
@@ -35203,15 +32034,6 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
- "strip-dirs": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz",
- "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==",
- "dev": true,
- "requires": {
- "is-natural-number": "^4.0.1"
- }
- },
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -35235,15 +32057,6 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
- "strip-outer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
- "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
"style-loader": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz",
@@ -36144,16 +32957,6 @@
"fill-range": "^7.0.1"
}
},
- "browserslist": {
- "version": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.2.tgz",
- "integrity": "sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw==",
- "requires": {
- "caniuse-lite": "^1.0.30001088",
- "electron-to-chromium": "^1.3.483",
- "escalade": "^3.0.1",
- "node-releases": "^1.1.58"
- }
- },
"camelcase": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
@@ -36232,11 +33035,6 @@
"is-obj": "^2.0.0"
}
},
- "electron-to-chromium": {
- "version": "1.3.487",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.487.tgz",
- "integrity": "sha512-m4QS3IDShxauFfYFpnEzRCcUI55oKB9acEnHCuY/hSCZMz9Pz2KJj+UBnGHxRxS/mS1aphqOQ5wI6gc3yDZ7ew=="
- },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -36422,11 +33220,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node-releases": {
- "version": "1.1.58",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz",
- "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg=="
- },
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -36482,10 +33275,6 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
- "source-map": {
- "version": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
"string-width": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -36570,13 +33359,6 @@
"v8-compile-cache": "^2.1.0"
}
},
- "supports-color": {
- "version": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -36950,11 +33732,6 @@
"uri-js": "^4.2.2"
}
},
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
- },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
@@ -37051,21 +33828,6 @@
}
}
},
- "tar-stream": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz",
- "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==",
- "dev": true,
- "requires": {
- "bl": "^1.0.0",
- "buffer-alloc": "^1.1.0",
- "end-of-stream": "^1.0.0",
- "fs-constants": "^1.0.0",
- "readable-stream": "^2.3.0",
- "to-buffer": "^1.1.0",
- "xtend": "^4.0.0"
- }
- },
"telejson": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/telejson/-/telejson-3.3.0.tgz",
@@ -37155,30 +33917,6 @@
}
}
},
- "temp-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
- "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
- "dev": true
- },
- "tempfile": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
- "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
- "dev": true,
- "requires": {
- "temp-dir": "^1.0.0",
- "uuid": "^3.0.1"
- },
- "dependencies": {
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- }
- }
- },
"term-size": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz",
@@ -37589,12 +34327,6 @@
"integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
"dev": true
},
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
- "dev": true
- },
"timers-browserify": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
@@ -37666,12 +34398,6 @@
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
"integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
},
- "to-buffer": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
- "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
- "dev": true
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -37756,6 +34482,23 @@
"punycode": "^2.1.0"
}
},
+ "tree-changes": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/tree-changes/-/tree-changes-0.6.1.tgz",
+ "integrity": "sha512-J+eb7K2hHq8BexW71U5jPHr8RGtd7270plLBjz2a5ubsMpEhInH14k2kafHoCL+bncYS3ixGidToVwpzwC8kug==",
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "is-lite": "^0.8.0",
+ "react": "^16.8.0 || ^17.0.0"
+ },
+ "dependencies": {
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ }
+ }
+ },
"tree-kill": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
@@ -37771,15 +34514,6 @@
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
},
- "trim-repeated": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
- "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "^1.0.2"
- }
- },
"trim-trailing-lines": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz",
@@ -38354,15 +35088,6 @@
"requires-port": "^1.0.0"
}
},
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "dev": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
"url-polyfill": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.9.tgz",
@@ -38377,12 +35102,6 @@
"ip-regex": "^1.0.1"
}
},
- "url-to-options": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
- "dev": true
- },
"use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -38395,9 +35114,9 @@
"dev": true
},
"use-memo-one": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.1.tgz",
- "integrity": "sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ=="
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz",
+ "integrity": "sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ=="
},
"use-sidecar": {
"version": "1.0.2",
@@ -38891,15 +35610,6 @@
}
}
},
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "dev": true,
- "requires": {
- "defaults": "^1.0.3"
- }
- },
"web-animations-js": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/web-animations-js/-/web-animations-js-2.3.2.tgz",
@@ -38961,38 +35671,16 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz",
"integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw=="
},
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
"big.js": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
},
- "binary-extensions": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
- "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
- },
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
},
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
"cacache": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
@@ -39015,20 +35703,6 @@
"y18n": "^4.0.0"
}
},
- "chokidar": {
- "version": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
- "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
- "requires": {
- "anymatch": "~3.1.1",
- "braces": "~3.0.2",
- "fsevents": "~2.1.2",
- "glob-parent": "~5.1.0",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.4.0"
- }
- },
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
@@ -39048,20 +35722,6 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
- "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==",
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "fsevents": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
- "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
- "optional": true
- },
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -39075,40 +35735,11 @@
"path-is-absolute": "^1.0.0"
}
},
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
},
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
- },
"json5": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
@@ -39170,27 +35801,6 @@
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
"integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
},
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "process": {
- "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
- "punycode": {
- "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
- },
- "readdirp": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
- "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
"rimraf": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
@@ -39241,21 +35851,6 @@
"worker-farm": "^1.7.0"
}
},
- "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==",
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "util": {
- "version": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "requires": {
- "inherits": "2.0.3"
- }
- },
"webpack-sources": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
@@ -39301,10 +35896,6 @@
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "pify": {
- "version": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
}
}
},
diff --git a/package.json b/package.json
index 57ca93582ae..769da7ce964 100644
--- a/package.json
+++ b/package.json
@@ -12,9 +12,6 @@
"build:test": "npm run build:production -- --include-tests",
"prebuild:storybook": "npm run remove-dist",
"build:storybook": "build-storybook -c .storybook -o dist --quiet --loglevel warn",
- "postbuild:storybook": "npm run imagemin",
- "preimagemin": "rimraf dist/assets/images",
- "imagemin": "imagemin assets/images/* --out-dir=dist/assets/images",
"remove-dist": "rimraf ./dist",
"prezip": "composer run autoload-includes",
"zip": "./bin/release",
@@ -37,7 +34,6 @@
"test:e2e:interactive": "npm run test:e2e -- --puppeteer-interactive",
"test:e2e:watch": "npm run test:e2e -- --watch",
"test:e2e:watch:interactive": "npm run test:e2e -- --watch --puppeteer-interactive",
- "prestorybook": "npm run imagemin",
"storybook": "start-storybook -s ./dist -p 9001 -c .storybook --no-version-updates",
"storybook:vrt": "npm run storybook -- --ci --quiet",
"backstopjs": "backstop test --config=tests/backstop/config.js --docker",
@@ -95,6 +91,7 @@
"@material/list": "^2.3.0",
"@material/menu": "^2.3.0",
"@material/radio": "^2.3.0",
+ "@material/react-card": "^0.15.0",
"@material/react-select": "^0.15.0",
"@material/react-tab-bar": "^0.15.0",
"@material/react-text-field": "^0.15.0",
@@ -128,6 +125,7 @@
"intl": "^1.2.5",
"intl-locales-supported": "^1.8.12",
"invariant": "^2.2.4",
+ "just-detect-adblock": "^1.1.0",
"lodash": "^4.17.19",
"md5": "^2.2.1",
"memize": "^1.1.0",
@@ -139,9 +137,12 @@
"punycode": "^2.1.1",
"react": "^16.12.0",
"react-dom": "^16.12.0",
+ "react-joyride": "^2.3.0",
+ "react-google-charts": "^3.0.15",
"react-use": "^15.3.4",
"svgxuse": "^1.2.6",
"url-polyfill": "^1.1.9",
+ "use-memo-one": "^1.1.2",
"uuid": "^8.2.0",
"whatwg-fetch": "^3.2.0"
},
@@ -169,25 +170,21 @@
"create-file-webpack": "^1.0.2",
"css-loader": "^3.6.0",
"cssnano": "^4.1.10",
- "eslint": "^6.8.0",
- "eslint-loader": "^4.0.2",
+ "eslint": "^7.20.0",
"eslint-plugin-filenames": "^1.3.2",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-jest": "^22.21.0",
"eslint-plugin-jsdoc": "^30.5.1",
"eslint-plugin-sitekit": "file:packages/eslint-plugin",
"eslint-scope": "^5.1.0",
+ "eslint-webpack-plugin": "^2.5.1",
+ "faker": "^5.4.0",
"fetch-mock": "^9.10.3",
"fetch-mock-jest": "^1.3.0",
"file-loader": "^6.1.1",
"fs-extra": "^9.0.1",
- "fsevents": "^2.2.1",
"git-repo-info": "^2.1.1",
"husky": "^3.1.0",
- "imagemin-cli": "^6.0.0",
- "imagemin-jpegtran": "^7.0.0",
- "imagemin-optipng": "^8.0.0",
- "imagemin-webpack": "^5.1.1",
"jest-localstorage-mock": "^2.4.2",
"jsdom": "^16.3.0",
"lint-staged": "^10.2.11",
@@ -197,6 +194,7 @@
"postcss-preset-env": "^6.7.0",
"puppeteer": "^1.20.0",
"rimraf": "^3.0.2",
+ "rxjs": "^6.6.6",
"sanitize-filename": "^1.6.3",
"sass": "^1.30.0",
"sass-loader": "^9.0.2",
diff --git a/packages/eslint-plugin/configs/main.js b/packages/eslint-plugin/configs/main.js
index cf65f782187..5222c97edeb 100644
--- a/packages/eslint-plugin/configs/main.js
+++ b/packages/eslint-plugin/configs/main.js
@@ -18,7 +18,7 @@
module.exports = {
rules: {
- 'sitekit/camelcase-acronyms': [ 'error' ],
+ 'sitekit/acronym-case': [ 'error' ],
'sitekit/jsdoc-third-person': [ 'error' ],
'sitekit/jsdoc-fullstop': [ 'error' ],
'sitekit/jsdoc-newlines': [ 'error' ],
diff --git a/packages/eslint-plugin/rules/camelcase-acronyms.js b/packages/eslint-plugin/rules/acronym-case.js
similarity index 85%
rename from packages/eslint-plugin/rules/camelcase-acronyms.js
rename to packages/eslint-plugin/rules/acronym-case.js
index f98cca1cf56..38bf8d159f6 100644
--- a/packages/eslint-plugin/rules/camelcase-acronyms.js
+++ b/packages/eslint-plugin/rules/acronym-case.js
@@ -19,7 +19,7 @@
/**
* Internal dependencies
*/
-const { isImported } = require( '../utils' );
+const { isImported, isFunction } = require( '../utils' );
module.exports = {
create( context ) {
@@ -40,6 +40,7 @@ module.exports = {
const acronyms = [
'AMP',
'CTA',
+ 'GA',
'GTM',
'HTML',
'ID',
@@ -105,10 +106,26 @@ module.exports = {
// case-insensitive match.
if ( acronymMatches ) {
const acronymMatch = acronymMatches[ 0 ];
- // The acronym was found in the variable with the correct capitalization, so
- // this variable is good.
+
+ // The acronym was found in the variable with the correct capitalization
if ( acronymMatch === acronym ) {
- return;
+ // Catch instances of URL() and JSON() that weren't identified as
+ // globals above
+ if ( acronymMatch.length === name.length ) {
+ return;
+ }
+ // If the acronym is not at the start that's fine, e.g. fooBarID
+ if ( ! name.startsWith( acronym ) ) {
+ return;
+ }
+ // or if the acronym IS at the start but it is a function, see #2195
+ if ( isFunction( node ) ) {
+ return;
+ }
+ // Constants in all-caps are fine
+ if ( node.type === 'Identifier' && name === name.toUpperCase() ) {
+ return;
+ }
}
// If the acronym was found entirely lowercased, skip this check.
@@ -125,7 +142,7 @@ module.exports = {
// If the name of this variable is the same length as the acronym,
// it should be lowercase or uppercase.
- if ( name.length === acronym.length && ( acronymMatch === acronym.toLowerCase() || acronymMatch !== acronym ) ) {
+ if ( name.length === acronym.length && ( acronymMatch === acronym.toLowerCase() || acronymMatch === acronym.toUpperCase() ) ) {
return;
}
diff --git a/packages/eslint-plugin/rules/camelcase-acronyms.test.js b/packages/eslint-plugin/rules/acronym-case.test.js
similarity index 57%
rename from packages/eslint-plugin/rules/camelcase-acronyms.test.js
rename to packages/eslint-plugin/rules/acronym-case.test.js
index b6dd293dc75..da7b83ed6b7 100644
--- a/packages/eslint-plugin/rules/camelcase-acronyms.test.js
+++ b/packages/eslint-plugin/rules/acronym-case.test.js
@@ -24,7 +24,7 @@ import { RuleTester } from 'eslint';
/**
* Internal dependencies
*/
-import rule from './camelcase-acronyms';
+import rule from './acronym-case';
const ruleTester = new RuleTester( {
parserOptions: {
@@ -33,7 +33,7 @@ const ruleTester = new RuleTester( {
},
} );
-ruleTester.run( 'camelcase-acronyms', rule, {
+ruleTester.run( 'acronym-case', rule, {
valid: [
{
code: `
@@ -53,6 +53,45 @@ export function FancyComponent() {
}
`,
},
+ {
+ code: `
+const htmlNode = '
';
+ `,
+ },
+ {
+ code: `
+const HTMLButtonComponent = () => {
+ return '
';
+};
+function urlParser(url) {
+ return new URL(url);
+}
+function JSONParser(json) {
+ return JSON.parse(json);
+}
+const getElementByID = ( id ) => {
+ return document.getElementById(id);
+};
+export default function AMPExperimentJSONField() {}
+export { default as AMPExperimentJSONField } from './AMPExperimentJSONField';
+export const HTML = () => {};
+ `,
+ },
+ {
+ code: `const AMP_PROJECT_TEST_URL = 'foo';`,
+ },
+ {
+ code: `const amp = '';`,
+ },
+ {
+ code: `const json = false;`,
+ },
+ {
+ code: `const html = () => {};`,
+ },
+ {
+ code: `const HTML = () => {};`,
+ },
],
invalid: [
{
@@ -99,5 +138,41 @@ export function FancyComponent() {
},
],
},
+ {
+ code: `
+const HTMLNode = '
';
+`,
+ errors: [
+ {
+ // Acronyms at the beginning of an identifer should be entirely _lowercased_ instead
+ // of uppercased.
+ message: '`HTMLNode` violates naming rules.',
+ },
+ ],
+ },
+ {
+ code: `const Amp = '';`,
+ errors: [
+ {
+ message: '`Amp` violates naming rules.',
+ },
+ ],
+ },
+ {
+ code: `const Json = false;`,
+ errors: [
+ {
+ message: '`Json` violates naming rules.',
+ },
+ ],
+ },
+ {
+ code: `const Html = () => {};`,
+ errors: [
+ {
+ message: '`Html` violates naming rules.',
+ },
+ ],
+ },
],
} );
diff --git a/packages/eslint-plugin/rules/index.js b/packages/eslint-plugin/rules/index.js
index 7541b87e952..253f721458d 100644
--- a/packages/eslint-plugin/rules/index.js
+++ b/packages/eslint-plugin/rules/index.js
@@ -17,7 +17,7 @@
*/
module.exports = {
- 'camelcase-acronyms': require( './camelcase-acronyms' ),
+ 'acronym-case': require( './acronym-case' ),
'jsdoc-capitalization': require( './jsdoc-capitalization' ),
'jsdoc-fullstop': require( './jsdoc-fullstop' ),
'jsdoc-newlines': require( './jsdoc-newlines' ),
diff --git a/packages/eslint-plugin/utils.js b/packages/eslint-plugin/utils.js
index 0838c43dbb9..8250e9374fd 100644
--- a/packages/eslint-plugin/utils.js
+++ b/packages/eslint-plugin/utils.js
@@ -70,6 +70,7 @@ function isImported( node ) {
'ImportSpecifier',
'ExportDefaultDeclaration',
'ExportDeclaration',
+ 'ExportSpecifier',
'ImportDeclaration',
];
@@ -100,11 +101,22 @@ function isImported( node ) {
return false;
}
+const isTypeFunction = ( type ) => {
+ const functionTypes = [ 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression' ];
+ return functionTypes.includes( type );
+};
+
function isFunction( node ) {
if ( ! node ) {
return false;
}
+ if ( node?.type === 'Identifier' ) {
+ if ( isTypeFunction( node?.parent?.type ) || isTypeFunction( node?.parent?.init?.type ) ) {
+ return true;
+ }
+ }
+
const isFunctionDeclaration = node.type && (
[ 'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression' ].includes( node.type )
);
diff --git a/phpunit.multisite.xml b/phpunit.multisite.xml
new file mode 100644
index 00000000000..6ec1551c33a
--- /dev/null
+++ b/phpunit.multisite.xml
@@ -0,0 +1,24 @@
+
+
+
+ ./tests/phpunit/integration
+
+
+
+
+ ms-excluded
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index 7a800ab7cef..b313ed3a9a4 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -8,6 +8,11 @@
./tests/phpunit/integration
+
+
+ ms-required
+
+
diff --git a/readme.txt b/readme.txt
index e8546de19c7..2e7a3b89f2a 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,10 +1,10 @@
-=== Site Kit by Google ===
+=== Site Kit by Google - Analytics, Search Console, AdSense, Speed ===
Contributors: google
Requires at least: 4.7
-Tested up to: 5.6
+Tested up to: 5.7
Requires PHP: 5.6
-Stable tag: 1.25.0
+Stable tag: 1.28.0
License: Apache License 2.0
License URI: https://www.apache.org/licenses/LICENSE-2.0
Tags: google, search-console, analytics, adsense, pagespeed-insights, optimize, tag-manager, site-kit
@@ -88,6 +88,99 @@ If you have some ideas to improve the plugin or to solve a bug, feel free to rai
== Changelog ==
+= 1.28.0 =
+
+**Added**
+
+* Implement React components for rendering tooltip tours. See [#2626](https://github.com/google/site-kit-wp/issues/2626).
+
+**Enhanced**
+
+* Automatically focus the "Other" text input upon selecting the "Other" option in a list of radio buttons or checkboxes. See [#2897](https://github.com/google/site-kit-wp/issues/2897).
+* Update copy to clarify multiple choice behavior in user input flow. See [#2857](https://github.com/google/site-kit-wp/issues/2857).
+* Update links on new version of AdSense dashboard summary widget to deep link to the respective area in the AdSense frontend. See [#2774](https://github.com/google/site-kit-wp/issues/2774).
+* Include site URL in AdSense report deep links to point to the appropriate report. See [#2773](https://github.com/google/site-kit-wp/issues/2773).
+* Add support for PHP 8 and ensure its maintenance via CI. Props TorbenLundsgaard. See [#2724](https://github.com/google/site-kit-wp/issues/2724).
+* The `googlesitekit_authorize_user` and `googlesitekit_reauthorize_user` actions are now also fired when not using the authentication service flow. See [#2693](https://github.com/google/site-kit-wp/issues/2693).
+* Implement infrastructure for rendering widgets in Site Kit module screens. See [#2653](https://github.com/google/site-kit-wp/issues/2653).
+* Use reliable and React-friendly approach for detecting whether a widget is inactive and should not be rendered. See [#2612](https://github.com/google/site-kit-wp/issues/2612).
+* Enhance localization of duration formatting. See [#2588](https://github.com/google/site-kit-wp/issues/2588).
+* Filter all Analytics API requests to only include results for the current domain. See [#2554](https://github.com/google/site-kit-wp/issues/2554).
+* Rely exclusively on SVGs for graphics and remove other image support. See [#2468](https://github.com/google/site-kit-wp/issues/2468).
+
+**Fixed**
+
+* Improve UX around entering search terms in the user input flow. See [#2842](https://github.com/google/site-kit-wp/issues/2842).
+* Fix various visual glitches in the user input flow summary view and trim free text content entered for any "Other" choice. See [#2837](https://github.com/google/site-kit-wp/issues/2837).
+* Change to preview / next button behaviour in User Input flow. See [#2829](https://github.com/google/site-kit-wp/issues/2829).
+* Fix AdSense bug where `Ad Client not found` error would be displayed in certain cases where an account is still pending. See [#2812](https://github.com/google/site-kit-wp/issues/2812).
+* Fix bug where AdGuard and uBlock ad blockers were no longer being recognized by Site Kit by implementing a more holistic solution for ad blocker detection relying on the `just-detect-adblock` library. See [#2794](https://github.com/google/site-kit-wp/issues/2794).
+* Update link on AdSense module page to point to Analytics which is more accurate due to the source of the data. See [#2772](https://github.com/google/site-kit-wp/issues/2772).
+* Fix Search Console x-axis labels on 90 day charts. See [#2747](https://github.com/google/site-kit-wp/issues/2747).
+* Fix text issue with All Traffic pie chart. See [#2660](https://github.com/google/site-kit-wp/issues/2660).
+* Fix problem where Analytics snippet placement would not be re-instated after disconnecting Tag Manager module when it was previously taking care of the Analytics tag. See [#2579](https://github.com/google/site-kit-wp/issues/2579).
+* Fix bug where tracking opt-in was not working for multisite administrators when not being a member of the site. See [#2103](https://github.com/google/site-kit-wp/issues/2103).
+
+= 1.27.0 =
+
+**Added**
+
+* Add support for AdSense auto ads to Web Stories, allowing to choose an AdSense ad unit to use which will then result in an `amp-story-auto-ads` element being injected. See [#2602](https://github.com/google/site-kit-wp/issues/2602).
+
+**Enhanced**
+
+* Improve wording for the confirmation notification after submitting user input settings. See [#2790](https://github.com/google/site-kit-wp/issues/2790).
+* Allow resetting persistent Site Kit options via WP-CLI. See [#2748](https://github.com/google/site-kit-wp/issues/2748).
+* Display All Traffic widget dimension tabs as a dropdown on narrow viewports. See [#2743](https://github.com/google/site-kit-wp/issues/2743).
+* Include current dates in AdSense deep links so that the service frontend shows the same time period as Site Kit. See [#2689](https://github.com/google/site-kit-wp/issues/2689).
+* Update Google API client library and remove custom configuration to retry failed API requests as it is now covered in the library itself. See [#2688](https://github.com/google/site-kit-wp/issues/2688).
+* Introduce `WidgetReportError` component, which should be used by widgets to display an overall error state. See [#2670](https://github.com/google/site-kit-wp/issues/2670).
+* Implement REST datapoints and JS datastore infrastructure for getting and dismissing tooltip tours. See [#2648](https://github.com/google/site-kit-wp/issues/2648).
+* Prepare Widget API-based version of the dashboard for launch, rendering the entire page content including header and footer. See [#2646](https://github.com/google/site-kit-wp/issues/2646).
+* Add ability to remotely control enabled feature flags. See [#2533](https://github.com/google/site-kit-wp/issues/2533).
+* Introduce `core/ui` datastore for centrally storing UI state in JS. See [#2456](https://github.com/google/site-kit-wp/issues/2456).
+* Include current dates in Analytics deep links so that the service frontend shows the same time period as Site Kit. See [#2287](https://github.com/google/site-kit-wp/issues/2287).
+* Remove legacy version of the WP Dashboard widget and replace it with Site Kit widget-based refactored version. See [#2240](https://github.com/google/site-kit-wp/issues/2240).
+
+**Fixed**
+
+* Fix bug where the old All Traffic widget was still displaying in the dashboard for a single URL. See [#2856](https://github.com/google/site-kit-wp/issues/2856).
+* Fix PHP 8 notice for deprecated `uasort()` usage. Props oguilleux. See [#2797](https://github.com/google/site-kit-wp/issues/2797).
+* Reset link hidden while compatibility checks are in progress. See [#2756](https://github.com/google/site-kit-wp/issues/2756).
+* Show All Traffic pie chart tooltips persistently when a slice is selected to allow interaction with the tooltip, which would not be possible when hovering. See [#2737](https://github.com/google/site-kit-wp/issues/2737).
+* Fix AdSense dashboard summary widget to include data for the current date range in its sparklines rather than only data from the 1st of the current month. See [#2734](https://github.com/google/site-kit-wp/issues/2734).
+* Fix visual bug where in the AdSense flow the toggle element could be overlapped by a checkmark icon. See [#2722](https://github.com/google/site-kit-wp/issues/2722).
+* Fix bug with Search Console module page graph where overlapping legends would be displayed when selecting more than 2 metrics. See [#2721](https://github.com/google/site-kit-wp/issues/2721).
+* Fix various bugs around the All Traffic pie chart (e.g. incorrect slices being selected when changing date range, correct behavior of not allowing "Others" to be selected) by introducing a new React-based charts component. See [#2714](https://github.com/google/site-kit-wp/issues/2714).
+* Fix bug where in some occasions an error would be displayed when updating settings with the same values that were already stored before. See [#2513](https://github.com/google/site-kit-wp/issues/2513).
+* Fix formatting of y-axis values for Bounce Rate and Session Duration on Analytics overview chart. See [#2095](https://github.com/google/site-kit-wp/issues/2095).
+
+= 1.26.0 =
+
+**Enhanced**
+
+* Ensure that any "Others" slice in the All Traffic widget is not indicated as selectable and cannot be active. See [#2716](https://github.com/google/site-kit-wp/issues/2716).
+* When viewing a specific segment of users in the All Traffic widget, make the "All Users" breadcrumb a link to go back to the overall users view. See [#2715](https://github.com/google/site-kit-wp/issues/2715).
+* Enhance All Traffic widget pie chart legend by using a custom implementation so that the labels are never cut off and include a visual hover and active state. See [#2700](https://github.com/google/site-kit-wp/issues/2700).
+* Show more than just two dates on the All Traffic widget's line chart. See [#2699](https://github.com/google/site-kit-wp/issues/2699).
+* Include available and enabled Site Kit features in Site Health information. See [#2662](https://github.com/google/site-kit-wp/issues/2662).
+* Rename the `header` and `footer` props of the `Widget` component to `Header` and `Footer` to indicate that they require a React component instead of an element. See [#2652](https://github.com/google/site-kit-wp/issues/2652).
+* Simplify usage of the `Widget` component so that widget components can use a scoped version of it via props rather than manually importing it and re-specifying the widget slug. See [#2613](https://github.com/google/site-kit-wp/issues/2613).
+* Migrate top content table in WP dashboard widget to functional hook-based component using the datastore. See [#2610](https://github.com/google/site-kit-wp/issues/2610).
+* Decouple JS store, widget, and module registration from imports, introducing dedicated registration functions. See [#2587](https://github.com/google/site-kit-wp/issues/2587).
+* Remove server-side API requests to determine whether a post has Search Console or Analytics data as it could significantly slow down WP admin response time. Props archon810. See [#2528](https://github.com/google/site-kit-wp/issues/2528).
+* Always display the Site Kit admin bar menu even when there is no data for a more consistent experience, informing about the lack of data as applicable. See [#2508](https://github.com/google/site-kit-wp/issues/2508).
+* Improve UX when clicking the Reset dialog button, keeping the dialog open in a loading state while completing the process. See [#2347](https://github.com/google/site-kit-wp/issues/2347).
+* Include current dates in Search Console deep links so that the service frontend shows the same time period as Site Kit. See [#2286](https://github.com/google/site-kit-wp/issues/2286).
+* Enhance admin bar implementation to be powered by the `googlesitekit.data` registry and its stores. See [#2241](https://github.com/google/site-kit-wp/issues/2241).
+
+**Fixed**
+
+* Ensure x-axis labels of the All Traffic line chart are correctly aligned with the pie chart legend. See [#2738](https://github.com/google/site-kit-wp/issues/2738).
+* Avoid layout shift when enabling the Analytics module via the Site Kit dashboard CTA. See [#2719](https://github.com/google/site-kit-wp/issues/2719).
+* Avoid content shifts in All Traffic widget due to incorrect loading UI layout. See [#2710](https://github.com/google/site-kit-wp/issues/2710).
+* Only require going through the user input flow after setup if it has not been completed by the user before. See [#2603](https://github.com/google/site-kit-wp/issues/2603).
+
= 1.25.0 =
**Added**
diff --git a/stories/adminbar.stories.js b/stories/adminbar.stories.js
index af8aabd7218..c9e062aef92 100644
--- a/stories/adminbar.stories.js
+++ b/stories/adminbar.stories.js
@@ -21,57 +21,101 @@
*/
import { storiesOf } from '@storybook/react';
-/**
- * WordPress dependencies
- */
-import { addFilter, removeAllFilters } from '@wordpress/hooks';
-
/**
* Internal dependencies
*/
import { GoogleSitekitAdminbar } from '../assets/js/googlesitekit-adminbar';
import { googlesitekit as wpAdminBarData } from '../.storybook/data/blog---googlesitekit';
-import AnalyticsAdminbarWidget from '../assets/js/modules/analytics/components/adminbar/AnalyticsAdminbarWidget';
-import GoogleSitekitSearchConsoleAdminbarWidget from '../assets/js/modules/search-console/components/adminbar/GoogleSitekitSearchConsoleAdminbarWidget';
-import { createAddToFilter } from '../assets/js/util/helpers';
-import { CORE_SITE } from '../assets/js/googlesitekit/datastore/site/constants';
import { CORE_USER } from '../assets/js/googlesitekit/datastore/user/constants';
-import { WithTestRegistry } from '../tests/js/utils';
-import CollectModuleData from '../assets/js/components/data/collect-module-data';
+import { provideModules, provideSiteInfo, WithTestRegistry } from '../tests/js/utils';
+import { MODULES_SEARCH_CONSOLE } from '../assets/js/modules/search-console/datastore/constants';
+import { MODULES_ANALYTICS } from '../assets/js/modules/analytics/datastore/constants';
+import { adminbarSearchConsoleMockData, adminbarSearchConsoleOptions } from '../assets/js/modules/search-console/datastore/__fixtures__';
+import { getAnalyticsMockResponse } from '../assets/js/modules/analytics/util/data-mock';
storiesOf( 'Global', module )
.add( 'Admin Bar', () => {
global._googlesitekitLegacyData = wpAdminBarData;
- const setupRegistry = ( { dispatch } ) => {
- dispatch( CORE_SITE ).receiveSiteInfo( {
- usingProxy: true,
- referenceSiteURL: 'https://example.com',
- adminURL: 'https://example.com/wp-admin/',
- siteName: 'My Site Name',
+ const setupRegistry = ( registry ) => {
+ // Set some site information.
+ provideSiteInfo( registry, {
currentEntityURL: 'https://www.sitekitbygoogle.com/blog/',
currentEntityTitle: 'Blog test post for Google Site Kit',
- currentEntityType: 'blog',
- currentEntityID: 2,
} );
- dispatch( CORE_USER ).receiveGetAuthentication( {
- authenticated: true,
- requiredScopes: [],
- grantedScopes: [],
+
+ // Set up the search console and analytics modules stores but provide no data.
+ provideModules( registry, [
+ { slug: 'search-console', active: true, connected: true },
+ { slug: 'analytics', active: true, connected: true },
+ ] );
+
+ registry.dispatch( CORE_USER ).setReferenceDate( '2021-01-28' );
+
+ // Mock both Search Console widgets data
+ registry.dispatch( MODULES_SEARCH_CONSOLE ).receiveGetReport( adminbarSearchConsoleMockData, { options: adminbarSearchConsoleOptions } );
+
+ [
+ // Mock Total Users widget data
+ {
+ startDate: '2020-12-31',
+ endDate: '2021-01-27',
+ compareStartDate: '2020-12-03',
+ compareEndDate: '2020-12-30',
+ metrics: [
+ {
+ expression: 'ga:users',
+ alias: 'Total Users',
+ },
+ ],
+ url: 'https://www.sitekitbygoogle.com/blog/',
+ },
+
+ // Mock Sessions widget data
+ {
+ startDate: '2020-12-31',
+ endDate: '2021-01-27',
+ compareStartDate: '2020-12-03',
+ compareEndDate: '2020-12-30',
+ dimensions: 'ga:date',
+ limit: 10,
+ metrics: [
+ {
+ expression: 'ga:sessions',
+ alias: 'Sessions',
+ },
+ ],
+ url: 'https://www.sitekitbygoogle.com/blog/',
+ },
+ ].forEach( ( options ) => {
+ registry.dispatch( MODULES_ANALYTICS ).receiveGetReport( getAnalyticsMockResponse( options ), { options } );
} );
};
- const addGoogleSitekitSearchConsoleAdminbarWidget = createAddToFilter( );
- const addAnalyticsAdminbarWidget = createAddToFilter( );
-
- removeAllFilters( 'googlesitekit.AdminbarModules' );
- addFilter( 'googlesitekit.AdminbarModules',
- 'googlesitekit.Analytics',
- addAnalyticsAdminbarWidget, 11 );
+ return (
+
+ );
+ } )
+ .add( 'Admin Bar Zero Data', () => {
+ global._googlesitekitLegacyData = wpAdminBarData;
- addFilter( 'googlesitekit.AdminbarModules',
- 'googlesitekit.SearchConsole',
- addGoogleSitekitSearchConsoleAdminbarWidget );
+ const setupRegistry = ( registry ) => {
+ // Set the Story site information.
+ provideSiteInfo( registry, {
+ currentEntityURL: 'https://www.sitekitbygoogle.com/blog/',
+ currentEntityTitle: 'Blog test post for Google Site Kit',
+ } );
+ };
return (
@@ -80,7 +124,6 @@ storiesOf( 'Global', module )
@@ -88,3 +131,4 @@ storiesOf( 'Global', module )
);
} );
+
diff --git a/stories/complete-module-activation.stories.js b/stories/complete-module-activation.stories.js
index fe96625b34c..119669378e2 100644
--- a/stories/complete-module-activation.stories.js
+++ b/stories/complete-module-activation.stories.js
@@ -26,24 +26,22 @@ import { storiesOf } from '@storybook/react';
*/
import CompleteModuleActivationCTA from '../assets/js/components/CompleteModuleActivationCTA';
import {
- PERMISSION_MANAGE_OPTIONS,
- CORE_USER,
-} from '../assets/js/googlesitekit/datastore/user/constants';
-import { CORE_MODULES } from '../assets/js/googlesitekit/modules/datastore/constants';
-import { WithTestRegistry } from '../tests/js/utils';
+ WithTestRegistry,
+ provideSiteInfo,
+ provideUserAuthentication,
+ provideUserCapabilities,
+ provideModules,
+ provideModuleRegistrations,
+} from '../tests/js/utils';
storiesOf( 'Global', module )
.add( 'CompleteModuleActivationCTA', () => {
- const setupRegistry = ( { dispatch } ) => {
- dispatch( CORE_USER ).receiveCapabilities( {
- [ PERMISSION_MANAGE_OPTIONS ]: true,
- } );
- dispatch( CORE_MODULES ).receiveGetModules( [
- {
- slug: 'tagmanager',
- name: 'Tag Manager',
- },
- ] );
+ const setupRegistry = ( registry ) => {
+ provideSiteInfo( registry );
+ provideUserAuthentication( registry );
+ provideUserCapabilities( registry );
+ provideModules( registry );
+ provideModuleRegistrations( registry );
};
return (
diff --git a/stories/dashboard-details.stories.js b/stories/dashboard-details.stories.js
index c6df58ee365..9e1c4749f2b 100644
--- a/stories/dashboard-details.stories.js
+++ b/stories/dashboard-details.stories.js
@@ -35,8 +35,9 @@ import DashboardDetailsApp from '../assets/js/components/dashboard-details/Dashb
storiesOf( 'Dashboard Details', module )
.add( 'Existing Entity', () => {
- // Ensure widget API is disabled and don't display legacy widgets either.
- // TODO: Expand this story to include new widgets once legacy widgets are no longer used.
+ // Ensure legacy widgets are not displayed. The new widgets should not be displayed either,
+ // but that is already the case since the Widgets API is behind a feature flag.
+ // TODO: Delete this hook removal once legacy widgets are no longer used.
removeAllFilters( 'googlesitekit.DashboardDetailsModule' );
const setupRegistry = ( registry ) => {
@@ -49,13 +50,8 @@ storiesOf( 'Dashboard Details', module )
} );
};
- const enabledFeatures = [
- 'storeErrorNotifications', // Needed to enable datastore errors in the Header component.
- 'widgets.pageDashboard', // Needed to ensure the new widget area appears.
- ];
-
return (
-
);
},
- { options: { readySelector: '.googlesitekit-line-chart > div[style="position: relative;"]' } } )
+ { options: { readySelector: '.googlesitekit-chart-v2 > div[style="position: relative;"]' } } )
.add( 'Search Funnel', () => {
global._googlesitekitLegacyData = analyticsDashboardData;
@@ -239,6 +192,6 @@ storiesOf( 'Dashboard', module )
);
}, {
options: {
- readySelector: '.googlesitekit-line-chart > div[style="position: relative;"]',
+ readySelector: '.googlesitekit-chart-v2 > div[style="position: relative;"]',
},
} );
diff --git a/stories/data-table.stories.js b/stories/data-table.stories.js
index a15490657c3..7e0a768dff6 100644
--- a/stories/data-table.stories.js
+++ b/stories/data-table.stories.js
@@ -32,7 +32,6 @@ import { __, _x } from '@wordpress/i18n';
*/
import Layout from '../assets/js/components/layout/Layout';
import AnalyticsDashboardWidgetTopPagesTable from '../assets/js/modules/analytics/components/dashboard/AnalyticsDashboardWidgetTopPagesTable';
-import { dashboardPopularPagesArgs, dashboardPopularPagesData } from '../assets/js/modules/analytics/datastore/__fixtures__';
import { googlesitekit as analyticsDashboardData } from '../.storybook/data/wp-admin-admin.php-page=googlesitekit-module-analytics-googlesitekit';
import { MODULES_ANALYTICS } from '../assets/js/modules/analytics/datastore/constants';
import { WithTestRegistry } from '../tests/js/utils';
@@ -48,8 +47,6 @@ storiesOf( 'Global', module )
internalWebPropertyID: '123456789',
profileID: '123456789',
} );
-
- dispatch( MODULES_ANALYTICS ).receiveGetReport( dashboardPopularPagesData, { options: dashboardPopularPagesArgs } );
};
// Load the datacache with data.
@@ -59,6 +56,7 @@ storiesOf( 'Global', module )
'Dashboard'
);
}, 250 );
+
return (