docgen-tool 3.3.1 → 3.5.0

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 (31) hide show
  1. package/dist/include/templates/main.html +2 -43
  2. package/dist/include/templates/pdfCover.html +2 -50
  3. package/dist/include/templates/pdfFooter.html +1 -14
  4. package/dist/include/templates/webCover.html +0 -30
  5. package/dist/package.json +74 -0
  6. package/dist/src/docgen/docgen.js +173 -0
  7. package/dist/src/docgen/execute/execute.js +63 -0
  8. package/dist/{docgen → src/docgen}/fs/fs.js +9 -9
  9. package/dist/src/docgen/fs/markdown.js +115 -0
  10. package/dist/src/docgen/fs/meta.js +113 -0
  11. package/dist/src/docgen/fs/templates.js +100 -0
  12. package/dist/src/docgen/fs/write-pages.js +113 -0
  13. package/dist/src/docgen/meta/derive-parameters.js +29 -0
  14. package/dist/src/docgen/meta/sort-pages.js +32 -0
  15. package/dist/src/docgen/pdf/wkhtmltopdf/wkhtmltopdf.js +186 -0
  16. package/dist/src/docgen/scaffold/scaffold.js +60 -0
  17. package/dist/src/docgen/types.js +2 -0
  18. package/dist/src/docgen/validation/validation.js +152 -0
  19. package/dist/src/docgen/views/components/copyright/copyright.js +17 -0
  20. package/dist/src/docgen/views/components/footer/footer.js +22 -0
  21. package/dist/src/docgen/views/components/pdf-footer/pdf-footer.js +30 -0
  22. package/dist/src/docgen/views/components/web-table-of-contents/web-table-of-contents.js +41 -0
  23. package/dist/src/docgen/views/html.js +11 -0
  24. package/dist/src/docgen/views/pages/cover/cover.js +71 -0
  25. package/dist/src/docgen/views/pages/cover/pdf-cover.js +24 -0
  26. package/dist/src/docgen/views/pages/main/main.js +59 -0
  27. package/dist/src/docgen/views/pages/process-pages.js +170 -0
  28. package/dist/src/docgen/views/redirect.js +83 -0
  29. package/package.json +11 -8
  30. package/dist/docgen/docgen.js +0 -1009
  31. /package/dist/{docgen.js → src/docgen.js} +0 -0
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Main = void 0;
7
+ var react_1 = __importDefault(require("react"));
8
+ var web_table_of_contents_1 = require("../../components/web-table-of-contents/web-table-of-contents");
9
+ var footer_1 = require("../../components/footer/footer");
10
+ var Logo = function (_a) {
11
+ var parameters = _a.parameters;
12
+ return ((parameters === null || parameters === void 0 ? void 0 : parameters.logoPath) && (react_1.default.createElement("img", { style: {
13
+ marginRight: '25px',
14
+ }, src: parameters === null || parameters === void 0 ? void 0 : parameters.logoPath })));
15
+ };
16
+ var Header = function (_a) {
17
+ var parameters = _a.parameters;
18
+ return (react_1.default.createElement("header", null,
19
+ react_1.default.createElement("div", { className: "w-fixed-width header-container" },
20
+ react_1.default.createElement("div", { className: "header" },
21
+ react_1.default.createElement("div", { className: "headerLeftBlock" },
22
+ react_1.default.createElement("a", { className: "dg-homelink", href: parameters.homePagePath },
23
+ react_1.default.createElement(Logo, { parameters: parameters })),
24
+ react_1.default.createElement("div", { id: "headerLeftText" },
25
+ react_1.default.createElement("a", { className: "dg-homelink", href: parameters.homePagePath },
26
+ react_1.default.createElement("span", { id: "dg-title" }, parameters.title),
27
+ react_1.default.createElement("span", { id: "dg-web-title-version", style: { fontWeight: 'normal' } },
28
+ "\u00A0(",
29
+ parameters.version,
30
+ ")")),
31
+ react_1.default.createElement("div", { id: "headerSponsor" },
32
+ react_1.default.createElement("span", null, parameters.sponsorLink.name),
33
+ react_1.default.createElement("a", { href: parameters.sponsorLink.url },
34
+ react_1.default.createElement("img", { id: "sponsorLogo", src: parameters.sponsorLink.logo, alt: "sponsor logo" }))))),
35
+ react_1.default.createElement("div", { id: "headerRightBlock" },
36
+ react_1.default.createElement("span", { id: "dg-backlink" }, parameters.backlink.url && (react_1.default.createElement("a", { className: "button inverted", href: parameters.backlink.url }, parameters.backlink.name))))))));
37
+ };
38
+ var WebFooter = function (_a) {
39
+ var parameters = _a.parameters;
40
+ return (react_1.default.createElement("footer", null,
41
+ react_1.default.createElement("div", null,
42
+ react_1.default.createElement("p", { className: "w-fixed-width" },
43
+ react_1.default.createElement("span", { id: "dg-web-footer" }, parameters.webFooter))),
44
+ react_1.default.createElement("div", { className: "w-fixed-width" },
45
+ react_1.default.createElement(footer_1.Footer, { parameters: parameters }))));
46
+ };
47
+ var Main = function (_a) {
48
+ var parameters = _a.parameters, sortedPages = _a.sortedPages, pdfEnabled = _a.pdfEnabled, fixedWidth = _a.fixedWidth, children = _a.children;
49
+ var name = parameters.name;
50
+ return (react_1.default.createElement(react_1.default.Fragment, null,
51
+ react_1.default.createElement("div", { id: "dg-toc" },
52
+ react_1.default.createElement(web_table_of_contents_1.TableOfContents, { name: name, sortedPages: sortedPages, pdfEnabled: pdfEnabled })),
53
+ react_1.default.createElement("div", { id: "dg-navigator" }, "Table of contents"),
54
+ react_1.default.createElement(Header, { parameters: parameters }),
55
+ react_1.default.createElement("section", { id: "dg-content" }, fixedWidth ? (react_1.default.createElement("div", { className: "w-fixed-width" },
56
+ react_1.default.createElement("div", { id: "dg-innerContent" }, children))) : (react_1.default.createElement("div", { id: "dg-innerContent" }, children))),
57
+ react_1.default.createElement(WebFooter, { parameters: parameters })));
58
+ };
59
+ exports.Main = Main;
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.processPages = exports.processTemplates = void 0;
43
+ var lodash_1 = require("lodash");
44
+ var react_1 = __importDefault(require("react"));
45
+ var picocolors_1 = __importDefault(require("picocolors"));
46
+ var cheerio_1 = __importDefault(require("cheerio"));
47
+ var main_1 = require("./main/main");
48
+ var cover_1 = require("./cover/cover");
49
+ var html_1 = require("../html");
50
+ var pdf_cover_1 = require("./cover/pdf-cover");
51
+ var pdf_footer_1 = require("../components/pdf-footer/pdf-footer");
52
+ var processTemplates = function (_a) {
53
+ var parameters = _a.parameters, mathMathjax = _a.mathMathjax, mathKatex = _a.mathKatex, rawTemplates = _a.templates;
54
+ //Todo: rewrite in non-mutating style (for now just clone)
55
+ var templates = (0, lodash_1.cloneDeep)(rawTemplates);
56
+ //Todo: better way of dynamically setting template <head>
57
+ for (var key in templates) {
58
+ if (templates.hasOwnProperty(key)) {
59
+ var $ = templates[key];
60
+ $('title').text(parameters.title);
61
+ }
62
+ }
63
+ if (mathKatex === true) {
64
+ var $ = templates.main;
65
+ //support for KaTeX (bundled with DocGen)
66
+ $('head').append('<link rel="stylesheet" href="require/katex/katex.min.css" type="text/css">');
67
+ $('head').append('<script type="text/javascript" src="require/katex/katex.min.js"></script>');
68
+ $('head').append('<script type="text/javascript" src="require/katexInjector.js"></script>');
69
+ }
70
+ if (mathMathjax === true) {
71
+ var $ = templates.main;
72
+ //support for MathJax (only supported via CDN due to very large size)
73
+ //MathJax configuration is the same as used by math.stackexchange.com
74
+ //Note - wkhtmlpdf //cdn urls - see https://github.com/wkhtmltopdf/wkhtmltopdf/issues/1634
75
+ //Note - later than version 2 doesn't work with wkhtmltodpf
76
+ $('head').append("<script type=\"text/javascript\" id=\"MathJax-script\" async\n src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML\">\n </script>");
77
+ }
78
+ return templates;
79
+ };
80
+ exports.processTemplates = processTemplates;
81
+ var processPages = function (_a) {
82
+ var templates = _a.templates, rawPages = _a.pages, sortedPages = _a.sortedPages, parameters = _a.parameters, options = _a.options, contents = _a.contents;
83
+ return __awaiter(void 0, void 0, void 0, function () {
84
+ var hydratedTemplates, pages, pageTableOfContentsEnabled, tableOfContents, mainTemplate, pdfCoverTemplate, pdfFooterTemplate, webCover, pdfEnabled, webCoverHtml, $, webCoverStyles, pdfCoverHtml, $Pdf, pdfCoverStyles, pdfFooterHtml, $PdfFooter, pdfFooterStyles;
85
+ return __generator(this, function (_b) {
86
+ hydratedTemplates = (0, exports.processTemplates)({
87
+ parameters: parameters,
88
+ templates: templates,
89
+ mathMathjax: options.mathMathjax,
90
+ mathKatex: options.mathKatex,
91
+ });
92
+ pages = (0, lodash_1.cloneDeep)(rawPages);
93
+ pageTableOfContentsEnabled = options.pageToc;
94
+ tableOfContents = contents;
95
+ mainTemplate = hydratedTemplates.main;
96
+ pdfCoverTemplate = hydratedTemplates.pdfCover;
97
+ pdfFooterTemplate = hydratedTemplates.pdfFooter;
98
+ webCover = hydratedTemplates.webCover;
99
+ pdfEnabled = options.pdf;
100
+ console.log(picocolors_1.default.green('Generating the static web content'));
101
+ tableOfContents.forEach(function (section) {
102
+ section.pages.forEach(function (page) {
103
+ var $ = cheerio_1.default.load(mainTemplate.html()); //clone
104
+ var key = page.source;
105
+ var htmlPage = (0, html_1.toHTML)(react_1.default.createElement(main_1.Main, { parameters: parameters, sortedPages: sortedPages, pdfEnabled: pdfEnabled, fixedWidth: page.html !== true }));
106
+ $('body').html(htmlPage);
107
+ //Todo: render the Markdown directly inside the React component
108
+ var content = pages[key];
109
+ $('#dg-innerContent').html(content);
110
+ //------------------------------------------------------------------------------------------------------
111
+ //insert permalinks for every page heading
112
+ //when pageToc is enabled, also insert a page-level table of contents
113
+ var html = [], i = -1;
114
+ var headings = $('h1, h2, h3, h4, h5, h6');
115
+ if (headings.length > 0) {
116
+ html[++i] = '<ul class="dg-pageToc">';
117
+ }
118
+ headings.each(function () {
119
+ var label = $(this).text();
120
+ var anchor = label.toLowerCase().replace(/\s+/g, '-');
121
+ $(this).attr('id', anchor);
122
+ html[++i] = '<li><a href="#' + anchor + '">' + label + '</a></li>';
123
+ });
124
+ if (headings.length > 0) {
125
+ html[++i] = '</ul>';
126
+ }
127
+ if (pageTableOfContentsEnabled === true && page.html !== true) {
128
+ $('#dg-innerContent').prepend(html.join(''));
129
+ }
130
+ //------------------------------------------------------------------------------------------------------
131
+ //prepend the auto heading (which makes the PDF table of contents match the web TOC)
132
+ $('#dg-innerContent').prepend('<h1 id="dg-autoTitle">' + page.title + '</h1>');
133
+ if (page.html === true) {
134
+ $('#dg-autoTitle').addClass('dg-hiddenTitle');
135
+ }
136
+ //------------------------------------------------------------------------------------------------------
137
+ //apply the w-table class
138
+ $('table:not(.unstyled)').addClass('w-table w-fixed w-stripe');
139
+ //------------------------------------------------------------------------------------------------------
140
+ pages[key] = $.html();
141
+ });
142
+ });
143
+ webCoverHtml = (0, html_1.toHTML)(react_1.default.createElement(main_1.Main, { parameters: parameters, sortedPages: sortedPages, pdfEnabled: pdfEnabled },
144
+ react_1.default.createElement(cover_1.Cover, { parameters: parameters })));
145
+ $ = cheerio_1.default.load(mainTemplate.html());
146
+ webCoverStyles = cheerio_1.default.load(webCover.html());
147
+ $('head').append(webCoverStyles('head').html());
148
+ $('body').html(webCoverHtml);
149
+ pdfCoverHtml = (0, html_1.toHTML)(react_1.default.createElement(pdf_cover_1.PdfCover, { parameters: parameters }));
150
+ $Pdf = cheerio_1.default.load(pdfCoverTemplate.html());
151
+ pdfCoverStyles = cheerio_1.default.load(pdfCoverTemplate.html());
152
+ $Pdf('head').append(pdfCoverStyles('head').html());
153
+ $Pdf('body').html(pdfCoverHtml);
154
+ pdfFooterHtml = (0, html_1.toHTML)(react_1.default.createElement(pdf_footer_1.PdfFooter, { parameters: parameters }));
155
+ $PdfFooter = cheerio_1.default.load(pdfFooterTemplate.html());
156
+ pdfFooterStyles = cheerio_1.default.load(pdfFooterTemplate.html());
157
+ $PdfFooter('head').append(pdfFooterStyles('head').html());
158
+ $PdfFooter('body').html(pdfFooterHtml);
159
+ return [2 /*return*/, {
160
+ pages: pages,
161
+ redirect: hydratedTemplates.redirect,
162
+ webCover: $.html(),
163
+ pdfCover: $Pdf.html(),
164
+ pdfHeader: hydratedTemplates.pdfHeader.html(),
165
+ pdfFooter: $PdfFooter.html(),
166
+ }];
167
+ });
168
+ });
169
+ };
170
+ exports.processPages = processPages;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.createRedirect = void 0;
43
+ var picocolors_1 = __importDefault(require("picocolors"));
44
+ var path_1 = __importDefault(require("path"));
45
+ var fs_1 = require("../fs/fs");
46
+ var createRedirect = function (_a) {
47
+ var options = _a.options, redirectPage = _a.redirectPage, homePage = _a.homePage;
48
+ return __awaiter(void 0, void 0, void 0, function () {
49
+ var parent_1, homepage, redirectLink, $, file, error_1;
50
+ return __generator(this, function (_b) {
51
+ switch (_b.label) {
52
+ case 0:
53
+ if (!options.isRedirectEnabled) return [3 /*break*/, 4];
54
+ parent_1 = options.output.replace(/\/$/, '');
55
+ parent_1 = parent_1.split(path_1.default.sep).slice(-1).pop(); //get name of final directory in the path
56
+ homepage = homePage;
57
+ homepage =
58
+ homepage.source.substr(0, homepage.source.lastIndexOf('.')) + '.html';
59
+ redirectLink = parent_1 + '/' + homepage;
60
+ $ = redirectPage;
61
+ $('a').attr('href', redirectLink);
62
+ $('meta[http-equiv=REFRESH]').attr('content', '0;url=' + redirectLink);
63
+ file = options.output + '../' + 'index.html';
64
+ _b.label = 1;
65
+ case 1:
66
+ _b.trys.push([1, 3, , 4]);
67
+ return [4 /*yield*/, (0, fs_1.writeFile)(file, $.html())];
68
+ case 2:
69
+ _b.sent();
70
+ return [3 /*break*/, 4];
71
+ case 3:
72
+ error_1 = _b.sent();
73
+ console.log(picocolors_1.default.red('Error writing redirect file: ' + file));
74
+ if (options.verbose === true) {
75
+ console.log(picocolors_1.default.red(error_1));
76
+ }
77
+ return [3 /*break*/, 4];
78
+ case 4: return [2 /*return*/];
79
+ }
80
+ });
81
+ });
82
+ };
83
+ exports.createRedirect = createRedirect;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "docgen-tool",
3
- "version": "3.3.1",
3
+ "version": "3.5.0",
4
4
  "description": "A tool for creating HTML and PDF documentation",
5
5
  "main": "dist/docgen.ts",
6
6
  "bin": {
@@ -14,14 +14,15 @@
14
14
  "dev": "ts-node src/docgen.ts run",
15
15
  "build": "rimraf dist && tsc -p tsconfig.json && yarn copy:files",
16
16
  "run:build": "dist/docgen.ts",
17
- "build:docs": "ts-node src/docgen.ts run -i src/docs -o ./docs -p -m -n -d 40000",
18
- "build:docs:nopdf": "ts-node src/docgen.ts run -i src/docs -m -n -o ./docs",
17
+ "build:docs": "ts-node src/docgen.ts run -m -n -r -p -d 40000 -i src/docs -o ./docs",
18
+ "build:docs:nopdf": "ts-node src/docgen.ts run -m -n -r -i src/docs -o ./docs",
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:scaffold": "rimraf src/__test__/test-run-output && ts-node src/docgen.ts scaffold -o src/__test__/test-run-output",
22
23
  "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
- "prettier:check": "prettier --check 'src/docgen.ts' '*.{js,json,css,less}'",
24
- "prettier:fix": "prettier --write 'src/docgen.ts' '*.{js,json,css,less}'"
24
+ "prettier:check": "prettier --check 'src/docgen.ts' '*.{ts,js,json,css,less}'",
25
+ "prettier:fix": "prettier --write 'src/docgen.ts' '*.{ts,js,json,css,less}'"
25
26
  },
26
27
  "husky": {
27
28
  "hooks": {
@@ -33,21 +34,23 @@
33
34
  "docgen": "prettier --write"
34
35
  },
35
36
  "dependencies": {
36
- "chalk": "^4.1.0",
37
37
  "cheerio": "^1.0.0-rc.12",
38
38
  "cli-spinner": "^0.2.10",
39
39
  "commander": "^11.0.0",
40
40
  "fs-extra": "^11.1.1",
41
41
  "husky": "^4.3.0",
42
- "image-size": "^1.0.2",
43
42
  "lint-staged": "^10.5.1",
43
+ "lodash": "^4.17.21",
44
44
  "markdown-it": "^13.0.1",
45
- "moment": "^2.29.4",
45
+ "picocolors": "^1.0.0",
46
+ "react": "^18.2.0",
47
+ "react-dom": "^18.2.0",
46
48
  "spawn-args": "^0.2.0",
47
49
  "z-schema": "^6.0.1"
48
50
  },
49
51
  "devDependencies": {
50
52
  "@types/node": "^20.3.1",
53
+ "@types/react": "^18.2.37",
51
54
  "eslint": "^8.43.0",
52
55
  "eslint-config-prettier": "^8.8.0",
53
56
  "ncp": "^2.0.0",