1 |
- {"version":3,"file":"image-url.umd.js","sources":["../../src/parseAssetId.ts","../../src/parseSource.ts","../../src/urlForImage.ts","../../src/builder.ts"],"sourcesContent":["const example = 'image-Tb9Ew8CXIwaY6R1kjMvI0uRR-2000x3000-jpg'\n\nexport default function parseAssetId(ref: string) {\n const [, id, dimensionString, format] = ref.split('-')\n\n if (!id || !dimensionString || !format) {\n throw new Error(`Malformed asset _ref '${ref}'. Expected an id like \"${example}\".`)\n }\n\n const [imgWidthStr, imgHeightStr] = dimensionString.split('x')\n\n const width = +imgWidthStr\n const height = +imgHeightStr\n\n const isValidAssetId = isFinite(width) && isFinite(height)\n if (!isValidAssetId) {\n throw new Error(`Malformed asset _ref '${ref}'. Expected an id like \"${example}\".`)\n }\n\n return {id, width, height, format}\n}\n","import {\n SanityAsset,\n SanityImageObject,\n SanityImageSource,\n SanityImageWithAssetStub,\n SanityReference,\n} from './types'\n\nconst isRef = (src: SanityImageSource): src is SanityReference => {\n const source = src as SanityReference\n return source ? typeof source._ref === 'string' : false\n}\n\nconst isAsset = (src: SanityImageSource): src is SanityAsset => {\n const source = src as SanityAsset\n return source ? typeof source._id === 'string' : false\n}\n\nconst isAssetStub = (src: SanityImageSource): src is SanityImageWithAssetStub => {\n const source = src as SanityImageWithAssetStub\n return source && source.asset ? typeof source.asset.url === 'string' : false\n}\n\n// Convert an asset-id, asset or image to an image record suitable for processing\n// eslint-disable-next-line complexity\nexport default function parseSource(source?: SanityImageSource) {\n if (!source) {\n return null\n }\n\n let image: SanityImageObject\n\n if (typeof source === 'string' && isUrl(source)) {\n // Someone passed an existing image url?\n image = {\n asset: {_ref: urlToId(source)},\n }\n } else if (typeof source === 'string') {\n // Just an asset id\n image = {\n asset: {_ref: source},\n }\n } else if (isRef(source)) {\n // We just got passed an asset directly\n image = {\n asset: source,\n }\n } else if (isAsset(source)) {\n // If we were passed an image asset document\n image = {\n asset: {\n _ref: source._id || '',\n },\n }\n } else if (isAssetStub(source)) {\n // If we were passed a partial asset (`url`, but no `_id`)\n image = {\n asset: {\n _ref: urlToId(source.asset.url),\n },\n }\n } else if (typeof source.asset === 'object') {\n // Probably an actual image with materialized asset\n image = {...source}\n } else {\n // We got something that does not look like an image, or it is an image\n // that currently isn't sporting an asset.\n return null\n }\n\n const img = source as SanityImageObject\n if (img.crop) {\n image.crop = img.crop\n }\n\n if (img.hotspot) {\n image.hotspot = img.hotspot\n }\n\n return applyDefaults(image)\n}\n\nfunction isUrl(url: string) {\n return /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction urlToId(url: string) {\n const parts = url.split('/').slice(-1)\n return `image-${parts[0]}`.replace(/\\.([a-z]+)$/, '-$1')\n}\n\n// Mock crop and hotspot if image lacks it\nfunction applyDefaults(image: SanityImageObject) {\n if (image.crop && image.hotspot) {\n return image as Required<SanityImageObject>\n }\n\n // We need to pad in default values for crop or hotspot\n const result = {...image}\n\n if (!result.crop) {\n result.crop = {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n }\n }\n\n if (!result.hotspot) {\n result.hotspot = {\n x: 0.5,\n y: 0.5,\n height: 1.0,\n width: 1.0,\n }\n }\n\n return result as Required<SanityImageObject>\n}\n","import parseAssetId from './parseAssetId'\nimport parseSource from './parseSource'\nimport {\n CropSpec,\n HotspotSpec,\n ImageUrlBuilderOptions,\n ImageUrlBuilderOptionsWithAsset,\n SanityAsset,\n SanityImageFitResult,\n SanityImageRect,\n SanityReference,\n} from './types'\n\nexport const SPEC_NAME_TO_URL_NAME_MAPPINGS = [\n ['width', 'w'],\n ['height', 'h'],\n ['format', 'fm'],\n ['download', 'dl'],\n ['blur', 'blur'],\n ['sharpen', 'sharp'],\n ['invert', 'invert'],\n ['orientation', 'or'],\n ['minHeight', 'min-h'],\n ['maxHeight', 'max-h'],\n ['minWidth', 'min-w'],\n ['maxWidth', 'max-w'],\n ['quality', 'q'],\n ['fit', 'fit'],\n ['crop', 'crop'],\n ['saturation', 'sat'],\n ['auto', 'auto'],\n ['dpr', 'dpr'],\n ['pad', 'pad'],\n]\n\nexport default function urlForImage(options: ImageUrlBuilderOptions): string {\n let spec = {...(options || {})}\n const source = spec.source\n delete spec.source\n\n const image = parseSource(source)\n if (!image) {\n throw new Error(`Unable to resolve image URL from source (${JSON.stringify(source)})`)\n }\n\n const id = (image.asset as SanityReference)._ref || (image.asset as SanityAsset)._id || ''\n const asset = parseAssetId(id)\n\n // Compute crop rect in terms of pixel coordinates in the raw source image\n const cropLeft = Math.round(image.crop.left * asset.width)\n const cropTop = Math.round(image.crop.top * asset.height)\n const crop = {\n left: cropLeft,\n top: cropTop,\n width: Math.round(asset.width - image.crop.right * asset.width - cropLeft),\n height: Math.round(asset.height - image.crop.bottom * asset.height - cropTop),\n }\n\n // Compute hot spot rect in terms of pixel coordinates\n const hotSpotVerticalRadius = (image.hotspot.height * asset.height) / 2\n const hotSpotHorizontalRadius = (image.hotspot.width * asset.width) / 2\n const hotSpotCenterX = image.hotspot.x * asset.width\n const hotSpotCenterY = image.hotspot.y * asset.height\n const hotspot = {\n left: hotSpotCenterX - hotSpotHorizontalRadius,\n top: hotSpotCenterY - hotSpotVerticalRadius,\n right: hotSpotCenterX + hotSpotHorizontalRadius,\n bottom: hotSpotCenterY + hotSpotVerticalRadius,\n }\n\n // If irrelevant, or if we are requested to: don't perform crop/fit based on\n // the crop/hotspot.\n if (!(spec.rect || spec.focalPoint || spec.ignoreImageParams || spec.crop)) {\n spec = {...spec, ...fit({crop, hotspot}, spec)}\n }\n\n return specToImageUrl({...spec, asset})\n}\n\n// eslint-disable-next-line complexity\nfunction specToImageUrl(spec: ImageUrlBuilderOptionsWithAsset) {\n const cdnUrl = (spec.baseUrl || 'https://cdn.sanity.io').replace(/\\/+$/, '')\n const filename = `${spec.asset.id}-${spec.asset.width}x${spec.asset.height}.${spec.asset.format}`\n const baseUrl = `${cdnUrl}/images/${spec.projectId}/${spec.dataset}/${filename}`\n\n const params = []\n\n if (spec.rect) {\n // Only bother url with a crop if it actually crops anything\n const {left, top, width, height} = spec.rect\n const isEffectiveCrop =\n left !== 0 || top !== 0 || height !== spec.asset.height || width !== spec.asset.width\n\n if (isEffectiveCrop) {\n params.push(`rect=${left},${top},${width},${height}`)\n }\n }\n\n if (spec.bg) {\n params.push(`bg=${spec.bg}`)\n }\n\n if (spec.focalPoint) {\n params.push(`fp-x=${spec.focalPoint.x}`)\n params.push(`fp-y=${spec.focalPoint.y}`)\n }\n\n const flip = [spec.flipHorizontal && 'h', spec.flipVertical && 'v'].filter(Boolean).join('')\n if (flip) {\n params.push(`flip=${flip}`)\n }\n\n // Map from spec name to url param name, and allow using the actual param name as an alternative\n SPEC_NAME_TO_URL_NAME_MAPPINGS.forEach((mapping) => {\n const [specName, param] = mapping\n if (typeof spec[specName] !== 'undefined') {\n params.push(`${param}=${encodeURIComponent(spec[specName])}`)\n } else if (typeof spec[param] !== 'undefined') {\n params.push(`${param}=${encodeURIComponent(spec[param])}`)\n }\n })\n\n if (params.length === 0) {\n return baseUrl\n }\n\n return `${baseUrl}?${params.join('&')}`\n}\n\nfunction fit(\n source: {crop: CropSpec; hotspot: HotspotSpec},\n spec: ImageUrlBuilderOptions\n): SanityImageFitResult {\n let cropRect: SanityImageRect\n\n const imgWidth = spec.width\n const imgHeight = spec.height\n\n // If we are not constraining the aspect ratio, we'll just use the whole crop\n if (!(imgWidth && imgHeight)) {\n return {width: imgWidth, height: imgHeight, rect: source.crop}\n }\n\n const crop = source.crop\n const hotspot = source.hotspot\n\n // If we are here, that means aspect ratio is locked and fitting will be a bit harder\n const desiredAspectRatio = imgWidth / imgHeight\n const cropAspectRatio = crop.width / crop.height\n\n if (cropAspectRatio > desiredAspectRatio) {\n // The crop is wider than the desired aspect ratio. That means we are cutting from the sides\n const height = Math.round(crop.height)\n const width = Math.round(height * desiredAspectRatio)\n const top = Math.max(0, Math.round(crop.top))\n\n // Center output horizontally over hotspot\n const hotspotXCenter = Math.round((hotspot.right - hotspot.left) / 2 + hotspot.left)\n let left = Math.max(0, Math.round(hotspotXCenter - width / 2))\n\n // Keep output within crop\n if (left < crop.left) {\n left = crop.left\n } else if (left + width > crop.left + crop.width) {\n left = crop.left + crop.width - width\n }\n\n cropRect = {left, top, width, height}\n } else {\n // The crop is taller than the desired ratio, we are cutting from top and bottom\n const width = crop.width\n const height = Math.round(width / desiredAspectRatio)\n const left = Math.max(0, Math.round(crop.left))\n\n // Center output vertically over hotspot\n const hotspotYCenter = Math.round((hotspot.bottom - hotspot.top) / 2 + hotspot.top)\n let top = Math.max(0, Math.round(hotspotYCenter - height / 2))\n\n // Keep output rect within crop\n if (top < crop.top) {\n top = crop.top\n } else if (top + height > crop.top + crop.height) {\n top = crop.top + crop.height - height\n }\n\n cropRect = {left, top, width, height}\n }\n\n return {\n width: imgWidth,\n height: imgHeight,\n rect: cropRect,\n }\n}\n\n// For backwards-compatibility\nexport {parseSource}\n","import {\n AutoMode,\n CropMode,\n FitMode,\n ImageFormat,\n ImageUrlBuilderOptions,\n ImageUrlBuilderOptionsWithAliases,\n SanityModernClientLike,\n Orientation,\n SanityClientLike,\n SanityImageSource,\n SanityProjectDetails,\n} from './types'\nimport urlForImage, {SPEC_NAME_TO_URL_NAME_MAPPINGS} from './urlForImage'\n\nconst validFits = ['clip', 'crop', 'fill', 'fillmax', 'max', 'scale', 'min']\nconst validCrops = ['top', 'bottom', 'left', 'right', 'center', 'focalpoint', 'entropy']\nconst validAutoModes = ['format']\n\nfunction isSanityModernClientLike(\n client?: SanityClientLike | SanityProjectDetails | SanityModernClientLike\n): client is SanityModernClientLike {\n return client && 'config' in client ? typeof client.config === 'function' : false\n}\n\nfunction isSanityClientLike(\n client?: SanityClientLike | SanityProjectDetails | SanityModernClientLike\n): client is SanityClientLike {\n return client && 'clientConfig' in client ? typeof client.clientConfig === 'object' : false\n}\n\nfunction rewriteSpecName(key: string) {\n const specs = SPEC_NAME_TO_URL_NAME_MAPPINGS\n for (const entry of specs) {\n const [specName, param] = entry\n if (key === specName || key === param) {\n return specName\n }\n }\n\n return key\n}\n\nexport default function urlBuilder(\n options?: SanityClientLike | SanityProjectDetails | SanityModernClientLike\n) {\n // Did we get a modernish client?\n if (isSanityModernClientLike(options)) {\n // Inherit config from client\n const {apiHost: apiUrl, projectId, dataset} = options.config()\n const apiHost = apiUrl || 'https://api.sanity.io'\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId,\n dataset,\n })\n }\n\n // Did we get a SanityClient?\n const client = options as SanityClientLike\n if (isSanityClientLike(client)) {\n // Inherit config from client\n const {apiHost: apiUrl, projectId, dataset} = client.clientConfig\n const apiHost = apiUrl || 'https://api.sanity.io'\n return new ImageUrlBuilder(null, {\n baseUrl: apiHost.replace(/^https:\\/\\/api\\./, 'https://cdn.'),\n projectId,\n dataset,\n })\n }\n\n // Or just accept the options as given\n return new ImageUrlBuilder(null, options as ImageUrlBuilderOptions)\n}\n\nexport class ImageUrlBuilder {\n public options: ImageUrlBuilderOptions\n\n constructor(parent: ImageUrlBuilder | null, options: ImageUrlBuilderOptions) {\n this.options = parent\n ? {...(parent.options || {}), ...(options || {})} // Merge parent options\n : {...(options || {})} // Copy options\n }\n\n withOptions(options: Partial<ImageUrlBuilderOptionsWithAliases>) {\n const baseUrl = options.baseUrl || this.options.baseUrl\n\n const newOptions: {[key: string]: any} = {baseUrl}\n for (const key in options) {\n if (options.hasOwnProperty(key)) {\n const specKey = rewriteSpecName(key)\n newOptions[specKey] = options[key]\n }\n }\n\n return new ImageUrlBuilder(this, {baseUrl, ...newOptions})\n }\n\n // The image to be represented. Accepts a Sanity 'image'-document, 'asset'-document or\n // _id of asset. To get the benefit of automatic hot-spot/crop integration with the content\n // studio, the 'image'-document must be provided.\n image(source: SanityImageSource) {\n return this.withOptions({source})\n }\n\n // Specify the dataset\n dataset(dataset: string) {\n return this.withOptions({dataset})\n }\n\n // Specify the projectId\n projectId(projectId: string) {\n return this.withOptions({projectId})\n }\n\n // Specify background color\n bg(bg: string) {\n return this.withOptions({bg})\n }\n\n // Set DPR scaling factor\n dpr(dpr: number) {\n // A DPR of 1 is the default - so only include it if we have a different value\n return this.withOptions(dpr && dpr !== 1 ? {dpr} : {})\n }\n\n // Specify the width of the image in pixels\n width(width: number) {\n return this.withOptions({width})\n }\n\n // Specify the height of the image in pixels\n height(height: number) {\n return this.withOptions({height})\n }\n\n // Specify focal point in fraction of image dimensions. Each component 0.0-1.0\n focalPoint(x: number, y: number) {\n return this.withOptions({focalPoint: {x, y}})\n }\n\n maxWidth(maxWidth: number) {\n return this.withOptions({maxWidth})\n }\n\n minWidth(minWidth: number) {\n return this.withOptions({minWidth})\n }\n\n maxHeight(maxHeight: number) {\n return this.withOptions({maxHeight})\n }\n\n minHeight(minHeight: number) {\n return this.withOptions({minHeight})\n }\n\n // Specify width and height in pixels\n size(width: number, height: number) {\n return this.withOptions({width, height})\n }\n\n // Specify blur between 0 and 100\n blur(blur: number) {\n return this.withOptions({blur})\n }\n\n sharpen(sharpen: number) {\n return this.withOptions({sharpen})\n }\n\n // Specify the desired rectangle of the image\n rect(left: number, top: number, width: number, height: number) {\n return this.withOptions({rect: {left, top, width, height}})\n }\n\n // Specify the image format of the image. 'jpg', 'pjpg', 'png', 'webp'\n format(format: ImageFormat) {\n return this.withOptions({format})\n }\n\n invert(invert: boolean) {\n return this.withOptions({invert})\n }\n\n // Rotation in degrees 0, 90, 180, 270\n orientation(orientation: Orientation) {\n return this.withOptions({orientation})\n }\n\n // Compression quality 0-100\n quality(quality: number) {\n return this.withOptions({quality})\n }\n\n // Make it a download link. Parameter is default filename.\n forceDownload(download: boolean | string) {\n return this.withOptions({download})\n }\n\n // Flip image horizontally\n flipHorizontal() {\n return this.withOptions({flipHorizontal: true})\n }\n\n // Flip image vertically\n flipVertical() {\n return this.withOptions({flipVertical: true})\n }\n\n // Ignore crop/hotspot from image record, even when present\n ignoreImageParams() {\n return this.withOptions({ignoreImageParams: true})\n }\n\n fit(value: FitMode) {\n if (validFits.indexOf(value) === -1) {\n throw new Error(`Invalid fit mode \"${value}\"`)\n }\n\n return this.withOptions({fit: value})\n }\n\n crop(value: CropMode) {\n if (validCrops.indexOf(value) === -1) {\n throw new Error(`Invalid crop mode \"${value}\"`)\n }\n\n return this.withOptions({crop: value})\n }\n\n // Saturation\n saturation(saturation: number) {\n return this.withOptions({saturation})\n }\n\n auto(value: AutoMode) {\n if (validAutoModes.indexOf(value) === -1) {\n throw new Error(`Invalid auto mode \"${value}\"`)\n }\n\n return this.withOptions({auto: value})\n }\n\n // Specify the number of pixels to pad the image\n pad(pad: number) {\n return this.withOptions({pad})\n }\n\n // Gets the url based on the submitted parameters\n url() {\n return urlForImage(this.options)\n }\n\n // Alias for url()\n toString() {\n return this.url()\n }\n}\n"],"names":["example","parseAssetId","ref","split","id","dimensionString","format","Error","imgWidthStr","imgHeightStr","width","height","isValidAssetId","isFinite","isRef","src","source","_ref","isAsset","_id","isAssetStub","asset","url","parseSource","image","isUrl","urlToId","img","crop","hotspot","applyDefaults","test","parts","slice","replace","result","left","top","bottom","right","x","y","SPEC_NAME_TO_URL_NAME_MAPPINGS","urlForImage","options","spec","JSON","stringify","cropLeft","Math","round","cropTop","hotSpotVerticalRadius","hotSpotHorizontalRadius","hotSpotCenterX","hotSpotCenterY","rect","focalPoint","ignoreImageParams","fit","specToImageUrl","cdnUrl","baseUrl","filename","projectId","dataset","params","isEffectiveCrop","push","bg","flip","flipHorizontal","flipVertical","filter","Boolean","join","forEach","mapping","specName","param","encodeURIComponent","length","cropRect","imgWidth","imgHeight","desiredAspectRatio","cropAspectRatio","max","hotspotXCenter","hotspotYCenter","validFits","validCrops","validAutoModes","isSanityModernClientLike","client","config","isSanityClientLike","clientConfig","rewriteSpecName","key","specs","entry","urlBuilder","apiUrl","apiHost","ImageUrlBuilder","parent","withOptions","newOptions","hasOwnProperty","specKey","dpr","maxWidth","minWidth","maxHeight","minHeight","size","blur","sharpen","invert","orientation","quality","forceDownload","download","value","indexOf","saturation","auto","pad","toString"],"mappings":"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"}
|