UNPKG

ember-web-app

Version:

This Ember addon helps you configure and manage the Web App Manifest to create a Progressive Web App

84 lines (68 loc) 2.02 kB
'use strict'; const fs = require('fs'); const path = require('path'); const { JSDOM } = require('jsdom'); const Generator = require('./broccoli/generator'); module.exports = class BaseManifest { constructor(app, { name, selector }) { this.app = app; this.name = name; this.selector = selector; } get indexPath() { let configPath = this.app.project.configPath(); return path.join(configPath, '..', '..', 'app', 'index.html'); } get element() { let content = fs.readFileSync(this.indexPath, 'utf8'); let dom = new JSDOM(content); return dom.window.document.querySelector(this.selector); } get isRequired() { return this.element !== null; } get configurationPath() { return path.join( path.dirname(this.app.project.configPath()), 'manifest.js' ); } get configuration() { try { let { env, project } = this.app; let config = project.config(env); return project.require(this.configurationPath)(env, config); } catch (e) { return {}; } } configureFingerprint() { if (!this.isRequired || this.app.options.fingerprint === false) { return; } this.app.options.fingerprint = this.app.options.fingerprint || {}; let defaultOptions = require('broccoli-asset-rev/lib/default-options'); let replaceExtensions = this.app.options.fingerprint.replaceExtensions || defaultOptions.replaceExtensions; let extension = path.extname(this.name).substring(1); this.app.options.fingerprint.replaceExtensions = replaceExtensions.concat([ extension, ]); } build({ directory }) { if (!this.isRequired) { return; } let outputPath = path.join(directory, this.name); let content = this.generate(); fs.writeFileSync(outputPath, content); } generate() { throw new Error('not implemented'); } toTree() { let configPath = path.dirname(this.configurationPath); return new Generator(configPath, { manifest: this }); } };