image-url.esm.mjs.map 35 KB

1
  1. {"version":3,"file":"image-url.esm.mjs","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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"}