From 0f5286360e3bf7ff96cca8ec994c8d71d24eb03c Mon Sep 17 00:00:00 2001 From: Jared Noble Date: Mon, 30 Sep 2024 09:29:27 -0700 Subject: [PATCH] merge master --- asset/src/__lib/DateReaderAPISlicer.ts | 2 +- asset/src/elasticsearch_bulk/schema.ts | 4 +- asset/src/elasticsearch_reader_api/api.ts | 4 +- .../elasticsearch_reader_api/interfaces.ts | 4 +- asset/src/elasticsearch_reader_api/schema.ts | 6 +- asset/src/elasticsearch_sender_api/api.ts | 2 +- .../elasticsearch_sender_api/interfaces.ts | 8 +- asset/src/elasticsearch_sender_api/schema.ts | 6 +- asset/src/spaces_reader_api/api.ts | 2 +- eslint.config.js | 5 +- jest.config.js | 15 +- package.json | 2 +- .../elasticsearch-asset-apis/jest.config.js | 15 +- .../ElasticsearchBulkSender.ts | 5 +- .../src/elasticsearch-bulk-sender/index.ts | 2 +- .../elasticsearch-bulk-sender/interfaces.ts | 2 +- .../ElasticsearchReaderAPI.ts | 26 +- .../ElasticsearchReaderClient.ts | 8 +- .../SpacesReaderClient.ts | 22 +- .../algorithms/date-helpers.ts | 8 +- .../algorithms/dateSlicer.ts | 3 +- .../algorithms/id-helpers.ts | 138 +++++- .../algorithms/idSlicer.ts | 12 +- .../src/elasticsearch-reader-api/index.ts | 6 +- .../elasticsearch-reader-api/interfaces.ts | 60 +-- .../test/bulk-send-spec.ts | 2 +- .../test/date-range/date_slicer_fn-spec.ts | 8 +- .../test/date-range/starting_point-spec.ts | 21 +- .../test/helpers/mock-client.ts | 3 +- .../test/reader-api-spec.ts | 93 +++- test/elasticsearch_bulk/processor-spec.ts | 2 +- test/helpers/mock_client.ts | 3 +- test/id_reader/schema-spec.ts | 18 +- test/id_reader/slicer-spec.ts | 2 +- test/spaces_reader/fetcher-spec.ts | 251 +++++----- yarn.lock | 461 ++++++++++-------- 36 files changed, 727 insertions(+), 504 deletions(-) diff --git a/asset/src/__lib/DateReaderAPISlicer.ts b/asset/src/__lib/DateReaderAPISlicer.ts index 9ea574740..f2a7efe8c 100644 --- a/asset/src/__lib/DateReaderAPISlicer.ts +++ b/asset/src/__lib/DateReaderAPISlicer.ts @@ -13,7 +13,7 @@ export class DateReaderAPISlicer extends ParallelSlicer { protected api!: ElasticsearchReaderAPI; protected hasUpdated = false; protected startTime = moment().toISOString(); - slicerRanges!: DateSlicerRanges|undefined; + slicerRanges!: DateSlicerRanges | undefined; async initialize(recoveryData: SlicerRecoveryData[]): Promise { // NOTE ORDER MATTERS diff --git a/asset/src/elasticsearch_bulk/schema.ts b/asset/src/elasticsearch_bulk/schema.ts index 3bde37322..82971f758 100644 --- a/asset/src/elasticsearch_bulk/schema.ts +++ b/asset/src/elasticsearch_bulk/schema.ts @@ -9,7 +9,7 @@ import { DEFAULT_API_NAME } from '../elasticsearch_sender_api/interfaces.js'; export const schema: AnyObject = { size: { doc: 'the maximum number of docs it will take at a time, anything past it will be split up and sent' - + 'note that the value should be even, the first doc will be the index data and then the next is the data', + + 'note that the value should be even, the first doc will be the index data and then the next is the data', default: 500, format(val: unknown): void { if (!isNumber(val)) throw new Error(`Invalid parameter size, it must be of type number, was given ${getTypeOf(val)}`); @@ -59,7 +59,7 @@ export const schema: AnyObject = { }, update_fields: { doc: 'if you are updating the documents, you can specify fields to update here (it should be an array ' - + 'containing all the field names you want updated), it defaults to sending the entire document', + + 'containing all the field names you want updated), it defaults to sending the entire document', default: [], format: Array }, diff --git a/asset/src/elasticsearch_reader_api/api.ts b/asset/src/elasticsearch_reader_api/api.ts index ec085f6b1..e22421ec5 100644 --- a/asset/src/elasticsearch_reader_api/api.ts +++ b/asset/src/elasticsearch_reader_api/api.ts @@ -9,7 +9,7 @@ import { } from '@terascope/elasticsearch-asset-apis'; export default class ElasticsearchReaderAPIFactory extends APIFactory< -ElasticsearchReaderAPI, Partial + ElasticsearchReaderAPI, Partial > { // TODO: this needs more validation validateConfig(config: unknown): ESReaderOptions { @@ -30,7 +30,7 @@ ElasticsearchReaderAPI, Partial async create( _name: string, overrideConfigs: Partial - ): Promise<{ client: ElasticsearchReaderAPI, config: AnyObject }> { + ): Promise<{ client: ElasticsearchReaderAPI; config: AnyObject }> { const config = this.validateConfig(Object.assign({}, this.apiConfig, overrideConfigs)); const { connection } = config; const { client: esClient } = await this.context.apis.foundation.createClient({ diff --git a/asset/src/elasticsearch_reader_api/interfaces.ts b/asset/src/elasticsearch_reader_api/interfaces.ts index af9cd0f80..2da7a843d 100644 --- a/asset/src/elasticsearch_reader_api/interfaces.ts +++ b/asset/src/elasticsearch_reader_api/interfaces.ts @@ -4,5 +4,5 @@ import { ESReaderOptions, ElasticsearchReaderAPI } from '@terascope/elasticsearc export const DEFAULT_API_NAME = 'elasticsearch_reader_api'; export interface ElasticsearchReaderAPIConfig extends ESReaderOptions, APIConfig {} export type ElasticReaderFactoryAPI = APIFactoryRegistry< -ElasticsearchReaderAPI, ElasticsearchReaderAPIConfig -> + ElasticsearchReaderAPI, ElasticsearchReaderAPIConfig +>; diff --git a/asset/src/elasticsearch_reader_api/schema.ts b/asset/src/elasticsearch_reader_api/schema.ts index 90d76acca..a4df94a8f 100644 --- a/asset/src/elasticsearch_reader_api/schema.ts +++ b/asset/src/elasticsearch_reader_api/schema.ts @@ -303,7 +303,7 @@ export default class Schema extends ConvictSchema } } -function geoPointValidation(point: string | null):void { +function geoPointValidation(point: string | null): void { if (!point) return; if (typeof point !== 'string') throw new Error('Invalid geo_point, must be a string IF specified'); @@ -317,7 +317,7 @@ function geoPointValidation(point: string | null):void { if (longitude > 180 || longitude < -180) throw new Error(`Invalid longitude parameter, was given ${longitude}, should be >= -180 and <= 180`); } -function checkUnits(unit: string | null):void { +function checkUnits(unit: string | null): void { if (!unit) return; if (!isString(unit)) throw new Error('Invalid parameter, must be a string IF specified'); @@ -332,7 +332,7 @@ function checkUnits(unit: string | null):void { if (!has(unitOptions, unit)) throw new Error('Invalid unit type, did not have a proper unit of measurement (ie m, km, yd, ft)'); } -function validGeoDistance(distance: string | null):void { +function validGeoDistance(distance: string | null): void { if (!distance) return; if (typeof distance !== 'string') throw new Error('Invalid geo_distance parameter, must be a string IF specified'); diff --git a/asset/src/elasticsearch_sender_api/api.ts b/asset/src/elasticsearch_sender_api/api.ts index 982f341d9..2c8a634c5 100644 --- a/asset/src/elasticsearch_sender_api/api.ts +++ b/asset/src/elasticsearch_sender_api/api.ts @@ -31,7 +31,7 @@ export default class ElasticsearchSenderAPI extends APIFactory async create( _name: string, overrideConfig: Partial - ): Promise<{ client: ElasticsearchBulkSender, config: ElasticsearchAPISenderConfig }> { + ): Promise<{ client: ElasticsearchBulkSender; config: ElasticsearchAPISenderConfig }> { const apiConfig = this.validateConfig(Object.assign({}, this.apiConfig, overrideConfig)); const { api_name, ...config } = apiConfig; diff --git a/asset/src/elasticsearch_sender_api/interfaces.ts b/asset/src/elasticsearch_sender_api/interfaces.ts index 036aae9ee..e876cae92 100644 --- a/asset/src/elasticsearch_sender_api/interfaces.ts +++ b/asset/src/elasticsearch_sender_api/interfaces.ts @@ -1,18 +1,18 @@ import { APIConfig, APIFactoryRegistry, AnyObject } from '@terascope/job-components'; import { ElasticsearchBulkSender, ElasticsearchSenderConfig } from '@terascope/elasticsearch-asset-apis'; -export type ElasticSenderAPI = APIFactoryRegistry +export type ElasticSenderAPI = APIFactoryRegistry; export const DEFAULT_API_NAME = 'elasticsearch_sender_api'; export interface SenderConfig extends APIConfig { - connection: string + connection: string; index?: string; size?: number; } export interface ValidSenderConfig extends APIConfig { - connection: string + connection: string; size: number; index?: string; } @@ -32,7 +32,7 @@ export interface ElasticsearchAPISenderConfig { script_file?: string; script?: string; script_params: AnyObject; - _key?: string + _key?: string; } export interface ElasticsearchSenderAPI extends ElasticsearchSenderConfig, APIConfig {} diff --git a/asset/src/elasticsearch_sender_api/schema.ts b/asset/src/elasticsearch_sender_api/schema.ts index 57a2c4df7..b03ff6201 100644 --- a/asset/src/elasticsearch_sender_api/schema.ts +++ b/asset/src/elasticsearch_sender_api/schema.ts @@ -10,7 +10,7 @@ const newSchema: AnyObject = cloneDeep(schema); newSchema.size = { doc: 'the maximum number of docs it will take at a time, anything past it will be split up and sent' - + 'note that the value should be even, the first doc will be the index data and then the next is the data', + + 'note that the value should be even, the first doc will be the index data and then the next is the data', default: 500, format(val: any) { if (isNaN(val)) { @@ -56,7 +56,9 @@ export default class Schema extends ConvictSchema job.operations.forEach((op) => { if (op._op === 'routed_sender') { apiConfigs.filter((config) => config._name === op.api_name && config.connection === 'default') - .forEach((config) => { [config.connection] = Object.values(op.routing); }); + .forEach((config) => { + [config.connection] = Object.values(op.routing); + }); } }); } diff --git a/asset/src/spaces_reader_api/api.ts b/asset/src/spaces_reader_api/api.ts index 155101e1f..2e3958f59 100644 --- a/asset/src/spaces_reader_api/api.ts +++ b/asset/src/spaces_reader_api/api.ts @@ -32,7 +32,7 @@ export default class SpacesReaderAPI extends APIFactory - ): Promise<{ client: ElasticsearchReaderAPI, config: SpacesAPIConfig }> { + ): Promise<{ client: ElasticsearchReaderAPI; config: SpacesAPIConfig }> { const config = this.validateConfig(Object.assign({}, this.apiConfig, overrideConfigs)); const emitter = this.context.apis.foundation.getSystemEvents(); const spacesArgs = { config, logger: this.logger, emitter }; diff --git a/eslint.config.js b/eslint.config.js index 0a88213df..68ecc4d6a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,3 @@ import eslintConfig from '@terascope/eslint-config'; -// need to probably put this in original eslint-config -// don't lint the dist folder -eslintConfig[0].ignores.push('dist/', '**/dist/**'); -export default eslintConfig +export default eslintConfig; diff --git a/jest.config.js b/jest.config.js index 2c74225cd..12245f445 100644 --- a/jest.config.js +++ b/jest.config.js @@ -33,13 +33,14 @@ export default { preset: 'ts-jest', extensionsToTreatAsEsm: ['.ts'], transform: { - '\\.[jt]sx?$': ['ts-jest', { - isolatedModules: true, - tsconfig: './tsconfig.json', - diagnostics: true, - pretty: true, - useESM: true - }] + '\\.[jt]sx?$': ['ts-jest', + { + isolatedModules: true, + tsconfig: './tsconfig.json', + diagnostics: true, + pretty: true, + useESM: true + }] }, globals: { ignoreDirectories: ['dist'], diff --git a/package.json b/package.json index e1e5a1598..bc4c26668 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@terascope/data-types": "^1.1.0", "@terascope/elasticsearch-api": "^4.1.0", "@terascope/elasticsearch-asset-apis": "^1.0.3", - "@terascope/eslint-config": "^1.0.0", + "@terascope/eslint-config": "^1.1.0", "@terascope/job-components": "^1.3.1", "@terascope/scripts": "1.1.2", "@terascope/teraslice-state-storage": "^1.1.0", diff --git a/packages/elasticsearch-asset-apis/jest.config.js b/packages/elasticsearch-asset-apis/jest.config.js index bd7c4debd..64bcad5b1 100644 --- a/packages/elasticsearch-asset-apis/jest.config.js +++ b/packages/elasticsearch-asset-apis/jest.config.js @@ -14,13 +14,14 @@ export default { '^(\\.{1,2}/.*)\\.js$': '$1', }, transform: { - '\\.[jt]sx?$': ['ts-jest', { - isolatedModules: true, - tsconfig: './tsconfig.json', - diagnostics: true, - pretty: true, - useESM: true - }] + '\\.[jt]sx?$': ['ts-jest', + { + isolatedModules: true, + tsconfig: './tsconfig.json', + diagnostics: true, + pretty: true, + useESM: true + }] }, testTimeout: 60 * 1000 }; diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/ElasticsearchBulkSender.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/ElasticsearchBulkSender.ts index 703b25adf..6d070d2a5 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/ElasticsearchBulkSender.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/ElasticsearchBulkSender.ts @@ -107,7 +107,10 @@ export class ElasticsearchBulkSender implements RouteSenderAPI { return meta; } - update(meta: Partial, record: DataEntity):elasticAPI.BulkRecord { + update( + meta: Partial, + record: DataEntity + ): elasticAPI.BulkRecord { const data = this.addUpdateMethod(record); if (this.config.upsert) { diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/index.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/index.ts index ef060fe2c..858f127b9 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/index.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/index.ts @@ -7,7 +7,7 @@ export * from './ElasticsearchBulkSender.js'; export * from './interfaces.js'; interface BulkAPIArgs { - config: ElasticsearchSenderConfig, + config: ElasticsearchSenderConfig; client: elasticAPI.Client; } diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/interfaces.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/interfaces.ts index 1aef06d0a..a91222ac2 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/interfaces.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-bulk-sender/interfaces.ts @@ -14,7 +14,7 @@ export interface ElasticsearchSenderConfig { script_file?: string; script?: string; script_params?: AnyObject; - _key?: string + _key?: string; } export interface ScriptConfig { diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderAPI.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderAPI.ts index 4060794e0..190f43644 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderAPI.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderAPI.ts @@ -47,7 +47,7 @@ export class ElasticsearchReaderAPI { * we should expose this because in some cases * it might be an optimization to set this externally */ - windowSize: number|undefined = undefined; + windowSize: number | undefined = undefined; protected readonly dateFormat: string; protected readonly emitter: EventEmitter; recordsFetched = 0; @@ -95,7 +95,7 @@ export class ElasticsearchReaderAPI { * slow ES queries down significantly, refs: * https://github.com/terascope/elasticsearch-assets/issues/948 */ - async fetch(queryParams: ReaderSlice = {}): Promise { + async fetch(queryParams: ReaderSlice = {}): Promise { if (this.config.useSimpleFetch) { return this.simpleFetch(queryParams); } @@ -120,7 +120,7 @@ export class ElasticsearchReaderAPI { } const _fetch = async (): - Promise => { + Promise => { const query = buildQuery(this.config, { ...queryParams, count: querySize }); @@ -169,7 +169,7 @@ export class ElasticsearchReaderAPI { return result; } - async simpleFetch(queryParams: ReaderSlice = {}): Promise { + async simpleFetch(queryParams: ReaderSlice = {}): Promise { // attempt to get window if not set if (!this.windowSize) await this.setWindowSize(); @@ -190,7 +190,7 @@ export class ElasticsearchReaderAPI { * @param result the object returned that contains the search results * @returns the number of records returned by the search */ - _getResultSize(result: DataEntity[]|DataFrame|Buffer): number { + _getResultSize(result: DataEntity[] | DataFrame | Buffer): number { let resultSize; if (Buffer.isBuffer(result)) { const json = result.toJSON(); @@ -207,7 +207,7 @@ export class ElasticsearchReaderAPI { _searchRequest(query: ClientParams.SearchParams, fullResponse: true): Promise; async _searchRequest( query: ClientParams.SearchParams, fullResponse?: boolean - ): Promise { + ): Promise { return this.client._searchRequest( query, fullResponse @@ -409,8 +409,8 @@ export class ElasticsearchReaderAPI { if (recoveryData && recoveryData.length > 0) { // TODO: verify what retryData is // real retry of executionContext here, need to reformat retry data - const parsedRetry: (string|undefined)[] = recoveryData.map((obj) => { - const slice = (obj.lastSlice as ReaderSlice|undefined); + const parsedRetry: (string | undefined)[] = recoveryData.map((obj) => { + const slice = obj.lastSlice as ReaderSlice | undefined; // when we get here there should only be one key if (slice?.keys?.length === 1) { return slice.keys[0]; @@ -459,7 +459,7 @@ export class ElasticsearchReaderAPI { * slicer instance, then each "range" should be passed into * {@link ElasticsearchReaderAPI.makeDateSlicerFromRange} */ - async makeDateSlicerRanges(config: Omit): Promise { + async makeDateSlicerRanges(config: Omit): Promise { this.validateDateSlicerConfig(config); const { lifecycle, @@ -472,7 +472,7 @@ export class ElasticsearchReaderAPI { const recoveryData = config.recoveryData?.map( (slice) => slice.lastSlice - ).filter(Boolean) as ReaderSlice[]|undefined || []; + ).filter(Boolean) as ReaderSlice[] | undefined || []; if (isPersistent) { // we need to interval to get starting dates @@ -613,7 +613,7 @@ export class ElasticsearchReaderAPI { }; if (isPersistent) { - const windowState = config.windowState as WindowState|undefined; + const windowState = config.windowState as WindowState | undefined; if (!windowState || !windowState.checkin) { throw new Error(`Invalid parameter windowState, must provide a valid windowState in "persistent" mode, got ${getTypeOf(windowState)}`); } @@ -651,7 +651,7 @@ export class ElasticsearchReaderAPI { }); } - async determineDateRanges(): Promise<{ start: FetchDate; limit: FetchDate; }> { + async determineDateRanges(): Promise<{ start: FetchDate; limit: FetchDate }> { const [start, limit] = await Promise.all([ this.getIndexDate(this.config.start, 'start'), this.getIndexDate(this.config.end, 'end') @@ -659,7 +659,7 @@ export class ElasticsearchReaderAPI { return { start, limit }; } - private async getIndexDate(date: string|null|undefined, order: string): Promise { + private async getIndexDate(date: string | null | undefined, order: string): Promise { // we have a date, parse and return it if (date) return parseDate(date); // we are in auto, so we determine each part diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderClient.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderClient.ts index 96b4206f1..b5ced06c0 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderClient.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/ElasticsearchReaderClient.ts @@ -15,8 +15,8 @@ export class ElasticsearchReaderClient implements ReaderClient { constructor( elasticsearchClient: Client, clientConfig: { - connection?: string - index: string + connection?: string; + index: string; }, logger: Logger, ) { @@ -56,7 +56,7 @@ export class ElasticsearchReaderClient implements ReaderClient { query: ClientParams.SearchParams, responseType: FetchResponseType, typeConfig?: DataTypeConfig - ): Promise { + ): Promise { if (responseType === FetchResponseType.data_entities) { return this._searchRequest(query, false); } @@ -95,7 +95,7 @@ export class ElasticsearchReaderClient implements ReaderClient { async _searchRequest( query: ClientParams.SearchParams, fullResponse?: boolean - ): Promise> { + ): Promise> { if (fullResponse) { return this.fullResponseClient.search( query as any diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/SpacesReaderClient.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/SpacesReaderClient.ts index b991b0121..0078e162f 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/SpacesReaderClient.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/SpacesReaderClient.ts @@ -44,7 +44,7 @@ export class SpacesReaderClient implements ReaderClient { getRequestOptions( query: AnyObject, - format?: 'json'|'dfjson' + format?: 'json' | 'dfjson' ): OptionsOfJSONResponseBody { const { token, @@ -82,16 +82,16 @@ export class SpacesReaderClient implements ReaderClient { protected async makeRequest( query: AnyObject, format?: 'json' - ): Promise + ): Promise; protected async makeRequest( query: AnyObject, format: 'dfjson' - ): Promise + ): Promise; protected async makeRequest( query: AnyObject, - format?: 'json'|'dfjson' - ): Promise { - let response: Response; + format?: 'json' | 'dfjson' + ): Promise { + let response: Response; try { response = await got.post( @@ -134,7 +134,7 @@ export class SpacesReaderClient implements ReaderClient { protected translateSearchQuery(queryConfig: ClientParams.SearchParams): AnyObject { const { config } = this; - const fields = get(queryConfig, '_source', null) as string[]|null; + const fields = get(queryConfig, '_source', null) as string[] | null; const dateFieldName = this.config.date_field_name; // put in the dateFieldName into fields so date reader can work @@ -294,7 +294,7 @@ export class SpacesReaderClient implements ReaderClient { async search( query: ClientParams.SearchParams, responseType: FetchResponseType, - ): Promise { + ): Promise { if (responseType === FetchResponseType.data_entities) { return this._searchRequest(query, false); } @@ -319,13 +319,13 @@ export class SpacesReaderClient implements ReaderClient { _searchRequest( query: ClientParams.SearchParams, fullResponse: true, - format?: 'json'|'dfjson' + format?: 'json' | 'dfjson' ): Promise; async _searchRequest( query: ClientParams.SearchParams, fullResponse?: boolean, - format?: 'json'|'dfjson' - ): Promise { + format?: 'json' | 'dfjson' + ): Promise { const searchQuery = this.translateSearchQuery(query); if (fullResponse) { if (format === 'dfjson') { diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/date-helpers.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/date-helpers.ts index 4bb115567..8f075c5b2 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/date-helpers.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/date-helpers.ts @@ -265,10 +265,10 @@ export function divideRange( // used by stream processing export function delayedStreamSegment( - startTime: moment.Moment | Date | string|undefined, + startTime: moment.Moment | Date | string | undefined, processingInterval: ParsedInterval, latencyInterval: ParsedInterval -): { start: moment.Moment, limit: moment.Moment } { +): { start: moment.Moment; limit: moment.Moment } { const now = moment.utc(startTime); const delayedLimit = moment.utc(now).subtract( @@ -395,7 +395,7 @@ interface DateRanges { holes?: DateConfig[]; } -type RDate = ReaderSlice|undefined; +type RDate = ReaderSlice | undefined; export async function determineDateSlicerRange( { @@ -405,7 +405,7 @@ export async function determineDateSlicerRange( getInterval }: StartPointConfig, id: number, -): Promise { +): Promise { let newDates: DateRanges; // we are running in recovery if (recoveryData && recoveryData.length > 0) { diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/dateSlicer.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/dateSlicer.ts index c3b806159..313b637c9 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/dateSlicer.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/dateSlicer.ts @@ -44,7 +44,8 @@ function splitTime( ) { let diff = Math.floor(end.diff(start) / 2); - if (moment.utc(start).add(diff, 'ms').isAfter(limit)) { + if (moment.utc(start).add(diff, 'ms') + .isAfter(limit)) { diff = moment.utc(limit).diff(start); } diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/id-helpers.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/id-helpers.ts index 89f3fc113..411ed505f 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/id-helpers.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/id-helpers.ts @@ -6,13 +6,137 @@ import { ReaderSlice } from '../interfaces.js'; -export const base64url = Object.freeze(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\-', '_']); - -export const base64 = Object.freeze(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', - 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\-', '_', '+', '/']); +export const base64url = Object.freeze(['a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '\-', + '_']); + +export const base64 = Object.freeze(['a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '\-', + '_', + '+', + '/']); export const hexadecimal = Object.freeze(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']); diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/idSlicer.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/idSlicer.ts index 79a7c24e8..dc67b0809 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/idSlicer.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/algorithms/idSlicer.ts @@ -112,7 +112,7 @@ function compareKeys(key: string, retryKey: string): boolean { return false; } -type KeyGenerator = Generator; +type KeyGenerator = Generator; function* recurse(baseArray: readonly string[], str: string): KeyGenerator { for (const key of baseArray) { @@ -120,7 +120,7 @@ function* recurse(baseArray: readonly string[], str: string): KeyGenerator { const resp = yield newStr; if (!resp) { - yield* recurse(baseArray, newStr); + yield * recurse(baseArray, newStr); } } return null; @@ -138,10 +138,10 @@ function* recurseDepth( const resp = yield newStr; if (!resp) { - yield* recurse(baseArray, newStr); + yield * recurse(baseArray, newStr); } } else { - yield* recurse(baseArray, newStr); + yield * recurse(baseArray, newStr); } } return null; @@ -155,7 +155,7 @@ function* generateKeys( const processKey = yield startKey; if (!processKey) { - yield* recurse(baseArray, startKey); + yield * recurse(baseArray, startKey); } } @@ -168,7 +168,7 @@ function* generateKeyDepth( startingKeyDepth: number ): KeyGenerator { for (const startKey of keysArray) { - yield* recurseDepth(baseArray, startKey, startingKeyDepth); + yield * recurseDepth(baseArray, startKey, startingKeyDepth); } return null; diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/index.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/index.ts index 60ad8969a..2a591ab82 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/index.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/index.ts @@ -15,8 +15,8 @@ export * from './algorithms/index.js'; export * from './utils.js'; export interface ElasticsearchAPIArgs { - config: ESReaderOptions, - client: ReaderClient, + config: ESReaderOptions; + client: ReaderClient; logger?: Logger; emitter?: EventEmitter; } @@ -34,7 +34,7 @@ export function createElasticsearchReaderAPI({ } interface SpacesAPIArgs { - config: SpacesAPIConfig, + config: SpacesAPIConfig; logger?: Logger; emitter?: EventEmitter; } diff --git a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/interfaces.ts b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/interfaces.ts index baebc037b..938011de7 100644 --- a/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/interfaces.ts +++ b/packages/elasticsearch-asset-apis/src/elasticsearch-reader-api/interfaces.ts @@ -41,7 +41,7 @@ export interface ReaderClient { query: ClientParams.SearchParams, responseType: FetchResponseType, typeConfig?: DataTypeConfig - ): Promise; + ): Promise; /** * Used to make a custom search request @@ -56,7 +56,7 @@ export interface ReaderClient { _searchRequest( query: ClientParams.SearchParams, fullResponse?: boolean - ): Promise; + ): Promise; /** * Gets the elasticsearch major server version, @@ -107,14 +107,14 @@ export interface DateSlicerRange { /** * This may be null sometimes */ - readonly count: number|null; + readonly count: number | null; } /** * This used a list of all of the Date slicer ranges, the * index of the range will correlate with the slicer instance */ -export type DateSlicerRanges = readonly (DateSlicerRange|null)[]; +export type DateSlicerRanges = readonly (DateSlicerRange | null)[]; export interface DateSegments { start: moment.Moment; @@ -174,7 +174,7 @@ export interface ReaderSlice extends ReaderSliceMetadata { } export interface CountFn { - (args: Pick) : Promise; + (args: Pick): Promise; } /** @@ -201,13 +201,13 @@ export type RecoveryData = { request_worker?: string; /** The slice request can contain any metadata */ [prop: string]: any; - } -} + }; +}; export interface IDSlicerConfig { - slicerID: number, - numOfSlicers: number, - recoveryData?: RecoveryData[], + slicerID: number; + numOfSlicers: number; + recoveryData?: RecoveryData[]; } export interface DateConfig { @@ -220,9 +220,9 @@ export interface SlicerArgs { size: number; subsliceByKey?: boolean; subsliceKeyThreshold?: number; - idFieldName?: string, + idFieldName?: string; keyType?: IDType; - startingKeyDepth?: number, + startingKeyDepth?: number; interval?: ParsedInterval; latencyInterval?: ParsedInterval; lifecycle: LifeCycle; @@ -256,7 +256,7 @@ export interface SlicerDates extends DateSegments { /** What a date slicer fn will return */ export type DateSlicerResults = ReaderSlice | (readonly ReaderSlice[]) | null; -export type IDSlicerResults = ReaderSlice|null; +export type IDSlicerResults = ReaderSlice | null; export type ParsedInterval = readonly [step: number, unit: moment.unitOfTime.Base]; @@ -266,25 +266,25 @@ export type DateSlicerMetadata = Record; export type DateSlicerMetadataHook = (metadata: DateSlicerMetadata) => Promise; -export type LifeCycle = 'once'|'persistent'; +export type LifeCycle = 'once' | 'persistent'; export interface DateSlicerArgs { - lifecycle: LifeCycle, - slicerID: number, - numOfSlicers: number, + lifecycle: LifeCycle; + slicerID: number; + numOfSlicers: number; recoveryData?: RecoveryData[]; - windowState?: WindowState, - startTime?: Date | string + windowState?: WindowState; + startTime?: Date | string; hook?: DateSlicerMetadataHook; } export interface DateSlicerConfig { - lifecycle: LifeCycle, - slicerID: number, - numOfSlicers: number, - recoveryData?: RecoveryData[], - windowState?: WindowState, - startTime?: Date | string, + lifecycle: LifeCycle; + slicerID: number; + numOfSlicers: number; + recoveryData?: RecoveryData[]; + windowState?: WindowState; + startTime?: Date | string; hook?: DateSlicerMetadataHook; } @@ -293,19 +293,19 @@ export interface GetIntervalResult { * This is interval for the slicer, it will be null if * there is no data for this time period */ - readonly interval: ParsedInterval|null; + readonly interval: ParsedInterval | null; /** * This is interval for the slicer, it will be null * when the interval in config is not set to auto */ - readonly count: number|null; + readonly count: number | null; } /** * This function is used to determine the interval for each slicer, */ export interface GetIntervalFn { - (dates: DateSegments, slicerId: number): GetIntervalResult|Promise; + (dates: DateSegments, slicerId: number): GetIntervalResult | Promise; } export interface StartPointConfig { @@ -353,7 +353,7 @@ export interface ESReaderOptions { connection: string; starting_key_depth: number; response_type?: FetchResponseType; - type_config?: DataTypeConfig + type_config?: DataTypeConfig; useSimpleFetch?: boolean; } @@ -363,7 +363,7 @@ export interface SpacesAPIConfig extends ESReaderOptions { timeout: number; headers?: AnyObject; retry?: number; - variables?: xLuceneVariables + variables?: xLuceneVariables; caCertificate?: string; } diff --git a/packages/elasticsearch-asset-apis/test/bulk-send-spec.ts b/packages/elasticsearch-asset-apis/test/bulk-send-spec.ts index 93b7bb9d9..7178379d6 100644 --- a/packages/elasticsearch-asset-apis/test/bulk-send-spec.ts +++ b/packages/elasticsearch-asset-apis/test/bulk-send-spec.ts @@ -17,7 +17,7 @@ describe('elasticsearch bulk sender module', () => { let apiClient: elasticAPI.Client; let harness: WorkerTestHarness; let client: any; - let type: string|undefined; + let type: string | undefined; beforeAll(async () => { client = await makeClient(); diff --git a/packages/elasticsearch-asset-apis/test/date-range/date_slicer_fn-spec.ts b/packages/elasticsearch-asset-apis/test/date-range/date_slicer_fn-spec.ts index 565d8c611..66e2e057d 100644 --- a/packages/elasticsearch-asset-apis/test/date-range/date_slicer_fn-spec.ts +++ b/packages/elasticsearch-asset-apis/test/date-range/date_slicer_fn-spec.ts @@ -17,7 +17,7 @@ import { MockClient } from '../helpers/index.js'; interface TestConfig { slicers?: number; - lifecycle?: 'once'|'persistent'; + lifecycle?: 'once' | 'persistent'; id?: number; config?: AnyObject; client?: MockClient; @@ -181,7 +181,8 @@ describe('date slicer function', () => { }; const expectedResults = { start: moment(moment.utc(start).format(dateFormatSeconds)).toISOString(), - end: moment(moment.utc(end).add(1, 's').format(dateFormatSeconds)).toISOString(), + end: moment(moment.utc(end).add(1, 's') + .format(dateFormatSeconds)).toISOString(), limit: moment(moment.utc(limit).format(dateFormatSeconds)).toISOString(), count: 2000, holes: [] @@ -212,7 +213,8 @@ describe('date slicer function', () => { }; const expectedResults = { start: moment(moment.utc(start).format(dateFormatSeconds)).toISOString(), - end: moment(moment.utc(start).add(1, 's').format(dateFormatSeconds)).toISOString(), + end: moment(moment.utc(start).add(1, 's') + .format(dateFormatSeconds)).toISOString(), limit: moment(moment.utc(limit).format(dateFormatSeconds)).toISOString(), count: 2000, holes: [] diff --git a/packages/elasticsearch-asset-apis/test/date-range/starting_point-spec.ts b/packages/elasticsearch-asset-apis/test/date-range/starting_point-spec.ts index 4b27fe0ca..c6af112c4 100644 --- a/packages/elasticsearch-asset-apis/test/date-range/starting_point-spec.ts +++ b/packages/elasticsearch-asset-apis/test/date-range/starting_point-spec.ts @@ -127,8 +127,10 @@ describe('determineDateSlicerRanges', () => { const recoveryStart = moment.utc(halfWay).subtract(30, 's'); const recoveryEnd = moment.utc(recoveryStart).add(interval[0], interval[1]); - const holeStart = moment.utc(recoveryEnd).add(10, 's').format(dateFormatSeconds); - const holeEnd = moment.utc(holeStart).add(10, 's').format(dateFormatSeconds); + const holeStart = moment.utc(recoveryEnd).add(10, 's') + .format(dateFormatSeconds); + const holeEnd = moment.utc(holeStart).add(10, 's') + .format(dateFormatSeconds); const holes = [{ start: holeStart, end: holeEnd }]; const config: StartPointConfig = { @@ -171,7 +173,8 @@ describe('determineDateSlicerRanges', () => { const recoveryEnd = moment.utc(recoveryStart).add(interval[0], interval[1]); const holeStart = moment.utc(recoveryEnd).format(dateFormatSeconds); - const holeEnd = moment.utc(holeStart).add(10, 's').format(dateFormatSeconds); + const holeEnd = moment.utc(holeStart).add(10, 's') + .format(dateFormatSeconds); const holes = [{ start: holeStart, end: holeEnd }]; const config: StartPointConfig = { @@ -213,9 +216,11 @@ describe('determineDateSlicerRanges', () => { const recoveryStart = moment.utc(halfWay).subtract(30, 's'); const recoveryEnd = moment.utc(recoveryStart).add(interval[0], interval[1]); - const holeStart = moment.utc(recoveryEnd).add(10, 's').format(dateFormatSeconds); + const holeStart = moment.utc(recoveryEnd).add(10, 's') + .format(dateFormatSeconds); // hole jumps past limit - const holeEnd = moment.utc(holeStart).add(5, 'm').format(dateFormatSeconds); + const holeEnd = moment.utc(holeStart).add(5, 'm') + .format(dateFormatSeconds); const holes = [{ start: holeStart, end: holeEnd }]; const config: StartPointConfig = { @@ -258,7 +263,8 @@ describe('determineDateSlicerRanges', () => { const recoveryStart = moment.utc(halfWay).subtract(30, 's'); const recoveryEnd = moment.utc(recoveryStart).add(interval[0], interval[1]); - const holeStart = moment.utc(recoveryEnd).add(10, 's').format(dateFormatSeconds); + const holeStart = moment.utc(recoveryEnd).add(10, 's') + .format(dateFormatSeconds); // hole jumps past limit const holeEnd = moment.utc(limit).format(dateFormatSeconds); const holes = [{ start: holeStart, end: holeEnd }]; @@ -408,7 +414,8 @@ describe('determineDateSlicerRanges', () => { limit: moment.utc(firstSegmentLimit).format(dateFormatSeconds), holes: [], count: 100 - }, { + }, + { start: recoveryStartSlicerTwo.format(dateFormatSeconds), end: recoveryEndSlicerTwo.format(dateFormatSeconds), limit: moment.utc(endLimit).format(dateFormatSeconds), diff --git a/packages/elasticsearch-asset-apis/test/helpers/mock-client.ts b/packages/elasticsearch-asset-apis/test/helpers/mock-client.ts index f85b57e5e..bc2d57cda 100644 --- a/packages/elasticsearch-asset-apis/test/helpers/mock-client.ts +++ b/packages/elasticsearch-asset-apis/test/helpers/mock-client.ts @@ -23,7 +23,7 @@ interface BulkData { body: AnyObject[]; } -function getMeta(meta: AnyObject|undefined) { +function getMeta(meta: AnyObject | undefined) { if (meta == null) return false; if (meta.index) return 'index'; if (meta.create) return 'create'; @@ -134,7 +134,6 @@ export class MockClient { ); } - // eslint-disable-next-line class-methods-use-this async bulk(data: BulkData): Promise { validateBulk(data); return data; diff --git a/packages/elasticsearch-asset-apis/test/reader-api-spec.ts b/packages/elasticsearch-asset-apis/test/reader-api-spec.ts index a8d163607..623d0632c 100644 --- a/packages/elasticsearch-asset-apis/test/reader-api-spec.ts +++ b/packages/elasticsearch-asset-apis/test/reader-api-spec.ts @@ -38,7 +38,7 @@ describe('Reader API', () => { const evenIndex = makeIndex('even_spread'); const evenBulkData = evenSpread.data.map((obj) => DataEntity.make(obj, { _key: obj.uuid })); - let docType: string|undefined; + let docType: string | undefined; let client: any; let readerClient: ElasticsearchReaderClient; @@ -210,7 +210,7 @@ describe('Reader API', () => { ...defaultConfig }; - let warnMessage: undefined|string; + let warnMessage: undefined | string; const testLogger = { info: () => {}, @@ -400,7 +400,7 @@ describe('Reader API', () => { ...defaultConfig }; - let warnMessage: undefined|string; + let warnMessage: undefined | string; const testLogger = { info: () => {}, @@ -579,7 +579,7 @@ describe('Reader API', () => { // TODO this is badly named method, might need to change in the future it('can verify index', async () => { - let warnMessage: undefined|string; + let warnMessage: undefined | string; const testLogger = { info: () => {}, @@ -668,57 +668,100 @@ describe('Reader API', () => { expect(results).toEqual([ { keys: [ - 'a', 'h', 'o', 'v', - 'C', 'J', 'Q', 'X', - '4', '_' + 'a', + 'h', + 'o', + 'v', + 'C', + 'J', + 'Q', + 'X', + '4', + '_' ], count: 126 }, { keys: [ - 'b', 'i', 'p', - 'w', 'D', 'K', - 'R', 'Y', '5' + 'b', + 'i', + 'p', + 'w', + 'D', + 'K', + 'R', + 'Y', + '5' ], count: 146 }, { keys: [ - 'c', 'j', 'q', - 'x', 'E', 'L', - 'S', 'Z', '6' + 'c', + 'j', + 'q', + 'x', + 'E', + 'L', + 'S', + 'Z', + '6' ], count: 116 }, { keys: [ - 'd', 'k', 'r', - 'y', 'F', 'M', - 'T', '0', '7' + 'd', + 'k', + 'r', + 'y', + 'F', + 'M', + 'T', + '0', + '7' ], count: 199 }, { keys: [ - 'e', 'l', 's', - 'z', 'G', 'N', - 'U', '1', '8' + 'e', + 'l', + 's', + 'z', + 'G', + 'N', + 'U', + '1', + '8' ], count: 189 }, { keys: [ - 'f', 'm', 't', - 'A', 'H', 'O', - 'V', '2', '9' + 'f', + 'm', + 't', + 'A', + 'H', + 'O', + 'V', + '2', + '9' ], count: 170 }, { keys: [ - 'g', 'n', 'u', - 'B', 'I', 'P', - 'W', '3', '-' + 'g', + 'n', + 'u', + 'B', + 'I', + 'P', + 'W', + '3', + '-' ], count: 54 } diff --git a/test/elasticsearch_bulk/processor-spec.ts b/test/elasticsearch_bulk/processor-spec.ts index 98ef3bb39..a8ded3684 100644 --- a/test/elasticsearch_bulk/processor-spec.ts +++ b/test/elasticsearch_bulk/processor-spec.ts @@ -11,7 +11,7 @@ import { } from '../helpers/index.js'; interface ClientCalls { - [key: string]: ClientParams.BulkParams + [key: string]: ClientParams.BulkParams; } describe('elasticsearch_bulk', () => { diff --git a/test/helpers/mock_client.ts b/test/helpers/mock_client.ts index 5b51b6096..ee13aab39 100644 --- a/test/helpers/mock_client.ts +++ b/test/helpers/mock_client.ts @@ -22,7 +22,7 @@ interface BulkData { body: AnyObject[]; } -function getMeta(meta: AnyObject|undefined) { +function getMeta(meta: AnyObject | undefined) { if (meta == null) return false; if (meta.index) return 'index'; if (meta.create) return 'create'; @@ -133,7 +133,6 @@ export default class MockClient { ); } - // eslint-disable-next-line class-methods-use-this async bulk(data: BulkData): Promise { validateBulk(data); return data; diff --git a/test/id_reader/schema-spec.ts b/test/id_reader/schema-spec.ts index 9bbf88413..3bde7501c 100644 --- a/test/id_reader/schema-spec.ts +++ b/test/id_reader/schema-spec.ts @@ -203,37 +203,43 @@ describe('id_reader Schema', () => { slicers: 1, operations: [{ _op: 'id_reader', type: docType, index, key_range: ['a', 'b'] - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); const job2 = newTestJobConfig({ slicers: 2, operations: [{ _op: 'id_reader', type: docType, index, key_range: ['a'] - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); const job3 = newTestJobConfig({ slicers: 4, operations: [{ _op: 'id_reader', type: docType, index, key_type: 'hexadecimal' - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); const job4 = newTestJobConfig({ slicers: 20, operations: [{ _op: 'id_reader', type: docType, index, key_type: 'hexadecimal' - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); const job5 = newTestJobConfig({ slicers: 20, operations: [{ _op: 'id_reader', type: docType, index, key_type: 'base64url' - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); const job6 = newTestJobConfig({ slicers: 70, operations: [{ _op: 'id_reader', type: docType, index, key_type: 'base64url' - }, { _op: 'noop' }] + }, + { _op: 'noop' }] }); await expect(testValidation(job1)).toResolve(); diff --git a/test/id_reader/slicer-spec.ts b/test/id_reader/slicer-spec.ts index 2b5dd6644..c8b91cc64 100644 --- a/test/id_reader/slicer-spec.ts +++ b/test/id_reader/slicer-spec.ts @@ -61,7 +61,7 @@ describe('id_reader slicer', () => { async function makeSlicerTest( opConfig: Record = {}, numOfSlicers = 1, - recoveryData: SlicerRecoveryData[]|undefined = undefined + recoveryData: SlicerRecoveryData[] | undefined = undefined ) { const config = Object.assign({}, defaults, opConfig); const job = newTestJobConfig({ diff --git a/test/spaces_reader/fetcher-spec.ts b/test/spaces_reader/fetcher-spec.ts index 8bca6cc44..d5be65fc4 100644 --- a/test/spaces_reader/fetcher-spec.ts +++ b/test/spaces_reader/fetcher-spec.ts @@ -44,128 +44,135 @@ describe('spaces_reader fetcher', () => { describe('when querying against a spaces server', () => { describe.each([ - ['range query', { - query: { - q: 'date:[2017-09-23T18:07:14.332Z TO 2017-09-25T18:07:14.332Z}', - size: 100 - }, - opConfig: { - token, - size: 100000, - interval: '30s', - delay: '30s', - date_field_name: 'date', - }, - msg: { - count: 100, - start: '2017-09-23T18:07:14.332Z', - end: '2017-09-25T18:07:14.332Z', - } - }], - ['lucene query', { - query: { - q: '(foo:bar)', - size: 5000, - }, - opConfig: { - query: 'foo:bar', - token, - size: 100000, - date_field_name: 'date', - }, - msg: { - count: 5000, - } - }], - ['lucene query with url characters', { - query: { - q: '(foo:"bar+baz")', - size: 5000, - }, - opConfig: { - query: 'foo:"bar+baz"', - token, - size: 100000, - date_field_name: 'date', - }, - msg: { - count: 5000, - } - }], - ['lucene query with fields', { - query: { - q: '(test:query OR other:thing AND bytes:>=2000)', - size: 100, - fields: 'foo,bar,date' - }, - opConfig: { - query: 'test:query OR other:thing AND bytes:>=2000', - token, - size: 100000, - date_field_name: 'date', - fields: ['foo', 'bar'], - }, - msg: { - count: 100, - } - }], - ['lucene query with date range', { - query: { - q: 'example_date:[2017-09-23T18:07:14.332Z TO 2017-09-25T18:07:14.332Z} AND (foo:bar)', - size: 200, - }, - opConfig: { - query: 'foo:bar', - token, - size: 100000, - date_field_name: 'example_date', - }, - msg: { - count: 200, - start: '2017-09-23T18:07:14.332Z', - end: '2017-09-25T18:07:14.332Z' - } - }], - ['lucene query with geo point query', { - query: { - q: '(foo:bar)', - size: 100, - geo_point: '52.3456,79.6784', - geo_distance: '200km' - }, - opConfig: { - query: 'foo:bar', - token, - size: 100000, - date_field_name: 'date', - geo_field: 'some_field', - geo_distance: '200km', - geo_point: '52.3456,79.6784', - }, - msg: { - count: 100 - } - }], - ['lucene query with geo bounding box query', { - query: { - q: '(foo:bar)', - size: 100000, - geo_box_top_left: '34.5234,79.42345', - geo_box_bottom_right: '54.5234,80.3456', - geo_sort_point: '52.3456,79.6784' - }, - opConfig: { - query: 'foo:bar', - token, - size: 100000, - date_field_name: 'date', - geo_field: 'some_field', - geo_box_top_left: '34.5234,79.42345', - geo_box_bottom_right: '54.5234,80.3456', - geo_sort_point: '52.3456,79.6784', - }, - msg: {} - }], + ['range query', + { + query: { + q: 'date:[2017-09-23T18:07:14.332Z TO 2017-09-25T18:07:14.332Z}', + size: 100 + }, + opConfig: { + token, + size: 100000, + interval: '30s', + delay: '30s', + date_field_name: 'date', + }, + msg: { + count: 100, + start: '2017-09-23T18:07:14.332Z', + end: '2017-09-25T18:07:14.332Z', + } + }], + ['lucene query', + { + query: { + q: '(foo:bar)', + size: 5000, + }, + opConfig: { + query: 'foo:bar', + token, + size: 100000, + date_field_name: 'date', + }, + msg: { + count: 5000, + } + }], + ['lucene query with url characters', + { + query: { + q: '(foo:"bar+baz")', + size: 5000, + }, + opConfig: { + query: 'foo:"bar+baz"', + token, + size: 100000, + date_field_name: 'date', + }, + msg: { + count: 5000, + } + }], + ['lucene query with fields', + { + query: { + q: '(test:query OR other:thing AND bytes:>=2000)', + size: 100, + fields: 'foo,bar,date' + }, + opConfig: { + query: 'test:query OR other:thing AND bytes:>=2000', + token, + size: 100000, + date_field_name: 'date', + fields: ['foo', 'bar'], + }, + msg: { + count: 100, + } + }], + ['lucene query with date range', + { + query: { + q: 'example_date:[2017-09-23T18:07:14.332Z TO 2017-09-25T18:07:14.332Z} AND (foo:bar)', + size: 200, + }, + opConfig: { + query: 'foo:bar', + token, + size: 100000, + date_field_name: 'example_date', + }, + msg: { + count: 200, + start: '2017-09-23T18:07:14.332Z', + end: '2017-09-25T18:07:14.332Z' + } + }], + ['lucene query with geo point query', + { + query: { + q: '(foo:bar)', + size: 100, + geo_point: '52.3456,79.6784', + geo_distance: '200km' + }, + opConfig: { + query: 'foo:bar', + token, + size: 100000, + date_field_name: 'date', + geo_field: 'some_field', + geo_distance: '200km', + geo_point: '52.3456,79.6784', + }, + msg: { + count: 100 + } + }], + ['lucene query with geo bounding box query', + { + query: { + q: '(foo:bar)', + size: 100000, + geo_box_top_left: '34.5234,79.42345', + geo_box_bottom_right: '54.5234,80.3456', + geo_sort_point: '52.3456,79.6784' + }, + opConfig: { + query: 'foo:bar', + token, + size: 100000, + date_field_name: 'date', + geo_field: 'some_field', + geo_box_top_left: '34.5234,79.42345', + geo_box_bottom_right: '54.5234,80.3456', + geo_sort_point: '52.3456,79.6784', + }, + msg: {} + }], ])('when performing a %s', (m, { query, opConfig: _opConfig, msg }) => { const opConfig = Object.assign({ diff --git a/yarn.lock b/yarn.lock index 2e851e23e..17f2a585f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -255,7 +255,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.8" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.21.0": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.21.0": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== @@ -318,11 +318,16 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.5.1": +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.11.0": version "4.11.0" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== +"@eslint/compat@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.1.1.tgz#5736523f5105c94dfae5f35e31debc38443722cd" + integrity sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA== + "@eslint/config-array@^0.18.0": version "0.18.0" resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" @@ -352,7 +357,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.11.1", "@eslint/js@^9.9.1": +"@eslint/js@9.11.1", "@eslint/js@^9.10.0": version "9.11.1" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.11.1.tgz#8bcb37436f9854b3d9a561440daf916acd940986" integrity sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA== @@ -698,6 +703,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -727,6 +737,17 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@stylistic/eslint-plugin@^2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.8.0.tgz#9fcbcf8b4b27cc3867eedce37b8c8fded1010107" + integrity sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow== + dependencies: + "@typescript-eslint/utils" "^8.4.0" + eslint-visitor-keys "^4.0.0" + espree "^10.1.0" + estraverse "^5.3.0" + picomatch "^4.0.2" + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -786,25 +807,28 @@ bluebird "^3.7.2" setimmediate "^1.0.5" -"@terascope/eslint-config@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@terascope/eslint-config/-/eslint-config-1.0.0.tgz#ba96af3ae236e733681a1102aa0f3ae06a67d779" - integrity sha512-knJ0Kh6G1YFt8MDxnKfILVrx3RMjY2j+QF2iB0rHcYHUE62I4PVcdbhtjvCcjEdvo1LPyvKyppN9L+/tIX6cyw== +"@terascope/eslint-config@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@terascope/eslint-config/-/eslint-config-1.1.0.tgz#07a720beacb7efb48dc1d5b01d585832e001df57" + integrity sha512-gAfV8x5FPbbCu+pwRgu0b+VJ3VKsLu8l/ziOnO2ATo4zZXhXulQDuPiYoz/ZPem/YdwYgqZDL1Hr2haZerBudQ== dependencies: - "@eslint/js" "^9.9.1" + "@eslint/compat" "^1.1.1" + "@eslint/js" "^9.10.0" + "@stylistic/eslint-plugin" "^2.8.0" "@types/eslint__js" "^8.42.3" - "@typescript-eslint/eslint-plugin" "^6.21.0" - "@typescript-eslint/parser" "^6.21.0" - eslint "^9.9.1" - eslint-config-airbnb "^19.0.4" - eslint-config-airbnb-base "^15.0.0" - eslint-plugin-import "~2.29.1" - eslint-plugin-jest "^28.8.0" - eslint-plugin-jsx-a11y "^6.9.0" - eslint-plugin-react "^7.35.0" + "@typescript-eslint/eslint-plugin" "^8.5.0" + "@typescript-eslint/parser" "^8.5.0" + eslint "^9.10.0" + eslint-plugin-import "~2.30.0" + eslint-plugin-jest "^28.8.3" + eslint-plugin-jest-dom "^5.4.0" + eslint-plugin-jsx-a11y "^6.10.0" + eslint-plugin-react "^7.36.0" eslint-plugin-react-hooks "^4.4.0" + eslint-plugin-testing-library "^6.3.0" + globals "^15.9.0" typescript "^5.2.2" - typescript-eslint "^8.3.0" + typescript-eslint "^8.5.0" "@terascope/fetch-github-release@^1.0.0": version "1.0.0" @@ -1279,7 +1303,7 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -1344,7 +1368,7 @@ dependencies: "@types/node" "*" -"@types/semver@^7.5.0": +"@types/semver@^7.3.12": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== @@ -1390,67 +1414,39 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.4.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz#188c65610ef875a086404b5bfe105df936b035da" - integrity sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw== +"@typescript-eslint/eslint-plugin@8.7.0", "@typescript-eslint/eslint-plugin@^8.5.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz#d0070f206daad26253bf00ca5b80f9b54f9e2dd0" + integrity sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.4.0" - "@typescript-eslint/type-utils" "8.4.0" - "@typescript-eslint/utils" "8.4.0" - "@typescript-eslint/visitor-keys" "8.4.0" + "@typescript-eslint/scope-manager" "8.7.0" + "@typescript-eslint/type-utils" "8.7.0" + "@typescript-eslint/utils" "8.7.0" + "@typescript-eslint/visitor-keys" "8.7.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/eslint-plugin@^6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@8.4.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.4.0.tgz#36b7cd7643a1c190d49dc0278192b2450f615a6f" - integrity sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA== - dependencies: - "@typescript-eslint/scope-manager" "8.4.0" - "@typescript-eslint/types" "8.4.0" - "@typescript-eslint/typescript-estree" "8.4.0" - "@typescript-eslint/visitor-keys" "8.4.0" - debug "^4.3.4" - -"@typescript-eslint/parser@^6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@8.7.0", "@typescript-eslint/parser@^8.5.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.7.0.tgz#a567b0890d13db72c7348e1d88442ea8ab4e9173" + integrity sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "8.7.0" + "@typescript-eslint/types" "8.7.0" + "@typescript-eslint/typescript-estree" "8.7.0" + "@typescript-eslint/visitor-keys" "8.7.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" "@typescript-eslint/scope-manager@8.4.0": version "8.4.0" @@ -1460,49 +1456,51 @@ "@typescript-eslint/types" "8.4.0" "@typescript-eslint/visitor-keys" "8.4.0" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== +"@typescript-eslint/scope-manager@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz#90ee7bf9bc982b9260b93347c01a8bc2b595e0b8" + integrity sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg== dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" + "@typescript-eslint/types" "8.7.0" + "@typescript-eslint/visitor-keys" "8.7.0" -"@typescript-eslint/type-utils@8.4.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz#4a91b5789f41946adb56d73e2fb4639fdcf37af7" - integrity sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A== +"@typescript-eslint/type-utils@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz#d56b104183bdcffcc434a23d1ce26cde5e42df93" + integrity sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ== dependencies: - "@typescript-eslint/typescript-estree" "8.4.0" - "@typescript-eslint/utils" "8.4.0" + "@typescript-eslint/typescript-estree" "8.7.0" + "@typescript-eslint/utils" "8.7.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== "@typescript-eslint/types@8.4.0": version "8.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.4.0.tgz#b44d6a90a317a6d97a3e5fabda5196089eec6171" integrity sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/types@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.7.0.tgz#21d987201c07b69ce7ddc03451d7196e5445ad19" + integrity sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + semver "^7.3.7" + tsutils "^3.21.0" "@typescript-eslint/typescript-estree@8.4.0": version "8.4.0" @@ -1518,20 +1516,45 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/typescript-estree@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz#6c7db6baa4380b937fa81466c546d052f362d0e8" + integrity sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg== + dependencies: + "@typescript-eslint/types" "8.7.0" + "@typescript-eslint/visitor-keys" "8.7.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/utils@8.7.0", "@typescript-eslint/utils@^8.4.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.7.0.tgz#cef3f70708b5b5fd7ed8672fc14714472bd8a011" + integrity sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.7.0" + "@typescript-eslint/types" "8.7.0" + "@typescript-eslint/typescript-estree" "8.7.0" -"@typescript-eslint/utils@8.4.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": +"@typescript-eslint/utils@^5.58.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": version "8.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.4.0.tgz#35c552a404858c853a1f62ba6df2214f1988afc3" integrity sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ== @@ -1541,13 +1564,13 @@ "@typescript-eslint/types" "8.4.0" "@typescript-eslint/typescript-estree" "8.4.0" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" "@typescript-eslint/visitor-keys@8.4.0": version "8.4.0" @@ -1557,6 +1580,14 @@ "@typescript-eslint/types" "8.4.0" eslint-visitor-keys "^3.4.3" +"@typescript-eslint/visitor-keys@8.7.0": + version "8.7.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz#5e46f1777f9d69360a883c1a56ac3c511c9659a8" + integrity sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ== + dependencies: + "@typescript-eslint/types" "8.7.0" + eslint-visitor-keys "^3.4.3" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1678,7 +1709,7 @@ array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: +array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -1712,7 +1743,7 @@ array.prototype.findlast@^1.2.5: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.3: +array.prototype.findlastindex@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== @@ -2232,11 +2263,6 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -2803,25 +2829,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-airbnb-base@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" - integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.5" - semver "^6.3.0" - -eslint-config-airbnb@^19.0.4: - version "19.0.4" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" - integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== - dependencies: - eslint-config-airbnb-base "^15.0.0" - object.assign "^4.1.2" - object.entries "^1.1.5" - eslint-import-resolver-node@^0.3.9: version "0.3.9" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" @@ -2831,44 +2838,53 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz#b99b211ca4318243f09661fae088f373ad5243c4" - integrity sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ== +eslint-module-utils@^2.9.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" -eslint-plugin-import@~2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== +eslint-plugin-import@~2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" + integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.9.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" tsconfig-paths "^3.15.0" -eslint-plugin-jest@^28.8.0: +eslint-plugin-jest-dom@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.4.0.tgz#03a5ea600f8af63f4fcd5de49ae83dc0e6aca325" + integrity sha512-yBqvFsnpS5Sybjoq61cJiUsenRkC9K32hYQBFS9doBR7nbQZZ5FyO+X7MlmfM1C48Ejx/qTuOCgukDUNyzKZ7A== + dependencies: + "@babel/runtime" "^7.16.3" + requireindex "^1.2.0" + +eslint-plugin-jest@^28.8.3: version "28.8.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz#c5699bba0ad06090ad613535e4f1572f4c2567c0" integrity sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ== dependencies: "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" -eslint-plugin-jsx-a11y@^6.9.0: +eslint-plugin-jsx-a11y@^6.10.0: version "6.10.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== @@ -2895,10 +2911,10 @@ eslint-plugin-react-hooks@^4.4.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.35.0: - version "7.35.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz#d32500d3ec268656d5071918bfec78cfd8b070ed" - integrity sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ== +eslint-plugin-react@^7.36.0: + version "7.37.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz#c21f64a32fc34df1eaeca571ec8f70bdc40dd20a" + integrity sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" @@ -2919,6 +2935,21 @@ eslint-plugin-react@^7.35.0: string.prototype.matchall "^4.0.11" string.prototype.repeat "^1.0.0" +eslint-plugin-testing-library@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.3.0.tgz#9c31a9941a860efdff3c06180151ab9c8142f685" + integrity sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA== + dependencies: + "@typescript-eslint/utils" "^5.58.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + eslint-scope@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.2.tgz#5cbb33d4384c9136083a71190d548158fe128f94" @@ -2927,7 +2958,7 @@ eslint-scope@^8.0.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== @@ -2937,7 +2968,7 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@^9.11.1, eslint@^9.9.1: +eslint@^9.10.0, eslint@^9.11.1: version "9.11.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.11.1.tgz#701e5fc528990153f9cef696d8427003b5206567" integrity sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg== @@ -3008,6 +3039,11 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -3469,6 +3505,11 @@ globals@^14.0.0: resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +globals@^15.9.0: + version "15.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.9.0.tgz#e9de01771091ffbc37db5714dab484f9f69ff399" + integrity sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA== + globalthis@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" @@ -3702,7 +3743,7 @@ ignore-walk@3.0.4: dependencies: minimatch "^3.0.4" -ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.1: +ignore@^5.1.1, ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== @@ -3874,7 +3915,7 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.13.0, is-core-module@^2.13.1: +is-core-module@^2.13.0, is-core-module@^2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== @@ -4944,13 +4985,6 @@ mimic-response@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -5127,7 +5161,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: +object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -5137,7 +5171,7 @@ object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5, object.entries@^1.1.8: +object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -5146,7 +5180,7 @@ object.entries@^1.1.5, object.entries@^1.1.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7, object.fromentries@^2.0.8: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -5156,7 +5190,7 @@ object.fromentries@^2.0.7, object.fromentries@^2.0.8: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.groupby@^1.0.1: +object.groupby@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -5165,7 +5199,7 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: +object.values@^1.1.6, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -5452,6 +5486,11 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -5740,6 +5779,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -5888,7 +5932,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -6109,16 +6153,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6212,14 +6247,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -6412,7 +6440,7 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: +ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== @@ -6458,11 +6486,23 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.4.0, tslib@^2.4.1, tslib@^2.6.2: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6556,14 +6596,14 @@ typedoc@^0.25.13: minimatch "^9.0.3" shiki "^0.14.7" -typescript-eslint@^8.3.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.4.0.tgz#3fa38bd279994cdb40ba9264ef5262a17cf4cfa0" - integrity sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw== +typescript-eslint@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.7.0.tgz#6c84f94013a0cc0074da7d639c2644eae20c3171" + integrity sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ== dependencies: - "@typescript-eslint/eslint-plugin" "8.4.0" - "@typescript-eslint/parser" "8.4.0" - "@typescript-eslint/utils" "8.4.0" + "@typescript-eslint/eslint-plugin" "8.7.0" + "@typescript-eslint/parser" "8.7.0" + "@typescript-eslint/utils" "8.7.0" typescript@^5.2.2: version "5.5.4" @@ -6770,16 +6810,7 @@ word-wrap@^1.2.5: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==