| 'use strict' |
| |
| const path = require('path') |
| const FileUtils = require('../utils/file-utils') |
| |
| function quote (value) { |
| return `'${value}'` |
| } |
| |
| function formatLine (items) { |
| return items.map(quote).join(', ') |
| } |
| |
| function formatMultiLines (items) { |
| return items |
| .map((file) => '\n ' + file) |
| .join(',') |
| } |
| |
| function formatFiles (includedFiles, onlyServedFiles) { |
| const lines = [] |
| .concat(includedFiles.map(quote)) |
| .concat(onlyServedFiles.map((file) => `{ pattern: ${quote(file)}, included: false }`)) |
| |
| return formatMultiLines(lines) |
| } |
| |
| function formatPreprocessors (preprocessors) { |
| const lines = Object.keys(preprocessors) |
| .map((pattern) => `${quote(pattern)}: [${formatLine(preprocessors[pattern])}]`) |
| |
| return formatMultiLines(lines) |
| } |
| |
| function getConfigPath (file) { |
| return path.join(__dirname, `/../../${file}`) |
| } |
| |
| class JavaScriptFormatter { |
| constructor () { |
| this.TEMPLATE_FILE_PATH = getConfigPath('config.tpl.js') |
| this.REQUIREJS_TEMPLATE_FILE = getConfigPath('requirejs.config.tpl.js') |
| } |
| |
| generateConfigFile (answers) { |
| const replacements = this.formatAnswers(answers) |
| |
| return FileUtils |
| .readFile(this.TEMPLATE_FILE_PATH) |
| .replace(/%(.*)%/g, (a, key) => replacements[key]) |
| } |
| |
| writeConfigFile (path, answers) { |
| FileUtils.saveFile(path, this.generateConfigFile(answers)) |
| } |
| |
| writeRequirejsConfigFile (path) { |
| FileUtils.copyFile(this.REQUIREJS_TEMPLATE_FILE, path) |
| } |
| |
| formatAnswers (answers) { |
| return { |
| DATE: new Date(), |
| BASE_PATH: answers.basePath, |
| FRAMEWORKS: formatLine(answers.frameworks), |
| FILES: formatFiles(answers.files, answers.onlyServedFiles), |
| EXCLUDE: formatFiles(answers.exclude, []), |
| AUTO_WATCH: answers.autoWatch ? 'true' : 'false', |
| BROWSERS: formatLine(answers.browsers), |
| PREPROCESSORS: formatPreprocessors(answers.preprocessors) |
| } |
| } |
| } |
| |
| class CoffeeFormatter extends JavaScriptFormatter { |
| constructor () { |
| super() |
| this.TEMPLATE_FILE_PATH = getConfigPath('config.tpl.coffee') |
| this.REQUIREJS_TEMPLATE_FILE = getConfigPath('requirejs.config.tpl.coffee') |
| } |
| } |
| |
| class LiveFormatter extends JavaScriptFormatter { |
| constructor () { |
| super() |
| this.TEMPLATE_FILE_PATH = getConfigPath('config.tpl.ls') |
| } |
| } |
| |
| class TypeFormatter extends JavaScriptFormatter { |
| constructor () { |
| super() |
| this.TEMPLATE_FILE_PATH = getConfigPath('config.tpl.ts') |
| } |
| } |
| |
| exports.JavaScript = JavaScriptFormatter |
| exports.Coffee = CoffeeFormatter |
| exports.Live = LiveFormatter |
| exports.Type = TypeFormatter |
| |
| exports.createForPath = function (path) { |
| if (/\.coffee$/.test(path)) { |
| return new CoffeeFormatter() |
| } |
| |
| if (/\.ls$/.test(path)) { |
| return new LiveFormatter() |
| } |
| |
| if (/\.ts$/.test(path)) { |
| return new TypeFormatter() |
| } |
| |
| return new JavaScriptFormatter() |
| } |