diff --git a/FAQ.md b/FAQ.md deleted file mode 100644 index 94ec93b5..00000000 --- a/FAQ.md +++ /dev/null @@ -1,29 +0,0 @@ -# FAQ - -## Angular Universal and pre-render - -By default, we use `axios` http client to make requests, but if you are using Angular Universal with pre-render feature, you need to use Angular's http client so that components are rendered correctly on page load. If you didn't use Angular's http client, components would might not contain your HTML in source of your page, although it would 'display' correctly to visitors. - -The reason is that Angular does not wait for http requests to finish unless they are made with their built-in clients. - -You may solve it by installing `` npm package and then injecting this service in your delivery client: - -``` -npm i kentico-kontent-angular-http-service -``` - -```typescript -import { AngularHttpService } from 'kentico-kontent-angular-http-service'; -``` - -```typescript -import { AngularHttpService } from 'kentico-kontent-angular-http-service'; - - constructor(angularHttpService: AngularHttpService) { - const deliveryClient = new DeliveryClient({ - environmentId: 'xxx', - httpService: angularHttpService - }); - } -``` - diff --git a/lib/client/delivery-client.ts b/lib/client/delivery-client.ts index 9bcf79ac..8a6018fa 100644 --- a/lib/client/delivery-client.ts +++ b/lib/client/delivery-client.ts @@ -12,7 +12,8 @@ import { TaxonomyQuery, LanguagesQuery, InitializeSyncQuery, - SyncChangesQuery + SyncChangesQuery, + UsedInQuery } from '../query'; import { sdkInfo } from '../sdk-info.generated'; import { IMappingService, MappingService, QueryService } from '../services'; @@ -137,4 +138,18 @@ export class DeliveryClient impl syncChanges(): SyncChangesQuery { return new SyncChangesQuery(this.config, this.queryService); } + + /** + * Item listing of where an asset is used + */ + assetUsedIn(assetCodename: string): UsedInQuery { + return new UsedInQuery(this.config, this.queryService, { entity: 'asset', codename: assetCodename }); + } + + /** + * Item listing of where a content item is used + */ + itemUsedIn(itemCodename: string): UsedInQuery { + return new UsedInQuery(this.config, this.queryService, { entity: 'contentItem', codename: itemCodename }); + } } diff --git a/lib/client/idelivery-client.interface.ts b/lib/client/idelivery-client.interface.ts index 305bfe09..834f2580 100644 --- a/lib/client/idelivery-client.interface.ts +++ b/lib/client/idelivery-client.interface.ts @@ -10,7 +10,8 @@ import { TaxonomyQuery, LanguagesQuery, InitializeSyncQuery, - SyncChangesQuery + SyncChangesQuery, + UsedInQuery } from '../query'; import { IMappingService } from '../services'; @@ -88,4 +89,14 @@ export interface IDeliveryClient * Gets query fetching delta updates of content items */ syncChanges(): SyncChangesQuery; + + /** + * Item listing of where an asset is used + */ + assetUsedIn(assetCodename: string): UsedInQuery; + + /** + * Item listing of where a content item is used + */ + itemUsedIn(itemCodename: string): UsedInQuery; } diff --git a/lib/contracts/contracts.ts b/lib/contracts/contracts.ts index ce88d028..0e033e0b 100644 --- a/lib/contracts/contracts.ts +++ b/lib/contracts/contracts.ts @@ -189,6 +189,24 @@ export namespace Contracts { export interface IItemsFeedContract extends IItemsWithModularContentContract {} + export interface IUsedInItemsContract { + items: IUsedInItemContract[]; + } + + export interface IUsedInItemContract { + system: { + id: string; + name: string; + codename: string; + language: string; + type: string; + collection: string; + workflow: string; + workflow_step: string; + last_modified: string; + }; + } + export interface IListContentItemsContract extends IItemsWithModularContentContract { pagination: IPaginationContract; } diff --git a/lib/mappers/index.ts b/lib/mappers/index.ts index b391844b..562654df 100644 --- a/lib/mappers/index.ts +++ b/lib/mappers/index.ts @@ -4,4 +4,5 @@ export * from './taxonomy.mapper'; export * from './type.mapper'; export * from './generic-element.mapper'; export * from './language.mapper'; +export * from './used-in.mapper'; export * from './sync.mapper'; diff --git a/lib/mappers/used-in.mapper.ts b/lib/mappers/used-in.mapper.ts new file mode 100644 index 00000000..d06633c2 --- /dev/null +++ b/lib/mappers/used-in.mapper.ts @@ -0,0 +1,20 @@ +import { Contracts } from '../contracts'; +import { ClientTypes, IUsedInItemRecord } from '../models'; + +export class UsedInMapper { + mapUsedInItem(response: Contracts.IUsedInItemContract): IUsedInItemRecord { + return { + system: { + id: response.system.id, + name: response.system.name, + codename: response.system.codename, + language: response.system.language, + type: response.system.type, + collection: response.system.collection, + workflow: response.system.workflow, + workflowStep: response.system.workflow_step, + lastModified: response.system.last_modified + } + }; + } +} diff --git a/lib/models/item-models.ts b/lib/models/item-models.ts index 9ea6137f..5b1d0dc0 100644 --- a/lib/models/item-models.ts +++ b/lib/models/item-models.ts @@ -166,6 +166,20 @@ export interface IItemFeedQueryConfig extends IQueryConfig { disableItemLinking?: boolean; } +export interface IUsedInItemRecord { + readonly system: { + readonly id: string; + readonly name: string; + readonly codename: string; + readonly language: TClientTypes['languageCodenames']; + readonly type: TClientTypes['contentTypeCodenames']; + readonly collection: TClientTypes['collectionCodenames']; + readonly workflow: TClientTypes['workflowCodenames']; + readonly workflowStep: TClientTypes['worfklowStepCodenames']; + readonly lastModified: string; + }; +} + export type ClientTypes = { readonly contentItemType: IContentItem; readonly contentTypeCodenames: string; diff --git a/lib/models/responses.ts b/lib/models/responses.ts index 2e60278e..d320821a 100644 --- a/lib/models/responses.ts +++ b/lib/models/responses.ts @@ -4,10 +4,11 @@ import { IKontentListAllResponse, IKontentListResponse, IKontentResponse } from import { IPagination } from './common/pagination.class'; import { IContentType } from './content-type-models'; import { IGenericElementOption } from './element-models'; -import { IContentItem, IContentItemsContainer } from './item-models'; +import { IContentItem, IContentItemsContainer, IUsedInItemRecord } from './item-models'; import { ILanguage } from './language-models'; import { IContentItemDelta } from './sync-models'; import { ITaxonomyGroup } from './taxonomy-models'; +import { ClientTypes } from './item-models'; export namespace Responses { export interface IListContentTypesResponse extends IKontentListResponse { @@ -35,6 +36,15 @@ export namespace Responses { options: IGenericElementOption[]; } + export interface IUsedInResponse extends IKontentListResponse { + items: IUsedInItemRecord[]; + } + + export interface IUsedInAllResponse extends IKontentListAllResponse { + items: IUsedInItemRecord[]; + responses: IDeliveryNetworkResponse, Contracts.IUsedInItemsContract>[]; + } + export interface IListItemsFeedResponse< TContentItem extends IContentItem = IContentItem, TLinkedItemType extends IContentItem = IContentItem diff --git a/lib/query/common/base-item-listing-query.class.ts b/lib/query/common/base-item-listing-query.class.ts index 5ab31f3c..be9fcdde 100644 --- a/lib/query/common/base-item-listing-query.class.ts +++ b/lib/query/common/base-item-listing-query.class.ts @@ -1,7 +1,9 @@ +import { ElementType, Elements } from '../../elements'; import { IDeliveryClientConfig } from '../../config'; import { ClientTypes, Filters, + IContentItem, IKontentListAllResponse, IKontentListResponse, IQueryConfig, @@ -17,7 +19,7 @@ export abstract class BaseItemListingQuery< TAllResponse extends IKontentListAllResponse, TQueryConfig extends IQueryConfig, TContract -> extends BaseListingQuery { +> extends BaseListingQuery { constructor(protected config: IDeliveryClientConfig, protected queryService: QueryService) { super(config, queryService); } @@ -204,4 +206,69 @@ export abstract class BaseItemListingQuery< this.parameters.push(new Parameters.SkipParameter(skip)); return this; } + + protected linkItemsInRte(allContentItems: IContentItem[]): void { + for (const item of allContentItems) { + for (const elementKey of Object.keys(item.elements)) { + const element = item.elements[elementKey]; + + if (element.type === ElementType.ModularContent) { + const linkedItemElement = element as Elements.LinkedItemsElement; + + // We create separate array for ordered items because the 'linkedItems' from response might be incomplete + // e.g. If 4 items are linked, only 2 might be available in the response. Rest needs to be mapped from all available items + const orderedLinkedItems: IContentItem[] = []; + + for (const linkedItemCodename of linkedItemElement.value) { + let linkedItem: IContentItem | undefined; + + const linkedItemInElement = linkedItemElement.linkedItems.find( + (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() + ); + if (linkedItemInElement) { + linkedItem = linkedItemInElement; + } else { + linkedItem = allContentItems.find( + (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() + ); + } + + if (linkedItem) { + orderedLinkedItems.push(linkedItem); + } + } + + // Replace linked items with the ordered one + linkedItemElement.linkedItems = orderedLinkedItems; + } + + if (element.type === ElementType.RichText) { + const orderedLinkedItems: IContentItem[] = []; + + const richTextElement = element as Elements.RichTextElement; + + for (const linkedItemCodename of richTextElement.linkedItemCodenames) { + let linkedItem: IContentItem | undefined; + + const linkedItemInElement = richTextElement.linkedItems.find( + (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() + ); + if (linkedItemInElement) { + linkedItem = linkedItemInElement; + } else { + linkedItem = allContentItems.find( + (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() + ); + } + + if (linkedItem) { + orderedLinkedItems.push(linkedItem); + } + } + + richTextElement.linkedItems = orderedLinkedItems; + } + } + } + } } diff --git a/lib/query/common/base-listing-query.class.ts b/lib/query/common/base-listing-query.class.ts index f2e1c260..61455149 100644 --- a/lib/query/common/base-listing-query.class.ts +++ b/lib/query/common/base-listing-query.class.ts @@ -1,4 +1,3 @@ -import { ElementType, Elements } from '../../elements'; import { IDeliveryClientConfig } from '../../config'; import { continuationTokenHeaderName, @@ -9,13 +8,27 @@ import { IListAllQueryConfig, IQueryConfig, IContentItem, - ClientTypes + ClientTypes, + IUsedInItemRecord, + IContentType, + ITaxonomyGroup, + IContentItemDelta, + ILanguage } from '../../models'; import { QueryService } from '../../services'; import { BaseQuery } from './base-query.class'; +type ListingRecord = + | IContentItem + | IContentItemDelta + | IUsedInItemRecord + | IContentType + | ILanguage + | ITaxonomyGroup; + export abstract class BaseListingQuery< TClientTypes extends ClientTypes, + TRecord extends ListingRecord, TResponse extends IKontentListResponse, TAllResponse extends IKontentListAllResponse, TQueryConfig extends IQueryConfig, @@ -76,72 +89,7 @@ export abstract class BaseListingQuery< } protected abstract allResponseFactory( - items: IContentItem[], + items: TRecord[], responses: IDeliveryNetworkResponse[] ): TAllResponse; - - protected linkItemsInRte(allContentItems: IContentItem[]): void { - for (const item of allContentItems) { - for (const elementKey of Object.keys(item.elements)) { - const element = item.elements[elementKey]; - - if (element.type === ElementType.ModularContent) { - const linkedItemElement = element as Elements.LinkedItemsElement; - - // We create separate array for ordered items because the 'linkedItems' from response might be incomplete - // e.g. If 4 items are linked, only 2 might be available in the response. Rest needs to be mapped from all available items - const orderedLinkedItems: IContentItem[] = []; - - for (const linkedItemCodename of linkedItemElement.value) { - let linkedItem: IContentItem | undefined; - - const linkedItemInElement = linkedItemElement.linkedItems.find( - (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() - ); - if (linkedItemInElement) { - linkedItem = linkedItemInElement; - } else { - linkedItem = allContentItems.find( - (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() - ); - } - - if (linkedItem) { - orderedLinkedItems.push(linkedItem); - } - } - - // Replace linked items with the ordered one - linkedItemElement.linkedItems = orderedLinkedItems; - } - - if (element.type === ElementType.RichText) { - const orderedLinkedItems: IContentItem[] = []; - - const richTextElement = element as Elements.RichTextElement; - - for (const linkedItemCodename of richTextElement.linkedItemCodenames) { - let linkedItem: IContentItem | undefined; - - const linkedItemInElement = richTextElement.linkedItems.find( - (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() - ); - if (linkedItemInElement) { - linkedItem = linkedItemInElement; - } else { - linkedItem = allContentItems.find( - (m) => m.system.codename.toLowerCase() === linkedItemCodename.toLowerCase() - ); - } - - if (linkedItem) { - orderedLinkedItems.push(linkedItem); - } - } - - richTextElement.linkedItems = orderedLinkedItems; - } - } - } - } } diff --git a/lib/query/index.ts b/lib/query/index.ts index 91c3a680..7d64bea9 100644 --- a/lib/query/index.ts +++ b/lib/query/index.ts @@ -10,3 +10,4 @@ export * from './items-feed/items-feed-query.class'; export * from './language/languages-query.class'; export * from './sync/initialize-sync-query.class'; export * from './sync/sync-changes-query.class'; +export * from './used-in/used-in-query.class'; diff --git a/lib/query/items-feed/items-feed-query.class.ts b/lib/query/items-feed/items-feed-query.class.ts index 3395084e..c0319611 100644 --- a/lib/query/items-feed/items-feed-query.class.ts +++ b/lib/query/items-feed/items-feed-query.class.ts @@ -32,7 +32,7 @@ export class ItemsFeedQuery< * Gets only item of given type * @param type Codename of type to get */ - type(type: string): this { + type(type: TClientTypes['contentTypeCodenames']): this { this.parameters.push(new Filters.TypeFilter(type)); return this; } @@ -42,7 +42,7 @@ export class ItemsFeedQuery< * I.e. get items of either 'Actor' or 'Movie' type * @param types Types to get */ - types(types: string[]): this { + types(types: TClientTypes['contentTypeCodenames'][]): this { this.parameters.push(new Filters.TypeFilter(types)); return this; } @@ -51,7 +51,7 @@ export class ItemsFeedQuery< * Gets only item from given collection * @param collection Codename of collection to get */ - collection(collection: string): this { + collection(collection: TClientTypes['collectionCodenames']): this { this.parameters.push(new Filters.CollectionFilter(collection)); return this; } @@ -61,7 +61,7 @@ export class ItemsFeedQuery< * I.e. get items of either 'default' or 'christmas-campaign' collection * @param collections Collections to get */ - collections(collections: string[]): this { + collections(collections: TClientTypes['collectionCodenames'][]): this { this.parameters.push(new Filters.CollectionFilter(collections)); return this; } @@ -70,7 +70,7 @@ export class ItemsFeedQuery< * Language codename * @param languageCodename Codename of the language */ - languageParameter(languageCodename: string): this { + languageParameter(languageCodename: TClientTypes['languageCodenames']): this { this.parameters.push(new Parameters.LanguageParameter(languageCodename)); return this; } @@ -79,7 +79,7 @@ export class ItemsFeedQuery< * Used to limit the number of elements returned by query. * @param elementCodenames Array of element codenames to fetch */ - elementsParameter(elementCodenames: string[]): this { + elementsParameter(elementCodenames: TClientTypes['elementCodenames'][]): this { this.parameters.push(new Parameters.ElementsParameter(elementCodenames)); return this; } @@ -88,7 +88,7 @@ export class ItemsFeedQuery< * Used to exclude elements returned by query. * @param elementCodenames Array of element codenames to exclude */ - excludeElementsParameter(elementCodenames: string[]): this { + excludeElementsParameter(elementCodenames: TClientTypes['elementCodenames'][]): this { this.parameters.push(new Parameters.ExcludeElementsParameter(elementCodenames)); return this; } diff --git a/lib/query/language/languages-query.class.ts b/lib/query/language/languages-query.class.ts index 55ecbc49..99887ffa 100644 --- a/lib/query/language/languages-query.class.ts +++ b/lib/query/language/languages-query.class.ts @@ -1,11 +1,19 @@ import { Contracts } from '../../contracts'; import { IDeliveryClientConfig } from '../../config'; -import { ClientTypes, IDeliveryNetworkResponse, ILanguagesQueryConfig, Parameters, Responses } from '../../models'; +import { + ClientTypes, + IDeliveryNetworkResponse, + ILanguage, + ILanguagesQueryConfig, + Parameters, + Responses +} from '../../models'; import { QueryService } from '../../services'; import { BaseListingQuery } from '../common/base-listing-query.class'; export class LanguagesQuery extends BaseListingQuery< TClientTypes, + ILanguage, Responses.IListLanguagesResponse, Responses.IListLanguagesAllResponse, ILanguagesQueryConfig, @@ -69,7 +77,7 @@ export class LanguagesQuery extends BaseListin } protected allResponseFactory( - items: any[], + items: ILanguage[], responses: IDeliveryNetworkResponse< Responses.IListLanguagesResponse, Contracts.IListLanguagesContract diff --git a/lib/query/sync/sync-changes-query.class.ts b/lib/query/sync/sync-changes-query.class.ts index eac92a66..9d85f735 100644 --- a/lib/query/sync/sync-changes-query.class.ts +++ b/lib/query/sync/sync-changes-query.class.ts @@ -1,11 +1,12 @@ import { Contracts } from '../../contracts'; import { IDeliveryClientConfig } from '../../config'; -import { IItemQueryConfig, IDeliveryNetworkResponse, Responses, ClientTypes } from '../../models'; +import { IItemQueryConfig, IDeliveryNetworkResponse, Responses, ClientTypes, IContentItemDelta } from '../../models'; import { QueryService } from '../../services'; import { BaseListingQuery } from '../common/base-listing-query.class'; export class SyncChangesQuery extends BaseListingQuery< TClientTypes, + IContentItemDelta, Responses.ISyncChangesResponse, Responses.ISyncChangesAllResponse, IItemQueryConfig, @@ -41,7 +42,7 @@ export class SyncChangesQuery extends BaseList } protected allResponseFactory( - items: any[], + items: IContentItemDelta[], responses: IDeliveryNetworkResponse[] ): Responses.ISyncChangesAllResponse { return { diff --git a/lib/query/taxonomy/taxonomies-query.class.ts b/lib/query/taxonomy/taxonomies-query.class.ts index efe50710..346af79b 100644 --- a/lib/query/taxonomy/taxonomies-query.class.ts +++ b/lib/query/taxonomy/taxonomies-query.class.ts @@ -1,11 +1,19 @@ import { Contracts } from '../../contracts'; import { IDeliveryClientConfig } from '../../config'; -import { ClientTypes, IDeliveryNetworkResponse, ITaxonomyQueryConfig, Parameters, Responses } from '../../models'; +import { + ClientTypes, + IDeliveryNetworkResponse, + ITaxonomyGroup, + ITaxonomyQueryConfig, + Parameters, + Responses +} from '../../models'; import { QueryService } from '../../services'; import { BaseListingQuery } from '../common/base-listing-query.class'; export class TaxonomiesQuery extends BaseListingQuery< TClientTypes, + ITaxonomyGroup, Responses.IListTaxonomiesResponse, Responses.IListTaxonomiesAllResponse, ITaxonomyQueryConfig, @@ -60,7 +68,7 @@ export class TaxonomiesQuery extends BaseListi } protected allResponseFactory( - items: any[], + items: ITaxonomyGroup[], responses: IDeliveryNetworkResponse< Responses.IListTaxonomiesResponse, Contracts.IListTaxonomyGroupsContract diff --git a/lib/query/type/multiple-type-query.class.ts b/lib/query/type/multiple-type-query.class.ts index 4285047a..ad8a4828 100644 --- a/lib/query/type/multiple-type-query.class.ts +++ b/lib/query/type/multiple-type-query.class.ts @@ -1,11 +1,19 @@ import { Contracts } from '../../contracts'; import { IDeliveryClientConfig } from '../../config'; -import { ClientTypes, IContentTypeQueryConfig, IDeliveryNetworkResponse, Parameters, Responses } from '../../models'; +import { + ClientTypes, + IContentType, + IContentTypeQueryConfig, + IDeliveryNetworkResponse, + Parameters, + Responses +} from '../../models'; import { QueryService } from '../../services'; import { BaseListingQuery } from '../common/base-listing-query.class'; export class MultipleTypeQuery extends BaseListingQuery< TClientTypes, + IContentType, Responses.IListContentTypesResponse, Responses.IListContentTypesAllResponse, IContentTypeQueryConfig, @@ -73,7 +81,7 @@ export class MultipleTypeQuery extends BaseLis } protected allResponseFactory( - items: any[], + items: IContentType[], responses: IDeliveryNetworkResponse< Responses.IListContentTypesResponse, Contracts.IListContentTypeContract diff --git a/lib/query/used-in/used-in-query.class.ts b/lib/query/used-in/used-in-query.class.ts new file mode 100644 index 00000000..0f8390de --- /dev/null +++ b/lib/query/used-in/used-in-query.class.ts @@ -0,0 +1,126 @@ +import { Contracts } from '../../contracts'; +import { IDeliveryClientConfig } from '../../config'; +import { + Filters, + IDeliveryNetworkResponse, + Parameters, + Responses, + IItemFeedQueryConfig, + ClientTypes, + IUsedInItemRecord, + IQueryConfig +} from '../../models'; +import { QueryService } from '../../services'; +import { BaseListingQuery } from '../common/base-listing-query.class'; + +export type UsedInSetup = { + readonly entity: 'asset' | 'contentItem'; + readonly codename: string; +}; + +export class UsedInQuery extends BaseListingQuery< + TClientTypes, + IUsedInItemRecord, + Responses.IUsedInResponse, + Responses.IUsedInAllResponse, + IQueryConfig, + Contracts.IUsedInItemsContract +> { + protected _queryConfig: IQueryConfig = {}; + + constructor( + protected readonly config: IDeliveryClientConfig, + protected readonly queryService: QueryService, + protected readonly setup: UsedInSetup + ) { + super(config, queryService); + } + + /** + * Gets only item of given type + * @param type Codename of type to get + */ + type(type: TClientTypes['contentTypeCodenames']): this { + this.parameters.push(new Filters.TypeFilter(type)); + return this; + } + + /** + * Gets items of given types (logical or) + * I.e. get items of either 'Actor' or 'Movie' type + * @param types Types to get + */ + types(types: TClientTypes['contentTypeCodenames'][]): this { + this.parameters.push(new Filters.TypeFilter(types)); + return this; + } + + /** + * Gets only item from given collection + * @param collection Codename of collection to get + */ + collection(collection: TClientTypes['collectionCodenames']): this { + this.parameters.push(new Filters.CollectionFilter(collection)); + return this; + } + + /** + * Gets items from given collections (logical or) + * I.e. get items of either 'default' or 'christmas-campaign' collection + * @param collections Collections to get + */ + collections(collections: TClientTypes['collectionCodenames'][]): this { + this.parameters.push(new Filters.CollectionFilter(collections)); + return this; + } + + /** + * Language codename + * @param languageCodename Codename of the language + */ + languageParameter(languageCodename: TClientTypes['languageCodenames']): this { + this.parameters.push(new Parameters.LanguageParameter(languageCodename)); + return this; + } + + toPromise(): Promise< + IDeliveryNetworkResponse, Contracts.IUsedInItemsContract> + > { + return this.queryService.getUsedIn(this.getUrl(), this._queryConfig ?? {}); + } + + getUrl(): string { + const action = `/${this.setup.entity === 'asset' ? 'assets' : 'items'}/${this.setup.codename}/used-in`; + + // add default language is necessary + this.processDefaultLanguageParameter(); + + //process client level archived item exclusion + this.processExcludeArchivedItemsParameter(); + + return super.resolveUrlInternal(action); + } + + /** + * Used to configure query + * @param queryConfig Query configuration + */ + queryConfig(queryConfig: IItemFeedQueryConfig): this { + this._queryConfig = queryConfig; + return this; + } + + map(json: any): Responses.IUsedInResponse { + return this.queryService.mappingService.usedInResponse(json); + } + + protected allResponseFactory( + items: IUsedInItemRecord[], + responses: IDeliveryNetworkResponse, Contracts.IUsedInItemsContract>[] + ): Responses.IUsedInAllResponse { + return { + items: items, + responses: responses + }; + } +} diff --git a/lib/services/delivery-query.service.ts b/lib/services/delivery-query.service.ts index e84cd6b4..19fd7a80 100644 --- a/lib/services/delivery-query.service.ts +++ b/lib/services/delivery-query.service.ts @@ -1,5 +1,4 @@ import { IHttpService } from '@kontent-ai/core-sdk'; - import { IDeliveryClientConfig } from '../config'; import { Contracts } from '../contracts'; import { @@ -74,6 +73,20 @@ export class QueryService extends BaseDelivery return this.mapNetworkResponse(this.mappingService.itemsFeedResponse(response.data), response); } + /** + * Gets single used in response. Might not contain all used in references. + * @param url Url + * @param queryConfig Query configuration + */ + async getUsedIn( + url: string, + queryConfig: IItemQueryConfig + ): Promise, Contracts.IUsedInItemsContract>> { + const response = await this.getResponseAsync(url, queryConfig); + + return this.mapNetworkResponse(this.mappingService.usedInResponse(response.data), response); + } + /** * Gets multiple items from given url * @param url Url used to get multiple items diff --git a/lib/services/mapping.service.ts b/lib/services/mapping.service.ts index 07fdada5..e64c9ff5 100644 --- a/lib/services/mapping.service.ts +++ b/lib/services/mapping.service.ts @@ -1,6 +1,14 @@ import { IDeliveryClientConfig } from '../config'; import { Contracts } from '../contracts'; -import { SyncMapper, GenericElementMapper, ItemMapper, LanguageMapper, TaxonomyMapper, TypeMapper } from '../mappers'; +import { + SyncMapper, + GenericElementMapper, + ItemMapper, + LanguageMapper, + TaxonomyMapper, + TypeMapper, + UsedInMapper +} from '../mappers'; import { Responses, IContentItem, IPagination, ClientTypes } from '../models'; export interface IMappingService { @@ -12,6 +20,8 @@ export interface IMappingService { data: Contracts.IItemsFeedContract ): Responses.IListItemsFeedResponse; + usedInResponse(data: Contracts.IUsedInItemsContract): Responses.IUsedInResponse; + viewContentTypeResponse( data: Contracts.IViewContentTypeContract ): Responses.IViewContentTypeResponse; @@ -48,6 +58,7 @@ export class MappingService implements IMappin private readonly languageMapper: LanguageMapper; private readonly itemMapper: ItemMapper; private readonly taxonomyMapper: TaxonomyMapper; + private readonly usedInMapper: UsedInMapper; private readonly genericElementMapper: GenericElementMapper; private readonly syncMapper: SyncMapper; @@ -56,10 +67,17 @@ export class MappingService implements IMappin this.languageMapper = new LanguageMapper(); this.itemMapper = new ItemMapper(config); this.taxonomyMapper = new TaxonomyMapper(); + this.usedInMapper = new UsedInMapper(); this.genericElementMapper = new GenericElementMapper(); this.syncMapper = new SyncMapper(); } + usedInResponse(data: Contracts.IUsedInItemsContract): Responses.IUsedInResponse { + return { + items: data.items.map((m) => this.usedInMapper.mapUsedInItem(m)) + }; + } + /** * Gets response for list of languages * @param data Response data diff --git a/package-lock.json b/package-lock.json index 71eb474b..7336c03f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,15 @@ "version": "16.0.0", "license": "MIT", "dependencies": { - "@kontent-ai/core-sdk": "10.10.0" + "@kontent-ai/core-sdk": "10.10.1" }, "devDependencies": { "@types/jasmine": "5.1.7", - "@types/node": "22.13.10", - "@typescript-eslint/eslint-plugin": "8.26.1", - "@typescript-eslint/parser": "8.26.1", + "@types/node": "22.14.0", + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", "colors": "1.4.0", - "eslint": "9.22.0", + "eslint": "9.24.0", "jasmine-core": "5.6.0", "jasmine-spec-reporter": "7.0.0", "karma": "6.4.4", @@ -35,8 +35,8 @@ "ts-loader": "9.5.2", "tsx": "4.19.3", "typescript": "5.2.2", - "typescript-eslint": "8.26.1", - "webpack": "5.98.0", + "typescript-eslint": "8.29.1", + "webpack": "5.99.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1" }, @@ -84,22 +84,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", + "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -132,14 +132,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -162,13 +162,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -189,9 +189,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "dev": true, "license": "MIT", "dependencies": { @@ -200,7 +200,7 @@ "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "@babel/traverse": "^7.27.0", "semver": "^6.3.1" }, "engines": { @@ -221,9 +221,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", "dev": true, "license": "MIT", "dependencies": { @@ -249,9 +249,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "dev": true, "license": "MIT", "dependencies": { @@ -430,27 +430,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -674,13 +674,13 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1255,13 +1255,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1370,9 +1370,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "dev": true, "license": "MIT", "dependencies": { @@ -1562,9 +1562,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "dev": true, "license": "MIT", "dependencies": { @@ -1575,32 +1575,32 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1619,9 +1619,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "license": "MIT", "dependencies": { @@ -1653,9 +1653,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", - "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], @@ -1670,9 +1670,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", - "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], @@ -1687,9 +1687,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", - "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], @@ -1704,9 +1704,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", - "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], @@ -1721,9 +1721,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", - "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -1738,9 +1738,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", - "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], @@ -1755,9 +1755,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", - "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], @@ -1772,9 +1772,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", - "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], @@ -1789,9 +1789,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", - "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], @@ -1806,9 +1806,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", - "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], @@ -1823,9 +1823,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", - "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], @@ -1840,9 +1840,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", - "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], @@ -1857,9 +1857,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", - "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], @@ -1874,9 +1874,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", - "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], @@ -1891,9 +1891,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", - "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], @@ -1908,9 +1908,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", - "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], @@ -1925,9 +1925,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", - "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], @@ -1942,9 +1942,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", - "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", "cpu": [ "arm64" ], @@ -1959,9 +1959,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", - "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], @@ -1976,9 +1976,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", - "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", "cpu": [ "arm64" ], @@ -1993,9 +1993,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", - "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], @@ -2010,9 +2010,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", - "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], @@ -2027,9 +2027,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", - "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], @@ -2044,9 +2044,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", - "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], @@ -2061,9 +2061,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", - "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], @@ -2078,9 +2078,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.0.tgz", - "integrity": "sha512-RoV8Xs9eNwiDvhv7M+xcL4PWyRyIXRY/FLp3buU4h1EYfdF7unWUy3dOjPqb3C7rMUewIcqwW850PgS8h1o1yg==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", "dev": true, "license": "MIT", "dependencies": { @@ -2107,9 +2107,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2146,9 +2146,9 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.1.0.tgz", - "integrity": "sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", + "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2169,9 +2169,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2217,9 +2217,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz", - "integrity": "sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==", + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz", + "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==", "dev": true, "license": "MIT", "engines": { @@ -2237,19 +2237,32 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.12.0", + "@eslint/core": "^0.13.0", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -2504,12 +2517,12 @@ } }, "node_modules/@kontent-ai/core-sdk": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/@kontent-ai/core-sdk/-/core-sdk-10.10.0.tgz", - "integrity": "sha512-XuTx05ctBwit1OkAeyb/xLV3zh3KWh0sW6wMAo+wjoNT2o1VPYKj1NREp2oE9U4ierXwSdMQn1OLILQQ4oaV5g==", + "version": "10.10.1", + "resolved": "https://registry.npmjs.org/@kontent-ai/core-sdk/-/core-sdk-10.10.1.tgz", + "integrity": "sha512-DgWgQkLFQRCWjVNUFXnmG90p/SniGKD+BqEpYujfMB5pDwwfeMUKjgRQnYJ5A9yrOx/sshNcNRtm0+kzjmoVNw==", "license": "MIT", "dependencies": { - "axios": "1.8.2" + "axios": "1.8.4" }, "engines": { "node": ">= 20" @@ -2625,9 +2638,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -2653,13 +2666,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", - "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/normalize-package-data": { @@ -2670,17 +2683,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz", - "integrity": "sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz", + "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/type-utils": "8.26.1", - "@typescript-eslint/utils": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/type-utils": "8.29.1", + "@typescript-eslint/utils": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2700,16 +2713,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz", - "integrity": "sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz", + "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/typescript-estree": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4" }, "engines": { @@ -2725,14 +2738,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz", - "integrity": "sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", + "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1" + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2743,14 +2756,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz", - "integrity": "sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz", + "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.26.1", - "@typescript-eslint/utils": "8.26.1", + "@typescript-eslint/typescript-estree": "8.29.1", + "@typescript-eslint/utils": "8.29.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -2767,9 +2780,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.1.tgz", - "integrity": "sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", + "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", "dev": true, "license": "MIT", "engines": { @@ -2781,14 +2794,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz", - "integrity": "sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", + "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/visitor-keys": "8.26.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/visitor-keys": "8.29.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2808,16 +2821,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.1.tgz", - "integrity": "sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz", + "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.26.1", - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/typescript-estree": "8.26.1" + "@typescript-eslint/scope-manager": "8.29.1", + "@typescript-eslint/types": "8.29.1", + "@typescript-eslint/typescript-estree": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2832,13 +2845,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz", - "integrity": "sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", + "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/types": "8.29.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -3337,9 +3350,9 @@ } }, "node_modules/axios": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz", - "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -3348,14 +3361,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -3387,13 +3400,13 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -3850,9 +3863,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001703", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz", - "integrity": "sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==", + "version": "1.0.30001712", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", + "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", "dev": true, "funding": [ { @@ -5013,9 +5026,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.114", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.114.tgz", - "integrity": "sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==", + "version": "1.5.134", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.134.tgz", + "integrity": "sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==", "dev": true, "license": "ISC" }, @@ -5214,9 +5227,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", - "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5227,31 +5240,31 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.1", - "@esbuild/android-arm": "0.25.1", - "@esbuild/android-arm64": "0.25.1", - "@esbuild/android-x64": "0.25.1", - "@esbuild/darwin-arm64": "0.25.1", - "@esbuild/darwin-x64": "0.25.1", - "@esbuild/freebsd-arm64": "0.25.1", - "@esbuild/freebsd-x64": "0.25.1", - "@esbuild/linux-arm": "0.25.1", - "@esbuild/linux-arm64": "0.25.1", - "@esbuild/linux-ia32": "0.25.1", - "@esbuild/linux-loong64": "0.25.1", - "@esbuild/linux-mips64el": "0.25.1", - "@esbuild/linux-ppc64": "0.25.1", - "@esbuild/linux-riscv64": "0.25.1", - "@esbuild/linux-s390x": "0.25.1", - "@esbuild/linux-x64": "0.25.1", - "@esbuild/netbsd-arm64": "0.25.1", - "@esbuild/netbsd-x64": "0.25.1", - "@esbuild/openbsd-arm64": "0.25.1", - "@esbuild/openbsd-x64": "0.25.1", - "@esbuild/sunos-x64": "0.25.1", - "@esbuild/win32-arm64": "0.25.1", - "@esbuild/win32-ia32": "0.25.1", - "@esbuild/win32-x64": "0.25.1" + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, "node_modules/escalade": { @@ -5285,19 +5298,19 @@ } }, "node_modules/eslint": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz", - "integrity": "sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==", + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz", + "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.2", - "@eslint/config-helpers": "^0.1.0", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.0", "@eslint/core": "^0.12.0", - "@eslint/eslintrc": "^3.3.0", - "@eslint/js": "9.22.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.24.0", "@eslint/plugin-kit": "^0.2.7", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -10417,9 +10430,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -10549,15 +10562,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.26.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.26.1.tgz", - "integrity": "sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==", + "version": "8.29.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.1.tgz", + "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.26.1", - "@typescript-eslint/parser": "8.26.1", - "@typescript-eslint/utils": "8.26.1" + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", + "@typescript-eslint/utils": "8.29.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10613,9 +10626,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, @@ -10842,9 +10855,9 @@ } }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.99.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.2.tgz", + "integrity": "sha512-1LYyB3DIKS4k2JlBHKp+b63b1jp9Nn86wypihsZOeKove7kpRCAVqN8pIle0wbs6a0p4kxkMt01lbb6Y93CpRw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c48cf4e5..05c41b6e 100644 --- a/package.json +++ b/package.json @@ -61,11 +61,11 @@ "clean": "tsx clean.ts" }, "dependencies": { - "@kontent-ai/core-sdk": "10.10.0" + "@kontent-ai/core-sdk": "10.10.1" }, "devDependencies": { "@types/jasmine": "5.1.7", - "@types/node": "22.13.10", + "@types/node": "22.14.0", "colors": "1.4.0", "jasmine-core": "5.6.0", "jasmine-spec-reporter": "7.0.0", @@ -83,13 +83,13 @@ "standard-version": "9.5.0", "ts-loader": "9.5.2", "tsx": "4.19.3", - "@typescript-eslint/eslint-plugin": "8.26.1", - "@typescript-eslint/parser": "8.26.1", - "eslint": "9.22.0", + "@typescript-eslint/eslint-plugin": "8.29.1", + "@typescript-eslint/parser": "8.29.1", + "eslint": "9.24.0", "typescript": "5.2.2", - "webpack": "5.98.0", + "webpack": "5.99.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "6.0.1", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.29.1" } } diff --git a/test/browser/isolated-tests/endpoints/items-feed/items-feed-all.spec.ts b/test/browser/isolated-tests/endpoints/items-feed/items-feed-all.spec.ts index b48fc319..4f74424c 100644 --- a/test/browser/isolated-tests/endpoints/items-feed/items-feed-all.spec.ts +++ b/test/browser/isolated-tests/endpoints/items-feed/items-feed-all.spec.ts @@ -3,7 +3,7 @@ import { Context, Movie, setup } from '../../../setup'; import { getDeliveryClientWithJsonAndHeaders } from '../../../setup'; import * as responseJson from './items-feed-all.spec.json'; -describe('Items feed', () => { +describe('Items feed all', () => { const context = new Context(); setup(context); diff --git a/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.json b/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.json new file mode 100644 index 00000000..10e3c799 --- /dev/null +++ b/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.json @@ -0,0 +1,17 @@ +{ + "items": [ + { + "system": { + "id": "e27603e9-49e7-4d73-ba9f-843017d460db", + "name": "Product", + "codename": "product", + "language": "default", + "type": "product_example_content_type", + "collection": "default", + "workflow": "default", + "workflow_step": "published", + "last_modified": "2019-09-16T09:30:06.1123998Z" + } + } + ] +} diff --git a/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.ts b/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.ts new file mode 100644 index 00000000..1ed93048 --- /dev/null +++ b/test/browser/isolated-tests/endpoints/used-in/used-in-all.spec.ts @@ -0,0 +1,49 @@ +import { IGroupedNetworkResponse, Responses } from '../../../../../lib'; +import { Context, setup } from '../../../setup'; +import { getDeliveryClientWithJsonAndHeaders } from '../../../setup'; +import * as responseJson from './used-in-all.spec.json'; + +describe('Used in', () => { + const context = new Context(); + setup(context); + + let response: IGroupedNetworkResponse>; + + beforeAll(async () => { + response = await getDeliveryClientWithJsonAndHeaders( + responseJson, + { + environmentId: 'x' + }, + [] + ) + .itemUsedIn('x') + .queryConfig({ + disableItemLinking: false + }) + .toAllPromise(); + }); + + it(`Validate responses counts`, () => { + expect(response.responses.length).toEqual(1); + }); + + it(`Validate items count`, () => { + expect(response.data.items.length).toEqual(responseJson.items.length); + }); + + it(`Validates mapped item`, () => { + const item = response.data.items[0]; + const sourceItem = responseJson.items[0]; + + expect(item.system.id).toEqual(sourceItem.system.id); + expect(item.system.name).toEqual(sourceItem.system.name); + expect(item.system.codename).toEqual(sourceItem.system.codename); + expect(item.system.language).toEqual(sourceItem.system.language); + expect(item.system.type).toEqual(sourceItem.system.type); + expect(item.system.collection).toEqual(sourceItem.system.collection); + expect(item.system.lastModified).toEqual(sourceItem.system.last_modified); + expect(item.system.workflow).toEqual(sourceItem.system.workflow); + expect(item.system.workflowStep).toEqual(sourceItem.system.workflow_step); + }); +}); diff --git a/test/browser/isolated-tests/endpoints/used-in/used-in.spec.json b/test/browser/isolated-tests/endpoints/used-in/used-in.spec.json new file mode 100644 index 00000000..10e3c799 --- /dev/null +++ b/test/browser/isolated-tests/endpoints/used-in/used-in.spec.json @@ -0,0 +1,17 @@ +{ + "items": [ + { + "system": { + "id": "e27603e9-49e7-4d73-ba9f-843017d460db", + "name": "Product", + "codename": "product", + "language": "default", + "type": "product_example_content_type", + "collection": "default", + "workflow": "default", + "workflow_step": "published", + "last_modified": "2019-09-16T09:30:06.1123998Z" + } + } + ] +} diff --git a/test/browser/isolated-tests/endpoints/used-in/used-in.spec.ts b/test/browser/isolated-tests/endpoints/used-in/used-in.spec.ts new file mode 100644 index 00000000..ab7ddb4f --- /dev/null +++ b/test/browser/isolated-tests/endpoints/used-in/used-in.spec.ts @@ -0,0 +1,59 @@ +import { IDeliveryNetworkResponse, Responses } from '../../../../../lib'; +import { Context, getTestDeliveryClient, setup } from '../../../setup'; +import { getDeliveryClientWithJsonAndHeaders } from '../../../setup'; +import * as responseJson from './used-in.spec.json'; + +describe('Used in', () => { + const context = new Context(); + setup(context); + + const query = getDeliveryClientWithJsonAndHeaders( + responseJson, + { + environmentId: 'x' + }, + [ + { + value: 'TokenX', + header: 'X-Continuation' + } + ] + ).itemUsedIn('product'); + + let response: IDeliveryNetworkResponse, any>; + + beforeAll(async () => { + response = await query.toPromise(); + }); + + it(`Validates asset used in url`, () => { + expect(getTestDeliveryClient().assetUsedIn('x').getUrl()).toEqual( + 'https://deliver.kontent.ai/delivery-environment-id/assets/x/used-in' + ); + }); + + it(`Validates content item used in url`, () => { + expect(getTestDeliveryClient().itemUsedIn('x').getUrl()).toEqual( + 'https://deliver.kontent.ai/delivery-environment-id/items/x/used-in' + ); + }); + + it(`Continuation token should be set`, () => { + expect(response.xContinuationToken).toEqual('TokenX'); + }); + + it(`Validates mapped item`, () => { + const item = response.data.items[0]; + const sourceItem = responseJson.items[0]; + + expect(item.system.id).toEqual(sourceItem.system.id); + expect(item.system.name).toEqual(sourceItem.system.name); + expect(item.system.codename).toEqual(sourceItem.system.codename); + expect(item.system.language).toEqual(sourceItem.system.language); + expect(item.system.type).toEqual(sourceItem.system.type); + expect(item.system.collection).toEqual(sourceItem.system.collection); + expect(item.system.lastModified).toEqual(sourceItem.system.last_modified); + expect(item.system.workflow).toEqual(sourceItem.system.workflow); + expect(item.system.workflowStep).toEqual(sourceItem.system.workflow_step); + }); +});