@haxtheweb/create 9.0.25 → 10.0.2
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/create.js +52 -0
- package/dist/lib/programs/site.js +70 -7
- package/dist/templates/sitetheme/base-theme.js +45 -0
- package/dist/templates/sitetheme/flex-theme.js +66 -0
- package/dist/templates/sitetheme/sidebar-theme.js +112 -0
- package/dist/templates/webcomponent/hax/package.json +2 -2
- package/package.json +4 -4
package/dist/create.js
CHANGED
|
@@ -363,6 +363,11 @@ async function main() {
|
|
|
363
363
|
results
|
|
364
364
|
}) => {
|
|
365
365
|
let themes = await (0, _site.siteThemeList)();
|
|
366
|
+
let custom = {
|
|
367
|
+
value: 'custom-theme',
|
|
368
|
+
label: 'Create Custom Theme'
|
|
369
|
+
};
|
|
370
|
+
themes.push(custom);
|
|
366
371
|
if (results.type === "site" && !commandRun.options.theme) {
|
|
367
372
|
// support having no theme but autoselecting
|
|
368
373
|
if (commandRun.options.auto && commandRun.options.skip) {
|
|
@@ -377,6 +382,53 @@ async function main() {
|
|
|
377
382
|
}
|
|
378
383
|
}
|
|
379
384
|
},
|
|
385
|
+
customName({
|
|
386
|
+
results
|
|
387
|
+
}) {
|
|
388
|
+
if (results.theme === "custom-theme") {
|
|
389
|
+
return p.text({
|
|
390
|
+
message: 'Theme Name:',
|
|
391
|
+
placeholder: results.theme,
|
|
392
|
+
required: false,
|
|
393
|
+
validate: value => {
|
|
394
|
+
if (!value) {
|
|
395
|
+
return "Name is required (tab writes default)";
|
|
396
|
+
}
|
|
397
|
+
if (/^\d/.test(value)) {
|
|
398
|
+
return "Name cannot start with a number";
|
|
399
|
+
}
|
|
400
|
+
if (value.indexOf(' ') !== -1) {
|
|
401
|
+
return "No spaces allowed in project name";
|
|
402
|
+
}
|
|
403
|
+
if (value.indexOf('-') === -1 && value.indexOf('-') !== 0 && value.indexOf('-') !== value.length - 1) {
|
|
404
|
+
return "Name must include at least one `-` and must not start or end name.";
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
},
|
|
410
|
+
customTemplate({
|
|
411
|
+
results
|
|
412
|
+
}) {
|
|
413
|
+
if (results.theme === "custom-theme") {
|
|
414
|
+
const options = [{
|
|
415
|
+
value: 'base',
|
|
416
|
+
label: 'Vanilla Theme with Hearty Documentation'
|
|
417
|
+
}, {
|
|
418
|
+
value: 'polaris-flex',
|
|
419
|
+
label: 'Minimalist Theme with Horizontal Nav'
|
|
420
|
+
}, {
|
|
421
|
+
value: 'polaris-sidebar',
|
|
422
|
+
label: 'Content-Focused Theme with Flexible Sidebar'
|
|
423
|
+
}];
|
|
424
|
+
return p.select({
|
|
425
|
+
message: 'Template:',
|
|
426
|
+
required: false,
|
|
427
|
+
options: options,
|
|
428
|
+
initialValue: `${results.theme}`
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
},
|
|
380
432
|
extras: ({
|
|
381
433
|
results
|
|
382
434
|
}) => {
|
|
@@ -15,11 +15,13 @@ var _promises = require("node:timers/promises");
|
|
|
15
15
|
var fs = _interopRequireWildcard(require("node:fs"));
|
|
16
16
|
var path = _interopRequireWildcard(require("node:path"));
|
|
17
17
|
var p = _interopRequireWildcard(require("@clack/prompts"));
|
|
18
|
+
var ejs = _interopRequireWildcard(require("ejs"));
|
|
18
19
|
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
19
20
|
var _jsYaml = require("js-yaml");
|
|
20
21
|
var winston = _interopRequireWildcard(require("winston"));
|
|
21
22
|
var _nodeHtmlParser = require("node-html-parser");
|
|
22
23
|
var _statements = require("../statements.js");
|
|
24
|
+
var _utils = require("../utils.js");
|
|
23
25
|
var _logging = require("../logging.js");
|
|
24
26
|
var _microFrontendRegistry = require("../micro-frontend-registry.js");
|
|
25
27
|
var haxcmsNodejsCli = _interopRequireWildcard(require("@haxtheweb/haxcms-nodejs/dist/cli.js"));
|
|
@@ -752,12 +754,12 @@ async function siteCommandDetected(commandRun) {
|
|
|
752
754
|
initialValue: val,
|
|
753
755
|
options: list
|
|
754
756
|
});
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
757
|
+
}
|
|
758
|
+
let themes = await HAXCMS.getThemes();
|
|
759
|
+
if (themes && commandRun.options.theme && themes[commandRun.options.theme]) {
|
|
760
|
+
activeHaxsite.manifest.metadata.theme = themes[commandRun.options.theme];
|
|
761
|
+
activeHaxsite.manifest.save(false);
|
|
762
|
+
recipe.log(siteLoggingName, (0, _logging.commandString)(commandRun));
|
|
761
763
|
}
|
|
762
764
|
} catch (e) {
|
|
763
765
|
(0, _logging.log)(e.stderr);
|
|
@@ -909,6 +911,7 @@ async function siteCommandDetected(commandRun) {
|
|
|
909
911
|
let recContents = await fs.readFileSync(commandRun.options.recipe, 'utf8');
|
|
910
912
|
// split into commands
|
|
911
913
|
let commandList = recContents.replaceAll('cli: ', '').split("\n");
|
|
914
|
+
let rootDir = '';
|
|
912
915
|
// confirm each command or allow --y so that it auto applies
|
|
913
916
|
for (var i in commandList) {
|
|
914
917
|
// verify every command starts this way for safety
|
|
@@ -924,7 +927,23 @@ async function siteCommandDetected(commandRun) {
|
|
|
924
927
|
}
|
|
925
928
|
// confirmed; let's run!
|
|
926
929
|
if (confirmation) {
|
|
927
|
-
|
|
930
|
+
let commandMatch = siteActions().filter(action => action.value === commandList[i].split(' ')[2]);
|
|
931
|
+
// if we found a command that means it is a valid command to run against the site
|
|
932
|
+
if (commandMatch.length > 0) {
|
|
933
|
+
await exec(`${commandList[i]} --y --no-i --auto --quiet${rootDir}`);
|
|
934
|
+
}
|
|
935
|
+
// 1st command won't match as the argument creates a new site
|
|
936
|
+
// but ensure we don't have a site context prior to running this
|
|
937
|
+
// or we'll get a site in a site with the same name which is not
|
|
938
|
+
// the desired result
|
|
939
|
+
else if (!(await hax.systemStructureContext())) {
|
|
940
|
+
await exec(`${commandList[i]} --y --no-i --auto --quiet --no-extras`);
|
|
941
|
+
// site will have been created, obtain the site name and set root so
|
|
942
|
+
// the other commands get piped into it correctly
|
|
943
|
+
rootDir = ` --root ${commandList[i].split(' ')[2]}`;
|
|
944
|
+
} else {
|
|
945
|
+
(0, _logging.log)('Did not run because we already have a site', 'warn');
|
|
946
|
+
}
|
|
928
947
|
}
|
|
929
948
|
}
|
|
930
949
|
}
|
|
@@ -1191,6 +1210,13 @@ async function siteProcess(commandRun, project, port = '3000') {
|
|
|
1191
1210
|
s.stop((0, _statements.merlinSays)(`${project.name} created!`));
|
|
1192
1211
|
await (0, _promises.setTimeout)(500);
|
|
1193
1212
|
}
|
|
1213
|
+
|
|
1214
|
+
// Write theme template to site/custom
|
|
1215
|
+
if (project.customName && project.customTemplate) {
|
|
1216
|
+
s.start((0, _statements.merlinSays)(`Creating new theme: ${project.customName}`));
|
|
1217
|
+
await customSiteTheme(commandRun, project);
|
|
1218
|
+
s.stop((0, _statements.merlinSays)(`${project.customName} theme created!`));
|
|
1219
|
+
}
|
|
1194
1220
|
if (project.gitRepo && !commandRun.options.isMonorepo) {
|
|
1195
1221
|
try {
|
|
1196
1222
|
await exec(`cd ${project.path}/${project.name} && git init && git add -A && git commit -m "first commit" && git branch -M main${project.gitRepo ? ` && git remote add origin ${project.gitRepo}` : ''}`);
|
|
@@ -1254,6 +1280,43 @@ async function siteThemeList() {
|
|
|
1254
1280
|
}
|
|
1255
1281
|
return items;
|
|
1256
1282
|
}
|
|
1283
|
+
async function customSiteTheme(commandRun, project) {
|
|
1284
|
+
project.className = (0, _utils.dashToCamel)(project.customName);
|
|
1285
|
+
var sitePath = `${project.path}/${project.name}`;
|
|
1286
|
+
const filePath = `${sitePath}/custom/src/${project.customName}.js`;
|
|
1287
|
+
if (project.customTemplate === "base") {
|
|
1288
|
+
await fs.copyFileSync(`${process.mainModule.path}/templates/sitetheme/base-theme.js`, `${sitePath}/custom/src/base-theme.js`);
|
|
1289
|
+
await fs.renameSync(`${sitePath}/custom/src/base-theme.js`, filePath);
|
|
1290
|
+
} else if (project.customTemplate === "polaris-flex") {
|
|
1291
|
+
await fs.copyFileSync(`${process.mainModule.path}/templates/sitetheme/flex-theme.js`, `${sitePath}/custom/src/flex-theme.js`);
|
|
1292
|
+
await fs.renameSync(`${sitePath}/custom/src/flex-theme.js`, filePath);
|
|
1293
|
+
} else if (project.customTemplate === "polaris-sidebar") {
|
|
1294
|
+
await fs.copyFileSync(`${process.mainModule.path}/templates/sitetheme/sidebar-theme.js`, `${sitePath}/custom/src/sidebar-theme.js`);
|
|
1295
|
+
await fs.renameSync(`${sitePath}/custom/src/sidebar-theme.js`, filePath);
|
|
1296
|
+
}
|
|
1297
|
+
try {
|
|
1298
|
+
// ensure we don't try to pattern rewrite image files
|
|
1299
|
+
if (!filePath.endsWith('.jpg') && !filePath.endsWith('.png')) {
|
|
1300
|
+
const ejsString = ejs.fileLoader(filePath, 'utf8');
|
|
1301
|
+
let content = ejs.render(ejsString, project);
|
|
1302
|
+
// file written successfully
|
|
1303
|
+
fs.writeFileSync(filePath, content);
|
|
1304
|
+
}
|
|
1305
|
+
} catch (err) {
|
|
1306
|
+
console.error(filePath);
|
|
1307
|
+
console.error(err);
|
|
1308
|
+
}
|
|
1309
|
+
await fs.appendFileSync(`${sitePath}/custom/src/custom.js`, `\n import "./${project.customName}.js"`);
|
|
1310
|
+
var activeHaxsite = await hax.systemStructureContext(sitePath);
|
|
1311
|
+
let themeObj = {
|
|
1312
|
+
element: project.customName,
|
|
1313
|
+
path: filePath,
|
|
1314
|
+
name: project.className
|
|
1315
|
+
};
|
|
1316
|
+
activeHaxsite.manifest.metadata.theme = themeObj;
|
|
1317
|
+
activeHaxsite.manifest.save(false);
|
|
1318
|
+
await exec(`cd ${sitePath}/custom/ && ${commandRun.options.npmClient} install && ${commandRun.options.npmClient} run build && cd ${sitePath}`);
|
|
1319
|
+
}
|
|
1257
1320
|
|
|
1258
1321
|
// @fork of the hax core util for this so that we avoid api difference between real dom and parse nodejs dom
|
|
1259
1322
|
async function nodeToHaxElement(node, eventName = "insert-element") {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright <%= year %> <%= author %>
|
|
3
|
+
* @license Apache-2.0, see License.md for full text.
|
|
4
|
+
*/
|
|
5
|
+
import { html, css, HAXCMSLitElementTheme } from "@haxtheweb/haxcms-elements/lib/core/HAXCMSLitElementTheme.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* `<%= className %>`
|
|
9
|
+
* `<%= className %> based on modern flex design system`
|
|
10
|
+
* `This theme is an example of extending an existing theme component`
|
|
11
|
+
*
|
|
12
|
+
* @microcopy - language worth noting:
|
|
13
|
+
* - HAXcms - A headless content management system
|
|
14
|
+
* - HAXCMSTheme - A super class that provides correct baseline wiring to build a new theme
|
|
15
|
+
*
|
|
16
|
+
* @demo demo/index.html
|
|
17
|
+
* @element <%= customName %>
|
|
18
|
+
*/
|
|
19
|
+
class <%= className %> extends HAXCMSLitElementTheme {
|
|
20
|
+
//styles function
|
|
21
|
+
static get styles() {
|
|
22
|
+
return [
|
|
23
|
+
super.styles,
|
|
24
|
+
css`
|
|
25
|
+
:host {
|
|
26
|
+
display: block;
|
|
27
|
+
}
|
|
28
|
+
`,
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Store the tag name to make it easier to obtain directly.
|
|
34
|
+
* @notice function name must be here for tooling to operate correctly
|
|
35
|
+
*/
|
|
36
|
+
static get tag() {
|
|
37
|
+
return "<%= customName %>";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
constructor() {
|
|
41
|
+
super();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
customElements.define(<%= className %>.tag, <%= className %>);
|
|
45
|
+
export { <%= className %> };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright <%= year %> <%= author %>
|
|
3
|
+
* @license Apache-2.0, see License.md for full text.
|
|
4
|
+
*/
|
|
5
|
+
import { html, css, HAXCMSLitElementTheme } from "@haxtheweb/haxcms-elements/lib/core/HAXCMSLitElementTheme.js";
|
|
6
|
+
import { PolarisFlexTheme } from "@haxtheweb/polaris-theme/lib/polaris-flex-theme";
|
|
7
|
+
import "@haxtheweb/haxcms-elements/lib/ui-components/blocks/site-children-block.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `<%= className %>`
|
|
11
|
+
* `<%= className %> based on modern flex design system`
|
|
12
|
+
* `This theme is an example of extending an existing theme component`
|
|
13
|
+
*
|
|
14
|
+
* @microcopy - language worth noting:
|
|
15
|
+
* - HAXcms - A headless content management system
|
|
16
|
+
* - HAXCMSTheme - A super class that provides correct baseline wiring to build a new theme
|
|
17
|
+
*
|
|
18
|
+
* @demo demo/index.html
|
|
19
|
+
* @element <%= customName %>
|
|
20
|
+
*/
|
|
21
|
+
class <%= className %> extends PolarisFlexTheme {
|
|
22
|
+
//styles function
|
|
23
|
+
static get styles() {
|
|
24
|
+
return [
|
|
25
|
+
super.styles,
|
|
26
|
+
css`
|
|
27
|
+
:host {
|
|
28
|
+
display: block;
|
|
29
|
+
}
|
|
30
|
+
`,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Overload methods for customization of slots from the base class
|
|
36
|
+
*/
|
|
37
|
+
renderHeaderSlot() {
|
|
38
|
+
return html``
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
renderFooterContactInformation() {
|
|
42
|
+
return html``
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
renderFooterSecondarySlot() {
|
|
46
|
+
return html``
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
renderFooterPrimarySlot() {
|
|
50
|
+
return html``
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Store the tag name to make it easier to obtain directly.
|
|
55
|
+
* @notice function name must be here for tooling to operate correctly
|
|
56
|
+
*/
|
|
57
|
+
static get tag() {
|
|
58
|
+
return "<%= customName %>";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
constructor() {
|
|
62
|
+
super();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
customElements.define(<%= className %>.tag, <%= className %>);
|
|
66
|
+
export { <%= className %> };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright <%= year %> <%= author %>
|
|
3
|
+
* @license Apache-2.0, see License.md for full text.
|
|
4
|
+
*/
|
|
5
|
+
import { html, css, HAXCMSLitElementTheme } from "@haxtheweb/haxcms-elements/lib/core/HAXCMSLitElementTheme.js";
|
|
6
|
+
import { PolarisFlexTheme } from "@haxtheweb/polaris-theme/lib/polaris-flex-theme";
|
|
7
|
+
import "@haxtheweb/haxcms-elements/lib/ui-components/blocks/site-children-block.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `<%= className %>`
|
|
11
|
+
* `<%= className %> based on modern flex design system`
|
|
12
|
+
* `This theme is an example of extending an existing theme component`
|
|
13
|
+
*
|
|
14
|
+
* @microcopy - language worth noting:
|
|
15
|
+
* - HAXcms - A headless content management system
|
|
16
|
+
* - HAXCMSTheme - A super class that provides correct baseline wiring to build a new theme
|
|
17
|
+
*
|
|
18
|
+
* @demo demo/index.html
|
|
19
|
+
* @element <%= customName %>
|
|
20
|
+
*/
|
|
21
|
+
class <%= className %> extends PolarisFlexTheme {
|
|
22
|
+
//styles function
|
|
23
|
+
static get styles() {
|
|
24
|
+
return [
|
|
25
|
+
super.styles,
|
|
26
|
+
css`
|
|
27
|
+
:host {
|
|
28
|
+
display: block;
|
|
29
|
+
}
|
|
30
|
+
aside {
|
|
31
|
+
float: left;
|
|
32
|
+
width: 240px;
|
|
33
|
+
}
|
|
34
|
+
aside section h4 {
|
|
35
|
+
font-size: 16px;
|
|
36
|
+
margin: 0 0 24px 0;
|
|
37
|
+
text-transform: uppercase;
|
|
38
|
+
font-family: "Open Sans", sans-serif;
|
|
39
|
+
font-weight: 300;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
aside section {
|
|
43
|
+
background-color: #fff;
|
|
44
|
+
border-radius: 3px;
|
|
45
|
+
margin-bottom: 40px;
|
|
46
|
+
padding: 0px 40px 40px 0px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
site-children-block {
|
|
50
|
+
--site-children-block-border-bottom: lightblue 1px solid;
|
|
51
|
+
--site-children-block-li-padding: 8px 0;
|
|
52
|
+
--site-children-block-link-hover-color: rgb(0, 95, 169);
|
|
53
|
+
--site-children-block-active-border-left: rgb(0, 95, 169) 3px solid;
|
|
54
|
+
--site-children-block-link-active-color: rgb(0, 30, 68);
|
|
55
|
+
font-family: "Roboto Condensed", sans-serif;
|
|
56
|
+
font-size: 16px;
|
|
57
|
+
}
|
|
58
|
+
`,
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Overload methods for customization of slots from the base class
|
|
64
|
+
*/
|
|
65
|
+
renderHeaderSlot() {
|
|
66
|
+
return html``
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
renderSideBar() {
|
|
70
|
+
return html`
|
|
71
|
+
<aside
|
|
72
|
+
role="complementary"
|
|
73
|
+
aria-label="Primary Sidebar"
|
|
74
|
+
itemtype="http://schema.org/WPSideBar"
|
|
75
|
+
part="page-primary-sidebar"
|
|
76
|
+
>
|
|
77
|
+
<section>
|
|
78
|
+
<site-children-block
|
|
79
|
+
part="page-children-block"
|
|
80
|
+
dynamic-methodology="ancestor"
|
|
81
|
+
></site-children-block>
|
|
82
|
+
</section>
|
|
83
|
+
</aside>
|
|
84
|
+
`
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
renderFooterContactInformation() {
|
|
88
|
+
return html``
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
renderFooterSecondarySlot() {
|
|
92
|
+
return html``
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
renderFooterPrimarySlot() {
|
|
96
|
+
return html``
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Store the tag name to make it easier to obtain directly.
|
|
101
|
+
* @notice function name must be here for tooling to operate correctly
|
|
102
|
+
*/
|
|
103
|
+
static get tag() {
|
|
104
|
+
return "<%= customName %>";
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
constructor() {
|
|
108
|
+
super();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
customElements.define(<%= className %>.tag, <%= className %>);
|
|
112
|
+
export { <%= className %> };
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"lit": "^3.2.1",
|
|
31
|
-
"@haxtheweb/d-d-d": "^
|
|
32
|
-
"@haxtheweb/i18n-manager": "^
|
|
31
|
+
"@haxtheweb/d-d-d": "^10.0.1",
|
|
32
|
+
"@haxtheweb/i18n-manager": "^10.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@babel/preset-env": "^7.16.4",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haxtheweb/create",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.2",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@clack/core": "0.3.4",
|
|
47
47
|
"@clack/prompts": "0.7.0",
|
|
48
|
-
"@haxtheweb/haxcms-nodejs": "^
|
|
49
|
-
"@haxtheweb/open-apis": "^
|
|
48
|
+
"@haxtheweb/haxcms-nodejs": "^10.0.1",
|
|
49
|
+
"@haxtheweb/open-apis": "^10.0.1",
|
|
50
50
|
"commander": "12.1.0",
|
|
51
|
-
"node-html-parser": "6.1.13",
|
|
52
51
|
"ejs": "3.1.10",
|
|
53
52
|
"js-yaml": "4.1.0",
|
|
53
|
+
"node-html-parser": "6.1.13",
|
|
54
54
|
"picocolors": "1.0.1",
|
|
55
55
|
"winston": "3.17.0"
|
|
56
56
|
},
|