microsite
Version:
<br /> <br />
52 lines (51 loc) • 2.77 kB
JavaScript
import { resolve, relative } from 'path';
import module from 'module';
const { createRequire } = module;
const require = createRequire(import.meta.url);
import { fileExists } from './fs.js';
import { createConfiguration } from 'snowpack';
import cc from 'cosmiconfig';
const { cosmiconfig } = cc;
const _config = require("microsite/assets/snowpack.config.cjs");
const deps = Object.keys(require(resolve(process.cwd(), 'package.json')).dependencies || {});
async function hasPostCSSConfig() {
try {
const explorer = cosmiconfig('postcss');
const result = await explorer.search();
if (result.filepath)
return true;
}
catch (e) { }
return false;
}
export async function loadConfiguration(mode) {
var _a, _b;
const [tsconfigPath, usesPostCSS] = await Promise.all([findTsOrJsConfig(), hasPostCSSConfig()]);
const aliases = (tsconfigPath) ? resolveTsconfigPathsToAlias({ tsconfigPath }) : {};
const additionalPlugins = usesPostCSS ? ['@snowpack/plugin-postcss'] : [];
switch (mode) {
case 'dev': return createConfiguration(Object.assign(Object.assign({}, _config), { plugins: [...additionalPlugins, ..._config.plugins], alias: Object.assign(Object.assign(Object.assign({}, aliases), ((_a = _config.alias) !== null && _a !== void 0 ? _a : {})), { "microsite/hydrate": "microsite/client/hydrate" }), installOptions: Object.assign(Object.assign({}, _config.installOptions), { externalPackage: ["/web_modules/microsite/_error.js"] }) }));
case 'build': return createConfiguration(Object.assign(Object.assign({}, _config), { plugins: [...additionalPlugins, ..._config.plugins], alias: Object.assign(Object.assign({}, aliases), ((_b = _config.alias) !== null && _b !== void 0 ? _b : {})), installOptions: Object.assign(Object.assign({}, _config.installOptions), { externalPackage: [..._config.installOptions.externalPackage, ...deps].filter(v => v !== 'preact') }) }));
}
}
const findTsOrJsConfig = async () => {
const cwd = process.cwd();
const tsconfig = resolve(cwd, './tsconfig.json');
if (await fileExists(tsconfig))
return tsconfig;
const jsconfig = resolve(cwd, './jsconfig.json');
if (await fileExists(jsconfig))
return jsconfig;
return null;
};
function resolveTsconfigPathsToAlias({ tsconfigPath = './tsconfig.json' } = {}) {
let { baseUrl, paths } = require(tsconfigPath).compilerOptions;
baseUrl = resolve(process.cwd(), baseUrl);
const aliases = {};
Object.keys(paths).forEach((item) => {
const key = item.replace('/*', '');
const value = './' + relative(process.cwd(), resolve(baseUrl, paths[item][0].replace('/*', '').replace('*', '')));
aliases[key] = value;
});
return aliases;
}