@theme-json/create
Version:
Split WordPress theme.json into smaller files.
59 lines (58 loc) • 1.7 kB
JavaScript
/**
* External dependencies
*/
import { cosmiconfig } from 'cosmiconfig';
import { join } from 'path';
import slash from 'slash';
/**
* Internal dependencies
*/
import { getCurrentWorkingDirectory } from './process.mjs';
import { addTrailingSlash } from './file.mjs';
const defaultConfig = {
src: 'theme-json',
dest: 'theme.json',
addSchema: false,
pretty: false,
version: 2,
wpVersion: 'trunk',
plugins: [],
};
export async function getConfig() {
const explorerSync = cosmiconfig('theme-json');
const config = (await explorerSync.search()) || { config: {} };
const optimizedConfig = [];
if (!Array.isArray(config.config)) {
config.config = [config.config];
}
// Loop through each config object and merge with default config
for (const currentConfig of config.config) {
const mergedConfig = {
...defaultConfig,
...currentConfig,
};
// Make src absolute
mergedConfig.src = slash(join(getCurrentWorkingDirectory(), addTrailingSlash(mergedConfig.src)));
// Make dest absolute
mergedConfig.dest = join(getCurrentWorkingDirectory(), mergedConfig.dest);
optimizedConfig.push(mergedConfig);
}
return optimizedConfig;
}
export async function getPlugins(config) {
const before = [];
const after = [];
for (const plugin of config.plugins) {
const importedPlugin = await import(plugin);
if (importedPlugin.before) {
before.push(importedPlugin.before);
}
if (importedPlugin.after) {
after.push(importedPlugin.after);
}
}
return {
before,
after,
};
}