UNPKG

1.55 kBJavaScriptView Raw
1'use strict';
2
3const CachingWriter = require('broccoli-caching-writer');
4const fs = require('fs');
5const path = require('path');
6const generateManifestFromConfiguration = require('../generate-manifest-from-configuration');
7const getManifestConfiguration = require('../get-manifest-configuration');
8const validate = require('web-app-manifest-validator');
9
10class 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// taken from https://github.com/ember-cli/broccoli-config-loader
45function 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
53module.exports = GenerateManifest;