1 | var debug = require('debug')('bankai.node-manifest')
|
2 | var parseJson = require('fast-json-parse')
|
3 | var fs = require('fs')
|
4 |
|
5 | var utils = require('./utils')
|
6 |
|
7 | var DEFAULT_COLOR = '#fff'
|
8 | var DEFAULT_DESCRIPTION = ''
|
9 | var DEFAULT_MANIFEST = Buffer.from(JSON.stringify({
|
10 | name: '',
|
11 | short_name: '',
|
12 | start_url: '/',
|
13 | display: 'minimal-ui',
|
14 | background_color: '#fff',
|
15 | theme_color: DEFAULT_COLOR
|
16 | }))
|
17 |
|
18 | var filenames = [
|
19 | 'manifest.json'
|
20 | ]
|
21 |
|
22 | module.exports = node
|
23 |
|
24 | function node (state, createEdge, emit) {
|
25 | var basedir = utils.dirname(state.metadata.entry)
|
26 | var self = this
|
27 |
|
28 | if (state.metadata.watch && !state.metadata.watchers.manifest) {
|
29 | state.metadata.watchers.manifest = true
|
30 | debug('watching ' + basedir + ' for ' + filenames.join(', '))
|
31 | var unwatch = utils.watch(basedir, filenames, parse)
|
32 | this.on('close', function () {
|
33 | debug('closing file watcher')
|
34 | unwatch()
|
35 | })
|
36 | }
|
37 |
|
38 | parse()
|
39 |
|
40 | function parse () {
|
41 | debug('parsing')
|
42 | utils.find(basedir, filenames, function (err, filename) {
|
43 | if (err) {
|
44 | createEdge('bundle', DEFAULT_MANIFEST, {
|
45 | color: DEFAULT_COLOR,
|
46 | description: DEFAULT_DESCRIPTION,
|
47 | mime: 'application/json'
|
48 | })
|
49 | return
|
50 | }
|
51 |
|
52 | fs.readFile(filename, function (err, file) {
|
53 | if (err) return self.emit('error', 'manifest', 'fs.readfile', err)
|
54 |
|
55 | var res = parseJson(file)
|
56 | if (res.err) return self.emit('error', 'manifest', 'JSON.parse', res.err)
|
57 |
|
58 | debug('creating edges')
|
59 | createEdge('bundle', Buffer.from(JSON.stringify(res.value)), {
|
60 | color: res.value.theme_color || DEFAULT_COLOR,
|
61 | description: res.value.description || DEFAULT_DESCRIPTION,
|
62 | mime: 'application/json'
|
63 | })
|
64 | })
|
65 | })
|
66 | }
|
67 | }
|