1 | import { resolve, relative } from "path";
|
2 | import module from "module";
|
3 | const { createRequire } = module;
|
4 | const require = createRequire(import.meta.url);
|
5 | import { fileExists } from "./fs.js";
|
6 | import { createConfiguration } from "snowpack";
|
7 | import cc from "cosmiconfig";
|
8 | import { yellow } from "kleur/colors";
|
9 | const { cosmiconfig } = cc;
|
10 | const _config = require("microsite/assets/snowpack.config.cjs");
|
11 | const pkg = require(resolve(process.cwd(), "package.json"));
|
12 |
|
13 |
|
14 |
|
15 | const DEFAULT_BASE_PATH = pkg.homepage || '/';
|
16 | export 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 | }
|
21 | async 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 | }
|
31 | export 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 | }
|
80 | const 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 | };
|
87 | const 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 | };
|
97 | function 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 | }
|