UNPKG

@rnm/tscx

Version:

A tsc wrapper with many convenient features.

80 lines 9.95 kB
// this file should not have `async` and `await` import path from "node:path"; import process from "node:process"; import chokidar, {} from "chokidar"; import { Compiler } from "./compiler.js"; export class Action { options; lastUpdateTsconfigTime = Date.now(); compiler; watcher; constructor(options) { this.options = options; const { watch, ...compilerOptions } = options; this.compiler = new Compiler(compilerOptions); } watch(paths) { this.watcher = chokidar .watch(paths, { ignored: [ "**/node_modules/**", "**/.git/**", this.compiler.getOutDir(), ], ignoreInitial: true, }) .on("add", (filepath) => this.cb(filepath)) .on("unlink", (filepath) => this.cb(filepath)) .on("change", (filepath) => this.cb(filepath)) .on("ready", () => this.cb()); } setupWatcher() { const include = this.compiler.getInclude() ?? []; const watchFiles = include.length <= 0 ? [process.cwd()] : include .map((i) => path.resolve(process.cwd(), i)) .concat(path.resolve(process.cwd(), this.options.project)); if (this.watcher) { // If this method throw an error (I mean the promise rejected), the process will exit with non-zero code. // See https://github.com/zanminkian/zanminkian.github.io/issues/54 this.watcher.close().then(() => this.watch(watchFiles), (e) => { throw new Error("Close watcher fail!", { cause: e }); }); } else { this.watch(watchFiles); } } cb(filepath) { console.log("File changes detected", filepath); // user edit non-tsconfig files if (!filepath || path.resolve(process.cwd(), filepath) !== path.resolve(process.cwd(), this.options.project)) { return this.compiler.compile(); } // user edit tsconfig file const now = Date.now(); if (now - this.lastUpdateTsconfigTime < 1000) { return; } try { this.compiler.refreshTsConfig(); } catch (e) { console.warn("Refresh ts config fail. You can ignore this small warning.", e); return; } this.setupWatcher(); this.lastUpdateTsconfigTime = now; } start() { if (!this.options.watch) { this.compiler.compile(); return; } this.setupWatcher(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnREFBZ0Q7QUFDaEQsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLFFBQVEsRUFBRSxFQUFrQixNQUFNLFVBQVUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUF3QixNQUFNLGVBQWUsQ0FBQztBQU0vRCxNQUFNLE9BQU8sTUFBTTtJQUtZO0lBSnJCLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUUzQixRQUFRLENBQUM7SUFDbEIsT0FBTyxDQUFhO0lBQzVCLFlBQTZCLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDL0MsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM5QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxLQUFLLENBQUMsS0FBZTtRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVE7YUFDcEIsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNaLE9BQU8sRUFBRTtnQkFDUCxvQkFBb0I7Z0JBQ3BCLFlBQVk7Z0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7YUFDMUI7WUFDRCxhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDO2FBQ0QsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMxQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzdDLEVBQUUs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cyBmaWxlIHNob3VsZCBub3QgaGF2ZSBgYXN5bmNgIGFuZCBgYXdhaXRgXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgY2hva2lkYXIsIHsgdHlwZSBGU1dhdGNoZXIgfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCB7IENvbXBpbGVyLCB0eXBlIENvbXBpbGVyT3B0aW9ucyB9IGZyb20gXCIuL2NvbXBpbGVyLnRzXCI7XG5cbmludGVyZmFjZSBUc2N4T3B0aW9ucyBleHRlbmRzIENvbXBpbGVyT3B0aW9ucyB7XG4gIHdhdGNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uIHtcbiAgcHJpdmF0ZSBsYXN0VXBkYXRlVHNjb25maWdUaW1lID0gRGF0ZS5ub3coKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVyO1xuICBwcml2YXRlIHdhdGNoZXI/OiBGU1dhdGNoZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVHNjeE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHdhdGNoLCAuLi5jb21waWxlck9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgdGhpcy5jb21waWxlciA9IG5ldyBDb21waWxlcihjb21waWxlck9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaChwYXRoczogc3RyaW5nW10pIHtcbiAgICB0aGlzLndhdGNoZXIgPSBjaG9raWRhclxuICAgICAgLndhdGNoKHBhdGhzLCB7XG4gICAgICAgIGlnbm9yZWQ6IFtcbiAgICAgICAgICBcIioqL25vZGVfbW9kdWxlcy8qKlwiLFxuICAgICAgICAgIFwiKiovLmdpdC8qKlwiLFxuICAgICAgICAgIHRoaXMuY29tcGlsZXIuZ2V0T3V0RGlyKCksXG4gICAgICAgIF0sXG4gICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICB9KVxuICAgICAgLm9uKFwiYWRkXCIsIChmaWxlcGF0aCkgPT4gdGhpcy5jYihmaWxlcGF0aCkpXG4gICAgICAub24oXCJ1bmxpbmtcIiwgKGZpbGVwYXRoKSA9PiB0aGlzLmNiKGZpbGVwYXRoKSlcbiAgICAgIC5vbihcImNoYW5nZVwiLCAoZmlsZXBhdGgpID0+IHRoaXMuY2IoZmlsZXBhdGgpKVxuICAgICAgLm9uKFwicmVhZHlcIiwgKCkgPT4gdGhpcy5jYigpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBXYXRjaGVyKCkge1xuICAgIGNvbnN0IGluY2x1ZGUgPSB0aGlzLmNvbXBpbGVyLmdldEluY2x1ZGUoKSA/PyBbXTtcbiAgICBjb25zdCB3YXRjaEZpbGVzID1cbiAgICAgIGluY2x1ZGUubGVuZ3RoIDw9IDBcbiAgICAgICAgPyBbcHJvY2Vzcy5jd2QoKV1cbiAgICAgICAgOiBpbmNsdWRlXG4gICAgICAgICAgICAubWFwKChpKSA9PiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgaSkpXG4gICAgICAgICAgICAuY29uY2F0KHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCB0aGlzLm9wdGlvbnMucHJvamVjdCkpO1xuXG4gICAgaWYgKHRoaXMud2F0Y2hlcikge1xuICAgICAgLy8gSWYgdGhpcyBtZXRob2QgdGhyb3cgYW4gZXJyb3IgKEkgbWVhbiB0aGUgcHJvbWlzZSByZWplY3RlZCksIHRoZSBwcm9jZXNzIHdpbGwgZXhpdCB3aXRoIG5vbi16ZXJvIGNvZGUuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3phbm1pbmtpYW4vemFubWlua2lhbi5naXRodWIuaW8vaXNzdWVzLzU0XG4gICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKS50aGVuKFxuICAgICAgICAoKSA9PiB0aGlzLndhdGNoKHdhdGNoRmlsZXMpLFxuICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNsb3NlIHdhdGNoZXIgZmFpbCFcIiwgeyBjYXVzZTogZSB9KTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2F0Y2god2F0Y2hGaWxlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYihmaWxlcGF0aD86IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKFwiRmlsZSBjaGFuZ2VzIGRldGVjdGVkXCIsIGZpbGVwYXRoKTtcbiAgICAvLyB1c2VyIGVkaXQgbm9uLXRzY29uZmlnIGZpbGVzXG4gICAgaWYgKFxuICAgICAgIWZpbGVwYXRoIHx8XG4gICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgZmlsZXBhdGgpICE9PVxuICAgICAgICBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgdGhpcy5vcHRpb25zLnByb2plY3QpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlci5jb21waWxlKCk7XG4gICAgfVxuXG4gICAgLy8gdXNlciBlZGl0IHRzY29uZmlnIGZpbGVcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RVcGRhdGVUc2NvbmZpZ1RpbWUgPCAxMDAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbXBpbGVyLnJlZnJlc2hUc0NvbmZpZygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJSZWZyZXNoIHRzIGNvbmZpZyBmYWlsLiBZb3UgY2FuIGlnbm9yZSB0aGlzIHNtYWxsIHdhcm5pbmcuXCIsXG4gICAgICAgIGUsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldHVwV2F0Y2hlcigpO1xuICAgIHRoaXMubGFzdFVwZGF0ZVRzY29uZmlnVGltZSA9IG5vdztcbiAgfVxuXG4gIHN0YXJ0KCkge1xuICAgIGlmICghdGhpcy5vcHRpb25zLndhdGNoKSB7XG4gICAgICB0aGlzLmNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwV2F0Y2hlcigpO1xuICB9XG59XG4iXX0=