UNPKG

@neo-one/server-plugin-project

Version:

NEO•ONE server plugin for project functionality.

118 lines (116 loc) 15.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const server_plugin_1 = require("@neo-one/server-plugin"); const utils_1 = require("@neo-one/utils"); const rxjs_1 = require("rxjs"); const constants_1 = require("./constants"); const utils_2 = require("./utils"); const build = async (cli, cancel$, progress, options) => { const response$ = cli.client.executeTaskList$({ plugin: constants_1.constants.PLUGIN, options, cancel$, }); await server_plugin_1.handleCLITaskList({ cli, response$, progress, cancel$ }); }; const watchFiles$ = (dir) => new rxjs_1.Observable((observer) => { let watcher; let closed = false; Promise.resolve().then(() => __importStar(require('chokidar'))).then((chokidar) => { if (!closed) { watcher = chokidar.watch(dir, { ignoreInitial: true }); watcher.on('add', () => { observer.next('change'); }); watcher.on('change', () => { observer.next('change'); }); watcher.on('error', (error) => { observer.error(error); }); watcher.on('unlink', () => { observer.next('change'); }); } }) .catch((error) => observer.error(error)); return () => { closed = true; if (watcher !== undefined) { watcher.close(); } }; }); const doWatch = async (cli, progress, options, watchCancel$) => { let cancel$ = new rxjs_1.ReplaySubject(); const projectConfig = await utils_2.loadProjectConfig(options.rootDir); let cancelSubscription; await new Promise((resolve, reject) => { let subscription = watchFiles$(projectConfig.paths.contracts) .pipe(utils_1.mergeScanLatest(async () => { console.log('Change detected, attempting re-build'); cancel$ = new rxjs_1.ReplaySubject(); try { await build(cli, cancel$, progress, options); } catch (error) { console.error(`Re-build failed with ${error.message}\n`); } })) .subscribe({ complete: () => { resolve(); }, error: (error) => { reject(error); }, }); cancelSubscription = watchCancel$.subscribe({ next: () => { cancel$.next(); if (subscription !== undefined) { subscription.unsubscribe(); subscription = undefined; } }, complete: () => { resolve(); }, }); }); if (cancelSubscription !== undefined) { cancelSubscription.unsubscribe(); } }; exports.buildCommand = ({ cli }) => { let cancel$ = new rxjs_1.ReplaySubject(); let watchCancel$ = new rxjs_1.ReplaySubject(); return cli.vorpal .command('build', 'Build NEO•ONE project.') .option('--no-progress', "Don't output progress. Typically used for CI scenarios") .option('--reset', "Reset the local development environment of a NEO•ONE project to it's original state.") .option('--watch', 'Watch contracts for changes and rebuild.') .action(async (args) => { cancel$ = new rxjs_1.ReplaySubject(); watchCancel$ = new rxjs_1.ReplaySubject(); const reset = args.options.reset !== undefined && args.options.reset; const watch = args.options.watch !== undefined && args.options.watch; const progress = args.options.progress === undefined || args.options.progress; const options = { command: reset ? 'reset' : 'build', rootDir: process.cwd(), }; if (watch) { await build(cli, cancel$, progress, options); await doWatch(cli, progress, options, watchCancel$); } else { await build(cli, cancel$, progress, options); } }) .cancel(() => { cancel$.next(); watchCancel$.next(); }); }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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LEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUMsQ0FBQztTQUNELE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDWCxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJmaWxlIjoibmVvLW9uZS1zZXJ2ZXItcGx1Z2luLXByb2plY3Qvc3JjL2J1aWxkQ29tbWFuZC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhbmRsZUNMSVRhc2tMaXN0LCBJbnRlcmFjdGl2ZUNMSUFyZ3MgfSBmcm9tICdAbmVvLW9uZS9zZXJ2ZXItcGx1Z2luJztcbmltcG9ydCB7IG1lcmdlU2NhbkxhdGVzdCB9IGZyb20gJ0BuZW8tb25lL3V0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGxvYWRQcm9qZWN0Q29uZmlnIH0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogJ3Jlc2V0JyB8ICdidWlsZCc7XG4gIHJlYWRvbmx5IHJvb3REaXI6IHN0cmluZztcbn1cblxuY29uc3QgYnVpbGQgPSBhc3luYyAoXG4gIGNsaTogSW50ZXJhY3RpdmVDTElBcmdzWydjbGknXSxcbiAgY2FuY2VsJDogUmVwbGF5U3ViamVjdDx2b2lkPixcbiAgcHJvZ3Jlc3M6IGJvb2xlYW4sXG4gIG9wdGlvbnM6IE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3QgcmVzcG9uc2UkID0gY2xpLmNsaWVudC5leGVjdXRlVGFza0xpc3QkKHtcbiAgICBwbHVnaW46IGNvbnN0YW50cy5QTFVHSU4sXG4gICAgb3B0aW9ucyxcbiAgICBjYW5jZWwkLFxuICB9KTtcblxuICBhd2FpdCBoYW5kbGVDTElUYXNrTGlzdCh7IGNsaSwgcmVzcG9uc2UkLCBwcm9ncmVzcywgY2FuY2VsJCB9KTtcbn07XG5cbnR5cGUgRXZlbnQgPSAnY2hhbmdlJztcblxuY29uc3Qgd2F0Y2hGaWxlcyQgPSAoZGlyOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEV2ZW50PiA9PlxuICBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPEV2ZW50PikgPT4ge1xuICAgIC8vIGltcG9ydCgnY2hva2lkYXInKS5GU1dhdGNoZXJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gICAgbGV0IHdhdGNoZXI6IGFueSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY2xvc2VkID0gZmFsc2U7XG4gICAgaW1wb3J0KCdjaG9raWRhcicpXG4gICAgICAudGhlbigoY2hva2lkYXIpID0+IHtcbiAgICAgICAgaWYgKCFjbG9zZWQpIHtcbiAgICAgICAgICB3YXRjaGVyID0gY2hva2lkYXIud2F0Y2goZGlyLCB7IGlnbm9yZUluaXRpYWw6IHRydWUgfSk7XG4gICAgICAgICAgd2F0Y2hlci5vbignYWRkJywgKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnY2hhbmdlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2F0Y2hlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnY2hhbmdlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2F0Y2hlci5vbignZXJyb3InLCAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgd2F0Y2hlci5vbigndW5saW5rJywgKCkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnY2hhbmdlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBvYnNlcnZlci5lcnJvcihlcnJvcikpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAod2F0Y2hlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KTtcblxuY29uc3QgZG9XYXRjaCA9IGFzeW5jIChcbiAgY2xpOiBJbnRlcmFjdGl2ZUNMSUFyZ3NbJ2NsaSddLFxuICBwcm9ncmVzczogYm9vbGVhbixcbiAgb3B0aW9uczogT3B0aW9ucyxcbiAgd2F0Y2hDYW5jZWwkOiBSZXBsYXlTdWJqZWN0PHZvaWQ+LFxuKSA9PiB7XG4gIGxldCBjYW5jZWwkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3QgcHJvamVjdENvbmZpZyA9IGF3YWl0IGxvYWRQcm9qZWN0Q29uZmlnKG9wdGlvbnMucm9vdERpcik7XG4gIGxldCBjYW5jZWxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCA9IHdhdGNoRmlsZXMkKHByb2plY3RDb25maWcucGF0aHMuY29udHJhY3RzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1lcmdlU2NhbkxhdGVzdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5sb2coJ0NoYW5nZSBkZXRlY3RlZCwgYXR0ZW1wdGluZyByZS1idWlsZCcpO1xuICAgICAgICAgIGNhbmNlbCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBidWlsZChjbGksIGNhbmNlbCQsIHByb2dyZXNzLCBvcHRpb25zKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBSZS1idWlsZCBmYWlsZWQgd2l0aCAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIGNhbmNlbFN1YnNjcmlwdGlvbiA9IHdhdGNoQ2FuY2VsJC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjYW5jZWwkLm5leHQoKTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG4gIGlmIChjYW5jZWxTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGNhbmNlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRDb21tYW5kID0gKHsgY2xpIH06IEludGVyYWN0aXZlQ0xJQXJncykgPT4ge1xuICBsZXQgY2FuY2VsJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KCk7XG4gIGxldCB3YXRjaENhbmNlbCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigpO1xuXG4gIHJldHVybiBjbGkudm9ycGFsXG4gICAgLmNvbW1hbmQoJ2J1aWxkJywgJ0J1aWxkIE5FT+KAok9ORSBwcm9qZWN0LicpXG4gICAgLm9wdGlvbignLS1uby1wcm9ncmVzcycsIFwiRG9uJ3Qgb3V0cHV0IHByb2dyZXNzLiBUeXBpY2FsbHkgdXNlZCBmb3IgQ0kgc2NlbmFyaW9zXCIpXG4gICAgLm9wdGlvbignLS1yZXNldCcsIFwiUmVzZXQgdGhlIGxvY2FsIGRldmVsb3BtZW50IGVudmlyb25tZW50IG9mIGEgTkVP4oCiT05FIHByb2plY3QgdG8gaXQncyBvcmlnaW5hbCBzdGF0ZS5cIilcbiAgICAub3B0aW9uKCctLXdhdGNoJywgJ1dhdGNoIGNvbnRyYWN0cyBmb3IgY2hhbmdlcyBhbmQgcmVidWlsZC4nKVxuICAgIC5hY3Rpb24oYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgIGNhbmNlbCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigpO1xuICAgICAgd2F0Y2hDYW5jZWwkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oKTtcbiAgICAgIGNvbnN0IHJlc2V0ID0gYXJncy5vcHRpb25zLnJlc2V0ICE9PSB1bmRlZmluZWQgJiYgYXJncy5vcHRpb25zLnJlc2V0O1xuICAgICAgY29uc3Qgd2F0Y2ggPSBhcmdzLm9wdGlvbnMud2F0Y2ggIT09IHVuZGVmaW5lZCAmJiBhcmdzLm9wdGlvbnMud2F0Y2g7XG4gICAgICBjb25zdCBwcm9ncmVzcyA9IGFyZ3Mub3B0aW9ucy5wcm9ncmVzcyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3Mub3B0aW9ucy5wcm9ncmVzcztcbiAgICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgICAgIGNvbW1hbmQ6IHJlc2V0ID8gJ3Jlc2V0JyA6ICdidWlsZCcsXG4gICAgICAgIHJvb3REaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9O1xuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGF3YWl0IGJ1aWxkKGNsaSwgY2FuY2VsJCwgcHJvZ3Jlc3MsIG9wdGlvbnMpO1xuICAgICAgICBhd2FpdCBkb1dhdGNoKGNsaSwgcHJvZ3Jlc3MsIG9wdGlvbnMsIHdhdGNoQ2FuY2VsJCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBidWlsZChjbGksIGNhbmNlbCQsIHByb2dyZXNzLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYW5jZWwoKCkgPT4ge1xuICAgICAgY2FuY2VsJC5uZXh0KCk7XG4gICAgICB3YXRjaENhbmNlbCQubmV4dCgpO1xuICAgIH0pO1xufTtcbiJdfQ==