@kth/cortina-block
Version:
Node.js module for fetching Cortina blocks and optionally cache using Redis.
49 lines (48 loc) • 1.77 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchAllBlocks = void 0;
const log_1 = __importDefault(require("@kth/log"));
const fetchBlock = async (url, blockName) => {
try {
const res = await fetch(url);
if (!res.ok) {
log_1.default.error(`Failed to fetch cortina block at ${url}: ${res.status}`);
return { blockName, html: '' };
}
const html = await res.text();
return { blockName, html };
}
catch (err) {
log_1.default.error(`WARNING! FAILED TO FETCH ${blockName} ${err}`);
}
};
// Fetch all Cortina blocks from API.
const fetchAllBlocks = async (blocksConfig, blockApiUrl, lang) => {
const allblocks = [];
for (const blockName in blocksConfig) {
const blockId = blocksConfig[blockName];
allblocks.push({ blockName, url: `${blockApiUrl}${blockId}?l=${lang}` });
}
return Promise.all(allblocks.map(block => fetchBlock(block.url, block.blockName)))
.then(fetchedBlocks => {
const blocksObject = {};
fetchedBlocks.forEach(block => {
if (block) {
blocksObject[block.blockName] = block.html;
}
});
return blocksObject;
})
.catch(err => {
const blockName = err.options ? err.options.uri : 'NO URI FOUND';
log_1.default.error(`WARNING!
NO BLOCKS WILL BE LOADED DUE TO ERROR IN ONE OF THE BLOCKS.
FIX ALL BROKEN BLOCKS IMMEDIATELY.
ATTEMPTED TO LOAD BLOCK: ${blockName}`);
throw err;
});
};
exports.fetchAllBlocks = fetchAllBlocks;