|
| 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