@adocasts.com/jumpstart
Version:
Jumpstart your next AdonisJS 6 web project with authentication, forgot password, and more features out-of-the-box.
52 lines (51 loc) • 1.86 kB
JavaScript
import { mkdir, writeFile } from 'node:fs/promises';
import { readFileOrDefault } from '../utils/file_helper.js';
import BaseScaffold from './base_scaffold.js';
export default class TailwindScaffold extends BaseScaffold {
command;
constructor(command) {
super(command);
this.command = command;
}
static installs = [
{ name: 'tailwindcss', isDevDependency: true },
{ name: '@tailwindcss/vite', isDevDependency: true },
];
async run() {
await this.boot();
const cssPath = this.app.makePath('resources/css');
const cssFile = this.app.makePath('resources/css/app.css');
const cssContents = '@import "tailwindcss";\n@source "../views";\n';
const defaultReset = '* {\n margin: 0;\n padding: 0;\n}';
let css = await readFileOrDefault(cssFile, '');
let wasChanged = false;
if (!css.includes('[x-cloak]')) {
const cloak = '[x-cloak] { display: none; }\n';
css = css ? `${cloak}${css}` : cloak;
wasChanged = true;
}
if (!css.includes('@import tailwindcss')) {
css = css ? `${cssContents}\n${css}` : cssContents;
wasChanged = true;
}
if (css.includes(defaultReset)) {
css = css.replace(defaultReset, '');
wasChanged = true;
}
if (wasChanged) {
await mkdir(cssPath, { recursive: true });
await writeFile(cssFile, css);
this.logger.action('update resources/css/app.css');
}
await this.#addVitePlugin();
}
async #addVitePlugin() {
this.codemods.registerVitePlugin('tailwindcss()', [
{
isNamed: false,
module: '@tailwindcss/vite',
identifier: 'tailwindcss',
},
]);
}
}