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 | const fuzzyPurgeRequireEntry = require('../fuzzy-purge-require-entry');
|
10 |
|
11 | class GenerateManifest extends CachingWriter {
|
12 | constructor(inputNode, options) {
|
13 | super([inputNode], {
|
14 | annotation: 'generate manifest.webmanifest'
|
15 | });
|
16 |
|
17 | this.options = options;
|
18 | }
|
19 |
|
20 | clearConfigGeneratorCache() {
|
21 | fuzzyPurgeRequireEntry(
|
22 | path.join(this.options.project.root, 'config', 'manifest.js')
|
23 | );
|
24 | }
|
25 |
|
26 | build() {
|
27 | this.clearConfigGeneratorCache();
|
28 |
|
29 | let outputFilePath = path.join(this.outputPath, this.options.manifestName);
|
30 | fs.writeFileSync(
|
31 | outputFilePath,
|
32 | JSON.stringify(this.generateManifest()) + '\n'
|
33 | );
|
34 | }
|
35 |
|
36 | generateManifest() {
|
37 | let manifest = generateManifestFromConfiguration(
|
38 | getManifestConfiguration(this.options.project, this.options.env)
|
39 | );
|
40 | let ui = this.options.ui;
|
41 |
|
42 | validate(manifest).forEach(function(error) {
|
43 | ui.writeWarnLine('MANIFEST VALIDATION: ' + error);
|
44 | });
|
45 |
|
46 | return manifest;
|
47 | }
|
48 | }
|
49 |
|
50 | module.exports = GenerateManifest;
|