123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- '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()
- }
|