@lipemat/postcss-boilerplate
Version:
Dependencies and scripts for a no config grunt postcss compiler.
66 lines (55 loc) • 2.09 kB
text/typescript
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;
}