@netlify/content-engine
Version:
80 lines • 3.47 kB
JavaScript
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
;