@gouvfr/dsfr-roller
Version:
Le module `dsfr-roller` permet de publier le site de documentation du Système de Design de l’État - DSFR
60 lines (51 loc) • 1.99 kB
JavaScript
import { ROLLER_MODULE, BANNER } from '../constants.js';
import { copyDir, getPackagePath } from '@gouvfr/dsfr-forge';
import { ScriptCompiler, StyleCompiler } from '@gouvfr/dsfr-alchemist'
import path from 'path'
import fs from 'fs'
class Bundler {
constructor (dest, env) {
this._dest = dest;
this._env = env;
}
async copy (context = 'local') {
await copyDir(path.join(ROLLER_MODULE, 'static'), path.join(this._dest, 'static'));
switch (context) {
case 'archive':
await copyDir(path.join(ROLLER_MODULE, 'env'), this._env);
break;
case 'local':
default:
await copyDir(path.join(ROLLER_MODULE, 'env/local'), this._dest);
break;
}
}
async compile () {
await this._compileScripts();
await this._compileStyles();
}
async _compileScripts () {
const scriptCompiler = new ScriptCompiler();
const entries = fs.readdirSync(`${ROLLER_MODULE}/src/script`, { withFileTypes: true });
for (const entry of entries) {
if (!entry.isDirectory()) continue;
const index = `${ROLLER_MODULE}/src/script/${entry.name}/index.js`;
if (!fs.existsSync(index)) continue;
await scriptCompiler.compile(index, `${this._dest}/lib`, `dsfr-doc-${entry.name}`, {
minify: true, sourceMap: true, banner: BANNER
});
}
}
async _compileStyles () {
const modulesPath = path.resolve(getPackagePath('@gouvfr/dsfr-publisher'), '../../') + '/';
const styleCompiler = new StyleCompiler();
const entries = fs.readdirSync(`${ROLLER_MODULE}/src/style`, { withFileTypes: true });
for (const entry of entries) {
if (!entry.isDirectory()) continue;
const index = `${ROLLER_MODULE}/src/style/${entry.name}/index.scss`;
if (!fs.existsSync(index)) continue;
await styleCompiler.compile(index, `${this._dest}/lib`, `dsfr-doc-${entry.name}`, { minify: true, sourceMap: true, banner: BANNER, loadPaths: [modulesPath] });
}
}
}
export { Bundler };