UNPKG

twing

Version:

First-class Twig engine for Node.js

226 lines (225 loc) 7.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSynchronousChainLoader = exports.createChainLoader = void 0; const createChainLoader = (loaders) => { let existsCache = new Map(); const addLoader = (loader) => { loaders.push(loader); existsCache = new Map(); }; const loader = { get loaders() { return loaders; }, addLoader, exists: (name, from) => { const cachedResult = existsCache.get(name); if (cachedResult) { return Promise.resolve(cachedResult); } const existsAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; return loader.exists(name, from) .then((exists) => { existsCache.set(name, exists); if (!exists) { return existsAtIndex(index + 1); } else { return true; } }); } else { return Promise.resolve(false); } }; return existsAtIndex(0).then((exists) => { existsCache.set(name, exists); return exists; }); }, resolve: (name, from) => { const resolveAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; return loader.exists(name, from) .then((exists) => { if (!exists) { return resolveAtIndex(index + 1); } else { return loader.resolve(name, from); } }) .then((key) => { if (key === null) { return resolveAtIndex(index + 1); } return key; }); } else { return Promise.resolve(null); } }; return resolveAtIndex(0) .then((key) => { if (key) { return key; } else { return null; } }); }, getSource: (name, from) => { const getSourceContextAtIndex = (index) => { if (index < loaders.length) { let loader = loaders[index]; return loader.getSource(name, from) .then((source) => { if (source === null) { return getSourceContextAtIndex(index + 1); } return source; }); } else { return Promise.resolve(null); } }; return getSourceContextAtIndex(0) .then((source) => { if (source) { return source; } else { return null; } }); }, isFresh: (name, time, from) => { const isFreshAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; return loader.isFresh(name, time, from) .then((isFresh) => { if (isFresh === null) { return isFreshAtIndex(index + 1); } return isFresh; }); } else { return Promise.resolve(null); } }; return isFreshAtIndex(0); } }; return loader; }; exports.createChainLoader = createChainLoader; const createSynchronousChainLoader = (loaders) => { let existsCache = new Map(); const addLoader = (loader) => { loaders.push(loader); existsCache = new Map(); }; const loader = { get loaders() { return loaders; }, addLoader, exists: (name, from) => { const cachedResult = existsCache.get(name); if (cachedResult) { return cachedResult; } const existsAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; const exists = loader.exists(name, from); existsCache.set(name, exists); if (!exists) { return existsAtIndex(index + 1); } else { return true; } } else { return false; } }; const exists = existsAtIndex(0); existsCache.set(name, exists); return exists; }, resolve: (name, from) => { const resolveAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; const exists = loader.exists(name, from); const key = exists ? loader.resolve(name, from) : resolveAtIndex(index + 1); if (key === null) { return resolveAtIndex(index + 1); } return key; } else { return null; } }; const key = resolveAtIndex(0); if (key) { return key; } else { return null; } }, getSource: (name, from) => { const getSourceContextAtIndex = (index) => { if (index < loaders.length) { let loader = loaders[index]; const source = loader.getSource(name, from); if (source === null) { return getSourceContextAtIndex(index + 1); } return source; } else { return null; } }; const source = getSourceContextAtIndex(0); if (source) { return source; } else { return null; } }, isFresh: (name, time, from) => { const isFreshAtIndex = (index) => { if (index < loaders.length) { const loader = loaders[index]; const isFresh = loader.isFresh(name, time, from); if (isFresh === null) { return isFreshAtIndex(index + 1); } return isFresh; } else { return null; } }; return isFreshAtIndex(0); } }; return loader; }; exports.createSynchronousChainLoader = createSynchronousChainLoader;