fix: respect cache render options

This commit is contained in:
Martin Schuster
2020-04-03 10:42:32 +08:00
committed by Jun Yang
parent 3cf8072df5
commit a93f11d25a
3 changed files with 64 additions and 6 deletions
+7 -5
View File
@@ -89,11 +89,13 @@ export function normalize (options?: LiquidOptions): NormalizedOptions {
if (options.hasOwnProperty('root')) { if (options.hasOwnProperty('root')) {
options.root = normalizeStringArray(options.root) options.root = normalizeStringArray(options.root)
} }
let cache: Cache<Template[]> | undefined if (options.hasOwnProperty('cache')) {
if (typeof options.cache === 'number') cache = options.cache > 0 ? new LRU(options.cache) : undefined let cache: Cache<Template[]> | undefined
else if (typeof options.cache === 'object') cache = options.cache if (typeof options.cache === 'number') cache = options.cache > 0 ? new LRU(options.cache) : undefined
else cache = options.cache ? new LRU<Template[]>(1024) : undefined else if (typeof options.cache === 'object') cache = options.cache
options.cache = cache else cache = options.cache ? new LRU<Template[]>(1024) : undefined
options.cache = cache
}
return options as NormalizedOptions return options as NormalizedOptions
} }
+1 -1
View File
@@ -75,7 +75,7 @@ export class Liquid {
} }
for (const filepath of paths) { for (const filepath of paths) {
const { cache } = this.options const { cache } = options
if (cache) { if (cache) {
const tpls = yield cache.read(filepath) const tpls = yield cache.read(filepath)
if (tpls) return tpls if (tpls) return tpls
+56
View File
@@ -132,6 +132,34 @@ describe('LiquidOptions#cache', function () {
const y = await engine.renderFile('foo') const y = await engine.renderFile('foo')
expect(y).to.equal('foo') expect(y).to.equal('foo')
}) })
it('should respect passed in cache=false option', async function () {
const engine = new Liquid({
root: '/root/',
extname: '.html',
cache: true
})
mock({ '/root/files/foo.html': 'foo' })
const x = await engine.renderFile('files/foo')
expect(x).to.equal('foo')
mock({ '/root/files/foo.html': 'bar' })
const y = await engine.renderFile('files/foo')
expect(y).to.equal('foo')
const z = await engine.renderFile('files/foo', undefined, { cache: false })
expect(z).to.equal('bar')
})
it('should use cache when passing in other options', async function () {
const engine = new Liquid({
root: '/root/',
extname: '.html',
cache: true
})
mock({ '/root/files/foo.html': 'foo' })
const x = await engine.renderFile('files/foo')
expect(x).to.equal('foo')
mock({ '/root/files/foo.html': 'bar' })
const y = await engine.renderFile('files/foo', undefined, { greedy: true })
expect(y).to.equal('foo')
})
}) })
describe('#renderFileSync', function () { describe('#renderFileSync', function () {
@@ -174,5 +202,33 @@ describe('LiquidOptions#cache', function () {
const y = await engine.renderFile('foo') const y = await engine.renderFile('foo')
expect(y).to.equal('foo') expect(y).to.equal('foo')
}) })
it('should respect passed in cache=false option', async function () {
const engine = new Liquid({
root: '/root/',
extname: '.html',
cache: true
})
mock({ '/root/files/foo.html': 'foo' })
const x = engine.renderFileSync('files/foo')
expect(x).to.equal('foo')
mock({ '/root/files/foo.html': 'bar' })
const y = engine.renderFileSync('files/foo')
expect(y).to.equal('foo')
const z = engine.renderFileSync('files/foo', undefined, { cache: false })
expect(z).to.equal('bar')
})
it('should use cache when passing in other options', async function () {
const engine = new Liquid({
root: '/root/',
extname: '.html',
cache: true
})
mock({ '/root/files/foo.html': 'foo' })
const x = engine.renderFileSync('files/foo')
expect(x).to.equal('foo')
mock({ '/root/files/foo.html': 'bar' })
const y = engine.renderFileSync('files/foo', undefined, { greedy: true })
expect(y).to.equal('foo')
})
}) })
}) })