|
| 1 | +import {readFileSync} from 'fs'; |
1 | 2 | import {compile} from 'ejs'; |
2 | 3 |
|
3 | 4 | export function render(ctx, src, data) { |
4 | | - let template = compile(src, { |
5 | | - filename: ctx.resourcePath, |
6 | | - delimiter: data.delimiter, |
7 | | - context: data.context |
8 | | - }); |
| 5 | + let filename = ctx.resourcePath; |
| 6 | + let delimiter = data.delimiter; |
| 7 | + let context = data.context; |
| 8 | + |
| 9 | + let tpl = compile(src, {filename, delimiter, context}); |
9 | 10 |
|
10 | 11 | return { |
11 | | - rendered: template(data), |
12 | | - deps: template.dependencies |
| 12 | + rendered: tpl(data), |
| 13 | + deps: getDeps(tpl.dependencies, {delimiter, context}) |
13 | 14 | }; |
14 | 15 | } |
| 16 | + |
| 17 | +function getDeps(deps, opts, result=[]) { |
| 18 | + deps.forEach(name => { |
| 19 | + result.push(name); |
| 20 | + getDeps(getOwnDeps(name, opts), opts, result); |
| 21 | + }); |
| 22 | + |
| 23 | + return result; |
| 24 | +} |
| 25 | + |
| 26 | +function getOwnDeps(filename, {delimiter, context}) { |
| 27 | + let src = readFileSync(filename, 'utf8'); |
| 28 | + let tpl = compile(src, {filename, delimiter, context}); |
| 29 | + return tpl.dependencies; |
| 30 | +} |
0 commit comments