diff --git a/package.json b/package.json index 18995abd82..7d9e101540 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,8 @@ "@semantic-release/git", { "assets": [ - "docs" + "docs", + "CHANGELOG.md" ], "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" } diff --git a/src/fs/ifs.ts b/src/fs/ifs.ts index 6baefdf58b..808c33edff 100644 --- a/src/fs/ifs.ts +++ b/src/fs/ifs.ts @@ -4,4 +4,5 @@ export default interface IFS { existsSync: (filepath: string) => boolean; readFileSync: (filepath: string) => string; resolve: (root: string, file: string, ext: string) => string; + fallback?: (file: string) => string | undefined; } diff --git a/src/fs/node.ts b/src/fs/node.ts index 3deda0f2c3..553a391ba3 100644 --- a/src/fs/node.ts +++ b/src/fs/node.ts @@ -27,6 +27,11 @@ const fs: IFS = { resolve: (root: string, file: string, ext: string) => { if (!extname(file)) file += ext return resolve(root, file) + }, + fallback: (file: string) => { + try { + return require.resolve(file) + } catch (e) {} } } diff --git a/src/liquid.ts b/src/liquid.ts index 2b61cafa7d..00d7196850 100644 --- a/src/liquid.ts +++ b/src/liquid.ts @@ -67,6 +67,10 @@ export class Liquid { public * _parseFile (file: string, opts?: LiquidOptions, sync?: boolean) { const options = { ...this.options, ...normalize(opts) } const paths = options.root.map(root => this.fs.resolve(root, file, options.extname)) + if (fs.fallback !== undefined) { + const filepath = fs.fallback(file) + if (filepath !== undefined) paths.push(filepath) + } for (const filepath of paths) { if (this.options.cache && this.cache[filepath]) return this.cache[filepath] diff --git a/test/integration/liquid/liquid.ts b/test/integration/liquid/liquid.ts index d8afbaf53e..21b8231ce3 100644 --- a/test/integration/liquid/liquid.ts +++ b/test/integration/liquid/liquid.ts @@ -86,13 +86,14 @@ describe('Liquid', function () { return expect(engine.parseFile('/not/exist.html')).to .be.rejectedWith(/Failed to lookup "\/not\/exist.html" in "\/boo,\/root\/"/) }) - it('should throw with lookup list when file not exist', function () { + it('should fallback to require.resolve in Node.js', async function () { const engine = new Liquid({ - root: ['/boo', '/root/'], + root: ['/root/'], extname: '.html' }) - return expect(engine.getTemplate('/not/exist.html')).to - .be.rejectedWith(/Failed to lookup "\/not\/exist.html" in "\/boo,\/root\/"/) + const tpls = await engine.getTemplate('mocha') + expect(tpls.length).to.gte(1) + expect(tpls[0].token.raw).to.contain('module.exports') }) }) describe('#evalValue', function () {