UNPKG

@netlify/content-engine

Version:
80 lines 3.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.polyfillImageServiceDevRoutes = polyfillImageServiceDevRoutes; exports.addImageRoutes = addImageRoutes; const path_1 = __importDefault(require("path")); const fs_extra_1 = __importDefault(require("fs-extra")); const fetch_remote_file_1 = require("../../core-utils/fetch-remote-file"); const has_feature_1 = require("../has-feature"); const url_generator_1 = require("./utils/url-generator"); const mime_type_helpers_1 = require("./utils/mime-type-helpers"); const transform_images_1 = require("./transform-images"); const get_request_headers_for_url_1 = require("./utils/get-request-headers-for-url"); function polyfillImageServiceDevRoutes(app, store) { if ((0, has_feature_1.hasFeature)(`image-cdn`)) { return; } addImageRoutes(app, store); } function addImageRoutes(app, store) { app.get(`/_gatsby/file/:url/:filename`, async (req, res) => { const outputDir = path_1.default.join(global.__GATSBY?.root || process.cwd(), `public`, `_gatsby`, `file`); const url = req.query[url_generator_1.ImageCDNUrlKeys.URL]; const filePath = await (0, fetch_remote_file_1.fetchRemoteFile)({ directory: outputDir, url, name: req.params.filename, httpHeaders: (0, get_request_headers_for_url_1.getRequestHeadersForUrl)(url, store), }); fs_extra_1.default.createReadStream(filePath).pipe(res); }); app.get(`/_gatsby/image/:url/:params/:filename`, async (req, res) => { const { url, params, filename } = req.params; const remoteUrl = decodeURIComponent(req.query[url_generator_1.ImageCDNUrlKeys.URL]); const searchParams = new URLSearchParams(decodeURIComponent(req.query[url_generator_1.ImageCDNUrlKeys.ARGS])); const resizeParams = { width: 0, height: 0, quality: 75, format: ``, }; for (const [key, value] of searchParams) { switch (key) { case `w`: { resizeParams.width = Number(value); break; } case `h`: { resizeParams.height = Number(value); break; } case `fm`: { resizeParams.format = value; break; } case `q`: { resizeParams.quality = Number(value); break; } } } const outputDir = path_1.default.join(global.__GATSBY?.root || process.cwd(), `public`, `_gatsby`, `_image`, url, params); const httpHeaders = (0, get_request_headers_for_url_1.getRequestHeadersForUrl)(remoteUrl, store); const filePath = await (0, transform_images_1.transformImage)({ outputDir, args: { url: remoteUrl, filename, httpHeaders, ...resizeParams, }, }); res.setHeader(`content-type`, (0, mime_type_helpers_1.getFileExtensionFromMimeType)(path_1.default.extname(filename))); fs_extra_1.default.createReadStream(filePath).pipe(res); }); return app; } //# sourceMappingURL=http-routes.js.map