UNPKG

@strapi/pack-up

Version:

Simple tools for creating interoperable CJS & ESM packages.

117 lines (116 loc) 4.07 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const chokidar = require("chokidar"); const path = require("path"); const rxjs = require("rxjs"); const createBuildContext = require("./createBuildContext-Degoc55x.js"); const errors = require("./errors-BG4CMlQA.js"); const index = require("./index-DxTZekLC.js"); const _interopDefault = (e) => e && e.__esModule ? e : { default: e }; const chokidar__default = /* @__PURE__ */ _interopDefault(chokidar); const path__default = /* @__PURE__ */ _interopDefault(path); const watch$1 = async (opts) => { const { silent, debug, cwd = process.cwd(), configFile = true, config: providedConfig } = opts; const logger = errors.createLogger({ silent, debug }); logger.debug("watching config files"); const configFilePaths = ["package.json", ...createBuildContext.CONFIG_FILE_NAMES].map( (fileName) => path__default.default.resolve(cwd, fileName).split(path__default.default.sep).join(path__default.default.posix.sep) ); const watcher$ = new rxjs.Observable((subscriber) => { const watcher = chokidar__default.default.watch(configFilePaths, { ignoreInitial: true }); const handleEvent = (event, filePath) => { subscriber.next({ event, path: filePath }); }; watcher.on("all", handleEvent); return () => { watcher.off("all", handleEvent); watcher.close(); }; }); const configFiles$ = watcher$.pipe( rxjs.scan((files, { event, path: filePath }) => { if (event === "add") { logger.debug("config file added", filePath); return [...files, filePath]; } if (event === "unlink") { logger.debug("config file removed", filePath); return files.filter((fPath) => fPath !== filePath); } if (event === "change") { logger.log( "--------------------------------------------------------------------------------" ); logger.info(path__default.default.relative(cwd, filePath), "changed"); return files.slice(0); } return files; }, configFilePaths), rxjs.startWith(configFilePaths), rxjs.distinctUntilChanged() ); const ctx$ = configFiles$.pipe( rxjs.switchMap(async (configFiles) => { const files = configFiles.map((f) => path__default.default.relative(cwd, f)); const packageJsonPath = files.find((f) => f === "package.json"); if (!packageJsonPath) { throw new Error("missing package.json"); } const rawPkg = await createBuildContext.loadPkg({ cwd, logger }); const validatedPkg = await createBuildContext.validatePkg({ pkg: rawPkg }).catch((err) => { logger.error(err.message); process.exit(1); }); const packageJson = await createBuildContext.validateExportsOrdering({ pkg: validatedPkg, logger }).catch( (err) => { logger.error(err.message); process.exit(1); } ); const config = configFile ? await createBuildContext.loadConfig({ cwd, logger }) : providedConfig; const extMap = createBuildContext.getExportExtensionMap(); return createBuildContext.createBuildContext({ config: { ...config }, cwd, extMap, logger, pkg: packageJson }).catch((err) => { logger.error(err.message); process.exit(1); }); }) ); ctx$.subscribe(async (ctx) => { const watchTasks = await index.createWatchTasks(ctx); for (const task of watchTasks) { const handler = index.taskHandlers[task.type]; const result$ = handler.run$(ctx, task); result$.subscribe({ error(err) { handler.fail(ctx, task, err); process.exit(1); }, next(result) { handler.success(ctx, task, result); } }); } }); }; const watch = async (options) => { try { await watch$1(options); } catch (err) { errors.handleError(err); } }; exports.watch = watch; //# sourceMappingURL=watch-DGX2FB4U.js.map