docgen-tool 3.3.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/docgen/docgen.js +320 -280
  2. package/package.json +2 -3
@@ -43,7 +43,6 @@ exports.DocGen = void 0;
43
43
  var chalk_1 = __importDefault(require("chalk"));
44
44
  var path_1 = __importDefault(require("path"));
45
45
  var cheerio_1 = __importDefault(require("cheerio"));
46
- var rsvp_1 = __importDefault(require("rsvp"));
47
46
  var moment_1 = __importDefault(require("moment"));
48
47
  var z_schema_1 = __importDefault(require("z-schema"));
49
48
  var child_process_1 = require("child_process");
@@ -120,51 +119,54 @@ function DocGen(process) {
120
119
  load all HTML template files
121
120
  */
122
121
  var loadTemplates = function () { return __awaiter(_this, void 0, void 0, function () {
123
- var files;
122
+ var files, key, file, dom, error_1;
124
123
  var _a;
125
124
  return __generator(this, function (_b) {
126
125
  switch (_b.label) {
127
126
  case 0:
128
127
  console.log(chalk_1.default.green('Loading templates'));
128
+ _b.label = 1;
129
+ case 1:
130
+ _b.trys.push([1, 8, , 9]);
129
131
  _a = {};
130
132
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/main.html')];
131
- case 1:
133
+ case 2:
132
134
  _a.main = _b.sent();
133
135
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/redirect.html')];
134
- case 2:
136
+ case 3:
135
137
  _a.redirect = _b.sent();
136
138
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/webCover.html')];
137
- case 3:
139
+ case 4:
138
140
  _a.webCover = _b.sent();
139
141
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/pdfCover.html')];
140
- case 4:
142
+ case 5:
141
143
  _a.pdfCover = _b.sent();
142
144
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/pdfHeader.html')];
143
- case 5:
145
+ case 6:
144
146
  _a.pdfHeader = _b.sent();
145
147
  return [4 /*yield*/, (0, fs_1.readFile)(__dirname + '/../include/templates/pdfFooter.html')];
146
- case 6:
148
+ case 7:
147
149
  files = (_a.pdfFooter = _b.sent(),
148
150
  _a);
149
- rsvp_1.default
150
- .hash(files)
151
- .then(function (files) {
152
- for (var key in files) {
153
- if (files.hasOwnProperty(key)) {
154
- var file = files[key];
155
- var dom = cheerio_1.default.load(file);
156
- templates[key] = dom;
157
- }
158
- }
159
- loadMeta();
160
- })
161
- .catch(function (error) {
162
- console.log(chalk_1.default.red('Error loading templates'));
163
- if (options.verbose === true) {
164
- console.log(chalk_1.default.red(error));
151
+ for (key in files) {
152
+ if (files.hasOwnProperty(key)) {
153
+ file = files[key];
154
+ dom = cheerio_1.default.load(file);
155
+ templates[key] = dom;
165
156
  }
166
- mainProcess.exit(1);
167
- });
157
+ }
158
+ return [3 /*break*/, 9];
159
+ case 8:
160
+ error_1 = _b.sent();
161
+ console.log(chalk_1.default.red('Error loading templates'));
162
+ if (options.verbose === true) {
163
+ console.log(chalk_1.default.red(error_1));
164
+ }
165
+ mainProcess.exit(1);
166
+ return [3 /*break*/, 9];
167
+ case 9: return [4 /*yield*/, loadMeta()];
168
+ case 10:
169
+ _b.sent();
168
170
  return [2 /*return*/];
169
171
  }
170
172
  });
@@ -319,62 +321,62 @@ function DocGen(process) {
319
321
  load all metadata files (JSON)
320
322
  */
321
323
  var loadMeta = function () { return __awaiter(_this, void 0, void 0, function () {
322
- var files;
324
+ var files, key, file, extra, error_2;
323
325
  var _a;
324
326
  return __generator(this, function (_b) {
325
327
  switch (_b.label) {
326
328
  case 0:
327
329
  console.log(chalk_1.default.green('Loading required JSON metadata files'));
330
+ _b.label = 1;
331
+ case 1:
332
+ _b.trys.push([1, 4, , 5]);
328
333
  _a = {};
329
334
  return [4 /*yield*/, (0, fs_1.readFile)(options.input + '/parameters.json')];
330
- case 1:
335
+ case 2:
331
336
  _a.parameters = _b.sent();
332
337
  return [4 /*yield*/, (0, fs_1.readFile)(options.input + '/contents.json')];
333
- case 2:
338
+ case 3:
334
339
  files = (_a.contents = _b.sent(),
335
340
  _a);
336
- rsvp_1.default
337
- .hash(files)
338
- .then(function (files) {
339
- for (var key in files) {
340
- if (files.hasOwnProperty(key)) {
341
- //ignore prototype
342
- try {
343
- var file = JSON.parse(files[key]);
344
- if (validateJSON(key, file)) {
345
- meta[key] = file;
346
- }
347
- else {
348
- mainProcess.exit(1);
349
- }
341
+ for (key in files) {
342
+ if (files.hasOwnProperty(key)) {
343
+ //ignore prototype
344
+ try {
345
+ file = JSON.parse(files[key]);
346
+ if (validateJSON(key, file)) {
347
+ meta[key] = file;
350
348
  }
351
- catch (error) {
352
- console.log(chalk_1.default.red('Error parsing required file: ' +
353
- key +
354
- '.json (invalid JSON)'));
355
- if (options.verbose === true) {
356
- console.log(chalk_1.default.red(error));
357
- }
349
+ else {
358
350
  mainProcess.exit(1);
359
351
  }
360
352
  }
353
+ catch (error) {
354
+ console.log(chalk_1.default.red('Error parsing required file: ' + key + '.json (invalid JSON)'));
355
+ if (options.verbose === true) {
356
+ console.log(chalk_1.default.red(error));
357
+ }
358
+ mainProcess.exit(1);
359
+ }
361
360
  }
362
- //add the release notes to the contents list
363
- var extra = {
364
- heading: 'Extra',
365
- column: 5,
366
- pages: [{ title: 'Release notes', source: 'release-notes.md' }],
367
- };
368
- meta.contents.push(extra);
369
- loadMarkdown();
370
- })
371
- .catch(function (error) {
372
- console.log(chalk_1.default.red('Error loading required JSON metadata files'));
373
- if (options.verbose === true) {
374
- console.log(chalk_1.default.red(error));
375
- }
376
- mainProcess.exit(1);
377
- });
361
+ }
362
+ extra = {
363
+ heading: 'Extra',
364
+ column: 5,
365
+ pages: [{ title: 'Release notes', source: 'release-notes.md' }],
366
+ };
367
+ meta.contents.push(extra);
368
+ return [3 /*break*/, 5];
369
+ case 4:
370
+ error_2 = _b.sent();
371
+ console.log(chalk_1.default.red('Error loading required JSON metadata files'));
372
+ if (options.verbose === true) {
373
+ console.log(chalk_1.default.red(error_2));
374
+ }
375
+ mainProcess.exit(1);
376
+ return [3 /*break*/, 5];
377
+ case 5: return [4 /*yield*/, loadMarkdown()];
378
+ case 6:
379
+ _b.sent();
378
380
  return [2 /*return*/];
379
381
  }
380
382
  });
@@ -382,54 +384,67 @@ function DocGen(process) {
382
384
  /*
383
385
  load all markdown files (src)
384
386
  */
385
- var loadMarkdown = function () {
386
- console.log(chalk_1.default.green('Loading src files'));
387
- var keys = [];
388
- var files = [];
389
- meta.contents.forEach(function (section) {
390
- section.pages.forEach(function (page) {
391
- keys.push(page);
392
- files.push(options.input + '/' + page.source);
393
- });
394
- });
395
- //add the release notes page
396
- keys.push('ownership');
397
- files.push(options.input + '/release-notes.md');
398
- rsvp_1.default
399
- .all(files.map(fs_1.readFile))
400
- .then(function (files) {
401
- files.forEach(function (page, index) {
402
- try {
403
- var key = keys[index];
404
- if (key.html === true) {
405
- //allow raw HTML input pages
406
- pages[key.source] = page;
407
- }
408
- else {
409
- //otherwise parse input from Markdown into HTML
410
- var html = markdown.render(page);
411
- pages[key.source] = html;
412
- }
413
- }
414
- catch (error) {
415
- console.log(chalk_1.default.red('Error parsing Markdown file: ' + file.source));
387
+ var loadMarkdown = function () { return __awaiter(_this, void 0, void 0, function () {
388
+ var keys_1, files_1, error_3;
389
+ return __generator(this, function (_a) {
390
+ switch (_a.label) {
391
+ case 0:
392
+ console.log(chalk_1.default.green('Loading src files'));
393
+ _a.label = 1;
394
+ case 1:
395
+ _a.trys.push([1, 3, , 4]);
396
+ keys_1 = [];
397
+ files_1 = [];
398
+ meta.contents.forEach(function (section) {
399
+ section.pages.forEach(function (page) {
400
+ keys_1.push(page);
401
+ files_1.push(options.input + '/' + page.source);
402
+ });
403
+ });
404
+ //add the release notes page
405
+ keys_1.push('ownership');
406
+ files_1.push(options.input + '/release-notes.md');
407
+ return [4 /*yield*/, Promise.all(files_1.map(function (f) { return (0, fs_1.readFile)(f); }))];
408
+ case 2:
409
+ files_1 = _a.sent();
410
+ files_1.forEach(function (page, index) {
411
+ try {
412
+ var key = keys_1[index];
413
+ if (key.html === true) {
414
+ //allow raw HTML input pages
415
+ pages[key.source] = page;
416
+ }
417
+ else {
418
+ //otherwise parse input from Markdown into HTML
419
+ var html = markdown.render(page);
420
+ pages[key.source] = html;
421
+ }
422
+ }
423
+ catch (error) {
424
+ console.log(chalk_1.default.red('Error parsing Markdown file: ' + file.source));
425
+ if (options.verbose === true) {
426
+ console.log(chalk_1.default.red(error));
427
+ }
428
+ mainProcess.exit(1);
429
+ }
430
+ });
431
+ return [3 /*break*/, 4];
432
+ case 3:
433
+ error_3 = _a.sent();
434
+ console.log(error_3);
435
+ console.log(chalk_1.default.red('Error loading src files'));
416
436
  if (options.verbose === true) {
417
- console.log(chalk_1.default.red(error));
437
+ console.log(chalk_1.default.red(error_3));
418
438
  }
419
439
  mainProcess.exit(1);
420
- }
421
- });
422
- processContent();
423
- })
424
- .catch(function (error) {
425
- console.log(error);
426
- console.log(chalk_1.default.red('Error loading src files'));
427
- if (options.verbose === true) {
428
- console.log(chalk_1.default.red(error));
440
+ return [3 /*break*/, 4];
441
+ case 4: return [4 /*yield*/, processContent()];
442
+ case 5:
443
+ _a.sent();
444
+ return [2 /*return*/];
429
445
  }
430
- mainProcess.exit(1);
431
446
  });
432
- };
447
+ }); };
433
448
  var sortPages = function () {
434
449
  //sort the contents by heading
435
450
  var headings = { 1: [], 2: [], 3: [], 4: [], 5: [] };
@@ -672,126 +687,129 @@ function DocGen(process) {
672
687
  /*
673
688
  process each input into an output
674
689
  */
675
- var processContent = function () {
676
- console.log(chalk_1.default.green('Generating the static web content'));
677
- webToc();
678
- insertParameters();
679
- meta.contents.forEach(function (section) {
680
- section.pages.forEach(function (page) {
681
- var $ = cheerio_1.default.load(templates.main.html()); //clone
682
- var key = page.source;
683
- var content = pages[key];
684
- //add relevant container
685
- if (page.html === true) {
686
- //raw HTML pages should not be confined to the fixed width
687
- $('#dg-content').html('<div id="dg-innerContent"></div>');
688
- }
689
- else {
690
- //Markdown pages should be confined to the fixed width
690
+ var processContent = function () { return __awaiter(_this, void 0, void 0, function () {
691
+ var $;
692
+ return __generator(this, function (_a) {
693
+ switch (_a.label) {
694
+ case 0:
695
+ console.log(chalk_1.default.green('Generating the static web content'));
696
+ webToc();
697
+ insertParameters();
698
+ meta.contents.forEach(function (section) {
699
+ section.pages.forEach(function (page) {
700
+ var $ = cheerio_1.default.load(templates.main.html()); //clone
701
+ var key = page.source;
702
+ var content = pages[key];
703
+ //add relevant container
704
+ if (page.html === true) {
705
+ //raw HTML pages should not be confined to the fixed width
706
+ $('#dg-content').html('<div id="dg-innerContent"></div>');
707
+ }
708
+ else {
709
+ //Markdown pages should be confined to the fixed width
710
+ $('#dg-content').html('<div class="w-fixed-width"><div id="dg-innerContent"></div></div>');
711
+ }
712
+ $('#dg-innerContent').html(content);
713
+ //------------------------------------------------------------------------------------------------------
714
+ //insert permalinks for every page heading
715
+ //when pageToc is enabled, also insert a page-level table of contents
716
+ var html = [], i = -1;
717
+ var headings = $('h1, h2, h3, h4, h5, h6');
718
+ if (headings.length > 0) {
719
+ html[++i] = '<ul class="dg-pageToc">';
720
+ }
721
+ headings.each(function () {
722
+ var label = $(this).text();
723
+ var anchor = label.toLowerCase().replace(/\s+/g, '-');
724
+ $(this).attr('id', anchor);
725
+ html[++i] = '<li><a href="#' + anchor + '">' + label + '</a></li>';
726
+ });
727
+ if (headings.length > 0) {
728
+ html[++i] = '</ul>';
729
+ }
730
+ if (options.pageToc === true && page.html !== true) {
731
+ $('#dg-innerContent').prepend(html.join(''));
732
+ }
733
+ //------------------------------------------------------------------------------------------------------
734
+ //prepend the auto heading (which makes the PDF table of contents match the web TOC)
735
+ $('#dg-innerContent').prepend('<h1 id="dg-autoTitle">' + page.title + '</h1>');
736
+ if (page.html === true) {
737
+ $('#dg-autoTitle').addClass('dg-hiddenTitle');
738
+ }
739
+ //------------------------------------------------------------------------------------------------------
740
+ //apply the w-table class
741
+ $('table:not(.unstyled)').addClass('w-table w-fixed w-stripe');
742
+ //------------------------------------------------------------------------------------------------------
743
+ pages[key] = $;
744
+ });
745
+ });
746
+ $ = cheerio_1.default.load(templates.main.html());
691
747
  $('#dg-content').html('<div class="w-fixed-width"><div id="dg-innerContent"></div></div>');
692
- }
693
- $('#dg-innerContent').html(content);
694
- //------------------------------------------------------------------------------------------------------
695
- //insert permalinks for every page heading
696
- //when pageToc is enabled, also insert a page-level table of contents
697
- var html = [], i = -1;
698
- var headings = $('h1, h2, h3, h4, h5, h6');
699
- if (headings.length > 0) {
700
- html[++i] = '<ul class="dg-pageToc">';
701
- }
702
- headings.each(function () {
703
- var label = $(this).text();
704
- var anchor = label.toLowerCase().replace(/\s+/g, '-');
705
- $(this).attr('id', anchor);
706
- html[++i] = '<li><a href="#' + anchor + '">' + label + '</a></li>';
707
- });
708
- if (headings.length > 0) {
709
- html[++i] = '</ul>';
710
- }
711
- if (options.pageToc === true && page.html !== true) {
712
- $('#dg-innerContent').prepend(html.join(''));
713
- }
714
- //------------------------------------------------------------------------------------------------------
715
- //prepend the auto heading (which makes the PDF table of contents match the web TOC)
716
- $('#dg-innerContent').prepend('<h1 id="dg-autoTitle">' + page.title + '</h1>');
717
- if (page.html === true) {
718
- $('#dg-autoTitle').addClass('dg-hiddenTitle');
719
- }
720
- //------------------------------------------------------------------------------------------------------
721
- //apply the w-table class
722
- $('table:not(.unstyled)').addClass('w-table w-fixed w-stripe');
723
- //------------------------------------------------------------------------------------------------------
724
- pages[key] = $;
725
- });
748
+ $('#dg-innerContent').html(templates.webCover.html());
749
+ templates.webCover = $;
750
+ return [4 /*yield*/, writePages()];
751
+ case 1:
752
+ _a.sent();
753
+ return [2 /*return*/];
754
+ }
726
755
  });
727
- //add web ownership page
728
- var $ = cheerio_1.default.load(templates.main.html()); //clone
729
- $('#dg-content').html('<div class="w-fixed-width"><div id="dg-innerContent"></div></div>');
730
- $('#dg-innerContent').html(templates.webCover.html());
731
- templates.webCover = $;
732
- writePages();
733
- };
756
+ }); };
734
757
  /*
735
758
  write each html page
736
759
  */
737
760
  var writePages = function () { return __awaiter(_this, void 0, void 0, function () {
738
- var promises, pdfTempDir;
739
- var _this = this;
761
+ var promises_1, pdfTempDir, error_4;
740
762
  return __generator(this, function (_a) {
741
763
  switch (_a.label) {
742
764
  case 0:
743
765
  console.log(chalk_1.default.green('Writing the web page files'));
744
- promises = {};
766
+ _a.label = 1;
767
+ case 1:
768
+ _a.trys.push([1, 8, , 9]);
769
+ promises_1 = {};
745
770
  meta.contents.forEach(function (section) {
746
771
  section.pages.forEach(function (page) {
747
772
  var key = page.source;
748
773
  var name = key.substr(0, page.source.lastIndexOf('.'));
749
774
  var path = options.output + name + '.html';
750
775
  var html = pages[key].html();
751
- promises[key] = (0, fs_1.writeFile)(path, html);
776
+ promises_1[key] = (0, fs_1.writeFile)(path, html);
752
777
  });
753
778
  });
754
779
  //add extra files
755
- promises['ownership'] = (0, fs_1.writeFile)(options.output + 'ownership.html', templates.webCover.html());
756
- if (!(options.pdf === true)) return [3 /*break*/, 2];
780
+ promises_1['ownership'] = (0, fs_1.writeFile)(options.output + 'ownership.html', templates.webCover.html());
781
+ if (!(options.pdf === true)) return [3 /*break*/, 3];
757
782
  pdfTempDir = options.output + 'temp/';
758
783
  return [4 /*yield*/, (0, fs_1.makeDirectory)(pdfTempDir)];
759
- case 1:
760
- _a.sent();
761
- promises['docgenPdfCover'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfCover.html', templates.pdfCover.html());
762
- promises['docgenPdfHeader'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfHeader.html', templates.pdfHeader.html());
763
- promises['docgenPdfFooter'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfFooter.html', templates.pdfFooter.html());
764
- _a.label = 2;
765
784
  case 2:
766
- rsvp_1.default
767
- .hash(promises)
768
- .then(function () { return __awaiter(_this, void 0, void 0, function () {
769
- return __generator(this, function (_a) {
770
- switch (_a.label) {
771
- case 0: return [4 /*yield*/, (0, fs_1.copyDirectory)(__dirname + '/../include/require', options.output + 'require', options.verbose === true)];
772
- case 1:
773
- _a.sent(); //CSS, JavaScript
774
- return [4 /*yield*/, (0, fs_1.copyDirectory)(options.input + '/files', options.output + 'files', options.verbose === true)];
775
- case 2:
776
- _a.sent(); //user-attached files and images
777
- if (!(options.mathKatex === true)) return [3 /*break*/, 4];
778
- return [4 /*yield*/, (0, fs_1.copyDirectory)(__dirname + '/../include/optional/katex', options.output + 'require/katex', options.verbose === true)];
779
- case 3:
780
- _a.sent();
781
- _a.label = 4;
782
- case 4:
783
- checkPdfVersion();
784
- return [2 /*return*/];
785
- }
786
- });
787
- }); })
788
- .catch(function (error) {
789
- console.log(chalk_1.default.red('Error writing the web page files'));
790
- if (options.verbose === true) {
791
- console.log(chalk_1.default.red(error));
792
- }
793
- mainProcess.exit(1);
794
- });
785
+ _a.sent();
786
+ promises_1['docgenPdfCover'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfCover.html', templates.pdfCover.html());
787
+ promises_1['docgenPdfHeader'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfHeader.html', templates.pdfHeader.html());
788
+ promises_1['docgenPdfFooter'] = (0, fs_1.writeFile)(pdfTempDir + 'pdfFooter.html', templates.pdfFooter.html());
789
+ _a.label = 3;
790
+ case 3: return [4 /*yield*/, (0, fs_1.copyDirectory)(__dirname + '/../include/require', options.output + 'require', options.verbose === true)];
791
+ case 4:
792
+ _a.sent(); //CSS, JavaScript
793
+ return [4 /*yield*/, (0, fs_1.copyDirectory)(options.input + '/files', options.output + 'files', options.verbose === true)];
794
+ case 5:
795
+ _a.sent(); //user-attached files and images
796
+ if (!(options.mathKatex === true)) return [3 /*break*/, 7];
797
+ return [4 /*yield*/, (0, fs_1.copyDirectory)(__dirname + '/../include/optional/katex', options.output + 'require/katex', options.verbose === true)];
798
+ case 6:
799
+ _a.sent();
800
+ _a.label = 7;
801
+ case 7: return [3 /*break*/, 9];
802
+ case 8:
803
+ error_4 = _a.sent();
804
+ console.log(chalk_1.default.red('Error writing the web page files'));
805
+ if (options.verbose === true) {
806
+ console.log(chalk_1.default.red(error_4));
807
+ }
808
+ mainProcess.exit(1);
809
+ return [3 /*break*/, 9];
810
+ case 9: return [4 /*yield*/, checkPdfVersion()];
811
+ case 10:
812
+ _a.sent();
795
813
  return [2 /*return*/];
796
814
  }
797
815
  });
@@ -840,80 +858,101 @@ function DocGen(process) {
840
858
  args += ' ' + options.output + pdfName;
841
859
  return (0, spawn_args_1.default)(args);
842
860
  };
843
- var checkPdfVersion = function () {
844
- if (options.pdf === true) {
845
- //first check that wkhtmltopdf is installed
846
- (0, child_process_1.exec)(options.wkhtmltopdfPath + ' -V', function (error, stdout, stderr) {
847
- if (error) {
848
- console.log(chalk_1.default.red('Unable to call wkhtmltopdf. Is it installed and in path? See http://wkhtmltopdf.org'));
849
- if (options.verbose === true) {
850
- console.log(chalk_1.default.red(error));
851
- }
852
- mainProcess.exit(1);
853
- }
854
- else {
855
- //warn if the version of wkhtmltopdf is not an expected version
856
- var actualWkhtmltopdfVersion = stdout.trim();
857
- if (actualWkhtmltopdfVersion !== wkhtmltopdfVersion) {
858
- var warning = 'Warning: unexpected version of wkhtmltopdf, which may work but is not tested or supported';
859
- var expectedVersion = ' expected version: ' + wkhtmltopdfVersion;
860
- var detectedVersion = ' detected version: ' + actualWkhtmltopdfVersion;
861
- console.log(chalk_1.default.yellow(warning));
862
- console.log(chalk_1.default.yellow(expectedVersion));
863
- console.log(chalk_1.default.yellow(detectedVersion));
864
- }
865
- generatePdf();
866
- }
867
- });
868
- }
869
- else {
870
- cleanUp();
871
- }
872
- };
861
+ var checkPdfVersion = function () { return __awaiter(_this, void 0, void 0, function () {
862
+ return __generator(this, function (_a) {
863
+ switch (_a.label) {
864
+ case 0:
865
+ if (!(options.pdf === true)) return [3 /*break*/, 1];
866
+ //first check that wkhtmltopdf is installed
867
+ (0, child_process_1.exec)(options.wkhtmltopdfPath + ' -V', function (error, stdout, stderr) {
868
+ if (error) {
869
+ console.log(chalk_1.default.red('Unable to call wkhtmltopdf. Is it installed and in path? See http://wkhtmltopdf.org'));
870
+ if (options.verbose === true) {
871
+ console.log(chalk_1.default.red(error));
872
+ }
873
+ mainProcess.exit(1);
874
+ }
875
+ else {
876
+ //warn if the version of wkhtmltopdf is not an expected version
877
+ var actualWkhtmltopdfVersion = stdout.trim();
878
+ if (actualWkhtmltopdfVersion !== wkhtmltopdfVersion) {
879
+ var warning = 'Warning: unexpected version of wkhtmltopdf, which may work but is not tested or supported';
880
+ var expectedVersion = ' expected version: ' + wkhtmltopdfVersion;
881
+ var detectedVersion = ' detected version: ' + actualWkhtmltopdfVersion;
882
+ console.log(chalk_1.default.yellow(warning));
883
+ console.log(chalk_1.default.yellow(expectedVersion));
884
+ console.log(chalk_1.default.yellow(detectedVersion));
885
+ }
886
+ generatePdf();
887
+ }
888
+ });
889
+ return [3 /*break*/, 3];
890
+ case 1: return [4 /*yield*/, cleanUp()];
891
+ case 2:
892
+ _a.sent();
893
+ _a.label = 3;
894
+ case 3: return [2 /*return*/];
895
+ }
896
+ });
897
+ }); };
873
898
  /*
874
899
  call wkhtmltopdf as an external executable
875
900
  */
876
- var generatePdf = function () {
877
- console.log(chalk_1.default.green('Creating the PDF copy (may take some time)'));
878
- var args = getPdfArguments();
879
- var wkhtmltopdf = (0, child_process_1.spawn)(options.wkhtmltopdfPath, args);
880
- var spinner = new cli_spinner_1.Spinner(chalk_1.default.green(' Processing... %s'));
881
- spinner.setSpinnerString('|/-\\');
882
- wkhtmltopdf.on('error', function (error) {
883
- console.log(chalk_1.default.red('Error calling wkhtmltopdf to generate the PDF'));
884
- if (options.verbose === true) {
885
- console.log(chalk_1.default.red(error));
886
- }
887
- });
888
- if (options.verbose !== true) {
889
- spinner.start(); //only show spinner when verbose is off (otherwise show raw wkhtmltopdf output)
890
- }
891
- else {
892
- //pipe the output from wkhtmltopdf back to stdout
893
- //however, wkhtmltpdf outputs to stderr, not stdout. See:
894
- //https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1980
895
- wkhtmltopdf.stderr.pipe(mainProcess.stdout);
896
- }
897
- wkhtmltopdf.stdout.on('data', function (data) {
898
- //do nothing
899
- });
900
- wkhtmltopdf.stderr.on('data', function (data) {
901
- //do nothing
902
- });
903
- wkhtmltopdf.on('close', function (code) {
901
+ var generatePdf = function () { return __awaiter(_this, void 0, void 0, function () {
902
+ var args, wkhtmltopdf, spinner;
903
+ var _this = this;
904
+ return __generator(this, function (_a) {
905
+ console.log(chalk_1.default.green('Creating the PDF copy (may take some time)'));
906
+ args = getPdfArguments();
907
+ wkhtmltopdf = (0, child_process_1.spawn)(options.wkhtmltopdfPath, args);
908
+ spinner = new cli_spinner_1.Spinner(chalk_1.default.green(' Processing... %s'));
909
+ spinner.setSpinnerString('|/-\\');
910
+ wkhtmltopdf.on('error', function (error) {
911
+ console.log(chalk_1.default.red('Error calling wkhtmltopdf to generate the PDF'));
912
+ if (options.verbose === true) {
913
+ console.log(chalk_1.default.red(error));
914
+ }
915
+ });
904
916
  if (options.verbose !== true) {
905
- spinner.stop();
906
- console.log(''); //newline after spinner stops
917
+ spinner.start(); //only show spinner when verbose is off (otherwise show raw wkhtmltopdf output)
907
918
  }
908
- if (code !== 0) {
909
- var warning = 'wkhtmltopdf exited with a warning or error: try the -v option for details';
910
- console.log(chalk_1.default.yellow(warning));
919
+ else {
920
+ //pipe the output from wkhtmltopdf back to stdout
921
+ //however, wkhtmltpdf outputs to stderr, not stdout. See:
922
+ //https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1980
923
+ wkhtmltopdf.stderr.pipe(mainProcess.stdout);
911
924
  }
912
- cleanUp();
925
+ wkhtmltopdf.stdout.on('data', function (data) {
926
+ //do nothing
927
+ });
928
+ wkhtmltopdf.stderr.on('data', function (data) {
929
+ //do nothing
930
+ });
931
+ wkhtmltopdf.on('close', function (code) { return __awaiter(_this, void 0, void 0, function () {
932
+ var warning;
933
+ return __generator(this, function (_a) {
934
+ switch (_a.label) {
935
+ case 0:
936
+ if (options.verbose !== true) {
937
+ spinner.stop();
938
+ console.log(''); //newline after spinner stops
939
+ }
940
+ if (code !== 0) {
941
+ warning = 'wkhtmltopdf exited with a warning or error: try the -v option for details';
942
+ console.log(chalk_1.default.yellow(warning));
943
+ }
944
+ return [4 /*yield*/, cleanUp()];
945
+ case 1:
946
+ _a.sent();
947
+ return [2 /*return*/];
948
+ }
949
+ });
950
+ }); });
951
+ return [2 /*return*/];
913
952
  });
914
- };
953
+ }); };
915
954
  var createRedirect = function () { return __awaiter(_this, void 0, void 0, function () {
916
- var parent_1, homepage, redirectLink, $, file, error_1;
955
+ var parent_1, homepage, redirectLink, $, file, error_5;
917
956
  return __generator(this, function (_a) {
918
957
  switch (_a.label) {
919
958
  case 0:
@@ -936,10 +975,10 @@ function DocGen(process) {
936
975
  _a.sent();
937
976
  return [3 /*break*/, 4];
938
977
  case 3:
939
- error_1 = _a.sent();
978
+ error_5 = _a.sent();
940
979
  console.log(chalk_1.default.red('Error writing redirect file: ' + file));
941
980
  if (options.verbose === true) {
942
- console.log(chalk_1.default.red(error_1));
981
+ console.log(chalk_1.default.red(error_5));
943
982
  }
944
983
  return [3 /*break*/, 4];
945
984
  case 4: return [2 /*return*/];
@@ -952,14 +991,15 @@ function DocGen(process) {
952
991
  var cleanUp = function () { return __awaiter(_this, void 0, void 0, function () {
953
992
  return __generator(this, function (_a) {
954
993
  switch (_a.label) {
955
- case 0:
956
- createRedirect();
957
- if (!(options.pdf === true)) return [3 /*break*/, 2];
958
- return [4 /*yield*/, (0, fs_1.removeDirectory)(options.output + 'temp')];
994
+ case 0: return [4 /*yield*/, createRedirect()];
959
995
  case 1:
960
996
  _a.sent();
961
- _a.label = 2;
997
+ if (!(options.pdf === true)) return [3 /*break*/, 3];
998
+ return [4 /*yield*/, (0, fs_1.removeDirectory)(options.output + 'temp')];
962
999
  case 2:
1000
+ _a.sent();
1001
+ _a.label = 3;
1002
+ case 3:
963
1003
  console.log(chalk_1.default.green.bold('Done!'));
964
1004
  return [2 /*return*/];
965
1005
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docgen-tool",
3
- "version": "3.3.0",
3
+ "version": "3.3.1",
4
4
  "description": "A tool for creating HTML and PDF documentation",
5
5
  "main": "dist/docgen.ts",
6
6
  "bin": {
@@ -19,7 +19,7 @@
19
19
  "build:styles": "sass --no-source-map src/styles/main.scss src/include/require/styles/framework.css",
20
20
  "test": "npm run prettier:check",
21
21
  "test:run": "rimraf src/__test__/test-run-output && ts-node src/docgen.ts run -i src/__test__/test-run -o src/__test__/test-run-output -p -m -n -d 40000",
22
- "test:prod:run": "rimraf src/__test__/test-run-output && ./dist/docgen.ts run -i src/__test__/test-run -o ../source/__test__/test-run-output -p -m -n -d 40000",
22
+ "test:prod:run": "rimraf src/__test__/test-run-output && ./dist/docgen.js run -i src/__test__/test-run -o ../source/__test__/test-run-output -p -m -n -d 40000",
23
23
  "prettier:check": "prettier --check 'src/docgen.ts' '*.{js,json,css,less}'",
24
24
  "prettier:fix": "prettier --write 'src/docgen.ts' '*.{js,json,css,less}'"
25
25
  },
@@ -43,7 +43,6 @@
43
43
  "lint-staged": "^10.5.1",
44
44
  "markdown-it": "^13.0.1",
45
45
  "moment": "^2.29.4",
46
- "rsvp": "^4.8.5",
47
46
  "spawn-args": "^0.2.0",
48
47
  "z-schema": "^6.0.1"
49
48
  },