#!/usr/bin/env node import * as path from 'path' import * as core from './utils' import server from '../server/' import { pipe } from '../server/utils' import * as fs from 'fs' import * as util from 'util' const readFileAsync = util.promisify(fs.readFile) const options = { inputDir: path.join(process.cwd(), process.argv[2]), outputDir: process.argv[3] && path.join(process.cwd(), process.argv[3]), filePattern: /[\\\/](?!_)([^\\\/]+)\.(pug|pcss)$/ } pipe([ core.findFiles, core.findPugData, core.compilePug, core.compileDelta ])(options).then(staticFS => { if (staticFS.outputDir) { // Compile files if there is an output Dir core.writeFiles(staticFS) core.copyFiles(staticFS.inputDir, staticFS.outputDir, '!(*.pcss|*.pug|data.js)') } else { // Start a static server on the input dir otherwise server({ resources: { '/...': { GET: { handler: async (request, server) => { const requestedFile = request.params.rest === '/' ? '/index.html' : request.params.rest const fileType = path.extname(requestedFile) if (fileType === '.css' || fileType === '.html') { const file = staticFS.compiledFiles.find(x => x.output === requestedFile) return file ? server.response.fileContent(file.content, fileType) : server.response.status(404) } try { const file = await readFileAsync(path.join(staticFS.inputDir, requestedFile)) return server.response.fileContent(file, fileType) } catch (error) { return server.response.status(404) } } } } } }) } })