/** * @file * @copyright 2020 Aleksej Komarov * @license MIT */ import { Action, AnyAction, Middleware } from '../common/redux'; import { Dispatch } from 'common/redux'; const EXCLUDED_PATTERNS = [/v4shim/i]; const loadedMappings: Record = {}; export const resolveAsset = (name: string): string => loadedMappings[name] || name; export const assetMiddleware: Middleware = (storeApi) => (next: Dispatch) => (action: ActionType) => { const { type, payload } = action as AnyAction; if (type === 'asset/stylesheet') { Byond.loadCss(payload); return; } if (type === 'asset/mappings') { for (const name of Object.keys(payload)) { // Skip anything that matches excluded patterns if (EXCLUDED_PATTERNS.some((regex) => regex.test(name))) { continue; } const url = payload[name]; const ext = name.split('.').pop(); loadedMappings[name] = url; if (ext === 'css') { Byond.loadCss(url); } if (ext === 'js') { Byond.loadJs(url); } } return; } next(action); };