Skip to content

Commit

Permalink
feat: support require.resolve for lookup, see #168
Browse files Browse the repository at this point in the history
  • Loading branch information
harttle committed Nov 7, 2019
1 parent 5492fb0 commit 2dd4355
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 5 deletions.
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -109,7 +109,8 @@
"@semantic-release/git",
{
"assets": [
"docs"
"docs",
"CHANGELOG.md"
],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
Expand Down
1 change: 1 addition & 0 deletions src/fs/ifs.ts
Expand Up @@ -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;
}
5 changes: 5 additions & 0 deletions src/fs/node.ts
Expand Up @@ -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) {}
}
}

Expand Down
4 changes: 4 additions & 0 deletions src/liquid.ts
Expand Up @@ -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]
Expand Down
9 changes: 5 additions & 4 deletions test/integration/liquid/liquid.ts
Expand Up @@ -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 () {
Expand Down

0 comments on commit 2dd4355

Please sign in to comment.