twing
Version:
First-class Twig engine for Node.js
226 lines (225 loc) • 7.56 kB
JavaScript
"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;