@gouvfr/dsfr-nexus
Version:
Le module `dsfr-nexus` est l'interface de ligne de commande (CLI) centrale du Système de Design de l’État - DSFR. Il offre des outils pour gérer et compiler les ressources du DSFR
72 lines (59 loc) • 2.53 kB
JavaScript
import { getStates } from '../../common/state/state.js';
import { PartPublisher } from './part/part-publisher.js';
import { DEPLOY_FOLDER, ENV_FOLDER } from '../../common/constants.js';
import { BundlePublisher } from './integration/bundle-publisher.js';
import { StorybookPublisher } from './integration/storybook-publisher.js';
import { RedirectionPublisher } from './integration/redirection-publisher.js'
import { SearchPublisher } from './integration/search/search-publisher.js'
import { IndexingPublisher } from './integration/indexing-publisher.js';
import { FilterPublisher } from './integration/filter/filter-publisher.js';
class DSFRPublisher {
async publish (settings) {
if (!settings.bypass) {
const bundlePublisher = new BundlePublisher(DEPLOY_FOLDER, ENV_FOLDER);
await bundlePublisher.clean();
await bundlePublisher.copy(settings.context);
await bundlePublisher.compile();
}
const states = await getStates({ src: '.', dest: DEPLOY_FOLDER });
for (const state of states) {
await this._publish(settings, state);
}
}
async _publish (settings, state) {
if (!settings.bypass) {
const redirectionPublisher = new RedirectionPublisher(state);
await redirectionPublisher.read();
await redirectionPublisher.write();
const storybookPublisher = new StorybookPublisher(state);
await storybookPublisher.copy();
if (state.version.isCurrent) {
const indexingPublisher = new IndexingPublisher(state);
await indexingPublisher.write();
}
}
const partIds = settings.partIds ? state.partIds.filter(id => settings.partIds.includes(id)) : state.partIds;
this._parts = [];
const searchPublisher = new SearchPublisher(state);
const iconFilterPublisher = new FilterPublisher(state, 'icon');
const pictogramFilterPublisher = new FilterPublisher(state, 'pictogram');
const colorsFilterPublisher = new FilterPublisher(state, 'colors');
for (const id of partIds) {
const partState = state.setPart(id);
const part = new PartPublisher(partState);
this._parts.push(part);
await part.read();
searchPublisher.add(part.collections);
}
for (const part of this._parts) {
await part.write();
}
if (!settings.bypass && !settings.partIds) {
await searchPublisher.write();
await iconFilterPublisher.write();
await pictogramFilterPublisher.write();
await colorsFilterPublisher.write();
}
}
}
export { DSFRPublisher };