UNPKG

@kth/cortina-block

Version:

Node.js module for fetching Cortina blocks and optionally cache using Redis.

49 lines (48 loc) 1.77 kB
"use strict"; 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;