UNPKG

6.37 kBJavaScriptView Raw
1import { resolve, relative } from "path";
2import module from "module";
3const { createRequire } = module;
4const require = createRequire(import.meta.url);
5import { fileExists } from "./fs.js";
6import { createConfiguration } from "snowpack";
7import cc from "cosmiconfig";
8import { yellow } from "kleur/colors";
9const { cosmiconfig } = cc;
10const _config = require("microsite/assets/snowpack.config.cjs");
11const pkg = require(resolve(process.cwd(), "package.json"));
12// const deps = Object.keys(
13// pkg.dependencies || {}
14// );
15const DEFAULT_BASE_PATH = pkg.homepage || '/';
16export function resolveNormalizedBasePath(args) {
17 var _a;
18 let basePath = (_a = args['--base-path']) !== null && _a !== void 0 ? _a : DEFAULT_BASE_PATH;
19 return basePath === '/' ? basePath : `/${basePath.replace(/^\//, '').replace(/\/$/, '')}/`;
20}
21async function hasPostCSSConfig() {
22 try {
23 const explorer = cosmiconfig("postcss");
24 const result = await explorer.search();
25 if (result.filepath)
26 return true;
27 }
28 catch (e) { }
29 return false;
30}
31export async function loadConfiguration(mode) {
32 var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
33 const [snowpackconfigPath, tsconfigPath, usesPostCSS] = await Promise.all([
34 findSnowpackConfig(),
35 findTsOrJsConfig(),
36 hasPostCSSConfig(),
37 ]);
38 const aliases = tsconfigPath
39 ? resolveTsconfigPathsToAlias({ tsconfigPath })
40 : {};
41 const userConfig = snowpackconfigPath ? require(snowpackconfigPath) : {};
42 if (usesPostCSS) {
43 const missing = [];
44 const deps = ['@snowpack/plugin-postcss', 'postcss', 'postcss-cli'];
45 deps.forEach(dependency => {
46 try {
47 require.resolve(dependency);
48 }
49 catch (e) {
50 missing.push(dependency);
51 }
52 });
53 if (missing.length > 0) {
54 console.error(yellow(`It looks like you're trying to use PostCSS!\nMicrosite will automatically use your configuration, but requires some 'devDependencies' to do so.\n\nPlease run 'npm install --save-dev ${missing.join(' ')}'\n`));
55 process.exit(1);
56 }
57 }
58 const additionalPlugins = usesPostCSS ? ["@snowpack/plugin-postcss"] : [];
59 switch (mode) {
60 case "dev":
61 return createConfiguration(Object.assign(Object.assign(Object.assign({}, userConfig), _config), { buildOptions: Object.assign(Object.assign(Object.assign({}, userConfig.buildOptions), _config.buildOptions), { ssr: true }), packageOptions: Object.assign(Object.assign(Object.assign({}, userConfig.packageOptions), _config.packageOptions), { external: [
62 ...((_b = (_a = userConfig.packageOptions) === null || _a === void 0 ? void 0 : _a.external) !== null && _b !== void 0 ? _b : []),
63 ..._config.packageOptions.external,
64 ].filter((v) => !v.startsWith('microsite')) }), plugins: [...additionalPlugins, ..._config.plugins, ...((_c = userConfig.plugins) !== null && _c !== void 0 ? _c : [])], alias: Object.assign(Object.assign(Object.assign(Object.assign({}, ((_d = userConfig.alias) !== null && _d !== void 0 ? _d : {})), aliases), ((_e = _config.alias) !== null && _e !== void 0 ? _e : {})), { "microsite/hydrate": "microsite/client/hydrate" }) }));
65 case "build":
66 return createConfiguration(Object.assign(Object.assign(Object.assign({}, userConfig), _config), { buildOptions: Object.assign(Object.assign(Object.assign({}, userConfig.buildOptions), _config.buildOptions), { ssr: true }), plugins: [...additionalPlugins, ..._config.plugins, ...((_f = userConfig.plugins) !== null && _f !== void 0 ? _f : [])], alias: Object.assign(Object.assign(Object.assign({}, ((_g = userConfig.alias) !== null && _g !== void 0 ? _g : {})), aliases), ((_h = _config.alias) !== null && _h !== void 0 ? _h : {})), packageOptions: Object.assign(Object.assign({}, _config.packageOptions), { external: [
67 ...((_k = (_j = userConfig.packageOptions) === null || _j === void 0 ? void 0 : _j.external) !== null && _k !== void 0 ? _k : []),
68 ..._config.packageOptions.external,
69 ].filter((v) => v !== "preact"), rollup: Object.assign(Object.assign(Object.assign({}, ((_m = (_l = userConfig.installOptions) === null || _l === void 0 ? void 0 : _l.rollup) !== null && _m !== void 0 ? _m : {})), ((_p = (_o = _config.installOptions) === null || _o === void 0 ? void 0 : _o.rollup) !== null && _p !== void 0 ? _p : {})), { plugins: [
70 ...((_s = (_r = (_q = userConfig.installOptions) === null || _q === void 0 ? void 0 : _q.rollup) === null || _r === void 0 ? void 0 : _r.plugins) !== null && _s !== void 0 ? _s : []),
71 {
72 name: '@microsite/auto-external',
73 options(opts) {
74 return Object.assign({}, opts, { external: (source) => source.startsWith('preact') });
75 }
76 }
77 ] }) }) }));
78 }
79}
80const findSnowpackConfig = async () => {
81 const cwd = process.cwd();
82 const snowpack = resolve(cwd, './snowpack.config.cjs');
83 if (await fileExists(snowpack))
84 return snowpack;
85 return null;
86};
87const findTsOrJsConfig = async () => {
88 const cwd = process.cwd();
89 const tsconfig = resolve(cwd, "./tsconfig.json");
90 if (await fileExists(tsconfig))
91 return tsconfig;
92 const jsconfig = resolve(cwd, "./jsconfig.json");
93 if (await fileExists(jsconfig))
94 return jsconfig;
95 return null;
96};
97function resolveTsconfigPathsToAlias({ tsconfigPath = "./tsconfig.json", } = {}) {
98 var _a, _b;
99 let { baseUrl, paths } = (_b = (_a = require(tsconfigPath)) === null || _a === void 0 ? void 0 : _a.compilerOptions) !== null && _b !== void 0 ? _b : {};
100 if (!(baseUrl && paths))
101 return {};
102 baseUrl = resolve(process.cwd(), baseUrl);
103 const aliases = {};
104 Object.keys(paths).forEach((item) => {
105 const key = item.replace("/*", "");
106 const value = "./" +
107 relative(process.cwd(), resolve(baseUrl, paths[item][0].replace("/*", "").replace("*", "")));
108 aliases[key] = value;
109 });
110 return aliases;
111}