-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
69 lines (58 loc) · 1.8 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'use strict';
const App = require('ember-cli/blueprints/app/index');
const FileInfo = require('ember-cli/lib/models/file-info');
const path = require('path');
const walkSync = require('walk-sync');
const fs = require('fs');
const patchers = require('./lib/patchers');
const PatchableFileInfo =require('./lib/patchable-file-info');
function unique(a) {
return a.reduce((p, c) => {
if (p.indexOf(c) < 0) p.push(c);
return p;
}, []);
}
module.exports = Object.assign({}, App, {
description: 'the future of ember',
init() {
this._super.apply(this, arguments);
this.super = this.lookupBlueprint('app');
},
filesPath() {
throw new TypeError('filesPath not implmented');
},
files() {
let originalFiles = this.super.files();
let newFiles = walkSync(this.path + '/files');
return unique(originalFiles.concat(newFiles));
},
buildFileInfo(intoDir, templateVariables, file) {
let mappedPath = this.mapFile(file, templateVariables);
if (file in patchers) {
return new PatchableFileInfo({
action: 'write',
outputBasePath: path.normalize(intoDir),
outputPath: path.join(intoDir, mappedPath),
displayPath: path.normalize(mappedPath),
inputPath: this.srcPath(file),
templateVariables,
ui: this.ui,
}, patchers[file])
} else {
return new FileInfo({
action: 'write',
outputBasePath: path.normalize(intoDir),
outputPath: path.join(intoDir, mappedPath),
displayPath: path.normalize(mappedPath),
inputPath: this.srcPath(file),
templateVariables,
ui: this.ui,
});
}
},
srcPath(file) {
let path = this.path + '/files/' + file;
let superPath = this.super.path + '/files/' + file;
return fs.existsSync(path) ? path : superPath;
}
});