| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import { l as loadConfig, S as SUPPORTED_EXTENSIONS } from './shared/c12.CEGFwQZa.mjs';
- export { a as loadDotenv, s as setupDotenv } from './shared/c12.CEGFwQZa.mjs';
- import { debounce } from 'perfect-debounce';
- import { resolve } from 'pathe';
- import 'node:fs';
- import 'node:fs/promises';
- import 'node:url';
- import 'node:os';
- import 'exsolve';
- import 'jiti';
- import 'rc9';
- import 'defu';
- import 'pkg-types';
- import 'dotenv';
- function createDefineConfig() {
- return (input) => input;
- }
- const eventMap = {
- add: "created",
- change: "updated",
- unlink: "removed"
- };
- async function watchConfig(options) {
- let config = await loadConfig(options);
- const configName = options.name || "config";
- const configFileName = options.configFile ?? (options.name === "config" ? "config" : `${options.name}.config`);
- const watchingFiles = [
- ...new Set(
- (config.layers || []).filter((l) => l.cwd).flatMap((l) => [
- ...SUPPORTED_EXTENSIONS.flatMap((ext) => [
- resolve(l.cwd, configFileName + ext),
- resolve(l.cwd, ".config", configFileName + ext),
- resolve(
- l.cwd,
- ".config",
- configFileName.replace(/\.config$/, "") + ext
- )
- ]),
- l.source && resolve(l.cwd, l.source),
- // TODO: Support watching rc from home and workspace
- options.rcFile && resolve(
- l.cwd,
- typeof options.rcFile === "string" ? options.rcFile : `.${configName}rc`
- ),
- options.packageJson && resolve(l.cwd, "package.json")
- ]).filter(Boolean)
- )
- ];
- const watch = await import('chokidar').then((r) => r.watch || r.default || r);
- const { diff } = await import('ohash/utils');
- const _fswatcher = watch(watchingFiles, {
- ignoreInitial: true,
- ...options.chokidarOptions
- });
- const onChange = async (event, path) => {
- const type = eventMap[event];
- if (!type) {
- return;
- }
- if (options.onWatch) {
- await options.onWatch({
- type,
- path
- });
- }
- const oldConfig = config;
- try {
- config = await loadConfig(options);
- } catch (error) {
- console.warn(`Failed to load config ${path}
- ${error}`);
- return;
- }
- const changeCtx = {
- newConfig: config,
- oldConfig,
- getDiff: () => diff(oldConfig.config, config.config)
- };
- if (options.acceptHMR) {
- const changeHandled = await options.acceptHMR(changeCtx);
- if (changeHandled) {
- return;
- }
- }
- if (options.onUpdate) {
- await options.onUpdate(changeCtx);
- }
- };
- if (options.debounce === false) {
- _fswatcher.on("all", onChange);
- } else {
- _fswatcher.on("all", debounce(onChange, options.debounce ?? 100));
- }
- const utils = {
- watchingFiles,
- unwatch: async () => {
- await _fswatcher.close();
- }
- };
- return new Proxy(utils, {
- get(_, prop) {
- if (prop in utils) {
- return utils[prop];
- }
- return config[prop];
- }
- });
- }
- export { SUPPORTED_EXTENSIONS, createDefineConfig, loadConfig, watchConfig };
|