diff --git a/src/modules/CaaSMapper.spec.ts b/src/modules/CaaSMapper.spec.ts index 88ab340..ef68dc7 100644 --- a/src/modules/CaaSMapper.spec.ts +++ b/src/modules/CaaSMapper.spec.ts @@ -163,6 +163,20 @@ describe('CaaSMapper', () => { `${url}?prev&rev=5593` ) }) + + it('should append the revision as a query param if addRevisionToMediaUrlsInRelease is true and content mode is release', () => { + const api = createApi() + api.contentMode = FSXAContentMode.RELEASE + api.addRevisionToMediaUrlsInRelease = true + const mapper = new CaaSMapper(api, 'de', {addRevisionToMediaUrlsInRelease: true}, createLogger()) + const url = 'https://e-spirit.local/some/resource' + expect(mapper.buildMediaUrl(url)).toEqual(url) + expect(mapper.buildMediaUrl(url, 5593)).toEqual(`${url}?rev=5593`) + // check media string construction + expect(mapper.buildMediaUrl(`${url}?prev`, 5593)).toEqual( + `${url}?prev&rev=5593` + ) + }) }) describe('mapDataEntry', () => { diff --git a/src/modules/CaaSMapper.ts b/src/modules/CaaSMapper.ts index b80d3ac..162b613 100644 --- a/src/modules/CaaSMapper.ts +++ b/src/modules/CaaSMapper.ts @@ -106,6 +106,9 @@ export class CaaSMapper { // just started, when we need to keep track of them. _processedItems: Record = {} + // Add Revision query param to media urls in release case + addRevisionToMediaUrlsInRelease: boolean = false + constructor( api: FSXARemoteApi, locale: string | undefined, @@ -113,6 +116,7 @@ export class CaaSMapper { customMapper?: CustomMapper referenceDepth?: number maxReferenceDepth?: number + addRevisionToMediaUrlsInRelease?: boolean }, logger: Logger ) { @@ -129,6 +133,7 @@ export class CaaSMapper { utils.maxReferenceDepth ?? DEFAULT_MAX_REFERENCE_DEPTH this.logger.debug('Created new CaaSMapper') + this.addRevisionToMediaUrlsInRelease = utils.addRevisionToMediaUrlsInRelease ?? false } addToResolvedReferences( @@ -231,7 +236,7 @@ export class CaaSMapper { } buildMediaUrl(url: string, rev?: number) { - if (rev && this.api.contentMode === FSXAContentMode.PREVIEW) { + if (rev && (this.api.contentMode === FSXAContentMode.PREVIEW || this.addRevisionToMediaUrlsInRelease)) { url += `${url.includes('?') ? '&' : '?'}rev=${rev}` } return url diff --git a/src/modules/FSXARemoteApi.ts b/src/modules/FSXARemoteApi.ts index b555d08..e083748 100644 --- a/src/modules/FSXARemoteApi.ts +++ b/src/modules/FSXARemoteApi.ts @@ -74,6 +74,7 @@ export class FSXARemoteApi implements FSXAApi { private _caasItemFilter?: CaasItemFilter private _logLevel: LogLevel private _enableEventStream: boolean = false + private _addRevisionToMediaUrlsInRelease: boolean = false /** * The constructor of this class initializes the configuration for the api. @@ -90,6 +91,7 @@ export class FSXARemoteApi implements FSXAApi { * @param config.customMapper optional {@link CustomMapper CustomMapper} * @param config.filterOptions optional {@link RemoteApiFilterOptions RemoteApiFilterOptions} (EXPERIMENTAL) * @param config.logLevel the used {@link LogLevel LogLevel} for the API `(default LogLevel.ERROR)` - optional + * @param config.addRevisionToMediaUrlsInRelease sets flag if revision query param should be added to media urls in release. */ constructor({ apikey, @@ -103,6 +105,7 @@ export class FSXARemoteApi implements FSXAApi { customMapper, filterOptions, logLevel = LogLevel.ERROR, + addRevisionToMediaUrlsInRelease = false }: FSXARemoteApiConfig) { this.apikey = apikey this.caasURL = caasURL @@ -118,6 +121,7 @@ export class FSXARemoteApi implements FSXAApi { this._queryBuilder = new QueryBuilder(this._logger) this._navigationItemFilter = filterOptions?.navigationItemFilter this._caasItemFilter = filterOptions?.caasItemFilter + this._addRevisionToMediaUrlsInRelease = addRevisionToMediaUrlsInRelease this._logger.debug('FSXARemoteApi created', { caasURL, @@ -129,6 +133,7 @@ export class FSXARemoteApi implements FSXAApi { customMapper: this._customMapper, navigationItemFilter: this._navigationItemFilter, caasItemFilter: this._caasItemFilter, + addRevisionToMediaUrlsInRelease }) } @@ -636,6 +641,7 @@ export class FSXARemoteApi implements FSXAApi { { customMapper: this._customMapper, maxReferenceDepth: this._maxReferenceDepth, + addRevisionToMediaUrlsInRelease: this._addRevisionToMediaUrlsInRelease }, new Logger(this._logLevel, 'CaaSMapper') ) @@ -1043,6 +1049,20 @@ export class FSXARemoteApi implements FSXAApi { this._contentMode = value } + /** + * gets flag, if revision should be added to media urls in release + */ + public get addRevisionToMediaUrlsInRelease() { + return this._addRevisionToMediaUrlsInRelease + } + + /** + * Sets flag, if revision should be added to media urls in release + */ + public set addRevisionToMediaUrlsInRelease(value: boolean) { + this._addRevisionToMediaUrlsInRelease = value + } + /** * @returns the configured log level */ diff --git a/src/types.ts b/src/types.ts index 26b5ff8..b1695eb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1033,6 +1033,7 @@ export type FSXARemoteApiConfig = { customMapper?: CustomMapper filterOptions?: RemoteApiFilterOptions enableEventStream?: boolean + addRevisionToMediaUrlsInRelease?: boolean } export type FilterContextProvider = () => unknown | null