{"version":3,"file":"imaging.repository-CY3Ry8Jg.js","sources":["../../../src/packages/media/imaging/imaging.server.data.ts","../../../src/packages/media/imaging/imaging.repository.ts"],"sourcesContent":["import type { UmbImagingResizeModel } from './types.js';\r\nimport { ImagingService, type MediaUrlInfoResponseModel } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbMediaUrlModel } from '@umbraco-cms/backoffice/media';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for the Imaging Service that resizes a media item from the server\r\n * @class UmbImagingServerDataSource\r\n * @implements {RepositoryDetailDataSource}\r\n */\r\nexport class UmbImagingServerDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbImagingServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbImagingServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches the URL for the given media items as resized images\r\n\t * @param {string} unique\r\n\t * @param uniques\r\n\t * @param imagingModel\r\n\t * @memberof UmbImagingServerDataSource\r\n\t */\r\n\tasync getItems(uniques: Array, imagingModel?: UmbImagingResizeModel) {\r\n\t\tif (!uniques.length) throw new Error('Uniques are missing');\r\n\r\n\t\tconst { data, error } = await tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tImagingService.getImagingResizeUrls({ id: uniques, ...imagingModel }),\r\n\t\t);\r\n\r\n\t\tif (data) {\r\n\t\t\tconst items = data.map((item) => this.#mapper(item));\r\n\t\t\treturn { data: items };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t#mapper(item: MediaUrlInfoResponseModel): UmbMediaUrlModel {\r\n\t\tconst url = item.urlInfos[0]?.url;\r\n\t\treturn {\r\n\t\t\tunique: item.id,\r\n\t\t\turl: url,\r\n\t\t};\r\n\t}\r\n}\r\n","import { UmbImagingCropMode, type UmbImagingResizeModel } from './types.js';\r\nimport { UmbImagingServerDataSource } from './imaging.server.data.js';\r\nimport { UMB_IMAGING_STORE_CONTEXT } from './imaging.store.token.js';\r\nimport { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport type { UmbApi } from '@umbraco-cms/backoffice/extension-api';\r\nimport type { UmbMediaUrlModel } from '@umbraco-cms/backoffice/media';\r\n\r\nexport class UmbImagingRepository extends UmbRepositoryBase implements UmbApi {\r\n\t#dataStore?: typeof UMB_IMAGING_STORE_CONTEXT.TYPE;\r\n\t#itemSource: UmbImagingServerDataSource;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\t\tthis.#itemSource = new UmbImagingServerDataSource(host);\r\n\r\n\t\tthis.consumeContext(UMB_IMAGING_STORE_CONTEXT, (instance) => {\r\n\t\t\tthis.#dataStore = instance;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the items for the given uniques\r\n\t * @param {Array} uniques - The uniques\r\n\t * @param {UmbImagingResizeModel} imagingModel - The imaging model\r\n\t * @returns {Promise<{ data: UmbMediaUrlModel[] }>}\r\n\t * @memberof UmbImagingRepository\r\n\t */\r\n\tasync requestResizedItems(\r\n\t\tuniques: Array,\r\n\t\timagingModel?: UmbImagingResizeModel,\r\n\t): Promise<{ data: UmbMediaUrlModel[] }> {\r\n\t\tif (!uniques.length) throw new Error('Uniques are missing');\r\n\t\tif (!this.#dataStore) throw new Error('Data store is missing');\r\n\r\n\t\tconst urls = new Map();\r\n\r\n\t\tfor (const unique of uniques) {\r\n\t\t\tconst existingCrop = this.#dataStore.getCrop(unique, imagingModel);\r\n\t\t\tif (existingCrop !== undefined) {\r\n\t\t\t\turls.set(unique, existingCrop);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst { data: urlModels, error } = await this.#itemSource.getItems([unique], imagingModel);\r\n\r\n\t\t\tif (error) {\r\n\t\t\t\tconsole.error('[UmbImagingRepository] Error fetching items', error);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst url = urlModels?.[0].url;\r\n\r\n\t\t\tthis.#dataStore.addCrop(unique, url ?? '', imagingModel);\r\n\r\n\t\t\tif (url) {\r\n\t\t\t\turls.set(unique, url);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn { data: Array.from(urls).map(([unique, url]) => ({ unique, url })) };\r\n\t}\r\n\r\n\t/**\r\n\t * Requests the thumbnail URLs for the given uniques\r\n\t * @param {Array} uniques\r\n\t * @param {number} height\r\n\t * @param {number} width\r\n\t * @param {ImageCropModeModel} mode - The crop mode\r\n\t * @memberof UmbImagingRepository\r\n\t */\r\n\tasync requestThumbnailUrls(uniques: Array, height: number, width: number, mode = UmbImagingCropMode.MIN) {\r\n\t\tconst imagingModel: UmbImagingResizeModel = { height, width, mode };\r\n\t\treturn this.requestResizedItems(uniques, imagingModel);\r\n\t}\r\n}\r\n\r\nexport { UmbImagingRepository as api };\r\n"],"names":["UmbImagingServerDataSource","#host","host","uniques","imagingModel","data","error","tryExecuteAndNotify","ImagingService","item","#mapper","url","UmbImagingRepository","UmbRepositoryBase","#dataStore","#itemSource","UMB_IMAGING_STORE_CONTEXT","instance","urls","unique","existingCrop","urlModels","height","width","mode","UmbImagingCropMode"],"mappings":";;;;AAWO,MAAMA,EAA2B;AAAA,EACvCC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAYC,GAAyB;AACpC,SAAKD,KAAQC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUd,MAAM,SAASC,GAAwBC,GAAsC;AAC5E,QAAI,CAACD,EAAQ,OAAc,OAAA,IAAI,MAAM,qBAAqB;AAE1D,UAAM,EAAE,MAAAE,GAAM,OAAAC,EAAM,IAAI,MAAMC;AAAA,MAC7B,KAAKN;AAAA,MACLO,EAAe,qBAAqB,EAAE,IAAIL,GAAS,GAAGC,EAAc,CAAA;AAAA,IACrE;AAEA,WAAIC,IAEI,EAAE,MADKA,EAAK,IAAI,CAACI,MAAS,KAAKC,GAAQD,CAAI,CAAC,EAC9B,IAGf,EAAE,OAAAH,EAAM;AAAA,EAAA;AAAA,EAGhBI,GAAQD,GAAmD;AAC1D,UAAME,IAAMF,EAAK,SAAS,CAAC,GAAG;AACvB,WAAA;AAAA,MACN,QAAQA,EAAK;AAAA,MACb,KAAAE;AAAA,IACD;AAAA,EAAA;AAEF;AC7CO,MAAMC,UAA6BC,EAAoC;AAAA,EAC7EC;AAAA,EACAC;AAAA,EAEA,YAAYb,GAAyB;AACpC,UAAMA,CAAI,GACL,KAAAa,KAAc,IAAIf,EAA2BE,CAAI,GAEjD,KAAA,eAAec,GAA2B,CAACC,MAAa;AAC5D,WAAKH,KAAaG;AAAA,IAAA,CAClB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUF,MAAM,oBACLd,GACAC,GACwC;AACxC,QAAI,CAACD,EAAQ,OAAc,OAAA,IAAI,MAAM,qBAAqB;AAC1D,QAAI,CAAC,KAAKW,GAAkB,OAAA,IAAI,MAAM,uBAAuB;AAEvD,UAAAI,wBAAW,IAAoB;AAErC,eAAWC,KAAUhB,GAAS;AAC7B,YAAMiB,IAAe,KAAKN,GAAW,QAAQK,GAAQf,CAAY;AACjE,UAAIgB,MAAiB,QAAW;AAC1B,QAAAF,EAAA,IAAIC,GAAQC,CAAY;AAC7B;AAAA,MAAA;AAGD,YAAM,EAAE,MAAMC,GAAW,OAAAf,MAAU,MAAM,KAAKS,GAAY,SAAS,CAACI,CAAM,GAAGf,CAAY;AAEzF,UAAIE,GAAO;AACF,gBAAA,MAAM,+CAA+CA,CAAK;AAClE;AAAA,MAAA;AAGK,YAAAK,IAAMU,IAAY,CAAC,EAAE;AAE3B,WAAKP,GAAW,QAAQK,GAAQR,KAAO,IAAIP,CAAY,GAEnDO,KACEO,EAAA,IAAIC,GAAQR,CAAG;AAAA,IACrB;AAGD,WAAO,EAAE,MAAM,MAAM,KAAKO,CAAI,EAAE,IAAI,CAAC,CAACC,GAAQR,CAAG,OAAO,EAAE,QAAAQ,GAAQ,KAAAR,EAAA,EAAM,EAAE;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW3E,MAAM,qBAAqBR,GAAwBmB,GAAgBC,GAAeC,IAAOC,EAAmB,KAAK;AAChH,UAAMrB,IAAsC,EAAE,QAAAkB,GAAQ,OAAAC,GAAO,MAAAC,EAAK;AAC3D,WAAA,KAAK,oBAAoBrB,GAASC,CAAY;AAAA,EAAA;AAEvD;"}