UNPKG

microsite

Version:
52 lines (51 loc) 2.77 kB
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; }