forked from quentro/jwdeveloper-demos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.js
94 lines (76 loc) · 1.95 KB
/
build.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env node
const ejs = require('ejs');
const fs = require('fs-extra');
const path = require('path');
const partialsPath = path.resolve(__dirname, 'partials');
const demosPath = path.join(__dirname, 'demos');
const dist = path.join(__dirname, 'dist/developers/web-player-demos');
const gtm_id = process.env.GTM_ID || null;
const ejsOptions = {
rmWhitespace: false
};
const include = (partial, data = null) => `<%- include("${partialsPath}/${partial}"${data ? `, ${data}` : ''}); %>`;
const getFile = (dir, name, exts = []) => {
if (!exts.length) {
return null;
}
const ext = exts.pop();
try {
return fs.readFileSync(path.format({ name, dir, ext }), 'utf8');
} catch (err) {
if (err.code === 'ENOENT') {
return getFile(dir, name, exts);
}
}
}
const demoSlugs = fs.readdirSync(demosPath);
const configs = [];
demoSlugs.forEach(slug => {
const srcDir = path.join(demosPath, slug);
const destDir = path.join(dist, slug);
const doc = getFile(srcDir, 'index', ['.html', '.ejs']);
const scriptContent = getFile(srcDir, 'demo', ['.js']);
const styleContent = getFile(srcDir, 'style', ['.css']);
const content = [
include('head'),
include('license'),
doc,
include('scriptview'),
include('footer')
].join('\n');
const config = {
...JSON.parse(getFile(srcDir, 'config', ['.json'])),
scriptContent,
styleContent,
slug,
partialsPath,
gtm_id
}
const output = ejs.render(content, config, ejsOptions);
configs.push(config);
const fileDest = path.format({
dir: destDir,
ext: '.html',
name: 'index'
});
fs.mkdirp(destDir, function(err) {
if (err) {
// console.log(err);
return;
}
fs.writeFileSync(fileDest, output);
// console.log(`${fileDest} written.`);
});
});
const indexTemplate = fs.readFileSync(`${partialsPath}/index.ejs`, 'utf8');
const index = ejs.render(indexTemplate, {
demoSlugs,
partialsPath,
configs,
gtm_id
});
fs.writeFileSync(path.format({
dir: dist,
ext: '.html',
name: 'index'
}), index);