GrpcToolsNodeProtocPlugin.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
  3. if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
  4. if (ar || !(i in from)) {
  5. if (!ar) ar = Array.prototype.slice.call(from, 0, i);
  6. ar[i] = from[i];
  7. }
  8. }
  9. return to.concat(ar || Array.prototype.slice.call(from));
  10. };
  11. var grpcTools = require('grpc-tools');
  12. var execSync = require('child_process').execSync;
  13. var path = require('path');
  14. var fs = require('fs');
  15. var glob = require('glob');
  16. function clearOutputDirectory(directory) {
  17. if (fs.existsSync(directory)) {
  18. var files = fs.readdirSync(directory);
  19. for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
  20. var file = files_1[_i];
  21. var filePath = path.join(directory, file);
  22. fs.unlinkSync(filePath);
  23. }
  24. }
  25. }
  26. var GrpcToolsNodeProtocPlugin = /** @class */ (function () {
  27. function GrpcToolsNodeProtocPlugin(options) {
  28. this.protoPaths = options.protoPaths || []; // Array of proto_path directories
  29. this.protoSources = options.protoSources || []; // Array of proto source files or directories
  30. this.outputDir = options.outputDir || './'; // Output directory
  31. }
  32. GrpcToolsNodeProtocPlugin.prototype.apply = function (compiler) {
  33. var _this = this;
  34. compiler.hooks.environment.tap('GrpcToolsNodeProtocPlugin', function () {
  35. try {
  36. console.log("Cleaning existing files, if any");
  37. clearOutputDirectory(_this.outputDir);
  38. console.log("Writing protocol buffer files into ".concat(_this.outputDir));
  39. // Resolve proto_path directories
  40. var resolvedProtoPaths = _this.protoPaths.map(function (p) { return path.resolve(__dirname, p); });
  41. var resolvedProtoSources = [];
  42. _this.protoSources.forEach(function (s) {
  43. var matches = glob.sync(path.resolve(__dirname, s));
  44. resolvedProtoSources = resolvedProtoSources.concat(matches);
  45. });
  46. var protocArgs = __spreadArray(__spreadArray([
  47. "--js_out=import_style=commonjs,binary:".concat(_this.outputDir)
  48. ], resolvedProtoPaths.map(function (p) { return "--proto_path=".concat(p); }), true), resolvedProtoSources, true);
  49. var command = "npx grpc_tools_node_protoc ".concat(protocArgs.join(' '));
  50. execSync(command, { stdio: 'inherit' });
  51. }
  52. catch (error) {
  53. console.error('Error running grpc tools', error);
  54. }
  55. });
  56. };
  57. return GrpcToolsNodeProtocPlugin;
  58. }());
  59. module.exports = GrpcToolsNodeProtocPlugin;