1 | const fs = require('fs');
|
2 | const path = require('path');
|
3 | const eachRight = require('lodash/eachRight');
|
4 | const error = require('../error');
|
5 |
|
6 | let directories = [];
|
7 |
|
8 | const templateRegistry = {
|
9 | add(dir) {
|
10 | if (!fs.existsSync(dir)) {
|
11 | throw error(`template directory '${dir}' is not exist.`);
|
12 | }
|
13 | directories.push(dir);
|
14 | },
|
15 | clear() {
|
16 | directories = [];
|
17 | },
|
18 | resolveTemplatePath(name) {
|
19 | if (path.isAbsolute(name)) {
|
20 | if (fs.existsSync(name)) {
|
21 | return name;
|
22 | } else {
|
23 | throw error(`cannot find template '${name}'.`);
|
24 | }
|
25 | }
|
26 | let resolved = undefined;
|
27 | eachRight(directories, (dir) => {
|
28 | if (!resolved) {
|
29 | const maybe = path.join(dir, name);
|
30 | if (fs.existsSync(maybe)) resolved = maybe;
|
31 | }
|
32 | });
|
33 | if (!resolved) {
|
34 | throw error(`cannot find template '${name}'.`);
|
35 | }
|
36 | return resolved;
|
37 | }
|
38 | };
|
39 |
|
40 | module.exports = templateRegistry;
|