UNPKG

atomatic

Version:

An easy to use build and development tool for Atomic Design Systems, that works with rollup.js, Browserify, webpack and many more...

87 lines (70 loc) 2.4 kB
const path = require('path'), sgUtil = require('../util'), Collector = require('./Collector'); class IconCollector extends Collector { constructor(...args) { super(...args); this.globPattern = path.join('**', '*.svg'); this.icons = new Map(); } collectSection(...args) { const section = Object.assign(super.collectSection(...args), { sourceDir: path.resolve(__dirname, '..', '..', 'app/sections/icons'), warnOnMissingDataFile: false }); this.setIndexFile.call(this, section); } setIndexFile(section) { const {getGetSectionDataFunction, getIcons, logLevel} = this, {title, sourceDir, destDir} = section, filename = path.relative(process.cwd(), path.join(sourceDir, 'index.pug')), file = this.createFileObj({filename, section}); Object.defineProperty(file, 'title', { get: () => title }); Object.defineProperty(file, 'data', { get: () => { if (!file._data || file._data.timestamp !== file.timestamp) { file._data = getGetSectionDataFunction.call(file); file._data.locals.icons = getIcons.call(this, destDir); file._data.pageTitle = file.title; file._data.collector = file.collector; file._data.timestamp = Date.now(); if (logLevel > 2) { sgUtil.log(`Component Data: \u001b[1m${file.title}\u001b[22m generated. (${file.timestamp})`, 'info'); } } else if (logLevel > 2) { sgUtil.log(`Component Data: \u001b[1m${file.title}\u001b[22m use cached. (${file.timestamp})`); } return file._data; } }); return this.CollectorStore.setFile(file); } setFile({filename, section: {sourceDir, destDir}}) { this.CollectorPaths.set(filename, sourceDir, destDir); this.icons.set(filename, sgUtil.readFileContents(filename)); } unsetFile(filename) { this.icons.delete(filename); } getIcons(destDir) { const getComponentName = this.getComponentName.bind(this), copySource = this.getCopySourceFunction(), icons = {}; this.icons.forEach((icon, filename) => { copySource(filename, getComponentName(destDir, filename)); icons[this.CollectorPaths.relativeFileName(filename)] = icon; }); return icons; } initDataLoader() { return null; } } module.exports = IconCollector;