diff --git a/examples/webpack-demo-vanilla-bundle/package.json b/examples/webpack-demo-vanilla-bundle/package.json index 1f20a628b..847f95a63 100644 --- a/examples/webpack-demo-vanilla-bundle/package.json +++ b/examples/webpack-demo-vanilla-bundle/package.json @@ -30,29 +30,29 @@ "@slickgrid-universal/vanilla-bundle": "^0.10.2", "bulma": "^0.9.2", "moment-mini": "^2.24.0", - "whatwg-fetch": "^3.5.0" + "whatwg-fetch": "^3.6.1" }, "devDependencies": { "@types/jquery": "^3.5.5", "@types/moment": "^2.13.0", - "@types/node": "^14.14.22", + "@types/node": "^14.14.31", "@types/webpack": "^4.41.26", "clean-webpack-plugin": "^3.0.0", "copy-webpack-plugin": "^7.0.0", - "css-loader": "^5.0.1", + "css-loader": "^5.0.2", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.1.0", - "html-loader": "^1.3.2", - "html-webpack-plugin": "next", - "mini-css-extract-plugin": "^1.3.5", + "html-loader": "^2.1.1", + "html-webpack-plugin": "5.2.0", + "mini-css-extract-plugin": "^1.3.8", "node-sass": "5.0.0", - "sass-loader": "^10.1.1", + "sass-loader": "^11.0.1", "style-loader": "^2.0.0", - "ts-loader": "^8.0.14", + "ts-loader": "^8.0.17", "ts-node": "^9.1.1", "url-loader": "^4.1.1", - "webpack": "^5.19.0", - "webpack-cli": "^4.4.0", + "webpack": "^5.24.2", + "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2" } } diff --git a/examples/webpack-demo-vanilla-bundle/webpack.config.js b/examples/webpack-demo-vanilla-bundle/webpack.config.js index 0dfb6cd70..0958c0532 100644 --- a/examples/webpack-demo-vanilla-bundle/webpack.config.js +++ b/examples/webpack-demo-vanilla-bundle/webpack.config.js @@ -60,7 +60,7 @@ module.exports = ({ production } = {}) => ({ { test: /\.(sass|scss)$/, use: ['css-loader', 'sass-loader'], issuer: /\.html?$/i }, { test: /\.(png|gif|jpg|cur)$/i, loader: 'url-loader', options: { limit: 8192 } }, { test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9=&.]+)?$/, loader: 'file-loader' }, - { test: /\.html$/i, loader: 'html-loader' }, + { test: /\.html$/i, loader: 'html-loader', options: { esModule: false } }, { test: /\.ts?$/, use: [{ loader: 'ts-loader', options: { transpileOnly: true } }] } ], }, diff --git a/package.json b/package.json index e8ddfb7d9..b4d672c1d 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ }, "devDependencies": { "@types/jest": "^26.0.20", - "@types/node": "^14.14.22", - "@typescript-eslint/eslint-plugin": "^4.14.2", - "@typescript-eslint/parser": "^4.14.2", - "cypress": "^6.4.0", - "eslint": "^7.19.0", + "@types/node": "^14.14.31", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "cypress": "^6.5.0", + "eslint": "^7.20.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-prefer-arrow": "^1.2.3", "http-server": "^0.12.3", @@ -67,11 +67,11 @@ "jsdom": "^16.4.0", "jsdom-global": "^3.0.2", "lerna": "^3.22.1", - "mocha": "^8.2.1", - "mochawesome": "^6.2.1", + "mocha": "^8.3.0", + "mochawesome": "^6.2.2", "npm-run-all": "^4.1.5", - "ts-jest": "^26.5.0", - "typescript": "^4.1.3" + "ts-jest": "^26.5.2", + "typescript": "^4.2.2" }, "engines": { "node": ">=14.15.0", diff --git a/packages/common/package.json b/packages/common/package.json index 904ef591f..c71dc4ede 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -78,11 +78,11 @@ "autoprefixer": "^10.2.4", "copyfiles": "^2.4.1", "cross-env": "^7.0.3", - "mini-css-extract-plugin": "^1.3.5", + "mini-css-extract-plugin": "^1.3.8", "node-sass": "5.0.0", "nodemon": "^2.0.7", "npm-run-all": "^4.1.5", - "postcss": "^8.2.4", + "postcss": "^8.2.6", "postcss-cli": "^8.3.1", "rimraf": "^3.0.2" }, diff --git a/packages/common/src/aggregators/avgAggregator.ts b/packages/common/src/aggregators/avgAggregator.ts index 6ffe3f48c..999aa0713 100644 --- a/packages/common/src/aggregators/avgAggregator.ts +++ b/packages/common/src/aggregators/avgAggregator.ts @@ -2,7 +2,7 @@ import { Aggregator } from './../interfaces/aggregator.interface'; export class AvgAggregator implements Aggregator { private _nonNullCount = 0; - private _sum: number; + private _sum = 0; private _field: number | string; private _type = 'avg'; diff --git a/packages/common/src/aggregators/distinctAggregator.ts b/packages/common/src/aggregators/distinctAggregator.ts index c8087af4b..601eed4ee 100644 --- a/packages/common/src/aggregators/distinctAggregator.ts +++ b/packages/common/src/aggregators/distinctAggregator.ts @@ -2,7 +2,7 @@ import { Aggregator } from './../interfaces/aggregator.interface'; export class DistinctAggregator implements Aggregator { private _field: number | string; - private _distinctValues: any[]; + private _distinctValues: any[] = []; private _type = 'distinct'; constructor(field: number | string) { diff --git a/packages/common/src/editorValidators/floatValidator.ts b/packages/common/src/editorValidators/floatValidator.ts index d48c443f3..337650283 100644 --- a/packages/common/src/editorValidators/floatValidator.ts +++ b/packages/common/src/editorValidators/floatValidator.ts @@ -44,26 +44,26 @@ export function floatValidator(inputValue: any, options: FloatValidatorOptions): // when decimal value is bigger than 0, we only accept the decimal values as that value set // for example if we set decimalPlaces to 2, we will only accept numbers between 0 and 2 decimals isValid = false; - outputMsg = errorMsg || Constants.VALIDATION_EDITOR_NUMBER_BETWEEN.replace(/{{minValue}}|{{maxValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || Constants.VALIDATION_EDITOR_NUMBER_BETWEEN.replace(/{{minValue}}|{{maxValue}}/gi, (matched) => (mapValidation as any)[matched]); } else if (minValue !== undefined && floatNumber !== null && ((operatorConditionalType === 'exclusive' && floatNumber <= minValue) || (operatorConditionalType === 'inclusive' && floatNumber < minValue))) { // MIN VALUE ONLY // when decimal value is bigger than 0, we only accept the decimal values as that value set // for example if we set decimalPlaces to 2, we will only accept numbers between 0 and 2 decimals isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_NUMBER_MIN_INCLUSIVE : Constants.VALIDATION_EDITOR_NUMBER_MIN; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{minValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{minValue}}/gi, (matched) => (mapValidation as any)[matched]); } else if (maxValue !== undefined && floatNumber !== null && ((operatorConditionalType === 'exclusive' && floatNumber >= maxValue) || (operatorConditionalType === 'inclusive' && floatNumber > maxValue))) { // MAX VALUE ONLY // when decimal value is bigger than 0, we only accept the decimal values as that value set // for example if we set decimalPlaces to 2, we will only accept numbers between 0 and 2 decimals isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_NUMBER_MAX_INCLUSIVE : Constants.VALIDATION_EDITOR_NUMBER_MAX; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxValue}}/gi, (matched) => (mapValidation as any)[matched]); } else if ((decPlaces > 0 && !new RegExp(`^[-+]?(\\d*(\\.)?(\\d){0,${decPlaces}})$`).test(inputValue))) { // when decimal value is bigger than 0, we only accept the decimal values as that value set // for example if we set decimalPlaces to 2, we will only accept numbers between 0 and 2 decimals isValid = false; - outputMsg = errorMsg || Constants.VALIDATION_EDITOR_DECIMAL_BETWEEN.replace(/{{minDecimal}}|{{maxDecimal}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || Constants.VALIDATION_EDITOR_DECIMAL_BETWEEN.replace(/{{minDecimal}}|{{maxDecimal}}/gi, (matched) => (mapValidation as any)[matched]); } return { valid: isValid, msg: outputMsg }; diff --git a/packages/common/src/editorValidators/integerValidator.ts b/packages/common/src/editorValidators/integerValidator.ts index a5d9a6539..3739c753b 100644 --- a/packages/common/src/editorValidators/integerValidator.ts +++ b/packages/common/src/editorValidators/integerValidator.ts @@ -42,19 +42,19 @@ export function integerValidator(inputValue: any, options: IntegerValidatorOptio // when decimal value is bigger than 0, we only accept the decimal values as that value set // for example if we set decimalPlaces to 2, we will only accept numbers between 0 and 2 decimals isValid = false; - outputMsg = errorMsg || Constants.VALIDATION_EDITOR_INTEGER_BETWEEN.replace(/{{minValue}}|{{maxValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || Constants.VALIDATION_EDITOR_INTEGER_BETWEEN.replace(/{{minValue}}|{{maxValue}}/gi, (matched) => (mapValidation as any)[matched]); } else if (minValue !== undefined && intNumber !== null && ((operatorConditionalType === 'exclusive' && intNumber <= minValue) || (operatorConditionalType === 'inclusive' && intNumber !== null && intNumber < minValue))) { // MIN VALUE ONLY // when decimal value has to be higher then provided minValue isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_INTEGER_MIN_INCLUSIVE : Constants.VALIDATION_EDITOR_INTEGER_MIN; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{minValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{minValue}}/gi, (matched) => (mapValidation as any)[matched]); } else if (maxValue !== undefined && intNumber !== null && ((operatorConditionalType === 'exclusive' && intNumber >= maxValue) || (operatorConditionalType === 'inclusive' && intNumber !== null && intNumber > maxValue))) { // MAX VALUE ONLY // when decimal value has to be lower then provided maxValue isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_INTEGER_MAX_INCLUSIVE : Constants.VALIDATION_EDITOR_INTEGER_MAX; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxValue}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxValue}}/gi, (matched) => (mapValidation as any)[matched]); } return { valid: isValid, msg: outputMsg }; diff --git a/packages/common/src/editorValidators/sliderValidator.ts b/packages/common/src/editorValidators/sliderValidator.ts index 1e57f6d93..1c0df5654 100644 --- a/packages/common/src/editorValidators/sliderValidator.ts +++ b/packages/common/src/editorValidators/sliderValidator.ts @@ -34,7 +34,7 @@ export function sliderValidator(inputValue: any, options: SliderValidatorOptions return { valid: false, msg: errorMsg || Constants.VALIDATION_EDITOR_NUMBER_BETWEEN.replace(/{{minValue}}|{{maxValue}}/gi, (matched) => { - return mapValidation[matched]; + return (mapValidation as any)[matched]; }) }; } diff --git a/packages/common/src/editorValidators/textValidator.ts b/packages/common/src/editorValidators/textValidator.ts index 5ad3440cd..ce3ace0ad 100644 --- a/packages/common/src/editorValidators/textValidator.ts +++ b/packages/common/src/editorValidators/textValidator.ts @@ -38,19 +38,19 @@ export function textValidator(inputValue: any, options: TextValidatorOptions): E // MIN & MAX Length provided // make sure text length is between minLength and maxLength isValid = false; - outputMsg = errorMsg || Constants.VALIDATION_EDITOR_TEXT_LENGTH_BETWEEN.replace(/{{minLength}}|{{maxLength}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || Constants.VALIDATION_EDITOR_TEXT_LENGTH_BETWEEN.replace(/{{minLength}}|{{maxLength}}/gi, (matched) => (mapValidation as any)[matched]); } else if (minLength !== undefined && inputValueLength !== null && ((operatorConditionalType === 'exclusive' && inputValueLength <= minLength) || (operatorConditionalType === 'inclusive' && inputValueLength !== null && inputValueLength < minLength))) { // MIN Length ONLY // when text length is shorter than minLength isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_TEXT_MIN_LENGTH_INCLUSIVE : Constants.VALIDATION_EDITOR_TEXT_MIN_LENGTH; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{minLength}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{minLength}}/gi, (matched) => (mapValidation as any)[matched]); } else if (maxLength !== undefined && inputValueLength !== null && ((operatorConditionalType === 'exclusive' && inputValueLength >= maxLength) || (operatorConditionalType === 'inclusive' && inputValueLength !== null && inputValueLength > maxLength))) { // MAX Length ONLY // when text length is longer than minLength isValid = false; const defaultErrorMsg = operatorConditionalType === 'inclusive' ? Constants.VALIDATION_EDITOR_TEXT_MAX_LENGTH_INCLUSIVE : Constants.VALIDATION_EDITOR_TEXT_MAX_LENGTH; - outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxLength}}/gi, (matched) => mapValidation[matched]); + outputMsg = errorMsg || defaultErrorMsg.replace(/{{maxLength}}/gi, (matched) => (mapValidation as any)[matched]); } return { valid: isValid, msg: outputMsg }; diff --git a/packages/common/src/editors/autoCompleteEditor.ts b/packages/common/src/editors/autoCompleteEditor.ts index baa48fe80..4f6cd63e5 100644 --- a/packages/common/src/editors/autoCompleteEditor.ts +++ b/packages/common/src/editors/autoCompleteEditor.ts @@ -479,7 +479,7 @@ export class AutoCompleteEditor implements Editor { .appendTo(ul); } - renderDomElement(collection: any[]) { + renderDomElement(collection?: any[]) { if (!Array.isArray(collection)) { throw new Error('The "collection" passed to the Autocomplete Editor is not a valid array.'); } diff --git a/packages/common/src/editors/selectEditor.ts b/packages/common/src/editors/selectEditor.ts index 9ecd249e7..8b0a004fa 100644 --- a/packages/common/src/editors/selectEditor.ts +++ b/packages/common/src/editors/selectEditor.ts @@ -623,7 +623,7 @@ export class SelectEditor implements Editor { return outputCollection; } - renderDomElement(inputCollection: any[]) { + renderDomElement(inputCollection?: any[]) { if (!Array.isArray(inputCollection) && this.collectionOptions?.collectionInsideObjectProperty) { const collectionInsideObjectProperty = this.collectionOptions.collectionInsideObjectProperty; inputCollection = getDescendantProperty(inputCollection, collectionInsideObjectProperty); diff --git a/packages/common/src/extensions/extensionUtility.ts b/packages/common/src/extensions/extensionUtility.ts index 3d576e5fe..b79f97be5 100644 --- a/packages/common/src/extensions/extensionUtility.ts +++ b/packages/common/src/extensions/extensionUtility.ts @@ -4,6 +4,7 @@ import { Column } from '../interfaces/column.interface'; import { SharedService } from '../services/shared.service'; import { TranslaterService } from '../services'; import { getTranslationPrefix } from '../services/utilities'; +import { Locale } from '../interfaces/locale.interface'; export class ExtensionUtility { constructor(private readonly sharedService: SharedService, private readonly translaterService?: TranslaterService) { } @@ -26,8 +27,8 @@ export class ExtensionUtility { // get locales provided by user in forRoot or else use default English locales via the Constants const locales = this.sharedService && this.sharedService.gridOptions && this.sharedService.gridOptions.locales || Constants.locales; - const title = picker && picker[propName]; - const titleKey = picker && picker[`${propName}Key`]; + const title = (picker as any)?.[propName]; + const titleKey = (picker as any)?.[`${propName}Key`]; const gridOptions = this.sharedService.gridOptions; const translationPrefix = getTranslationPrefix(gridOptions); @@ -114,8 +115,8 @@ export class ExtensionUtility { translateItems(items: T[], inputKey: string, outputKey: string) { if (Array.isArray(items)) { for (const item of items) { - if (item[inputKey]) { - item[outputKey] = this.translaterService && this.translaterService.getCurrentLanguage && this.translaterService.translate && this.translaterService.translate(item[inputKey]); + if ((item as any)[inputKey]) { + (item as any)[outputKey] = this.translaterService && this.translaterService.getCurrentLanguage && this.translaterService.translate && this.translaterService.translate((item as any)[inputKey]); } } } @@ -136,7 +137,7 @@ export class ExtensionUtility { if (gridOptions.enableTranslate && this.translaterService && this.translaterService.getCurrentLanguage && this.translaterService.translate) { text = this.translaterService.translate(translationKey || ' '); } else if (locales && locales.hasOwnProperty(localeKey)) { - text = locales[localeKey]; + text = locales[localeKey as keyof Locale] as string; } else { text = localeKey; } diff --git a/packages/common/src/filter-conditions/booleanFilterCondition.ts b/packages/common/src/filter-conditions/booleanFilterCondition.ts index ae2817ee7..308158c64 100644 --- a/packages/common/src/filter-conditions/booleanFilterCondition.ts +++ b/packages/common/src/filter-conditions/booleanFilterCondition.ts @@ -3,9 +3,9 @@ import { FilterCondition, FilterConditionOption } from './../interfaces/index'; import { parseBoolean } from '../services/utilities'; /** Execute filter condition check on each cell */ -export const executeBooleanFilterCondition: FilterCondition = (options: FilterConditionOption, parsedSearchValue: boolean | undefined) => { +export const executeBooleanFilterCondition: FilterCondition = ((options: FilterConditionOption, parsedSearchValue: boolean | undefined) => { return parseBoolean(options.cellValue) === parseBoolean(parsedSearchValue); -}; +}) as FilterCondition; /** * From our search filter value(s), get the parsed value(s). diff --git a/packages/common/src/filter-conditions/dateFilterCondition.ts b/packages/common/src/filter-conditions/dateFilterCondition.ts index 5d7860683..57cf1832d 100644 --- a/packages/common/src/filter-conditions/dateFilterCondition.ts +++ b/packages/common/src/filter-conditions/dateFilterCondition.ts @@ -1,5 +1,5 @@ import * as moment_ from 'moment-mini'; -const moment = moment_['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 +const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 import { FieldType, OperatorType, SearchTerm } from '../enums/index'; import { FilterConditionOption } from '../interfaces/index'; diff --git a/packages/common/src/filter-conditions/filterConditionProcesses.ts b/packages/common/src/filter-conditions/filterConditionProcesses.ts index bc25e3f0e..4d566c32a 100644 --- a/packages/common/src/filter-conditions/filterConditionProcesses.ts +++ b/packages/common/src/filter-conditions/filterConditionProcesses.ts @@ -15,7 +15,7 @@ import { isCollectionOperator } from './filterUtilities'; export type GeneralizedVariableType = 'boolean' | 'date' | 'number' | 'object' | 'text'; /** Execute mapped condition (per field type) for each cell in the grid */ -export const executeFilterConditionTest: FilterCondition = (options: FilterConditionOption, parsedSearchTerms: SearchTerm | SearchTerm[]) => { +export const executeFilterConditionTest: FilterCondition = ((options: FilterConditionOption, parsedSearchTerms: SearchTerm | SearchTerm[]) => { // when using a multi-select ('IN' operator) we will not use the field type but instead go directly with a collection search if (isCollectionOperator(options.operator)) { return executeCollectionSearchFilterCondition(options); @@ -41,7 +41,7 @@ export const executeFilterConditionTest: FilterCondition = (options: FilterCondi // the parsedSearchTerms should be single value (result came from getFilterParsedText() method) return executeStringFilterCondition(options, parsedSearchTerms as SearchTerm); } -}; +}) as FilterCondition; /** * From our search filter value(s), get their parsed value(s), for example a "dateIso" filter will be parsed as Moment object. diff --git a/packages/common/src/filter-conditions/numberFilterCondition.ts b/packages/common/src/filter-conditions/numberFilterCondition.ts index 9a039f88b..7c642aae5 100644 --- a/packages/common/src/filter-conditions/numberFilterCondition.ts +++ b/packages/common/src/filter-conditions/numberFilterCondition.ts @@ -4,7 +4,7 @@ import { isNumber } from '../services/utilities'; import { testFilterCondition } from './filterUtilities'; /** Execute filter condition check on each cell */ -export const executeNumberFilterCondition: FilterCondition = (options: FilterConditionOption, parsedSearchValues: number[]) => { +export const executeNumberFilterCondition: FilterCondition = ((options: FilterConditionOption, parsedSearchValues: number[]) => { const cellValue = parseFloat(options.cellValue); const [searchValue1, searchValue2] = parsedSearchValues; @@ -19,7 +19,7 @@ export const executeNumberFilterCondition: FilterCondition = (options: FilterCon return (resultCondition1 && resultCondition2); } return testFilterCondition(options.operator || '==', cellValue, +searchValue1); -}; +}) as FilterCondition; /** * From our search filter value(s), get the parsed value(s). diff --git a/packages/common/src/filter-conditions/objectFilterCondition.ts b/packages/common/src/filter-conditions/objectFilterCondition.ts index 4d6b1da6e..1ca9b2711 100644 --- a/packages/common/src/filter-conditions/objectFilterCondition.ts +++ b/packages/common/src/filter-conditions/objectFilterCondition.ts @@ -3,7 +3,7 @@ import { FilterCondition, FilterConditionOption } from '../interfaces/index'; import { compareObjects } from './filterUtilities'; /** Execute filter condition check on each cell */ -export const executeObjectFilterCondition: FilterCondition = (options: FilterConditionOption, parsedSearchValue: SearchTerm | undefined) => { +export const executeObjectFilterCondition: FilterCondition = ((options: FilterConditionOption, parsedSearchValue: SearchTerm | undefined) => { if (parsedSearchValue === undefined && !options.operator) { return true; } @@ -21,7 +21,7 @@ export const executeObjectFilterCondition: FilterCondition = (options: FilterCon default: return compareObjects(options.cellValue, parsedSearchValue, options.dataKey); } -}; +}) as FilterCondition; /** * From our search filter value(s), get the parsed value(s). diff --git a/packages/common/src/filter-conditions/stringFilterCondition.ts b/packages/common/src/filter-conditions/stringFilterCondition.ts index 4ec3e20c1..0e9e77c61 100644 --- a/packages/common/src/filter-conditions/stringFilterCondition.ts +++ b/packages/common/src/filter-conditions/stringFilterCondition.ts @@ -3,7 +3,7 @@ import { FilterCondition, FilterConditionOption } from '../interfaces/index'; import { testFilterCondition } from './filterUtilities'; /** Execute filter condition check on each cell */ -export const executeStringFilterCondition: FilterCondition = (options: FilterConditionOption, parsedSearchValue: string | undefined) => { +export const executeStringFilterCondition: FilterCondition = ((options: FilterConditionOption, parsedSearchValue: string | undefined) => { if (parsedSearchValue === undefined && !options.operator) { return true; } @@ -25,7 +25,7 @@ export const executeStringFilterCondition: FilterCondition = (options: FilterCon return (cellValue.indexOf(parsedSearchValue) > -1); } return testFilterCondition(options.operator || '==', cellValue, parsedSearchValue); -}; +}) as FilterCondition; /** * From our search filter value(s), get the parsed value(s). diff --git a/packages/common/src/formatters/formatterUtilities.ts b/packages/common/src/formatters/formatterUtilities.ts index 62a0f1a91..672d0f6c3 100644 --- a/packages/common/src/formatters/formatterUtilities.ts +++ b/packages/common/src/formatters/formatterUtilities.ts @@ -2,7 +2,7 @@ import { FieldType } from '../enums/fieldType.enum'; import { Column, Formatter, GridOption, SlickGrid } from '../interfaces/index'; import { mapMomentDateFormatWithFieldType } from '../services/utilities'; import * as moment_ from 'moment-mini'; -const moment = moment_['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 +const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 /** * Find the option value from the following (in order of execution) @@ -16,8 +16,8 @@ export function getValueFromParamsOrFormatterOptions(optionName: string, columnD if (params && params.hasOwnProperty(optionName)) { return params[optionName]; - } else if (gridOptions.formatterOptions && gridOptions.formatterOptions.hasOwnProperty(optionName)) { - return gridOptions.formatterOptions[optionName]; + } else if (gridOptions.formatterOptions?.hasOwnProperty(optionName)) { + return (gridOptions.formatterOptions as any)[optionName]; } return defaultValue; } diff --git a/packages/common/src/interfaces/backendService.interface.ts b/packages/common/src/interfaces/backendService.interface.ts index 5586113f7..c2d6409bd 100644 --- a/packages/common/src/interfaces/backendService.interface.ts +++ b/packages/common/src/interfaces/backendService.interface.ts @@ -10,6 +10,7 @@ import { PaginationChangedArgs, SingleColumnSort, } from './index'; +import { SlickGrid } from './slickGrid.interface'; export interface BackendService { /** Backend Service options */ @@ -25,7 +26,7 @@ export interface BackendService { clearSorters?: () => void; /** initialize the backend service with certain options */ - init?: (serviceOptions?: BackendServiceOption, pagination?: Pagination, grid?: any) => void; + init?: (serviceOptions?: BackendServiceOption | any, pagination?: Pagination, grid?: SlickGrid) => void; /** Get the dataset name */ getDatasetName?: () => string; diff --git a/packages/common/src/interfaces/customFooterOption.interface.ts b/packages/common/src/interfaces/customFooterOption.interface.ts index fd51714dd..c9c6ffa0b 100644 --- a/packages/common/src/interfaces/customFooterOption.interface.ts +++ b/packages/common/src/interfaces/customFooterOption.interface.ts @@ -1,3 +1,19 @@ +export type MetricTexts = { + /** Defaults to empty string, optionally pass a text (Last Update) to display before the metrics endTime timestamp. */ + lastUpdate?: string; + /** Defaults to "items", word to display at the end of the metrics to represent the items (e.g. you could change it for "users" or anything else). */ + items?: string; + /** Defaults to "of", text word separator to display between the filtered items count and the total unfiltered items count (e.g.: "10 of 100 items"). */ + of?: string; + // -- Translation Keys --// + /** Defaults to "ITEMS", translation key used for the word displayed at the end of the metrics to represent the items (e.g. you could change it for "users" or anything else). */ + itemsKey?: string; + /** Defaults to empty string, optionally pass a translation key (internally we use "LAST_UPDATE") to display before the metrics endTime timestamp. */ + lastUpdateKey?: string; + /** Defaults to "OF", translation key used for the to display between the filtered items count and the total unfiltered items count. */ + ofKey?: string; +}; + export interface CustomFooterOption { /** Optionally pass some text to be displayed on the left side (in the "left-footer" css class) */ leftFooterText?: string; @@ -27,27 +43,7 @@ export interface CustomFooterOption { metricSeparator?: string; /** Text shown in the custom footer on the far right for the metrics */ - metricTexts?: { - /** Defaults to empty string, optionally pass a text (Last Update) to display before the metrics endTime timestamp. */ - lastUpdate?: string; - - /** Defaults to "items", word to display at the end of the metrics to represent the items (e.g. you could change it for "users" or anything else). */ - items?: string; - - /** Defaults to "of", text word separator to display between the filtered items count and the total unfiltered items count (e.g.: "10 of 100 items"). */ - of?: string; - - // -- Translation Keys --// - - /** Defaults to "ITEMS", translation key used for the word displayed at the end of the metrics to represent the items (e.g. you could change it for "users" or anything else). */ - itemsKey?: string; - - /** Defaults to empty string, optionally pass a translation key (internally we use "LAST_UPDATE") to display before the metrics endTime timestamp. */ - lastUpdateKey?: string; - - /** Defaults to "OF", translation key used for the to display between the filtered items count and the total unfiltered items count. */ - ofKey?: string; - }; + metricTexts?: MetricTexts; /** CSS class used for the right container */ rightContainerClass?: string; diff --git a/packages/common/src/interfaces/externalResource.interface.ts b/packages/common/src/interfaces/externalResource.interface.ts index acd5c957b..533cadc78 100644 --- a/packages/common/src/interfaces/externalResource.interface.ts +++ b/packages/common/src/interfaces/externalResource.interface.ts @@ -3,7 +3,7 @@ import { ContainerService } from '../services'; export interface ExternalResource { /** Initialize the External Resource (Component or Service) */ - init: (grid: SlickGrid, container?: ContainerService) => void; + init: (grid: SlickGrid, container: ContainerService) => void; /** Dispose method */ dispose?: () => void; diff --git a/packages/common/src/interfaces/filterCallback.interface.ts b/packages/common/src/interfaces/filterCallback.interface.ts index 7ed489e30..5af0caa05 100644 --- a/packages/common/src/interfaces/filterCallback.interface.ts +++ b/packages/common/src/interfaces/filterCallback.interface.ts @@ -1,4 +1,4 @@ -import { Column } from './index'; +import { Column, SlickEventData } from './index'; import { OperatorString, OperatorType, SearchTerm } from '../enums/index'; export interface FilterCallbackArg { @@ -21,4 +21,4 @@ export interface FilterCallbackArg { shouldTriggerQuery?: boolean; } -export type FilterCallback = (e: Event | undefined, args: FilterCallbackArg) => void; +export type FilterCallback = (e: Event | SlickEventData | undefined, args: FilterCallbackArg) => void; diff --git a/packages/common/src/services/collection.service.ts b/packages/common/src/services/collection.service.ts index 3862d227b..4c32e4087 100644 --- a/packages/common/src/services/collection.service.ts +++ b/packages/common/src/services/collection.service.ts @@ -58,21 +58,21 @@ export class CollectionService { switch (operator) { case OperatorType.equal: if (objectProperty) { - filteredCollection = collection.filter((item) => item[objectProperty] === value); + filteredCollection = collection.filter((item) => (item as any)[objectProperty] === value); } else { filteredCollection = collection.filter((item) => item === value); } break; case OperatorType.contains: if (objectProperty) { - filteredCollection = collection.filter((item) => item[objectProperty].toString().indexOf(value.toString()) !== -1); + filteredCollection = collection.filter((item) => (item as any)[objectProperty].toString().indexOf(value.toString()) !== -1); } else { filteredCollection = collection.filter((item: any) => (item !== null && item !== undefined) && item.toString().indexOf(value.toString()) !== -1); } break; case OperatorType.notContains: if (objectProperty) { - filteredCollection = collection.filter((item) => item[objectProperty].toString().indexOf(value.toString()) === -1); + filteredCollection = collection.filter((item) => (item as any)[objectProperty].toString().indexOf(value.toString()) === -1); } else { filteredCollection = collection.filter((item: any) => (item !== null && item !== undefined) && item.toString().indexOf(value.toString()) === -1); } @@ -80,7 +80,7 @@ export class CollectionService { case OperatorType.notEqual: default: if (objectProperty) { - filteredCollection = collection.filter((item) => item[objectProperty] !== value); + filteredCollection = collection.filter((item) => (item as any)[objectProperty] !== value); } else { filteredCollection = collection.filter((item) => item !== value); } @@ -115,8 +115,8 @@ export class CollectionService { const sortDirection = sortBy.sortDesc ? SortDirectionNumber.desc : SortDirectionNumber.asc; const objectProperty = sortBy.property; const fieldType = sortBy?.fieldType ?? columnDef?.type ?? FieldType.string; - const value1 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate(dataRow1[objectProperty] || ' ') : dataRow1[objectProperty]; - const value2 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate(dataRow2[objectProperty] || ' ') : dataRow2[objectProperty]; + const value1 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate((dataRow1 as any)[objectProperty] || ' ') : (dataRow1 as any)[objectProperty]; + const value2 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate((dataRow2 as any)[objectProperty] || ' ') : (dataRow2 as any)[objectProperty]; const sortResult = sortByFieldType(fieldType, value1, value2, sortDirection, columnDef); if (sortResult !== SortDirectionNumber.neutral) { @@ -134,8 +134,8 @@ export class CollectionService { const fieldType = sortByOptions?.fieldType ?? columnDef?.type ?? FieldType.string; sortedCollection = collection.sort((dataRow1: T, dataRow2: T) => { - const value1 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate(dataRow1[objectProperty] || ' ') : dataRow1[objectProperty]; - const value2 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate(dataRow2[objectProperty] || ' ') : dataRow2[objectProperty]; + const value1 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate((dataRow1 as any)[objectProperty] || ' ') : (dataRow1 as any)[objectProperty]; + const value2 = (enableTranslateLabel) ? this.translaterService?.translate && this.translaterService.translate((dataRow2 as any)[objectProperty] || ' ') : (dataRow2 as any)[objectProperty]; const sortResult = sortByFieldType(fieldType, value1, value2, sortDirection, columnDef); if (sortResult !== SortDirectionNumber.neutral) { return sortResult; diff --git a/packages/common/src/services/excelExport.service.ts b/packages/common/src/services/excelExport.service.ts index 269b9834e..427248bed 100644 --- a/packages/common/src/services/excelExport.service.ts +++ b/packages/common/src/services/excelExport.service.ts @@ -4,7 +4,7 @@ import { ContainerService } from '../services/container.service'; export abstract class ExcelExportService implements ExternalResource { /** ExcelExportService class name which is use to find service instance in the external registered services */ - className: string; + className!: string; /** * Initialize the Export Service diff --git a/packages/common/src/services/extension.service.ts b/packages/common/src/services/extension.service.ts index 8fe3ad354..c932fc877 100644 --- a/packages/common/src/services/extension.service.ts +++ b/packages/common/src/services/extension.service.ts @@ -58,14 +58,14 @@ export class ExtensionService { // dispose of each control/plugin & reset the list for (const extensionName of Object.keys(this._extensionList)) { if (this._extensionList.hasOwnProperty(extensionName)) { - const extension = this._extensionList[extensionName] as ExtensionModel; + const extension = this._extensionList[extensionName as keyof Record>] as ExtensionModel; if (extension?.class?.dispose) { extension.class.dispose(); } } } for (const key of Object.keys(this._extensionList)) { - delete this._extensionList[key]; + delete this._extensionList[key as keyof Record>]; } } diff --git a/packages/common/src/services/filter.service.ts b/packages/common/src/services/filter.service.ts index 8fc5ccde7..fd64c79ea 100644 --- a/packages/common/src/services/filter.service.ts +++ b/packages/common/src/services/filter.service.ts @@ -58,9 +58,9 @@ export class FilterService { protected _firstColumnIdRendered: string | number = ''; protected _filtersMetadata: Array = []; protected _columnFilters: ColumnFilters = {}; - protected _grid: SlickGrid; + protected _grid!: SlickGrid; protected _onSearchChange: SlickEvent | null; - protected _tmpPreFilteredData: number[]; + protected _tmpPreFilteredData?: number[]; constructor(protected filterFactory: FilterFactory, protected pubSubService: PubSubService, protected sharedService: SharedService) { this._onSearchChange = new Slick.Event(); @@ -494,11 +494,11 @@ export class FilterService { if (Array.isArray(inputArray)) { for (let i = 0; i < inputArray.length; i++) { - treeObj[inputArray[i][dataViewIdIdentifier]] = inputArray[i]; + (treeObj as any)[inputArray[i][dataViewIdIdentifier]] = inputArray[i]; // as the filtered data is then used again as each subsequent letter // we need to delete the .__used property, otherwise the logic below // in the while loop (which checks for parents) doesn't work: - delete treeObj[inputArray[i][dataViewIdIdentifier]].__used; + delete (treeObj as any)[inputArray[i][dataViewIdIdentifier]].__used; } // Step 1. prepare search filter by getting their parsed value(s), for example if it's a date filter then parse it to a Moment object @@ -546,14 +546,14 @@ export class FilterService { const len = filteredChildrenAndParents.length; // add child (id): filteredChildrenAndParents.splice(len, 0, item[dataViewIdIdentifier]); - let parent = treeObj[item[parentPropName]] || false; + let parent = (treeObj as any)[item[parentPropName]] || false; while (parent) { // only add parent (id) if not already added: parent.__used || filteredChildrenAndParents.splice(len, 0, parent[dataViewIdIdentifier]); // mark each parent as used to not use them again later: - treeObj[parent[dataViewIdIdentifier]].__used = true; + (treeObj as any)[parent[dataViewIdIdentifier]].__used = true; // try to find parent of the current parent, if exists: - parent = treeObj[parent[parentPropName]] || false; + parent = (treeObj as any)[parent[parentPropName]] || false; } } } @@ -919,7 +919,7 @@ export class FilterService { * Callback method that is called and executed by the individual Filter (DOM element), * for example when user starts typing chars on a search input (which uses InputFilter), this Filter will execute the callback from an input change event. */ - protected callbackSearchEvent(event: SlickEventData | undefined, args: FilterCallbackArg) { + protected callbackSearchEvent(event: Event | undefined, args: FilterCallbackArg) { if (args) { const searchTerm = ((event && event.target) ? (event.target as HTMLInputElement).value : undefined); const searchTerms = (args.searchTerms && Array.isArray(args.searchTerms)) ? args.searchTerms : (searchTerm ? [searchTerm] : undefined); @@ -962,11 +962,11 @@ export class FilterService { // event might have been created as a CustomEvent (e.g. CompoundDateFilter), without being a valid Slick.EventData, // if so we will create a new Slick.EventData and merge it with that CustomEvent to avoid having SlickGrid errors - const eventData = (event && typeof event.isPropagationStopped !== 'function') ? $.extend({}, new Slick.EventData(), event) : event; + const eventData = ((event && typeof (event as SlickEventData).isPropagationStopped !== 'function') ? $.extend({}, new Slick.EventData(), event) : event) as SlickEventData; // trigger an event only if Filters changed or if ENTER key was pressed - const eventKey = event?.key; - const eventKeyCode = event?.keyCode; + const eventKey = (event as KeyboardEvent)?.key; + const eventKeyCode = (event as KeyboardEvent)?.keyCode; if (this._onSearchChange && (eventKey === 'Enter' || eventKeyCode === KeyCode.ENTER || !dequal(oldColumnFilters, this._columnFilters))) { this._onSearchChange.notify({ clearFilterTriggered: args.clearFilterTriggered, diff --git a/packages/common/src/services/grid.service.ts b/packages/common/src/services/grid.service.ts index de7d9d030..34b0c788f 100644 --- a/packages/common/src/services/grid.service.ts +++ b/packages/common/src/services/grid.service.ts @@ -31,8 +31,8 @@ const GridServiceUpdateOptionDefaults: GridServiceUpdateOption = { highlightRow: const HideColumnOptionDefaults: HideColumnOption = { autoResizeColumns: true, triggerEvent: true, hideFromColumnPicker: false, hideFromGridMenu: false }; export class GridService { - private _grid: SlickGrid; - private _rowSelectionPlugin: SlickRowSelectionModel; + private _grid!: SlickGrid; + private _rowSelectionPlugin?: SlickRowSelectionModel; constructor( private extensionService: ExtensionService, @@ -195,7 +195,7 @@ export class GridService { * @param column */ hideColumn(column: Column) { - if (this._grid && this._grid.getColumns && this._grid.setColumns && this._grid.getColumnIndex) { + if (this._gridOptions && this._grid.getColumnIndex) { const columnIndex = this._grid.getColumnIndex(column.id); if (columnIndex >= 0) { this.hideColumnByIndex(columnIndex); @@ -416,7 +416,7 @@ export class GridService { // row number in the grid, by default it will be on first row (top is the default) let rowNumber: number | undefined = 0; - const itemId = item?.[idPropName] ?? ''; + const itemId = (item as any)?.[idPropName] ?? ''; // do we want the item to be sorted in the grid, when set to False it will insert on first row (defaults to false) if (options.resortGrid) { @@ -495,7 +495,7 @@ export class GridService { // get row numbers of all new inserted items // we need to do it after resort and get each row number because it possibly changed after the sort - items.forEach((item: T) => rowNumbers.push(this._dataView.getRowById(item[idPropName]) as number)); + items.forEach((item: T) => rowNumbers.push(this._dataView.getRowById((item as any)[idPropName]) as number)); // if user wanted to see highlighted row if (options.highlightRow) { @@ -528,7 +528,7 @@ export class GridService { if (!item || !(idPropName in item)) { throw new Error(`Deleting an item requires the item to include an "${idPropName}" property`); } - return this.deleteItemById(item[idPropName], options); + return this.deleteItemById((item as any)[idPropName], options); } /** @@ -544,7 +544,7 @@ export class GridService { // when it's not an array, we can call directly the single item delete if (!Array.isArray(items)) { this.deleteItem(items, options); - return [items[idPropName]]; + return [(items as any)[idPropName]]; } // begin bulk transaction @@ -552,8 +552,8 @@ export class GridService { const itemIds: string[] = []; items.forEach((item: T) => { - if (item?.[idPropName] !== undefined) { - itemIds.push(item[idPropName]); + if ((item as any)?.[idPropName] !== undefined) { + itemIds.push((item as any)[idPropName]); } }); @@ -639,7 +639,7 @@ export class GridService { updateItem(item: T, options?: GridServiceUpdateOption): number { options = { ...GridServiceUpdateOptionDefaults, ...options }; const idPropName = this._gridOptions.datasetIdPropertyName || 'id'; - const itemId = (!item || !(idPropName in item)) ? undefined : item[idPropName]; + const itemId = (!item || !(idPropName in item)) ? undefined : (item as any)[idPropName]; if (itemId === undefined) { throw new Error(`Calling Update of an item requires the item to include an "${idPropName}" property`); @@ -671,7 +671,7 @@ export class GridService { const rowNumbers: number[] = []; const itemIds: Array = []; items.forEach((item: T) => { - const itemId = (!item || !(idPropName in item)) ? undefined : item[idPropName]; + const itemId = (!item || !(idPropName in item)) ? undefined : (item as any)[idPropName]; itemIds.push(itemId); if (this._dataView.getIdxById(itemId) !== undefined) { @@ -763,7 +763,7 @@ export class GridService { upsertItem(item: T, options?: GridServiceInsertOption): { added: number | undefined, updated: number | undefined } { options = { ...GridServiceInsertOptionDefaults, ...options }; const idPropName = this._gridOptions.datasetIdPropertyName || 'id'; - const itemId = (!item || !(idPropName in item)) ? undefined : item[idPropName]; + const itemId = (!item || !(idPropName in item)) ? undefined : (item as any)[idPropName]; if (itemId === undefined) { throw new Error(`Calling Upsert of an item requires the item to include an "${idPropName}" property`); diff --git a/packages/common/src/services/gridState.service.ts b/packages/common/src/services/gridState.service.ts index 8a4408142..00c95b7d8 100644 --- a/packages/common/src/services/gridState.service.ts +++ b/packages/common/src/services/gridState.service.ts @@ -33,7 +33,7 @@ export class GridStateService { private _eventHandler = new Slick.EventHandler(); private _columns: Column[] = []; private _currentColumns: CurrentColumn[] = []; - private _grid: SlickGrid; + private _grid!: SlickGrid; private _subscriptions: Subscription[] = []; private _selectedRowDataContextIds: Array | undefined = []; // used with row selection private _selectedFilteredRowDataContextIds: Array | undefined = []; // used with row selection @@ -265,20 +265,18 @@ export class GridStateService { */ getCurrentRowSelections(requestRefreshFilteredRow = true): CurrentRowSelection | null { if (this._grid && this._gridOptions && this._dataView && this.hasRowSelectionEnabled()) { - if (this._grid.getSelectedRows && this._dataView.mapRowsToIds) { - let filteredDataContextIds: Array | undefined = []; - const gridRowIndexes: number[] = this._dataView.mapIdsToRows(this._selectedRowDataContextIds || []); // note that this will return only what is visible in current page - const dataContextIds: Array | undefined = this._selectedRowDataContextIds; - - // user might request to refresh the filtered selection dataset - // typically always True, except when "reEvaluateRowSelectionAfterFilterChange" is called and we don't need to refresh the filtered dataset twice - if (requestRefreshFilteredRow === true) { - filteredDataContextIds = this.refreshFilteredRowSelections(); - } - filteredDataContextIds = this._selectedFilteredRowDataContextIds; - - return { gridRowIndexes, dataContextIds, filteredDataContextIds }; + let filteredDataContextIds: Array | undefined = []; + const gridRowIndexes: number[] = this._dataView.mapIdsToRows(this._selectedRowDataContextIds || []); // note that this will return only what is visible in current page + const dataContextIds: Array | undefined = this._selectedRowDataContextIds; + + // user might request to refresh the filtered selection dataset + // typically always True, except when "reEvaluateRowSelectionAfterFilterChange" is called and we don't need to refresh the filtered dataset twice + if (requestRefreshFilteredRow === true) { + filteredDataContextIds = this.refreshFilteredRowSelections(); } + filteredDataContextIds = this._selectedFilteredRowDataContextIds; + + return { gridRowIndexes, dataContextIds, filteredDataContextIds }; } return null; } @@ -439,7 +437,7 @@ export class GridStateService { * @param grid */ bindSlickGridColumnChangeEventToGridStateChange(eventName: string, grid: SlickGrid) { - const slickGridEvent = grid && grid[eventName]; + const slickGridEvent = (grid as any)?.[eventName]; if (slickGridEvent && typeof slickGridEvent.subscribe === 'function') { (this._eventHandler as SlickEventHandler>).subscribe(slickGridEvent, () => { diff --git a/packages/common/src/services/groupingAndColspan.service.ts b/packages/common/src/services/groupingAndColspan.service.ts index 74a5eabcc..d52122b5a 100644 --- a/packages/common/src/services/groupingAndColspan.service.ts +++ b/packages/common/src/services/groupingAndColspan.service.ts @@ -19,7 +19,7 @@ declare const Slick: SlickNamespace; export class GroupingAndColspanService { private _eventHandler: SlickEventHandler; - private _grid: SlickGrid; + private _grid!: SlickGrid; constructor(private extensionUtility: ExtensionUtility, private extensionService: ExtensionService, private pubSubService: PubSubService,) { this._eventHandler = new Slick.EventHandler(); diff --git a/packages/common/src/services/observers.ts b/packages/common/src/services/observers.ts index 880a4e4bc..2f6572532 100644 --- a/packages/common/src/services/observers.ts +++ b/packages/common/src/services/observers.ts @@ -8,7 +8,7 @@ export function collectionObserver(inputArray: any[], callback: (outputArray: an // Add more methods here if you want to listen to them const mutationMethods = ['pop', 'push', 'reverse', 'shift', 'unshift', 'splice', 'sort']; - mutationMethods.forEach((changeMethod) => { + mutationMethods.forEach((changeMethod: any) => { inputArray[changeMethod] = (...args: any[]) => { const res = Array.prototype[changeMethod].apply(inputArray, args); // call normal behaviour callback.apply(inputArray, [inputArray, args]); // finally call the callback supplied @@ -33,6 +33,7 @@ export function propertyObserver(obj: any, prop: string, callback: (newValue: an }, set(newValue) { innerValue = newValue; + // @ts-ignore callback.apply(obj, [newValue, obj[prop]]); } }); diff --git a/packages/common/src/services/pagination.service.ts b/packages/common/src/services/pagination.service.ts index 07155700b..66f3f3d77 100644 --- a/packages/common/src/services/pagination.service.ts +++ b/packages/common/src/services/pagination.service.ts @@ -26,16 +26,16 @@ export class PaginationService { private _backendServiceApi: BackendServiceApi | undefined; private _dataFrom = 1; private _dataTo = 1; - private _itemsPerPage: number; + private _itemsPerPage = 0; private _pageCount = 1; private _pageNumber = 1; private _totalItems = 0; - private _availablePageSizes: number[]; - private _paginationOptions: Pagination; + private _availablePageSizes: number[] = []; + private _paginationOptions!: Pagination; private _subscriptions: Subscription[] = []; /** SlickGrid Grid object */ - grid: SlickGrid; + grid!: SlickGrid; /** Constructor */ constructor(private pubSubService: PubSubService, private sharedService: SharedService) { } diff --git a/packages/common/src/services/sort.service.ts b/packages/common/src/services/sort.service.ts index a6b056fea..c9341dced 100644 --- a/packages/common/src/services/sort.service.ts +++ b/packages/common/src/services/sort.service.ts @@ -67,7 +67,7 @@ export class SortService { // subscribe to the SlickGrid event and call the backend execution const onSortHandler = grid.onSort; - (this._eventHandler as SlickEventHandler>).subscribe(onSortHandler, this.onBackendSortChanged.bind(this)); + (this._eventHandler as SlickEventHandler>).subscribe(onSortHandler, this.onBackendSortChanged.bind(this) as EventListener); } /** @@ -84,7 +84,7 @@ export class SortService { this.processTreeDataInitialSort(); const onSortHandler = grid.onSort; - (this._eventHandler as SlickEventHandler>).subscribe(onSortHandler, this.handleLocalOnSort.bind(this)); + (this._eventHandler as SlickEventHandler>).subscribe(onSortHandler, this.handleLocalOnSort.bind(this) as EventListener); } handleLocalOnSort(_e: SlickEventData, args: SingleColumnSort | MultiColumnSort) { diff --git a/packages/common/src/services/textExport.service.ts b/packages/common/src/services/textExport.service.ts index 0bbfa3bbe..b3f9229c3 100644 --- a/packages/common/src/services/textExport.service.ts +++ b/packages/common/src/services/textExport.service.ts @@ -4,7 +4,7 @@ import { ContainerService } from '../services/container.service'; export abstract class TextExportService implements ExternalResource { /** ExcelExportService class name which is use to find service instance in the external registered services */ - className: string; + className!: string; /** * Initialize the Export Service diff --git a/packages/common/src/services/treeData.service.ts b/packages/common/src/services/treeData.service.ts index 444e7edb8..c6061f89a 100644 --- a/packages/common/src/services/treeData.service.ts +++ b/packages/common/src/services/treeData.service.ts @@ -5,7 +5,7 @@ import { SharedService } from './shared.service'; declare const Slick: SlickNamespace; export class TreeDataService { - private _grid: SlickGrid; + private _grid!: SlickGrid; private _eventHandler: SlickEventHandler; constructor(private sharedService: SharedService) { diff --git a/packages/common/src/sortComparers/dateUtilities.ts b/packages/common/src/sortComparers/dateUtilities.ts index 79068dc1a..553d14c76 100644 --- a/packages/common/src/sortComparers/dateUtilities.ts +++ b/packages/common/src/sortComparers/dateUtilities.ts @@ -25,10 +25,10 @@ export function compareDates(value1: any, value2: any, sortDirection: number, so export function getAssociatedDateSortComparer(fieldType: typeof FieldType[keyof typeof FieldType]): SortComparer { const FORMAT = (fieldType === FieldType.date) ? moment.ISO_8601 : mapMomentDateFormatWithFieldType(fieldType); - return (value1: any, value2: any, sortDirection: number, sortColumn: Column, gridOptions: GridOption) => { + return ((value1: any, value2: any, sortDirection: number, sortColumn: Column, gridOptions: GridOption) => { if (FORMAT === moment.ISO_8601) { return compareDates(value1, value2, sortDirection, sortColumn, gridOptions, FORMAT, false) as number; } return compareDates(value1, value2, sortDirection, sortColumn, gridOptions, FORMAT, true) as number; - }; + }) as SortComparer; } diff --git a/packages/common/src/sortComparers/sortUtilities.ts b/packages/common/src/sortComparers/sortUtilities.ts index 8534b56af..c6aa8aab9 100644 --- a/packages/common/src/sortComparers/sortUtilities.ts +++ b/packages/common/src/sortComparers/sortUtilities.ts @@ -38,6 +38,7 @@ export function sortByFieldType(fieldType: typeof FieldType[keyof typeof FieldTy case FieldType.dateTimeUsShort: case FieldType.dateTimeUsShortAmPm: case FieldType.dateTimeUsShortAM_PM: + // @ts-ignore sortResult = getAssociatedDateSortComparer(fieldType).call(this, value1, value2, sortDirection, sortColumn, gridOptions); break; case FieldType.object: diff --git a/packages/composite-editor-component/src/slick-composite-editor.component.ts b/packages/composite-editor-component/src/slick-composite-editor.component.ts index 40fd8f1f9..3c5187626 100644 --- a/packages/composite-editor-component/src/slick-composite-editor.component.ts +++ b/packages/composite-editor-component/src/slick-composite-editor.component.ts @@ -155,7 +155,7 @@ export class SlickCompositeEditorComponent implements ExternalResource { if (editor && editor.setValue && Array.isArray(this._editorContainers)) { editor.setValue(newValue, true); - const editorContainerElm = this._editorContainers.find((editorElm: HTMLElement) => editorElm.dataset.editorid === columnId); + const editorContainerElm = (this._editorContainers as HTMLElement[]).find(editorElm => editorElm!.dataset!.editorid === columnId); const excludeDisabledFieldFormValues = this.gridOptions?.compositeEditorOptions?.excludeDisabledFieldFormValues ?? false; if (!editor.disabled || (editor.disabled && !excludeDisabledFieldFormValues)) { @@ -769,7 +769,7 @@ export class SlickCompositeEditorComponent implements ExternalResource { const translationKey = textLabels[`${labelProperty}Key` as keyof CompositeEditorLabel]; return this.translaterService.translate(translationKey || ''); } - return textLabels?.[labelProperty as keyof CompositeEditorLabel] ?? this._locales?.[localeText as keyof CompositeEditorLabel] ?? defaultText; + return textLabels?.[labelProperty as keyof CompositeEditorLabel] ?? this._locales?.[localeText as keyof Locale] ?? defaultText; } /** Retrieve the current selection of row indexes & data context Ids */ diff --git a/packages/empty-warning-component/src/slick-empty-warning.component.ts b/packages/empty-warning-component/src/slick-empty-warning.component.ts index f3f294746..cf490ad87 100644 --- a/packages/empty-warning-component/src/slick-empty-warning.component.ts +++ b/packages/empty-warning-component/src/slick-empty-warning.component.ts @@ -9,9 +9,9 @@ import { } from '@slickgrid-universal/common'; export class SlickEmptyWarningComponent implements ExternalResource { - private _warningLeftElement: HTMLDivElement | null; - private _warningRightElement: HTMLDivElement | null; - private grid: SlickGrid; + private _warningLeftElement: HTMLDivElement | null = null + private _warningRightElement: HTMLDivElement | null = null + private grid!: SlickGrid; private isPreviouslyShown = false; private translaterService?: TranslaterService | null; diff --git a/packages/excel-export/src/excelExport.service.ts b/packages/excel-export/src/excelExport.service.ts index 81b9af93c..782f7154e 100644 --- a/packages/excel-export/src/excelExport.service.ts +++ b/packages/excel-export/src/excelExport.service.ts @@ -1,6 +1,6 @@ import * as ExcelBuilder from 'excel-builder-webpacker'; import * as moment_ from 'moment-mini'; -const moment = moment_['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 +const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 import { // utility functions @@ -45,18 +45,18 @@ const DEFAULT_EXPORT_OPTIONS: ExcelExportOption = { export class ExcelExportService implements ExternalResource, BaseExcelExportService { private _fileFormat = FileType.xlsx; - private _grid: SlickGrid; - private _locales: Locale; - private _groupedColumnHeaders: Array; - private _columnHeaders: Array; + private _grid!: SlickGrid; + private _locales!: Locale; + private _groupedColumnHeaders?: Array; + private _columnHeaders: Array = []; private _hasGroupedItems = false; - private _excelExportOptions: ExcelExportOption; - private _sheet: ExcelWorksheet; - private _stylesheet: ExcelStylesheet; + private _excelExportOptions!: ExcelExportOption; + private _sheet!: ExcelWorksheet; + private _stylesheet!: ExcelStylesheet; private _stylesheetFormats: any; - private _pubSubService: PubSubService | null; + private _pubSubService: PubSubService | null = null; private _translaterService: TranslaterService | undefined; - private _workbook: ExcelWorkbook; + private _workbook!: ExcelWorkbook; /** ExcelExportService class name which is use to find service instance in the external registered services */ className = 'ExcelExportService'; diff --git a/packages/graphql/src/services/graphql.service.ts b/packages/graphql/src/services/graphql.service.ts index 177d17372..984a6f508 100644 --- a/packages/graphql/src/services/graphql.service.ts +++ b/packages/graphql/src/services/graphql.service.ts @@ -41,9 +41,9 @@ const DEFAULT_PAGE_SIZE = 20; export class GraphqlService implements BackendService { private _currentFilters: ColumnFilters | CurrentFilter[] = []; - private _currentPagination: CurrentPagination | null; + private _currentPagination: CurrentPagination | null = null; private _currentSorters: CurrentSorter[] = []; - private _columnDefinitions: Column[]; + private _columnDefinitions!: Column[]; private _grid: SlickGrid | undefined; private _datasetIdPropName = 'id'; options: GraphqlServiceOption | undefined; @@ -64,7 +64,7 @@ export class GraphqlService implements BackendService { } /** Initialization of the service, which acts as a constructor */ - init(serviceOptions: GraphqlServiceOption, pagination?: Pagination, grid?: SlickGrid): void { + init(serviceOptions?: GraphqlServiceOption, pagination?: Pagination, grid?: SlickGrid): void { this._grid = grid; this.options = serviceOptions || { datasetName: '' }; this.pagination = pagination; @@ -146,7 +146,8 @@ export class GraphqlService implements BackendService { }; if (!this.options.isWithCursor) { - datasetFilters.offset = ((this.options.paginationOptions && this.options.paginationOptions.hasOwnProperty('offset')) ? +this.options.paginationOptions['offset'] : 0); + const paginationOptions = this.options?.paginationOptions; + datasetFilters.offset = paginationOptions?.hasOwnProperty('offset') ? +(paginationOptions as any)['offset'] : 0; } } @@ -165,7 +166,7 @@ export class GraphqlService implements BackendService { if (this.options.extraQueryArguments) { // first: 20, ... userId: 123 for (const queryArgument of this.options.extraQueryArguments) { - datasetFilters[queryArgument.field] = queryArgument.value; + (datasetFilters as any)[queryArgument.field] = queryArgument.value; } } @@ -282,7 +283,7 @@ export class GraphqlService implements BackendService { /* * FILTERING */ - processOnFilterChanged(_event: Event, args: FilterChangedArgs): string { + processOnFilterChanged(_event: Event | undefined, args: FilterChangedArgs): string { const gridOptions: GridOption = this._gridOptions; const backendApi = gridOptions.backendServiceApi; @@ -332,7 +333,7 @@ export class GraphqlService implements BackendService { * } * } */ - processOnPaginationChanged(_event: Event, args: PaginationChangedArgs): string { + processOnPaginationChanged(_event: Event | undefined, args: PaginationChangedArgs): string { const pageSize = +(args.pageSize || ((this.pagination) ? this.pagination.pageSize : DEFAULT_PAGE_SIZE)); this.updatePagination(args.newPage, pageSize); @@ -353,7 +354,7 @@ export class GraphqlService implements BackendService { * } * } */ - processOnSortChanged(_event: Event, args: SingleColumnSort | MultiColumnSort): string { + processOnSortChanged(_event: Event | undefined, args: SingleColumnSort | MultiColumnSort): string { const sortColumns = (args.multiColumnSort) ? (args as MultiColumnSort).sortCols : new Array({ columnId: (args as ColumnSort).sortCol.id, sortCol: (args as ColumnSort).sortCol, sortAsc: (args as ColumnSort).sortAsc }); // loop through all columns to inspect sorters & set the query @@ -378,7 +379,7 @@ export class GraphqlService implements BackendService { for (const columnId in columnFilters) { if (columnFilters.hasOwnProperty(columnId)) { - const columnFilter = columnFilters[columnId]; + const columnFilter = (columnFilters as any)[columnId]; // if user defined some "presets", then we need to find the filters from the column definitions instead let columnDef: Column | undefined; @@ -619,7 +620,7 @@ export class GraphqlService implements BackendService { */ private castFilterToColumnFilters(columnFilters: ColumnFilters | CurrentFilter[]): CurrentFilter[] { // keep current filters & always save it as an array (columnFilters can be an object when it is dealt by SlickGrid Filter) - const filtersArray: ColumnFilter[] = (typeof columnFilters === 'object') ? Object.keys(columnFilters).map(key => columnFilters[key]) : columnFilters; + const filtersArray: ColumnFilter[] = (typeof columnFilters === 'object') ? Object.keys(columnFilters).map(key => (columnFilters as any)[key]) : columnFilters; if (!Array.isArray(filtersArray)) { return []; diff --git a/packages/graphql/src/services/graphqlQueryBuilder.ts b/packages/graphql/src/services/graphqlQueryBuilder.ts index 16bbd344c..a031196a8 100644 --- a/packages/graphql/src/services/graphqlQueryBuilder.ts +++ b/packages/graphql/src/services/graphqlQueryBuilder.ts @@ -8,7 +8,7 @@ */ export default class GraphqlQueryBuilder { // eslint-disable-next-line @typescript-eslint/ban-types - alias: string | Function; + alias!: string | Function; head: any[] = []; body: any; diff --git a/packages/odata/src/services/grid-odata.service.ts b/packages/odata/src/services/grid-odata.service.ts index 68b5c61fb..4fde78755 100644 --- a/packages/odata/src/services/grid-odata.service.ts +++ b/packages/odata/src/services/grid-odata.service.ts @@ -36,12 +36,12 @@ const DEFAULT_PAGE_SIZE = 20; export class GridOdataService implements BackendService { private _currentFilters: CurrentFilter[] = []; - private _currentPagination: CurrentPagination | null; + private _currentPagination: CurrentPagination | null = null; private _currentSorters: CurrentSorter[] = []; - private _columnDefinitions: Column[]; + private _columnDefinitions: Column[] = []; private _grid: SlickGrid | undefined; private _odataService: OdataQueryBuilderService; - options: Partial; + options?: Partial; pagination: Pagination | undefined; defaultOptions: OdataOption = { top: DEFAULT_ITEMS_PER_PAGE, @@ -68,7 +68,7 @@ export class GridOdataService implements BackendService { this._odataService = new OdataQueryBuilderService(); } - init(serviceOptions: Partial, pagination?: Pagination, grid?: SlickGrid): void { + init(serviceOptions?: Partial, pagination?: Pagination, grid?: SlickGrid): void { this._grid = grid; const mergedOptions = { ...this.defaultOptions, ...serviceOptions }; @@ -183,7 +183,7 @@ export class GridOdataService implements BackendService { /* * FILTERING */ - processOnFilterChanged(_event: Event, args: FilterChangedArgs): string { + processOnFilterChanged(_event: Event | undefined, args: FilterChangedArgs): string { const gridOptions: GridOption = this._gridOptions; const backendApi = gridOptions.backendServiceApi; @@ -208,7 +208,7 @@ export class GridOdataService implements BackendService { /* * PAGINATION */ - processOnPaginationChanged(_event: Event, args: PaginationChangedArgs) { + processOnPaginationChanged(_event: Event | undefined, args: PaginationChangedArgs) { const pageSize = +(args.pageSize || ((this.pagination) ? this.pagination.pageSize : DEFAULT_PAGE_SIZE)); this.updatePagination(args.newPage, pageSize); @@ -219,7 +219,7 @@ export class GridOdataService implements BackendService { /* * SORTING */ - processOnSortChanged(_event: Event, args: SingleColumnSort | MultiColumnSort) { + processOnSortChanged(_event: Event | undefined, args: SingleColumnSort | MultiColumnSort) { const sortColumns = (args.multiColumnSort) ? (args as MultiColumnSort).sortCols : new Array({ columnId: (args as ColumnSort).sortCol.id, sortCol: (args as ColumnSort).sortCol, sortAsc: (args as ColumnSort).sortAsc }); // loop through all columns to inspect sorters & set the query @@ -246,7 +246,7 @@ export class GridOdataService implements BackendService { // loop through all columns to inspect filters for (const columnId in columnFilters) { if (columnFilters.hasOwnProperty(columnId)) { - const columnFilter = columnFilters[columnId]; + const columnFilter = (columnFilters as any)[columnId]; // if user defined some "presets", then we need to find the filters from the column definitions instead let columnDef: Column | undefined; @@ -520,7 +520,7 @@ export class GridOdataService implements BackendService { */ private castFilterToColumnFilters(columnFilters: ColumnFilters | CurrentFilter[]): CurrentFilter[] { // keep current filters & always save it as an array (columnFilters can be an object when it is dealt by SlickGrid Filter) - const filtersArray: ColumnFilter[] = (typeof columnFilters === 'object') ? Object.keys(columnFilters).map(key => columnFilters[key]) : columnFilters; + const filtersArray: ColumnFilter[] = (typeof columnFilters === 'object') ? Object.keys(columnFilters).map(key => (columnFilters as any)[key]) : columnFilters; if (!Array.isArray(filtersArray)) { return []; diff --git a/packages/odata/src/services/odataQueryBuilder.service.ts b/packages/odata/src/services/odataQueryBuilder.service.ts index 48ba656b8..1372b2a39 100644 --- a/packages/odata/src/services/odataQueryBuilder.service.ts +++ b/packages/odata/src/services/odataQueryBuilder.service.ts @@ -4,7 +4,7 @@ import { OdataOption } from '../interfaces/odataOption.interface'; export class OdataQueryBuilderService { _columnFilters: any; _defaultSortBy: string; - _filterCount: number; + _filterCount = 0; _odataOptions: Partial; constructor() { @@ -114,13 +114,13 @@ export class OdataQueryBuilderService { updateOptions(options: Partial) { for (const property of Object.keys(options)) { if (options.hasOwnProperty(property)) { - this._odataOptions[property] = options[property]; // replace of the property + this._odataOptions[property as keyof OdataOption] = options[property as keyof OdataOption]; // replace of the property } // we need to keep the defaultSortBy for references whenever the user removes his Sorting // then we would revert to the defaultSortBy and the only way is to keep a hard copy here if (property === 'orderBy' || property === 'sortBy') { - let sortBy = options[property]; + let sortBy = options[property as keyof OdataOption]; // make sure first char of each orderBy field is capitalize if (this._odataOptions.caseType === CaseType.pascalCase) { @@ -129,7 +129,7 @@ export class OdataQueryBuilderService { inputArray[index] = titleCase(field); }); } else { - sortBy = titleCase(options[property]); + sortBy = titleCase(options[property as keyof OdataOption]); } } this._odataOptions.orderBy = sortBy; diff --git a/packages/text-export/src/textExport.service.ts b/packages/text-export/src/textExport.service.ts index 97712cd39..3fa290e3c 100644 --- a/packages/text-export/src/textExport.service.ts +++ b/packages/text-export/src/textExport.service.ts @@ -45,15 +45,15 @@ type ExportTextDownloadOption = { export class TextExportService implements ExternalResource, BaseTextExportService { private _delimiter = ','; private _exportQuoteWrapper = ''; - private _exportOptions: TextExportOption; + private _exportOptions!: TextExportOption; private _fileFormat = FileType.csv; private _lineCarriageReturn = '\n'; - private _grid: SlickGrid; - private _groupedColumnHeaders: Array; - private _columnHeaders: Array; + private _grid!: SlickGrid; + private _groupedColumnHeaders?: Array; + private _columnHeaders: Array = []; private _hasGroupedItems = false; - private _locales: Locale; - private _pubSubService: PubSubService | null; + private _locales!: Locale; + private _pubSubService!: PubSubService | null; private _translaterService: TranslaterService | undefined; /** ExcelExportService class name which is use to find service instance in the external registered services */ diff --git a/packages/tsconfig.base.json b/packages/tsconfig.base.json index 390c7d235..7304b889d 100644 --- a/packages/tsconfig.base.json +++ b/packages/tsconfig.base.json @@ -31,6 +31,6 @@ "skipLibCheck": true, "preserveConstEnums": true, "stripInternal": true, - "strict": false + "strict": true } } \ No newline at end of file diff --git a/packages/tsconfig.bundle.json b/packages/tsconfig.bundle.json index 6468ab6bd..a5dabebee 100644 --- a/packages/tsconfig.bundle.json +++ b/packages/tsconfig.bundle.json @@ -26,7 +26,8 @@ "experimentalDecorators": true, "noEmitHelpers": false, "stripInternal": true, - "sourceMap": true + "sourceMap": true, + "strict": true }, "exclude": [ "**/*.spec.ts" diff --git a/packages/vanilla-bundle/package.json b/packages/vanilla-bundle/package.json index 54ff85ff8..3f33f21d6 100644 --- a/packages/vanilla-bundle/package.json +++ b/packages/vanilla-bundle/package.json @@ -52,17 +52,17 @@ "@slickgrid-universal/excel-export": "^0.10.2", "@slickgrid-universal/text-export": "^0.10.2", "dompurify": "^2.2.6", - "whatwg-fetch": "^3.5.0" + "whatwg-fetch": "^3.6.1" }, "devDependencies": { "@types/webpack": "^4.41.26", "archiver": "^5.2.0", "cross-env": "^7.0.3", "dts-bundle-webpack": "^1.0.2", - "html-loader": "^1.3.2", + "html-loader": "^2.1.1", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", - "ts-loader": "^8.0.14", - "webpack": "^5.19.0" + "ts-loader": "^8.0.17", + "webpack": "^5.24.2" } } \ No newline at end of file diff --git a/packages/vanilla-bundle/src/components/slick-footer.component.ts b/packages/vanilla-bundle/src/components/slick-footer.component.ts index 4ab4febe4..9adc1e5c4 100644 --- a/packages/vanilla-bundle/src/components/slick-footer.component.ts +++ b/packages/vanilla-bundle/src/components/slick-footer.component.ts @@ -1,5 +1,5 @@ import * as moment_ from 'moment-mini'; -const moment = moment_['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 +const moment = (moment_ as any)['default'] || moment_; // patch to fix rollup "moment has no default export" issue, document here https://github.com/rollup/rollup/issues/670 import { Constants, @@ -7,6 +7,7 @@ import { GridOption, Locale, Metrics, + MetricTexts, SlickGrid, TranslaterService, sanitizeTextByAvailableSanitizer, @@ -15,7 +16,7 @@ import { BindingHelper } from '../services/binding.helper'; export class SlickFooterComponent { private _bindingHelper: BindingHelper; - private _footerElement: HTMLDivElement; + private _footerElement!: HTMLDivElement; get gridUid(): string { return this.grid?.getUID() ?? ''; @@ -178,7 +179,7 @@ export class SlickFooterComponent { for (const propName of Object.keys(this.customFooterOptions.metricTexts)) { if (propName.lastIndexOf('Key') > 0) { const propNameWithoutKey = propName.substring(0, propName.lastIndexOf('Key')); - this.customFooterOptions.metricTexts[propNameWithoutKey] = this.translaterService.translate(this.customFooterOptions.metricTexts[propName] || ' '); + this.customFooterOptions.metricTexts[propNameWithoutKey as keyof MetricTexts] = this.translaterService.translate(this.customFooterOptions.metricTexts[propName as keyof MetricTexts] || ' '); } } } diff --git a/packages/vanilla-bundle/src/components/slick-pagination.component.ts b/packages/vanilla-bundle/src/components/slick-pagination.component.ts index e63f30648..6dca930d4 100644 --- a/packages/vanilla-bundle/src/components/slick-pagination.component.ts +++ b/packages/vanilla-bundle/src/components/slick-pagination.component.ts @@ -15,7 +15,7 @@ import { BindingHelper } from '../services/binding.helper'; export class SlickPaginationComponent { private _bindingHelper: BindingHelper; - private _paginationElement: HTMLDivElement; + private _paginationElement!: HTMLDivElement; private _enableTranslate = false; private _locales: Locale; private _subscriptions: Subscription[] = []; @@ -55,7 +55,7 @@ export class SlickPaginationComponent { this._subscriptions.push( this.pubSubService.subscribe('onPaginationRefreshed', (paginationChanges: ServicePagination) => { for (const key of Object.keys(paginationChanges)) { - this.currentPagination[key] = paginationChanges[key]; + (this.currentPagination as any)[key] = (paginationChanges as any)[key]; } this.updatePageButtonsUsability(); const pageFromToElm = document.querySelector(`.${this.gridUid} span.page-info-from-to`); @@ -184,10 +184,10 @@ export class SlickPaginationComponent { /** Add some DOM Element event listeners */ addEventListeners() { - this._bindingHelper.bindEventHandler('.icon-seek-first', 'click', this.changeToFirstPage.bind(this)); - this._bindingHelper.bindEventHandler('.icon-seek-end', 'click', this.changeToLastPage.bind(this)); - this._bindingHelper.bindEventHandler('.icon-seek-next', 'click', this.changeToNextPage.bind(this)); - this._bindingHelper.bindEventHandler('.icon-seek-prev', 'click', this.changeToPreviousPage.bind(this)); + this._bindingHelper.bindEventHandler('.icon-seek-first', 'click', this.changeToFirstPage.bind(this) as EventListener); + this._bindingHelper.bindEventHandler('.icon-seek-end', 'click', this.changeToLastPage.bind(this) as EventListener); + this._bindingHelper.bindEventHandler('.icon-seek-next', 'click', this.changeToNextPage.bind(this) as EventListener); + this._bindingHelper.bindEventHandler('.icon-seek-prev', 'click', this.changeToPreviousPage.bind(this) as EventListener); this._bindingHelper.bindEventHandler('select.items-per-page', 'change', (event: & { target: any }) => this.itemsPerPage = +(event?.target?.value ?? 0)); } diff --git a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts index 8478b5732..e7bb2671c 100644 --- a/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts +++ b/packages/vanilla-bundle/src/components/slick-vanilla-grid-bundle.ts @@ -18,6 +18,7 @@ import { GlobalGridOptions, GridOption, Metrics, + MetricTexts, SlickDataView, SlickEventHandler, SlickGrid, @@ -89,61 +90,61 @@ import { autoAddEditorFormatterToColumnsWithEditor } from './slick-vanilla-utili declare const Slick: SlickNamespace; export class SlickVanillaGridBundle { - protected _eventPubSubService: EventPubSubService; - private _columnDefinitions: Column[]; - private _gridOptions: GridOption; - private _gridContainerElm: HTMLElement; - private _gridParentContainerElm: HTMLElement; + private _eventPubSubService!: EventPubSubService; + private _columnDefinitions!: Column[]; + private _gridOptions!: GridOption; + private _gridContainerElm!: HTMLElement; + private _gridParentContainerElm!: HTMLElement; private _hideHeaderRowAfterPageLoad = false; private _isDatasetInitialized = false; private _isGridInitialized = false; private _isLocalGrid = true; private _isPaginationInitialized = false; - private _eventHandler: SlickEventHandler; + private _eventHandler!: SlickEventHandler; private _extensions: ExtensionList | undefined; private _paginationOptions: Pagination | undefined; private _registeredResources: ExternalResource[] = []; private _slickgridInitialized = false; private _slickerGridInstances: SlickerGridInstance | undefined; backendServiceApi: BackendServiceApi | undefined; - dataView: SlickDataView; - slickGrid: SlickGrid; - metrics: Metrics; + dataView!: SlickDataView; + slickGrid!: SlickGrid; + metrics?: Metrics; customDataView = false; - paginationData: { + paginationData?: { gridOptions: GridOption; paginationService: PaginationService; }; totalItems = 0; - groupItemMetadataProvider: SlickGroupItemMetadataProvider; - resizerService: ResizerService; + groupItemMetadataProvider?: SlickGroupItemMetadataProvider; + resizerService!: ResizerService; subscriptions: Subscription[] = []; showPagination = false; // extensions - extensionUtility: ExtensionUtility; + extensionUtility!: ExtensionUtility; // services - collectionService: CollectionService; - extensionService: ExtensionService; - filterService: FilterService; - gridEventService: GridEventService; - gridService: GridService; - gridStateService: GridStateService; - groupingService: GroupingAndColspanService; - paginationService: PaginationService; - sharedService: SharedService; - sortService: SortService; + collectionService!: CollectionService; + extensionService!: ExtensionService; + filterService!: FilterService; + gridEventService!: GridEventService; + gridService!: GridService; + gridStateService!: GridStateService; + groupingService!: GroupingAndColspanService; + paginationService!: PaginationService; + sharedService!: SharedService; + sortService!: SortService; translaterService: TranslaterService | undefined; - treeDataService: TreeDataService; - universalContainerService: UniversalContainerService; + treeDataService!: TreeDataService; + universalContainerService!: UniversalContainerService; slickCompositeEditor: SlickCompositeEditorComponent | undefined; slickEmptyWarning: SlickEmptyWarningComponent | undefined; slickFooter: SlickFooterComponent | undefined; slickPagination: SlickPaginationComponent | undefined; - gridClass: string; - gridClassName: string; + gridClass!: string; + gridClassName!: string; get eventHandler(): SlickEventHandler { return this._eventHandler; @@ -443,15 +444,15 @@ export class SlickVanillaGridBundle { if (this.backendServiceApi) { for (const prop of Object.keys(this.backendServiceApi)) { - this.backendServiceApi[prop] = null; + (this.backendServiceApi as any)[prop] = null; } this.backendServiceApi = undefined; } for (const prop of Object.keys(this.columnDefinitions)) { - this.columnDefinitions[prop] = null; + (this.columnDefinitions as any)[prop] = null; } for (const prop of Object.keys(this.sharedService)) { - this.sharedService[prop] = null; + (this.sharedService as any)[prop] = null; } this.datasetHierarchical = undefined; this._columnDefinitions = []; @@ -841,7 +842,7 @@ export class SlickVanillaGridBundle { // expose all Slick Grid Events through dispatch for (const prop in grid) { if (grid.hasOwnProperty(prop) && prop.startsWith('on')) { - const gridEventHandler = grid[prop]; + const gridEventHandler = (grid as any)[prop]; (this._eventHandler as SlickEventHandler>).subscribe(gridEventHandler, (event, args) => { const gridEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, this._gridOptions?.defaultSlickgridEventPrefix || ''); return this._eventPubSubService.dispatchCustomEvent(gridEventName, { eventData: event, args }); @@ -852,7 +853,7 @@ export class SlickVanillaGridBundle { // expose all Slick DataView Events through dispatch for (const prop in dataView) { if (dataView.hasOwnProperty(prop) && prop.startsWith('on')) { - const dataViewEventHandler = dataView[prop]; + const dataViewEventHandler = (dataView as any)[prop]; (this._eventHandler as SlickEventHandler>).subscribe(dataViewEventHandler, (event, args) => { const dataViewEventName = this._eventPubSubService.getEventNameByNamingConvention(prop, this._gridOptions?.defaultSlickgridEventPrefix || ''); return this._eventPubSubService.dispatchCustomEvent(dataViewEventName, { eventData: event, args }); @@ -1326,7 +1327,7 @@ export class SlickVanillaGridBundle { for (const propName of Object.keys(customFooterOptions.metricTexts)) { if (propName.lastIndexOf('Key') > 0) { const propNameWithoutKey = propName.substring(0, propName.lastIndexOf('Key')); - customFooterOptions.metricTexts[propNameWithoutKey] = this.translaterService.translate(customFooterOptions.metricTexts[propName] || ' '); + customFooterOptions.metricTexts[propNameWithoutKey as keyof MetricTexts] = this.translaterService.translate(customFooterOptions.metricTexts[propName as keyof MetricTexts] || ' '); } } } diff --git a/packages/vanilla-bundle/src/services/binding.helper.ts b/packages/vanilla-bundle/src/services/binding.helper.ts index 4ba479287..8d07eb8d2 100644 --- a/packages/vanilla-bundle/src/services/binding.helper.ts +++ b/packages/vanilla-bundle/src/services/binding.helper.ts @@ -66,7 +66,7 @@ export class BindingHelper { elements.forEach(elm => { elm.textContent = ''; if (elm && attribute in elm) { - elm[attribute] = value; + (elm as any)[attribute] = value; } }); } diff --git a/packages/vanilla-bundle/src/services/binding.service.ts b/packages/vanilla-bundle/src/services/binding.service.ts index c90d5f6b3..20d56aa55 100644 --- a/packages/vanilla-bundle/src/services/binding.service.ts +++ b/packages/vanilla-bundle/src/services/binding.service.ts @@ -65,7 +65,7 @@ export class BindingService { if (Array.isArray(this.elementBindings)) { for (const binding of this.elementBindings) { if (binding?.element && binding?.attribute) { - binding.element[binding.attribute] = typeof val === 'string' ? this.sanitizeText(val) : val; + (binding.element as any)[binding.attribute] = typeof val === 'string' ? this.sanitizeText(val) : val; } } } @@ -116,7 +116,7 @@ export class BindingService { if (element) { if (eventName) { const listener = () => { - const elmValue = element[attribute]; + const elmValue = element[attribute as keyof Element]; this.valueSetter(elmValue); if (this._binding.variable.hasOwnProperty(this._binding.property) || this._binding.property in this._binding.variable) { this._binding.variable[this._binding.property] = this.valueGetter(); @@ -133,7 +133,7 @@ export class BindingService { this._boundedEventWithListeners.push({ element, eventName, listener }); } this.elementBindings.push(binding); - element[attribute] = typeof this._value === 'string' ? this.sanitizeText(this._value) : this._value; + (element as any)[attribute] = typeof this._value === 'string' ? this.sanitizeText(this._value) : this._value; } } diff --git a/packages/vanilla-bundle/src/services/eventPubSub.service.ts b/packages/vanilla-bundle/src/services/eventPubSub.service.ts index eec712c42..2d531db06 100644 --- a/packages/vanilla-bundle/src/services/eventPubSub.service.ts +++ b/packages/vanilla-bundle/src/services/eventPubSub.service.ts @@ -30,12 +30,12 @@ export class EventPubSubService implements PubSubService { this.dispatchCustomEvent(eventNameByConvention, data, true, false); } - subscribe(eventName: string, callback: (data: T) => void): any { + subscribe(eventName: string, callback: (data: any) => void): any { const eventNameByConvention = this.getEventNameByNamingConvention(eventName, ''); // the event listener will return the data in the "event.detail", so we need to return its content to the final callback // basically we substitute the "data" with "event.detail" so that the user ends up with only the "data" result - this._elementSource.addEventListener(eventNameByConvention, (event: CustomEventInit) => callback.call(null, event.detail)); + this._elementSource.addEventListener(eventNameByConvention, (event: CustomEventInit) => callback.call(null, event.detail as T)); this._subscribedEvents.push({ name: eventNameByConvention, listener: callback }); } diff --git a/packages/vanilla-bundle/src/services/resizer.service.ts b/packages/vanilla-bundle/src/services/resizer.service.ts index e743a5eb8..9779eef10 100644 --- a/packages/vanilla-bundle/src/services/resizer.service.ts +++ b/packages/vanilla-bundle/src/services/resizer.service.ts @@ -19,10 +19,10 @@ const DEFAULT_INTERVAL_MAX_RETRIES = 70; const DEFAULT_INTERVAL_RETRY_DELAY = 250; export class ResizerService { - private _grid: SlickGrid; - private _addon: SlickResizer; + private _grid!: SlickGrid; + private _addon!: SlickResizer; private _eventHandler: SlickEventHandler; - private _intervalId: NodeJS.Timeout; + private _intervalId!: NodeJS.Timeout; private _intervalExecutionCounter = 0; private _intervalRetryDelay = DEFAULT_INTERVAL_RETRY_DELAY; private _isStopResizeIntervalRequested = false; diff --git a/packages/vanilla-bundle/webpack.config.js b/packages/vanilla-bundle/webpack.config.js index 8575ff90e..47696afbd 100644 --- a/packages/vanilla-bundle/webpack.config.js +++ b/packages/vanilla-bundle/webpack.config.js @@ -37,7 +37,7 @@ module.exports = ({ production } = {}) => ({ }, module: { rules: [ - { test: /\.html$/i, loader: 'html-loader' }, + { test: /\.html$/i, loader: 'html-loader', options: { esModule: false } }, { test: /\.ts?$/, use: 'ts-loader', exclude: nodeModulesDir, }, ], }, diff --git a/yarn.lock b/yarn.lock index f8f03acc9..640468875 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.8.3": +"@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11", "@babel/code-frame@^7.8.3": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== @@ -1685,15 +1685,20 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.20.tgz#f7974863edd21d1f8a494a73e8e2b3658615c340" integrity sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A== +"@types/node@12.12.50": + version "12.12.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.50.tgz#e9b2e85fafc15f2a8aa8fdd41091b983da5fd6ee" + integrity sha512-5ImO01Fb8YsEOYpV+aeyGYztcYcjGsBvN4D7G5r1ef2cuQOpymjWNQi5V0rKHE6PC2ru3HkoUr/Br2/8GUA84w== + "@types/node@8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.0.tgz#acaa89247afddc7967e9902fd11761dadea1a555" integrity sha512-j2tekvJCO7j22cs+LO6i0kRPhmQ9MXaPZ55TzOc1lzkN5b6BWqq4AFjl04s1oRRQ1v5rSe+KEvnLUSTonuls/A== -"@types/node@^14.14.22": - version "14.14.22" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" - integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== +"@types/node@^14.14.31": + version "14.14.31" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" + integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1809,13 +1814,13 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.2.tgz#47a15803cfab89580b96933d348c2721f3d2f6fe" - integrity sha512-uMGfG7GFYK/nYutK/iqYJv6K/Xuog/vrRRZX9aEP4Zv1jsYXuvFUMDFLhUnc8WFv3D2R5QhNQL3VYKmvLS5zsQ== +"@typescript-eslint/eslint-plugin@^4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.2.tgz#981b26b4076c62a5a55873fbef3fe98f83360c61" + integrity sha512-uiQQeu9tWl3f1+oK0yoAv9lt/KXO24iafxgQTkIYO/kitruILGx3uH+QtIAHqxFV+yIsdnJH+alel9KuE3J15Q== dependencies: - "@typescript-eslint/experimental-utils" "4.14.2" - "@typescript-eslint/scope-manager" "4.14.2" + "@typescript-eslint/experimental-utils" "4.15.2" + "@typescript-eslint/scope-manager" "4.15.2" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1823,61 +1828,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.2.tgz#9df35049d1d36b6cbaba534d703648b9e1f05cbb" - integrity sha512-mV9pmET4C2y2WlyHmD+Iun8SAEqkLahHGBkGqDVslHkmoj3VnxnGP4ANlwuxxfq1BsKdl/MPieDbohCEQgKrwA== +"@typescript-eslint/experimental-utils@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.2.tgz#5efd12355bd5b535e1831282e6cf465b9a71cf36" + integrity sha512-Fxoshw8+R5X3/Vmqwsjc8nRO/7iTysRtDqx6rlfLZ7HbT8TZhPeQqbPjTyk2RheH3L8afumecTQnUc9EeXxohQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.14.2.tgz#31e216e4baab678a56e539f9db9862e2542c98d0" - integrity sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg== +"@typescript-eslint/parser@^4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.2.tgz#c804474321ef76a3955aec03664808f0d6e7872e" + integrity sha512-SHeF8xbsC6z2FKXsaTb1tBCf0QZsjJ94H6Bo51Y1aVEZ4XAefaw5ZAilMoDPlGghe+qtq7XdTiDlGfVTOmvA+Q== dependencies: - "@typescript-eslint/scope-manager" "4.14.2" - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/typescript-estree" "4.14.2" + "@typescript-eslint/scope-manager" "4.15.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/typescript-estree" "4.15.2" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.14.2.tgz#64cbc9ca64b60069aae0c060b2bf81163243b266" - integrity sha512-cuV9wMrzKm6yIuV48aTPfIeqErt5xceTheAgk70N1V4/2Ecj+fhl34iro/vIssJlb7XtzcaD07hWk7Jk0nKghg== +"@typescript-eslint/scope-manager@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.2.tgz#5725bda656995960ae1d004bfd1cd70320f37f4f" + integrity sha512-Zm0tf/MSKuX6aeJmuXexgdVyxT9/oJJhaCkijv0DvJVT3ui4zY6XYd6iwIo/8GEZGy43cd7w1rFMiCLHbRzAPQ== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" -"@typescript-eslint/types@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.14.2.tgz#d96da62be22dc9dc6a06647f3633815350fb3174" - integrity sha512-LltxawRW6wXy4Gck6ZKlBD05tCHQUj4KLn4iR69IyRiDHX3d3NCAhO+ix5OR2Q+q9bjCrHE/HKt+riZkd1At8Q== +"@typescript-eslint/types@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.2.tgz#04acf3a2dc8001a88985291744241e732ef22c60" + integrity sha512-r7lW7HFkAarfUylJ2tKndyO9njwSyoy6cpfDKWPX6/ctZA+QyaYscAHXVAfJqtnY6aaTwDYrOhp+ginlbc7HfQ== -"@typescript-eslint/typescript-estree@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.2.tgz#9c5ebd8cae4d7b014f890acd81e8e17f309c9df9" - integrity sha512-ESiFl8afXxt1dNj8ENEZT12p+jl9PqRur+Y19m0Z/SPikGL6rqq4e7Me60SU9a2M28uz48/8yct97VQYaGl0Vg== +"@typescript-eslint/typescript-estree@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.2.tgz#c2f7a1e94f3428d229d5ecff3ead6581ee9b62fa" + integrity sha512-cGR8C2g5SPtHTQvAymEODeqx90pJHadWsgTtx6GbnTWKqsg7yp6Eaya9nFzUd4KrKhxdYTTFBiYeTPQaz/l8bw== dependencies: - "@typescript-eslint/types" "4.14.2" - "@typescript-eslint/visitor-keys" "4.14.2" + "@typescript-eslint/types" "4.15.2" + "@typescript-eslint/visitor-keys" "4.15.2" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" - lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.14.2": - version "4.14.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.2.tgz#997cbe2cb0690e1f384a833f64794e98727c70c6" - integrity sha512-KBB+xLBxnBdTENs/rUgeUKO0UkPBRs2vD09oMRRIkj5BEN8PX1ToXV532desXfpQnZsYTyLLviS7JrPhdL154w== +"@typescript-eslint/visitor-keys@4.15.2": + version "4.15.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.2.tgz#3d1c7979ce75bf6acf9691109bd0d6b5706192b9" + integrity sha512-TME1VgSb7wTwgENN5KVj4Nqg25hP8DisXxNBojM4Nn31rYaNDIocNm5cmjOFfh42n7NVERxWrDFoETO/76ePyg== dependencies: - "@typescript-eslint/types" "4.14.2" + "@typescript-eslint/types" "4.15.2" eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": @@ -2006,22 +2010,22 @@ "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.0.tgz#2aff5f1ebc6f793c13ba9b2a701d180eab17f5ee" - integrity sha512-Un0SdBoN1h4ACnIO7EiCjWuyhNI0Jl96JC+63q6xi4HDUYRZn8Auluea9D+v9NWKc5J4sICVEltdBaVjLX39xw== +"@webpack-cli/configtest@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.1.tgz#241aecfbdc715eee96bed447ed402e12ec171935" + integrity sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ== -"@webpack-cli/info@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.1.tgz#af98311f983d0b9fce7284cfcf1acaf1e9f4879c" - integrity sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ== +"@webpack-cli/info@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.2.tgz#ef3c0cd947a1fa083e174a59cb74e0b6195c236c" + integrity sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ== dependencies: envinfo "^7.7.3" -"@webpack-cli/serve@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.2.2.tgz#1f8eee44f96524756268f5e3f43e9d943f864d41" - integrity sha512-03GkWxcgFfm8+WIwcsqJb9agrSDNDDoxaNnexPnCCexP5SCE4IgFd9lNpSy+K2nFqVMpgTFw6SwbmVAVTndVew== +"@webpack-cli/serve@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" + integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -2315,6 +2319,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -3029,10 +3038,10 @@ check-more-types@^2.24.0: resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= -chokidar@3.4.3, chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.4.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -3042,7 +3051,7 @@ chokidar@3.4.3, chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.4.2: normalize-path "~3.0.0" readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" chokidar@^2.1.8: version "2.1.8" @@ -3063,6 +3072,21 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.2.2, chokidar@^3.3.0, chokidar@^3.4.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1, chownr@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -3292,10 +3316,10 @@ commander@^5.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" + integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== common-tags@^1.8.0: version "1.8.0" @@ -3656,23 +3680,23 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-loader@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.1.tgz#9e4de0d6636a6266a585bd0900b422c85539d25f" - integrity sha512-cXc2ti9V234cq7rJzFKhirb2L2iPy8ZjALeVJAozXYz9te3r4eqLSixNAbMDJSgJEQywqXzs8gonxaboeKqwiw== +css-loader@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.0.2.tgz#24f758dae349bad0a440c50d7e2067742e0899cb" + integrity sha512-gbkBigdcHbmNvZ1Cg6aV6qh6k9N6XOr8YWzISLQGrwk2mgOH8LLrizhkxbDhQtaLtktyKHD4970S0xwz5btfTA== dependencies: camelcase "^6.2.0" cssesc "^3.0.0" - icss-utils "^5.0.0" + icss-utils "^5.1.0" loader-utils "^2.0.0" - postcss "^8.1.4" + postcss "^8.2.4" postcss-modules-extract-imports "^3.0.0" postcss-modules-local-by-default "^4.0.0" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.1.0" schema-utils "^3.0.0" - semver "^7.3.2" + semver "^7.3.4" css-select@^2.0.2: version "2.1.0" @@ -3723,14 +3747,15 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -cypress@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.4.0.tgz#432c516bf4f1a0f042a6aa1f2c3a4278fa35a8b2" - integrity sha512-SrsPsZ4IBterudkoFYBvkQmXOVxclh1/+ytbzpV8AH/D2FA+s2Qy5ISsaRzOFsbQa4KZWoi3AKwREmF1HucYkg== +cypress@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-6.5.0.tgz#d853d7a8f915f894249a8788294bfba077278c17" + integrity sha512-ol/yTAqHrQQpYBjxLlRSvZf4DOb9AhaQNVlwdOZgJcBHZOOa52/p/6/p3PPcvzjWGOMG6Yq0z4G+jrbWyk/9Dg== dependencies: "@cypress/listr-verbose-renderer" "^0.4.1" "@cypress/request" "^2.88.5" "@cypress/xvfb" "^1.2.4" + "@types/node" "12.12.50" "@types/sinonjs__fake-timers" "^6.0.1" "@types/sizzle" "^2.3.2" arch "^2.1.2" @@ -3743,7 +3768,7 @@ cypress@^6.4.0: commander "^5.1.0" common-tags "^1.8.0" dayjs "^1.9.3" - debug "^4.1.1" + debug "4.3.2" eventemitter2 "^6.4.2" execa "^4.0.2" executable "^4.1.1" @@ -3820,10 +3845,17 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== +debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" @@ -3834,13 +3866,6 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -4051,7 +4076,12 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff@4.0.2, diff@^4.0.1: +diff@5.0.0, diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== @@ -4120,21 +4150,12 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - entities "^2.0.0" - domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.1.0: +domelementtype@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== @@ -4153,20 +4174,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== - dependencies: - domelementtype "^2.1.0" - dompurify@^2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.2.6.tgz#54945dc5c0b45ce5ae228705777e8e59d7b2edc4" @@ -4180,15 +4187,6 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" - integrity sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -4422,10 +4420,10 @@ es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-module-lexer@^0.3.26: - version "0.3.26" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" - integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== +es-module-lexer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.0.tgz#21f4181cc8b7eee06855f1c59e6087c7bc4f77b0" + integrity sha512-iuEGihqqhKWFgh72Q/Jtch7V2t/ft8w8IPP2aEN8ArYKO+IWyo6hsi96hCdgyeEDQIV3InhYQ9BlwUFPGXrbEQ== es-to-primitive@^1.2.1: version "1.2.1" @@ -4555,12 +4553,12 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.19.0: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.19.0.tgz#6719621b196b5fad72e43387981314e5d0dc3f41" - integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== +eslint@^7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" + integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== dependencies: - "@babel/code-frame" "^7.0.0" + "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.3.0" ajv "^6.10.0" chalk "^4.0.0" @@ -4572,7 +4570,7 @@ eslint@^7.19.0: eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" - esquery "^1.2.0" + esquery "^1.4.0" esutils "^2.0.2" file-entry-cache "^6.0.0" functional-red-black-tree "^1.0.1" @@ -4612,10 +4610,10 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" @@ -5030,7 +5028,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-up@5.0.0, find-up@^5.0.0: +find-up@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -5256,6 +5254,11 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + fsu@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/fsu/-/fsu-1.1.1.tgz#bd36d3579907c59d85b257a75b836aa9e0c31834" @@ -5733,15 +5736,13 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-loader@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" - integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== +html-loader@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-2.1.1.tgz#61174d43a4fe97b2a79c3b6206736e6725e13b97" + integrity sha512-L6HUVgr2aeGMyiool2raoBQb8Lue2UTAhUsHvsMLyNxfBHMtOz1NJL1GyE4VbyAoYBK5PJp1I9Aw+FqS3d2eTA== dependencies: html-minifier-terser "^5.1.1" - htmlparser2 "^4.1.0" - loader-utils "^2.0.0" - schema-utils "^3.0.0" + parse5 "^6.0.1" html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: version "5.1.1" @@ -5756,10 +5757,10 @@ html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: relateurl "^0.2.7" terser "^4.6.3" -html-webpack-plugin@next: - version "5.0.0-beta.4" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.0.0-beta.4.tgz#b07f76a546f7423fe057af7dce3fa983f774f581" - integrity sha512-4CWq246BVHfS2l8Ni68q/oWquwJuaHs5s2Z+yVCmKNWadxS28RAqZo98hMtpnTLwhbhIg04psduDMcUr9JJpXg== +html-webpack-plugin@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.2.0.tgz#d675ad0027a89de6b3d9950e0b57656dcfd97fbf" + integrity sha512-0wkVlJKq7edCN793gdLgdAm5m196qI2vb5SGXy4AtGOFB/lYKyS10+3Vkhe6Bo0acddAW3QVw+0ysgWoko/IEQ== dependencies: "@types/html-minifier-terser" "^5.0.0" html-minifier-terser "^5.0.1" @@ -5780,16 +5781,6 @@ htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -5933,7 +5924,7 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^5.0.0: +icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== @@ -7047,13 +7038,12 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" js-yaml@^3.13.1: version "3.14.1" @@ -7904,10 +7894,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.5.tgz#252166e78879c106e0130f229d44e0cbdfcebed3" - integrity sha512-tvmzcwqJJXau4OQE5vT72pRT18o2zF+tQJp8CWchqvfQnTlflkzS+dANYcRdyPRWUWRkfmeNTKltx0NZI/b5dQ== +mini-css-extract-plugin@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.8.tgz#639047b78c2ee728704285aa468d2a5a8d91d566" + integrity sha512-u+2kVov/Gcs74iz+x3phEBWMAGw2djjnKfYez+Pl/b5dyXL7aM4Lp5QQtIq16CDwRHT/woUJki49gBNMhfm1eA== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -8025,41 +8015,41 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5: dependencies: minimist "^1.2.5" -mocha@^8.2.1: - version "8.2.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" - integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== +mocha@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.0.tgz#a83a7432d382ae1ca29686062d7fdc2c36f63fe5" + integrity sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.4.3" - debug "4.2.0" - diff "4.0.2" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.1.6" growl "1.10.5" he "1.2.0" - js-yaml "3.14.0" + js-yaml "4.0.0" log-symbols "4.0.0" minimatch "3.0.4" - ms "2.1.2" - nanoid "3.1.12" + ms "2.1.3" + nanoid "3.1.20" serialize-javascript "5.0.1" strip-json-comments "3.1.1" - supports-color "7.2.0" + supports-color "8.1.1" which "2.0.2" wide-align "1.1.3" - workerpool "6.0.2" - yargs "13.3.2" - yargs-parser "13.1.2" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" yargs-unparser "2.0.0" -mochawesome-report-generator@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-5.1.0.tgz#b8809e7661ac31732fa7ae7210380f704f7c68f6" - integrity sha512-5cI4Jh+sD+jIxc7q94961vnm/6VKDI7TFUPt9dps6oAc4y4WMpEeeOlmgKKM81q2eGaviNUYw+acFalGK6EJ9g== +mochawesome-report-generator@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mochawesome-report-generator/-/mochawesome-report-generator-5.2.0.tgz#ffd29f8d610863e48e63c15c4e83b5689d8dbd04" + integrity sha512-DDY/3jSkM/VrWy0vJtdYOf6qBLdaPaLcI7rQmBVbnclIX7AKniE1Rhz3T/cMT/7u54W5EHNo1z84z7efotq/Eg== dependencies: chalk "^2.4.2" dateformat "^3.0.2" @@ -8067,28 +8057,28 @@ mochawesome-report-generator@^5.1.0: fs-extra "^7.0.0" fsu "^1.0.2" lodash.isfunction "^3.0.8" - opener "^1.4.2" + opener "^1.5.2" prop-types "^15.7.2" tcomb "^3.2.17" tcomb-validation "^3.3.0" validator "^10.11.0" yargs "^13.2.2" -mochawesome@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-6.2.1.tgz#38ed75cf1b2ff86e7c894d6f33499183a49dd0b7" - integrity sha512-zew/N1Gb4JYCTl3scu9i8OW0ay7b0ZOGczCrSW/P+XdBrLntqI5/JlJiYV1/Nn/SY4qahddsIE+qWL8ACNerPA== +mochawesome@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/mochawesome/-/mochawesome-6.2.2.tgz#2847b4cccb254201e8dad89384f760fe9cdbae15" + integrity sha512-NuIxYo8zczmL5XWLNFiud21OsAJHXrflt2lcRY2u8a3TilGwglhzTPjUHZCLqJvbqj2CnIHX2ueqOh1ViUNDPw== dependencies: - chalk "^4.0.0" - diff "^4.0.1" + chalk "^4.1.0" + diff "^5.0.0" json-stringify-safe "^5.0.1" lodash.isempty "^4.4.0" lodash.isfunction "^3.0.9" lodash.isobject "^3.0.2" lodash.isstring "^4.0.1" - mochawesome-report-generator "^5.1.0" + mochawesome-report-generator "^5.2.0" strip-ansi "^6.0.0" - uuid "^7.0.3" + uuid "^8.3.2" modify-values@^1.0.0: version "1.0.1" @@ -8132,7 +8122,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -8191,12 +8181,7 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoid@3.1.12: - version "3.1.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== - -nanoid@^3.1.20: +nanoid@3.1.20, nanoid@^3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== @@ -8678,7 +8663,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@^1.4.2, opener@^1.5.1: +opener@^1.5.1, opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -8961,6 +8946,11 @@ parse5@5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -9134,13 +9124,6 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-dir@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" - integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== - dependencies: - find-up "^5.0.0" - portfinder@^1.0.25, portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -9236,19 +9219,19 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.1.4: - version "8.2.2" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.2.tgz#60613b62297005084fd21024a68637798864fe26" - integrity sha512-HM1NDNWLgglJPQQMNwvLxgH2KcrKZklKLi/xXYIOaqQB57p/pDWEJNS83PVICYsn1Dg/9C26TiejNr422/ePaQ== +postcss@^8.2.4: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04" + integrity sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg== dependencies: colorette "^1.2.1" nanoid "^3.1.20" source-map "^0.6.1" -postcss@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.4.tgz#20a98a39cf303d15129c2865a9ec37eda0031d04" - integrity sha512-kRFftRoExRVXZlwUuay9iC824qmXPcQQVzAjbCCgjpXnkdMCJYBu2gTwAaFBzv8ewND6O8xFb3aELmEkh9zTzg== +postcss@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" + integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== dependencies: colorette "^1.2.1" nanoid "^3.1.20" @@ -10059,16 +10042,13 @@ sass-graph@2.2.5: scss-tokenizer "^0.2.3" yargs "^13.3.2" -sass-loader@^10.1.1: - version "10.1.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" - integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== +sass-loader@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9" + integrity sha512-Vp1LcP4slTsTNLEiDkTcm8zGN/XYYrZz2BZybQbliWA8eXveqA/AxsEjllQTpJbg2MzCsx/qNO48sHdZtOaxTw== dependencies: klona "^2.0.4" - loader-utils "^2.0.0" neo-async "^2.6.2" - schema-utils "^3.0.0" - semver "^7.3.2" saxes@^5.0.0: version "5.0.1" @@ -10787,10 +10767,10 @@ style-loader@^2.0.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -supports-color@7.2.0, supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -10813,6 +10793,13 @@ supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" @@ -11171,10 +11158,10 @@ trim-off-newlines@^1.0.0: dependencies: glob "^7.1.2" -ts-jest@^26.5.0: - version "26.5.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.0.tgz#3e3417d91bc40178a6716d7dacc5b0505835aa21" - integrity sha512-Ya4IQgvIFNa2Mgq52KaO8yBw2W8tWp61Ecl66VjF0f5JaV8u50nGoptHVILOPGoI7SDnShmEqnYQEmyHdQ+56g== +ts-jest@^26.5.2: + version "26.5.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.2.tgz#5281d6b44c2f94f71205728a389edc3d7995b0c4" + integrity sha512-bwyJ2zJieSugf7RB+o8fgkMeoMVMM2KPDE0UklRLuACxjwJsOrZNo6chrcScmK33YavPSwhARffy8dZx5LJdUQ== dependencies: "@types/jest" "26.x" bs-logger "0.x" @@ -11188,10 +11175,10 @@ ts-jest@^26.5.0: semver "7.x" yargs-parser "20.x" -ts-loader@^8.0.14: - version "8.0.14" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.14.tgz#e46ac1f8dcb88808d0b1335d2eae65b74bd78fe8" - integrity sha512-Jt/hHlUnApOZjnSjTmZ+AbD5BGlQFx3f1D0nYuNKwz0JJnuDGHJas6az+FlWKwwRTu+26GXpv249A8UAnYUpqA== +ts-loader@^8.0.17: + version "8.0.17" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc" + integrity sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w== dependencies: chalk "^4.1.0" enhanced-resolve "^4.0.0" @@ -11314,10 +11301,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" - integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== +typescript@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" + integrity sha512-tbb+NVrLfnsJy3M59lsDgrzWIflR4d4TIUjz+heUnHZwdF7YsrMTKoRERiIvI2lvBG95dfpLxB21WZhys1bgaQ== uglify-js@^3.1.4: version "3.12.4" @@ -11534,12 +11521,7 @@ uuid@^3.0.1, uuid@^3.3.2, uuid@^3.3.3, uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - -uuid@^8.3.0: +uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -11650,17 +11632,17 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.4.0.tgz#38c7fa01ea31510f5c490245dd1bb28018792f1b" - integrity sha512-/Qh07CXfXEkMu5S8wEpjuaw2Zj/CC0hf/qbTDp6N8N7JjdGuaOjZ7kttz+zhuJO/J5m7alQEhNk9lsc4rC6xgQ== +webpack-cli@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" + integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.0" - "@webpack-cli/info" "^1.2.1" - "@webpack-cli/serve" "^1.2.2" + "@webpack-cli/configtest" "^1.0.1" + "@webpack-cli/info" "^1.2.2" + "@webpack-cli/serve" "^1.3.0" colorette "^1.2.1" - commander "^6.2.0" + commander "^7.0.0" enquirer "^2.3.6" execa "^5.0.0" fastest-levenshtein "^1.0.12" @@ -11752,10 +11734,10 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.19.0: - version "5.19.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.19.0.tgz#1a5fee84dd63557e68336b0774ac4a1c81aa2c73" - integrity sha512-egX19vAQ8fZ4cVYtA9Y941eqJtcZAK68mQq87MMv+GTXKZOc3TpKBBxdGX+HXUYlquPxiluNsJ1VHvwwklW7CQ== +webpack@^5.24.2: + version "5.24.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.2.tgz#33790dad631e8b639f4246d762e257720875fe54" + integrity sha512-uxxKYEY4kMNjP+D2Y+8aw5Vd7ar4pMuKCNemxV26ysr1nk0YDiQTylg9U3VZIdkmI0YHa0uC8ABxL+uGxGWWJg== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -11766,7 +11748,7 @@ webpack@^5.19.0: browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.7.0" - es-module-lexer "^0.3.26" + es-module-lexer "^0.4.0" eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -11775,7 +11757,6 @@ webpack@^5.19.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - pkg-dir "^5.0.0" schema-utils "^3.0.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.1" @@ -11803,10 +11784,10 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" -whatwg-fetch@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz#605a2cd0a7146e5db141e29d1c62ab84c0c4c868" - integrity sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A== +whatwg-fetch@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.1.tgz#93bc4005af6c2cc30ba3e42ec3125947c8f54ed3" + integrity sha512-IEmN/ZfmMw6G1hgZpVd0LuZXOQDisrMOZrzYd5x3RAK4bMPlJohKUZWZ9t/QsTvH0dV9TbPDcc2OSuIDcihnHA== whatwg-mimetype@^2.3.0: version "2.3.0" @@ -11886,10 +11867,10 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -workerpool@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" - integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== wrap-ansi@^3.0.1: version "3.0.1" @@ -12044,7 +12025,12 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@13.1.2, yargs-parser@^13.1.2: +yargs-parser@20.2.4, yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -12052,11 +12038,6 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-parser@^15.0.1: version "15.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" @@ -12083,7 +12064,20 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.2.2, yargs@^13.3.2: +yargs@16.2.0, yargs@^16.0.0, yargs@^16.1.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^13.2.2, yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== @@ -12133,19 +12127,6 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^16.0.0, yargs@^16.1.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"