@neo-one/server-plugin-project
Version:
NEO•ONE server plugin for project functionality.
118 lines (116 loc) • 15.4 kB
JavaScript
;
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==