UNPKG

astx

Version:

super powerful structural search and replace for JavaScript and TypeScript to automate your refactoring

144 lines (126 loc) 12.2 kB
#!/usr/bin/env node import { Worker } from 'worker_threads' import emitted from 'p-event' export default class AstxWorker { worker _seq = 0 _running = false ended = false constructor() { this.startWorker() } async end() { if (this.ended) return this.ended = true const { worker } = this if (worker) { await worker.terminate() this.worker = undefined } } startWorker() { if (this.ended) return const worker = new Worker(new URL('./AstxWorkerEntry.mjs', import.meta.url)) this.worker = worker worker.once('exit', async () => { this.worker = undefined if (this.ended) return await new Promise((r) => setTimeout(r, 1000)) this.startWorker() }) } get running() { return this.running } async getWorker() { while (!this.worker) { await new Promise((r) => setTimeout(r, 1000)) } if (this.worker) return this.worker throw new Error('unexpected') } async runTransformOnFile({ file, transform, transformFile, config, signal }) { const worker = await this.getWorker() if (this._running) { throw new Error(`a transform is currently running`) } const seq = this._seq++ try { var _on, _ref this._running = true signal === null || signal === void 0 ? void 0 : (_on = (_ref = signal).on) === null || _on === void 0 ? void 0 : _on.call(_ref, 'abort', () => { worker.postMessage({ type: 'abort', seq, }) }) const promise = Promise.race([ emitted(worker, 'message', { filter: (event) => event.seq === seq, rejectionEvents: ['error', 'exit'], }).catch((reason) => typeof reason === 'number' ? `worker exited with code ${reason}` : reason ), ...(signal ? [ emitted(signal, '', { rejectionEvents: ['abort'], }), ] : []), ]) promise.catch(() => { // ignore }) worker.postMessage({ type: 'runTransformOnFile', seq, file, transform: transformFile ? undefined : transform, transformFile, ...(config && { config, }), }) const message = await promise switch (message.type) { case 'error': { const error = new Error(message.error.message) error.stack = message.error.stack throw error } case 'transformResult': { var _result$reports const { result } = message if ( (_result$reports = result.reports) !== null && _result$reports !== void 0 && _result$reports.length && transform !== null && transform !== void 0 && transform.onReport ) { for (const report of result.reports) { transform.onReport({ file, report, }) } } return result } default: { throw new Error(`unknown message: ${JSON.stringify(message)}`) } } } finally { this._running = false } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXb3JrZXIiLCJlbWl0dGVkIiwiQXN0eFdvcmtlciIsIndvcmtlciIsIl9zZXEiLCJfcnVubmluZyIsImVuZGVkIiwiY29uc3RydWN0b3IiLCJzdGFydFdvcmtlciIsImVuZCIsInRlcm1pbmF0ZSIsInVuZGVmaW5lZCIsInJlcXVpcmUiLCJyZXNvbHZlIiwib25jZSIsIlByb21pc2UiLCJyIiwic2V0VGltZW91dCIsInJ1bm5pbmciLCJnZXRXb3JrZXIiLCJFcnJvciIsInJ1blRyYW5zZm9ybU9uRmlsZSIsImZpbGUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GaWxlIiwiY29uZmlnIiwic2lnbmFsIiwic2VxIiwib24iLCJwb3N0TWVzc2FnZSIsInR5cGUiLCJwcm9taXNlIiwicmFjZSIsImZpbHRlciIsImV2ZW50IiwicmVqZWN0aW9uRXZlbnRzIiwiY2F0Y2giLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3IiLCJzdGFjayIsInJlc3VsdCIsInJlcG9ydHMiLCJsZW5ndGgiLCJvblJlcG9ydCIsInJlcG9ydCIsIkpTT04iLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbm9kZS9Bc3R4V29ya2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgV29ya2VyIH0gZnJvbSAnd29ya2VyX3RocmVhZHMnXG5pbXBvcnQgeyBSdW5UcmFuc2Zvcm1PbkZpbGVPcHRpb25zIH0gZnJvbSAnLi9ydW5UcmFuc2Zvcm1PbkZpbGUnXG5pbXBvcnQgZW1pdHRlZCBmcm9tICdwLWV2ZW50J1xuaW1wb3J0IHsgSXBjVHJhbnNmb3JtUmVzdWx0IH0gZnJvbSAnLi9pcGMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFzdHhXb3JrZXIge1xuICBwcml2YXRlIHdvcmtlcjogV29ya2VyIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3NlcSA9IDBcbiAgcHJpdmF0ZSBfcnVubmluZyA9IGZhbHNlXG4gIHByaXZhdGUgZW5kZWQgPSBmYWxzZVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhcnRXb3JrZXIoKVxuICB9XG5cbiAgYXN5bmMgZW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmVuZGVkKSByZXR1cm5cbiAgICB0aGlzLmVuZGVkID0gdHJ1ZVxuICAgIGNvbnN0IHsgd29ya2VyIH0gPSB0aGlzXG4gICAgaWYgKHdvcmtlcikge1xuICAgICAgYXdhaXQgd29ya2VyLnRlcm1pbmF0ZSgpXG4gICAgICB0aGlzLndvcmtlciA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRXb3JrZXIoKSB7XG4gICAgaWYgKHRoaXMuZW5kZWQpIHJldHVyblxuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIocmVxdWlyZS5yZXNvbHZlKCcuL0FzdHhXb3JrZXJFbnRyeS5iYWJlbC5qcycpKVxuICAgIHRoaXMud29ya2VyID0gd29ya2VyXG4gICAgd29ya2VyLm9uY2UoJ2V4aXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICB0aGlzLndvcmtlciA9IHVuZGVmaW5lZFxuICAgICAgaWYgKHRoaXMuZW5kZWQpIHJldHVyblxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgMTAwMCkpXG4gICAgICB0aGlzLnN0YXJ0V29ya2VyKClcbiAgICB9KVxuICB9XG5cbiAgZ2V0IHJ1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucnVubmluZ1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZXIoKTogUHJvbWlzZTxXb3JrZXI+IHtcbiAgICB3aGlsZSAoIXRoaXMud29ya2VyKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDAwKSlcbiAgICB9XG4gICAgaWYgKHRoaXMud29ya2VyKSByZXR1cm4gdGhpcy53b3JrZXJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQnKVxuICB9XG5cbiAgYXN5bmMgcnVuVHJhbnNmb3JtT25GaWxlKHtcbiAgICBmaWxlLFxuICAgIHRyYW5zZm9ybSxcbiAgICB0cmFuc2Zvcm1GaWxlLFxuICAgIGNvbmZpZyxcbiAgICBzaWduYWwsXG4gIH06IFJ1blRyYW5zZm9ybU9uRmlsZU9wdGlvbnMpOiBQcm9taXNlPElwY1RyYW5zZm9ybVJlc3VsdD4ge1xuICAgIGNvbnN0IHdvcmtlciA9IGF3YWl0IHRoaXMuZ2V0V29ya2VyKClcblxuICAgIGlmICh0aGlzLl9ydW5uaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGEgdHJhbnNmb3JtIGlzIGN1cnJlbnRseSBydW5uaW5nYClcbiAgICB9XG4gICAgY29uc3Qgc2VxID0gdGhpcy5fc2VxKytcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLl9ydW5uaW5nID0gdHJ1ZVxuICAgICAgOyhzaWduYWwgYXMgYW55KT8ub24/LignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IHR5cGU6ICdhYm9ydCcsIHNlcSB9KVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHByb21pc2UgPSBQcm9taXNlLnJhY2UoW1xuICAgICAgICBlbWl0dGVkKHdvcmtlciwgJ21lc3NhZ2UnLCB7XG4gICAgICAgICAgZmlsdGVyOiAoZXZlbnQ6IGFueSkgPT4gZXZlbnQuc2VxID09PSBzZXEsXG4gICAgICAgICAgcmVqZWN0aW9uRXZlbnRzOiBbJ2Vycm9yJywgJ2V4aXQnXSxcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbikgPT5cbiAgICAgICAgICB0eXBlb2YgcmVhc29uID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBgd29ya2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtyZWFzb259YFxuICAgICAgICAgICAgOiByZWFzb25cbiAgICAgICAgKSxcbiAgICAgICAgLi4uKHNpZ25hbFxuICAgICAgICAgID8gW2VtaXR0ZWQoc2lnbmFsIGFzIGFueSwgJycsIHsgcmVqZWN0aW9uRXZlbnRzOiBbJ2Fib3J0J10gfSldXG4gICAgICAgICAgOiBbXSksXG4gICAgICBdKVxuICAgICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfSlcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHR5cGU6ICdydW5UcmFuc2Zvcm1PbkZpbGUnLFxuICAgICAgICBzZXEsXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtRmlsZSA/IHVuZGVmaW5lZCA6IHRyYW5zZm9ybSxcbiAgICAgICAgdHJhbnNmb3JtRmlsZSxcbiAgICAgICAgLi4uKGNvbmZpZyAmJiB7IGNvbmZpZyB9KSxcbiAgICAgIH0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcHJvbWlzZVxuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnZXJyb3InOiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5lcnJvci5tZXNzYWdlKVxuICAgICAgICAgIGVycm9yLnN0YWNrID0gbWVzc2FnZS5lcnJvci5zdGFja1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndHJhbnNmb3JtUmVzdWx0Jzoge1xuICAgICAgICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBtZXNzYWdlXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZXBvcnRzPy5sZW5ndGggJiYgdHJhbnNmb3JtPy5vblJlcG9ydCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXBvcnQgb2YgcmVzdWx0LnJlcG9ydHMpIHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtLm9uUmVwb3J0KHsgZmlsZSwgcmVwb3J0IH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIG1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkobWVzc2FnZSl9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9ydW5uaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0EsTUFBVCxRQUF1QixnQkFBdkI7O0FBRUEsT0FBT0MsT0FBUCxNQUFvQixTQUFwQjs7O0FBR0EsZUFBZSxNQUFNQyxVQUFOLENBQWlCO0VBQ3RCQyxNQUFNO0VBQ05DLElBQUksR0FBRyxDQUFIO0VBQ0pDLFFBQVEsR0FBRyxLQUFIO0VBQ1JDLEtBQUssR0FBRyxLQUFIOztFQUViQyxXQUFXLEdBQUc7SUFDWixLQUFLQyxXQUFMO0VBQ0Q7O0VBRVEsTUFBSEMsR0FBRyxHQUFrQjtJQUN6QixJQUFJLEtBQUtILEtBQVQsRUFBZ0I7SUFDaEIsS0FBS0EsS0FBTCxHQUFhLElBQWI7SUFDQSxNQUFNLEVBQUVILE1BQUYsS0FBYSxJQUFuQjtJQUNBLElBQUlBLE1BQUosRUFBWTtNQUNWLE1BQU1BLE1BQU0sQ0FBQ08sU0FBUCxFQUFOO01BQ0EsS0FBS1AsTUFBTCxHQUFjUSxTQUFkO0lBQ0Q7RUFDRjs7RUFFT0gsV0FBVyxHQUFHO0lBQ3BCLElBQUksS0FBS0YsS0FBVCxFQUFnQjtJQUNoQixNQUFNSCxNQUFNLEdBQUcsSUFBSUgsTUFBSixDQUFXWSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsNEJBQWhCLENBQVgsQ0FBZjtJQUNBLEtBQUtWLE1BQUwsR0FBY0EsTUFBZDtJQUNBQSxNQUFNLENBQUNXLElBQVAsQ0FBWSxNQUFaLEVBQW9CLFlBQVk7TUFDOUIsS0FBS1gsTUFBTCxHQUFjUSxTQUFkO01BQ0EsSUFBSSxLQUFLTCxLQUFULEVBQWdCO01BQ2hCLE1BQU0sSUFBSVMsT0FBSixDQUFZLENBQUNDLENBQUQsS0FBT0MsVUFBVSxDQUFDRCxDQUFELEVBQUksSUFBSixDQUE3QixDQUFOO01BQ0EsS0FBS1IsV0FBTDtJ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