@ethlete/contentful 3.8.0 → 4.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ethlete-contentful.mjs","sources":["../tmp-esm2022/lib/gql/asset.fragments.js","../tmp-esm2022/lib/components/audio/contentful-audio.component.js","../tmp-esm2022/lib/components/file/contentful-file.component.js","../tmp-esm2022/lib/constants/contentful.constants.js","../tmp-esm2022/lib/components/image/contentful-image.component.utils.js","../tmp-esm2022/lib/components/image/contentful-image.component.js","../tmp-esm2022/lib/components/video/contentful-video.component.js","../tmp-esm2022/lib/utils/contentful-config.js","../tmp-esm2022/lib/components/rich-text-renderer/rich-text-renderer.errors.js","../tmp-esm2022/lib/components/rich-text-renderer/rich-text-renderer.util.js","../tmp-esm2022/lib/components/rich-text-renderer/rich-text-renderer.component.js","../tmp-esm2022/lib/contentful.imports.js","../tmp-esm2022/lib/utils/contentful.util.js","../tmp-esm2022/index.js","../tmp-esm2022/ethlete-contentful.js"],"sourcesContent":["import { gql } from '@ethlete/query';\nexport const GQL_FRAGMENT_CONTENTFUL_ASSET = gql `\n fragment AssetData on Asset {\n sys {\n id\n }\n url\n title\n width\n height\n description\n contentType\n size\n }\n`;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isContentfulGqlAsset = (asset) => {\n return asset?.sys?.id && asset?.url && typeof asset?.size === 'number';\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuZnJhZ21lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9saWIvZ3FsL2Fzc2V0LmZyYWdtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7O0NBYS9DLENBQUM7QUFlRiw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFVLEVBQStCLEVBQUU7SUFDOUUsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ3FsIH0gZnJvbSAnQGV0aGxldGUvcXVlcnknO1xuXG5leHBvcnQgY29uc3QgR1FMX0ZSQUdNRU5UX0NPTlRFTlRGVUxfQVNTRVQgPSBncWxgXG4gIGZyYWdtZW50IEFzc2V0RGF0YSBvbiBBc3NldCB7XG4gICAgc3lzIHtcbiAgICAgIGlkXG4gICAgfVxuICAgIHVybFxuICAgIHRpdGxlXG4gICAgd2lkdGhcbiAgICBoZWlnaHRcbiAgICBkZXNjcmlwdGlvblxuICAgIGNvbnRlbnRUeXBlXG4gICAgc2l6ZVxuICB9XG5gO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRmdWxHcWxBc3NldCB7XG4gIHN5czoge1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG4gIHRpdGxlOiBzdHJpbmcgfCBudWxsO1xuICBjb250ZW50VHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgdXJsOiBzdHJpbmcgfCBudWxsO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgd2lkdGg6IG51bWJlciB8IG51bGw7XG4gIGhlaWdodDogbnVtYmVyIHwgbnVsbDtcbiAgc2l6ZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjb25zdCBpc0NvbnRlbnRmdWxHcWxBc3NldCA9IChhc3NldDogYW55KTogYXNzZXQgaXMgQ29udGVudGZ1bEdxbEFzc2V0ID0+IHtcbiAgcmV0dXJuIGFzc2V0Py5zeXM/LmlkICYmIGFzc2V0Py51cmwgJiYgdHlwZW9mIGFzc2V0Py5zaXplID09PSAnbnVtYmVyJztcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRmdWxHcWxXaGVyZUZpbHRlcjxUTGlua2VkRnJvbSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICAvKipcbiAgICogRmlsZXIgYnkgaWRzLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmNvbnRlbnRmdWwuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2VzL2dyYXBocWwvIy9yZWZlcmVuY2UvY29sbGVjdGlvbi1maWx0ZXJzL3N5cy1maWx0ZXJzXG4gICAqL1xuICBzeXM/OiB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgaWRfbm90Pzogc3RyaW5nO1xuICAgIGlkX2luPzogc3RyaW5nW107XG4gICAgaWRfbm90X2luPzogc3RyaW5nW107XG4gICAgaWRfY29udGFpbnM/OiBzdHJpbmc7XG4gICAgaWRfbm90X2NvbnRhaW5zPzogc3RyaW5nO1xuICB9O1xuICAvKipcbiAgICogRmlsZXIgYnkgdGFncy5cbiAgICogQHNlZSBodHRwczovL3d3dy5jb250ZW50ZnVsLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlcy9ncmFwaHFsLyMvcmVmZXJlbmNlL2NvbGxlY3Rpb24tZmlsdGVycy9jb250ZW50ZnVsbWV0YWRhdGEtZmlsdGVyc1xuICAgKi9cbiAgY29udGVudGZ1bE1ldGFkYXRhPzoge1xuICAgIHRhZ3NfZXhpc3RzPzogYm9vbGVhbjtcbiAgICB0YWdzPzoge1xuICAgICAgaWRfY29udGFpbnNfc29tZT86IHN0cmluZ1tdO1xuICAgICAgaWRfY29udGFpbnNfbm9uZT86IHN0cmluZ1tdO1xuICAgICAgaWRfY29udGFpbnNfYWxsPzogc3RyaW5nW107XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgY29sbGVjdGlvbiBvZiBlbnRyaWVzIGxpbmtlZCB0byB0aGUgc3BlY2lmaWVkIGVudHJ5IG9yIGFzc2V0LlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmNvbnRlbnRmdWwuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2VzL2dyYXBocWwvI2xpbmtzLXRvLWEtc3BlY2lmaWMtaXRlbVxuICAgKi9cbiAgbGlua2VkRnJvbT86IFRMaW5rZWRGcm9tO1xufTtcblxuZXhwb3J0IHR5cGUgQ29udGVudGZ1bEdxbE9yZGVyID0gYCR7c3RyaW5nfV8keydBU0MnIHwgJ0RFU0MnfWA7XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRmdWxHcWxDb2xsZWN0aW9uRmlsdGVyVmFyaWFibGVzPFxuICBUQ3VzdG9tV2hlcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBUTGlua2VkRnJvbSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID0ge1xuICAvKipcbiAgICogWmVyby1pbmRleGVkIG9mZnNldCBpbiB0aGUgY29sbGVjdGlvbiBmcm9tIHdoaWNoIGl0ZW1zIGFyZSBmZXRjaGVkXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNraXA/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGZldGNoLiBNYXhpbXVtIGlzIDEwMDAuXG4gICAqIEBkZWZhdWx0IDEwMFxuICAgKi9cbiAgbGltaXQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBzcGVjaWZpY2F0aW9ucyB0byBhcHBseSBvbiB0aGUgY29sbGVjdGlvbiBxdWVyeS5cbiAgICogQHNlZSBodHRwczovL3d3dy5jb250ZW50ZnVsLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlcy9ncmFwaHFsLyMvcmVmZXJlbmNlL2NvbGxlY3Rpb24tZmlsdGVyc1xuICAgKi9cbiAgd2hlcmU/OiBUQ3VzdG9tV2hlcmUgJiBDb250ZW50ZnVsR3FsV2hlcmVGaWx0ZXI8VExpbmtlZEZyb20+O1xuXG4gIC8qKlxuICAgKiBPcmRlciBzcGVjaWZpY2F0aW9ucyB0byBhcHBseSBvbiB0aGUgY29sbGVjdGlvbiBxdWVyeS5cbiAgICogQHNlZSBodHRwczovL3d3dy5jb250ZW50ZnVsLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlcy9ncmFwaHFsLyMvcmVmZXJlbmNlL2NvbGxlY3Rpb24tb3JkZXJcbiAgICovXG4gIG9yZGVyPzogQ29udGVudGZ1bEdxbE9yZGVyW107XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCB0aGUgZmllbGQgd2lsbCBiZSByZXNvbHZlZCB3aXRoIG5vbiBwdWJsaXNoZWQgY29udGVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByZXZpZXc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMb2NhbGUgZm9yIHRoZSBjb2xsZWN0aW9uIGl0ZW1zLiBJZiBub3Qgc2V0IHRoZSBkZWZhdWx0IGxvY2FsZSBpcyB1c2VkLlxuICAgKi9cbiAgbG9jYWxlPzogc3RyaW5nO1xufTtcbiJdfQ==","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { isContentfulGqlAsset } from '../../gql';\nimport * as i0 from \"@angular/core\";\nexport class ContentfulAudioComponent {\n constructor() {\n this.asset = input.required();\n this.audioClass = input(null);\n this.figureClass = input(null);\n this.figcaptionClass = input(null);\n this.data = computed(() => {\n const asset = this.asset();\n if (!asset) {\n return null;\n }\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n title: asset.title,\n };\n }\n return {\n url: asset.fields.file.url,\n title: asset.fields.title,\n };\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulAudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: ContentfulAudioComponent, isStandalone: true, selector: \"et-contentful-audio\", inputs: { asset: { classPropertyName: \"asset\", publicName: \"asset\", isSignal: true, isRequired: true, transformFunction: null }, audioClass: { classPropertyName: \"audioClass\", publicName: \"audioClass\", isSignal: true, isRequired: false, transformFunction: null }, figureClass: { classPropertyName: \"figureClass\", publicName: \"figureClass\", isSignal: true, isRequired: false, transformFunction: null }, figcaptionClass: { classPropertyName: \"figcaptionClass\", publicName: \"figcaptionClass\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n @if (data(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.url }}\"></audio>\n </figure>\n }\n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulAudioComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-contentful-audio',\n template: `\n @if (data(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.url }}\"></audio>\n </figure>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1hdWRpby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGlvL2NvbnRlbnRmdWwtYXVkaW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkcsT0FBTyxFQUFzQixvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFpQnJFLE1BQU0sT0FBTyx3QkFBd0I7SUFkckM7UUFlRSxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBK0QsQ0FBQztRQUN0RixlQUFVLEdBQUcsS0FBSyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3RDLGdCQUFXLEdBQUcsS0FBSyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLG9CQUFlLEdBQUcsS0FBSyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBRTNDLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztvQkFDZCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7aUJBQ25CLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSzthQUMxQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7S0FDSjs4R0F6Qlksd0JBQXdCO2tHQUF4Qix3QkFBd0IseW5CQVp6Qjs7Ozs7OztHQU9ULDREQUdTLE9BQU87OzJGQUVOLHdCQUF3QjtrQkFkcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUU7Ozs7Ozs7R0FPVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ2xhc3NUeXBlIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBDb250ZW50ZnVsR3FsQXNzZXQsIGlzQ29udGVudGZ1bEdxbEFzc2V0IH0gZnJvbSAnLi4vLi4vZ3FsJztcbmltcG9ydCB7IENvbnRlbnRmdWxSZXN0QXNzZXQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LWNvbnRlbnRmdWwtYXVkaW8nLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoZGF0YSgpOyBhcyBkYXRhKSB7XG4gICAgICA8ZmlndXJlIFtuZ0NsYXNzXT1cImZpZ3VyZUNsYXNzKClcIj5cbiAgICAgICAgPGZpZ2NhcHRpb24gW25nQ2xhc3NdPVwiZmlnY2FwdGlvbkNsYXNzKClcIj57eyBkYXRhLnRpdGxlIH19PC9maWdjYXB0aW9uPlxuICAgICAgICA8YXVkaW8gW25nQ2xhc3NdPVwiYXVkaW9DbGFzcygpXCIgY29udHJvbHMgc3JjPVwie3sgZGF0YS51cmwgfX1cIj48L2F1ZGlvPlxuICAgICAgPC9maWd1cmU+XG4gICAgfVxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW05nQ2xhc3NdLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50ZnVsQXVkaW9Db21wb25lbnQge1xuICBhc3NldCA9IGlucHV0LnJlcXVpcmVkPENvbnRlbnRmdWxSZXN0QXNzZXQgfCBDb250ZW50ZnVsR3FsQXNzZXQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICBhdWRpb0NsYXNzID0gaW5wdXQ8TmdDbGFzc1R5cGU+KG51bGwpO1xuICBmaWd1cmVDbGFzcyA9IGlucHV0PE5nQ2xhc3NUeXBlPihudWxsKTtcbiAgZmlnY2FwdGlvbkNsYXNzID0gaW5wdXQ8TmdDbGFzc1R5cGU+KG51bGwpO1xuXG4gIGRhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXNzZXQgPSB0aGlzLmFzc2V0KCk7XG5cbiAgICBpZiAoIWFzc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaXNDb250ZW50ZnVsR3FsQXNzZXQoYXNzZXQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IGFzc2V0LnVybCxcbiAgICAgICAgdGl0bGU6IGFzc2V0LnRpdGxlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBhc3NldC5maWVsZHMuZmlsZS51cmwsXG4gICAgICB0aXRsZTogYXNzZXQuZmllbGRzLnRpdGxlLFxuICAgIH07XG4gIH0pO1xufVxuIl19","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { isContentfulGqlAsset } from '../../gql';\nimport * as i0 from \"@angular/core\";\nexport class ContentfulFileComponent {\n constructor() {\n this.asset = input.required();\n this.fileClass = input(null);\n this.data = computed(() => {\n const asset = this.asset();\n if (!asset) {\n return null;\n }\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n size: asset.size,\n title: asset.title,\n };\n }\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n size: asset.fields.file.details.size,\n title: asset.fields.title,\n };\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: ContentfulFileComponent, isStandalone: true, selector: \"et-contentful-file\", inputs: { asset: { classPropertyName: \"asset\", publicName: \"asset\", isSignal: true, isRequired: true, transformFunction: null }, fileClass: { classPropertyName: \"fileClass\", publicName: \"fileClass\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n @if (data(); as data) {\n <a [href]=\"data.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.title }} ({{ data.size }} Bytes)\n </a>\n }\n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulFileComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-contentful-file',\n template: `\n @if (data(); as data) {\n <a [href]=\"data.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.title }} ({{ data.size }} Bytes)\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29udGVudGZ1bC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS9jb250ZW50ZnVsLWZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkcsT0FBTyxFQUFzQixvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFnQnJFLE1BQU0sT0FBTyx1QkFBdUI7SUFicEM7UUFjRSxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBK0QsQ0FBQztRQUN0RixjQUFTLEdBQUcsS0FBSyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBRXJDLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztvQkFDZCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2lCQUNuQixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU87Z0JBQ0wsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQzFCLFdBQVcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXO2dCQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQ3BDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7YUFDMUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7OEdBM0JZLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHFWQVh4Qjs7Ozs7O0dBTVQsNERBR1MsT0FBTzs7MkZBRU4sdUJBQXVCO2tCQWJuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRTs7Ozs7O0dBTVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzVHlwZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGVudGZ1bEdxbEFzc2V0LCBpc0NvbnRlbnRmdWxHcWxBc3NldCB9IGZyb20gJy4uLy4uL2dxbCc7XG5pbXBvcnQgeyBDb250ZW50ZnVsUmVzdEFzc2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1jb250ZW50ZnVsLWZpbGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoZGF0YSgpOyBhcyBkYXRhKSB7XG4gICAgICA8YSBbaHJlZl09XCJkYXRhLnVybFwiIFtuZ0NsYXNzXT1cImZpbGVDbGFzcygpXCIgY2xhc3M9XCJ1bmRlcmxpbmVcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAge3sgZGF0YS50aXRsZSB9fSAoe3sgZGF0YS5zaXplIH19IEJ5dGVzKVxuICAgICAgPC9hPlxuICAgIH1cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGltcG9ydHM6IFtOZ0NsYXNzXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudGZ1bEZpbGVDb21wb25lbnQge1xuICBhc3NldCA9IGlucHV0LnJlcXVpcmVkPENvbnRlbnRmdWxSZXN0QXNzZXQgfCBDb250ZW50ZnVsR3FsQXNzZXQgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuICBmaWxlQ2xhc3MgPSBpbnB1dDxOZ0NsYXNzVHlwZT4obnVsbCk7XG5cbiAgZGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhc3NldCA9IHRoaXMuYXNzZXQoKTtcblxuICAgIGlmICghYXNzZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRlbnRmdWxHcWxBc3NldChhc3NldCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogYXNzZXQudXJsLFxuICAgICAgICBjb250ZW50VHlwZTogYXNzZXQuY29udGVudFR5cGUsXG4gICAgICAgIHNpemU6IGFzc2V0LnNpemUsXG4gICAgICAgIHRpdGxlOiBhc3NldC50aXRsZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXNzZXQuZmllbGRzLmZpbGUudXJsLFxuICAgICAgY29udGVudFR5cGU6IGFzc2V0LmZpZWxkcy5maWxlLmNvbnRlbnRUeXBlLFxuICAgICAgc2l6ZTogYXNzZXQuZmllbGRzLmZpbGUuZGV0YWlscy5zaXplLFxuICAgICAgdGl0bGU6IGFzc2V0LmZpZWxkcy50aXRsZSxcbiAgICB9O1xuICB9KTtcbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const CONTENTFUL_CONFIG = new InjectionToken('ContentfulConfig');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb25zdGFudHMvY29udGVudGZ1bC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbnRlbnRmdWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDT05URU5URlVMX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxDb250ZW50ZnVsQ29uZmlnPignQ29udGVudGZ1bENvbmZpZycpO1xuIl19","import { isContentfulGqlAsset } from '../../gql';\nexport const generateDefaultContentfulImageSource = (data) => {\n if (isContentfulGqlAsset(data)) {\n if (!data.contentType || !data.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n return {\n type: data.contentType,\n srcset: data.url,\n };\n }\n if (!data.fields.file.contentType || !data.fields.file.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n return {\n type: data.fields.file.contentType,\n srcset: data.fields.file.url,\n };\n};\n/**\n * Parses source set sizes into an object containing with and height. Eg.\n * - `\"400\"` - 400px width\n * - `\"400x300\"` - 400px width and 300px height\n * - `\"400w\"` - 400px width\n * - `\"400h\"` - 400px height\n * - `\"400wx300h\"` - 400px width and 300px height\n **/\nexport const parseContentfulImageSize = (size) => {\n let width = null;\n let height = null;\n if (size.includes('x')) {\n const [w, h] = size.split('x');\n width = w;\n height = h;\n }\n else if (size.includes('h')) {\n height = size;\n }\n else {\n width = size;\n }\n return {\n width: width ? parseInt(width, 10) : null,\n height: height ? parseInt(height, 10) : null,\n };\n};\nexport const generateContentfulImageSources = (data, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior) => {\n const assetData = data;\n if (!assetData) {\n return [];\n }\n const sources = [];\n const SOURCE_TYPES = ['image/avif', 'image/webp', 'image/png', 'image/jpg'];\n for (const type of SOURCE_TYPES) {\n const baseUrl = isContentfulGqlAsset(assetData) ? assetData.url : assetData.fields.file.url;\n const sourceSets = [];\n const queryParams = [];\n // Set the format (e.g. 'fm=webp')\n queryParams.push(`fm=${type.split('/')[1]}`);\n if (backgroundColor) {\n queryParams.push(`bg=rgb:${backgroundColor}`);\n }\n if (quality !== null) {\n queryParams.push(`q=${quality}`);\n }\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\n }\n if (srcsetSizes?.length) {\n const urlWithParams = `${baseUrl}?${queryParams.join('&')}`;\n for (const size of srcsetSizes) {\n const { width, height } = parseContentfulImageSize(size);\n if (width && height) {\n sourceSets.push(`${urlWithParams}&w=${width}&h=${height} ${width}w`);\n }\n else if (width) {\n sourceSets.push(`${urlWithParams}&w=${width} ${width}w`);\n }\n else if (height) {\n sourceSets.push(`${urlWithParams}&h=${height} ${height}h`);\n }\n }\n }\n sources.push({\n type,\n srcset: sourceSets.length ? sourceSets.join(', ') : `${baseUrl}?${queryParams.join('&')}`,\n });\n }\n return sources;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1pbWFnZS5jb21wb25lbnQudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlL2NvbnRlbnRmdWwtaW1hZ2UuY29tcG9uZW50LnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBc0Isb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHckUsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsQ0FBQyxJQUE4QyxFQUFpQixFQUFFO0lBQ3BILElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQyxPQUFPO2dCQUNMLElBQUksRUFBRSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxFQUFFO2FBQ1gsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRztTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHO0tBQzdCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7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QUUsQ0FBQztnQkFDL0IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFekQsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLE1BQU0sS0FBSyxNQUFNLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDO3FCQUFNLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ2pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLE1BQU0sS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzNELENBQUM7cUJBQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsTUFBTSxNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUk7WUFDSixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtTQUMxRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGljdHVyZVNvdXJjZSB9IGZyb20gJ0BldGhsZXRlL2Nkayc7XG5pbXBvcnQgeyBDb250ZW50ZnVsR3FsQXNzZXQsIGlzQ29udGVudGZ1bEdxbEFzc2V0IH0gZnJvbSAnLi4vLi4vZ3FsJztcbmltcG9ydCB7IENvbnRlbnRmdWxJbWFnZUZvY3VzQXJlYSwgQ29udGVudGZ1bEltYWdlUmVzaXplQmVoYXZpb3IsIENvbnRlbnRmdWxSZXN0QXNzZXQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZURlZmF1bHRDb250ZW50ZnVsSW1hZ2VTb3VyY2UgPSAoZGF0YTogQ29udGVudGZ1bFJlc3RBc3NldCB8IENvbnRlbnRmdWxHcWxBc3NldCk6IFBpY3R1cmVTb3VyY2UgPT4ge1xuICBpZiAoaXNDb250ZW50ZnVsR3FsQXNzZXQoZGF0YSkpIHtcbiAgICBpZiAoIWRhdGEuY29udGVudFR5cGUgfHwgIWRhdGEudXJsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgc3Jjc2V0OiAnJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IGRhdGEuY29udGVudFR5cGUsXG4gICAgICBzcmNzZXQ6IGRhdGEudXJsLFxuICAgIH07XG4gIH1cblxuICBpZiAoIWRhdGEuZmllbGRzLmZpbGUuY29udGVudFR5cGUgfHwgIWRhdGEuZmllbGRzLmZpbGUudXJsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICcnLFxuICAgICAgc3Jjc2V0OiAnJyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkYXRhLmZpZWxkcy5maWxlLmNvbnRlbnRUeXBlLFxuICAgIHNyY3NldDogZGF0YS5maWVsZHMuZmlsZS51cmwsXG4gIH07XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzb3VyY2Ugc2V0IHNpemVzIGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgd2l0aCBhbmQgaGVpZ2h0LiBFZy5cbiAqIC0gYFwiNDAwXCJgIC0gNDAwcHggd2lkdGhcbiAqIC0gYFwiNDAweDMwMFwiYCAtIDQwMHB4IHdpZHRoIGFuZCAzMDBweCBoZWlnaHRcbiAqIC0gYFwiNDAwd1wiYCAtIDQwMHB4IHdpZHRoXG4gKiAtIGBcIjQwMGhcImAgLSA0MDBweCBoZWlnaHRcbiAqIC0gYFwiNDAwd3gzMDBoXCJgIC0gNDAwcHggd2lkdGggYW5kIDMwMHB4IGhlaWdodFxuICoqL1xuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudGZ1bEltYWdlU2l6ZSA9IChzaXplOiBzdHJpbmcpOiB7IHdpZHRoOiBudW1iZXIgfCBudWxsOyBoZWlnaHQ6IG51bWJlciB8IG51bGwgfSA9PiB7XG4gIGxldCB3aWR0aDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGw7XG4gIGxldCBoZWlnaHQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsO1xuXG4gIGlmIChzaXplLmluY2x1ZGVzKCd4JykpIHtcbiAgICBjb25zdCBbdywgaF0gPSBzaXplLnNwbGl0KCd4Jyk7XG5cbiAgICB3aWR0aCA9IHc7XG4gICAgaGVpZ2h0ID0gaDtcbiAgfSBlbHNlIGlmIChzaXplLmluY2x1ZGVzKCdoJykpIHtcbiAgICBoZWlnaHQgPSBzaXplO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gc2l6ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoID8gcGFyc2VJbnQod2lkdGgsIDEwKSA6IG51bGwsXG4gICAgaGVpZ2h0OiBoZWlnaHQgPyBwYXJzZUludChoZWlnaHQsIDEwKSA6IG51bGwsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVDb250ZW50ZnVsSW1hZ2VTb3VyY2VzID0gKFxuICBkYXRhOiBDb250ZW50ZnVsUmVzdEFzc2V0IHwgQ29udGVudGZ1bEdxbEFzc2V0LFxuICBzcmNzZXRTaXplczogc3RyaW5nW10sXG4gIGJhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgbnVsbCxcbiAgcXVhbGl0eTogbnVtYmVyIHwgbnVsbCxcbiAgZm9jdXNBcmVhOiBDb250ZW50ZnVsSW1hZ2VGb2N1c0FyZWEgfCBudWxsLFxuICByZXNpemVCZWhhdmlvcjogQ29udGVudGZ1bEltYWdlUmVzaXplQmVoYXZpb3IgfCBudWxsLFxuKTogUGljdHVyZVNvdXJjZVtdID0+IHtcbiAgY29uc3QgYXNzZXREYXRhID0gZGF0YTtcblxuICBpZiAoIWFzc2V0RGF0YSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZXM6IFBpY3R1cmVTb3VyY2VbXSA9IFtdO1xuXG4gIGNvbnN0IFNPVVJDRV9UWVBFUyA9IFsnaW1hZ2UvYXZpZicsICdpbWFnZS93ZWJwJywgJ2ltYWdlL3BuZycsICdpbWFnZS9qcGcnXTtcblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgU09VUkNFX1RZUEVTKSB7XG4gICAgY29uc3QgYmFzZVVybCA9IGlzQ29udGVudGZ1bEdxbEFzc2V0KGFzc2V0RGF0YSkgPyBhc3NldERhdGEudXJsIDogYXNzZXREYXRhLmZpZWxkcy5maWxlLnVybDtcbiAgICBjb25zdCBzb3VyY2VTZXRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gU2V0IHRoZSBmb3JtYXQgKGUuZy4gJ2ZtPXdlYnAnKVxuICAgIHF1ZXJ5UGFyYW1zLnB1c2goYGZtPSR7dHlwZS5zcGxpdCgnLycpWzFdfWApO1xuXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgcXVlcnlQYXJhbXMucHVzaChgYmc9cmdiOiR7YmFja2dyb3VuZENvbG9yfWApO1xuICAgIH1cblxuICAgIGlmIChxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGBxPSR7cXVhbGl0eX1gKTtcbiAgICB9XG5cbiAgICBpZiAoZm9jdXNBcmVhKSB7XG4gICAgICBxdWVyeVBhcmFtcy5wdXNoKGBmPSR7Zm9jdXNBcmVhfWApO1xuICAgIH1cblxuICAgIGlmIChyZXNpemVCZWhhdmlvcikge1xuICAgICAgcXVlcnlQYXJhbXMucHVzaChgZml0PSR7cmVzaXplQmVoYXZpb3J9YCk7XG4gICAgfVxuICAgIGlmIChzcmNzZXRTaXplcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1cmxXaXRoUGFyYW1zID0gYCR7YmFzZVVybH0/JHtxdWVyeVBhcmFtcy5qb2luKCcmJyl9YDtcblxuICAgICAgZm9yIChjb25zdCBzaXplIG9mIHNyY3NldFNpemVzKSB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gcGFyc2VDb250ZW50ZnVsSW1hZ2VTaXplKHNpemUpO1xuXG4gICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgICAgICBzb3VyY2VTZXRzLnB1c2goYCR7dXJsV2l0aFBhcmFtc30mdz0ke3dpZHRofSZoPSR7aGVpZ2h0fSAke3dpZHRofXdgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aWR0aCkge1xuICAgICAgICAgIHNvdXJjZVNldHMucHVzaChgJHt1cmxXaXRoUGFyYW1zfSZ3PSR7d2lkdGh9ICR7d2lkdGh9d2ApO1xuICAgICAgICB9IGVsc2UgaWYgKGhlaWdodCkge1xuICAgICAgICAgIHNvdXJjZVNldHMucHVzaChgJHt1cmxXaXRoUGFyYW1zfSZoPSR7aGVpZ2h0fSAke2hlaWdodH1oYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzb3VyY2VzLnB1c2goe1xuICAgICAgdHlwZSxcbiAgICAgIHNyY3NldDogc291cmNlU2V0cy5sZW5ndGggPyBzb3VyY2VTZXRzLmpvaW4oJywgJykgOiBgJHtiYXNlVXJsfT8ke3F1ZXJ5UGFyYW1zLmpvaW4oJyYnKX1gLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZXM7XG59O1xuIl19","import { ChangeDetectionStrategy, Component, ViewEncapsulation, booleanAttribute, computed, inject, input, numberAttribute, } from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/cdk';\nimport { CONTENTFUL_CONFIG } from '../../constants';\nimport { isContentfulGqlAsset } from '../../gql';\nimport { generateContentfulImageSources, generateDefaultContentfulImageSource, } from './contentful-image.component.utils';\nimport * as i0 from \"@angular/core\";\nexport class ContentfulImageComponent {\n constructor() {\n this._contentfulConfig = inject(CONTENTFUL_CONFIG);\n this.asset = input.required();\n this.backgroundColor = input(null);\n this.srcsetSizes = input(this._contentfulConfig.imageOptions.srcsetSizes);\n this.quality = input(null, { transform: numberAttribute });\n this.focusArea = input(null);\n this.resizeBehavior = input(null);\n this.hasPriority = input(false, { transform: booleanAttribute });\n this.imgClass = input(null);\n this.figureClass = input(null);\n this.figcaptionClass = input(null);\n this.pictureClass = input(null);\n this.sizes = input(normalizePictureSizes(this._contentfulConfig.imageOptions.sizes), {\n transform: (v) => normalizePictureSizes(v),\n });\n this.normalizedAsset = computed(() => {\n const asset = this.asset();\n if (isContentfulGqlAsset(asset)) {\n return {\n alt: asset.title || null,\n figcaption: asset.description || null,\n width: asset.width,\n height: asset.height,\n };\n }\n else {\n return {\n alt: asset?.fields?.title || null,\n figcaption: asset?.fields?.description || null,\n width: asset?.fields?.file?.details?.image?.width ?? null,\n height: asset?.fields?.file?.details?.image?.height ?? null,\n };\n }\n });\n this._sources = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n if (!asset) {\n return [];\n }\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n this._defaultSrc = computed(() => {\n const asset = this.asset();\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.0\", type: ContentfulImageComponent, isStandalone: true, selector: \"et-contentful-image\", inputs: { asset: { classPropertyName: \"asset\", publicName: \"asset\", isSignal: true, isRequired: true, transformFunction: null }, backgroundColor: { classPropertyName: \"backgroundColor\", publicName: \"backgroundColor\", isSignal: true, isRequired: false, transformFunction: null }, srcsetSizes: { classPropertyName: \"srcsetSizes\", publicName: \"srcsetSizes\", isSignal: true, isRequired: false, transformFunction: null }, quality: { classPropertyName: \"quality\", publicName: \"quality\", isSignal: true, isRequired: false, transformFunction: null }, focusArea: { classPropertyName: \"focusArea\", publicName: \"focusArea\", isSignal: true, isRequired: false, transformFunction: null }, resizeBehavior: { classPropertyName: \"resizeBehavior\", publicName: \"resizeBehavior\", isSignal: true, isRequired: false, transformFunction: null }, hasPriority: { classPropertyName: \"hasPriority\", publicName: \"hasPriority\", isSignal: true, isRequired: false, transformFunction: null }, imgClass: { classPropertyName: \"imgClass\", publicName: \"imgClass\", isSignal: true, isRequired: false, transformFunction: null }, figureClass: { classPropertyName: \"figureClass\", publicName: \"figureClass\", isSignal: true, isRequired: false, transformFunction: null }, figcaptionClass: { classPropertyName: \"figcaptionClass\", publicName: \"figcaptionClass\", isSignal: true, isRequired: false, transformFunction: null }, pictureClass: { classPropertyName: \"pictureClass\", publicName: \"pictureClass\", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: \"sizes\", publicName: \"sizes\", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: \"et-contentful-image\" }, ngImport: i0, template: `\n <et-picture\n [imgClass]=\"imgClass()\"\n [hasPriority]=\"hasPriority()\"\n [figureClass]=\"figureClass()\"\n [pictureClass]=\"pictureClass()\"\n [figcaptionClass]=\"figcaptionClass()\"\n [defaultSrc]=\"_defaultSrc()\"\n [alt]=\"normalizedAsset().alt ?? null\"\n [figcaption]=\"normalizedAsset().figcaption ?? null\"\n [width]=\"normalizedAsset().width ?? null\"\n [height]=\"normalizedAsset().height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"_sources()\"\n />\n `, isInline: true, dependencies: [{ kind: \"component\", type: PictureComponent, selector: \"et-picture\", inputs: [\"sources\", \"hasPriority\", \"imgClass\", \"figureClass\", \"figcaptionClass\", \"pictureClass\", \"defaultSrc\", \"alt\", \"figcaption\", \"width\", \"height\", \"sizes\"], outputs: [\"imgLoaded\", \"imgError\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulImageComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-contentful-image',\n template: `\n <et-picture\n [imgClass]=\"imgClass()\"\n [hasPriority]=\"hasPriority()\"\n [figureClass]=\"figureClass()\"\n [pictureClass]=\"pictureClass()\"\n [figcaptionClass]=\"figcaptionClass()\"\n [defaultSrc]=\"_defaultSrc()\"\n [alt]=\"normalizedAsset().alt ?? null\"\n [figcaption]=\"normalizedAsset().figcaption ?? null\"\n [width]=\"normalizedAsset().width ?? null\"\n [height]=\"normalizedAsset().height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"_sources()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1pbWFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlL2NvbnRlbnRmdWwtaW1hZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFzQixvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyRSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLG9DQUFvQyxHQUNyQyxNQUFNLG9DQUFvQyxDQUFDOztBQTJCNUMsTUFBTSxPQUFPLHdCQUF3QjtJQXpCckM7UUEwQkUsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQStELENBQUM7UUFDdEYsb0JBQWUsR0FBRyxLQUFLLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQzdDLGdCQUFXLEdBQUcsS0FBSyxDQUFXLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFL0UsWUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUN0RCxjQUFTLEdBQUcsS0FBSyxDQUFrQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLEtBQUssQ0FBdUMsSUFB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QXdCO2tCQXpCcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztHQWVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUscUJBQXFCO3FCQUM3QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBpY3R1cmVDb21wb25lbnQsIG5vcm1hbGl6ZVBpY3R1cmVTaXplcyB9IGZyb20gJ0BldGhsZXRlL2Nkayc7XG5pbXBvcnQgeyBOZ0NsYXNzVHlwZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQ09OVEVOVEZVTF9DT05GSUcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29udGVudGZ1bEdxbEFzc2V0LCBpc0NvbnRlbnRmdWxHcWxBc3NldCB9IGZyb20gJy4uLy4uL2dxbCc7XG5pbXBvcnQgeyBDb250ZW50ZnVsSW1hZ2VGb2N1c0FyZWEsIENvbnRlbnRmdWxJbWFnZVJlc2l6ZUJlaGF2aW9yLCBDb250ZW50ZnVsUmVzdEFzc2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVDb250ZW50ZnVsSW1hZ2VTb3VyY2VzLFxuICBnZW5lcmF0ZURlZmF1bHRDb250ZW50ZnVsSW1hZ2VTb3VyY2UsXG59IGZyb20gJy4vY29udGVudGZ1bC1pbWFnZS5jb21wb25lbnQudXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1jb250ZW50ZnVsLWltYWdlJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZXQtcGljdHVyZVxuICAgICAgW2ltZ0NsYXNzXT1cImltZ0NsYXNzKClcIlxuICAgICAgW2hhc1ByaW9yaXR5XT1cImhhc1ByaW9yaXR5KClcIlxuICAgICAgW2ZpZ3VyZUNsYXNzXT1cImZpZ3VyZUNsYXNzKClcIlxuICAgICAgW3BpY3R1cmVDbGFzc109XCJwaWN0dXJlQ2xhc3MoKVwiXG4gICAgICBbZmlnY2FwdGlvbkNsYXNzXT1cImZpZ2NhcHRpb25DbGFzcygpXCJcbiAgICAgIFtkZWZhdWx0U3JjXT1cIl9kZWZhdWx0U3JjKClcIlxuICAgICAgW2FsdF09XCJub3JtYWxpemVkQXNzZXQoKS5hbHQgPz8gbnVsbFwiXG4gICAgICBbZmlnY2FwdGlvbl09XCJub3JtYWxpemVkQXNzZXQoKS5maWdjYXB0aW9uID8/IG51bGxcIlxuICAgICAgW3dpZHRoXT1cIm5vcm1hbGl6ZWRBc3NldCgpLndpZHRoID8/IG51bGxcIlxuICAgICAgW2hlaWdodF09XCJub3JtYWxpemVkQXNzZXQoKS5oZWlnaHQgPz8gbnVsbFwiXG4gICAgICBbc2l6ZXNdPVwic2l6ZXMoKVwiXG4gICAgICBbc291cmNlc109XCJfc291cmNlcygpXCJcbiAgICAvPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1BpY3R1cmVDb21wb25lbnRdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1jb250ZW50ZnVsLWltYWdlJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudGZ1bEltYWdlQ29tcG9uZW50IHtcbiAgX2NvbnRlbnRmdWxDb25maWcgPSBpbmplY3QoQ09OVEVOVEZVTF9DT05GSUcpO1xuXG4gIGFzc2V0ID0gaW5wdXQucmVxdWlyZWQ8Q29udGVudGZ1bFJlc3RBc3NldCB8IENvbnRlbnRmdWxHcWxBc3NldCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gIGJhY2tncm91bmRDb2xvciA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBzcmNzZXRTaXplcyA9IGlucHV0PHN0cmluZ1tdPih0aGlzLl9jb250ZW50ZnVsQ29uZmlnLmltYWdlT3B0aW9ucy5zcmNzZXRTaXplcyk7XG5cbiAgcXVhbGl0eSA9IGlucHV0KG51bGwsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG4gIGZvY3VzQXJlYSA9IGlucHV0PENvbnRlbnRmdWxJbWFnZUZvY3VzQXJlYSB8IG51bGw+KG51bGwpO1xuICByZXNpemVCZWhhdmlvciA9IGlucHV0PENvbnRlbnRmdWxJbWFnZVJlc2l6ZUJlaGF2aW9yIHwgbnVsbD4obnVsbCk7XG4gIGhhc1ByaW9yaXR5ID0gaW5wdXQoZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuICBpbWdDbGFzcyA9IGlucHV0PE5nQ2xhc3NUeXBlPihudWxsKTtcbiAgZmlndXJlQ2xhc3MgPSBpbnB1dDxOZ0NsYXNzVHlwZT4obnVsbCk7XG4gIGZpZ2NhcHRpb25DbGFzcyA9IGlucHV0PE5nQ2xhc3NUeXBlPihudWxsKTtcbiAgcGljdHVyZUNsYXNzID0gaW5wdXQ8TmdDbGFzc1R5cGU+KG51bGwpO1xuICBzaXplcyA9IGlucHV0PHN0cmluZyB8IG51bGwsIHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbD4oXG4gICAgbm9ybWFsaXplUGljdHVyZVNpemVzKHRoaXMuX2NvbnRlbnRmdWxDb25maWcuaW1hZ2VPcHRpb25zLnNpemVzKSxcbiAgICB7XG4gICAgICB0cmFuc2Zvcm06ICh2KSA9PiBub3JtYWxpemVQaWN0dXJlU2l6ZXModiksXG4gICAgfSxcbiAgKTtcblxuICBub3JtYWxpemVkQXNzZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXNzZXQgPSB0aGlzLmFzc2V0KCk7XG5cbiAgICBpZiAoaXNDb250ZW50ZnVsR3FsQXNzZXQoYXNzZXQpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHQ6IGFzc2V0LnRpdGxlIHx8IG51bGwsXG4gICAgICAgIGZpZ2NhcHRpb246IGFzc2V0LmRlc2NyaXB0aW9uIHx8IG51bGwsXG4gICAgICAgIHdpZHRoOiBhc3NldC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBhc3NldC5oZWlnaHQsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbHQ6IGFzc2V0Py5maWVsZHM/LnRpdGxlIHx8IG51bGwsXG4gICAgICAgIGZpZ2NhcHRpb246IGFzc2V0Py5maWVsZHM/LmRlc2NyaXB0aW9uIHx8IG51bGwsXG4gICAgICAgIHdpZHRoOiBhc3NldD8uZmllbGRzPy5maWxlPy5kZXRhaWxzPy5pbWFnZT8ud2lkdGggPz8gbnVsbCxcbiAgICAgICAgaGVpZ2h0OiBhc3NldD8uZmllbGRzPy5maWxlPy5kZXRhaWxzPy5pbWFnZT8uaGVpZ2h0ID8/IG51bGwsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgX3NvdXJjZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXNzZXQgPSB0aGlzLmFzc2V0KCk7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IoKTtcbiAgICBjb25zdCBzcmNzZXRTaXplcyA9IHRoaXMuc3Jjc2V0U2l6ZXMoKTtcbiAgICBjb25zdCBxdWFsaXR5ID0gdGhpcy5xdWFsaXR5KCk7XG4gICAgY29uc3QgZm9jdXNBcmVhID0gdGhpcy5mb2N1c0FyZWEoKTtcbiAgICBjb25zdCByZXNpemVCZWhhdmlvciA9IHRoaXMucmVzaXplQmVoYXZpb3IoKTtcblxuICAgIGlmICghYXNzZXQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2VuZXJhdGVDb250ZW50ZnVsSW1hZ2VTb3VyY2VzKGFzc2V0LCBzcmNzZXRTaXplcywgYmFja2dyb3VuZENvbG9yLCBxdWFsaXR5LCBmb2N1c0FyZWEsIHJlc2l6ZUJlaGF2aW9yKTtcbiAgfSk7XG5cbiAgX2RlZmF1bHRTcmMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXNzZXQgPSB0aGlzLmFzc2V0KCk7XG5cbiAgICByZXR1cm4gYXNzZXQgPyBnZW5lcmF0ZURlZmF1bHRDb250ZW50ZnVsSW1hZ2VTb3VyY2UoYXNzZXQpIDogbnVsbDtcbiAgfSk7XG59XG4iXX0=","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { isContentfulGqlAsset } from '../../gql';\nimport * as i0 from \"@angular/core\";\nexport class ContentfulVideoComponent {\n constructor() {\n this.asset = input.required();\n this.videoClass = input(null);\n this.data = computed(() => {\n const asset = this.asset();\n if (!asset) {\n return null;\n }\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n };\n }\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n };\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.0\", type: ContentfulVideoComponent, isStandalone: true, selector: \"et-contentful-video\", inputs: { asset: { classPropertyName: \"asset\", publicName: \"asset\", isSignal: true, isRequired: true, transformFunction: null }, videoClass: { classPropertyName: \"videoClass\", publicName: \"videoClass\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n @if (data(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.url }}\" type=\"{{ data.contentType }}\" />\n </video>\n }\n `, isInline: true, dependencies: [{ kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulVideoComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-contentful-video',\n template: `\n @if (data(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.url }}\" type=\"{{ data.contentType }}\" />\n </video>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC12aWRlby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL3ZpZGVvL2NvbnRlbnRmdWwtdmlkZW8uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkcsT0FBTyxFQUFzQixvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFnQnJFLE1BQU0sT0FBTyx3QkFBd0I7SUFickM7UUFjRSxVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBK0QsQ0FBQztRQUN0RixlQUFVLEdBQUcsS0FBSyxDQUFjLElBQUksQ0FBQyxDQUFDO1FBRXRDLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUzQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPO29CQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztvQkFDZCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7aUJBQy9CLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFDMUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVc7YUFDM0MsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0tBQ0o7OEdBdkJZLHdCQUF3QjtrR0FBeEIsd0JBQXdCLHlWQVh6Qjs7Ozs7O0dBTVQsNERBR1MsT0FBTzs7MkZBRU4sd0JBQXdCO2tCQWJwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7Ozs7O0dBTVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzVHlwZSB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29udGVudGZ1bEdxbEFzc2V0LCBpc0NvbnRlbnRmdWxHcWxBc3NldCB9IGZyb20gJy4uLy4uL2dxbCc7XG5pbXBvcnQgeyBDb250ZW50ZnVsUmVzdEFzc2V0IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1jb250ZW50ZnVsLXZpZGVvJyxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGRhdGEoKTsgYXMgZGF0YSkge1xuICAgICAgPHZpZGVvIFtuZ0NsYXNzXT1cInZpZGVvQ2xhc3MoKVwiIGNvbnRyb2xzPlxuICAgICAgICA8c291cmNlIHNyYz1cInt7IGRhdGEudXJsIH19XCIgdHlwZT1cInt7IGRhdGEuY29udGVudFR5cGUgfX1cIiAvPlxuICAgICAgPC92aWRlbz5cbiAgICB9XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbTmdDbGFzc10sXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRmdWxWaWRlb0NvbXBvbmVudCB7XG4gIGFzc2V0ID0gaW5wdXQucmVxdWlyZWQ8Q29udGVudGZ1bFJlc3RBc3NldCB8IENvbnRlbnRmdWxHcWxBc3NldCB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gIHZpZGVvQ2xhc3MgPSBpbnB1dDxOZ0NsYXNzVHlwZT4obnVsbCk7XG5cbiAgZGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhc3NldCA9IHRoaXMuYXNzZXQoKTtcblxuICAgIGlmICghYXNzZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc0NvbnRlbnRmdWxHcWxBc3NldChhc3NldCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVybDogYXNzZXQudXJsLFxuICAgICAgICBjb250ZW50VHlwZTogYXNzZXQuY29udGVudFR5cGUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGFzc2V0LmZpZWxkcy5maWxlLnVybCxcbiAgICAgIGNvbnRlbnRUeXBlOiBhc3NldC5maWVsZHMuZmlsZS5jb250ZW50VHlwZSxcbiAgICB9O1xuICB9KTtcbn1cbiJdfQ==","import { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulVideoComponent } from '../components/video';\nexport const createContentfulConfig = (config = {}) => ({\n // This default config must be inline and not saved inside a const for some weird webpack reason\n ...{\n useTailwindClasses: false,\n components: {\n audio: ContentfulAudioComponent,\n file: ContentfulFileComponent,\n image: ContentfulImageComponent,\n video: ContentfulVideoComponent,\n },\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: [],\n backgroundColor: null,\n },\n },\n ...(config || {}),\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi91dGlscy9jb250ZW50ZnVsLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxTQUF1RCxFQUFFLEVBQ3ZDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLGdHQUFnRztJQUNoRyxHQUFHO1FBQ0Qsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixVQUFVLEVBQUU7WUFDVixLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsS0FBSyxFQUFFLHdCQUF3QjtZQUMvQixLQUFLLEVBQUUsd0JBQXdCO1NBQ2hDO1FBQ0QsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixZQUFZLEVBQUU7WUFDWixXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDaEQsS0FBSyxFQUFFLEVBQUU7WUFDVCxlQUFlLEVBQUUsSUFBSTtTQUN0QjtLQUNGO0lBQ0QsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7Q0FDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudGZ1bEF1ZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdWRpbyc7XG5pbXBvcnQgeyBDb250ZW50ZnVsRmlsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmlsZSc7XG5pbXBvcnQgeyBDb250ZW50ZnVsSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ltYWdlJztcbmltcG9ydCB7IENvbnRlbnRmdWxWaWRlb0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdmlkZW8nO1xuaW1wb3J0IHsgQ29udGVudGZ1bENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRlbnRmdWxDb25maWcgPSAoXG4gIGNvbmZpZzogUGFydGlhbDxDb250ZW50ZnVsQ29uZmlnPiB8IG51bGwgfCB1bmRlZmluZWQgPSB7fSxcbik6IENvbnRlbnRmdWxDb25maWcgPT4gKHtcbiAgLy8gVGhpcyBkZWZhdWx0IGNvbmZpZyBtdXN0IGJlIGlubGluZSBhbmQgbm90IHNhdmVkIGluc2lkZSBhIGNvbnN0IGZvciBzb21lIHdlaXJkIHdlYnBhY2sgcmVhc29uXG4gIC4uLntcbiAgICB1c2VUYWlsd2luZENsYXNzZXM6IGZhbHNlLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIGF1ZGlvOiBDb250ZW50ZnVsQXVkaW9Db21wb25lbnQsXG4gICAgICBmaWxlOiBDb250ZW50ZnVsRmlsZUNvbXBvbmVudCxcbiAgICAgIGltYWdlOiBDb250ZW50ZnVsSW1hZ2VDb21wb25lbnQsXG4gICAgICB2aWRlbzogQ29udGVudGZ1bFZpZGVvQ29tcG9uZW50LFxuICAgIH0sXG4gICAgY3VzdG9tQ29tcG9uZW50czoge30sXG4gICAgaW1hZ2VPcHRpb25zOiB7XG4gICAgICBzcmNzZXRTaXplczogWyczNzV3JywgJzEyODB3JywgJzE5MjB3JywgJzI1NjB3J10sXG4gICAgICBzaXplczogW10sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG4gICAgfSxcbiAgfSxcbiAgLi4uKGNvbmZpZyB8fCB7fSksXG59KTtcbiJdfQ==","import { RuntimeError } from '@ethlete/core';\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined: 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type: 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type: 'The parent node neither a html element nor a custom component. This structure is not supported.',\n};\nconst RICH_TEXT_RENDERER_ERROR_CODES = Object.keys(RICH_TEXT_RENDERER_ERRORS).reduce((acc, key, index) => {\n acc[key] = index;\n return acc;\n}, {});\nexport const richTextRendererError = (code, devOnly, data) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, devOnly, data);\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LXJlbmRlcmVyLmVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29udGVudGZ1bC9zcmMvbGliL2NvbXBvbmVudHMvcmljaC10ZXh0LXJlbmRlcmVyL3JpY2gtdGV4dC1yZW5kZXJlci5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxtQkFBbUIsRUFDakIsZ0lBQWdJO0lBQ2xJLG9CQUFvQixFQUNsQixnSkFBZ0o7SUFFbEosa0JBQWtCLEVBQUUseURBQXlEO0lBQzdFLGtCQUFrQixFQUFFLHlEQUF5RDtJQUU3RSxlQUFlLEVBQUUsc0RBQXNEO0lBQ3ZFLGVBQWUsRUFBRSxzREFBc0Q7SUFFdkUsMEJBQTBCLEVBQUUsNkVBQTZFO0lBRXpHLHFCQUFxQixFQUFFLGdFQUFnRTtJQUN2RixzQkFBc0IsRUFDcEIsaUdBQWlHO0NBQzNGLENBQUM7QUFFWCxNQUFNLDhCQUE4QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxNQUFNLENBQ2xGLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUNsQixHQUFHLENBQUMsR0FBNkMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMzRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsRUFDRCxFQUE0RCxDQUM3RCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsSUFBNEMsRUFDNUMsT0FBZ0IsRUFDaEIsSUFBYyxFQUNkLEVBQUU7SUFDRixNQUFNLE9BQU8sR0FBRyx1Q0FBdUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUV6RixNQUFNLElBQUksWUFBWSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUnVudGltZUVycm9yIH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBSSUNIX1RFWFRfUkVOREVSRVJfRVJST1JTID0ge1xuICByaWNoX3RleHRfdW5kZWZpbmVkOlxuICAgICdUaGUgcHJvcGVydHkgdmFsdWUgZ2l2ZW4gYXQgcmljaFRleHRQYXRoIGlzIHVuZGVmaW5lZC4gVXNlIHRoZSByaWNoVGV4dFBhdGggaW5wdXQgdG8gc3BlY2lmeSB0aGUgcGF0aCB0byB0aGUgcmljaCB0ZXh0IG9iamVjdC4nLFxuICByaWNoX3RleHRfd3JvbmdfdHlwZTpcbiAgICAnVGhlIHJpY2ggdGV4dCBvYmplY3QgZG9lcyBub3Qgc2F0aXNmeSB0aGUgUmljaFRleHRSZXNwb25zZSBpbnRlcmZhY2UuIEl0IHNob3VsZCBjb250YWluIGEgcHJvcGVydHkgbmFtZWQgXCJub2RlVHlwZVwiIHdpdGggdGhlIHZhbHVlIFwiZG9jdW1lbnRcIi4nLFxuXG4gIGFzc2V0X2lkX25vdF9mb3VuZDogJ1RoZSBhc3NldCBJRCB3YXMgbm90IGZvdW5kLiBUaGlzIG5vZGUgaXMgbm90IHN1cHBvcnRlZC4nLFxuICBlbnRyeV9pZF9ub3RfZm91bmQ6ICdUaGUgZW50cnkgSUQgd2FzIG5vdCBmb3VuZC4gVGhpcyBub2RlIGlzIG5vdCBzdXBwb3J0ZWQuJyxcblxuICBhc3NldF9ub3RfZm91bmQ6ICdUaGUgYXNzZXQgd2FzIG5vdCBmb3VuZC4gVGhpcyBub2RlIGlzIG5vdCBzdXBwb3J0ZWQuJyxcbiAgZW50cnlfbm90X2ZvdW5kOiAnVGhlIGVudHJ5IHdhcyBub3QgZm91bmQuIFRoaXMgbm9kZSBpcyBub3Qgc3VwcG9ydGVkLicsXG5cbiAgY3VzdG9tX2NvbXBvbmVudF9ub3RfZm91bmQ6ICdObyBjdXN0b20gY29tcG9uZW50IGZvdW5kIGZvciBlbnRyeSB0eXBlLiBQbGVhc2UgcHJvdmlkZSBvbmUgZm9yIHRoaXMgdHlwZS4nLFxuXG4gIHRleHRfcGFyZW50X25vdF9mb3VuZDogJ1RoZSBwYXJlbnQgbm9kZSBpcyBub3QgZm91bmQuIFRoaXMgc3RydWN0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuJyxcbiAgdGV4dF9wYXJlbnRfd3JvbmdfdHlwZTpcbiAgICAnVGhlIHBhcmVudCBub2RlIG5laXRoZXIgYSBodG1sIGVsZW1lbnQgbm9yIGEgY3VzdG9tIGNvbXBvbmVudC4gVGhpcyBzdHJ1Y3R1cmUgaXMgbm90IHN1cHBvcnRlZC4nLFxufSBhcyBjb25zdDtcblxuY29uc3QgUklDSF9URVhUX1JFTkRFUkVSX0VSUk9SX0NPREVTID0gT2JqZWN0LmtleXMoUklDSF9URVhUX1JFTkRFUkVSX0VSUk9SUykucmVkdWNlKFxuICAoYWNjLCBrZXksIGluZGV4KSA9PiB7XG4gICAgYWNjW2tleSBhcyBrZXlvZiB0eXBlb2YgUklDSF9URVhUX1JFTkRFUkVSX0VSUk9SU10gPSBpbmRleDtcbiAgICByZXR1cm4gYWNjO1xuICB9LFxuICB7fSBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIFJJQ0hfVEVYVF9SRU5ERVJFUl9FUlJPUlMsIG51bWJlcj4sXG4pO1xuXG5leHBvcnQgY29uc3QgcmljaFRleHRSZW5kZXJlckVycm9yID0gKFxuICBjb2RlOiBrZXlvZiB0eXBlb2YgUklDSF9URVhUX1JFTkRFUkVSX0VSUk9SUyxcbiAgZGV2T25seTogYm9vbGVhbixcbiAgZGF0YT86IHVua25vd24sXG4pID0+IHtcbiAgY29uc3QgbWVzc2FnZSA9IGA8ZXQtY29udGVudGZ1bC1yaWNoLXRleHQtcmVuZGVyZXI+OiAke1JJQ0hfVEVYVF9SRU5ERVJFUl9FUlJPUlNbY29kZV19YDtcblxuICB0aHJvdyBuZXcgUnVudGltZUVycm9yKFJJQ0hfVEVYVF9SRU5ERVJFUl9FUlJPUl9DT0RFU1tjb2RlXSwgbWVzc2FnZSwgZGV2T25seSwgZGF0YSk7XG59O1xuIl19","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nexport const isRichTextRootNode = (node) => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\n};\nexport const translateContentfulNodeTypeToHtmlTag = (nodeType) => {\n switch (nodeType) {\n case BLOCKS.HEADING_1:\n return 'h1';\n case BLOCKS.HEADING_2:\n return 'h2';\n case BLOCKS.HEADING_3:\n return 'h3';\n case BLOCKS.HEADING_4:\n return 'h4';\n case BLOCKS.HEADING_5:\n return 'h5';\n case BLOCKS.HEADING_6:\n return 'h6';\n case BLOCKS.PARAGRAPH:\n return 'p';\n case BLOCKS.UL_LIST:\n return 'ul';\n case BLOCKS.OL_LIST:\n return 'ol';\n case BLOCKS.LIST_ITEM:\n return 'li';\n case BLOCKS.HR:\n return 'hr';\n case BLOCKS.QUOTE:\n return 'blockquote';\n case BLOCKS.TABLE:\n return 'table';\n case BLOCKS.TABLE_ROW:\n return 'tr';\n case BLOCKS.TABLE_CELL:\n return 'td';\n case BLOCKS.TABLE_HEADER_CELL:\n return 'th';\n case BLOCKS.EMBEDDED_ASSET:\n return 'div';\n case INLINES.HYPERLINK:\n return 'a';\n case INLINES.ENTRY_HYPERLINK:\n return 'a';\n case INLINES.ASSET_HYPERLINK:\n return 'a';\n case 'text':\n return 'span';\n // Will be ignored by the renderer\n case 'document':\n return 'document';\n case BLOCKS.EMBEDDED_ENTRY:\n return 'div';\n case INLINES.EMBEDDED_ENTRY:\n return 'div';\n default:\n return 'div';\n }\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LXJlbmRlcmVyLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2xpYi9jb21wb25lbnRzL3JpY2gtdGV4dC1yZW5kZXJlci9yaWNoLXRleHQtcmVuZGVyZXIudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHekMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFhLEVBQTRCLEVBQUU7SUFDNUUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssVUFBVSxDQUFDO0FBQ2pGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLENBQUMsUUFBbUMsRUFBRSxFQUFFO0lBQzFGLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNLENBQUMsU0FBUztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUMsU0FBUztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUMsU0FBUztZQUNuQixPQUFPLEdBQUcsQ0FBQztRQUNiLEtBQUssTUFBTSxDQUFDLE9BQU87WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQyxPQUFPO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsS0FBSyxNQUFNLENBQUMsU0FBUztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDLEtBQUs7WUFDZixPQUFPLFlBQVksQ0FBQztRQUN0QixLQUFLLE1BQU0sQ0FBQyxLQUFLO1lBQ2YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxNQUFNLENBQUMsU0FBUztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDLFVBQVU7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQyxpQkFBaUI7WUFDM0IsT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQyxjQUFjO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1FBRWYsS0FBSyxPQUFPLENBQUMsU0FBUztZQUNwQixPQUFPLEdBQUcsQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDLGVBQWU7WUFDMUIsT0FBTyxHQUFHLENBQUM7UUFDYixLQUFLLE9BQU8sQ0FBQyxlQUFlO1lBQzFCLE9BQU8sR0FBRyxDQUFDO1FBRWIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFFaEIsa0NBQWtDO1FBQ2xDLEtBQUssVUFBVTtZQUNiLE9BQU8sVUFBVSxDQUFDO1FBRXBCLEtBQUssTUFBTSxDQUFDLGNBQWM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixLQUFLLE9BQU8sQ0FBQyxjQUFjO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1FBRWY7WUFDRSxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQkxPQ0tTLCBJTkxJTkVTIH0gZnJvbSAnQGNvbnRlbnRmdWwvcmljaC10ZXh0LXR5cGVzJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBSaWNoVGV4dFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNSaWNoVGV4dFJvb3ROb2RlID0gKG5vZGU6IHVua25vd24pOiBub2RlIGlzIFJpY2hUZXh0UmVzcG9uc2UgPT4ge1xuICByZXR1cm4gaXNPYmplY3Qobm9kZSkgJiYgJ25vZGVUeXBlJyBpbiBub2RlICYmIG5vZGVbJ25vZGVUeXBlJ10gPT09ICdkb2N1bWVudCc7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlQ29udGVudGZ1bE5vZGVUeXBlVG9IdG1sVGFnID0gKG5vZGVUeXBlOiAndGV4dCcgfCBCTE9DS1MgfCBJTkxJTkVTKSA9PiB7XG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzE6XG4gICAgICByZXR1cm4gJ2gxJztcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzI6XG4gICAgICByZXR1cm4gJ2gyJztcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzM6XG4gICAgICByZXR1cm4gJ2gzJztcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzQ6XG4gICAgICByZXR1cm4gJ2g0JztcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzU6XG4gICAgICByZXR1cm4gJ2g1JztcbiAgICBjYXNlIEJMT0NLUy5IRUFESU5HXzY6XG4gICAgICByZXR1cm4gJ2g2JztcbiAgICBjYXNlIEJMT0NLUy5QQVJBR1JBUEg6XG4gICAgICByZXR1cm4gJ3AnO1xuICAgIGNhc2UgQkxPQ0tTLlVMX0xJU1Q6XG4gICAgICByZXR1cm4gJ3VsJztcbiAgICBjYXNlIEJMT0NLUy5PTF9MSVNUOlxuICAgICAgcmV0dXJuICdvbCc7XG4gICAgY2FzZSBCTE9DS1MuTElTVF9JVEVNOlxuICAgICAgcmV0dXJuICdsaSc7XG4gICAgY2FzZSBCTE9DS1MuSFI6XG4gICAgICByZXR1cm4gJ2hyJztcbiAgICBjYXNlIEJMT0NLUy5RVU9URTpcbiAgICAgIHJldHVybiAnYmxvY2txdW90ZSc7XG4gICAgY2FzZSBCTE9DS1MuVEFCTEU6XG4gICAgICByZXR1cm4gJ3RhYmxlJztcbiAgICBjYXNlIEJMT0NLUy5UQUJMRV9ST1c6XG4gICAgICByZXR1cm4gJ3RyJztcbiAgICBjYXNlIEJMT0NLUy5UQUJMRV9DRUxMOlxuICAgICAgcmV0dXJuICd0ZCc7XG4gICAgY2FzZSBCTE9DS1MuVEFCTEVfSEVBREVSX0NFTEw6XG4gICAgICByZXR1cm4gJ3RoJztcbiAgICBjYXNlIEJMT0NLUy5FTUJFRERFRF9BU1NFVDpcbiAgICAgIHJldHVybiAnZGl2JztcblxuICAgIGNhc2UgSU5MSU5FUy5IWVBFUkxJTks6XG4gICAgICByZXR1cm4gJ2EnO1xuICAgIGNhc2UgSU5MSU5FUy5FTlRSWV9IWVBFUkxJTks6XG4gICAgICByZXR1cm4gJ2EnO1xuICAgIGNhc2UgSU5MSU5FUy5BU1NFVF9IWVBFUkxJTks6XG4gICAgICByZXR1cm4gJ2EnO1xuXG4gICAgY2FzZSAndGV4dCc6XG4gICAgICByZXR1cm4gJ3NwYW4nO1xuXG4gICAgLy8gV2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSByZW5kZXJlclxuICAgIGNhc2UgJ2RvY3VtZW50JzpcbiAgICAgIHJldHVybiAnZG9jdW1lbnQnO1xuXG4gICAgY2FzZSBCTE9DS1MuRU1CRURERURfRU5UUlk6XG4gICAgICByZXR1cm4gJ2Rpdic7XG4gICAgY2FzZSBJTkxJTkVTLkVNQkVEREVEX0VOVFJZOlxuICAgICAgcmV0dXJuICdkaXYnO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnZGl2JztcbiAgfVxufTtcbiJdfQ==","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, Renderer2, ViewContainerRef, ViewEncapsulation, computed, inject, input, isDevMode, } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { getObjectProperty, isObject } from '@ethlete/core';\nimport { pairwise, startWith, tap } from 'rxjs';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport { createContentfulConfig } from '../../utils/contentful-config';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\nimport * as i0 from \"@angular/core\";\nexport const RENDER_COMMAND_TYPE = {\n HTML_OPEN: 0,\n HTML_CLOSE: 1,\n TEXT: 2,\n COMPONENT: 3,\n};\nexport const RENDER_COMMAND_POSITION = {\n TYPE: 0,\n NESTING_LEVEL: 1,\n DOM_POSITION: 2,\n INDEX: 3,\n};\nexport const HTML_OPEN_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TAG_NAME: 5,\n ELEMENT_ID: 6,\n};\nexport const HTML_CLOSE_RENDER_COMMAND_POSITION = {\n TAG_NAME: 4,\n ELEMENT_ID: 5,\n};\nexport const TEXT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TEXT: 5,\n TEXT_ID: 6,\n};\nexport const COMPONENT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n COMPONENT: 5,\n INPUTS: 6,\n COMPONENT_ID: 7,\n};\nexport const RENDER_INSTRUCTION_POSITION = {\n TYPE: 0,\n COMMAND: 1,\n};\nexport const RENDER_INSTRUCTION_TYPE = {\n CREATE: 0,\n UPDATE: 1,\n DELETE: 2,\n MOVE: 3,\n};\nconst MARK_TAILWIND_MAP = {\n bold: 'font-bold',\n italic: 'italic',\n underline: 'underline',\n code: 'font-mono',\n};\nexport const marksToClass = (marks) => {\n const classes = [];\n for (const mark of marks) {\n let klass = MARK_TAILWIND_MAP[mark.type];\n if (!klass) {\n console.warn(`No class found for mark type! Falling back to \"${mark.type}\".`, mark);\n klass = mark.type;\n }\n classes.push(klass);\n }\n return classes.join(' ');\n};\nexport const isHtmlOpenRenderCommand = (command) => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN;\n};\nexport const isHtmlCloseRenderCommand = (command) => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_CLOSE;\n};\nexport const isTextRenderCommand = (command) => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.TEXT;\n};\nexport const isComponentRenderCommand = (command) => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.COMPONENT;\n};\nexport const getRenderCommandId = (command) => {\n if (isHtmlOpenRenderCommand(command)) {\n return command[HTML_OPEN_RENDER_COMMAND_POSITION.ELEMENT_ID];\n }\n else if (isHtmlCloseRenderCommand(command)) {\n return command[HTML_CLOSE_RENDER_COMMAND_POSITION.ELEMENT_ID];\n }\n else if (isTextRenderCommand(command)) {\n return command[TEXT_RENDER_COMMAND_POSITION.TEXT_ID];\n }\n else {\n return command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_ID];\n }\n};\nconst CLASS_ATTR = 'class';\nconst DEFAULT_COMPONENT_TYPES = {\n IMAGE: '$$$_et-image',\n VIDEO: '$$$_et-video',\n AUDIO: '$$$_et-audio',\n FILE: '$$$_et-file',\n};\nexport const isExecutedComponentCommandCacheItem = (cache) => {\n return isComponentRenderCommand(cache.command);\n};\nexport const isExecutedHtmlOrTextCommandCacheItem = (cache) => {\n return isHtmlCloseRenderCommand(cache.command) || isHtmlOpenRenderCommand(cache.command);\n};\nexport const isExecutedTextCommandCacheItem = (cache) => {\n return isTextRenderCommand(cache.command);\n};\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n/**\n * Create a contentful include map using the provided entries and assets.\n */\nexport const createContentfulIncludeMap = (config) => {\n const { entries, assets } = config;\n const assetMap = new Map(assets.map((asset) => [asset.sys.id, asset]));\n const entryMap = new Map(entries.map((entry) => [entry.sys.id, entry]));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = (id, contentTypeId) => {\n const entry = entryMap.get(id);\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n return null;\n }\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry;\n }\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n return null;\n }\n return entry;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = (ids, contentTypeId) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry(id, contentTypeId))\n .filter((entry) => entry !== null);\n return entries;\n };\n const getAsset = (id) => {\n return assetMap.get(id) ?? null;\n };\n const getAssets = (ids) => {\n return ids.map((id) => getAsset(id)).filter((asset) => asset !== null);\n };\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n};\nexport class ContentfulRichTextRendererComponent {\n constructor() {\n this._viewContainerRef = inject(ViewContainerRef);\n this._renderer = inject(Renderer2);\n this._elementRef = inject(ElementRef);\n this._document = inject(DOCUMENT);\n this._config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n /**\n * A cache for all executed commands that are not deleted.\n * This is used to keep track of all rendered elements and components.\n * The key is the render command element ID.\n */\n this._executedCommandsCache = new Map();\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n this.content = input.required();\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @example \"items[0].fields.html\"\n */\n this.richTextPath = input.required();\n /**\n * A map of all includes in the contentful response.\n * This is useful for looking up assets and entries that are referenced in the rich text without having to use loops.\n */\n this.contentIncludesMap = computed(() => {\n const content = this.content();\n const assets = content?.includes.Asset;\n const entries = content?.includes.Entry;\n return createContentfulIncludeMap({ assets: assets ?? [], entries: entries ?? [] });\n });\n /**\n * The rich text data that should be rendered.\n */\n this.richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n if (!content) {\n return null;\n }\n const richText = getObjectProperty(content, richTextPath);\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', false, { content, richTextPath });\n }\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', false, { content, richTextPath });\n }\n return richText;\n });\n this.renderCommands = computed(() => {\n const richTextData = this.richTextData();\n if (!richTextData) {\n return [];\n }\n return this._createRenderCommands(richTextData);\n });\n this.renderCommandHistory = toSignal(toObservable(this.renderCommands).pipe(startWith([]), pairwise()), { initialValue: [[], []] });\n this.previousRenderCommandMap = computed(() => {\n const [prevCommands] = this.renderCommandHistory();\n const map = new Map();\n for (const command of prevCommands) {\n map.set(getRenderCommandId(command), command);\n }\n return map;\n });\n this.renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = new Map(this.previousRenderCommandMap());\n const instructions = [];\n // remove deleted components as well as all other elements\n for (const [, command] of previousRenderCommandMap) {\n if (isComponentRenderCommand(command)) {\n // keep the component around if it's still in the new commands\n if (commands.some((c) => getRenderCommandId(c) === getRenderCommandId(command))) {\n continue;\n }\n }\n instructions.push([RENDER_INSTRUCTION_TYPE.DELETE, command]);\n // remove from map to mark as used\n previousRenderCommandMap.delete(getRenderCommandId(command));\n }\n // Find the indexes of the commands remaining in the previousRenderCommandMap in the new commands array.\n const lastComponentIndexes = [];\n for (const [id, command] of previousRenderCommandMap) {\n const index = commands.findIndex((c) => getRenderCommandId(c) === id);\n const newCommand = commands[index];\n if (index === -1) {\n throw new Error('Command not found!');\n }\n lastComponentIndexes.push({\n newIndex: index,\n prevIndex: command[RENDER_COMMAND_POSITION.INDEX],\n command: newCommand,\n });\n }\n lastComponentIndexes.sort((a, b) => a.newIndex - b.newIndex);\n // check if the prevIndex are in order ascending\n // for indexes that are not in order, create a move instruction\n // for indexes that are in order, create an update instruction\n let moveCheckIndex = 0;\n while (moveCheckIndex < lastComponentIndexes.length - 1) {\n const moveCurr = lastComponentIndexes[moveCheckIndex];\n const moveNext = lastComponentIndexes[moveCheckIndex + 1];\n if (!moveCurr || !moveNext) {\n break;\n }\n if (moveCurr.prevIndex > moveNext.prevIndex) {\n lastComponentIndexes.splice(moveCheckIndex + 1, 1);\n instructions.push([RENDER_INSTRUCTION_TYPE.MOVE, moveNext.command]);\n }\n else {\n instructions.push([RENDER_INSTRUCTION_TYPE.UPDATE, moveNext.command]);\n moveCheckIndex++;\n }\n }\n for (const command of commands) {\n const id = getRenderCommandId(command);\n if (isComponentRenderCommand(command)) {\n const previousCommand = previousRenderCommandMap.get(id);\n if (!previousCommand) {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n }\n else {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n }\n return instructions;\n });\n toObservable(this.renderInstructions)\n .pipe(takeUntilDestroyed(), tap((instructions) => {\n this._execInstructions(instructions);\n }))\n .subscribe();\n }\n _createRenderCommands(richTextData) {\n /** List of all render commands */\n const rootCommands = [];\n /** Counter for generating unique html element IDs. */\n let elementOpenId = 0;\n /** Counter for generating unique html element IDs. */\n let elementCloseId = 0;\n /** Counter for generating unique component IDs. */\n const componentIdMap = new Map();\n /** The nesting level of the current node. */\n let nestingLevel = 0;\n /** The position (index) of the current node inside the parent node. */\n let domPosition = 0;\n let textId = 0;\n let commandIndex = 0;\n const traverse = (node) => {\n switch (node.nodeType) {\n case 'text': {\n // Render media\n const type = RENDER_COMMAND_TYPE.TEXT;\n const text = node.value;\n if (!text)\n break;\n const attributes = {};\n if (node.marks.length) {\n const markClasses = marksToClass(node.marks);\n if (CLASS_ATTR in attributes) {\n attributes[CLASS_ATTR] += ` ${markClasses}`;\n }\n else {\n attributes[CLASS_ATTR] = markClasses;\n }\n }\n const id = 't' + textId++;\n const command = [type, nestingLevel, domPosition, commandIndex++, attributes, text, id];\n rootCommands.push(command);\n domPosition++;\n break;\n }\n case BLOCKS.EMBEDDED_ASSET: {\n // Render media\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const assetId = node.data['target']?.sys?.id;\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', false, { node });\n }\n const asset = this.contentIncludesMap().getAsset(assetId);\n if (!asset) {\n throw richTextRendererError('asset_not_found', false, { assetId, node });\n }\n const contentType = asset.fields.file.contentType;\n const assetComponents = this._config.components;\n // Every property inside the asset will be null if no file was provided for a translation.\n // In this case, we can assume that the asset is missing due to user error.\n const isMissing = !contentType && !asset.fields.file.url;\n if (isMissing) {\n if (isDevMode()) {\n console.warn('Asset is missing file data! Asset will be skipped. Did you forget to upload a file for the current translation in Contentful?', { asset });\n }\n break;\n }\n const isImage = contentType?.startsWith('image/');\n const isVideo = contentType?.startsWith('video/');\n const isAudio = contentType?.startsWith('audio/');\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n const componentType = isImage\n ? DEFAULT_COMPONENT_TYPES.IMAGE\n : isVideo\n ? DEFAULT_COMPONENT_TYPES.VIDEO\n : isAudio\n ? DEFAULT_COMPONENT_TYPES.AUDIO\n : DEFAULT_COMPONENT_TYPES.FILE;\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n const attributes = {};\n const inputs = {\n asset,\n };\n const command = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n rootCommands.push(command);\n domPosition++;\n break;\n }\n case BLOCKS.EMBEDDED_ENTRY:\n case INLINES.EMBEDDED_ENTRY: {\n // Render component\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const entryId = node.data['target']?.sys?.id;\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', false, { node });\n }\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n if (!entry) {\n throw richTextRendererError('entry_not_found', false, { entryId, node });\n }\n const componentType = entry.sys.contentType.sys.id;\n const component = this._config.customComponents[componentType];\n if (!component) {\n throw richTextRendererError('custom_component_not_found', false, {\n componentType,\n customComponents: this._config.customComponents,\n entry,\n });\n }\n const attributes = {};\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n const inputs = {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n };\n const command = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n rootCommands.push(command);\n domPosition++;\n break;\n }\n default: {\n const type = RENDER_COMMAND_TYPE.HTML_OPEN;\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes = {};\n const id = 'e-o' + elementOpenId++;\n const command = [type, nestingLevel, domPosition, commandIndex++, attributes, tag, id];\n rootCommands.push(command);\n const domPositionAtThisLevel = domPosition;\n // Normal html elements can have children\n for (const child of node.content) {\n domPosition = 0;\n nestingLevel++;\n traverse(child);\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n }\n const lastCommand = rootCommands[rootCommands.length - 1];\n if (lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN &&\n lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'td' &&\n lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'hr') {\n // If the last command is an open command, we can remove it since it's empty\n rootCommands.pop();\n elementOpenId--;\n commandIndex--;\n }\n else {\n const closeId = 'e-c' + elementCloseId++;\n const closeCommand = [\n RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel,\n domPosition,\n commandIndex++,\n tag,\n closeId,\n ];\n rootCommands.push(closeCommand);\n domPosition++;\n }\n if (node.nodeType === INLINES.HYPERLINK) {\n const uri = node.data['uri'];\n attributes['href'] = uri;\n const host = this._document.location.host;\n const isExternal = !uri.includes(host);\n if (isExternal) {\n attributes['target'] = '_blank';\n }\n }\n break;\n }\n }\n };\n for (const node of richTextData.content) {\n traverse(node);\n }\n return rootCommands;\n }\n _execInstructions(instructions) {\n for (const instruction of instructions) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const command = instruction[RENDER_INSTRUCTION_POSITION.COMMAND];\n switch (type) {\n case RENDER_INSTRUCTION_TYPE.CREATE:\n this._runCreateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.UPDATE:\n this._runUpdateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.MOVE:\n this._runMoveInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.DELETE:\n this._runDeleteInstruction(command);\n break;\n }\n }\n }\n _runCreateInstruction(command) {\n const id = getRenderCommandId(command);\n const parentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n if (isComponentRenderCommand(command)) {\n const componentRef = this._viewContainerRef.createComponent(command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT]);\n this._updateComponentInputs(command, componentRef);\n const rootNode = this._getComponentRootNode(componentRef);\n this._renderInsertOrAppend(rootNode, parentElement, nextElement);\n this._executedCommandsCache.set(id, {\n command,\n componentRef,\n element: rootNode,\n });\n }\n else if (isTextRenderCommand(command)) {\n const text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n const span = this._renderer.createElement('span');\n const attributes = command[TEXT_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const textSplitInLineBreaks = text.split('\\n').filter((t) => t.trim().length > 0);\n const textNodes = [];\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(span, key, value);\n }\n if (text.startsWith('\\n')) {\n const brNode = this._renderer.createElement('br');\n this._renderer.appendChild(parentElement, brNode);\n }\n for (const [textPartIndex, textPart] of textSplitInLineBreaks.entries()) {\n if (textPartIndex > 0) {\n const brNode = this._renderer.createElement('br');\n this._renderer.appendChild(span, brNode);\n }\n const textNode = this._renderer.createText(textPart);\n this._renderer.appendChild(span, textNode);\n textNodes.push(textNode);\n }\n this._renderInsertOrAppend(span, parentElement, nextElement);\n this._executedCommandsCache.set(id, {\n command,\n element: span,\n textNode: textNodes,\n });\n }\n else if (isHtmlOpenRenderCommand(command)) {\n const tag = command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME];\n const attributes = command[HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const element = this._renderer.createElement(tag);\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(element, key, value);\n }\n this._renderInsertOrAppend(element, parentElement, nextElement);\n this._executedCommandsCache.set(id, {\n command,\n element,\n });\n }\n }\n _runUpdateInstruction(command) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n const componentRef = cached.componentRef;\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n this._updateComponentInputs(command, componentRef);\n }\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command,\n });\n }\n _runMoveInstruction(command) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n const componentRef = cached.componentRef;\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n this._renderer.removeChild(oldParentElement, rootNode);\n const newParentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n this._renderInsertOrAppend(rootNode, newParentElement, nextElement);\n this._updateComponentInputs(command, componentRef);\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command,\n });\n }\n }\n _runDeleteInstruction(command) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n if (!cached) {\n if (isHtmlCloseRenderCommand(command)) {\n return;\n }\n throw new Error('Cached command not found!');\n }\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n cached.componentRef?.destroy();\n }\n else if (isTextRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n }\n else if (isHtmlOpenRenderCommand(command)) {\n this._renderer.removeChild(cached.element?.parentElement, cached.element);\n }\n this._executedCommandsCache.delete(id);\n }\n _getComponentRootNode(componentRef) {\n return componentRef.hostView.rootNodes[0];\n }\n _updateComponentInputs(command, componentRef) {\n for (const [key, value] of Object.entries(command[COMPONENT_RENDER_COMMAND_POSITION.INPUTS])) {\n if (!componentRef.instance[key])\n continue;\n componentRef.setInput(key, value);\n }\n }\n _findParent(command) {\n const hostElement = this._elementRef.nativeElement;\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n let parentElement = undefined;\n if (nestingLevel === 0) {\n parentElement = hostElement;\n }\n else {\n // Reverse search all render commands beginning from the current one using a for loop.\n // The parent is found when the command's nesting level ist the same as the current nesting level minus 1.\n // If the parent is not found, throw an error.\n const allCommands = this.renderCommands();\n const currentCommandIndex = command[RENDER_COMMAND_POSITION.INDEX];\n let parentCommand = null;\n for (let i = currentCommandIndex - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n if (!cmd) {\n throw new Error('Command not found!');\n }\n if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1 && isHtmlOpenRenderCommand(cmd)) {\n parentCommand = cmd;\n break;\n }\n }\n if (!parentCommand) {\n throw new Error('Parent command not found!');\n }\n parentElement = this._executedCommandsCache.get(getRenderCommandId(parentCommand))?.element;\n }\n if (!parentElement) {\n throw new Error('Parent element not found!');\n }\n return parentElement;\n }\n _findFollowingElement(command) {\n const cacheArray = Array.from(this._executedCommandsCache.values());\n let nextElement = undefined;\n const domPosition = command[RENDER_COMMAND_POSITION.DOM_POSITION];\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n const type = command[RENDER_COMMAND_POSITION.TYPE];\n // Try to find an already rendered element with a domPosition that is greater than the current domPosition. If there are multiple, use the one with the smallest domPosition.\n // If it does not exist, use .appendChild to simply append the element to the end of the parent element.\n // If it does exist, use .insertBefore to insert the element before the found element.\n for (const cached of cacheArray) {\n if (cached.command[RENDER_COMMAND_POSITION.DOM_POSITION] > domPosition &&\n cached.command[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel &&\n // Make sure the element does not find itself\n cached.command[RENDER_COMMAND_POSITION.TYPE] !== type) {\n nextElement = cached.element;\n break;\n }\n }\n return nextElement;\n }\n _renderInsertOrAppend(nodeToRender, parentElement, nextElement) {\n if (nextElement) {\n this._renderer.insertBefore(parentElement, nodeToRender, nextElement);\n }\n else {\n this._renderer.appendChild(parentElement, nodeToRender);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulRichTextRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.0\", type: ContentfulRichTextRendererComponent, isStandalone: true, selector: \"et-contentful-rich-text-renderer\", inputs: { content: { classPropertyName: \"content\", publicName: \"content\", isSignal: true, isRequired: true, transformFunction: null }, richTextPath: { classPropertyName: \"richTextPath\", publicName: \"richTextPath\", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: \"et-contentful-rich-text-renderer\" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ContentfulRichTextRendererComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'et-contentful-rich-text-renderer',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n class: 'et-contentful-rich-text-renderer',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC10ZXh0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29udGVudGZ1bC9zcmMvbGliL2NvbXBvbmVudHMvcmljaC10ZXh0LXJlbmRlcmVyL3JpY2gtdGV4dC1yZW5kZXJlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFVBQVUsRUFFVixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFTLE9BQU8sRUFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQVF6RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7QUFFckcsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDakMsU0FBUyxFQUFFLENBQUM7SUFDWixVQUFVLEVBQUUsQ0FBQztJQUNi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QVcsQ0FBQztJQUNyQixDQUFDO0lBRU8scUJBQXFCLENBQzNCLFlBQXlCLEVBQ3pCLGFBQTBCLEVBQzFCLFdBQW9DO1FBRXBDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzs4R0FwdEJVLG1DQUFtQztrR0FBbkMsbUNBQW1DLCthQVJwQyxFQUFFOzsyRkFRRCxtQ0FBbUM7a0JBVi9DLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtDQUFrQztvQkFDNUMsUUFBUSxFQUFFLEVBQUU7b0JBQ1osYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxrQ0FBa0M7cUJBQzFDO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQkxPQ0tTLCBCbG9jaywgSU5MSU5FUywgSW5saW5lLCBNYXJrLCBUZXh0IH0gZnJvbSAnQGNvbnRlbnRmdWwvcmljaC10ZXh0LXR5cGVzJztcbmltcG9ydCB7IGdldE9iamVjdFByb3BlcnR5LCBpc09iamVjdCB9IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgcGFpcndpc2UsIHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT05URU5URlVMX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb250ZW50ZnVsLmNvbnN0YW50cyc7XG5pbXBvcnQge1xuICBDb250ZW50ZnVsQ29sbGVjdGlvbixcbiAgQ29udGVudGZ1bEVudHJ5LFxuICBDb250ZW50ZnVsRW50cnlMaW5rSXRlbSxcbiAgQ29udGVudGZ1bFJlc3RBc3NldCxcbiAgUmljaFRleHRSZXNwb25zZSxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlQ29udGVudGZ1bENvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbnRlbnRmdWwtY29uZmlnJztcbmltcG9ydCB7IHJpY2hUZXh0UmVuZGVyZXJFcnJvciB9IGZyb20gJy4vcmljaC10ZXh0LXJlbmRlcmVyLmVycm9ycyc7XG5pbXBvcnQgeyBpc1JpY2hUZXh0Um9vdE5vZGUsIHRyYW5zbGF0ZUNvbnRlbnRmdWxOb2RlVHlwZVRvSHRtbFRhZyB9IGZyb20gJy4vcmljaC10ZXh0LXJlbmRlcmVyLnV0aWwnO1xuXG5leHBvcnQgY29uc3QgUkVOREVSX0NPTU1BTkRfVFlQRSA9IHtcbiAgSFRNTF9PUEVOOiAwLFxuICBIVE1MX0NMT1NFOiAxLFxuICBURVhUOiAyLFxuICBDT01QT05FTlQ6IDMsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgUkVOREVSX0NPTU1BTkRfUE9TSVRJT04gPSB7XG4gIFRZUEU6IDAsXG4gIE5FU1RJTkdfTEVWRUw6IDEsXG4gIERPTV9QT1NJVElPTjogMixcbiAgSU5ERVg6IDMsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OID0ge1xuICBBVFRSSUJVVEVTOiA0LFxuICBUQUdfTkFNRTogNSxcbiAgRUxFTUVOVF9JRDogNixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBIVE1MX0NMT1NFX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OID0ge1xuICBUQUdfTkFNRTogNCxcbiAgRUxFTUVOVF9JRDogNSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBURVhUX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OID0ge1xuICBBVFRSSUJVVEVTOiA0LFxuICBURVhUOiA1LFxuICBURVhUX0lEOiA2LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9SRU5ERVJfQ09NTUFORF9QT1NJVElPTiA9IHtcbiAgQVRUUklCVVRFUzogNCxcbiAgQ09NUE9ORU5UOiA1LFxuICBJTlBVVFM6IDYsXG4gIENPTVBPTkVOVF9JRDogNyxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgSHRtbE9wZW5SZW5kZXJDb21tYW5kID0gW1xuICB0eXBlOiB0eXBlb2YgUkVOREVSX0NPTU1BTkRfVFlQRS5IVE1MX09QRU4sXG4gIG5lc3RpbmdMZXZlbDogbnVtYmVyLFxuICBkb21Qb3NpdGlvbjogbnVtYmVyLFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICB0YWdOYW1lOiBzdHJpbmcsXG4gIHRleHRJZDogc3RyaW5nLFxuXTtcblxudHlwZSBIdG1sQ2xvc2VSZW5kZXJDb21tYW5kID0gW1xuICB0eXBlOiB0eXBlb2YgUkVOREVSX0NPTU1BTkRfVFlQRS5IVE1MX0NMT1NFLFxuICBuZXN0aW5nTGV2ZWw6IG51bWJlcixcbiAgZG9tUG9zaXRpb246IG51bWJlcixcbiAgaW5kZXg6IG51bWJlcixcbiAgdGFnTmFtZTogc3RyaW5nLFxuICBlbGVtZW50SWQ6IHN0cmluZyxcbl07XG5cbnR5cGUgVGV4dFJlbmRlckNvbW1hbmQgPSBbXG4gIHR5cGU6IHR5cGVvZiBSRU5ERVJfQ09NTUFORF9UWVBFLlRFWFQsXG4gIG5lc3RpbmdMZXZlbDogbnVtYmVyLFxuICBkb21Qb3NpdGlvbjogbnVtYmVyLFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICB0ZXh0OiBzdHJpbmcsXG4gIGVsZW1lbnRJZDogc3RyaW5nLFxuXTtcblxudHlwZSBDb21wb25lbnRSZW5kZXJDb21tYW5kID0gW1xuICB0eXBlOiB0eXBlb2YgUkVOREVSX0NPTU1BTkRfVFlQRS5DT01QT05FTlQsXG4gIG5lc3RpbmdMZXZlbDogbnVtYmVyLFxuICBkb21Qb3NpdGlvbjogbnVtYmVyLFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8dW5rbm93bj4sXG4gIGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbXBvbmVudElkOiBzdHJpbmcsXG5dO1xuXG50eXBlIFJlbmRlckNvbW1hbmQgPSBIdG1sT3BlblJlbmRlckNvbW1hbmQgfCBIdG1sQ2xvc2VSZW5kZXJDb21tYW5kIHwgVGV4dFJlbmRlckNvbW1hbmQgfCBDb21wb25lbnRSZW5kZXJDb21tYW5kO1xuXG5leHBvcnQgY29uc3QgUkVOREVSX0lOU1RSVUNUSU9OX1BPU0lUSU9OID0ge1xuICBUWVBFOiAwLFxuICBDT01NQU5EOiAxLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTkRFUl9JTlNUUlVDVElPTl9UWVBFID0ge1xuICBDUkVBVEU6IDAsXG4gIFVQREFURTogMSxcbiAgREVMRVRFOiAyLFxuICBNT1ZFOiAzLFxufSBhcyBjb25zdDtcblxudHlwZSBSZW5kZXJJbnN0cnVjdGlvblR5cGVWYWx1ZSA9ICh0eXBlb2YgUkVOREVSX0lOU1RSVUNUSU9OX1RZUEUpW2tleW9mIHR5cGVvZiBSRU5ERVJfSU5TVFJVQ1RJT05fVFlQRV07XG5cbnR5cGUgUmVuZGVySW5zdHJ1Y3Rpb24gPSBbUmVuZGVySW5zdHJ1Y3Rpb25UeXBlVmFsdWUsIFJlbmRlckNvbW1hbmRdO1xuXG5jb25zdCBNQVJLX1RBSUxXSU5EX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYm9sZDogJ2ZvbnQtYm9sZCcsXG4gIGl0YWxpYzogJ2l0YWxpYycsXG4gIHVuZGVybGluZTogJ3VuZGVybGluZScsXG4gIGNvZGU6ICdmb250LW1vbm8nLFxufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtzVG9DbGFzcyA9IChtYXJrczogTWFya1tdKSA9PiB7XG4gIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBtYXJrIG9mIG1hcmtzKSB7XG4gICAgbGV0IGtsYXNzID0gTUFSS19UQUlMV0lORF9NQVBbbWFyay50eXBlXTtcblxuICAgIGlmICgha2xhc3MpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gY2xhc3MgZm91bmQgZm9yIG1hcmsgdHlwZSEgRmFsbGluZyBiYWNrIHRvIFwiJHttYXJrLnR5cGV9XCIuYCwgbWFyayk7XG5cbiAgICAgIGtsYXNzID0gbWFyay50eXBlO1xuICAgIH1cblxuICAgIGNsYXNzZXMucHVzaChrbGFzcyk7XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIdG1sT3BlblJlbmRlckNvbW1hbmQgPSAoY29tbWFuZDogUmVuZGVyQ29tbWFuZCk6IGNvbW1hbmQgaXMgSHRtbE9wZW5SZW5kZXJDb21tYW5kID0+IHtcbiAgcmV0dXJuIGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVFlQRV0gPT09IFJFTkRFUl9DT01NQU5EX1RZUEUuSFRNTF9PUEVOO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSHRtbENsb3NlUmVuZGVyQ29tbWFuZCA9IChjb21tYW5kOiBSZW5kZXJDb21tYW5kKTogY29tbWFuZCBpcyBIdG1sQ2xvc2VSZW5kZXJDb21tYW5kID0+IHtcbiAgcmV0dXJuIGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVFlQRV0gPT09IFJFTkRFUl9DT01NQU5EX1RZUEUuSFRNTF9DTE9TRTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1RleHRSZW5kZXJDb21tYW5kID0gKGNvbW1hbmQ6IFJlbmRlckNvbW1hbmQpOiBjb21tYW5kIGlzIFRleHRSZW5kZXJDb21tYW5kID0+IHtcbiAgcmV0dXJuIGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVFlQRV0gPT09IFJFTkRFUl9DT01NQU5EX1RZUEUuVEVYVDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NvbXBvbmVudFJlbmRlckNvbW1hbmQgPSAoY29tbWFuZDogUmVuZGVyQ29tbWFuZCk6IGNvbW1hbmQgaXMgQ29tcG9uZW50UmVuZGVyQ29tbWFuZCA9PiB7XG4gIHJldHVybiBjb21tYW5kW1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRZUEVdID09PSBSRU5ERVJfQ09NTUFORF9UWVBFLkNPTVBPTkVOVDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZW5kZXJDb21tYW5kSWQgPSAoY29tbWFuZDogUmVuZGVyQ29tbWFuZCkgPT4ge1xuICBpZiAoaXNIdG1sT3BlblJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICByZXR1cm4gY29tbWFuZFtIVE1MX09QRU5fUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uRUxFTUVOVF9JRF07XG4gIH0gZWxzZSBpZiAoaXNIdG1sQ2xvc2VSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRbSFRNTF9DTE9TRV9SRU5ERVJfQ09NTUFORF9QT1NJVElPTi5FTEVNRU5UX0lEXTtcbiAgfSBlbHNlIGlmIChpc1RleHRSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgcmV0dXJuIGNvbW1hbmRbVEVYVF9SRU5ERVJfQ09NTUFORF9QT1NJVElPTi5URVhUX0lEXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tbWFuZFtDT01QT05FTlRfUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uQ09NUE9ORU5UX0lEXTtcbiAgfVxufTtcblxuY29uc3QgQ0xBU1NfQVRUUiA9ICdjbGFzcyc7XG5jb25zdCBERUZBVUxUX0NPTVBPTkVOVF9UWVBFUyA9IHtcbiAgSU1BR0U6ICckJCRfZXQtaW1hZ2UnLFxuICBWSURFTzogJyQkJF9ldC12aWRlbycsXG4gIEFVRElPOiAnJCQkX2V0LWF1ZGlvJyxcbiAgRklMRTogJyQkJF9ldC1maWxlJyxcbn07XG5cbnR5cGUgRXhlY3V0ZWRDb21tYW5kQ2FjaGVJdGVtQmFzZSA9IHtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59O1xuXG50eXBlIEV4ZWN1dGVkQ29tcG9uZW50Q29tbWFuZENhY2hlSXRlbSA9IHtcbiAgY29tbWFuZDogQ29tcG9uZW50UmVuZGVyQ29tbWFuZDtcbiAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8dW5rbm93bj47XG59ICYgRXhlY3V0ZWRDb21tYW5kQ2FjaGVJdGVtQmFzZTtcblxudHlwZSBFeGVjdXRlZEh0bWxDb21tYW5kQ2FjaGVJdGVtID0ge1xuICBjb21tYW5kOiBIdG1sT3BlblJlbmRlckNvbW1hbmQgfCBIdG1sQ2xvc2VSZW5kZXJDb21tYW5kO1xufSAmIEV4ZWN1dGVkQ29tbWFuZENhY2hlSXRlbUJhc2U7XG5cbnR5cGUgRXhlY3V0ZWRUZXh0Q29tbWFuZENhY2hlSXRlbSA9IHtcbiAgY29tbWFuZDogVGV4dFJlbmRlckNvbW1hbmQ7XG4gIHRleHROb2RlOiB1bmtub3duO1xufSAmIEV4ZWN1dGVkQ29tbWFuZENhY2hlSXRlbUJhc2U7XG5cbnR5cGUgRXhlY3V0ZWRDb21tYW5kQ2FjaGVJdGVtID1cbiAgfCBFeGVjdXRlZENvbXBvbmVudENvbW1hbmRDYWNoZUl0ZW1cbiAgfCBFeGVjdXRlZEh0bWxDb21tYW5kQ2FjaGVJdGVtXG4gIHwgRXhlY3V0ZWRUZXh0Q29tbWFuZENhY2hlSXRlbTtcblxuZXhwb3J0IGNvbnN0IGlzRXhlY3V0ZWRDb21wb25lbnRDb21tYW5kQ2FjaGVJdGVtID0gKFxuICBjYWNoZTogRXhlY3V0ZWRDb21tYW5kQ2FjaGVJdGVtLFxuKTogY2FjaGUgaXMgRXhlY3V0ZWRDb21wb25lbnRDb21tYW5kQ2FjaGVJdGVtID0+IHtcbiAgcmV0dXJuIGlzQ29tcG9uZW50UmVuZGVyQ29tbWFuZChjYWNoZS5jb21tYW5kKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0V4ZWN1dGVkSHRtbE9yVGV4dENvbW1hbmRDYWNoZUl0ZW0gPSAoXG4gIGNhY2hlOiBFeGVjdXRlZENvbW1hbmRDYWNoZUl0ZW0sXG4pOiBjYWNoZSBpcyBFeGVjdXRlZEh0bWxDb21tYW5kQ2FjaGVJdGVtID0+IHtcbiAgcmV0dXJuIGlzSHRtbENsb3NlUmVuZGVyQ29tbWFuZChjYWNoZS5jb21tYW5kKSB8fCBpc0h0bWxPcGVuUmVuZGVyQ29tbWFuZChjYWNoZS5jb21tYW5kKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0V4ZWN1dGVkVGV4dENvbW1hbmRDYWNoZUl0ZW0gPSAoXG4gIGNhY2hlOiBFeGVjdXRlZENvbW1hbmRDYWNoZUl0ZW0sXG4pOiBjYWNoZSBpcyBFeGVjdXRlZFRleHRDb21tYW5kQ2FjaGVJdGVtID0+IHtcbiAgcmV0dXJuIGlzVGV4dFJlbmRlckNvbW1hbmQoY2FjaGUuY29tbWFuZCk7XG59O1xuXG5leHBvcnQgY29uc3QgRVRfQ09OVEVOVEZVTF9BTllfRU5UUllfQ09OVEVOVF9UWVBFX1NZU19JRCA9ICckJCRfZXQtY29udGVudGZ1bC1hbnktZW50cnktY29udGVudC10eXBlLXN5cy1pZCc7XG5cbmV4cG9ydCB0eXBlIENvbnRlbnRmdWxJbmNsdWRlTWFwID0ge1xuICAvKipcbiAgICogU2VsZWN0IGFuIGVudHJ5IGJ5IGl0cyBJRCBhbmQgY29udGVudCB0eXBlIElELlxuICAgKlxuICAgKiBUaGUgY29udGVudCB0eXBlIElEIGNhbiBiZSBmb3VuZCBpbnNpZGUgdGhlIGVudHJ5IC0+IHN5cyAtPiBjb250ZW50VHlwZSAtPiBzeXMgLT4gaWQgcHJvcGVydHkuXG4gICAqXG4gICAqIFlvdSBjYW4gcHJvdmlkZSB0aGUgYEVUX0NPTlRFTlRGVUxfQU5ZX0VOVFJZX0NPTlRFTlRfVFlQRV9TWVNfSURgIGNvbnN0YW50IHRvIG1hdGNoIGFueSBlbnRyeSBzeXMgSUQuXG4gICAqIEJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gdGhlIGVudHJ5IGFzIGlzIHdpdGhvdXQgYW55IHR5cGUgY2hlY2tpbmcuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBnZXRFbnRyeTogPFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IGFueSB9PihpZDogc3RyaW5nLCBjb250ZW50VHlwZUlkOiBzdHJpbmcpID0+IENvbnRlbnRmdWxFbnRyeTxUPiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBtdWx0aXBsZSBlbnRyaWVzIGJ5IHRoZWlyIElEcyBhbmQgY29udGVudCB0eXBlIElELlxuICAgKiBJZiBhbiBlbnRyeSBpcyBub3QgZm91bmQsIGl0IHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIFRoZSBjb250ZW50IHR5cGUgSUQgY2FuIGJlIGZvdW5kIGluc2lkZSB0aGUgZW50cnkgLT4gc3lzIC0+IGNvbnRlbnRUeXBlIC0+IHN5cyAtPiBpZCBwcm9wZXJ0eS5cbiAgICpcbiAgICogWW91IGNhbiBwcm92aWRlIHRoZSBgRVRfQ09OVEVOVEZVTF9BTllfRU5UUllfQ09OVEVOVF9UWVBFX1NZU19JRGAgY29uc3RhbnQgdG8gbWF0Y2ggYW55IGVudHJ5IHN5cyBJRC5cbiAgICogQnV0IGJlIGF3YXJlIHRoYXQgdGhpcyB3aWxsIHJldHVybiB0aGUgZW50cnkgYXMgaXMgd2l0aG91dCBhbnkgdHlwZSBjaGVja2luZy5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGdldEVudHJpZXM6IDxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT4oXG4gICAgaWRzOiBzdHJpbmdbXSB8IENvbnRlbnRmdWxFbnRyeUxpbmtJdGVtW10sXG4gICAgY29udGVudFR5cGVJZDogc3RyaW5nLFxuICApID0+IENvbnRlbnRmdWxFbnRyeTxUPltdO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgYW4gYXNzZXQgYnkgaXRzIElELlxuICAgKi9cbiAgZ2V0QXNzZXQ6IChpZDogc3RyaW5nKSA9PiBDb250ZW50ZnVsUmVzdEFzc2V0IHwgbnVsbDtcblxuICAvKipcbiAgICogU2VsZWN0IG11bHRpcGxlIGFzc2V0cyBieSB0aGVpciBJRHMuIElmIGFuIGFzc2V0IGlzIG5vdCBmb3VuZCwgaXQgd2lsbCBiZSBvbWl0dGVkIGZyb20gdGhlIHJlc3VsdC5cbiAgICovXG4gIGdldEFzc2V0czogKGlkczogc3RyaW5nW10pID0+IENvbnRlbnRmdWxSZXN0QXNzZXRbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ29udGVudGZ1bEluY2x1ZGVNYXBDb25maWcge1xuICAvKiogVGhlIGVudHJpZXMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBpbnNpZGUgdGhlIG1hcCAgKi9cbiAgZW50cmllczogQ29udGVudGZ1bEVudHJ5W107XG5cbiAgLyoqIFRoZSBhc3NldHMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBpbnNpZGUgdGhlIG1hcCAgKi9cbiAgYXNzZXRzOiBDb250ZW50ZnVsUmVzdEFzc2V0W107XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY29udGVudGZ1bCBpbmNsdWRlIG1hcCB1c2luZyB0aGUgcHJvdmlkZWQgZW50cmllcyBhbmQgYXNzZXRzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udGVudGZ1bEluY2x1ZGVNYXAgPSAoY29uZmlnOiBDcmVhdGVDb250ZW50ZnVsSW5jbHVkZU1hcENvbmZpZyk6IENvbnRlbnRmdWxJbmNsdWRlTWFwID0+IHtcbiAgY29uc3QgeyBlbnRyaWVzLCBhc3NldHMgfSA9IGNvbmZpZztcblxuICBjb25zdCBhc3NldE1hcCA9IG5ldyBNYXAoYXNzZXRzLm1hcCgoYXNzZXQpID0+IFthc3NldC5zeXMuaWQsIGFzc2V0XSkpO1xuICBjb25zdCBlbnRyeU1hcCA9IG5ldyBNYXAoZW50cmllcy5tYXAoKGVudHJ5KSA9PiBbZW50cnkuc3lzLmlkLCBlbnRyeV0pKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBnZXRFbnRyeSA9IDxUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT4oaWQ6IHN0cmluZywgY29udGVudFR5cGVJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBlbnRyeU1hcC5nZXQoaWQpO1xuXG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRW50cnkgbm90IGZvdW5kISBXaWxsIHJldHVybiBudWxsLiBJcyB0aGUgaW5jbHVkZSBxdWVyeSBwYXJhbSB0byBsb3c/JywgeyBpZCwgZW50cnlNYXAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChjb250ZW50VHlwZUlkID09PSBFVF9DT05URU5URlVMX0FOWV9FTlRSWV9DT05URU5UX1RZUEVfU1lTX0lEKSB7XG4gICAgICByZXR1cm4gZW50cnkgYXMgQ29udGVudGZ1bEVudHJ5PFQ+O1xuICAgIH1cblxuICAgIGlmIChlbnRyeS5zeXMuY29udGVudFR5cGUuc3lzLmlkICE9PSBjb250ZW50VHlwZUlkKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFbnRyeSBzeXMgSUQgZG9lcyBub3QgbWF0Y2ggdGhlIHByb3ZpZGVkIHN5cyBJRCEgV2lsbCByZXR1cm4gbnVsbC4nLCB7XG4gICAgICAgICAgZW50cnksXG4gICAgICAgICAgc3lzSWQ6IGNvbnRlbnRUeXBlSWQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkgYXMgQ29udGVudGZ1bEVudHJ5PFQ+O1xuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGdldEVudHJpZXMgPSA8VCBleHRlbmRzIHsgW2tleTogc3RyaW5nXTogYW55IH0+KFxuICAgIGlkczogc3RyaW5nW10gfCBDb250ZW50ZnVsRW50cnlMaW5rSXRlbVtdLFxuICAgIGNvbnRlbnRUeXBlSWQ6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IGlkc1xuICAgICAgLm1hcCgoaWQpID0+ICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnID8gaWQgOiBpZC5zeXMuaWQpKVxuICAgICAgLm1hcCgoaWQpID0+IGdldEVudHJ5PFQ+KGlkLCBjb250ZW50VHlwZUlkKSlcbiAgICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgQ29udGVudGZ1bEVudHJ5PFQ+ID0+IGVudHJ5ICE9PSBudWxsKTtcblxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9O1xuXG4gIGNvbnN0IGdldEFzc2V0ID0gKGlkOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYXNzZXRNYXAuZ2V0KGlkKSA/PyBudWxsO1xuICB9O1xuXG4gIGNvbnN0IGdldEFzc2V0cyA9IChpZHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgcmV0dXJuIGlkcy5tYXAoKGlkKSA9PiBnZXRBc3NldChpZCkpLmZpbHRlcigoYXNzZXQpOiBhc3NldCBpcyBDb250ZW50ZnVsUmVzdEFzc2V0ID0+IGFzc2V0ICE9PSBudWxsKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGdldEVudHJ5LFxuICAgIGdldEVudHJpZXMsXG4gICAgZ2V0QXNzZXQsXG4gICAgZ2V0QXNzZXRzLFxuICB9O1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZXQtY29udGVudGZ1bC1yaWNoLXRleHQtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZTogYGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1jb250ZW50ZnVsLXJpY2gtdGV4dC1yZW5kZXJlcicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRmdWxSaWNoVGV4dFJlbmRlcmVyQ29tcG9uZW50IHtcbiAgX3ZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG4gIF9yZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIF9kb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIF9jb25maWcgPSBpbmplY3QoQ09OVEVOVEZVTF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gY3JlYXRlQ29udGVudGZ1bENvbmZpZygpO1xuXG4gIC8qKlxuICAgKiBBIGNhY2hlIGZvciBhbGwgZXhlY3V0ZWQgY29tbWFuZHMgdGhhdCBhcmUgbm90IGRlbGV0ZWQuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGFsbCByZW5kZXJlZCBlbGVtZW50cyBhbmQgY29tcG9uZW50cy5cbiAgICogVGhlIGtleSBpcyB0aGUgcmVuZGVyIGNvbW1hbmQgZWxlbWVudCBJRC5cbiAgICovXG4gIF9leGVjdXRlZENvbW1hbmRzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRXhlY3V0ZWRDb21tYW5kQ2FjaGVJdGVtPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudGZ1bCByZXNwb25zZSBnb3R0ZW4gdmlhIHRoZWlyIFJFU1QgYXBpLlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LmNvbnRlbnRmdWwuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2VzL2NvbnRlbnQtZGVsaXZlcnktYXBpLyMvcmVmZXJlbmNlL2VudHJpZXMvZW50cmllcy1jb2xsZWN0aW9uXG4gICAqL1xuICBjb250ZW50ID0gaW5wdXQucmVxdWlyZWQ8Q29udGVudGZ1bENvbGxlY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB3aGVyZSB0aGUgcmljaCB0ZXh0IGZpZWxkIGlzIGluc2lkZSB0aGUgY29udGVudGZ1bCByZXNwb25zZS4gRG90IGFuZCBhcnJheSBub3RhdGlvbiBpcyBhbGxvd2VkLlxuICAgKiBAZXhhbXBsZSBcIml0ZW1zWzBdLmZpZWxkcy5odG1sXCJcbiAgICovXG4gIHJpY2hUZXh0UGF0aCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogQSBtYXAgb2YgYWxsIGluY2x1ZGVzIGluIHRoZSBjb250ZW50ZnVsIHJlc3BvbnNlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgbG9va2luZyB1cCBhc3NldHMgYW5kIGVudHJpZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiB0aGUgcmljaCB0ZXh0IHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBsb29wcy5cbiAgICovXG4gIGNvbnRlbnRJbmNsdWRlc01hcCA9IGNvbXB1dGVkPENvbnRlbnRmdWxJbmNsdWRlTWFwPigoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpO1xuICAgIGNvbnN0IGFzc2V0cyA9IGNvbnRlbnQ/LmluY2x1ZGVzLkFzc2V0O1xuICAgIGNvbnN0IGVudHJpZXMgPSBjb250ZW50Py5pbmNsdWRlcy5FbnRyeTtcblxuICAgIHJldHVybiBjcmVhdGVDb250ZW50ZnVsSW5jbHVkZU1hcCh7IGFzc2V0czogYXNzZXRzID8/IFtdLCBlbnRyaWVzOiBlbnRyaWVzID8/IFtdIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogVGhlIHJpY2ggdGV4dCBkYXRhIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcmljaFRleHREYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQoKTtcbiAgICBjb25zdCByaWNoVGV4dFBhdGggPSB0aGlzLnJpY2hUZXh0UGF0aCgpO1xuXG4gICAgaWYgKCFjb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByaWNoVGV4dCA9IGdldE9iamVjdFByb3BlcnR5KGNvbnRlbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcmljaFRleHRQYXRoKTtcblxuICAgIGlmICghaXNPYmplY3QocmljaFRleHQpKSB7XG4gICAgICB0aHJvdyByaWNoVGV4dFJlbmRlcmVyRXJyb3IoJ3JpY2hfdGV4dF91bmRlZmluZWQnLCBmYWxzZSwgeyBjb250ZW50LCByaWNoVGV4dFBhdGggfSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1JpY2hUZXh0Um9vdE5vZGUocmljaFRleHQpKSB7XG4gICAgICB0aHJvdyByaWNoVGV4dFJlbmRlcmVyRXJyb3IoJ3JpY2hfdGV4dF93cm9uZ190eXBlJywgZmFsc2UsIHsgY29udGVudCwgcmljaFRleHRQYXRoIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByaWNoVGV4dCBhcyBSaWNoVGV4dFJlc3BvbnNlO1xuICB9KTtcblxuICByZW5kZXJDb21tYW5kcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCByaWNoVGV4dERhdGEgPSB0aGlzLnJpY2hUZXh0RGF0YSgpO1xuXG4gICAgaWYgKCFyaWNoVGV4dERhdGEpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlUmVuZGVyQ29tbWFuZHMocmljaFRleHREYXRhKTtcbiAgfSk7XG5cbiAgcmVuZGVyQ29tbWFuZEhpc3RvcnkgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5yZW5kZXJDb21tYW5kcykucGlwZShzdGFydFdpdGgoW10gYXMgUmVuZGVyQ29tbWFuZFtdKSwgcGFpcndpc2UoKSksXG4gICAgeyBpbml0aWFsVmFsdWU6IFtbXSwgW11dIH0sXG4gICk7XG5cbiAgcHJldmlvdXNSZW5kZXJDb21tYW5kTWFwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IFtwcmV2Q29tbWFuZHNdID0gdGhpcy5yZW5kZXJDb21tYW5kSGlzdG9yeSgpO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIFJlbmRlckNvbW1hbmQ+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgcHJldkNvbW1hbmRzKSB7XG4gICAgICBtYXAuc2V0KGdldFJlbmRlckNvbW1hbmRJZChjb21tYW5kKSwgY29tbWFuZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5yZW5kZXJDb21tYW5kcygpO1xuICAgIGNvbnN0IHByZXZpb3VzUmVuZGVyQ29tbWFuZE1hcCA9IG5ldyBNYXAodGhpcy5wcmV2aW91c1JlbmRlckNvbW1hbmRNYXAoKSk7XG5cbiAgICBjb25zdCBpbnN0cnVjdGlvbnM6IFJlbmRlckluc3RydWN0aW9uW10gPSBbXTtcblxuICAgIC8vIHJlbW92ZSBkZWxldGVkIGNvbXBvbmVudHMgYXMgd2VsbCBhcyBhbGwgb3RoZXIgZWxlbWVudHNcbiAgICBmb3IgKGNvbnN0IFssIGNvbW1hbmRdIG9mIHByZXZpb3VzUmVuZGVyQ29tbWFuZE1hcCkge1xuICAgICAgaWYgKGlzQ29tcG9uZW50UmVuZGVyQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgICAvLyBrZWVwIHRoZSBjb21wb25lbnQgYXJvdW5kIGlmIGl0J3Mgc3RpbGwgaW4gdGhlIG5ldyBjb21tYW5kc1xuICAgICAgICBpZiAoY29tbWFuZHMuc29tZSgoYykgPT4gZ2V0UmVuZGVyQ29tbWFuZElkKGMpID09PSBnZXRSZW5kZXJDb21tYW5kSWQoY29tbWFuZCkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goW1JFTkRFUl9JTlNUUlVDVElPTl9UWVBFLkRFTEVURSwgY29tbWFuZF0pO1xuXG4gICAgICAvLyByZW1vdmUgZnJvbSBtYXAgdG8gbWFyayBhcyB1c2VkXG4gICAgICBwcmV2aW91c1JlbmRlckNvbW1hbmRNYXAuZGVsZXRlKGdldFJlbmRlckNvbW1hbmRJZChjb21tYW5kKSk7XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgaW5kZXhlcyBvZiB0aGUgY29tbWFuZHMgcmVtYWluaW5nIGluIHRoZSBwcmV2aW91c1JlbmRlckNvbW1hbmRNYXAgaW4gdGhlIG5ldyBjb21tYW5kcyBhcnJheS5cbiAgICBjb25zdCBsYXN0Q29tcG9uZW50SW5kZXhlczogeyBuZXdJbmRleDogbnVtYmVyOyBwcmV2SW5kZXg6IG51bWJlcjsgY29tbWFuZDogUmVuZGVyQ29tbWFuZCB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtpZCwgY29tbWFuZF0gb2YgcHJldmlvdXNSZW5kZXJDb21tYW5kTWFwKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGNvbW1hbmRzLmZpbmRJbmRleCgoYykgPT4gZ2V0UmVuZGVyQ29tbWFuZElkKGMpID09PSBpZCk7XG4gICAgICBjb25zdCBuZXdDb21tYW5kID0gY29tbWFuZHNbaW5kZXhdITtcblxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1hbmQgbm90IGZvdW5kIScpO1xuICAgICAgfVxuXG4gICAgICBsYXN0Q29tcG9uZW50SW5kZXhlcy5wdXNoKHtcbiAgICAgICAgbmV3SW5kZXg6IGluZGV4LFxuICAgICAgICBwcmV2SW5kZXg6IGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uSU5ERVhdLFxuICAgICAgICBjb21tYW5kOiBuZXdDb21tYW5kLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGFzdENvbXBvbmVudEluZGV4ZXMuc29ydCgoYSwgYikgPT4gYS5uZXdJbmRleCAtIGIubmV3SW5kZXgpO1xuXG4gICAgLy8gY2hlY2sgaWYgdGhlIHByZXZJbmRleCBhcmUgaW4gb3JkZXIgYXNjZW5kaW5nXG4gICAgLy8gZm9yIGluZGV4ZXMgdGhhdCBhcmUgbm90IGluIG9yZGVyLCBjcmVhdGUgYSBtb3ZlIGluc3RydWN0aW9uXG4gICAgLy8gZm9yIGluZGV4ZXMgdGhhdCBhcmUgaW4gb3JkZXIsIGNyZWF0ZSBhbiB1cGRhdGUgaW5zdHJ1Y3Rpb25cbiAgICBsZXQgbW92ZUNoZWNrSW5kZXggPSAwO1xuICAgIHdoaWxlIChtb3ZlQ2hlY2tJbmRleCA8IGxhc3RDb21wb25lbnRJbmRleGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGNvbnN0IG1vdmVDdXJyID0gbGFzdENvbXBvbmVudEluZGV4ZXNbbW92ZUNoZWNrSW5kZXhdO1xuICAgICAgY29uc3QgbW92ZU5leHQgPSBsYXN0Q29tcG9uZW50SW5kZXhlc1ttb3ZlQ2hlY2tJbmRleCArIDFdO1xuXG4gICAgICBpZiAoIW1vdmVDdXJyIHx8ICFtb3ZlTmV4dCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKG1vdmVDdXJyLnByZXZJbmRleCA+IG1vdmVOZXh0LnByZXZJbmRleCkge1xuICAgICAgICBsYXN0Q29tcG9uZW50SW5kZXhlcy5zcGxpY2UobW92ZUNoZWNrSW5kZXggKyAxLCAxKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goW1JFTkRFUl9JTlNUUlVDVElPTl9UWVBFLk1PVkUsIG1vdmVOZXh0LmNvbW1hbmRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RydWN0aW9ucy5wdXNoKFtSRU5ERVJfSU5TVFJVQ1RJT05fVFlQRS5VUERBVEUsIG1vdmVOZXh0LmNvbW1hbmRdKTtcbiAgICAgICAgbW92ZUNoZWNrSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0UmVuZGVyQ29tbWFuZElkKGNvbW1hbmQpO1xuXG4gICAgICBpZiAoaXNDb21wb25lbnRSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29tbWFuZCA9IHByZXZpb3VzUmVuZGVyQ29tbWFuZE1hcC5nZXQoaWQpO1xuXG4gICAgICAgIGlmICghcHJldmlvdXNDb21tYW5kKSB7XG4gICAgICAgICAgLy8gY3JlYXRlXG4gICAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goW1JFTkRFUl9JTlNUUlVDVElPTl9UWVBFLkNSRUFURSwgY29tbWFuZF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjcmVhdGVcbiAgICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2goW1JFTkRFUl9JTlNUUlVDVElPTl9UWVBFLkNSRUFURSwgY29tbWFuZF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLnJlbmRlckluc3RydWN0aW9ucylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgdGFwKChpbnN0cnVjdGlvbnMpID0+IHtcbiAgICAgICAgICB0aGlzLl9leGVjSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlUmVuZGVyQ29tbWFuZHMocmljaFRleHREYXRhOiBSaWNoVGV4dFJlc3BvbnNlKSB7XG4gICAgLyoqIExpc3Qgb2YgYWxsIHJlbmRlciBjb21tYW5kcyAqL1xuICAgIGNvbnN0IHJvb3RDb21tYW5kczogUmVuZGVyQ29tbWFuZFtdID0gW107XG5cbiAgICAvKiogQ291bnRlciBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaHRtbCBlbGVtZW50IElEcy4gKi9cbiAgICBsZXQgZWxlbWVudE9wZW5JZCA9IDA7XG5cbiAgICAvKiogQ291bnRlciBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaHRtbCBlbGVtZW50IElEcy4gKi9cbiAgICBsZXQgZWxlbWVudENsb3NlSWQgPSAwO1xuXG4gICAgLyoqIENvdW50ZXIgZm9yIGdlbmVyYXRpbmcgdW5pcXVlIGNvbXBvbmVudCBJRHMuICovXG4gICAgY29uc3QgY29tcG9uZW50SWRNYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgLyoqIFRoZSBuZXN0aW5nIGxldmVsIG9mIHRoZSBjdXJyZW50IG5vZGUuICovXG4gICAgbGV0IG5lc3RpbmdMZXZlbCA9IDA7XG5cbiAgICAvKiogVGhlIHBvc2l0aW9uIChpbmRleCkgb2YgdGhlIGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHBhcmVudCBub2RlLiAqL1xuICAgIGxldCBkb21Qb3NpdGlvbiA9IDA7XG5cbiAgICBsZXQgdGV4dElkID0gMDtcblxuICAgIGxldCBjb21tYW5kSW5kZXggPSAwO1xuXG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZTogQmxvY2sgfCBJbmxpbmUgfCBUZXh0KSA9PiB7XG4gICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSAndGV4dCc6IHtcbiAgICAgICAgICAvLyBSZW5kZXIgbWVkaWFcbiAgICAgICAgICBjb25zdCB0eXBlID0gUkVOREVSX0NPTU1BTkRfVFlQRS5URVhUO1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBub2RlLnZhbHVlO1xuXG4gICAgICAgICAgaWYgKCF0ZXh0KSBicmVhaztcblxuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmIChub2RlLm1hcmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWFya0NsYXNzZXMgPSBtYXJrc1RvQ2xhc3Mobm9kZS5tYXJrcyk7XG5cbiAgICAgICAgICAgIGlmIChDTEFTU19BVFRSIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlc1tDTEFTU19BVFRSXSArPSBgICR7bWFya0NsYXNzZXN9YDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNbQ0xBU1NfQVRUUl0gPSBtYXJrQ2xhc3NlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpZCA9ICd0JyArIHRleHRJZCsrO1xuXG4gICAgICAgICAgY29uc3QgY29tbWFuZDogVGV4dFJlbmRlckNvbW1hbmQgPSBbdHlwZSwgbmVzdGluZ0xldmVsLCBkb21Qb3NpdGlvbiwgY29tbWFuZEluZGV4KyssIGF0dHJpYnV0ZXMsIHRleHQsIGlkXTtcblxuICAgICAgICAgIHJvb3RDb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICAgICAgICAgIGRvbVBvc2l0aW9uKys7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQkxPQ0tTLkVNQkVEREVEX0FTU0VUOiB7XG4gICAgICAgICAgLy8gUmVuZGVyIG1lZGlhXG4gICAgICAgICAgY29uc3QgdHlwZSA9IFJFTkRFUl9DT01NQU5EX1RZUEUuQ09NUE9ORU5UO1xuICAgICAgICAgIGNvbnN0IGFzc2V0SWQgPSBub2RlLmRhdGFbJ3RhcmdldCddPy5zeXM/LmlkO1xuXG4gICAgICAgICAgaWYgKCFhc3NldElkKSB7XG4gICAgICAgICAgICB0aHJvdyByaWNoVGV4dFJlbmRlcmVyRXJyb3IoJ2Fzc2V0X2lkX25vdF9mb3VuZCcsIGZhbHNlLCB7IG5vZGUgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYXNzZXQgPSB0aGlzLmNvbnRlbnRJbmNsdWRlc01hcCgpLmdldEFzc2V0KGFzc2V0SWQpO1xuXG4gICAgICAgICAgaWYgKCFhc3NldCkge1xuICAgICAgICAgICAgdGhyb3cgcmljaFRleHRSZW5kZXJlckVycm9yKCdhc3NldF9ub3RfZm91bmQnLCBmYWxzZSwgeyBhc3NldElkLCBub2RlIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gYXNzZXQuZmllbGRzLmZpbGUuY29udGVudFR5cGU7XG4gICAgICAgICAgY29uc3QgYXNzZXRDb21wb25lbnRzID0gdGhpcy5fY29uZmlnLmNvbXBvbmVudHM7XG5cbiAgICAgICAgICAvLyBFdmVyeSBwcm9wZXJ0eSBpbnNpZGUgdGhlIGFzc2V0IHdpbGwgYmUgbnVsbCBpZiBubyBmaWxlIHdhcyBwcm92aWRlZCBmb3IgYSB0cmFuc2xhdGlvbi5cbiAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgYXNzZXQgaXMgbWlzc2luZyBkdWUgdG8gdXNlciBlcnJvci5cbiAgICAgICAgICBjb25zdCBpc01pc3NpbmcgPSAhY29udGVudFR5cGUgJiYgIWFzc2V0LmZpZWxkcy5maWxlLnVybDtcblxuICAgICAgICAgIGlmIChpc01pc3NpbmcpIHtcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ0Fzc2V0IGlzIG1pc3NpbmcgZmlsZSBkYXRhISBBc3NldCB3aWxsIGJlIHNraXBwZWQuIERpZCB5b3UgZm9yZ2V0IHRvIHVwbG9hZCBhIGZpbGUgZm9yIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIGluIENvbnRlbnRmdWw/JyxcbiAgICAgICAgICAgICAgICB7IGFzc2V0IH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzSW1hZ2UgPSBjb250ZW50VHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJyk7XG4gICAgICAgICAgY29uc3QgaXNWaWRlbyA9IGNvbnRlbnRUeXBlPy5zdGFydHNXaXRoKCd2aWRlby8nKTtcbiAgICAgICAgICBjb25zdCBpc0F1ZGlvID0gY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoJ2F1ZGlvLycpO1xuXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gaXNJbWFnZVxuICAgICAgICAgICAgPyBhc3NldENvbXBvbmVudHMuaW1hZ2VcbiAgICAgICAgICAgIDogaXNWaWRlb1xuICAgICAgICAgICAgICA/IGFzc2V0Q29tcG9uZW50cy52aWRlb1xuICAgICAgICAgICAgICA6IGlzQXVkaW9cbiAgICAgICAgICAgICAgICA/IGFzc2V0Q29tcG9uZW50cy5hdWRpb1xuICAgICAgICAgICAgICAgIDogYXNzZXRDb21wb25lbnRzLmZpbGU7XG5cbiAgICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gaXNJbWFnZVxuICAgICAgICAgICAgPyBERUZBVUxUX0NPTVBPTkVOVF9UWVBFUy5JTUFHRVxuICAgICAgICAgICAgOiBpc1ZpZGVvXG4gICAgICAgICAgICAgID8gREVGQVVMVF9DT01QT05FTlRfVFlQRVMuVklERU9cbiAgICAgICAgICAgICAgOiBpc0F1ZGlvXG4gICAgICAgICAgICAgICAgPyBERUZBVUxUX0NPTVBPTkVOVF9UWVBFUy5BVURJT1xuICAgICAgICAgICAgICAgIDogREVGQVVMVF9DT01QT05FTlRfVFlQRVMuRklMRTtcblxuICAgICAgICAgIGxldCBjb21wb25lbnRJZCA9IGNvbXBvbmVudElkTWFwLmdldChjb21wb25lbnRUeXBlKSA/PyAtMTtcbiAgICAgICAgICBjb25zdCBpZCA9IGNvbXBvbmVudFR5cGUgKyArK2NvbXBvbmVudElkO1xuICAgICAgICAgIGNvbXBvbmVudElkTWFwLnNldChjb21wb25lbnRUeXBlLCBjb21wb25lbnRJZCk7XG5cbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG5cbiAgICAgICAgICBjb25zdCBpbnB1dHMgPSB7XG4gICAgICAgICAgICBhc3NldCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgY29tbWFuZDogQ29tcG9uZW50UmVuZGVyQ29tbWFuZCA9IFtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuZXN0aW5nTGV2ZWwsXG4gICAgICAgICAgICBkb21Qb3NpdGlvbixcbiAgICAgICAgICAgIGNvbW1hbmRJbmRleCsrLFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgICAgIGlucHV0cyxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgIF07XG5cbiAgICAgICAgICByb290Q29tbWFuZHMucHVzaChjb21tYW5kKTtcblxuICAgICAgICAgIGRvbVBvc2l0aW9uKys7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQkxPQ0tTLkVNQkVEREVEX0VOVFJZOlxuICAgICAgICBjYXNlIElOTElORVMuRU1CRURERURfRU5UUlk6IHtcbiAgICAgICAgICAvLyBSZW5kZXIgY29tcG9uZW50XG4gICAgICAgICAgY29uc3QgdHlwZSA9IFJFTkRFUl9DT01NQU5EX1RZUEUuQ09NUE9ORU5UO1xuICAgICAgICAgIGNvbnN0IGVudHJ5SWQgPSBub2RlLmRhdGFbJ3RhcmdldCddPy5zeXM/LmlkO1xuXG4gICAgICAgICAgaWYgKCFlbnRyeUlkKSB7XG4gICAgICAgICAgICB0aHJvdyByaWNoVGV4dFJlbmRlcmVyRXJyb3IoJ2VudHJ5X2lkX25vdF9mb3VuZCcsIGZhbHNlLCB7IG5vZGUgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNvbnRlbnRJbmNsdWRlc01hcCgpLmdldEVudHJ5KGVudHJ5SWQsIEVUX0NPTlRFTlRGVUxfQU5ZX0VOVFJZX0NPTlRFTlRfVFlQRV9TWVNfSUQpO1xuXG4gICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgdGhyb3cgcmljaFRleHRSZW5kZXJlckVycm9yKCdlbnRyeV9ub3RfZm91bmQnLCBmYWxzZSwgeyBlbnRyeUlkLCBub2RlIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSBlbnRyeS5zeXMuY29udGVudFR5cGUuc3lzLmlkO1xuXG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fY29uZmlnLmN1c3RvbUNvbXBvbmVudHNbY29tcG9uZW50VHlwZV07XG5cbiAgICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhyb3cgcmljaFRleHRSZW5kZXJlckVycm9yKCdjdXN0b21fY29tcG9uZW50X25vdF9mb3VuZCcsIGZhbHNlLCB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUsXG4gICAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHM6IHRoaXMuX2NvbmZpZy5jdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgICBlbnRyeSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgICBsZXQgY29tcG9uZW50SWQgPSBjb21wb25lbnRJZE1hcC5nZXQoY29tcG9uZW50VHlwZSkgPz8gLTE7XG4gICAgICAgICAgY29uc3QgaWQgPSBjb21wb25lbnRUeXBlICsgKytjb21wb25lbnRJZDtcbiAgICAgICAgICBjb21wb25lbnRJZE1hcC5zZXQoY29tcG9uZW50VHlwZSwgY29tcG9uZW50SWQpO1xuXG4gICAgICAgICAgY29uc3QgaW5wdXRzID0ge1xuICAgICAgICAgICAgZmllbGRzOiBlbnRyeS5maWVsZHMsXG4gICAgICAgICAgICBtZXRhZGF0YTogZW50cnkubWV0YWRhdGEsXG4gICAgICAgICAgICBzeXM6IGVudHJ5LnN5cyxcbiAgICAgICAgICAgIGluY2x1ZGVzOiB0aGlzLmNvbnRlbnRJbmNsdWRlc01hcCgpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjb21tYW5kOiBDb21wb25lbnRSZW5kZXJDb21tYW5kID0gW1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5lc3RpbmdMZXZlbCxcbiAgICAgICAgICAgIGRvbVBvc2l0aW9uLFxuICAgICAgICAgICAgY29tbWFuZEluZGV4KyssXG4gICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgY29tcG9uZW50LFxuICAgICAgICAgICAgaW5wdXRzLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIHJvb3RDb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuXG4gICAgICAgICAgZG9tUG9zaXRpb24rKztcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBSRU5ERVJfQ09NTUFORF9UWVBFLkhUTUxfT1BFTjtcbiAgICAgICAgICBjb25zdCB0YWcgPSB0cmFuc2xhdGVDb250ZW50ZnVsTm9kZVR5cGVUb0h0bWxUYWcobm9kZS5ub2RlVHlwZSk7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICAgIGNvbnN0IGlkID0gJ2UtbycgKyBlbGVtZW50T3BlbklkKys7XG5cbiAgICAgICAgICBjb25zdCBjb21tYW5kOiBIdG1sT3BlblJlbmRlckNvbW1hbmQgPSBbdHlwZSwgbmVzdGluZ0xldmVsLCBkb21Qb3NpdGlvbiwgY29tbWFuZEluZGV4KyssIGF0dHJpYnV0ZXMsIHRhZywgaWRdO1xuXG4gICAgICAgICAgcm9vdENvbW1hbmRzLnB1c2goY29tbWFuZCk7XG5cbiAgICAgICAgICBjb25zdCBkb21Qb3NpdGlvbkF0VGhpc0xldmVsID0gZG9tUG9zaXRpb247XG4gICAgICAgICAgLy8gTm9ybWFsIGh0bWwgZWxlbWVudHMgY2FuIGhhdmUgY2hpbGRyZW5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY29udGVudCkge1xuICAgICAgICAgICAgZG9tUG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgbmVzdGluZ0xldmVsKys7XG4gICAgICAgICAgICB0cmF2ZXJzZShjaGlsZCk7XG4gICAgICAgICAgICBuZXN0aW5nTGV2ZWwtLTtcbiAgICAgICAgICAgIGRvbVBvc2l0aW9uID0gZG9tUG9zaXRpb25BdFRoaXNMZXZlbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsYXN0Q29tbWFuZCA9IHJvb3RDb21tYW5kc1tyb290Q29tbWFuZHMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYXN0Q29tbWFuZD8uW1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRZUEVdID09PSBSRU5ERVJfQ09NTUFORF9UWVBFLkhUTUxfT1BFTiAmJlxuICAgICAgICAgICAgbGFzdENvbW1hbmRbSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRBR19OQU1FXSAhPT0gJ3RkJyAmJlxuICAgICAgICAgICAgbGFzdENvbW1hbmRbSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRBR19OQU1FXSAhPT0gJ2hyJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgY29tbWFuZCBpcyBhbiBvcGVuIGNvbW1hbmQsIHdlIGNhbiByZW1vdmUgaXQgc2luY2UgaXQncyBlbXB0eVxuICAgICAgICAgICAgcm9vdENvbW1hbmRzLnBvcCgpO1xuICAgICAgICAgICAgZWxlbWVudE9wZW5JZC0tO1xuICAgICAgICAgICAgY29tbWFuZEluZGV4LS07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlSWQgPSAnZS1jJyArIGVsZW1lbnRDbG9zZUlkKys7XG5cbiAgICAgICAgICAgIGNvbnN0IGNsb3NlQ29tbWFuZDogSHRtbENsb3NlUmVuZGVyQ29tbWFuZCA9IFtcbiAgICAgICAgICAgICAgUkVOREVSX0NPTU1BTkRfVFlQRS5IVE1MX0NMT1NFLFxuICAgICAgICAgICAgICBuZXN0aW5nTGV2ZWwsXG4gICAgICAgICAgICAgIGRvbVBvc2l0aW9uLFxuICAgICAgICAgICAgICBjb21tYW5kSW5kZXgrKyxcbiAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICBjbG9zZUlkLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJvb3RDb21tYW5kcy5wdXNoKGNsb3NlQ29tbWFuZCk7XG5cbiAgICAgICAgICAgIGRvbVBvc2l0aW9uKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IElOTElORVMuSFlQRVJMSU5LKSB7XG4gICAgICAgICAgICBjb25zdCB1cmkgPSBub2RlLmRhdGFbJ3VyaSddO1xuICAgICAgICAgICAgYXR0cmlidXRlc1snaHJlZiddID0gdXJpO1xuXG4gICAgICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5fZG9jdW1lbnQubG9jYXRpb24uaG9zdDtcbiAgICAgICAgICAgIGNvbnN0IGlzRXh0ZXJuYWwgPSAhdXJpLmluY2x1ZGVzKGhvc3QpO1xuXG4gICAgICAgICAgICBpZiAoaXNFeHRlcm5hbCkge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVzWyd0YXJnZXQnXSA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiByaWNoVGV4dERhdGEuY29udGVudCkge1xuICAgICAgdHJhdmVyc2Uobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvb3RDb21tYW5kcztcbiAgfVxuXG4gIHByaXZhdGUgX2V4ZWNJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBSZW5kZXJJbnN0cnVjdGlvbltdKSB7XG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHR5cGUgPSBpbnN0cnVjdGlvbltSRU5ERVJfSU5TVFJVQ1RJT05fUE9TSVRJT04uVFlQRV07XG4gICAgICBjb25zdCBjb21tYW5kID0gaW5zdHJ1Y3Rpb25bUkVOREVSX0lOU1RSVUNUSU9OX1BPU0lUSU9OLkNPTU1BTkRdO1xuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRU5ERVJfSU5TVFJVQ1RJT05fVFlQRS5DUkVBVEU6XG4gICAgICAgICAgdGhpcy5fcnVuQ3JlYXRlSW5zdHJ1Y3Rpb24oY29tbWFuZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUkVOREVSX0lOU1RSVUNUSU9OX1RZUEUuVVBEQVRFOlxuICAgICAgICAgIHRoaXMuX3J1blVwZGF0ZUluc3RydWN0aW9uKGNvbW1hbmQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJFTkRFUl9JTlNUUlVDVElPTl9UWVBFLk1PVkU6XG4gICAgICAgICAgdGhpcy5fcnVuTW92ZUluc3RydWN0aW9uKGNvbW1hbmQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFJFTkRFUl9JTlNUUlVDVElPTl9UWVBFLkRFTEVURTpcbiAgICAgICAgICB0aGlzLl9ydW5EZWxldGVJbnN0cnVjdGlvbihjb21tYW5kKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9ydW5DcmVhdGVJbnN0cnVjdGlvbihjb21tYW5kOiBSZW5kZXJDb21tYW5kKSB7XG4gICAgY29uc3QgaWQgPSBnZXRSZW5kZXJDb21tYW5kSWQoY29tbWFuZCk7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoY29tbWFuZCk7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSB0aGlzLl9maW5kRm9sbG93aW5nRWxlbWVudChjb21tYW5kKTtcblxuICAgIGlmIChpc0NvbXBvbmVudFJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbW1hbmRbQ09NUE9ORU5UX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLkNPTVBPTkVOVF0pO1xuXG4gICAgICB0aGlzLl91cGRhdGVDb21wb25lbnRJbnB1dHMoY29tbWFuZCwgY29tcG9uZW50UmVmKTtcblxuICAgICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShjb21wb25lbnRSZWYpO1xuXG4gICAgICB0aGlzLl9yZW5kZXJJbnNlcnRPckFwcGVuZChyb290Tm9kZSwgcGFyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLl9leGVjdXRlZENvbW1hbmRzQ2FjaGUuc2V0KGlkLCB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGNvbXBvbmVudFJlZixcbiAgICAgICAgZWxlbWVudDogcm9vdE5vZGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGlzVGV4dFJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjb21tYW5kW1RFWFRfUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVEVYVF07XG4gICAgICBjb25zdCBzcGFuID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGNvbW1hbmRbVEVYVF9SRU5ERVJfQ09NTUFORF9QT1NJVElPTi5BVFRSSUJVVEVTXTtcbiAgICAgIGNvbnN0IHRleHRTcGxpdEluTGluZUJyZWFrcyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcigodCkgPT4gdC50cmltKCkubGVuZ3RoID4gMCk7XG5cbiAgICAgIGNvbnN0IHRleHROb2RlczogdW5rbm93bltdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShzcGFuLCBrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRleHQuc3RhcnRzV2l0aCgnXFxuJykpIHtcbiAgICAgICAgY29uc3QgYnJOb2RlID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50RWxlbWVudCwgYnJOb2RlKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbdGV4dFBhcnRJbmRleCwgdGV4dFBhcnRdIG9mIHRleHRTcGxpdEluTGluZUJyZWFrcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKHRleHRQYXJ0SW5kZXggPiAwKSB7XG4gICAgICAgICAgY29uc3QgYnJOb2RlID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYnInKTtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChzcGFuLCBick5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVUZXh0KHRleHRQYXJ0KTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChzcGFuLCB0ZXh0Tm9kZSk7XG5cbiAgICAgICAgdGV4dE5vZGVzLnB1c2godGV4dE5vZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZW5kZXJJbnNlcnRPckFwcGVuZChzcGFuLCBwYXJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk7XG5cbiAgICAgIHRoaXMuX2V4ZWN1dGVkQ29tbWFuZHNDYWNoZS5zZXQoaWQsIHtcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAgZWxlbWVudDogc3BhbixcbiAgICAgICAgdGV4dE5vZGU6IHRleHROb2RlcyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaXNIdG1sT3BlblJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICAgIGNvbnN0IHRhZyA9IGNvbW1hbmRbSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRBR19OQU1FXTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjb21tYW5kW0hUTUxfT1BFTl9SRU5ERVJfQ09NTUFORF9QT1NJVElPTi5BVFRSSUJVVEVTXTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KHRhZyk7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVuZGVySW5zZXJ0T3JBcHBlbmQoZWxlbWVudCwgcGFyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpO1xuXG4gICAgICB0aGlzLl9leGVjdXRlZENvbW1hbmRzQ2FjaGUuc2V0KGlkLCB7XG4gICAgICAgIGNvbW1hbmQsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9ydW5VcGRhdGVJbnN0cnVjdGlvbihjb21tYW5kOiBSZW5kZXJDb21tYW5kKSB7XG4gICAgY29uc3QgaWQgPSBnZXRSZW5kZXJDb21tYW5kSWQoY29tbWFuZCk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5fZXhlY3V0ZWRDb21tYW5kc0NhY2hlLmdldChpZCk7XG5cbiAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWNoZWQgY29tbWFuZCBub3QgZm91bmQhJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29tcG9uZW50UmVuZGVyQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgaWYgKCFpc0V4ZWN1dGVkQ29tcG9uZW50Q29tbWFuZENhY2hlSXRlbShjYWNoZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FjaGVkIGNvbW1hbmQgaXMgbm90IGEgY29tcG9uZW50IGNvbW1hbmQhJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNhY2hlZC5jb21wb25lbnRSZWY7XG5cbiAgICAgIGlmICghY29tcG9uZW50UmVmKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IHJlZiBub3QgZm91bmQhJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZUNvbXBvbmVudElucHV0cyhjb21tYW5kLCBjb21wb25lbnRSZWYpO1xuICAgIH1cblxuICAgIHRoaXMuX2V4ZWN1dGVkQ29tbWFuZHNDYWNoZS5zZXQoaWQsIHtcbiAgICAgIC4uLmNhY2hlZCxcbiAgICAgIGNvbW1hbmQ6IGNvbW1hbmQgYXMgYW55LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcnVuTW92ZUluc3RydWN0aW9uKGNvbW1hbmQ6IFJlbmRlckNvbW1hbmQpIHtcbiAgICBjb25zdCBpZCA9IGdldFJlbmRlckNvbW1hbmRJZChjb21tYW5kKTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9leGVjdXRlZENvbW1hbmRzQ2FjaGUuZ2V0KGlkKTtcblxuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhY2hlZCBjb21tYW5kIG5vdCBmb3VuZCEnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNDb21wb25lbnRSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICBpZiAoIWlzRXhlY3V0ZWRDb21wb25lbnRDb21tYW5kQ2FjaGVJdGVtKGNhY2hlZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWNoZWQgY29tbWFuZCBpcyBub3QgYSBjb21wb25lbnQgY29tbWFuZCEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY2FjaGVkLmNvbXBvbmVudFJlZjtcblxuICAgICAgaWYgKCFjb21wb25lbnRSZWYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgcmVmIG5vdCBmb3VuZCEnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBjYWNoZWQuZWxlbWVudDtcbiAgICAgIGNvbnN0IG9sZFBhcmVudEVsZW1lbnQgPSBjYWNoZWQuZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZChvbGRQYXJlbnRFbGVtZW50LCByb290Tm9kZSk7XG5cbiAgICAgIGNvbnN0IG5ld1BhcmVudEVsZW1lbnQgPSB0aGlzLl9maW5kUGFyZW50KGNvbW1hbmQpO1xuICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSB0aGlzLl9maW5kRm9sbG93aW5nRWxlbWVudChjb21tYW5kKTtcblxuICAgICAgdGhpcy5fcmVuZGVySW5zZXJ0T3JBcHBlbmQocm9vdE5vZGUsIG5ld1BhcmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTtcblxuICAgICAgdGhpcy5fdXBkYXRlQ29tcG9uZW50SW5wdXRzKGNvbW1hbmQsIGNvbXBvbmVudFJlZik7XG5cbiAgICAgIHRoaXMuX2V4ZWN1dGVkQ29tbWFuZHNDYWNoZS5zZXQoaWQsIHtcbiAgICAgICAgLi4uY2FjaGVkLFxuICAgICAgICBjb21tYW5kOiBjb21tYW5kIGFzIGFueSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3J1bkRlbGV0ZUluc3RydWN0aW9uKGNvbW1hbmQ6IFJlbmRlckNvbW1hbmQpIHtcbiAgICBjb25zdCBpZCA9IGdldFJlbmRlckNvbW1hbmRJZChjb21tYW5kKTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLl9leGVjdXRlZENvbW1hbmRzQ2FjaGUuZ2V0KGlkKTtcblxuICAgIGlmICghY2FjaGVkKSB7XG4gICAgICBpZiAoaXNIdG1sQ2xvc2VSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYWNoZWQgY29tbWFuZCBub3QgZm91bmQhJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ29tcG9uZW50UmVuZGVyQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgaWYgKCFpc0V4ZWN1dGVkQ29tcG9uZW50Q29tbWFuZENhY2hlSXRlbShjYWNoZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FjaGVkIGNvbW1hbmQgaXMgbm90IGEgY29tcG9uZW50IGNvbW1hbmQhJyk7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlZC5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICB9IGVsc2UgaWYgKGlzVGV4dFJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKGNhY2hlZC5lbGVtZW50Py5wYXJlbnRFbGVtZW50LCBjYWNoZWQuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc0h0bWxPcGVuUmVuZGVyQ29tbWFuZChjb21tYW5kKSkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQoY2FjaGVkLmVsZW1lbnQ/LnBhcmVudEVsZW1lbnQsIGNhY2hlZC5lbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9leGVjdXRlZENvbW1hbmRzQ2FjaGUuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbXBvbmVudFJvb3ROb2RlKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4pOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZUNvbXBvbmVudElucHV0cyhjb21tYW5kOiBDb21wb25lbnRSZW5kZXJDb21tYW5kLCBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY29tbWFuZFtDT01QT05FTlRfUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uSU5QVVRTXSkpIHtcbiAgICAgIGlmICghY29tcG9uZW50UmVmLmluc3RhbmNlW2tleV0pIGNvbnRpbnVlO1xuXG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZFBhcmVudChjb21tYW5kOiBSZW5kZXJDb21tYW5kKSB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgbmVzdGluZ0xldmVsID0gY29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5ORVNUSU5HX0xFVkVMXTtcbiAgICBsZXQgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAobmVzdGluZ0xldmVsID09PSAwKSB7XG4gICAgICBwYXJlbnRFbGVtZW50ID0gaG9zdEVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVyc2Ugc2VhcmNoIGFsbCByZW5kZXIgY29tbWFuZHMgYmVnaW5uaW5nIGZyb20gdGhlIGN1cnJlbnQgb25lIHVzaW5nIGEgZm9yIGxvb3AuXG4gICAgICAvLyBUaGUgcGFyZW50IGlzIGZvdW5kIHdoZW4gdGhlIGNvbW1hbmQncyBuZXN0aW5nIGxldmVsIGlzdCB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBuZXN0aW5nIGxldmVsIG1pbnVzIDEuXG4gICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBmb3VuZCwgdGhyb3cgYW4gZXJyb3IuXG4gICAgICBjb25zdCBhbGxDb21tYW5kcyA9IHRoaXMucmVuZGVyQ29tbWFuZHMoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb21tYW5kSW5kZXggPSBjb21tYW5kW1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLklOREVYXTtcblxuICAgICAgbGV0IHBhcmVudENvbW1hbmQ6IFJlbmRlckNvbW1hbmQgfCBudWxsID0gbnVsbDtcblxuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRDb21tYW5kSW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBjbWQgPSBhbGxDb21tYW5kc1tpXTtcblxuICAgICAgICBpZiAoIWNtZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tbWFuZCBub3QgZm91bmQhJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY21kW1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLk5FU1RJTkdfTEVWRUxdID09PSBuZXN0aW5nTGV2ZWwgLSAxICYmIGlzSHRtbE9wZW5SZW5kZXJDb21tYW5kKGNtZCkpIHtcbiAgICAgICAgICBwYXJlbnRDb21tYW5kID0gY21kO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFyZW50Q29tbWFuZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBjb21tYW5kIG5vdCBmb3VuZCEnKTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50RWxlbWVudCA9IHRoaXMuX2V4ZWN1dGVkQ29tbWFuZHNDYWNoZS5nZXQoZ2V0UmVuZGVyQ29tbWFuZElkKHBhcmVudENvbW1hbmQpKT8uZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGVsZW1lbnQgbm90IGZvdW5kIScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEZvbGxvd2luZ0VsZW1lbnQoY29tbWFuZDogUmVuZGVyQ29tbWFuZCkge1xuICAgIGNvbnN0IGNhY2hlQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuX2V4ZWN1dGVkQ29tbWFuZHNDYWNoZS52YWx1ZXMoKSk7XG4gICAgbGV0IG5leHRFbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRvbVBvc2l0aW9uID0gY29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5ET01fUE9TSVRJT05dO1xuICAgIGNvbnN0IG5lc3RpbmdMZXZlbCA9IGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uTkVTVElOR19MRVZFTF07XG4gICAgY29uc3QgdHlwZSA9IGNvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVFlQRV07XG5cbiAgICAvLyBUcnkgdG8gZmluZCBhbiBhbHJlYWR5IHJlbmRlcmVkIGVsZW1lbnQgd2l0aCBhIGRvbVBvc2l0aW9uIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGRvbVBvc2l0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUsIHVzZSB0aGUgb25lIHdpdGggdGhlIHNtYWxsZXN0IGRvbVBvc2l0aW9uLlxuICAgIC8vIElmIGl0IGRvZXMgbm90IGV4aXN0LCB1c2UgLmFwcGVuZENoaWxkIHRvIHNpbXBseSBhcHBlbmQgdGhlIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcGFyZW50IGVsZW1lbnQuXG4gICAgLy8gSWYgaXQgZG9lcyBleGlzdCwgdXNlIC5pbnNlcnRCZWZvcmUgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGJlZm9yZSB0aGUgZm91bmQgZWxlbWVudC5cbiAgICBmb3IgKGNvbnN0IGNhY2hlZCBvZiBjYWNoZUFycmF5KSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhY2hlZC5jb21tYW5kW1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLkRPTV9QT1NJVElPTl0gPiBkb21Qb3NpdGlvbiAmJlxuICAgICAgICBjYWNoZWQuY29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5ORVNUSU5HX0xFVkVMXSA9PT0gbmVzdGluZ0xldmVsICYmXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBkb2VzIG5vdCBmaW5kIGl0c2VsZlxuICAgICAgICBjYWNoZWQuY29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5UWVBFXSAhPT0gdHlwZVxuICAgICAgKSB7XG4gICAgICAgIG5leHRFbGVtZW50ID0gY2FjaGVkLmVsZW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckluc2VydE9yQXBwZW5kKFxuICAgIG5vZGVUb1JlbmRlcjogSFRNTEVsZW1lbnQsXG4gICAgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgbmV4dEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkLFxuICApIHtcbiAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmluc2VydEJlZm9yZShwYXJlbnRFbGVtZW50LCBub2RlVG9SZW5kZXIsIG5leHRFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50RWxlbWVudCwgbm9kZVRvUmVuZGVyKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gY29uc3Qgc3RyaW5naWZ5UmVuZGVyQ29tbWFuZCA9IChjb21tYW5kOiBSZW5kZXJDb21tYW5kKSA9PiB7XG4vLyAgIGNvbnN0IG5lc3RBdHRyID0gYG5lc3Q9XCIke2NvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uTkVTVElOR19MRVZFTF19XCJgO1xuLy8gICBjb25zdCBkb21BdHRyID0gYGRvbT1cIiR7Y29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5ET01fUE9TSVRJT05dfVwiYDtcblxuLy8gICBpZiAoaXNIdG1sT3BlblJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbi8vICAgICByZXR1cm4gYDwke2NvbW1hbmRbSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRBR19OQU1FXX0gJHtuZXN0QXR0cn0gJHtkb21BdHRyfSBfaWQ9XCIke2NvbW1hbmRbSFRNTF9PUEVOX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLkVMRU1FTlRfSURdfVwiIF9pbmRleD1cIiR7Y29tbWFuZFtSRU5ERVJfQ09NTUFORF9QT1NJVElPTi5JTkRFWF19XCI+YDtcbi8vICAgfSBlbHNlIGlmIChpc0h0bWxDbG9zZVJlbmRlckNvbW1hbmQoY29tbWFuZCkpIHtcbi8vICAgICByZXR1cm4gYDwvJHtjb21tYW5kW0hUTUxfQ0xPU0VfUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uVEFHX05BTUVdfSAke25lc3RBdHRyfSAke2RvbUF0dHJ9PmA7XG4vLyAgIH0gZWxzZSBpZiAoaXNUZXh0UmVuZGVyQ29tbWFuZChjb21tYW5kKSkge1xuLy8gICAgIGxldCB0ZXh0ID0gY29tbWFuZFtURVhUX1JFTkRFUl9DT01NQU5EX1BPU0lUSU9OLlRFWFRdO1xuLy8gICAgIGNvbnN0IGJyU3RhcnQgPSB0ZXh0LnN0YXJ0c1dpdGgoJ1xcbicpID8gJzxici8+JyA6ICcnO1xuLy8gICAgIHRleHQgPSBiclN0YXJ0ID8gdGV4dC5zbGljZSgxKSA6IHRleHQ7XG5cbi8vICAgICByZXR1cm4gW1xuLy8gICAgICAgLi4uKGJyU3RhcnQgPyBbYnJTdGFydF0gOiBbXSksXG4vLyAgICAgICBgPHNwYW4gJHtuZXN0QXR0cn0gJHtkb21BdHRyfSBfaW5kZXg9XCIke2NvbW1hbmRbUkVOREVSX0NPTU1BTkRfUE9TSVRJT04uSU5ERVhdfVwiPmAsXG4vLyAgICAgICB0ZXh0LnJlcGxhY2UoL1xcbi9nLCAnIDxici8+ICcpLFxuLy8gICAgICAgJzwvc3Bhbj4nLFxuLy8gICAgIF07XG4vLyAgIH0gZWxzZSBpZiAoaXNDb21wb25lbnRSZW5kZXJDb21tYW5kKGNvbW1hbmQpKSB7XG4vLyAgICAgY29uc3Qgc2VsZWN0b3IgPSBjb21tYW5kW0NPTVBPTkVOVF9SRU5ERVJfQ09NTUFORF9QT1NJVElPTi5DT01QT05FTlRfSURdO1xuLy8gICAgIHJldHVybiBbYDwke3NlbGVjdG9yfSAke25lc3RBdHRyfSAke2RvbUF0dHJ9PmAsIGA8LyR7c2VsZWN0b3J9PmBdO1xuLy8gICB9IGVsc2Uge1xuLy8gICAgIHJldHVybiAnVU5LTk9XTic7XG4vLyAgIH1cbi8vIH07XG5cbi8vIGNvbnN0IGZvcm1hdEhUTUxTdHJpbmdBcnJheSA9IChodG1sOiBzdHJpbmdbXSkgPT4ge1xuLy8gICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4vLyAgIGxldCBpbmRlbnQgPSAwO1xuXG4vLyAgIGZvciAoY29uc3QgdGFnIG9mIGh0bWwpIHtcbi8vICAgICBpZiAodGFnLnN0YXJ0c1dpdGgoJzwvJykpIHtcbi8vICAgICAgIGluZGVudC0tO1xuLy8gICAgIH1cblxuLy8gICAgIHJlc3VsdC5wdXNoKCcgJy5yZXBlYXQoaW5kZW50ICogMikgKyB0YWcpO1xuXG4vLyAgICAgaWYgKHRhZy5zdGFydHNXaXRoKCc8JykgJiYgIXRhZy5zdGFydHNXaXRoKCc8LycpICYmICF0YWcuc3RhcnRzV2l0aCgnPGJyJykpIHtcbi8vICAgICAgIGluZGVudCsrO1xuLy8gICAgIH1cbi8vICAgfVxuXG4vLyAgIHJldHVybiByZXN1bHQuam9pbignXFxuJyk7XG4vLyB9O1xuXG4vLyBjb25zdCBkZWJ1Z1Zpc3VhbGl6ZVJlbmRlckNvbW1hbmRzID0gKGNvbW1hbmRzOiBSZW5kZXJDb21tYW5kW10pID0+IHtcbi8vICAgY29uc3QgZGVidWcgPSBjb21tYW5kcy5tYXAoKGNvbW1hbmQpID0+IHN0cmluZ2lmeVJlbmRlckNvbW1hbmQoY29tbWFuZCkpLmZsYXQoKTtcblxuLy8gICBjb25zdCBwcmV0dGlmaWVkID0gZm9ybWF0SFRNTFN0cmluZ0FycmF5KGRlYnVnKTtcblxuLy8gICByZXR1cm4gcHJldHRpZmllZDtcbi8vIH07XG5cbi8vIGNvbnN0IHN0cmluZ2lmeVJlbmRlckluc3RydWN0aW9uID0gKGluc3RydWN0aW9uOiBSZW5kZXJJbnN0cnVjdGlvbikgPT4ge1xuLy8gICBjb25zdCB0eXBlID0gaW5zdHJ1Y3Rpb25bUkVOREVSX0lOU1RSVUNUSU9OX1BPU0lUSU9OLlRZUEVdO1xuLy8gICBjb25zdCB0cmFuc2xhdGVkVHlwZSA9IE9iamVjdC5lbnRyaWVzKFJFTkRFUl9JTlNUUlVDVElPTl9UWVBFKS5maW5kKChbLCB2YWx1ZV0pID0+IHZhbHVlID09PSB0eXBlKT8uWzBdO1xuXG4vLyAgIGNvbnN0IGNvbW1hbmQgPSBzdHJpbmdpZnlSZW5kZXJDb21tYW5kKGluc3RydWN0aW9uW1JFTkRFUl9JTlNUUlVDVElPTl9QT1NJVElPTi5DT01NQU5EXSk7XG5cbi8vICAgcmV0dXJuIGAke3RyYW5zbGF0ZWRUeXBlfTogJHtjb21tYW5kfWA7XG4vLyB9O1xuIl19","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\nexport const ContentfulImports = [\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n ContentfulRichTextRendererComponent,\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC5pbXBvcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9saWIvY29udGVudGZ1bC5pbXBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixtQ0FBbUM7Q0FDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRmdWxBdWRpb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hdWRpbyc7XG5pbXBvcnQgeyBDb250ZW50ZnVsRmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9maWxlJztcbmltcG9ydCB7IENvbnRlbnRmdWxJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbWFnZSc7XG5pbXBvcnQgeyBDb250ZW50ZnVsUmljaFRleHRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yaWNoLXRleHQtcmVuZGVyZXInO1xuaW1wb3J0IHsgQ29udGVudGZ1bFZpZGVvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3ZpZGVvJztcblxuZXhwb3J0IGNvbnN0IENvbnRlbnRmdWxJbXBvcnRzID0gW1xuICBDb250ZW50ZnVsQXVkaW9Db21wb25lbnQsXG4gIENvbnRlbnRmdWxGaWxlQ29tcG9uZW50LFxuICBDb250ZW50ZnVsSW1hZ2VDb21wb25lbnQsXG4gIENvbnRlbnRmdWxWaWRlb0NvbXBvbmVudCxcbiAgQ29udGVudGZ1bFJpY2hUZXh0UmVuZGVyZXJDb21wb25lbnQsXG5dIGFzIGNvbnN0O1xuIl19","import { CONTENTFUL_CONFIG } from '../constants';\nimport { createContentfulConfig } from './contentful-config';\nexport const provideContentfulConfig = (contentfulConfig = {}) => {\n return { provide: CONTENTFUL_CONFIG, useValue: createContentfulConfig(contentfulConfig) };\n};\nexport const isContentfulEntryType = (entry, type) => entry.sys.contentType.sys.id === type;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGZ1bC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9saWIvdXRpbHMvY29udGVudGZ1bC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLG1CQUFpRSxFQUFFLEVBQUUsRUFBRTtJQUM3RyxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7QUFDNUYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBNEIsS0FBc0IsRUFBRSxJQUFZLEVBQWMsRUFBRSxDQUNuSCxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTlRFTlRGVUxfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnRlbnRmdWxDb25maWcsIENvbnRlbnRmdWxFbnRyeSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRlbnRmdWxDb25maWcgfSBmcm9tICcuL2NvbnRlbnRmdWwtY29uZmlnJztcblxuZXhwb3J0IGNvbnN0IHByb3ZpZGVDb250ZW50ZnVsQ29uZmlnID0gKGNvbnRlbnRmdWxDb25maWc6IFBhcnRpYWw8Q29udGVudGZ1bENvbmZpZz4gfCBudWxsIHwgdW5kZWZpbmVkID0ge30pID0+IHtcbiAgcmV0dXJuIHsgcHJvdmlkZTogQ09OVEVOVEZVTF9DT05GSUcsIHVzZVZhbHVlOiBjcmVhdGVDb250ZW50ZnVsQ29uZmlnKGNvbnRlbnRmdWxDb25maWcpIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb250ZW50ZnVsRW50cnlUeXBlID0gPFQgZXh0ZW5kcyBDb250ZW50ZnVsRW50cnk+KGVudHJ5OiBDb250ZW50ZnVsRW50cnksIHR5cGU6IHN0cmluZyk6IGVudHJ5IGlzIFQgPT5cbiAgZW50cnkuc3lzLmNvbnRlbnRUeXBlLnN5cy5pZCA9PT0gdHlwZTtcbiJdfQ==","export * from './lib/components/audio';\nexport * from './lib/components/file';\nexport * from './lib/components/image';\nexport * from './lib/components/rich-text-renderer';\nexport * from './lib/components/video';\nexport * from './lib/constants';\nexport * from './lib/contentful.imports';\nexport * from './lib/gql';\nexport * from './lib/types';\nexport * from './lib/utils';\n// Burst cache\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvbnRlbnRmdWwvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXVkaW8nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaW1hZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yaWNoLXRleHQtcmVuZGVyZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92aWRlbyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29udGVudGZ1bC5pbXBvcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dxbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5cbi8vIEJ1cnN0IGNhY2hlXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRobGV0ZS1jb250ZW50ZnVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9jb250ZW50ZnVsL3NyYy9ldGhsZXRlLWNvbnRlbnRmdWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ethlete-contentful.mjs","sources":["../../../../libs/contentful/src/lib/gql/asset.fragments.ts","../../../../libs/contentful/src/lib/components/audio/contentful-audio.component.ts","../../../../libs/contentful/src/lib/components/file/contentful-file.component.ts","../../../../libs/contentful/src/lib/constants/contentful.constants.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.utils.ts","../../../../libs/contentful/src/lib/components/image/contentful-image.component.ts","../../../../libs/contentful/src/lib/components/video/contentful-video.component.ts","../../../../libs/contentful/src/lib/utils/contentful-config.ts","../../../../libs/contentful/src/lib/components/link/contentful-link.component.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.errors.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.util.ts","../../../../libs/contentful/src/lib/components/rich-text-renderer/rich-text-renderer.component.ts","../../../../libs/contentful/src/lib/contentful.imports.ts","../../../../libs/contentful/src/lib/utils/contentful.util.ts","../../../../libs/contentful/src/index.ts","../../../../libs/contentful/src/ethlete-contentful.ts"],"sourcesContent":["import { gql } from '@ethlete/query';\n\nexport const GQL_FRAGMENT_CONTENTFUL_ASSET = gql`\n fragment AssetData on Asset {\n sys {\n id\n }\n url\n title\n width\n height\n description\n contentType\n size\n }\n`;\n\nexport type ContentfulGqlAsset = {\n sys: {\n id: string;\n };\n title: string | null;\n contentType: string | null;\n url: string | null;\n description: string | null;\n width: number | null;\n height: number | null;\n size: number | null;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isContentfulGqlAsset = (asset: any): asset is ContentfulGqlAsset => {\n return asset?.sys?.id && asset?.url && typeof asset?.size === 'number';\n};\n\nexport type ContentfulGqlWhereFilter<TLinkedFrom extends Record<string, unknown> = Record<string, unknown>> = {\n /**\n * Filer by ids.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/sys-filters\n */\n sys?: {\n id?: string;\n id_not?: string;\n id_in?: string[];\n id_not_in?: string[];\n id_contains?: string;\n id_not_contains?: string;\n };\n /**\n * Filer by tags.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters/contentfulmetadata-filters\n */\n contentfulMetadata?: {\n tags_exists?: boolean;\n tags?: {\n id_contains_some?: string[];\n id_contains_none?: string[];\n id_contains_all?: string[];\n };\n };\n /**\n * Retrieve a collection of entries linked to the specified entry or asset.\n * @see https://www.contentful.com/developers/docs/references/graphql/#links-to-a-specific-item\n */\n linkedFrom?: TLinkedFrom;\n};\n\nexport type ContentfulGqlOrder = `${string}_${'ASC' | 'DESC'}`;\n\nexport type ContentfulGqlCollectionFilterVariables<\n TCustomWhere extends Record<string, unknown> = Record<string, unknown>,\n TLinkedFrom extends Record<string, unknown> = Record<string, unknown>,\n> = {\n /**\n * Zero-indexed offset in the collection from which items are fetched\n * @default 0\n */\n skip?: number;\n\n /**\n * Maximum number of items to fetch. Maximum is 1000.\n * @default 100\n */\n limit?: number;\n\n /**\n * Filter specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-filters\n */\n where?: TCustomWhere & ContentfulGqlWhereFilter<TLinkedFrom>;\n\n /**\n * Order specifications to apply on the collection query.\n * @see https://www.contentful.com/developers/docs/references/graphql/#/reference/collection-order\n */\n order?: ContentfulGqlOrder[];\n\n /**\n * When set to `true` the field will be resolved with non published content.\n * @default false\n */\n preview?: boolean;\n\n /**\n * Locale for the collection items. If not set the default locale is used.\n */\n locale?: string;\n};\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-audio',\n template: `\n @if (data(); as data) {\n <figure [ngClass]=\"figureClass()\">\n <figcaption [ngClass]=\"figcaptionClass()\">{{ data.title }}</figcaption>\n <audio [ngClass]=\"audioClass()\" controls src=\"{{ data.url }}\"></audio>\n </figure>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulAudioComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n audioClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n title: asset.title,\n };\n }\n\n return {\n url: asset.fields.file.url,\n title: asset.fields.title,\n };\n });\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-file',\n template: `\n @if (data(); as data) {\n <a [href]=\"data.url\" [ngClass]=\"fileClass()\" class=\"underline\" target=\"_blank\">\n {{ data.title }} ({{ data.size }} Bytes)\n </a>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulFileComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n fileClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n size: asset.size,\n title: asset.title,\n };\n }\n\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n size: asset.fields.file.details.size,\n title: asset.fields.title,\n };\n });\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ContentfulConfig } from '../types';\n\nexport const CONTENTFUL_CONFIG = new InjectionToken<ContentfulConfig>('ContentfulConfig');\n","import { PictureSource } from '@ethlete/cdk';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\n\nexport const generateDefaultContentfulImageSource = (data: ContentfulRestAsset | ContentfulGqlAsset): PictureSource => {\n if (isContentfulGqlAsset(data)) {\n if (!data.contentType || !data.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.contentType,\n srcset: data.url,\n };\n }\n\n if (!data.fields.file.contentType || !data.fields.file.url) {\n return {\n type: '',\n srcset: '',\n };\n }\n\n return {\n type: data.fields.file.contentType,\n srcset: data.fields.file.url,\n };\n};\n\n/**\n * Parses source set sizes into an object containing with and height. Eg.\n * - `\"400\"` - 400px width\n * - `\"400x300\"` - 400px width and 300px height\n * - `\"400w\"` - 400px width\n * - `\"400h\"` - 400px height\n * - `\"400wx300h\"` - 400px width and 300px height\n **/\nexport const parseContentfulImageSize = (size: string): { width: number | null; height: number | null } => {\n let width: string | null | undefined = null;\n let height: string | null | undefined = null;\n\n if (size.includes('x')) {\n const [w, h] = size.split('x');\n\n width = w;\n height = h;\n } else if (size.includes('h')) {\n height = size;\n } else {\n width = size;\n }\n\n return {\n width: width ? parseInt(width, 10) : null,\n height: height ? parseInt(height, 10) : null,\n };\n};\n\nexport const generateContentfulImageSources = (\n data: ContentfulRestAsset | ContentfulGqlAsset,\n srcsetSizes: string[],\n backgroundColor: string | null,\n quality: number | null,\n focusArea: ContentfulImageFocusArea | null,\n resizeBehavior: ContentfulImageResizeBehavior | null,\n): PictureSource[] => {\n const assetData = data;\n\n if (!assetData) {\n return [];\n }\n\n const sources: PictureSource[] = [];\n\n const SOURCE_TYPES = ['image/avif', 'image/webp', 'image/png', 'image/jpg'];\n\n for (const type of SOURCE_TYPES) {\n const baseUrl = isContentfulGqlAsset(assetData) ? assetData.url : assetData.fields.file.url;\n const sourceSets: string[] = [];\n const queryParams: string[] = [];\n\n // Set the format (e.g. 'fm=webp')\n queryParams.push(`fm=${type.split('/')[1]}`);\n\n if (backgroundColor) {\n queryParams.push(`bg=rgb:${backgroundColor}`);\n }\n\n if (quality !== null) {\n queryParams.push(`q=${quality}`);\n }\n\n if (focusArea) {\n queryParams.push(`f=${focusArea}`);\n }\n\n if (resizeBehavior) {\n queryParams.push(`fit=${resizeBehavior}`);\n }\n if (srcsetSizes?.length) {\n const urlWithParams = `${baseUrl}?${queryParams.join('&')}`;\n\n for (const size of srcsetSizes) {\n const { width, height } = parseContentfulImageSize(size);\n\n if (width && height) {\n sourceSets.push(`${urlWithParams}&w=${width}&h=${height} ${width}w`);\n } else if (width) {\n sourceSets.push(`${urlWithParams}&w=${width} ${width}w`);\n } else if (height) {\n sourceSets.push(`${urlWithParams}&h=${height} ${height}h`);\n }\n }\n }\n\n sources.push({\n type,\n srcset: sourceSets.length ? sourceSets.join(', ') : `${baseUrl}?${queryParams.join('&')}`,\n });\n }\n\n return sources;\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { PictureComponent, normalizePictureSizes } from '@ethlete/cdk';\nimport { NgClassType } from '@ethlete/core';\nimport { CONTENTFUL_CONFIG } from '../../constants';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulImageFocusArea, ContentfulImageResizeBehavior, ContentfulRestAsset } from '../../types';\nimport {\n generateContentfulImageSources,\n generateDefaultContentfulImageSource,\n} from './contentful-image.component.utils';\n\n@Component({\n selector: 'et-contentful-image',\n template: `\n <et-picture\n [imgClass]=\"imgClass()\"\n [hasPriority]=\"hasPriority()\"\n [figureClass]=\"figureClass()\"\n [pictureClass]=\"pictureClass()\"\n [figcaptionClass]=\"figcaptionClass()\"\n [defaultSrc]=\"_defaultSrc()\"\n [alt]=\"normalizedAsset().alt ?? null\"\n [figcaption]=\"normalizedAsset().figcaption ?? null\"\n [width]=\"normalizedAsset().width ?? null\"\n [height]=\"normalizedAsset().height ?? null\"\n [sizes]=\"sizes()\"\n [sources]=\"_sources()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [PictureComponent],\n host: {\n class: 'et-contentful-image',\n },\n})\nexport class ContentfulImageComponent {\n _contentfulConfig = inject(CONTENTFUL_CONFIG);\n\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n backgroundColor = input<string | null>(null);\n srcsetSizes = input<string[]>(this._contentfulConfig.imageOptions.srcsetSizes);\n\n quality = input(null, { transform: numberAttribute });\n focusArea = input<ContentfulImageFocusArea | null>(null);\n resizeBehavior = input<ContentfulImageResizeBehavior | null>(null);\n hasPriority = input(false, { transform: booleanAttribute });\n imgClass = input<NgClassType>(null);\n figureClass = input<NgClassType>(null);\n figcaptionClass = input<NgClassType>(null);\n pictureClass = input<NgClassType>(null);\n sizes = input<string | null, string[] | string | null>(\n normalizePictureSizes(this._contentfulConfig.imageOptions.sizes),\n {\n transform: (v) => normalizePictureSizes(v),\n },\n );\n\n normalizedAsset = computed(() => {\n const asset = this.asset();\n\n if (isContentfulGqlAsset(asset)) {\n return {\n alt: asset.title || null,\n figcaption: asset.description || null,\n width: asset.width,\n height: asset.height,\n };\n } else {\n return {\n alt: asset?.fields?.title || null,\n figcaption: asset?.fields?.description || null,\n width: asset?.fields?.file?.details?.image?.width ?? null,\n height: asset?.fields?.file?.details?.image?.height ?? null,\n };\n }\n });\n\n _sources = computed(() => {\n const asset = this.asset();\n const backgroundColor = this.backgroundColor();\n const srcsetSizes = this.srcsetSizes();\n const quality = this.quality();\n const focusArea = this.focusArea();\n const resizeBehavior = this.resizeBehavior();\n\n if (!asset) {\n return [];\n }\n\n return generateContentfulImageSources(asset, srcsetSizes, backgroundColor, quality, focusArea, resizeBehavior);\n });\n\n _defaultSrc = computed(() => {\n const asset = this.asset();\n\n return asset ? generateDefaultContentfulImageSource(asset) : null;\n });\n}\n","import { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input } from '@angular/core';\nimport { NgClassType } from '@ethlete/core';\nimport { ContentfulGqlAsset, isContentfulGqlAsset } from '../../gql';\nimport { ContentfulRestAsset } from '../../types';\n\n@Component({\n selector: 'et-contentful-video',\n template: `\n @if (data(); as data) {\n <video [ngClass]=\"videoClass()\" controls>\n <source src=\"{{ data.url }}\" type=\"{{ data.contentType }}\" />\n </video>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgClass],\n})\nexport class ContentfulVideoComponent {\n asset = input.required<ContentfulRestAsset | ContentfulGqlAsset | null | undefined>();\n videoClass = input<NgClassType>(null);\n\n data = computed(() => {\n const asset = this.asset();\n\n if (!asset) {\n return null;\n }\n\n if (isContentfulGqlAsset(asset)) {\n return {\n url: asset.url,\n contentType: asset.contentType,\n };\n }\n\n return {\n url: asset.fields.file.url,\n contentType: asset.fields.file.contentType,\n };\n });\n}\n","import { ContentfulAudioComponent } from '../components/audio';\nimport { ContentfulFileComponent } from '../components/file';\nimport { ContentfulImageComponent } from '../components/image';\nimport { ContentfulLinkComponent } from '../components/link';\nimport { ContentfulVideoComponent } from '../components/video';\nimport { ContentfulConfig } from '../types';\n\nexport const createContentfulConfig = (\n config: Partial<ContentfulConfig> | null | undefined = {},\n): ContentfulConfig => ({\n // This default config must be inline and not saved inside a const for some weird webpack reason\n ...{\n useTailwindClasses: false,\n internalHosts: [],\n components: {\n audio: ContentfulAudioComponent,\n file: ContentfulFileComponent,\n image: ContentfulImageComponent,\n video: ContentfulVideoComponent,\n link: ContentfulLinkComponent,\n },\n customComponents: {},\n imageOptions: {\n srcsetSizes: ['375w', '1280w', '1920w', '2560w'],\n sizes: [],\n backgroundColor: null,\n },\n },\n ...(config || {}),\n});\n","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport { createContentfulConfig } from '../../utils/contentful-config';\n\nconst getPrimaryDomain = (host: string): string => {\n const parts = host.split('.');\n return parts.length > 2 ? parts.slice(-2).join('.') : host;\n};\n\n@Component({\n selector: 'et-contentful-link',\n template: `\n @if (isExternal()) {\n <a\n [class]=\"linkClass()\"\n [href]=\"href()\"\n [target]=\"openInNewTab() ? '_blank' : null\"\n [rel]=\"openInNewTab() ? 'noopener noreferrer' : null\"\n >{{ text() }}</a\n >\n } @else {\n <a [class]=\"linkClass()\" [routerLink]=\"internalPath()\">{{ text() }}</a>\n }\n `,\n host: {\n style: 'display: contents',\n },\n imports: [RouterLink],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ContentfulLinkComponent {\n private readonly _document = inject(DOCUMENT);\n private readonly _config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n\n href = input.required<string>();\n text = input.required<string>();\n textClass = input('');\n\n isExternal = computed(() => {\n const href = this.href();\n const isAbsolute = href.startsWith('http://') || href.startsWith('https://') || href.startsWith('//');\n\n if (!isAbsolute) return false;\n\n try {\n const parsed = new URL(href.startsWith('//') ? `https:${href}` : href);\n const internalHosts = [this._document.location.host, ...this._config.internalHosts];\n return !internalHosts.includes(parsed.host);\n } catch {\n return true;\n }\n });\n\n openInNewTab = computed(() => {\n if (!this.isExternal()) return false;\n\n const href = this.href();\n\n try {\n const parsed = new URL(href.startsWith('//') ? `https:${href}` : href);\n const internalPrimaryDomains = [\n getPrimaryDomain(this._document.location.host),\n ...this._config.internalHosts.map(getPrimaryDomain),\n ];\n return !internalPrimaryDomains.includes(getPrimaryDomain(parsed.host));\n } catch {\n return true;\n }\n });\n\n internalPath = computed(() => {\n const href = this.href();\n\n if (!href.startsWith('http://') && !href.startsWith('https://') && !href.startsWith('//')) {\n return href;\n }\n\n try {\n const url = new URL(href.startsWith('//') ? `https:${href}` : href);\n return url.pathname + url.search + url.hash;\n } catch {\n return href;\n }\n });\n\n linkClass = computed(() => {\n const base = 'et-contentful-rich-text-default-element et-contentful-rich-text-default-a';\n const extra = this.textClass();\n\n return extra ? `${base} ${extra}` : base;\n });\n}\n","import { RuntimeError } from '@ethlete/core';\n\nexport const RICH_TEXT_RENDERER_ERRORS = {\n rich_text_undefined:\n 'The property value given at richTextPath is undefined. Use the richTextPath input to specify the path to the rich text object.',\n rich_text_wrong_type:\n 'The rich text object does not satisfy the RichTextResponse interface. It should contain a property named \"nodeType\" with the value \"document\".',\n\n asset_id_not_found: 'The asset ID was not found. This node is not supported.',\n entry_id_not_found: 'The entry ID was not found. This node is not supported.',\n\n asset_not_found: 'The asset was not found. This node is not supported.',\n entry_not_found: 'The entry was not found. This node is not supported.',\n\n custom_component_not_found: 'No custom component found for entry type. Please provide one for this type.',\n\n text_parent_not_found: 'The parent node is not found. This structure is not supported.',\n text_parent_wrong_type:\n 'The parent node neither a html element nor a custom component. This structure is not supported.',\n} as const;\n\nconst RICH_TEXT_RENDERER_ERROR_CODES = Object.keys(RICH_TEXT_RENDERER_ERRORS).reduce(\n (acc, key, index) => {\n acc[key as keyof typeof RICH_TEXT_RENDERER_ERRORS] = index;\n return acc;\n },\n {} as Record<keyof typeof RICH_TEXT_RENDERER_ERRORS, number>,\n);\n\nexport const richTextRendererError = (code: keyof typeof RICH_TEXT_RENDERER_ERRORS, data?: unknown) => {\n const message = `<et-contentful-rich-text-renderer>: ${RICH_TEXT_RENDERER_ERRORS[code]}`;\n\n throw new RuntimeError(RICH_TEXT_RENDERER_ERROR_CODES[code], message, data);\n};\n","import { BLOCKS, INLINES } from '@contentful/rich-text-types';\nimport { isObject } from '@ethlete/core';\nimport { RichTextResponse } from '../../types';\n\nexport const isRichTextRootNode = (node: unknown): node is RichTextResponse => {\n return isObject(node) && 'nodeType' in node && node['nodeType'] === 'document';\n};\n\nexport const translateContentfulNodeTypeToHtmlTag = (nodeType: 'text' | BLOCKS | INLINES) => {\n switch (nodeType) {\n case BLOCKS.HEADING_1:\n return 'h1';\n case BLOCKS.HEADING_2:\n return 'h2';\n case BLOCKS.HEADING_3:\n return 'h3';\n case BLOCKS.HEADING_4:\n return 'h4';\n case BLOCKS.HEADING_5:\n return 'h5';\n case BLOCKS.HEADING_6:\n return 'h6';\n case BLOCKS.PARAGRAPH:\n return 'p';\n case BLOCKS.UL_LIST:\n return 'ul';\n case BLOCKS.OL_LIST:\n return 'ol';\n case BLOCKS.LIST_ITEM:\n return 'li';\n case BLOCKS.HR:\n return 'hr';\n case BLOCKS.QUOTE:\n return 'blockquote';\n case BLOCKS.TABLE:\n return 'table';\n case BLOCKS.TABLE_ROW:\n return 'tr';\n case BLOCKS.TABLE_CELL:\n return 'td';\n case BLOCKS.TABLE_HEADER_CELL:\n return 'th';\n case BLOCKS.EMBEDDED_ASSET:\n return 'div';\n\n case INLINES.ENTRY_HYPERLINK:\n return 'a';\n case INLINES.ASSET_HYPERLINK:\n return 'a';\n\n case 'text':\n return 'span';\n\n // Will be ignored by the renderer\n case 'document':\n return 'div';\n\n case BLOCKS.EMBEDDED_ENTRY:\n return 'div';\n case INLINES.EMBEDDED_ENTRY:\n return 'div';\n\n default:\n return 'div';\n }\n};\n","import { ComponentType } from '@angular/cdk/portal';\nimport { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ComponentRef,\n ElementRef,\n EmbeddedViewRef,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n isDevMode,\n reflectComponentType,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { BLOCKS, Block, INLINES, Inline, Mark, Text } from '@contentful/rich-text-types';\nimport { getObjectProperty, injectRenderer, isObject } from '@ethlete/core';\nimport { pairwise, startWith, tap } from 'rxjs';\nimport { CONTENTFUL_CONFIG } from '../../constants/contentful.constants';\nimport {\n ContentfulCollection,\n ContentfulEntry,\n ContentfulEntryLinkItem,\n ContentfulRestAsset,\n RichTextResponse,\n} from '../../types';\nimport { createContentfulConfig } from '../../utils/contentful-config';\nimport { richTextRendererError } from './rich-text-renderer.errors';\nimport { isRichTextRootNode, translateContentfulNodeTypeToHtmlTag } from './rich-text-renderer.util';\n\nexport const RENDER_COMMAND_TYPE = {\n HTML_OPEN: 0,\n HTML_CLOSE: 1,\n TEXT: 2,\n COMPONENT: 3,\n} as const;\n\nexport const RENDER_COMMAND_POSITION = {\n TYPE: 0,\n NESTING_LEVEL: 1,\n DOM_POSITION: 2,\n INDEX: 3,\n} as const;\n\nexport const HTML_OPEN_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TAG_NAME: 5,\n ELEMENT_ID: 6,\n} as const;\n\nexport const HTML_CLOSE_RENDER_COMMAND_POSITION = {\n TAG_NAME: 4,\n ELEMENT_ID: 5,\n} as const;\n\nexport const TEXT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n TEXT: 5,\n TEXT_ID: 6,\n} as const;\n\nexport const COMPONENT_RENDER_COMMAND_POSITION = {\n ATTRIBUTES: 4,\n COMPONENT: 5,\n INPUTS: 6,\n COMPONENT_ID: 7,\n} as const;\n\ntype HtmlOpenRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_OPEN,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n tagName: keyof HTMLElementTagNameMap,\n textId: string,\n];\n\ntype HtmlCloseRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel: number,\n domPosition: number,\n index: number,\n tagName: keyof HTMLElementTagNameMap,\n elementId: string,\n];\n\ntype TextRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.TEXT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n text: string,\n elementId: string,\n];\n\ntype ComponentRenderCommand = [\n type: typeof RENDER_COMMAND_TYPE.COMPONENT,\n nestingLevel: number,\n domPosition: number,\n index: number,\n attributes: Record<string, string>,\n component: ComponentType<unknown>,\n inputs: Record<string, unknown>,\n componentId: string,\n];\n\ntype RenderCommand = HtmlOpenRenderCommand | HtmlCloseRenderCommand | TextRenderCommand | ComponentRenderCommand;\n\nexport const RENDER_INSTRUCTION_POSITION = {\n TYPE: 0,\n COMMAND: 1,\n} as const;\n\nexport const RENDER_INSTRUCTION_TYPE = {\n CREATE: 0,\n UPDATE: 1,\n DELETE: 2,\n MOVE: 3,\n} as const;\n\ntype RenderInstructionTypeValue = (typeof RENDER_INSTRUCTION_TYPE)[keyof typeof RENDER_INSTRUCTION_TYPE];\n\ntype RenderInstruction = [RenderInstructionTypeValue, RenderCommand];\n\nconst MARK_TAILWIND_MAP: Record<string, string> = {\n bold: 'font-bold',\n italic: 'italic',\n underline: 'underline',\n code: 'font-mono',\n};\n\nexport const marksToClass = (marks: Mark[]) => {\n const classes: string[] = [];\n\n for (const mark of marks) {\n let klass = MARK_TAILWIND_MAP[mark.type];\n\n if (!klass) {\n console.warn(`No class found for mark type! Falling back to \"${mark.type}\".`, mark);\n\n klass = mark.type;\n }\n\n classes.push(klass);\n }\n\n return classes.join(' ');\n};\n\nexport const isHtmlOpenRenderCommand = (command: RenderCommand): command is HtmlOpenRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN;\n};\n\nexport const isHtmlCloseRenderCommand = (command: RenderCommand): command is HtmlCloseRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_CLOSE;\n};\n\nexport const isTextRenderCommand = (command: RenderCommand): command is TextRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.TEXT;\n};\n\nexport const isComponentRenderCommand = (command: RenderCommand): command is ComponentRenderCommand => {\n return command[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.COMPONENT;\n};\n\nexport const getRenderCommandId = (command: RenderCommand) => {\n if (isHtmlOpenRenderCommand(command)) {\n return command[HTML_OPEN_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isHtmlCloseRenderCommand(command)) {\n return command[HTML_CLOSE_RENDER_COMMAND_POSITION.ELEMENT_ID];\n } else if (isTextRenderCommand(command)) {\n return command[TEXT_RENDER_COMMAND_POSITION.TEXT_ID];\n } else {\n return command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_ID];\n }\n};\n\nconst CLASS_ATTR = 'class';\nconst DEFAULT_COMPONENT_TYPES = {\n IMAGE: '$$$_et-image',\n VIDEO: '$$$_et-video',\n AUDIO: '$$$_et-audio',\n FILE: '$$$_et-file',\n LINK: '$$$_et-link',\n};\n\ntype ExecutedCommandCacheItemBase = {\n element: HTMLElement;\n};\n\ntype ExecutedComponentCommandCacheItem = {\n command: ComponentRenderCommand;\n componentRef: ComponentRef<unknown>;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedHtmlCommandCacheItem = {\n command: HtmlOpenRenderCommand | HtmlCloseRenderCommand;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedTextCommandCacheItem = {\n command: TextRenderCommand;\n textNode: unknown;\n} & ExecutedCommandCacheItemBase;\n\ntype ExecutedCommandCacheItem =\n | ExecutedComponentCommandCacheItem\n | ExecutedHtmlCommandCacheItem\n | ExecutedTextCommandCacheItem;\n\nexport const isExecutedComponentCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedComponentCommandCacheItem => {\n return isComponentRenderCommand(cache.command);\n};\n\nexport const isExecutedHtmlOrTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedHtmlCommandCacheItem => {\n return isHtmlCloseRenderCommand(cache.command) || isHtmlOpenRenderCommand(cache.command);\n};\n\nexport const isExecutedTextCommandCacheItem = (\n cache: ExecutedCommandCacheItem,\n): cache is ExecutedTextCommandCacheItem => {\n return isTextRenderCommand(cache.command);\n};\n\nexport const ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID = '$$$_et-contentful-any-entry-content-type-sys-id';\n\nexport type ContentfulIncludeMap = {\n /**\n * Select an entry by its ID and content type ID.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntry: <T extends { [key: string]: any }>(id: string, contentTypeId: string) => ContentfulEntry<T> | null;\n\n /**\n * Select multiple entries by their IDs and content type ID.\n * If an entry is not found, it will be omitted from the result.\n *\n * The content type ID can be found inside the entry -> sys -> contentType -> sys -> id property.\n *\n * You can provide the `ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID` constant to match any entry sys ID.\n * But be aware that this will return the entry as is without any type checking.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getEntries: <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => ContentfulEntry<T>[];\n\n /**\n * Select an asset by its ID.\n */\n getAsset: (id: string) => ContentfulRestAsset | null;\n\n /**\n * Select multiple assets by their IDs. If an asset is not found, it will be omitted from the result.\n */\n getAssets: (ids: string[]) => ContentfulRestAsset[];\n};\n\nexport type CreateContentfulIncludeMapConfig = {\n /** The entries that should be present inside the map */\n entries: ContentfulEntry[];\n\n /** The assets that should be present inside the map */\n assets: ContentfulRestAsset[];\n};\n\n/**\n * Create a contentful include map using the provided entries and assets.\n */\nexport const createContentfulIncludeMap = (config: CreateContentfulIncludeMapConfig): ContentfulIncludeMap => {\n const { entries, assets } = config;\n\n const assetMap = new Map(assets.map((asset) => [asset.sys.id, asset]));\n const entryMap = new Map(entries.map((entry) => [entry.sys.id, entry]));\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntry = <T extends { [key: string]: any }>(id: string, contentTypeId: string) => {\n const entry = entryMap.get(id);\n\n if (!entry) {\n if (isDevMode()) {\n console.warn('Entry not found! Will return null. Is the include query param to low?', { id, entryMap });\n }\n\n return null;\n }\n\n if (contentTypeId === ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID) {\n return entry as ContentfulEntry<T>;\n }\n\n if (entry.sys.contentType.sys.id !== contentTypeId) {\n if (isDevMode()) {\n console.warn('Entry sys ID does not match the provided sys ID! Will return null.', {\n entry,\n sysId: contentTypeId,\n });\n }\n\n return null;\n }\n\n return entry as ContentfulEntry<T>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const getEntries = <T extends { [key: string]: any }>(\n ids: string[] | ContentfulEntryLinkItem[],\n contentTypeId: string,\n ) => {\n const entries = ids\n .map((id) => (typeof id === 'string' ? id : id.sys.id))\n .map((id) => getEntry<T>(id, contentTypeId))\n .filter((entry): entry is ContentfulEntry<T> => entry !== null);\n\n return entries;\n };\n\n const getAsset = (id: string) => {\n return assetMap.get(id) ?? null;\n };\n\n const getAssets = (ids: string[]) => {\n return ids.map((id) => getAsset(id)).filter((asset): asset is ContentfulRestAsset => asset !== null);\n };\n\n return {\n getEntry,\n getEntries,\n getAsset,\n getAssets,\n };\n};\n\n@Component({\n selector: 'et-contentful-rich-text-renderer',\n template: ``,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'et-contentful-rich-text-renderer',\n },\n})\nexport class ContentfulRichTextRendererComponent {\n _viewContainerRef = inject(ViewContainerRef);\n _renderer = injectRenderer();\n _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n _document = inject(DOCUMENT);\n _config = inject(CONTENTFUL_CONFIG, { optional: true }) ?? createContentfulConfig();\n\n /**\n * A cache for all executed commands that are not deleted.\n * This is used to keep track of all rendered elements and components.\n * The key is the render command element ID.\n */\n _executedCommandsCache = new Map<string, ExecutedCommandCacheItem>();\n\n /**\n * The contentful response gotten via their REST api.\n * @see https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/entries/entries-collection\n */\n content = input.required<ContentfulCollection | null | undefined>();\n\n /**\n * The path to where the rich text field is inside the contentful response. Dot and array notation is allowed.\n * @example \"items[0].fields.html\"\n */\n richTextPath = input.required<string>();\n\n /**\n * A map of all includes in the contentful response.\n * This is useful for looking up assets and entries that are referenced in the rich text without having to use loops.\n */\n contentIncludesMap = computed<ContentfulIncludeMap>(() => {\n const content = this.content();\n const assets = content?.includes.Asset;\n const entries = content?.includes.Entry;\n\n return createContentfulIncludeMap({ assets: assets ?? [], entries: entries ?? [] });\n });\n\n /**\n * The rich text data that should be rendered.\n */\n richTextData = computed(() => {\n const content = this.content();\n const richTextPath = this.richTextPath();\n\n if (!content) {\n return null;\n }\n\n const richText = getObjectProperty(content as unknown as Record<string, unknown>, richTextPath);\n\n if (!isObject(richText)) {\n throw richTextRendererError('rich_text_undefined', { content, richTextPath });\n }\n\n if (!isRichTextRootNode(richText)) {\n throw richTextRendererError('rich_text_wrong_type', { content, richTextPath });\n }\n\n return richText as RichTextResponse;\n });\n\n renderCommands = computed(() => {\n const richTextData = this.richTextData();\n\n if (!richTextData) {\n return [];\n }\n\n return this._createRenderCommands(richTextData);\n });\n\n renderCommandHistory = toSignal(\n toObservable(this.renderCommands).pipe(startWith([] as RenderCommand[]), pairwise()),\n { initialValue: [[], []] },\n );\n\n previousRenderCommandMap = computed(() => {\n const [prevCommands] = this.renderCommandHistory();\n\n const map = new Map<string | number, RenderCommand>();\n\n for (const command of prevCommands) {\n map.set(getRenderCommandId(command), command);\n }\n\n return map;\n });\n\n renderInstructions = computed(() => {\n const commands = this.renderCommands();\n const previousRenderCommandMap = new Map(this.previousRenderCommandMap());\n\n const instructions: RenderInstruction[] = [];\n\n // remove deleted components as well as all other elements\n for (const [, command] of previousRenderCommandMap) {\n if (isComponentRenderCommand(command)) {\n // keep the component around if it's still in the new commands\n if (commands.some((c) => getRenderCommandId(c) === getRenderCommandId(command))) {\n continue;\n }\n }\n\n instructions.push([RENDER_INSTRUCTION_TYPE.DELETE, command]);\n\n // remove from map to mark as used\n previousRenderCommandMap.delete(getRenderCommandId(command));\n }\n\n // Find the indexes of the commands remaining in the previousRenderCommandMap in the new commands array.\n const lastComponentIndexes: { newIndex: number; prevIndex: number; command: RenderCommand }[] = [];\n for (const [id, command] of previousRenderCommandMap) {\n const index = commands.findIndex((c) => getRenderCommandId(c) === id);\n const newCommand = commands[index]!;\n\n if (index === -1) {\n throw new Error('Command not found!');\n }\n\n lastComponentIndexes.push({\n newIndex: index,\n prevIndex: command[RENDER_COMMAND_POSITION.INDEX],\n command: newCommand,\n });\n }\n\n lastComponentIndexes.sort((a, b) => a.newIndex - b.newIndex);\n\n // check if the prevIndex are in order ascending\n // for indexes that are not in order, create a move instruction\n // for indexes that are in order, create an update instruction\n let moveCheckIndex = 0;\n while (moveCheckIndex < lastComponentIndexes.length - 1) {\n const moveCurr = lastComponentIndexes[moveCheckIndex];\n const moveNext = lastComponentIndexes[moveCheckIndex + 1];\n\n if (!moveCurr || !moveNext) {\n break;\n }\n\n if (moveCurr.prevIndex > moveNext.prevIndex) {\n lastComponentIndexes.splice(moveCheckIndex + 1, 1);\n instructions.push([RENDER_INSTRUCTION_TYPE.MOVE, moveNext.command]);\n } else {\n instructions.push([RENDER_INSTRUCTION_TYPE.UPDATE, moveNext.command]);\n moveCheckIndex++;\n }\n }\n\n for (const command of commands) {\n const id = getRenderCommandId(command);\n\n if (isComponentRenderCommand(command)) {\n const previousCommand = previousRenderCommandMap.get(id);\n\n if (!previousCommand) {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n } else {\n // create\n instructions.push([RENDER_INSTRUCTION_TYPE.CREATE, command]);\n }\n }\n\n return instructions;\n });\n\n constructor() {\n toObservable(this.renderInstructions)\n .pipe(\n takeUntilDestroyed(),\n tap((instructions) => {\n this._execInstructions(instructions);\n }),\n )\n .subscribe();\n }\n\n private _createRenderCommands(richTextData: RichTextResponse) {\n /** List of all render commands */\n const rootCommands: RenderCommand[] = [];\n\n /** Counter for generating unique html element IDs. */\n let elementOpenId = 0;\n\n /** Counter for generating unique html element IDs. */\n let elementCloseId = 0;\n\n /** Counter for generating unique component IDs. */\n const componentIdMap = new Map<string, number>();\n\n /** The nesting level of the current node. */\n let nestingLevel = 0;\n\n /** The position (index) of the current node inside the parent node. */\n let domPosition = 0;\n\n let textId = 0;\n\n let commandIndex = 0;\n\n const traverse = (node: Block | Inline | Text) => {\n switch (node.nodeType) {\n case 'text': {\n // Render media\n const type = RENDER_COMMAND_TYPE.TEXT;\n const text = node.value;\n\n if (!text) break;\n\n const attributes: Record<string, string> = {\n class: 'et-contentful-rich-text-default-element et-contentful-rich-text-default-span',\n };\n\n if (node.marks.length) {\n const markClasses = marksToClass(node.marks);\n\n if (CLASS_ATTR in attributes) {\n attributes[CLASS_ATTR] += ` ${markClasses}`;\n } else {\n attributes[CLASS_ATTR] = markClasses;\n }\n }\n\n const id = 't' + textId++;\n\n const command: TextRenderCommand = [type, nestingLevel, domPosition, commandIndex++, attributes, text, id];\n\n rootCommands.push(command);\n domPosition++;\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ASSET: {\n // Render media\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const assetId = node.data['target']?.sys?.id;\n\n if (!assetId) {\n throw richTextRendererError('asset_id_not_found', { node });\n }\n\n const asset = this.contentIncludesMap().getAsset(assetId);\n\n if (!asset) {\n throw richTextRendererError('asset_not_found', { assetId, node });\n }\n\n const contentType = asset.fields.file.contentType;\n const assetComponents = this._config.components;\n\n // Every property inside the asset will be null if no file was provided for a translation.\n // In this case, we can assume that the asset is missing due to user error.\n const isMissing = !contentType && !asset.fields.file.url;\n\n if (isMissing) {\n if (isDevMode()) {\n console.warn(\n 'Asset is missing file data! Asset will be skipped. Did you forget to upload a file for the current translation in Contentful?',\n { asset },\n );\n }\n\n break;\n }\n\n const isImage = contentType?.startsWith('image/');\n const isVideo = contentType?.startsWith('video/');\n const isAudio = contentType?.startsWith('audio/');\n\n const component = isImage\n ? assetComponents.image\n : isVideo\n ? assetComponents.video\n : isAudio\n ? assetComponents.audio\n : assetComponents.file;\n\n const componentType = isImage\n ? DEFAULT_COMPONENT_TYPES.IMAGE\n : isVideo\n ? DEFAULT_COMPONENT_TYPES.VIDEO\n : isAudio\n ? DEFAULT_COMPONENT_TYPES.AUDIO\n : DEFAULT_COMPONENT_TYPES.FILE;\n\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const attributes = {};\n\n const inputs = {\n asset,\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n case INLINES.HYPERLINK: {\n const uri = (node.data['uri'] as string) ?? '';\n\n // Collect all text and marks from children (hyperlink children are text nodes)\n let linkText = '';\n const linkMarks: Mark[] = [];\n\n for (const child of node.content) {\n if (child.nodeType === 'text') {\n linkText += child.value;\n linkMarks.push(...child.marks);\n }\n }\n\n const textClass = linkMarks.length ? marksToClass(linkMarks) : '';\n\n let linkComponentId = componentIdMap.get(DEFAULT_COMPONENT_TYPES.LINK) ?? -1;\n const linkId = DEFAULT_COMPONENT_TYPES.LINK + ++linkComponentId;\n componentIdMap.set(DEFAULT_COMPONENT_TYPES.LINK, linkComponentId);\n\n const linkCommand: ComponentRenderCommand = [\n RENDER_COMMAND_TYPE.COMPONENT,\n nestingLevel,\n domPosition,\n commandIndex++,\n {},\n this._config.components.link,\n { href: uri, text: linkText, textClass },\n linkId,\n ];\n\n rootCommands.push(linkCommand);\n domPosition++;\n\n break;\n }\n\n case BLOCKS.EMBEDDED_ENTRY:\n case INLINES.EMBEDDED_ENTRY: {\n // Render component\n const type = RENDER_COMMAND_TYPE.COMPONENT;\n const entryId = node.data['target']?.sys?.id;\n\n if (!entryId) {\n throw richTextRendererError('entry_id_not_found', { node });\n }\n\n const entry = this.contentIncludesMap().getEntry(entryId, ET_CONTENTFUL_ANY_ENTRY_CONTENT_TYPE_SYS_ID);\n\n if (!entry) {\n throw richTextRendererError('entry_not_found', { entryId, node });\n }\n\n const componentType = entry.sys.contentType.sys.id;\n\n const component = this._config.customComponents[componentType];\n\n if (!component) {\n throw richTextRendererError('custom_component_not_found', {\n componentType,\n customComponents: this._config.customComponents,\n entry,\n });\n }\n\n const attributes = {};\n let componentId = componentIdMap.get(componentType) ?? -1;\n const id = componentType + ++componentId;\n componentIdMap.set(componentType, componentId);\n\n const inputs = {\n fields: entry.fields,\n metadata: entry.metadata,\n sys: entry.sys,\n includes: this.contentIncludesMap(),\n };\n\n const command: ComponentRenderCommand = [\n type,\n nestingLevel,\n domPosition,\n commandIndex++,\n attributes,\n component,\n inputs,\n id,\n ];\n\n rootCommands.push(command);\n\n domPosition++;\n\n break;\n }\n\n default: {\n const type = RENDER_COMMAND_TYPE.HTML_OPEN;\n const tag = translateContentfulNodeTypeToHtmlTag(node.nodeType);\n const attributes: Record<string, string> = {\n class: `et-contentful-rich-text-default-element et-contentful-rich-text-default-${tag}`,\n };\n const id = 'e-o' + elementOpenId++;\n\n const command: HtmlOpenRenderCommand = [type, nestingLevel, domPosition, commandIndex++, attributes, tag, id];\n\n rootCommands.push(command);\n\n const domPositionAtThisLevel = domPosition;\n // Normal html elements can have children\n for (const child of node.content) {\n domPosition = 0;\n nestingLevel++;\n traverse(child);\n nestingLevel--;\n domPosition = domPositionAtThisLevel;\n }\n\n const lastCommand = rootCommands[rootCommands.length - 1];\n\n if (\n lastCommand?.[RENDER_COMMAND_POSITION.TYPE] === RENDER_COMMAND_TYPE.HTML_OPEN &&\n lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'td' &&\n lastCommand[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME] !== 'hr'\n ) {\n // If the last command is an open command, we can remove it since it's empty\n rootCommands.pop();\n elementOpenId--;\n commandIndex--;\n } else {\n const closeId = 'e-c' + elementCloseId++;\n\n const closeCommand: HtmlCloseRenderCommand = [\n RENDER_COMMAND_TYPE.HTML_CLOSE,\n nestingLevel,\n domPosition,\n commandIndex++,\n tag,\n closeId,\n ];\n rootCommands.push(closeCommand);\n\n domPosition++;\n }\n\n break;\n }\n }\n };\n\n for (const node of richTextData.content) {\n traverse(node);\n }\n\n return rootCommands;\n }\n\n private _execInstructions(instructions: RenderInstruction[]) {\n for (const instruction of instructions) {\n const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n const command = instruction[RENDER_INSTRUCTION_POSITION.COMMAND];\n\n switch (type) {\n case RENDER_INSTRUCTION_TYPE.CREATE:\n this._runCreateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.UPDATE:\n this._runUpdateInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.MOVE:\n this._runMoveInstruction(command);\n break;\n case RENDER_INSTRUCTION_TYPE.DELETE:\n this._runDeleteInstruction(command);\n break;\n }\n }\n }\n\n private _runCreateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const parentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n if (isComponentRenderCommand(command)) {\n const componentRef = this._viewContainerRef.createComponent(command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT]);\n\n this._updateComponentInputs(command, componentRef);\n\n const rootNode = this._getComponentRootNode(componentRef);\n\n this._renderInsertOrAppend(rootNode, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n componentRef,\n element: rootNode,\n });\n } else if (isTextRenderCommand(command)) {\n const text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n const span = this._renderer.createElement('span');\n const attributes = command[TEXT_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const textSplitInLineBreaks = text.split('\\n').filter((t) => t.trim().length > 0);\n\n const textNodes: unknown[] = [];\n\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(span, key, value);\n }\n\n if (text.startsWith('\\n')) {\n const brNode = this._renderer.createElement('br');\n this._renderer.appendChild(parentElement, brNode);\n }\n\n for (const [textPartIndex, textPart] of textSplitInLineBreaks.entries()) {\n if (textPartIndex > 0) {\n const brNode = this._renderer.createElement('br');\n this._renderer.appendChild(span, brNode);\n }\n\n const textNode = this._renderer.createText(textPart);\n\n this._renderer.appendChild(span, textNode);\n\n textNodes.push(textNode);\n }\n\n this._renderInsertOrAppend(span, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element: span,\n textNode: textNodes,\n });\n } else if (isHtmlOpenRenderCommand(command)) {\n const tag = command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME];\n const attributes = command[HTML_OPEN_RENDER_COMMAND_POSITION.ATTRIBUTES];\n const element = this._renderer.createElement(tag);\n\n for (const [key, value] of Object.entries(attributes)) {\n this._renderer.setAttribute(element, key, value);\n }\n\n this._renderInsertOrAppend(element, parentElement, nextElement);\n\n this._executedCommandsCache.set(id, {\n command,\n element,\n });\n }\n }\n\n private _runUpdateInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n this._updateComponentInputs(command, componentRef);\n }\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n\n private _runMoveInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n const componentRef = cached.componentRef;\n\n if (!componentRef) {\n throw new Error('Component ref not found!');\n }\n\n const rootNode = cached.element;\n const oldParentElement = cached.element.parentElement;\n\n if (oldParentElement) {\n this._renderer.removeChild(oldParentElement, rootNode);\n }\n\n const newParentElement = this._findParent(command);\n const nextElement = this._findFollowingElement(command);\n\n this._renderInsertOrAppend(rootNode, newParentElement, nextElement);\n\n this._updateComponentInputs(command, componentRef);\n\n this._executedCommandsCache.set(id, {\n ...cached,\n command: command as any,\n });\n }\n }\n\n private _runDeleteInstruction(command: RenderCommand) {\n const id = getRenderCommandId(command);\n const cached = this._executedCommandsCache.get(id);\n\n if (!cached) {\n if (isHtmlCloseRenderCommand(command)) {\n return;\n }\n\n throw new Error('Cached command not found!');\n }\n\n if (isComponentRenderCommand(command)) {\n if (!isExecutedComponentCommandCacheItem(cached)) {\n throw new Error('Cached command is not a component command!');\n }\n\n cached.componentRef?.destroy();\n } else if (isTextRenderCommand(command)) {\n if (cached.element?.parentElement) {\n this._renderer.removeChild(cached.element.parentElement, cached.element);\n }\n } else if (isHtmlOpenRenderCommand(command)) {\n if (cached.element?.parentElement) {\n this._renderer.removeChild(cached.element.parentElement, cached.element);\n }\n }\n\n this._executedCommandsCache.delete(id);\n }\n\n private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n }\n\n private _updateComponentInputs(command: ComponentRenderCommand, componentRef: ComponentRef<any>) {\n const inputMeta = reflectComponentType(command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT])?.inputs ?? [];\n const inputsByProp = new Map(inputMeta.map((i) => [i.propName, i.templateName]));\n\n for (const [key, value] of Object.entries(command[COMPONENT_RENDER_COMMAND_POSITION.INPUTS])) {\n const publicName = inputsByProp.get(key);\n\n if (publicName === undefined) continue;\n\n componentRef.setInput(publicName, value);\n }\n }\n\n private _findParent(command: RenderCommand) {\n const hostElement = this._elementRef.nativeElement;\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n let parentElement: HTMLElement | undefined;\n\n if (nestingLevel === 0) {\n parentElement = hostElement;\n } else {\n // Reverse search all render commands beginning from the current one using a for loop.\n // The parent is found when the command's nesting level ist the same as the current nesting level minus 1.\n // If the parent is not found, throw an error.\n const allCommands = this.renderCommands();\n const currentCommandIndex = command[RENDER_COMMAND_POSITION.INDEX];\n\n let parentCommand: RenderCommand | null = null;\n\n for (let i = currentCommandIndex - 1; i >= 0; i--) {\n const cmd = allCommands[i];\n\n if (!cmd) {\n throw new Error('Command not found!');\n }\n\n if (cmd[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel - 1 && isHtmlOpenRenderCommand(cmd)) {\n parentCommand = cmd;\n break;\n }\n }\n\n if (!parentCommand) {\n throw new Error('Parent command not found!');\n }\n\n parentElement = this._executedCommandsCache.get(getRenderCommandId(parentCommand))?.element;\n }\n\n if (!parentElement) {\n throw new Error('Parent element not found!');\n }\n\n return parentElement;\n }\n\n private _findFollowingElement(command: RenderCommand) {\n const cacheArray = Array.from(this._executedCommandsCache.values());\n let nextElement: HTMLElement | undefined = undefined;\n\n const domPosition = command[RENDER_COMMAND_POSITION.DOM_POSITION];\n const nestingLevel = command[RENDER_COMMAND_POSITION.NESTING_LEVEL];\n const type = command[RENDER_COMMAND_POSITION.TYPE];\n\n // Try to find an already rendered element with a domPosition that is greater than the current domPosition. If there are multiple, use the one with the smallest domPosition.\n // If it does not exist, use .appendChild to simply append the element to the end of the parent element.\n // If it does exist, use .insertBefore to insert the element before the found element.\n for (const cached of cacheArray) {\n if (\n cached.command[RENDER_COMMAND_POSITION.DOM_POSITION] > domPosition &&\n cached.command[RENDER_COMMAND_POSITION.NESTING_LEVEL] === nestingLevel &&\n // Make sure the element does not find itself\n cached.command[RENDER_COMMAND_POSITION.TYPE] !== type\n ) {\n nextElement = cached.element;\n break;\n }\n }\n\n return nextElement;\n }\n\n private _renderInsertOrAppend(\n nodeToRender: HTMLElement,\n parentElement: HTMLElement,\n nextElement: HTMLElement | undefined,\n ) {\n if (nextElement) {\n this._renderer.insertBefore(parentElement, nodeToRender, nextElement);\n } else {\n this._renderer.appendChild(parentElement, nodeToRender);\n }\n }\n}\n\n// const stringifyRenderCommand = (command: RenderCommand) => {\n// const nestAttr = `nest=\"${command[RENDER_COMMAND_POSITION.NESTING_LEVEL]}\"`;\n// const domAttr = `dom=\"${command[RENDER_COMMAND_POSITION.DOM_POSITION]}\"`;\n\n// if (isHtmlOpenRenderCommand(command)) {\n// return `<${command[HTML_OPEN_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr} _id=\"${command[HTML_OPEN_RENDER_COMMAND_POSITION.ELEMENT_ID]}\" _index=\"${command[RENDER_COMMAND_POSITION.INDEX]}\">`;\n// } else if (isHtmlCloseRenderCommand(command)) {\n// return `</${command[HTML_CLOSE_RENDER_COMMAND_POSITION.TAG_NAME]} ${nestAttr} ${domAttr}>`;\n// } else if (isTextRenderCommand(command)) {\n// let text = command[TEXT_RENDER_COMMAND_POSITION.TEXT];\n// const brStart = text.startsWith('\\n') ? '<br/>' : '';\n// text = brStart ? text.slice(1) : text;\n\n// return [\n// ...(brStart ? [brStart] : []),\n// `<span ${nestAttr} ${domAttr} _index=\"${command[RENDER_COMMAND_POSITION.INDEX]}\">`,\n// text.replace(/\\n/g, ' <br/> '),\n// '</span>',\n// ];\n// } else if (isComponentRenderCommand(command)) {\n// const selector = command[COMPONENT_RENDER_COMMAND_POSITION.COMPONENT_ID];\n// return [`<${selector} ${nestAttr} ${domAttr}>`, `</${selector}>`];\n// } else {\n// return 'UNKNOWN';\n// }\n// };\n\n// const formatHTMLStringArray = (html: string[]) => {\n// const result: string[] = [];\n// let indent = 0;\n\n// for (const tag of html) {\n// if (tag.startsWith('</')) {\n// indent--;\n// }\n\n// result.push(' '.repeat(indent * 2) + tag);\n\n// if (tag.startsWith('<') && !tag.startsWith('</') && !tag.startsWith('<br')) {\n// indent++;\n// }\n// }\n\n// return result.join('\\n');\n// };\n\n// const debugVisualizeRenderCommands = (commands: RenderCommand[]) => {\n// const debug = commands.map((command) => stringifyRenderCommand(command)).flat();\n\n// const prettified = formatHTMLStringArray(debug);\n\n// return prettified;\n// };\n\n// const stringifyRenderInstruction = (instruction: RenderInstruction) => {\n// const type = instruction[RENDER_INSTRUCTION_POSITION.TYPE];\n// const translatedType = Object.entries(RENDER_INSTRUCTION_TYPE).find(([, value]) => value === type)?.[0];\n\n// const command = stringifyRenderCommand(instruction[RENDER_INSTRUCTION_POSITION.COMMAND]);\n\n// return `${translatedType}: ${command}`;\n// };\n","import { ContentfulAudioComponent } from './components/audio';\nimport { ContentfulFileComponent } from './components/file';\nimport { ContentfulImageComponent } from './components/image';\nimport { ContentfulRichTextRendererComponent } from './components/rich-text-renderer';\nimport { ContentfulVideoComponent } from './components/video';\n\nexport const ContentfulImports = [\n ContentfulAudioComponent,\n ContentfulFileComponent,\n ContentfulImageComponent,\n ContentfulVideoComponent,\n ContentfulRichTextRendererComponent,\n] as const;\n","import { CONTENTFUL_CONFIG } from '../constants';\nimport { ContentfulConfig, ContentfulEntry } from '../types';\nimport { createContentfulConfig } from './contentful-config';\n\nexport const provideContentfulConfig = (contentfulConfig: Partial<ContentfulConfig> | null | undefined = {}) => {\n return { provide: CONTENTFUL_CONFIG, useValue: createContentfulConfig(contentfulConfig) };\n};\n\nexport const isContentfulEntryType = <T extends ContentfulEntry>(entry: ContentfulEntry, type: string): entry is T =>\n entry.sys.contentType.sys.id === type;\n","export * from './lib/components/audio';\nexport * from './lib/components/file';\nexport * from './lib/components/image';\nexport * from './lib/components/link';\nexport * from './lib/components/rich-text-renderer';\nexport * from './lib/components/video';\nexport * from './lib/constants';\nexport * from './lib/contentful.imports';\nexport * from './lib/gql';\nexport * from './lib/types';\nexport * from './lib/utils';\n\n// Burst cache\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|