UNPKG

@lipemat/postcss-boilerplate

Version:

Dependencies and scripts for a no config grunt postcss compiler.

66 lines (55 loc) 2.09 kB
import fs from 'fs'; import path from 'path'; import {mergeWithLocalConfig} from '@lipemat/js-boilerplate-shared/helpers/config.js'; import {getPackageConfig} from '@lipemat/js-boilerplate-shared/helpers/package-config.js'; import type {PostCSSGruntTasks} from '../config/postcss'; import type {CachingGruntTasks} from '../config/caching'; import type {CompressGruntTasks} from '../config/compress'; import type {PostcssEntries} from '../config/postcss-entries'; import type {WatchGruntTasks} from '../config/watch'; import type {StylelintGruntTasks} from '../config/stylelint'; export type Environment = 'production' | 'development'; type Configs = { 'postcss-entries': PostcssEntries; 'caching': { config: CachingGruntTasks }; 'compress': CompressGruntTasks; 'postcss': PostCSSGruntTasks; 'stylelint': StylelintGruntTasks; 'watch': WatchGruntTasks; }; /** * Get a config for our /config directory merged with any * matching configuration from the project directory. * * For instance, if we have a file named config/babel.config.js in our project * we will merge the contents with our config/babel.config.js in favor of whatever * is specified with the project's file. */ export function getConfig<T extends keyof Configs>( fileName: T ): Configs[T] { const config = require( '../config/' + fileName ); return mergeWithLocalConfig<Configs[T]>( fileName, config ); } /** * Provide CSS properties and media queries to all postcss plugins. * * If a media-queries files exist, automatically load them. * If CSS variables exist, automatically load them. * * 1. pcss/globals/variables.pcss * 3. pcss/globals/media-queries.pcss */ export function getExternalFiles(): string[] { const externalFiles: string[] = []; const packageConfig = getPackageConfig(); [ path.resolve( packageConfig.theme_path, 'pcss/globals/media-queries.pcss' ), path.resolve( packageConfig.theme_path, 'pcss/globals/variables.pcss' ), ].forEach( possibleFile => { if ( fs.existsSync( possibleFile ) ) { externalFiles.push( possibleFile ); } } ); return externalFiles; }