imagetools-core
Version:
1 lines • 43.9 kB
Source Map (JSON)
{"version":3,"file":"index.js","sources":["../src/lib/metadata.ts","../src/transforms/background.ts","../src/transforms/blur.ts","../src/transforms/effort.ts","../src/transforms/fit.ts","../src/transforms/flatten.ts","../src/transforms/flip.ts","../src/transforms/flop.ts","../src/transforms/quality.ts","../src/transforms/progressive.ts","../src/transforms/lossless.ts","../src/transforms/format.ts","../src/transforms/grayscale.ts","../src/transforms/hsb.ts","../src/transforms/invert.ts","../src/transforms/kernel.ts","../src/transforms/median.ts","../src/transforms/normalize.ts","../src/transforms/position.ts","../src/transforms/resize.ts","../src/transforms/rotate.ts","../src/transforms/tint.ts","../src/builtins.ts","../src/output-formats.ts","../src/lib/parse-url.ts","../src/lib/resolve-configs.ts","../src/lib/logger.ts","../src/lib/generate-transforms.ts","../src/lib/apply-transforms.ts"],"sourcesContent":["import type { Sharp } from 'sharp'\nimport type { ImageMetadata } from '../types.js'\n\nexport const METADATA = Symbol('image metadata')\n\ndeclare module 'sharp' {\n interface Sharp {\n [METADATA]: ImageMetadata\n }\n}\n\nexport function setMetadata(image: Sharp, key: string, value: unknown) {\n if (image[METADATA]) {\n image[METADATA][key] = value\n }\n}\n\nexport function getMetadata(image: Sharp, key: string) {\n return image[METADATA]?.[key]\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface BackgroundOptions {\n background: string\n}\n\nexport const getBackground: TransformOption<BackgroundOptions, string> = ({ background }, image) => {\n if (typeof background !== 'string' || !background.length) return\n\n image[METADATA].backgroundDirective = background\n\n return background\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface BlurOptions {\n blur: string\n}\n\nexport const blur: TransformFactory<BlurOptions> = (config) => {\n let blur: number | boolean | undefined = undefined\n\n blur = config.blur ? parseFloat(config.blur) : undefined\n blur ||= config.blur === 'true'\n blur ||= config.blur === ''\n\n if (!blur) return\n\n return function blurTransform(image) {\n image[METADATA].blur = blur\n\n return image.blur(blur)\n }\n}\n","import type { TransformOption } from '../types.js'\nimport { getMetadata, setMetadata } from '../lib/metadata.js'\n\nexport interface EffortOptions {\n effort: string\n}\n\nconst FORMAT_TO_EFFORT_RANGE: Record<string, [number, number]> = {\n avif: [0, 9],\n gif: [1, 10],\n heif: [0, 9],\n jxl: [3, 9],\n png: [1, 10],\n webp: [0, 6]\n}\n\nfunction parseEffort(effort: string, format: string) {\n if (effort === 'min') {\n return FORMAT_TO_EFFORT_RANGE[format]?.[0]\n } else if (effort === 'max') {\n return FORMAT_TO_EFFORT_RANGE[format]?.[1]\n }\n return parseInt(effort)\n}\n\nexport const getEffort: TransformOption<EffortOptions, number> = ({ effort: _effort }, image) => {\n if (!_effort) return\n\n const format = (getMetadata(image, 'format') ?? '') as string\n const effort = parseEffort(_effort, format)\n if (!Number.isInteger(effort)) return\n\n setMetadata(image, 'effort', effort)\n\n return effort\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport const fitValues = ['cover', 'contain', 'fill', 'inside', 'outside'] as const\n\nexport type FitValue = (typeof fitValues)[number]\n\nexport interface FitOptions {\n fit: FitValue\n}\n\nexport const getFit: TransformOption<FitOptions, FitValue> = (config, image) => {\n let fit: FitValue | undefined = undefined\n\n if (config.fit && fitValues.includes(config.fit)) {\n fit = config.fit\n } else {\n fit = Object.keys(config).find(\n (k: string): k is FitValue => (fitValues as unknown as string[]).includes(k) && config[k] === ''\n )\n }\n\n if (!fit) return\n\n image[METADATA].fit = fit\n\n return fit\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\nimport { getBackground } from './background.js'\n\nexport interface FlattenOptions {\n flatten: '' | 'true'\n}\n\nexport const flatten: TransformFactory<FlattenOptions> = (config) => {\n if (config.flatten !== '' && config.flatten !== 'true') return\n\n return function flattenTransform(image) {\n image[METADATA].flatten = true\n\n return image.flatten({\n background: getBackground(config, image)\n })\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface FlipOptions {\n flip: '' | 'true'\n}\n\nexport const flip: TransformFactory<FlipOptions> = ({ flip }) => {\n if (flip !== '' && flip !== 'true') return\n\n return function flipTransform(image) {\n image[METADATA].flip = true\n\n return image.flip()\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface FlopOptions {\n flop: '' | 'true'\n}\n\nexport const flop: TransformFactory<FlopOptions> = ({ flop }) => {\n if (flop !== '' && flop !== 'true') return\n\n return function flopTransform(image) {\n image[METADATA].flop = true\n\n return image.flop()\n }\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface QualityOptions {\n quality: string\n}\n\nexport const getQuality: TransformOption<QualityOptions, number> = ({ quality: _quality }, image) => {\n const quality = _quality && parseInt(_quality)\n\n if (!quality) return\n\n image[METADATA].quality = quality\n\n return quality\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface ProgressiveOptions {\n progressive: '' | 'true'\n}\n\nexport const getProgressive: TransformOption<ProgressiveOptions> = ({ progressive }, image) => {\n if (progressive !== '' && progressive !== 'true') return\n\n image[METADATA].progressive = true\n\n return true\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface LosslessOptions {\n lossless: '' | 'true'\n}\n\nexport const getLossless: TransformOption<LosslessOptions> = ({ lossless }, image) => {\n if (lossless !== '' && lossless !== 'true') return\n\n image[METADATA].lossless = true\n\n return true\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\nimport { getEffort } from './effort.js'\nimport { getQuality } from './quality.js'\nimport { getProgressive } from './progressive.js'\nimport { getLossless } from './lossless.js'\nimport type { FormatEnum } from 'sharp'\n\nexport interface FormatOptions {\n format: keyof FormatEnum\n}\n\nexport const format: TransformFactory<FormatOptions> = (config) => {\n let format: keyof FormatEnum\n\n if (!config.format) {\n return\n } else {\n format = config.format\n }\n\n return function formatTransform(image) {\n image[METADATA].format = format\n\n return image.toFormat(format, {\n compression: format == 'heif' ? 'av1' : undefined,\n effort: getEffort(config, image),\n lossless: getLossless(config, image) as boolean,\n // @ts-expect-error not every image type supports progressive\n progressive: getProgressive(config, image) as boolean,\n quality: getQuality(config, image)\n })\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface GrayscaleOptions {\n grayscale: '' | 'true'\n}\n\nexport const grayscale: TransformFactory<GrayscaleOptions> = ({ grayscale }) => {\n if (grayscale !== '' && grayscale !== 'true') return\n\n return function grayscaleTransform(image) {\n image[METADATA].grayscale = true\n\n return image.grayscale()\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface HSBOptions {\n hue: string\n saturation: string\n brightness: string\n}\n\nexport const hsb: TransformFactory<HSBOptions> = (config) => {\n const hue = config.hue && parseInt(config.hue)\n const saturation = config.saturation && parseFloat(config.saturation)\n const brightness = config.brightness && parseFloat(config.brightness)\n\n if (!hue && !saturation && !brightness) return\n\n return function hsbTransform(image) {\n image[METADATA].hue = hue\n image[METADATA].saturation = saturation\n image[METADATA].brightness = brightness\n\n return image.modulate({\n hue: hue || 0,\n saturation: saturation || 1,\n brightness: brightness || 1\n })\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface InvertOptions {\n invert: '' | 'true'\n}\n\nexport const invert: TransformFactory<InvertOptions> = ({ invert }) => {\n if (invert !== '' && invert !== 'true') return\n\n return function invertTransform(image) {\n image[METADATA].invert = true\n\n return image.negate()\n }\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport const kernelValues = ['nearest', 'cubic', 'mitchell', 'lanczos2', 'lanczos3'] as const\n\nexport type KernelValue = (typeof kernelValues)[number]\n\nexport interface KernelOptions {\n kernel: KernelValue\n}\n\nexport const getKernel: TransformOption<KernelOptions, KernelValue> = ({ kernel }, image) => {\n if (kernel && kernelValues.includes(kernel)) {\n image[METADATA].kernel = kernel\n\n return kernel\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface MedianOptions {\n median: string\n}\n\nexport const median: TransformFactory<MedianOptions> = (config) => {\n const median = config.median ? parseInt(config.median) : undefined\n\n if (!median) return\n\n return function medianTransform(image) {\n image[METADATA].median = median\n\n return image.median(median)\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface NormalizeOptions {\n normalize: '' | 'true'\n}\n\nexport const normalize: TransformFactory<NormalizeOptions> = ({ normalize }) => {\n if (normalize !== '' && normalize !== 'true') return\n\n return function normalizeTransform(image) {\n image[METADATA].normalize = true\n\n return image.normalize()\n }\n}\n","import type { TransformOption } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport const positionValues = [\n 'top',\n 'right top',\n 'right',\n 'right bottom',\n 'bottom',\n 'left bottom',\n 'left',\n 'left top',\n 'north',\n 'northeast',\n 'east',\n 'southeast',\n 'south',\n 'southwest',\n 'west',\n 'northwest',\n 'center',\n 'centre',\n 'entropy',\n 'attention'\n] as const\n\nexport const positionShorthands = [\n 'top',\n 'right top',\n 'right',\n 'right bottom',\n 'bottom',\n 'left bottom',\n 'left',\n 'left top'\n]\n\nexport type PositionValue = (typeof positionValues)[number]\n\nexport interface PositionOptions {\n position: PositionValue\n}\n\nexport const getPosition: TransformOption<PositionOptions, PositionValue> = (config, image) => {\n let position: PositionValue | undefined = undefined\n\n if (config.position && positionValues.includes(config.position)) {\n position = config.position\n } else {\n position = Object.keys(config).find(\n (k: string): k is PositionValue => positionShorthands.includes(k) && config[k] === ''\n )\n }\n if (!position) return\n\n image[METADATA].position = position\n\n return position\n}\n","import type { FitEnum } from 'sharp'\nimport { METADATA } from '../lib/metadata.js'\nimport type { TransformFactory } from '../types.js'\nimport { getBackground } from './background.js'\nimport { getFit } from './fit.js'\nimport { getKernel } from './kernel.js'\nimport { getPosition } from './position.js'\n\nexport interface ResizeOptions {\n /** width in pixels */\n w: string\n /** height in pixels */\n h: string\n /** aspect ratio */\n aspect: string\n /** Whether to allow making images larger. This is generally a waste, so is disabled by default. */\n allowUpscale: '' | 'true'\n /**\n * The width in pixels for the 1x pixel density descriptor.\n * If supplied, output will use pixel density descriptors rather than width descriptors.\n */\n basePixels: string\n}\n\n/**\n * This function parses a user provided aspect-ratio string into a float.\n * Valid syntaxes are `16:9` or `1.777`\n * @param aspect\n * @returns\n */\nfunction parseAspect(aspect: string): number | undefined {\n const parts = aspect.split(':')\n\n let aspectRatio\n if (parts.length === 1) {\n // the string was a float\n aspectRatio = parseFloat(parts[0])\n } else if (parts.length === 2) {\n // the string was a colon delimited aspect ratio\n const [width, height] = parts.map((str) => parseInt(str))\n\n if (!width || !height) return undefined\n\n aspectRatio = width / height\n }\n if (!aspectRatio || aspectRatio <= 0) return undefined\n return aspectRatio\n}\n\nexport const resize: TransformFactory<ResizeOptions> = (config, context) => {\n const width = parseInt(config.w || '')\n const height = parseInt(config.h || '')\n const aspect = parseAspect(config.aspect || '')\n const allowUpscale = config.allowUpscale === '' || config.allowUpscale === 'true'\n const basePixels = parseInt(config.basePixels || '')\n\n if (!width && !height && !aspect) return\n\n return function resizeTransform(image) {\n const fit = getFit(config, image) as keyof FitEnum | undefined\n // calculate finalWidth & finalHeight\n const originalWidth = image[METADATA].width as number\n const originalHeight = image[METADATA].height as number\n const originalAspect = originalWidth / originalHeight\n\n let finalWidth = width,\n finalHeight = height,\n finalAspect = aspect\n\n if (aspect && !width && !height) {\n // only aspect was given, need to calculate which dimension to crop\n if (aspect > originalAspect) {\n finalHeight = originalWidth / aspect\n finalWidth = originalWidth\n } else {\n finalHeight = originalHeight\n finalWidth = originalHeight * aspect\n }\n } else if (width && height) {\n // width & height BOTH given, need to look at fit\n switch (fit) {\n case 'inside':\n if (width / height < originalAspect) {\n finalHeight = width / originalAspect\n } else {\n finalWidth = height * originalAspect\n }\n break\n case 'outside':\n if (width / height > originalAspect) {\n finalHeight = width / originalAspect\n } else {\n finalWidth = height * originalAspect\n }\n break\n case 'cover':\n case 'contain':\n case 'fill':\n default:\n // no recalculation necessary\n break\n }\n finalAspect = finalWidth / finalHeight\n } else if (!height) {\n // only width was provided, need to calculate height\n finalAspect = aspect || originalAspect\n finalHeight = width / finalAspect\n } else if (!width) {\n // only height was provided, need to calculate width\n finalAspect = aspect || originalAspect\n finalWidth = height * finalAspect\n }\n\n if (!allowUpscale && (finalHeight > originalHeight || finalWidth > originalWidth)) {\n finalHeight = originalHeight\n finalWidth = originalWidth\n finalAspect = originalAspect\n\n if (context.manualSearchParams.has('w') || context.manualSearchParams.has('h')) {\n context.logger.info(\n 'allowUpscale not enabled. Image width, height and aspect ratio reverted to original values'\n )\n }\n }\n\n finalWidth = Math.round(finalWidth)\n finalHeight = Math.round(finalHeight)\n\n image[METADATA].height = finalHeight\n image[METADATA].width = finalWidth\n image[METADATA].aspect = finalAspect\n image[METADATA].allowUpscale = allowUpscale\n image[METADATA].pixelDensityDescriptor = basePixels > 0 ? finalWidth / basePixels + 'x' : undefined\n\n return image.resize({\n width: finalWidth || undefined,\n height: finalHeight || undefined,\n withoutEnlargement: !allowUpscale,\n fit,\n position: getPosition(config, image),\n kernel: getKernel(config, image),\n background: getBackground(config, image)\n })\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\nimport { getBackground } from './background.js'\n\nexport interface RotateOptions {\n rotate: string\n}\n\nexport const rotate: TransformFactory<RotateOptions> = (config) => {\n const rotate = config.rotate && parseInt(config.rotate)\n\n if (!rotate) return\n\n return function rotateTransform(image) {\n image[METADATA].rotate = rotate\n\n return image.rotate(rotate, {\n background: getBackground(config, image)\n })\n }\n}\n","import type { TransformFactory } from '../types.js'\nimport { METADATA } from '../lib/metadata.js'\n\nexport interface TintOptions {\n tint: string\n}\n\nexport const tint: TransformFactory<TintOptions> = ({ tint }) => {\n if (typeof tint !== 'string' || !tint.length) return\n\n return function tintTransform(image) {\n image[METADATA].tint = '#' + tint\n\n return image.tint('#' + tint)\n }\n}\n","import { blur } from './transforms/blur.js'\nimport { flatten } from './transforms/flatten.js'\nimport { flip } from './transforms/flip.js'\nimport { flop } from './transforms/flop.js'\nimport { format } from './transforms/format.js'\nimport { grayscale } from './transforms/grayscale.js'\nimport { hsb } from './transforms/hsb.js'\nimport { invert } from './transforms/invert.js'\nimport { median } from './transforms/median.js'\nimport { normalize } from './transforms/normalize.js'\nimport { resize } from './transforms/resize.js'\nimport { rotate } from './transforms/rotate.js'\nimport { tint } from './transforms/tint.js'\n\nexport const builtins = [\n blur,\n flatten,\n flip,\n flop,\n format,\n grayscale,\n hsb,\n invert,\n median,\n normalize,\n resize,\n rotate,\n tint\n]\n","import type { ImageMetadata, Img, OutputFormat, Picture } from './types.js'\n\nexport const urlFormat: OutputFormat = () => (metadatas) => {\n const urls: string[] = metadatas.map((metadata) => metadata.src as string)\n\n return urls.length == 1 ? urls[0] : urls\n}\n\nexport const srcsetFormat: OutputFormat = () => metadatasToSourceset\n\nexport const metadataFormat: OutputFormat = (whitelist) => (metadatas) => {\n const result = whitelist\n ? metadatas.map((cfg) => Object.fromEntries(Object.entries(cfg).filter(([k]) => whitelist.includes(k))))\n : metadatas\n\n result.forEach((m) => delete m.image)\n\n return result.length === 1 ? result[0] : result\n}\n\nconst metadatasToSourceset = (metadatas: ImageMetadata[]) =>\n metadatas\n .map((meta) => {\n const density = meta.pixelDensityDescriptor\n return density ? `${meta.src} ${density}` : `${meta.src} ${meta.width}w`\n })\n .join(', ')\n\n/** normalizes the format for use in mime-type */\nconst getFormat = (m: ImageMetadata) => {\n if (!m.format) throw new Error(`Could not determine image format`)\n return m.format.replace('jpg', 'jpeg')\n}\n\nexport const imgFormat: OutputFormat = () => (metadatas) => {\n let largestImage\n let largestImageSize = 0\n for (let i = 0; i < metadatas.length; i++) {\n const m = metadatas[i]\n if ((m.width as number) > largestImageSize) {\n largestImage = m\n largestImageSize = m.width as number\n }\n }\n\n const result: Img = {\n src: largestImage?.src as string,\n w: largestImage?.width as number,\n h: largestImage?.height as number\n }\n\n if (metadatas.length >= 2) {\n result.srcset = metadatasToSourceset(metadatas)\n }\n\n return result\n}\n\n/** fallback format should be specified last */\nexport const pictureFormat: OutputFormat = () => (metadatas) => {\n const fallbackFormat = [...new Set(metadatas.map((m) => getFormat(m)))].pop()\n\n let largestFallback\n let largestFallbackSize = 0\n let fallbackFormatCount = 0\n for (let i = 0; i < metadatas.length; i++) {\n const m = metadatas[i]\n if (getFormat(m) === fallbackFormat) {\n fallbackFormatCount++\n if ((m.width as number) > largestFallbackSize) {\n largestFallback = m\n largestFallbackSize = m.width as number\n }\n }\n }\n\n const sourceMetadatas: Record<string, ImageMetadata[]> = {}\n for (let i = 0; i < metadatas.length; i++) {\n const m = metadatas[i]\n const f = getFormat(m)\n // we don't need to create a source tag for the fallback format if there is\n // only a single image in that format\n if (f === fallbackFormat && fallbackFormatCount < 2) {\n continue\n }\n if (sourceMetadatas[f]) {\n sourceMetadatas[f].push(m)\n } else {\n sourceMetadatas[f] = [m]\n }\n }\n\n const sources: Record<string, string> = {}\n for (const [key, value] of Object.entries(sourceMetadatas)) {\n sources[key] = metadatasToSourceset(value)\n }\n\n const result: Picture = {\n sources,\n // the fallback should be the largest image in the fallback format\n // we assume users should never upsize an image because that is just wasted\n // bytes since the browser can upsize just as well\n img: {\n src: largestFallback?.src as string,\n w: largestFallback?.width as number,\n h: largestFallback?.height as number\n }\n }\n return result\n}\n\nexport const builtinOutputFormats = {\n url: urlFormat,\n srcset: srcsetFormat,\n img: imgFormat,\n picture: pictureFormat,\n metadata: metadataFormat,\n meta: metadataFormat\n}\n","export function parseURL(rawURL: string) {\n return new URL(rawURL.replace(/#/g, '%23'), 'file://')\n}\n\nexport function extractEntries(searchParams: URLSearchParams) {\n const entries: Array<[string, string[]]> = []\n\n for (const [key, value] of searchParams) {\n const values = value.includes(':') ? [value] : value.split(';')\n entries.push([key, values])\n }\n\n return entries\n}\n","import type { OutputFormat } from '../index.js'\n\n/**\n * This function calculates the cartesian product of two or more arrays and is straight from stackoverflow ;)\n * Should be replaced with something more legible but works for now.\n */\nconst cartesian = (...a: [[string, string]][][]) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n a.reduce((a: any, b: any) => a.flatMap((d: any) => b.map((e: any) => [d, e].flat())))\n\n/**\n * This function builds up all possible combinations the given entries can be combined\n * and returns it as an array of objects that can be given to a the transforms.\n * @param entries The url parameter entries\n * @returns An array of directive options\n */\nexport function resolveConfigs(\n entries: Array<[string, string[]]>,\n outputFormats: Record<string, OutputFormat>\n): Record<string, string | string[]>[] {\n // create a new array of entries for each argument\n const singleArgumentEntries = entries\n .filter(([k]) => !(k in outputFormats))\n .map(([key, values]) => values.map<[[string, string]]>((v) => [[key, v]]))\n\n // do a cartesian product on all entries to get all combinations we need to produce\n const combinations = singleArgumentEntries\n // .filter(([key]) => !(key[0][0] in outputFormats))\n .reduce((prev, cur) => (prev.length ? cartesian(prev, cur) : cur), [])\n\n const metadataAddons = entries.filter(([k]) => k in outputFormats)\n\n // and return as an array of objects\n const out: Record<string, string | string[]>[] = combinations.map((options) =>\n Object.fromEntries([...options, ...metadataAddons])\n )\n\n return out.length ? out : [Object.fromEntries(metadataAddons)]\n}\n","import type { Logger } from '../types.js'\n\nexport const consoleLogger: Logger = {\n info(msg) {\n console.info(msg)\n },\n warn(msg) {\n console.warn(msg)\n },\n error(msg) {\n console.error(msg)\n }\n}\n","import type { ImageTransformation, ImageConfig, TransformFactory, TransformFactoryContext, Logger } from '../types.js'\nimport { consoleLogger } from './logger.js'\n\nexport function generateTransforms(\n config: ImageConfig,\n factories: TransformFactory[],\n manualSearchParams: URLSearchParams,\n logger?: Logger\n) {\n if (logger === undefined) {\n logger = consoleLogger\n }\n\n const transforms: ImageTransformation[] = []\n const parametersUsed = new Set<string>()\n\n const context: TransformFactoryContext = {\n useParam: (k) => parametersUsed.add(k),\n manualSearchParams,\n logger\n }\n\n for (const directive of factories) {\n const transform = directive(config, context)\n\n if (typeof transform === 'function') transforms.push(transform)\n }\n\n return {\n transforms,\n parametersUsed\n }\n}\n","import type { Sharp } from 'sharp'\nimport type { ImageTransformation, TransformResult } from '../types.js'\nimport { METADATA } from './metadata.js'\n\nexport async function applyTransforms(\n transforms: ImageTransformation[],\n image: Sharp,\n removeMetadata = true\n): Promise<TransformResult> {\n image[METADATA] = { ...(await image.metadata()) }\n\n if (removeMetadata) {\n // delete the private metadata\n delete image[METADATA].exif\n delete image[METADATA].iptc\n delete image[METADATA].xmp\n delete image[METADATA].tifftagPhotoshop\n delete image[METADATA].icc\n } else {\n image.withMetadata()\n }\n\n for (const transform of transforms) {\n image = await transform(image)\n }\n\n return {\n image,\n metadata: image[METADATA]\n }\n}\n"],"names":[],"mappings":"AAGO,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;SAQhC,WAAW,CAAC,KAAY,EAAE,GAAW,EAAE,KAAc,EAAA;AACnE,IAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACnB,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;AAC7B;AACH;AAEgB,SAAA,WAAW,CAAC,KAAY,EAAE,GAAW,EAAA;;IACnD,OAAO,CAAA,EAAA,GAAA,KAAK,CAAC,QAAQ,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAG,CAAC;AAC/B;;ACZa,MAAA,aAAa,GAA+C,CAAC,EAAE,UAAU,EAAE,EAAE,KAAK,KAAI;IACjG,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE;AAE1D,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,mBAAmB,GAAG,UAAU;AAEhD,IAAA,OAAO,UAAU;AACnB;;ACNa,MAAA,IAAI,GAAkC,CAAC,MAAM,KAAI;IAC5D,IAAI,IAAI,GAAiC,SAAS;AAElD,IAAA,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS;IACxD,IAAI,KAAJ,IAAI,GAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAA;IAC/B,IAAI,KAAJ,IAAI,GAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAA;AAE3B,IAAA,IAAI,CAAC,IAAI;QAAE;IAEX,OAAO,SAAS,aAAa,CAAC,KAAK,EAAA;AACjC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,IAAI;AAE3B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,KAAC;AACH;;ACdA,MAAM,sBAAsB,GAAqC;AAC/D,IAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,IAAA,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACZ,IAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,IAAA,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACX,IAAA,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACZ,IAAA,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CACZ;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,MAAc,EAAA;;IACjD,IAAI,MAAM,KAAK,KAAK,EAAE;QACpB,OAAO,CAAA,EAAA,GAAA,sBAAsB,CAAC,MAAM,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AAC3C;SAAM,IAAI,MAAM,KAAK,KAAK,EAAE;QAC3B,OAAO,CAAA,EAAA,GAAA,sBAAsB,CAAC,MAAM,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;AAC3C;AACD,IAAA,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB;AAEO,MAAM,SAAS,GAA2C,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,KAAI;;AAC9F,IAAA,IAAI,CAAC,OAAO;QAAE;AAEd,IAAA,MAAM,MAAM,IAAI,CAAA,EAAA,GAAA,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAW;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QAAE;AAE/B,IAAA,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;AAEpC,IAAA,OAAO,MAAM;AACf;;AChCO,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS;MAQ5D,MAAM,GAA0C,CAAC,MAAM,EAAE,KAAK,KAAI;IAC7E,IAAI,GAAG,GAAyB,SAAS;AAEzC,IAAA,IAAI,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAChD,QAAA,GAAG,GAAG,MAAM,CAAC,GAAG;AACjB;AAAM,SAAA;AACL,QAAA,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAC5B,CAAC,CAAS,KAAqB,SAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CACjG;AACF;AAED,IAAA,IAAI,CAAC,GAAG;QAAE;AAEV,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,GAAG;AAEzB,IAAA,OAAO,GAAG;AACZ;;ACnBa,MAAA,OAAO,GAAqC,CAAC,MAAM,KAAI;IAClE,IAAI,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE;IAExD,OAAO,SAAS,gBAAgB,CAAC,KAAK,EAAA;AACpC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,IAAI;QAE9B,OAAO,KAAK,CAAC,OAAO,CAAC;AACnB,YAAA,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK;AACxC,SAAA,CAAC;AACJ,KAAC;AACH;;MCXa,IAAI,GAAkC,CAAC,EAAE,IAAI,EAAE,KAAI;AAC9D,IAAA,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM;QAAE;IAEpC,OAAO,SAAS,aAAa,CAAC,KAAK,EAAA;AACjC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,IAAI;AAE3B,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE;AACrB,KAAC;AACH;;MCRa,IAAI,GAAkC,CAAC,EAAE,IAAI,EAAE,KAAI;AAC9D,IAAA,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM;QAAE;IAEpC,OAAO,SAAS,aAAa,CAAC,KAAK,EAAA;AACjC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,IAAI;AAE3B,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE;AACrB,KAAC;AACH;;ACRO,MAAM,UAAU,GAA4C,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,KAAK,KAAI;IAClG,MAAM,OAAO,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC;AAE9C,IAAA,IAAI,CAAC,OAAO;QAAE;AAEd,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO;AAEjC,IAAA,OAAO,OAAO;AAChB;;ACRa,MAAA,cAAc,GAAwC,CAAC,EAAE,WAAW,EAAE,EAAE,KAAK,KAAI;AAC5F,IAAA,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,KAAK,MAAM;QAAE;AAElD,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,IAAI;AAElC,IAAA,OAAO,IAAI;AACb;;ACNa,MAAA,WAAW,GAAqC,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,KAAI;AACnF,IAAA,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,KAAK,MAAM;QAAE;AAE5C,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,IAAI;AAE/B,IAAA,OAAO,IAAI;AACb;;ACDa,MAAA,MAAM,GAAoC,CAAC,MAAM,KAAI;AAChE,IAAA,IAAI,MAAwB;AAE5B,IAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB;AACD;AAAM,SAAA;AACL,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM;AACvB;IAED,OAAO,SAAS,eAAe,CAAC,KAAK,EAAA;AACnC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;AAE/B,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE;YAC5B,WAAW,EAAE,MAAM,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS;AACjD,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;AAChC,YAAA,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAY;;AAE/C,YAAA,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,KAAK,CAAY;AACrD,YAAA,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK;AAClC,SAAA,CAAC;AACJ,KAAC;AACH;;MC1Ba,SAAS,GAAuC,CAAC,EAAE,SAAS,EAAE,KAAI;AAC7E,IAAA,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,MAAM;QAAE;IAE9C,OAAO,SAAS,kBAAkB,CAAC,KAAK,EAAA;AACtC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,IAAI;AAEhC,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE;AAC1B,KAAC;AACH;;ACNa,MAAA,GAAG,GAAiC,CAAC,MAAM,KAAI;AAC1D,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;AACrE,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;AAErE,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU;QAAE;IAExC,OAAO,SAAS,YAAY,CAAC,KAAK,EAAA;AAChC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,GAAG;AACzB,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,UAAU;AACvC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,UAAU;QAEvC,OAAO,KAAK,CAAC,QAAQ,CAAC;YACpB,GAAG,EAAE,GAAG,IAAI,CAAC;YACb,UAAU,EAAE,UAAU,IAAI,CAAC;YAC3B,UAAU,EAAE,UAAU,IAAI;AAC3B,SAAA,CAAC;AACJ,KAAC;AACH;;MCpBa,MAAM,GAAoC,CAAC,EAAE,MAAM,EAAE,KAAI;AACpE,IAAA,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,MAAM;QAAE;IAExC,OAAO,SAAS,eAAe,CAAC,KAAK,EAAA;AACnC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI;AAE7B,QAAA,OAAO,KAAK,CAAC,MAAM,EAAE;AACvB,KAAC;AACH;;ACZO,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;AAQtE,MAAA,SAAS,GAAgD,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,KAAI;IAC1F,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC3C,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;AAE/B,QAAA,OAAO,MAAM;AACd;AACH;;ACVa,MAAA,MAAM,GAAoC,CAAC,MAAM,KAAI;AAChE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS;AAElE,IAAA,IAAI,CAAC,MAAM;QAAE;IAEb,OAAO,SAAS,eAAe,CAAC,KAAK,EAAA;AACnC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;AAE/B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAC7B,KAAC;AACH;;MCVa,SAAS,GAAuC,CAAC,EAAE,SAAS,EAAE,KAAI;AAC7E,IAAA,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,KAAK,MAAM;QAAE;IAE9C,OAAO,SAAS,kBAAkB,CAAC,KAAK,EAAA;AACtC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,IAAI;AAEhC,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE;AAC1B,KAAC;AACH;;ACZa,MAAA,cAAc,GAAG;IAC5B,KAAK;IACL,WAAW;IACX,OAAO;IACP,cAAc;IACd,QAAQ;IACR,aAAa;IACb,MAAM;IACN,UAAU;IACV,OAAO;IACP,WAAW;IACX,MAAM;IACN,WAAW;IACX,OAAO;IACP,WAAW;IACX,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,SAAS;IACT;;AAGW,MAAA,kBAAkB,GAAG;IAChC,KAAK;IACL,WAAW;IACX,OAAO;IACP,cAAc;IACd,QAAQ;IACR,aAAa;IACb,MAAM;IACN;;MASW,WAAW,GAAoD,CAAC,MAAM,EAAE,KAAK,KAAI;IAC5F,IAAI,QAAQ,GAA8B,SAAS;AAEnD,IAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC/D,QAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC3B;AAAM,SAAA;AACL,QAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CACjC,CAAC,CAAS,KAAyB,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CACtF;AACF;AACD,IAAA,IAAI,CAAC,QAAQ;QAAE;AAEf,IAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,QAAQ;AAEnC,IAAA,OAAO,QAAQ;AACjB;;AClCA;;;;;AAKG;AACH,SAAS,WAAW,CAAC,MAAc,EAAA;IACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAE/B,IAAA,IAAI,WAAW;AACf,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;QAEtB,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC;AAAM,SAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;;QAE7B,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;AAEvC,QAAA,WAAW,GAAG,KAAK,GAAG,MAAM;AAC7B;AACD,IAAA,IAAI,CAAC,WAAW,IAAI,WAAW,IAAI,CAAC;AAAE,QAAA,OAAO,SAAS;AACtD,IAAA,OAAO,WAAW;AACpB;MAEa,MAAM,GAAoC,CAAC,MAAM,EAAE,OAAO,KAAI;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC/C,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,KAAK,EAAE,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM;IACjF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;AAEpD,IAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;QAAE;IAElC,OAAO,SAAS,eAAe,CAAC,KAAK,EAAA;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAA8B;;QAE9D,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAe;QACrD,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAgB;AACvD,QAAA,MAAM,cAAc,GAAG,aAAa,GAAG,cAAc;QAErD,IAAI,UAAU,GAAG,KAAK,EACpB,WAAW,GAAG,MAAM,EACpB,WAAW,GAAG,MAAM;AAEtB,QAAA,IAAI,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;;YAE/B,IAAI,MAAM,GAAG,cAAc,EAAE;AAC3B,gBAAA,WAAW,GAAG,aAAa,GAAG,MAAM;gBACpC,UAAU,GAAG,aAAa;AAC3B;AAAM,iBAAA;gBACL,WAAW,GAAG,cAAc;AAC5B,gBAAA,UAAU,GAAG,cAAc,GAAG,MAAM;AACrC;AACF;aAAM,IAAI,KAAK,IAAI,MAAM,EAAE;;AAE1B,YAAA,QAAQ,GAAG;AACT,gBAAA,KAAK,QAAQ;AACX,oBAAA,IAAI,KAAK,GAAG,MAAM,GAAG,cAAc,EAAE;AACnC,wBAAA,WAAW,GAAG,KAAK,GAAG,cAAc;AACrC;AAAM,yBAAA;AACL,wBAAA,UAAU,GAAG,MAAM,GAAG,cAAc;AACrC;oBACD;AACF,gBAAA,KAAK,SAAS;AACZ,oBAAA,IAAI,KAAK,GAAG,MAAM,GAAG,cAAc,EAAE;AACnC,wBAAA,WAAW,GAAG,KAAK,GAAG,cAAc;AACrC;AAAM,yBAAA;AACL,wBAAA,UAAU,GAAG,MAAM,GAAG,cAAc;AACrC;oBACD;AAOH;AACD,YAAA,WAAW,GAAG,UAAU,GAAG,WAAW;AACvC;aAAM,IAAI,CAAC,MAAM,EAAE;;AAElB,YAAA,WAAW,GAAG,MAAM,IAAI,cAAc;AACtC,YAAA,WAAW,GAAG,KAAK,GAAG,WAAW;AAClC;aAAM,IAAI,CAAC,KAAK,EAAE;;AAEjB,YAAA,WAAW,GAAG,MAAM,IAAI,cAAc;AACtC,YAAA,UAAU,GAAG,MAAM,GAAG,WAAW;AAClC;AAED,QAAA,IAAI,CAAC,YAAY,KAAK,WAAW,GAAG,cAAc,IAAI,UAAU,GAAG,aAAa,CAAC,EAAE;YACjF,WAAW,GAAG,cAAc;YAC5B,UAAU,GAAG,aAAa;YAC1B,WAAW,GAAG,cAAc;AAE5B,YAAA,IAAI,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9E,gBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CACjB,4FAA4F,CAC7F;AACF;AACF;AAED,QAAA,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;AACnC,QAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;AAErC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,WAAW;AACpC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,UAAU;AAClC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,WAAW;AACpC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,YAAY,GAAG,YAAY;QAC3C,KAAK,CAAC,QAAQ,CAAC,CAAC,sBAAsB,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,UAAU,GAAG,GAAG,GAAG,SAAS;QAEnG,OAAO,KAAK,CAAC,MAAM,CAAC;YAClB,KAAK,EAAE,UAAU,IAAI,SAAS;YAC9B,MAAM,EAAE,WAAW,IAAI,SAAS;YAChC,kBAAkB,EAAE,CAAC,YAAY;YACjC,GAAG;AACH,YAAA,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;AACpC,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;AAChC,YAAA,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK;AACxC,SAAA,CAAC;AACJ,KAAC;AACH;;ACxIa,MAAA,MAAM,GAAoC,CAAC,MAAM,KAAI;AAChE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AAEvD,IAAA,IAAI,CAAC,MAAM;QAAE;IAEb,OAAO,SAAS,eAAe,CAAC,KAAK,EAAA;AACnC,QAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM;AAE/B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;AAC1B,YAAA,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK;AACxC,SAAA,CAAC;AACJ,KAAC;AACH;;MCba,IAAI,GAAkC,CAAC,EAAE,IAAI,EAAE,KAAI;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE;IAE9C,OAAO,SAAS,aAAa,CAAC,KAAK,EAAA;QACjC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI;QAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;AAC/B,KAAC;AACH;;ACDa,MAAA,QAAQ,GAAG;IACtB,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,SAAS;IACT,GAAG;IACH,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN;;;ACzBW,MAAA,SAAS,GAAiB,MAAM,CAAC,SAAS,KAAI;AACzD,IAAA,MAAM,IAAI,GAAa,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAa,CAAC;AAE1E,IAAA,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1C;MAEa,YAAY,GAAiB,MAAM;AAEzC,MAAM,cAAc,GAAiB,CAAC,SAAS,KAAK,CAAC,SAAS,KAAI;IACvE,MAAM,MAAM,GAAG;AACb,UAAE,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;UACrG,SAAS;AAEb,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,CAAC;AAErC,IAAA,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;AACjD;AAEA,MAAM,oBAAoB,GAAG,CAAC,SAA0B,KACtD;AACG,KAAA,GAAG,CAAC,CAAC,IAAI,KAAI;AACZ,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB;IAC3C,OAAO,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,GAAG,CAAG,EAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;AAC1E,CAAC;KACA,IAAI,CAAC,IAAI,CAAC;AAEf;AACA,MAAM,SAAS,GAAG,CAAC,CAAgB,KAAI;IACrC,IAAI,CAAC,CAAC,CAAC,MAAM;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,gCAAA,CAAkC,CAAC;IAClE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AACxC,CAAC;AAEY,MAAA,SAAS,GAAiB,MAAM,CAAC,SAAS,KAAI;AACzD,IAAA,IAAI,YAAY;IAChB,IAAI,gBAAgB,GAAG,CAAC;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtB,QAAA,IAAK,CAAC,CAAC,KAAgB,GAAG,gBAAgB,EAAE;YAC1C,YAAY,GAAG,CAAC;AAChB,YAAA,gBAAgB,GAAG,CAAC,CAAC,KAAe;AACrC;AACF;AAED,IAAA,MAAM,MAAM,GAAQ;AAClB,QAAA,GAAG,EAAE,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,GAAa;AAChC,QAAA,CAAC,EAAE,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,KAAe;AAChC,QAAA,CAAC,EAAE,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE;KAClB;AAED,IAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACzB,QAAA,MAAM,CAAC,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAChD;AAED,IAAA,OAAO,MAAM;AACf;AAEA;AACa,MAAA,aAAa,GAAiB,MAAM,CAAC,SAAS,KAAI;IAC7D,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAE7E,IAAA,IAAI,eAAe;IACnB,IAAI,mBAAmB,GAAG,CAAC;IAC3B,IAAI,mBAAmB,GAAG,CAAC;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;AACnC,YAAA,mBAAmB,EAAE;AACrB,YAAA,IAAK,CAAC,CAAC,KAAgB,GAAG,mBAAmB,EAAE;gBAC7C,eAAe,GAAG,CAAC;AACnB,gBAAA,mBAAmB,GAAG,CAAC,CAAC,KAAe;AACxC;AACF;AACF;IAED,MAAM,eAAe,GAAoC,EAAE;AAC3D,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACtB,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;;;AAGtB,QAAA,IAAI,CAAC,KAAK,cAAc,IAAI,mBAAmB,GAAG,CAAC,EAAE;YACnD;AACD;AACD,QAAA,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE;YACtB,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B;AAAM,aAAA;AACL,YAAA,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB;AACF;IAED,MAAM,OAAO,GAA2B,EAAE;AAC1C,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;QAC1D,OAAO,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC;AAC3C;AAED,IAAA,MAAM,MAAM,GAAY;QACtB,OAAO;;;;AAIP,QAAA,GAAG,EAAE;AACH,YAAA,GAAG,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,GAAa;AACnC,YAAA,CAAC,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE,KAAe;AACnC,YAAA,CAAC,EAAE,eAAe,KAAA,IAAA,IAAf,eAAe,KAAf,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,eAAe,CAAE;AACrB;KACF;AACD,IAAA,OAAO,MAAM;AACf;AAEa,MAAA,oBAAoB,GAAG;AAClC,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,MAAM,EAAE,YAAY;AACpB,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,QAAQ,EAAE,cAAc;AACxB,IAAA,IAAI,EAAE;;;ACrHF,SAAU,QAAQ,CAAC,MAAc,EAAA;AACrC,IAAA,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC;AACxD;AAEM,SAAU,cAAc,CAAC,YAA6B,EAAA;IAC1D,MAAM,OAAO,GAA8B,EAAE;IAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5B;AAED,IAAA,OAAO,OAAO;AAChB;;ACXA;;;AAGG;AACH,MAAM,SAAS,GAAG,CAAC,GAAG,CAAyB;AAC7C;AACA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAEvF;;;;;AAKG;AACa,SAAA,cAAc,CAC5B,OAAkC,EAClC,aAA2C,EAAA;;IAG3C,MAAM,qBAAqB,GAAG;AAC3B,SAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,aAAa,CAAC;AACrC,SAAA,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG,CAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;;IAG5E,MAAM,YAAY,GAAG;;AAElB,SAAA,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;AAExE,IAAA,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC;;IAGlE,MAAM,GAAG,GAAwC,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,KACxE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC,CACpD;AAED,IAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAChE;;ACpCO,MAAM,aAAa,GAAW;AACnC,IAAA,IAAI,CAAC,GAAG,EAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAClB;AACD,IAAA,IAAI,CAAC,GAAG,EAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAClB;AACD,IAAA,KAAK,CAAC,GAAG,EAAA;AACP,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;;CAErB;;ACTK,SAAU,kBAAkB,CAChC,MAAmB,EACnB,SAA6B,EAC7B,kBAAmC,EACnC,MAAe,EAAA;IAEf,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,MAAM,GAAG,aAAa;AACvB;IAED,MAAM,UAAU,GAA0B,EAAE;AAC5C,IAAA,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU;AAExC,IAAA,MAAM,OAAO,GAA4B;QACvC,QAAQ,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,kBAAkB;QAClB;KACD;AAED,IAAA,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE;QACjC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;QAE5C,IAAI,OAAO,SAAS,KAAK,UAAU;AAAE,YAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;AAChE;IAED,OAAO;QACL,UAAU;QACV;KACD;AACH;;AC5BO,eAAe,eAAe,CACnC,UAAiC,EACjC,KAAY,EACZ,cAAc,GAAG,IAAI,EAAA;AAErB,IAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE;AAEjD,IAAA,IAAI,cAAc,EAAE;;AAElB,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI;AAC3B,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI;AAC3B,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG;AAC1B,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,gBAAgB;AACvC,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG;AAC3B;AAAM,SAAA;QACL,KAAK,CAAC,YAAY,EAAE;AACrB;AAED,IAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAClC,QAAA,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC;AAC/B;IAED,OAAO;QACL,KAAK;AACL,QAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB;AACH;;;;"}