nitro-nightly 3.1.0-20251028-004953-57503e42 → 3.1.0-20251028-110430-e607b753
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_build/assets.mjs +235 -0
- package/dist/_build/build.mjs +21 -0
- package/dist/_build/config.mjs +124 -0
- package/dist/_build/info.mjs +39 -0
- package/dist/_build/plugins.mjs +1041 -0
- package/dist/_build/prepare.mjs +17 -0
- package/dist/{_chunks/build2.mjs → _build/rolldown.mjs} +238 -64
- package/dist/_build/rollup.mjs +404 -0
- package/dist/_build/snapshot.mjs +61 -0
- package/dist/_build/types.mjs +268 -0
- package/dist/_build/vite.mjs +3266 -0
- package/dist/{cli → _cli}/build.mjs +2 -3
- package/dist/_cli/dev.mjs +205 -0
- package/dist/{cli/index2.mjs → _cli/index.mjs} +1 -2
- package/dist/{cli → _cli}/list.mjs +2 -3
- package/dist/{cli → _cli}/prepare.mjs +2 -3
- package/dist/{cli → _cli}/run.mjs +2 -3
- package/dist/_deps/@jridgewell/gen-mapping.mjs +189 -0
- package/dist/_deps/@jridgewell/remapping.mjs +137 -0
- package/dist/_deps/@jridgewell/resolve-uri.mjs +231 -0
- package/dist/_deps/@jridgewell/sourcemap-codec.mjs +173 -0
- package/dist/_deps/@jridgewell/trace-mapping.mjs +170 -0
- package/dist/_deps/@pi0/vite-plugin-fullstack.mjs +575 -0
- package/dist/_deps/@rollup/plugin-alias.mjs +89 -0
- package/dist/_deps/@rollup/plugin-commonjs.mjs +2376 -0
- package/dist/{_chunks/index2.mjs → _deps/@rollup/plugin-inject.mjs} +5 -90
- package/dist/_deps/@rollup/plugin-json.mjs +37 -0
- package/dist/_deps/@rollup/plugin-node-resolve.mjs +1386 -0
- package/dist/_deps/@rollup/plugin-replace.mjs +133 -0
- package/dist/_deps/@rollup/pluginutils.mjs +346 -0
- package/dist/_deps/acorn.mjs +6225 -0
- package/dist/_deps/c12.mjs +510 -0
- package/dist/_deps/chokidar.mjs +1428 -0
- package/dist/_deps/citty.mjs +460 -0
- package/dist/_deps/commondir.mjs +77 -0
- package/dist/_deps/compatx.mjs +76 -0
- package/dist/_deps/confbox.mjs +300 -0
- package/dist/_deps/debug.mjs +885 -0
- package/dist/_deps/deepmerge.mjs +147 -0
- package/dist/_deps/depd.mjs +550 -0
- package/dist/_deps/dot-prop.mjs +282 -0
- package/dist/_deps/dotenv.mjs +555 -0
- package/dist/_deps/duplexer.mjs +1 -0
- package/dist/_deps/ee-first.mjs +104 -0
- package/dist/_deps/encodeurl.mjs +69 -0
- package/dist/_deps/escape-html.mjs +87 -0
- package/dist/_deps/escape-string-regexp.mjs +13 -0
- package/dist/_deps/estree-walker.mjs +433 -0
- package/dist/_deps/etag.mjs +147 -0
- package/dist/_deps/exsolve.mjs +1416 -0
- package/dist/_deps/fdir.mjs +569 -0
- package/dist/_deps/fresh.mjs +145 -0
- package/dist/_deps/function-bind.mjs +106 -0
- package/dist/{_chunks/index4.mjs → _deps/giget.mjs} +21 -776
- package/dist/_deps/gzip-size.mjs +19 -0
- package/dist/_deps/hasown.mjs +19 -0
- package/dist/_deps/http-errors.mjs +307 -0
- package/dist/_deps/httpxy.mjs +580 -0
- package/dist/_deps/inherits.mjs +57 -0
- package/dist/_deps/is-core-module.mjs +596 -0
- package/dist/_deps/is-module.mjs +25 -0
- package/dist/_deps/is-reference.mjs +31 -0
- package/dist/_deps/js-tokens.mjs +411 -0
- package/dist/_deps/knitwork.mjs +172 -0
- package/dist/_deps/local-pkg.mjs +163 -0
- package/dist/_deps/magic-string.mjs +1296 -0
- package/dist/_deps/mime-db.mjs +11685 -0
- package/dist/_deps/mime-types.mjs +287 -0
- package/dist/_deps/mime.mjs +1172 -0
- package/dist/_deps/mlly.mjs +2413 -0
- package/dist/_deps/ms.mjs +172 -0
- package/dist/_deps/node-fetch-native.mjs +3 -0
- package/dist/_deps/nypm.mjs +219 -0
- package/dist/_deps/on-finished.mjs +246 -0
- package/dist/_deps/parseurl.mjs +168 -0
- package/dist/_deps/path-parse.mjs +85 -0
- package/dist/{_chunks/pathe.M-eThtNZ.mjs → _deps/pathe.mjs} +48 -1
- package/dist/_deps/perfect-debounce.mjs +88 -0
- package/dist/_deps/picomatch.mjs +2144 -0
- package/dist/_deps/pkg-types.mjs +247 -0
- package/dist/_deps/pretty-bytes.mjs +180 -0
- package/dist/_deps/quansync.mjs +99 -0
- package/dist/_deps/range-parser.mjs +171 -0
- package/dist/_deps/rc9.mjs +219 -0
- package/dist/_deps/readdirp.mjs +245 -0
- package/dist/_deps/resolve.mjs +1260 -0
- package/dist/_deps/rou3.mjs +326 -0
- package/dist/_deps/send.mjs +1022 -0
- package/dist/_deps/serve-static.mjs +228 -0
- package/dist/_deps/setprototypeof.mjs +26 -0
- package/dist/_deps/statuses.mjs +457 -0
- package/dist/_deps/strip-literal.mjs +67 -0
- package/dist/_deps/supports-color.mjs +44 -0
- package/dist/_deps/tinyexec.mjs +552 -0
- package/dist/_deps/tinyglobby.mjs +293 -0
- package/dist/_deps/toidentifier.mjs +41 -0
- package/dist/_deps/ultrahtml.mjs +3 -0
- package/dist/_deps/unimport.mjs +2267 -0
- package/dist/_deps/unplugin-utils.mjs +65 -0
- package/dist/_deps/unplugin.mjs +1294 -0
- package/dist/_deps/untyped.mjs +375 -0
- package/dist/{_chunks/info.mjs → _deps/unwasm.mjs} +8 -4122
- package/dist/_deps/webpack-virtual-modules.mjs +360 -0
- package/dist/_presets/_all.mjs +59 -0
- package/dist/_presets/_nitro.mjs +74 -0
- package/dist/_presets/_resolve.mjs +64 -0
- package/dist/_presets/_static.mjs +69 -0
- package/dist/_presets/_types.mjs +3 -0
- package/dist/_presets/_utils.mjs +31 -0
- package/dist/_presets/alwaysdata.mjs +17 -0
- package/dist/_presets/aws-amplify.mjs +111 -0
- package/dist/_presets/aws-lambda.mjs +23 -0
- package/dist/_presets/azure.mjs +162 -0
- package/dist/_presets/bun.mjs +19 -0
- package/dist/_presets/cleavr.mjs +15 -0
- package/dist/_presets/cloudflare.mjs +608 -0
- package/dist/_presets/deno.mjs +196 -0
- package/dist/_presets/digitalocean.mjs +14 -0
- package/dist/_presets/firebase.mjs +47 -0
- package/dist/_presets/flightcontrol.mjs +14 -0
- package/dist/_presets/genezio.mjs +13 -0
- package/dist/_presets/heroku.mjs +14 -0
- package/dist/_presets/iis.mjs +194 -0
- package/dist/_presets/index.mjs +62 -0
- package/dist/_presets/koyeb.mjs +14 -0
- package/dist/_presets/netlify.mjs +241 -0
- package/dist/_presets/node.mjs +54 -0
- package/dist/_presets/platform.mjs +14 -0
- package/dist/_presets/render.mjs +14 -0
- package/dist/_presets/standard.mjs +23 -0
- package/dist/_presets/stormkit.mjs +18 -0
- package/dist/_presets/vercel.mjs +365 -0
- package/dist/_presets/winterjs.mjs +22 -0
- package/dist/_presets/zeabur.mjs +69 -0
- package/dist/_presets/zerops.mjs +27 -0
- package/dist/cli/index.mjs +7 -464
- package/dist/index.mjs +122 -34
- package/dist/vite.mjs +118 -44
- package/package.json +1 -1
- package/dist/_chunks/app.mjs +0 -19797
- package/dist/_chunks/build.mjs +0 -86
- package/dist/_chunks/build3.mjs +0 -6538
- package/dist/_chunks/detect-acorn.mjs +0 -503
- package/dist/_chunks/index.mjs +0 -22256
- package/dist/_chunks/index3.mjs +0 -1062
- package/dist/_chunks/json5.mjs +0 -68
- package/dist/_chunks/jsonc.mjs +0 -51
- package/dist/_chunks/plugin.mjs +0 -1560
- package/dist/_chunks/server.mjs +0 -254
- package/dist/_chunks/snapshot.mjs +0 -376
- package/dist/_chunks/toml.mjs +0 -259
- package/dist/_chunks/yaml.mjs +0 -86
- package/dist/cli/dev.mjs +0 -95
- package/dist/presets.mjs +0 -2494
- /package/dist/{cli → _cli}/common.mjs +0 -0
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import { existsSync, statSync, promises } from 'node:fs';
|
|
2
|
+
import { rm, readFile } from 'node:fs/promises';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { r as resolveModulePath } from './exsolve.mjs';
|
|
6
|
+
import { createJiti } from 'jiti';
|
|
7
|
+
import { r as read, a as readUser } from './rc9.mjs';
|
|
8
|
+
import { defu } from 'defu';
|
|
9
|
+
import { f as findWorkspaceDir, r as readPackageJSON } from './pkg-types.mjs';
|
|
10
|
+
import { m as mainExports } from './dotenv.mjs';
|
|
11
|
+
import { a as resolve, j as join, d as dirname, c as basename, e as extname, n as normalize } from './pathe.mjs';
|
|
12
|
+
import { d as debounce } from './perfect-debounce.mjs';
|
|
13
|
+
|
|
14
|
+
async function setupDotenv(options) {
|
|
15
|
+
const targetEnvironment = options.env ?? process.env;
|
|
16
|
+
const environment = await loadDotenv({
|
|
17
|
+
cwd: options.cwd,
|
|
18
|
+
fileName: options.fileName ?? ".env",
|
|
19
|
+
env: targetEnvironment,
|
|
20
|
+
interpolate: options.interpolate ?? true
|
|
21
|
+
});
|
|
22
|
+
const dotenvVars = getDotEnvVars(targetEnvironment);
|
|
23
|
+
for (const key in environment) {
|
|
24
|
+
if (key.startsWith("_")) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (targetEnvironment[key] === void 0 || dotenvVars.has(key)) {
|
|
28
|
+
targetEnvironment[key] = environment[key];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return environment;
|
|
32
|
+
}
|
|
33
|
+
async function loadDotenv(options) {
|
|
34
|
+
const environment = /* @__PURE__ */ Object.create(null);
|
|
35
|
+
const cwd = resolve(options.cwd || ".");
|
|
36
|
+
const _fileName = options.fileName || ".env";
|
|
37
|
+
const dotenvFiles = typeof _fileName === "string" ? [_fileName] : _fileName;
|
|
38
|
+
const dotenvVars = getDotEnvVars(options.env || {});
|
|
39
|
+
Object.assign(environment, options.env);
|
|
40
|
+
for (const file of dotenvFiles) {
|
|
41
|
+
const dotenvFile = resolve(cwd, file);
|
|
42
|
+
if (!statSync(dotenvFile, { throwIfNoEntry: false })?.isFile()) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const parsed = mainExports.parse(await promises.readFile(dotenvFile, "utf8"));
|
|
46
|
+
for (const key in parsed) {
|
|
47
|
+
if (key in environment && !dotenvVars.has(key)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
environment[key] = parsed[key];
|
|
51
|
+
dotenvVars.add(key);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (options.interpolate) {
|
|
55
|
+
interpolate(environment);
|
|
56
|
+
}
|
|
57
|
+
return environment;
|
|
58
|
+
}
|
|
59
|
+
function interpolate(target, source = {}, parse = (v) => v) {
|
|
60
|
+
function getValue(key) {
|
|
61
|
+
return source[key] === void 0 ? target[key] : source[key];
|
|
62
|
+
}
|
|
63
|
+
function interpolate2(value, parents = []) {
|
|
64
|
+
if (typeof value !== "string") {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
const matches = value.match(/(.?\${?(?:[\w:]+)?}?)/g) || [];
|
|
68
|
+
return parse(
|
|
69
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
|
70
|
+
matches.reduce((newValue, match) => {
|
|
71
|
+
const parts = /(.?)\${?([\w:]+)?}?/g.exec(match) || [];
|
|
72
|
+
const prefix = parts[1];
|
|
73
|
+
let value2, replacePart;
|
|
74
|
+
if (prefix === "\\") {
|
|
75
|
+
replacePart = parts[0] || "";
|
|
76
|
+
value2 = replacePart.replace(String.raw`\$`, "$");
|
|
77
|
+
} else {
|
|
78
|
+
const key = parts[2];
|
|
79
|
+
replacePart = (parts[0] || "").slice(prefix.length);
|
|
80
|
+
if (parents.includes(key)) {
|
|
81
|
+
console.warn(
|
|
82
|
+
`Please avoid recursive environment variables ( loop: ${parents.join(
|
|
83
|
+
" > "
|
|
84
|
+
)} > ${key} )`
|
|
85
|
+
);
|
|
86
|
+
return "";
|
|
87
|
+
}
|
|
88
|
+
value2 = getValue(key);
|
|
89
|
+
value2 = interpolate2(value2, [...parents, key]);
|
|
90
|
+
}
|
|
91
|
+
return value2 === void 0 ? newValue : newValue.replace(replacePart, value2);
|
|
92
|
+
}, value)
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
for (const key in target) {
|
|
96
|
+
target[key] = interpolate2(getValue(key));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function getDotEnvVars(targetEnvironment) {
|
|
100
|
+
const globalRegistry = globalThis.__c12_dotenv_vars__ ||= /* @__PURE__ */ new Map();
|
|
101
|
+
if (!globalRegistry.has(targetEnvironment)) {
|
|
102
|
+
globalRegistry.set(targetEnvironment, /* @__PURE__ */ new Set());
|
|
103
|
+
}
|
|
104
|
+
return globalRegistry.get(targetEnvironment);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const _normalize = (p) => p?.replace(/\\/g, "/");
|
|
108
|
+
const ASYNC_LOADERS = {
|
|
109
|
+
".yaml": () => import('./confbox.mjs').then(function (n) { return n.y; }).then((r) => r.parseYAML),
|
|
110
|
+
".yml": () => import('./confbox.mjs').then(function (n) { return n.y; }).then((r) => r.parseYAML),
|
|
111
|
+
".jsonc": () => import('./confbox.mjs').then(function (n) { return n.c; }).then((r) => r.parseJSONC),
|
|
112
|
+
".json5": () => import('./confbox.mjs').then(function (n) { return n.j; }).then((r) => r.parseJSON5),
|
|
113
|
+
".toml": () => import('./confbox.mjs').then(function (n) { return n.t; }).then((r) => r.parseTOML)
|
|
114
|
+
};
|
|
115
|
+
const SUPPORTED_EXTENSIONS = Object.freeze([
|
|
116
|
+
// with jiti
|
|
117
|
+
".js",
|
|
118
|
+
".ts",
|
|
119
|
+
".mjs",
|
|
120
|
+
".cjs",
|
|
121
|
+
".mts",
|
|
122
|
+
".cts",
|
|
123
|
+
".json",
|
|
124
|
+
// with confbox
|
|
125
|
+
".jsonc",
|
|
126
|
+
".json5",
|
|
127
|
+
".yaml",
|
|
128
|
+
".yml",
|
|
129
|
+
".toml"
|
|
130
|
+
]);
|
|
131
|
+
async function loadConfig(options) {
|
|
132
|
+
options.cwd = resolve(process.cwd(), options.cwd || ".");
|
|
133
|
+
options.name = options.name || "config";
|
|
134
|
+
options.envName = options.envName ?? process.env.NODE_ENV;
|
|
135
|
+
options.configFile = options.configFile ?? (options.name === "config" ? "config" : `${options.name}.config`);
|
|
136
|
+
options.rcFile = options.rcFile ?? `.${options.name}rc`;
|
|
137
|
+
if (options.extend !== false) {
|
|
138
|
+
options.extend = {
|
|
139
|
+
extendKey: "extends",
|
|
140
|
+
...options.extend
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const _merger = options.merger || defu;
|
|
144
|
+
options.jiti = options.jiti || createJiti(join(options.cwd, options.configFile), {
|
|
145
|
+
interopDefault: true,
|
|
146
|
+
moduleCache: false,
|
|
147
|
+
extensions: [...SUPPORTED_EXTENSIONS],
|
|
148
|
+
...options.jitiOptions
|
|
149
|
+
});
|
|
150
|
+
const r = {
|
|
151
|
+
config: {},
|
|
152
|
+
cwd: options.cwd,
|
|
153
|
+
configFile: resolve(options.cwd, options.configFile),
|
|
154
|
+
layers: [],
|
|
155
|
+
_configFile: void 0
|
|
156
|
+
};
|
|
157
|
+
const rawConfigs = {
|
|
158
|
+
overrides: options.overrides,
|
|
159
|
+
main: void 0,
|
|
160
|
+
rc: void 0,
|
|
161
|
+
packageJson: void 0,
|
|
162
|
+
defaultConfig: options.defaultConfig
|
|
163
|
+
};
|
|
164
|
+
if (options.dotenv) {
|
|
165
|
+
await setupDotenv({
|
|
166
|
+
cwd: options.cwd,
|
|
167
|
+
...options.dotenv === true ? {} : options.dotenv
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
const _mainConfig = await resolveConfig(".", options);
|
|
171
|
+
if (_mainConfig.configFile) {
|
|
172
|
+
rawConfigs.main = _mainConfig.config;
|
|
173
|
+
r.configFile = _mainConfig.configFile;
|
|
174
|
+
r._configFile = _mainConfig._configFile;
|
|
175
|
+
}
|
|
176
|
+
if (_mainConfig.meta) {
|
|
177
|
+
r.meta = _mainConfig.meta;
|
|
178
|
+
}
|
|
179
|
+
if (options.rcFile) {
|
|
180
|
+
const rcSources = [];
|
|
181
|
+
rcSources.push(read({ name: options.rcFile, dir: options.cwd }));
|
|
182
|
+
if (options.globalRc) {
|
|
183
|
+
const workspaceDir = await findWorkspaceDir(options.cwd).catch(() => {
|
|
184
|
+
});
|
|
185
|
+
if (workspaceDir) {
|
|
186
|
+
rcSources.push(read({ name: options.rcFile, dir: workspaceDir }));
|
|
187
|
+
}
|
|
188
|
+
rcSources.push(readUser({ name: options.rcFile, dir: options.cwd }));
|
|
189
|
+
}
|
|
190
|
+
rawConfigs.rc = _merger({}, ...rcSources);
|
|
191
|
+
}
|
|
192
|
+
if (options.packageJson) {
|
|
193
|
+
const keys = (Array.isArray(options.packageJson) ? options.packageJson : [
|
|
194
|
+
typeof options.packageJson === "string" ? options.packageJson : options.name
|
|
195
|
+
]).filter((t) => t && typeof t === "string");
|
|
196
|
+
const pkgJsonFile = await readPackageJSON(options.cwd).catch(() => {
|
|
197
|
+
});
|
|
198
|
+
const values = keys.map((key) => pkgJsonFile?.[key]);
|
|
199
|
+
rawConfigs.packageJson = _merger({}, ...values);
|
|
200
|
+
}
|
|
201
|
+
const configs = {};
|
|
202
|
+
for (const key in rawConfigs) {
|
|
203
|
+
const value = rawConfigs[key];
|
|
204
|
+
configs[key] = await (typeof value === "function" ? value({ configs, rawConfigs }) : value);
|
|
205
|
+
}
|
|
206
|
+
if (Array.isArray(configs.main)) {
|
|
207
|
+
r.config = configs.main;
|
|
208
|
+
} else {
|
|
209
|
+
r.config = _merger(
|
|
210
|
+
configs.overrides,
|
|
211
|
+
configs.main,
|
|
212
|
+
configs.rc,
|
|
213
|
+
configs.packageJson,
|
|
214
|
+
configs.defaultConfig
|
|
215
|
+
);
|
|
216
|
+
if (options.extend) {
|
|
217
|
+
await extendConfig(r.config, options);
|
|
218
|
+
r.layers = r.config._layers;
|
|
219
|
+
delete r.config._layers;
|
|
220
|
+
r.config = _merger(r.config, ...r.layers.map((e) => e.config));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const baseLayers = [
|
|
224
|
+
configs.overrides && {
|
|
225
|
+
config: configs.overrides,
|
|
226
|
+
configFile: void 0,
|
|
227
|
+
cwd: void 0
|
|
228
|
+
},
|
|
229
|
+
{ config: configs.main, configFile: options.configFile, cwd: options.cwd },
|
|
230
|
+
configs.rc && { config: configs.rc, configFile: options.rcFile },
|
|
231
|
+
configs.packageJson && {
|
|
232
|
+
config: configs.packageJson,
|
|
233
|
+
configFile: "package.json"
|
|
234
|
+
}
|
|
235
|
+
].filter((l) => l && l.config);
|
|
236
|
+
r.layers = [...baseLayers, ...r.layers];
|
|
237
|
+
if (options.defaults) {
|
|
238
|
+
r.config = _merger(r.config, options.defaults);
|
|
239
|
+
}
|
|
240
|
+
if (options.omit$Keys) {
|
|
241
|
+
for (const key in r.config) {
|
|
242
|
+
if (key.startsWith("$")) {
|
|
243
|
+
delete r.config[key];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (options.configFileRequired && !r._configFile) {
|
|
248
|
+
throw new Error(`Required config (${r.configFile}) cannot be resolved.`);
|
|
249
|
+
}
|
|
250
|
+
return r;
|
|
251
|
+
}
|
|
252
|
+
async function extendConfig(config, options) {
|
|
253
|
+
config._layers = config._layers || [];
|
|
254
|
+
if (!options.extend) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
let keys = options.extend.extendKey;
|
|
258
|
+
if (typeof keys === "string") {
|
|
259
|
+
keys = [keys];
|
|
260
|
+
}
|
|
261
|
+
const extendSources = [];
|
|
262
|
+
for (const key of keys) {
|
|
263
|
+
extendSources.push(
|
|
264
|
+
...(Array.isArray(config[key]) ? config[key] : [config[key]]).filter(
|
|
265
|
+
Boolean
|
|
266
|
+
)
|
|
267
|
+
);
|
|
268
|
+
delete config[key];
|
|
269
|
+
}
|
|
270
|
+
for (let extendSource of extendSources) {
|
|
271
|
+
const originalExtendSource = extendSource;
|
|
272
|
+
let sourceOptions = {};
|
|
273
|
+
if (extendSource.source) {
|
|
274
|
+
sourceOptions = extendSource.options || {};
|
|
275
|
+
extendSource = extendSource.source;
|
|
276
|
+
}
|
|
277
|
+
if (Array.isArray(extendSource)) {
|
|
278
|
+
sourceOptions = extendSource[1] || {};
|
|
279
|
+
extendSource = extendSource[0];
|
|
280
|
+
}
|
|
281
|
+
if (typeof extendSource !== "string") {
|
|
282
|
+
console.warn(
|
|
283
|
+
`Cannot extend config from \`${JSON.stringify(
|
|
284
|
+
originalExtendSource
|
|
285
|
+
)}\` in ${options.cwd}`
|
|
286
|
+
);
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
const _config = await resolveConfig(extendSource, options, sourceOptions);
|
|
290
|
+
if (!_config.config) {
|
|
291
|
+
console.warn(
|
|
292
|
+
`Cannot extend config from \`${extendSource}\` in ${options.cwd}`
|
|
293
|
+
);
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
await extendConfig(_config.config, { ...options, cwd: _config.cwd });
|
|
297
|
+
config._layers.push(_config);
|
|
298
|
+
if (_config.config._layers) {
|
|
299
|
+
config._layers.push(..._config.config._layers);
|
|
300
|
+
delete _config.config._layers;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const GIGET_PREFIXES = [
|
|
305
|
+
"gh:",
|
|
306
|
+
"github:",
|
|
307
|
+
"gitlab:",
|
|
308
|
+
"bitbucket:",
|
|
309
|
+
"https://",
|
|
310
|
+
"http://"
|
|
311
|
+
];
|
|
312
|
+
const NPM_PACKAGE_RE = /^(@[\da-z~-][\d._a-z~-]*\/)?[\da-z~-][\d._a-z~-]*($|\/.*)/;
|
|
313
|
+
async function resolveConfig(source, options, sourceOptions = {}) {
|
|
314
|
+
if (options.resolve) {
|
|
315
|
+
const res2 = await options.resolve(source, options);
|
|
316
|
+
if (res2) {
|
|
317
|
+
return res2;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
const _merger = options.merger || defu;
|
|
321
|
+
const customProviderKeys = Object.keys(
|
|
322
|
+
sourceOptions.giget?.providers || {}
|
|
323
|
+
).map((key) => `${key}:`);
|
|
324
|
+
const gigetPrefixes = customProviderKeys.length > 0 ? [.../* @__PURE__ */ new Set([...customProviderKeys, ...GIGET_PREFIXES])] : GIGET_PREFIXES;
|
|
325
|
+
if (options.giget !== false && gigetPrefixes.some((prefix) => source.startsWith(prefix))) {
|
|
326
|
+
const { downloadTemplate } = await import('./giget.mjs');
|
|
327
|
+
const { digest } = await import('ohash');
|
|
328
|
+
const cloneName = source.replace(/\W+/g, "_").split("_").splice(0, 3).join("_") + "_" + digest(source).slice(0, 10).replace(/[-_]/g, "");
|
|
329
|
+
let cloneDir;
|
|
330
|
+
const localNodeModules = resolve(options.cwd, "node_modules");
|
|
331
|
+
const parentDir = dirname(options.cwd);
|
|
332
|
+
if (basename(parentDir) === ".c12") {
|
|
333
|
+
cloneDir = join(parentDir, cloneName);
|
|
334
|
+
} else if (existsSync(localNodeModules)) {
|
|
335
|
+
cloneDir = join(localNodeModules, ".c12", cloneName);
|
|
336
|
+
} else {
|
|
337
|
+
cloneDir = process.env.XDG_CACHE_HOME ? resolve(process.env.XDG_CACHE_HOME, "c12", cloneName) : resolve(homedir(), ".cache/c12", cloneName);
|
|
338
|
+
}
|
|
339
|
+
if (existsSync(cloneDir) && !sourceOptions.install) {
|
|
340
|
+
await rm(cloneDir, { recursive: true });
|
|
341
|
+
}
|
|
342
|
+
const cloned = await downloadTemplate(source, {
|
|
343
|
+
dir: cloneDir,
|
|
344
|
+
install: sourceOptions.install,
|
|
345
|
+
force: sourceOptions.install,
|
|
346
|
+
auth: sourceOptions.auth,
|
|
347
|
+
...options.giget,
|
|
348
|
+
...sourceOptions.giget
|
|
349
|
+
});
|
|
350
|
+
source = cloned.dir;
|
|
351
|
+
}
|
|
352
|
+
if (NPM_PACKAGE_RE.test(source)) {
|
|
353
|
+
source = tryResolve(source, options) || source;
|
|
354
|
+
}
|
|
355
|
+
const ext = extname(source);
|
|
356
|
+
const isDir = !ext || ext === basename(source);
|
|
357
|
+
const cwd = resolve(options.cwd, isDir ? source : dirname(source));
|
|
358
|
+
if (isDir) {
|
|
359
|
+
source = options.configFile;
|
|
360
|
+
}
|
|
361
|
+
const res = {
|
|
362
|
+
config: void 0,
|
|
363
|
+
configFile: void 0,
|
|
364
|
+
cwd,
|
|
365
|
+
source,
|
|
366
|
+
sourceOptions
|
|
367
|
+
};
|
|
368
|
+
res.configFile = tryResolve(resolve(cwd, source), options) || tryResolve(
|
|
369
|
+
resolve(cwd, ".config", source.replace(/\.config$/, "")),
|
|
370
|
+
options
|
|
371
|
+
) || tryResolve(resolve(cwd, ".config", source), options) || source;
|
|
372
|
+
if (!existsSync(res.configFile)) {
|
|
373
|
+
return res;
|
|
374
|
+
}
|
|
375
|
+
res._configFile = res.configFile;
|
|
376
|
+
const configFileExt = extname(res.configFile) || "";
|
|
377
|
+
if (configFileExt in ASYNC_LOADERS) {
|
|
378
|
+
const asyncLoader = await ASYNC_LOADERS[configFileExt]();
|
|
379
|
+
const contents = await readFile(res.configFile, "utf8");
|
|
380
|
+
res.config = asyncLoader(contents);
|
|
381
|
+
} else {
|
|
382
|
+
res.config = await options.jiti.import(res.configFile, {
|
|
383
|
+
default: true
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
if (typeof res.config === "function") {
|
|
387
|
+
res.config = await res.config(options.context);
|
|
388
|
+
}
|
|
389
|
+
if (options.envName) {
|
|
390
|
+
const envConfig = {
|
|
391
|
+
...res.config["$" + options.envName],
|
|
392
|
+
...res.config.$env?.[options.envName]
|
|
393
|
+
};
|
|
394
|
+
if (Object.keys(envConfig).length > 0) {
|
|
395
|
+
res.config = _merger(envConfig, res.config);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
res.meta = defu(res.sourceOptions.meta, res.config.$meta);
|
|
399
|
+
delete res.config.$meta;
|
|
400
|
+
if (res.sourceOptions.overrides) {
|
|
401
|
+
res.config = _merger(res.sourceOptions.overrides, res.config);
|
|
402
|
+
}
|
|
403
|
+
res.configFile = _normalize(res.configFile);
|
|
404
|
+
res.source = _normalize(res.source);
|
|
405
|
+
return res;
|
|
406
|
+
}
|
|
407
|
+
function tryResolve(id, options) {
|
|
408
|
+
const res = resolveModulePath(id, {
|
|
409
|
+
try: true,
|
|
410
|
+
from: pathToFileURL(join(options.cwd || ".", options.configFile || "/")),
|
|
411
|
+
suffixes: ["", "/index"],
|
|
412
|
+
extensions: SUPPORTED_EXTENSIONS,
|
|
413
|
+
cache: false
|
|
414
|
+
});
|
|
415
|
+
return res ? normalize(res) : void 0;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
const eventMap = {
|
|
419
|
+
add: "created",
|
|
420
|
+
change: "updated",
|
|
421
|
+
unlink: "removed"
|
|
422
|
+
};
|
|
423
|
+
async function watchConfig(options) {
|
|
424
|
+
let config = await loadConfig(options);
|
|
425
|
+
const configName = options.name || "config";
|
|
426
|
+
const configFileName = options.configFile ?? (options.name === "config" ? "config" : `${options.name}.config`);
|
|
427
|
+
const watchingFiles = [
|
|
428
|
+
...new Set(
|
|
429
|
+
(config.layers || []).filter((l) => l.cwd).flatMap((l) => [
|
|
430
|
+
...SUPPORTED_EXTENSIONS.flatMap((ext) => [
|
|
431
|
+
resolve(l.cwd, configFileName + ext),
|
|
432
|
+
resolve(l.cwd, ".config", configFileName + ext),
|
|
433
|
+
resolve(
|
|
434
|
+
l.cwd,
|
|
435
|
+
".config",
|
|
436
|
+
configFileName.replace(/\.config$/, "") + ext
|
|
437
|
+
)
|
|
438
|
+
]),
|
|
439
|
+
l.source && resolve(l.cwd, l.source),
|
|
440
|
+
// TODO: Support watching rc from home and workspace
|
|
441
|
+
options.rcFile && resolve(
|
|
442
|
+
l.cwd,
|
|
443
|
+
typeof options.rcFile === "string" ? options.rcFile : `.${configName}rc`
|
|
444
|
+
),
|
|
445
|
+
options.packageJson && resolve(l.cwd, "package.json")
|
|
446
|
+
]).filter(Boolean)
|
|
447
|
+
)
|
|
448
|
+
];
|
|
449
|
+
const watch = await import('./chokidar.mjs').then((r) => r.watch || r.default || r);
|
|
450
|
+
const { diff } = await import('ohash/utils');
|
|
451
|
+
const _fswatcher = watch(watchingFiles, {
|
|
452
|
+
ignoreInitial: true,
|
|
453
|
+
...options.chokidarOptions
|
|
454
|
+
});
|
|
455
|
+
const onChange = async (event, path) => {
|
|
456
|
+
const type = eventMap[event];
|
|
457
|
+
if (!type) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (options.onWatch) {
|
|
461
|
+
await options.onWatch({
|
|
462
|
+
type,
|
|
463
|
+
path
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
const oldConfig = config;
|
|
467
|
+
try {
|
|
468
|
+
config = await loadConfig(options);
|
|
469
|
+
} catch (error) {
|
|
470
|
+
console.warn(`Failed to load config ${path}
|
|
471
|
+
${error}`);
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
const changeCtx = {
|
|
475
|
+
newConfig: config,
|
|
476
|
+
oldConfig,
|
|
477
|
+
getDiff: () => diff(oldConfig.config, config.config)
|
|
478
|
+
};
|
|
479
|
+
if (options.acceptHMR) {
|
|
480
|
+
const changeHandled = await options.acceptHMR(changeCtx);
|
|
481
|
+
if (changeHandled) {
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
if (options.onUpdate) {
|
|
486
|
+
await options.onUpdate(changeCtx);
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
if (options.debounce === false) {
|
|
490
|
+
_fswatcher.on("all", onChange);
|
|
491
|
+
} else {
|
|
492
|
+
_fswatcher.on("all", debounce(onChange, options.debounce ?? 100));
|
|
493
|
+
}
|
|
494
|
+
const utils = {
|
|
495
|
+
watchingFiles,
|
|
496
|
+
unwatch: async () => {
|
|
497
|
+
await _fswatcher.close();
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
return new Proxy(utils, {
|
|
501
|
+
get(_, prop) {
|
|
502
|
+
if (prop in utils) {
|
|
503
|
+
return utils[prop];
|
|
504
|
+
}
|
|
505
|
+
return config[prop];
|
|
506
|
+
}
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
export { loadConfig as l, watchConfig as w };
|