@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
47 lines (38 loc) • 1.56 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { Facet } from './facet.js';
class FacetParser {
constructor (directory, version, extension, filename = null) {
this._directory = directory;
this._extension = extension.indexOf('.') > -1 ? extension : `.${extension}`;
this._version = version;
this._filename = filename;
}
async read () {
this._facets = fs.readdirSync(this._directory, { withFileTypes: true })
.filter(file => file.isFile() && path.extname(file.name) === this._extension)
.map(file => new Facet(file.name, this._version, this._directory))
.filter(facet => facet.isSatisfying && facet.testFilename(this._filename));
this._filenames = this._facets.map(facet => facet.filename).filter((filename, index, filenames) => filenames.indexOf(filename) === index);
}
get has () {
return this._facets.length > 0;
}
get filenames () {
return this._filenames;
}
getFacet (locale = null, filename = null) {
const filterFilename = filename ? facet => facet.filename === filename : facet => true;
const filterLocale = locale ? facet => (facet.isAlt && facet.testLocale(locale)) || !facet.isAlt : facet => !facet.isAlt;
const facets = this._facets
.filter(filterFilename)
.filter(filterLocale)
.sort((a, b) => b.relevance - a.relevance);
return facets.length > 0 ? facets[0] : null;
}
loadFacet (locale, filename) {
const facet = this.getFacet(locale, filename);
return facet ? facet.load(locale) : null;
}
}
export { FacetParser };