pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 33.9 kB
Source Map (JSON)
{"version":3,"file":"ExtractSystem.mjs","sources":["../../../../../src/rendering/renderers/shared/extract/ExtractSystem.ts"],"sourcesContent":["import { ExtensionType } from '../../../../extensions/Extensions';\nimport { Container } from '../../../../scene/container/Container';\nimport { Texture } from '../texture/Texture';\n\nimport type { ColorSource } from '../../../../color/Color';\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport type { Renderer } from '../../types';\nimport type { System } from '../system/System';\nimport type { GetPixelsOutput } from '../texture/GenerateCanvas';\nimport type { GenerateTextureOptions } from './GenerateTextureSystem';\n\nconst imageTypes = {\n png: 'image/png',\n jpg: 'image/jpeg',\n webp: 'image/webp',\n};\n\ntype Formats = keyof typeof imageTypes;\n\n/**\n * Options for creating an image from a renderer.\n * Controls the output format and quality of extracted images.\n * @example\n * ```ts\n * // Extract as PNG (default)\n * const pngImage = await renderer.extract.image({\n * target: sprite,\n * format: 'png'\n * });\n *\n * // Extract as JPEG with quality setting\n * const jpgImage = await renderer.extract.image({\n * target: sprite,\n * format: 'jpg',\n * quality: 0.8\n * });\n *\n * // Extract as WebP for better compression\n * const webpImage = await renderer.extract.image({\n * target: sprite,\n * format: 'webp',\n * quality: 0.9\n * });\n * ```\n * @category rendering\n * @advanced\n */\nexport interface ImageOptions\n{\n /**\n * The format of the extracted image.\n * - 'png': Lossless format, best for images with text or sharp edges\n * - 'jpg': Lossy format, smaller file size, good for photos\n * - 'webp': Modern format with better compression\n * @example\n * ```ts\n * // Extract as PNG\n * const pngImage = await renderer.extract.image({\n * target: sprite,\n * format: 'png'\n * });\n * // Extract as JPEG\n * const jpgImage = await renderer.extract.image({\n * target: sprite,\n * format: 'jpg',\n * });\n * ```\n * @default 'png'\n */\n format?: Formats;\n\n /**\n * The quality of the extracted image, between 0 and 1.\n * Only applies to lossy formats (jpg, webp).\n * - 1: Maximum quality\n * - 0: Maximum compression\n * @example\n * ```ts\n * // Extract as JPEG with 80% quality\n * const jpgImage = await renderer.extract.image({\n * target: sprite,\n * format: 'jpg',\n * quality: 0.8\n * });\n * // Extract as WebP with 90% quality\n * const webpImage = await renderer.extract.image({\n * target: sprite,\n * format: 'webp',\n * quality: 0.9\n * });\n * ```\n * @default 1\n */\n quality?: number;\n}\n\n/**\n * Options for extracting content from a renderer.\n * These options control how content is extracted and processed from the renderer.\n * @example\n * ```ts\n * // Basic extraction\n * const pixels = renderer.extract.pixels({\n * target: sprite,\n * });\n *\n * // Extract with custom region and resolution\n * const canvas = renderer.extract.canvas({\n * target: container,\n * frame: new Rectangle(0, 0, 100, 100),\n * resolution: 2,\n * });\n *\n * // Extract with background color and anti-aliasing\n * const image = await renderer.extract.image({\n * target: graphics,\n * clearColor: '#ff0000',\n * antialias: true\n * });\n * ```\n * @category rendering\n * @advanced\n */\nexport interface BaseExtractOptions\n{\n /**\n * The target to extract. Can be a Container or Texture.\n * @example\n * ```ts\n * // Extract from a sprite\n * const sprite = new Sprite(texture);\n * renderer.extract.pixels({ target: sprite });\n *\n * // Extract from a texture directly\n * renderer.extract.pixels({ target: texture });\n * ```\n */\n target: Container | Texture;\n\n /**\n * The region of the target to extract. If not specified, extracts the entire target.\n * @example\n * ```ts\n * // Extract a specific region\n * renderer.extract.canvas({\n * target: sprite,\n * frame: new Rectangle(10, 10, 100, 100)\n * });\n * ```\n */\n frame?: Rectangle;\n\n /**\n * The resolution of the extracted content. Higher values create sharper images.\n * @default 1\n * @example\n * ```ts\n * // Extract at 2x resolution for retina displays\n * renderer.extract.image({\n * target: sprite,\n * resolution: 2\n * });\n * ```\n */\n resolution?: number;\n\n /**\n * The color used to clear the extracted content before rendering.\n * Can be a hex number, string, or array of numbers.\n * @example\n * ```ts\n * // Clear with red background\n * renderer.extract.canvas({\n * target: sprite,\n * clearColor: '#ff0000'\n * });\n *\n * // Clear with semi-transparent black\n * renderer.extract.canvas({\n * target: sprite,\n * clearColor: [0, 0, 0, 0.5]\n * });\n * ```\n */\n clearColor?: ColorSource;\n\n /**\n * Whether to enable anti-aliasing during extraction.\n * Improves quality but may affect performance.\n * @default false\n * @example\n * ```ts\n * // Enable anti-aliasing for smoother edges\n * renderer.extract.image({\n * target: graphics,\n * antialias: true\n * });\n * ```\n */\n antialias?: boolean;\n}\n/**\n * Options for extracting an HTMLImage from the renderer.\n * Combines base extraction options with image-specific settings.\n * @example\n * ```ts\n * // Basic PNG extraction\n * const image = await renderer.extract.image({\n * target: sprite,\n * format: 'png'\n * });\n *\n * // High-quality JPEG with custom region\n * const image = await renderer.extract.image({\n * target: container,\n * format: 'jpg',\n * quality: 0.9,\n * frame: new Rectangle(0, 0, 100, 100),\n * resolution: 2\n * });\n *\n * // WebP with background and anti-aliasing\n * const image = await renderer.extract.image({\n * target: graphics,\n * format: 'webp',\n * quality: 0.8,\n * clearColor: '#ff0000',\n * antialias: true\n * });\n * ```\n *\n * Combines all options from:\n * - {@link BaseExtractOptions} for basic extraction settings\n * - {@link ImageOptions} for image format and quality settings\n *\n * Common use cases:\n * - Capturing game screenshots\n * - Saving rendered content\n * - Creating image thumbnails\n * - Exporting canvas content\n * @see {@link ExtractSystem.image} For the method that uses these options\n * @see {@link ExtractSystem.base64} For base64 encoding\n * @category rendering\n * @advanced\n * @interface\n */\nexport type ExtractImageOptions = BaseExtractOptions & ImageOptions;\n/**\n * Options for extracting and downloading content from a renderer.\n * Combines base extraction options with download-specific settings.\n * @example\n * ```ts\n * // Basic download with default filename\n * renderer.extract.download({\n * target: sprite\n * });\n *\n * // Download with custom filename and region\n * renderer.extract.download({\n * target: container,\n * filename: 'screenshot.png',\n * frame: new Rectangle(0, 0, 100, 100)\n * });\n *\n * // Download with high resolution and background\n * renderer.extract.download({\n * target: stage,\n * filename: 'hd-capture.png',\n * resolution: 2,\n * clearColor: '#ff0000'\n * });\n *\n * // Download with anti-aliasing\n * renderer.extract.download({\n * target: graphics,\n * filename: 'smooth.png',\n * antialias: true\n * });\n * ```\n *\n * Combines all options from:\n * - {@link BaseExtractOptions} for basic extraction settings\n * - Additional download-specific options\n *\n * Common use cases:\n * - Saving game screenshots\n * - Exporting rendered content\n * - Creating downloadable assets\n * - Saving canvas state\n * @see {@link ExtractSystem.download} For the method that uses these options\n * @see {@link ExtractSystem.image} For creating images without download\n * @category rendering\n * @advanced\n * @interface\n */\nexport type ExtractDownloadOptions = BaseExtractOptions & {\n /**\n * The filename to use when downloading the content.\n * Should include the desired file extension (e.g., .png).\n * @default 'image.png'\n * @example\n * ```ts\n * renderer.extract.download({\n * target: sprite,\n * filename: 'my-screenshot.png'\n * });\n * ```\n */\n filename: string;\n};\n/**\n * Options for extracting content from a renderer. Represents a union of all possible extraction option types.\n * Used by various extraction methods to support different output formats and configurations.\n * @example\n * ```ts\n * // Basic canvas extraction\n * const canvas = renderer.extract.canvas({\n * target: sprite\n * });\n *\n * // Image extraction with format\n * const image = await renderer.extract.image({\n * target: sprite,\n * format: 'png',\n * quality: 1\n * });\n *\n * // Download with filename\n * renderer.extract.download({\n * target: sprite,\n * filename: 'screenshot.png'\n * });\n *\n * // Advanced extraction with multiple options\n * const image = await renderer.extract.image({\n * target: container,\n * frame: new Rectangle(0, 0, 100, 100),\n * resolution: 2,\n * clearColor: '#ff0000',\n * antialias: true,\n * format: 'webp',\n * quality: 0.8\n * });\n * ```\n *\n * Supports three types of options:\n * - {@link BaseExtractOptions} - Basic extraction settings\n * - {@link ExtractImageOptions} - Image-specific settings with format and quality\n * - {@link ExtractDownloadOptions} - Download settings with filename\n *\n * Common use cases:\n * - Extracting raw pixels\n * - Creating canvas elements\n * - Generating downloadable images\n * - Taking screenshots\n * - Creating thumbnails\n * @see {@link ExtractSystem.canvas} For canvas extraction\n * @see {@link ExtractSystem.image} For image extraction\n * @see {@link ExtractSystem.download} For downloading content\n * @category rendering\n * @advanced\n */\nexport type ExtractOptions = BaseExtractOptions | ExtractImageOptions | ExtractDownloadOptions;\n\n/**\n * System for exporting content from a renderer. It provides methods to extract content as images,\n * canvases, or raw pixel data. Available through `renderer.extract`.\n * @example\n * ```ts\n * import { Application, Graphics } from 'pixi.js';\n *\n * // Create a new application\n * const app = new Application();\n * await app.init();\n *\n * // Draw something to extract\n * const graphics = new Graphics()\n * .circle(0, 0, 50)\n * .fill(0xFF0000);\n *\n * // Basic extraction examples\n * const image = await app.renderer.extract.image(graphics); // As HTMLImageElement\n * const canvas = app.renderer.extract.canvas(graphics); // As Canvas\n * const pixels = app.renderer.extract.pixels(graphics); // As pixel data\n * const base64 = await app.renderer.extract.base64(graphics); // As base64 string\n *\n * // Advanced extraction with options\n * const customImage = await app.renderer.extract.image({\n * target: graphics,\n * format: 'png',\n * resolution: 2,\n * frame: new Rectangle(0, 0, 100, 100),\n * clearColor: '#00000000'\n * });\n *\n * // Download content\n * app.renderer.extract.download({\n * target: graphics,\n * filename: 'my-image.png'\n * });\n *\n * // Debug visualization\n * app.renderer.extract.log(graphics);\n * ```\n *\n * Features:\n * - Extract as various formats (PNG, JPEG, WebP)\n * - Control output quality and resolution\n * - Extract specific regions\n * - Download extracted content\n * - Debug visualization\n *\n * Common Use Cases:\n * - Creating thumbnails\n * - Saving game screenshots\n * - Processing visual content\n * - Debugging renders\n * - Creating textures from rendered content\n *\n * Performance Considerations:\n * - Extraction operations are relatively expensive\n * - Consider caching results for frequently used content\n * - Be mindful of resolution and format choices\n * - Large extractions may impact performance\n * @category rendering\n * @standard\n */\nexport class ExtractSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ],\n name: 'extract',\n } as const;\n\n /**\n * Default options for image extraction.\n * @example\n * ```ts\n * // Customize default options\n * ExtractSystem.defaultImageOptions.format = 'webp';\n * ExtractSystem.defaultImageOptions.quality = 0.8;\n *\n * // Use defaults\n * const image = await renderer.extract.image(sprite);\n * ```\n */\n public static defaultImageOptions: ImageOptions = {\n format: 'png' as Formats,\n quality: 1,\n };\n\n private _renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this._renderer = renderer;\n }\n\n private _normalizeOptions<T extends ExtractOptions>(\n options: ExtractImageOptions | Container | Texture,\n defaults: Partial<T> = {},\n ): T\n {\n if (options instanceof Container || options instanceof Texture)\n {\n return {\n target: options,\n ...defaults\n } as T;\n }\n\n return {\n ...defaults,\n ...options,\n } as T;\n }\n\n /**\n * Creates an HTMLImageElement from a display object or texture.\n * @param options - Options for creating the image, or the target to extract\n * @returns Promise that resolves with the generated HTMLImageElement\n * @example\n * ```ts\n * // Basic usage with a sprite\n * const sprite = new Sprite(texture);\n * const image = await renderer.extract.image(sprite);\n * document.body.appendChild(image);\n *\n * // Advanced usage with options\n * const image = await renderer.extract.image({\n * target: container,\n * format: 'webp',\n * quality: 0.8,\n * frame: new Rectangle(0, 0, 100, 100),\n * resolution: 2,\n * clearColor: '#ff0000',\n * antialias: true\n * });\n *\n * // Extract directly from a texture\n * const texture = Texture.from('myTexture.png');\n * const image = await renderer.extract.image(texture);\n * ```\n * @see {@link ExtractImageOptions} For detailed options\n * @see {@link ExtractSystem.base64} For base64 string output\n * @see {@link ExtractSystem.canvas} For canvas output\n * @category rendering\n */\n public async image(options: ExtractImageOptions | Container | Texture): Promise<HTMLImageElement>\n {\n const image = new Image();\n\n image.src = await this.base64(options);\n\n return image;\n }\n\n /**\n * Converts the target into a base64 encoded string.\n *\n * This method works by first creating\n * a canvas using `Extract.canvas` and then converting it to a base64 string.\n * @param options - The options for creating the base64 string, or the target to extract\n * @returns Promise that resolves with the base64 encoded string\n * @example\n * ```ts\n * // Basic usage with a sprite\n * const sprite = new Sprite(texture);\n * const base64 = await renderer.extract.base64(sprite);\n * console.log(base64); // data:image/png;base64,...\n *\n * // Advanced usage with options\n * const base64 = await renderer.extract.base64({\n * target: container,\n * format: 'webp',\n * quality: 0.8,\n * frame: new Rectangle(0, 0, 100, 100),\n * resolution: 2\n * });\n * ```\n * @throws Will throw an error if the platform doesn't support any of:\n * - ICanvas.toDataURL\n * - ICanvas.toBlob\n * - ICanvas.convertToBlob\n * @see {@link ExtractImageOptions} For detailed options\n * @see {@link ExtractSystem.canvas} For canvas output\n * @see {@link ExtractSystem.image} For HTMLImage output\n * @category rendering\n */\n public async base64(options: ExtractImageOptions | Container | Texture): Promise<string>\n {\n options = this._normalizeOptions<ExtractImageOptions>(\n options,\n ExtractSystem.defaultImageOptions\n );\n\n const { format, quality } = options;\n\n const canvas = this.canvas(options);\n\n if (canvas.toBlob !== undefined)\n {\n return new Promise<string>((resolve, reject) =>\n {\n canvas.toBlob!((blob) =>\n {\n if (!blob)\n {\n reject(new Error('ICanvas.toBlob failed!'));\n\n return;\n }\n\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }, imageTypes[format], quality);\n });\n }\n if (canvas.toDataURL !== undefined)\n {\n return canvas.toDataURL(imageTypes[format], quality);\n }\n if (canvas.convertToBlob !== undefined)\n {\n const blob = await canvas.convertToBlob({ type: imageTypes[format], quality });\n\n return new Promise<string>((resolve, reject) =>\n {\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n\n throw new Error('Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, '\n + 'or ICanvas.convertToBlob to be implemented');\n }\n\n /**\n * Creates a Canvas element, renders the target to it and returns it.\n * This method is useful for creating static images or when you need direct canvas access.\n * @param options - The options for creating the canvas, or the target to extract\n * @returns A Canvas element with the texture rendered on\n * @example\n * ```ts\n * // Basic canvas extraction from a sprite\n * const sprite = new Sprite(texture);\n * const canvas = renderer.extract.canvas(sprite);\n * document.body.appendChild(canvas);\n *\n * // Extract with custom region\n * const canvas = renderer.extract.canvas({\n * target: container,\n * frame: new Rectangle(0, 0, 100, 100)\n * });\n *\n * // Extract with high resolution\n * const canvas = renderer.extract.canvas({\n * target: sprite,\n * resolution: 2,\n * clearColor: '#ff0000'\n * });\n *\n * // Extract directly from a texture\n * const texture = Texture.from('myTexture.png');\n * const canvas = renderer.extract.canvas(texture);\n *\n * // Extract with anti-aliasing\n * const canvas = renderer.extract.canvas({\n * target: graphics,\n * antialias: true\n * });\n * ```\n * @see {@link ExtractOptions} For detailed options\n * @see {@link ExtractSystem.image} For HTMLImage output\n * @see {@link ExtractSystem.pixels} For raw pixel data\n * @category rendering\n */\n public canvas(options: ExtractOptions | Container | Texture): ICanvas\n {\n options = this._normalizeOptions(options);\n\n const target = options.target;\n\n const renderer = this._renderer;\n\n if (target instanceof Texture)\n {\n return renderer.texture.generateCanvas(target);\n }\n\n const texture = renderer.textureGenerator.generateTexture(options as GenerateTextureOptions);\n\n const canvas = renderer.texture.generateCanvas(texture);\n\n texture.destroy(true);\n\n return canvas;\n }\n\n /**\n * Returns a one-dimensional array containing the pixel data of the entire texture in RGBA order,\n * with integer values between 0 and 255 (inclusive).\n * > [!NOE] The returned array is a flat Uint8Array where every 4 values represent RGBA\n * @param options - The options for extracting the image, or the target to extract\n * @returns One-dimensional Uint8Array containing the pixel data in RGBA format\n * @example\n * ```ts\n * // Basic pixel extraction\n * const sprite = new Sprite(texture);\n * const pixels = renderer.extract.pixels(sprite);\n * console.log(pixels[0], pixels[1], pixels[2], pixels[3]); // R,G,B,A values\n *\n * // Extract with custom region\n * const pixels = renderer.extract.pixels({\n * target: sprite,\n * frame: new Rectangle(0, 0, 100, 100)\n * });\n *\n * // Extract with high resolution\n * const pixels = renderer.extract.pixels({\n * target: sprite,\n * resolution: 2\n * });\n * ```\n * @see {@link ExtractOptions} For detailed options\n * @see {@link ExtractSystem.canvas} For canvas output\n * @see {@link ExtractSystem.image} For image output\n * @category rendering\n */\n public pixels(options: ExtractOptions | Container | Texture): GetPixelsOutput\n {\n options = this._normalizeOptions(options);\n\n const target = options.target;\n\n const renderer = this._renderer;\n const texture = target instanceof Texture\n ? target\n : renderer.textureGenerator.generateTexture(options as GenerateTextureOptions);\n\n const pixelInfo = renderer.texture.getPixels(texture);\n\n if (target instanceof Container)\n {\n // destroy generated texture\n texture.destroy(true);\n }\n\n return pixelInfo;\n }\n\n /**\n * Creates a texture from a display object or existing texture.\n *\n * This is useful for creating\n * reusable textures from rendered content or making copies of existing textures.\n * > [!NOTE] The returned texture should be destroyed when no longer needed\n * @param options - The options for creating the texture, or the target to extract\n * @returns A new texture containing the extracted content\n * @example\n * ```ts\n * // Basic texture extraction from a sprite\n * const sprite = new Sprite(texture);\n * const extractedTexture = renderer.extract.texture(sprite);\n *\n * // Extract with custom region\n * const regionTexture = renderer.extract.texture({\n * target: container,\n * frame: new Rectangle(0, 0, 100, 100)\n * });\n *\n * // Extract with high resolution\n * const hiResTexture = renderer.extract.texture({\n * target: sprite,\n * resolution: 2,\n * clearColor: '#ff0000'\n * });\n *\n * // Create a new sprite from extracted texture\n * const newSprite = new Sprite(\n * renderer.extract.texture({\n * target: graphics,\n * antialias: true\n * })\n * );\n *\n * // Clean up when done\n * extractedTexture.destroy(true);\n * ```\n * @see {@link ExtractOptions} For detailed options\n * @see {@link Texture} For texture management\n * @see {@link GenerateTextureSystem} For texture generation\n * @category rendering\n */\n public texture(options: ExtractOptions | Container | Texture): Texture\n {\n options = this._normalizeOptions(options);\n\n if (options.target instanceof Texture) return options.target;\n\n return this._renderer.textureGenerator.generateTexture(options as GenerateTextureOptions);\n }\n\n /**\n * Extracts and downloads content from the renderer as an image file.\n * This is a convenient way to save screenshots or export rendered content.\n * > [!NOTE] The download will use PNG format regardless of the filename extension\n * @param options - The options for downloading and extracting the image, or the target to extract\n * @example\n * ```ts\n * // Basic download with default filename\n * const sprite = new Sprite(texture);\n * renderer.extract.download(sprite); // Downloads as 'image.png'\n *\n * // Download with custom filename\n * renderer.extract.download({\n * target: sprite,\n * filename: 'screenshot.png'\n * });\n *\n * // Download with custom region\n * renderer.extract.download({\n * target: container,\n * filename: 'region.png',\n * frame: new Rectangle(0, 0, 100, 100)\n * });\n *\n * // Download with high resolution and background\n * renderer.extract.download({\n * target: stage,\n * filename: 'hd-screenshot.png',\n * resolution: 2,\n * clearColor: '#ff0000'\n * });\n *\n * // Download with anti-aliasing\n * renderer.extract.download({\n * target: graphics,\n * filename: 'smooth.png',\n * antialias: true\n * });\n * ```\n * @see {@link ExtractDownloadOptions} For detailed options\n * @see {@link ExtractSystem.image} For creating images without download\n * @see {@link ExtractSystem.canvas} For canvas output\n * @category rendering\n */\n public download(options: ExtractDownloadOptions | Container | Texture)\n {\n options = this._normalizeOptions<ExtractDownloadOptions>(options);\n\n const canvas = this.canvas(options);\n\n const link = document.createElement('a');\n\n link.download = options.filename ?? 'image.png';\n link.href = canvas.toDataURL('image/png');\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n /**\n * Logs the target to the console as an image. This is a useful way to debug what's happening in the renderer.\n * The image will be displayed in the browser's console using CSS background images.\n * @param options - The options for logging the image, or the target to log\n * @param options.width - The width of the logged image preview in the console (in pixels)\n * @example\n * ```ts\n * // Basic usage\n * const sprite = new Sprite(texture);\n * renderer.extract.log(sprite);\n * ```\n * @see {@link ExtractSystem.canvas} For getting raw canvas output\n * @see {@link ExtractSystem.pixels} For raw pixel data\n * @category rendering\n * @advanced\n */\n public log(options: (ExtractOptions & {width?: number}) | Container | Texture)\n {\n const width = options.width ?? 200;\n\n options = this._normalizeOptions(options);\n\n const canvas = this.canvas(options);\n\n const base64 = canvas.toDataURL();\n\n // eslint-disable-next-line no-console\n console.log(`[Pixi Texture] ${canvas.width}px ${canvas.height}px`);\n\n const style = [\n 'font-size: 1px;',\n `padding: ${width}px ${300}px;`,\n `background: url(${base64}) no-repeat;`,\n 'background-size: contain;',\n ].join(' ');\n\n // eslint-disable-next-line no-console\n console.log('%c ', style);\n }\n\n public destroy(): void\n {\n this._renderer = null as any as Renderer;\n }\n}\n"],"names":[],"mappings":"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"}