Skip to content

Commit

Permalink
Add ability to serve app as middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
rogden committed Dec 13, 2020
1 parent a450a5d commit 97a43f2
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 29 deletions.
4 changes: 2 additions & 2 deletions cli/export.js
Expand Up @@ -4,13 +4,13 @@ const crypto = require('crypto')
const replace = require('replace-in-file')
const { resolveConfigToJson } = require('../lib/tailwindConfigUtils')

module.exports = function (outputDir, config) {
module.exports = function (outputDir, configPath) {
outputDir = path.resolve(process.cwd(), outputDir)

fs.removeSync(outputDir)
fs.mkdirSync(outputDir)

const configJson = resolveConfigToJson(config)
const configJson = resolveConfigToJson(configPath)
const configFileName = generateConfigFileNameFromJson(configJson)

fs.writeFileSync(path.resolve(outputDir, configFileName), configJson)
Expand Down
14 changes: 9 additions & 5 deletions cli/index.js
@@ -1,8 +1,8 @@
#!/usr/bin/env node
const { resolveConfigPath } = require('../lib/tailwindConfigUtils')
const program = require('commander')

program
.option('-c, --config <path>', 'Path to your Tailwind config file', 'tailwind.config.js')
.option('-c, --config <path>', 'Path to your Tailwind config file', './tailwind.config.js')

program
.command('serve', { isDefault: true })
Expand All @@ -12,16 +12,20 @@ program
.action(args => {
require('../server')({
port: args.port,
tailwindConfigPath: program.config,
tailwindConfigProvider: () => {
const configPath = resolveConfigPath(program.config)
delete require.cache[configPath]
return require(configPath)
},
shouldOpen: args.open
})
}).start()
})

program
.command('export [outputDir]')
.description('Create a static export of the viewer')
.action((outputDir = './tcv-build') => {
require('./export')(outputDir, program.config)
require('./export')(outputDir, resolveConfigPath(program.config))
})

program.parse(process.argv)
11 changes: 7 additions & 4 deletions lib/tailwindConfigUtils.js
Expand Up @@ -4,12 +4,14 @@ const flattenColorPalette = require('tailwindcss/lib/util/flattenColorPalette').

const resolveConfigPath = configPath => path.resolve(process.cwd(), configPath)

const resolveConfig = configPath => {
const config = require(resolveConfigPath(configPath))
const resolveConfig = config => {
return transformConfig(resolveTailwindConfig(config))
}

const resolveConfigToJson = configPath => JSON.stringify(resolveConfig(configPath))
const resolveConfigToJson = configPath => {
const tailwindConfig = require(configPath)
return JSON.stringify(resolveConfig(tailwindConfig))
}

const transformConfig = config => {
config.theme = replaceWithOverrides(config.theme)
Expand Down Expand Up @@ -49,5 +51,6 @@ const removeConfigProps = (config, props) => {
module.exports = {
resolveConfig,
resolveConfigPath,
resolveConfigToJson
resolveConfigToJson,
transformConfig
}
46 changes: 28 additions & 18 deletions server/index.js
Expand Up @@ -3,38 +3,48 @@ const serve = require('koa-static')
const Router = require('@koa/router')
const portfinder = require('portfinder')
const open = require('open')
const { resolveConfig, resolveConfigPath } = require('../lib/tailwindConfigUtils')
const { resolveConfig } = require('../lib/tailwindConfigUtils')

function createServer ({ port = 3000, tailwindConfigPath, shouldOpen }) {
function createServer ({
port = 3000,
tailwindConfigProvider,
shouldOpen
}) {
const app = new Koa()
const router = new Router()

router.get('/config.json', (ctx) => {
// delete the require cache of tailwind config so we can pick up new changes
delete require.cache[resolveConfigPath(tailwindConfigPath)]
ctx.body = resolveConfig(tailwindConfigPath)
ctx.body = resolveConfig(tailwindConfigProvider())
})

app
.use(serve(`${__dirname}/../dist`))
.use(router.routes())
.use(router.allowedMethods())

portfinder.getPort({
port
}, (err, port) => {
if (err) {
throw (err)
}
return {
app,
asMiddleware: () => {
return app.callback()
},
start: () => {
portfinder.getPort({
port
}, (err, port) => {
if (err) {
throw (err)
}

app.listen(port, async () => {
console.log('Server Started ∹ http://localhost:' + port.toString())
app.listen(port, async () => {
console.log('Server Started ∹ http://localhost:' + port.toString())

if (shouldOpen) {
open('http://localhost:' + port.toString())
}
})
})
if (shouldOpen) {
open('http://localhost:' + port.toString())
}
})
})
}
}
}

module.exports = createServer

0 comments on commit 97a43f2

Please sign in to comment.