{"version":3,"file":"imageDataPlugin.js","names":[],"sources":["esm/vite/plugins/imageDataPlugin.js"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, relative, resolve, sep } from \"node:path\";\nimport { prefixRegex } from \"rolldown/filter\";\nimport { normalizePath } from \"vite\";\nimport { processImageMeta } from \"../../image/getImageData\";\nconst IMAGEDATA_SUFFIX = \"?imagedata\";\nconst VIRTUAL_PREFIX = \"\\0imagedata:\";\nconst IMAGEDATA_SUFFIX_RE = /\\?imagedata$/;\nfunction imageDataPlugin() {\n  let publicDir;\n  let root;\n  function getSrcPath(filePath) {\n    return filePath.startsWith(publicDir) ? \"/\" + normalizePath(relative(publicDir, filePath)) : \"/\" + normalizePath(relative(root, filePath));\n  }\n  function isPathWithinBounds(filePath, allowedDir) {\n    const resolved = resolve(filePath);\n    const allowed = resolve(allowedDir);\n    return resolved.startsWith(allowed + sep) || resolved === allowed;\n  }\n  function createImageDataExport(src, width = 0, height = 0, blurDataURL = \"\") {\n    return `export default ${JSON.stringify({ src, width, height, blurDataURL })}`;\n  }\n  return {\n    name: \"one:imagedata\",\n    enforce: \"pre\",\n    configResolved(resolvedConfig) {\n      publicDir = resolvedConfig.publicDir;\n      root = resolvedConfig.root;\n    },\n    resolveId: {\n      filter: { id: IMAGEDATA_SUFFIX_RE },\n      async handler(id, importer) {\n        const cleanId = id.slice(0, -IMAGEDATA_SUFFIX.length);\n        let filePath;\n        let allowedDir;\n        if (cleanId.startsWith(\"/\")) {\n          filePath = resolve(publicDir, cleanId.slice(1));\n          allowedDir = publicDir;\n        } else if (importer) {\n          filePath = resolve(dirname(importer.replace(VIRTUAL_PREFIX, \"\")), cleanId);\n          allowedDir = root;\n        } else {\n          filePath = resolve(root, cleanId);\n          allowedDir = root;\n        }\n        if (!isPathWithinBounds(filePath, allowedDir)) {\n          console.warn(`[one] ?imagedata: Path traversal blocked: ${cleanId}`);\n          return null;\n        }\n        if (!existsSync(filePath)) {\n          console.warn(`[one] ?imagedata: File not found: ${filePath}`);\n          return null;\n        }\n        return VIRTUAL_PREFIX + filePath;\n      }\n    },\n    load: {\n      filter: { id: prefixRegex(VIRTUAL_PREFIX) },\n      async handler(id) {\n        const filePath = id.slice(VIRTUAL_PREFIX.length);\n        const src = getSrcPath(filePath);\n        this.addWatchFile(filePath);\n        const meta = await processImageMeta(filePath);\n        if (!meta) {\n          return createImageDataExport(src);\n        }\n        return createImageDataExport(src, meta.width, meta.height, meta.blurDataURL);\n      }\n    }\n  };\n}\nexport {\n  imageDataPlugin\n};\n//# sourceMappingURL=imageDataPlugin.js.map\n"],"mappings":";;;;;;;AAKA,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,SAAS,kBAAkB;CACzB,IAAI;CACJ,IAAI;CACJ,SAAS,WAAW,UAAU;EAC5B,OAAO,SAAS,WAAW,SAAS,IAAI,MAAM,cAAc,SAAS,WAAW,QAAQ,CAAC,IAAI,MAAM,cAAc,SAAS,MAAM,QAAQ,CAAC;CAC3I;CACA,SAAS,mBAAmB,UAAU,YAAY;EAChD,MAAM,WAAW,QAAQ,QAAQ;EACjC,MAAM,UAAU,QAAQ,UAAU;EAClC,OAAO,SAAS,WAAW,UAAU,GAAG,KAAK,aAAa;CAC5D;CACA,SAAS,sBAAsB,KAAK,QAAQ,GAAG,SAAS,GAAG,cAAc,IAAI;EAC3E,OAAO,kBAAkB,KAAK,UAAU;GAAE;GAAK;GAAO;GAAQ;EAAY,CAAC;CAC7E;CACA,OAAO;EACL,MAAM;EACN,SAAS;EACT,eAAe,gBAAgB;GAC7B,YAAY,eAAe;GAC3B,OAAO,eAAe;EACxB;EACA,WAAW;GACT,QAAQ,EAAE,IAAI,oBAAoB;GAClC,MAAM,QAAQ,IAAI,UAAU;IAC1B,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,iBAAiB,MAAM;IACpD,IAAI;IACJ,IAAI;IACJ,IAAI,QAAQ,WAAW,GAAG,GAAG;KAC3B,WAAW,QAAQ,WAAW,QAAQ,MAAM,CAAC,CAAC;KAC9C,aAAa;IACf,OAAO,IAAI,UAAU;KACnB,WAAW,QAAQ,QAAQ,SAAS,QAAQ,gBAAgB,EAAE,CAAC,GAAG,OAAO;KACzE,aAAa;IACf,OAAO;KACL,WAAW,QAAQ,MAAM,OAAO;KAChC,aAAa;IACf;IACA,IAAI,CAAC,mBAAmB,UAAU,UAAU,GAAG;KAC7C,QAAQ,KAAK,6CAA6C,SAAS;KACnE,OAAO;IACT;IACA,IAAI,CAAC,WAAW,QAAQ,GAAG;KACzB,QAAQ,KAAK,qCAAqC,UAAU;KAC5D,OAAO;IACT;IACA,OAAO,iBAAiB;GAC1B;EACF;EACA,MAAM;GACJ,QAAQ,EAAE,IAAI,YAAY,cAAc,EAAE;GAC1C,MAAM,QAAQ,IAAI;IAChB,MAAM,WAAW,GAAG,MAAM,eAAe,MAAM;IAC/C,MAAM,MAAM,WAAW,QAAQ;IAC/B,KAAK,aAAa,QAAQ;IAC1B,MAAM,OAAO,MAAM,iBAAiB,QAAQ;IAC5C,IAAI,CAAC,MAAM;KACT,OAAO,sBAAsB,GAAG;IAClC;IACA,OAAO,sBAAsB,KAAK,KAAK,OAAO,KAAK,QAAQ,KAAK,WAAW;GAC7E;EACF;CACF;AACF"}