80 lines
2.3 KiB
Plaintext
80 lines
2.3 KiB
Plaintext
|
// @ts-check
|
||
|
|
||
|
import fs from 'fs'
|
||
|
import path from 'path'
|
||
|
|
||
|
function isESM() {
|
||
|
const pkgPath = path.resolve('./package.json')
|
||
|
|
||
|
try {
|
||
|
let pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'))
|
||
|
return pkg.type && pkg.type === 'module'
|
||
|
} catch (err) {
|
||
|
return false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function init(args) {
|
||
|
let messages = []
|
||
|
|
||
|
let isProjectESM = args['--ts'] || args['--esm'] || isESM()
|
||
|
let syntax = args['--ts'] ? 'ts' : isProjectESM ? 'js' : 'cjs'
|
||
|
let extension = args['--ts'] ? 'ts' : 'js'
|
||
|
|
||
|
let tailwindConfigLocation = path.resolve(args['_'][1] ?? `./tailwind.config.${extension}`)
|
||
|
|
||
|
if (fs.existsSync(tailwindConfigLocation)) {
|
||
|
messages.push(`${path.basename(tailwindConfigLocation)} already exists.`)
|
||
|
} else {
|
||
|
let stubContentsFile = fs.readFileSync(
|
||
|
args['--full']
|
||
|
? path.resolve(__dirname, '../../../stubs/config.full.js')
|
||
|
: path.resolve(__dirname, '../../../stubs/config.simple.js'),
|
||
|
'utf8'
|
||
|
)
|
||
|
|
||
|
let stubFile = fs.readFileSync(
|
||
|
path.resolve(__dirname, `../../../stubs/tailwind.config.${syntax}`),
|
||
|
'utf8'
|
||
|
)
|
||
|
|
||
|
// Change colors import
|
||
|
stubContentsFile = stubContentsFile.replace('../colors', 'tailwindcss/colors')
|
||
|
|
||
|
// Replace contents of {ts,js,cjs} file with the stub {simple,full}.
|
||
|
stubFile =
|
||
|
stubFile
|
||
|
.replace('__CONFIG__', stubContentsFile.replace('module.exports =', '').trim())
|
||
|
.trim() + '\n\n'
|
||
|
|
||
|
fs.writeFileSync(tailwindConfigLocation, stubFile, 'utf8')
|
||
|
|
||
|
messages.push(`Created Tailwind CSS config file: ${path.basename(tailwindConfigLocation)}`)
|
||
|
}
|
||
|
|
||
|
if (args['--postcss']) {
|
||
|
let postcssConfigLocation = path.resolve('./postcss.config.js')
|
||
|
if (fs.existsSync(postcssConfigLocation)) {
|
||
|
messages.push(`${path.basename(postcssConfigLocation)} already exists.`)
|
||
|
} else {
|
||
|
let stubFile = fs.readFileSync(
|
||
|
isProjectESM
|
||
|
? path.resolve(__dirname, '../../../stubs/postcss.config.js')
|
||
|
: path.resolve(__dirname, '../../../stubs/postcss.config.cjs'),
|
||
|
'utf8'
|
||
|
)
|
||
|
|
||
|
fs.writeFileSync(postcssConfigLocation, stubFile, 'utf8')
|
||
|
|
||
|
messages.push(`Created PostCSS config file: ${path.basename(postcssConfigLocation)}`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (messages.length > 0) {
|
||
|
console.log()
|
||
|
for (let message of messages) {
|
||
|
console.log(message)
|
||
|
}
|
||
|
}
|
||
|
}
|