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.
- package/dist/docgen/docgen.js +320 -280
- package/package.json +2 -3
package/dist/docgen/docgen.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
148
|
+
case 7:
|
|
147
149
|
files = (_a.pdfFooter = _b.sent(),
|
|
148
150
|
_a);
|
|
149
|
-
|
|
150
|
-
.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
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
|
|
335
|
+
case 2:
|
|
331
336
|
_a.parameters = _b.sent();
|
|
332
337
|
return [4 /*yield*/, (0, fs_1.readFile)(options.input + '/contents.json')];
|
|
333
|
-
case
|
|
338
|
+
case 3:
|
|
334
339
|
files = (_a.contents = _b.sent(),
|
|
335
340
|
_a);
|
|
336
|
-
|
|
337
|
-
.
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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
|
-
|
|
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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
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(
|
|
437
|
+
console.log(chalk_1.default.red(error_3));
|
|
418
438
|
}
|
|
419
439
|
mainProcess.exit(1);
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
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
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
776
|
+
promises_1[key] = (0, fs_1.writeFile)(path, html);
|
|
752
777
|
});
|
|
753
778
|
});
|
|
754
779
|
//add extra files
|
|
755
|
-
|
|
756
|
-
if (!(options.pdf === true)) return [3 /*break*/,
|
|
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
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
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
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
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
|
-
|
|
878
|
-
var
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
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.
|
|
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
|
-
|
|
909
|
-
|
|
910
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
},
|