1 | 'use strict';
|
2 |
|
3 | const CachingWriter = require('broccoli-caching-writer');
|
4 | const fs = require('fs');
|
5 | const path = require('path');
|
6 | const generateManifestFromConfiguration = require('../generate-manifest-from-configuration');
|
7 | const getManifestConfiguration = require('../get-manifest-configuration');
|
8 | const validate = require('web-app-manifest-validator');
|
9 |
|
10 | class GenerateManifest extends CachingWriter {
|
11 | constructor(inputNode, options) {
|
12 | super([inputNode], {
|
13 | annotation: 'generate manifest.webmanifest'
|
14 | });
|
15 |
|
16 | this.options = options;
|
17 | }
|
18 |
|
19 | clearConfigGeneratorCache() {
|
20 | fuzzyPurgeRequireEntry(path.join(this.options.project.root, 'config', 'manifest.js'));
|
21 | }
|
22 |
|
23 | build() {
|
24 | this.clearConfigGeneratorCache();
|
25 | let outputFilePath = path.join(this.outputPath, this.options.manifestName);
|
26 | fs.writeFileSync(
|
27 | outputFilePath,
|
28 | JSON.stringify(this.generateManifest()) + '\n');
|
29 | }
|
30 |
|
31 | generateManifest() {
|
32 | let manifest = generateManifestFromConfiguration(getManifestConfiguration(this.options.project, this.options.env));
|
33 | let ui = this.options.ui;
|
34 |
|
35 | validate(manifest).forEach(function(error) {
|
36 | ui.writeWarnLine('MANIFEST VALIDATION: ' + error);
|
37 | });
|
38 |
|
39 | return manifest;
|
40 | }
|
41 |
|
42 | }
|
43 |
|
44 |
|
45 | function fuzzyPurgeRequireEntry(entry) {
|
46 | return Object.keys(require.cache).filter(function(path) {
|
47 | return path.indexOf(entry) > -1;
|
48 | }).forEach(function(entry) {
|
49 | delete require.cache[entry];
|
50 | });
|
51 | }
|
52 |
|
53 | module.exports = GenerateManifest;
|