@pkgjs/statusboard 0.1.0 → 0.1.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/lib/db/build-index.js +0 -20
- package/lib/files.js +0 -13
- package/lib/github.js +0 -41
- package/package.json +2 -3
- package/template/css/index.css +66 -15
- package/template/css/page.css +4 -7
- package/template/css/project-list.css +14 -5
- package/template/indicies.js +1 -4
- package/template/js/index.js +21 -24
- package/template/js/project-list.js +58 -63
package/lib/db/build-index.js
CHANGED
|
@@ -112,26 +112,6 @@ async function * loadProject (octokit, graphQL, project, config, _repo) {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
try {
|
|
116
|
-
yield projectDetail(
|
|
117
|
-
'README',
|
|
118
|
-
project,
|
|
119
|
-
await github.getReadme(graphQL, project.repoOwner, project.repoName, project.primaryBranch)
|
|
120
|
-
)
|
|
121
|
-
} catch (e) {
|
|
122
|
-
yield projectDetail('ERROR', project, e)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
yield projectDetail(
|
|
127
|
-
'TRAVIS',
|
|
128
|
-
project,
|
|
129
|
-
await files.getTravisConfig(project)
|
|
130
|
-
)
|
|
131
|
-
} catch (e) {
|
|
132
|
-
yield projectDetail('ERROR', project, e)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
115
|
try {
|
|
136
116
|
for await (const issue of github.getRepoIssues(graphQL, project.repoOwner, project.repoName)) {
|
|
137
117
|
yield projectDetail('ISSUE', project, issue)
|
package/lib/files.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
-
const yaml = require('js-yaml')
|
|
3
2
|
const GHRAW = 'https://raw.githubusercontent.com/'
|
|
4
3
|
|
|
5
4
|
module.exports.getPackageJson = async function getPackageJson (project) {
|
|
@@ -12,15 +11,3 @@ module.exports.getPackageJson = async function getPackageJson (project) {
|
|
|
12
11
|
}
|
|
13
12
|
return resp.json()
|
|
14
13
|
}
|
|
15
|
-
|
|
16
|
-
module.exports.getTravisConfig = async function getTravisConfig (project) {
|
|
17
|
-
const resp = await fetch(`${GHRAW}${project.repoOwner}/${project.repoName}/${project.repoBranch}${project.repoDirectory}.travis.yml`)
|
|
18
|
-
if (resp.status !== 200) {
|
|
19
|
-
const e = new Error(`Non-200 Response: ${resp.status}`)
|
|
20
|
-
e.status = resp.status
|
|
21
|
-
e.body = await resp.text()
|
|
22
|
-
throw e
|
|
23
|
-
}
|
|
24
|
-
const travisTxt = await resp.text()
|
|
25
|
-
return yaml.safeLoad(travisTxt)
|
|
26
|
-
}
|
package/lib/github.js
CHANGED
|
@@ -343,47 +343,6 @@ async function * getRepoActivity (octokit, owner, repo) {
|
|
|
343
343
|
}
|
|
344
344
|
}
|
|
345
345
|
|
|
346
|
-
module.exports.getReadme =
|
|
347
|
-
async function getReadme (graphQL, owner, repo) {
|
|
348
|
-
try {
|
|
349
|
-
const resp = await graphQL({
|
|
350
|
-
query: ` query($org: String!, $repo: String!) {
|
|
351
|
-
repository(name: $repo, owner: $org) {
|
|
352
|
-
object(expression: "master:README.md") {
|
|
353
|
-
... on Blob {
|
|
354
|
-
text
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
altLower: object(expression: "master:readme.md") {
|
|
358
|
-
... on Blob {
|
|
359
|
-
text
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
altUpper: object(expression: "master:Readme.md") {
|
|
363
|
-
... on Blob {
|
|
364
|
-
text
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
`,
|
|
370
|
-
org: owner,
|
|
371
|
-
repo
|
|
372
|
-
})
|
|
373
|
-
let readmeText
|
|
374
|
-
Object.values(resp.repository).forEach(element => {
|
|
375
|
-
if (element !== null) {
|
|
376
|
-
readmeText = element.text
|
|
377
|
-
}
|
|
378
|
-
})
|
|
379
|
-
return readmeText
|
|
380
|
-
} catch (error) {
|
|
381
|
-
error.code = 'GET_README_FAILED'
|
|
382
|
-
Error.captureStackTrace(error, module.exports.getReadme)
|
|
383
|
-
throw error
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
346
|
async function getRemainingRepos (graphQL, org, cursor) {
|
|
388
347
|
try {
|
|
389
348
|
const resp = await graphQL({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pkgjs/statusboard",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A dashboard for project status",
|
|
5
5
|
"author": "Wes Todd <wes@wesleytodd.com>",
|
|
6
6
|
"keywords": [
|
|
@@ -43,14 +43,13 @@
|
|
|
43
43
|
"@wesleytodd/buildjs": "0.0.8",
|
|
44
44
|
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
|
|
45
45
|
"cptmpl": "0.0.4",
|
|
46
|
-
"dotenv": "^
|
|
46
|
+
"dotenv": "^17.2.0",
|
|
47
47
|
"es5-lit-element": "^2.2.1",
|
|
48
48
|
"es5-lit-html": "^1.1.1",
|
|
49
49
|
"express": "^4.17.1",
|
|
50
50
|
"fs-extra": "^8.1.0",
|
|
51
51
|
"inquirer": "^12.4.2",
|
|
52
52
|
"install": "^0.13.0",
|
|
53
|
-
"js-yaml": "^3.13.1",
|
|
54
53
|
"level": "^5.0.1",
|
|
55
54
|
"lit-element": "^2.2.1",
|
|
56
55
|
"nighthawk": "^2.3.0-1",
|
package/template/css/index.css
CHANGED
|
@@ -1,12 +1,63 @@
|
|
|
1
1
|
@import './normalize.css';
|
|
2
2
|
@import './normalize-content.css';
|
|
3
3
|
|
|
4
|
+
body {
|
|
5
|
+
background-color: rgb(249, 250, 251);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
main {
|
|
9
|
+
width: 100vw;
|
|
10
|
+
max-width: 100vw;
|
|
11
|
+
padding: 1.5rem;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#main-index {
|
|
15
|
+
display: grid;
|
|
16
|
+
gap: 1.5rem;
|
|
17
|
+
grid-template-areas: "issues issues users";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.issues-list {
|
|
21
|
+
grid-area: issues;
|
|
22
|
+
display: flex;
|
|
23
|
+
gap: 1.5rem;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
|
|
26
|
+
a {
|
|
27
|
+
color: rgb(113, 113, 122);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
h1 {
|
|
31
|
+
margin-bottom: 0;
|
|
32
|
+
color: rgb(9, 9, 11);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
ul {
|
|
36
|
+
li {
|
|
37
|
+
border: 1px solid #ddd;
|
|
38
|
+
border-radius: .5rem;
|
|
39
|
+
display: flex;
|
|
40
|
+
flex-direction: column;
|
|
41
|
+
gap: 0.5rem;
|
|
42
|
+
padding: 1rem;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.issue-title {
|
|
47
|
+
font-weight: 600;
|
|
48
|
+
color: rgb(9, 9, 11);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
.users-list {
|
|
52
|
+
grid-area: users;
|
|
53
|
+
}
|
|
54
|
+
|
|
4
55
|
.users-list li {
|
|
5
56
|
display: flex;
|
|
6
57
|
align-items: center;
|
|
7
58
|
|
|
8
59
|
a {
|
|
9
|
-
display: flex;
|
|
60
|
+
display: flex;
|
|
10
61
|
align-items: center;
|
|
11
62
|
}
|
|
12
63
|
}
|
|
@@ -27,24 +78,24 @@
|
|
|
27
78
|
|
|
28
79
|
.issues-list,
|
|
29
80
|
.users-list {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
81
|
+
background-color: #fff;
|
|
82
|
+
border-radius: .5rem;
|
|
83
|
+
height: 100%;
|
|
84
|
+
padding: 1.5rem;
|
|
85
|
+
font-size: 13px;
|
|
33
86
|
|
|
34
87
|
ul {
|
|
35
|
-
list-style:
|
|
88
|
+
list-style: none;
|
|
36
89
|
padding: 0;
|
|
37
90
|
margin: 0;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
91
|
+
display: flex;
|
|
92
|
+
gap: 1.5rem;
|
|
93
|
+
flex-direction: column;
|
|
42
94
|
}
|
|
43
95
|
}
|
|
44
96
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
97
|
+
@media screen and (max-width: 690px) {
|
|
98
|
+
#main-index {
|
|
99
|
+
grid-template-areas: "issues" "users";
|
|
100
|
+
}
|
|
101
|
+
}
|
package/template/css/page.css
CHANGED
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
header {
|
|
4
4
|
display: flex;
|
|
5
5
|
align-items: center;
|
|
6
|
-
position:
|
|
6
|
+
position: sticky;
|
|
7
7
|
top: 0;
|
|
8
8
|
left: 0;
|
|
9
9
|
width: 100%;
|
|
10
10
|
min-height: 2.75rem;
|
|
11
|
-
background
|
|
12
|
-
|
|
13
|
-
border-bottom: 1px solid #ddd;
|
|
11
|
+
background: #fff;
|
|
12
|
+
border-bottom: 1px solid rgb(228, 228, 231);
|
|
14
13
|
padding: 0 1rem;
|
|
15
14
|
|
|
16
15
|
.logo {
|
|
@@ -52,6 +51,4 @@ header {
|
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
padding: 4.75rem 2rem 2rem;
|
|
57
|
-
}
|
|
54
|
+
|
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
@import './normalize-content.css';
|
|
2
2
|
|
|
3
|
+
main {
|
|
4
|
+
width: 100vw;
|
|
5
|
+
max-width: 100vw;
|
|
6
|
+
padding: 1.5rem;
|
|
7
|
+
}
|
|
8
|
+
|
|
3
9
|
.project-list {
|
|
10
|
+
background-color: #fff;
|
|
11
|
+
border-inline: 1px solid #ddd;
|
|
4
12
|
width: 100%;
|
|
5
13
|
border-spacing: 0;
|
|
6
14
|
border-collapse: collapse;
|
|
7
15
|
|
|
8
|
-
|
|
9
|
-
padding: .5rem;
|
|
16
|
+
tr {
|
|
10
17
|
border-top: 1px solid #ddd;
|
|
11
|
-
border-bottom: 1px solid #
|
|
18
|
+
border-bottom: 1px solid #ddd;
|
|
12
19
|
}
|
|
13
|
-
|
|
14
|
-
|
|
20
|
+
|
|
21
|
+
td {
|
|
22
|
+
padding: .5rem;
|
|
15
23
|
}
|
|
24
|
+
|
|
16
25
|
tr td:nth-child(1) {
|
|
17
26
|
min-width: 8rem;
|
|
18
27
|
max-width: 12rem;
|
package/template/indicies.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
projects: async (data, config, key, { type, project, detail }) => {
|
|
5
|
-
if (!['REPO', 'PACKAGE_JSON', 'PACKUMENT'
|
|
5
|
+
if (!['REPO', 'PACKAGE_JSON', 'PACKUMENT'].includes(type)) {
|
|
6
6
|
return data
|
|
7
7
|
}
|
|
8
8
|
|
|
@@ -10,9 +10,6 @@ module.exports = {
|
|
|
10
10
|
const existing = data.find((p) => p.repo === project.repo)
|
|
11
11
|
const proj = existing || { ...project }
|
|
12
12
|
switch (type) {
|
|
13
|
-
case 'TRAVIS':
|
|
14
|
-
proj.travis = detail
|
|
15
|
-
break
|
|
16
13
|
case 'PACKAGE_JSON':
|
|
17
14
|
proj.packageJson = detail
|
|
18
15
|
break
|
package/template/js/index.js
CHANGED
|
@@ -54,17 +54,13 @@ require('nighthawk')({
|
|
|
54
54
|
|
|
55
55
|
render(html`
|
|
56
56
|
<statusboard-page .config="${config}">
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
main section { padding: 0 1rem; }
|
|
60
|
-
</style>
|
|
61
|
-
<main>
|
|
62
|
-
<section>
|
|
57
|
+
<main id="main-index">
|
|
58
|
+
<section class="issues-list">
|
|
63
59
|
<h1><a href="${config.baseUrl}/issues">Top Issues</a></h1>
|
|
64
60
|
|
|
65
61
|
${res.locals.issues.map(([tag, issues]) => {
|
|
66
62
|
return html`
|
|
67
|
-
<div
|
|
63
|
+
<div>
|
|
68
64
|
<h3><a href="${config.baseUrl}/issues/${tag.name}">${tag.name}</a></h3>
|
|
69
65
|
<ul>
|
|
70
66
|
${issues.map((issue) => {
|
|
@@ -74,7 +70,7 @@ require('nighthawk')({
|
|
|
74
70
|
<a href="https://www.github.com/${issue.project.repoOwner}" target="_blank">${issue.project.repoOwner}</a>
|
|
75
71
|
/ <a href="https://www.github.com/${issue.project.repo}" target="_blank">${issue.project.repoName}</a>
|
|
76
72
|
</span>
|
|
77
|
-
|
|
73
|
+
<a href="${issue.issue.url}" target="_blank" class="issue-title">${issue.issue.title}</a>
|
|
78
74
|
</li>
|
|
79
75
|
`
|
|
80
76
|
})}
|
|
@@ -118,10 +114,9 @@ require('nighthawk')({
|
|
|
118
114
|
<statusboard-page .config="${config}">
|
|
119
115
|
<main>
|
|
120
116
|
${res.locals.issues.map(([tag, issues]) => html`
|
|
121
|
-
<section>
|
|
117
|
+
<section class="issues-list">
|
|
122
118
|
<h1><a href="${config.baseUrl}/issues/${tag.name}">${tag.name}</a></h1>
|
|
123
|
-
|
|
124
|
-
<div class="issues-list">
|
|
119
|
+
<div >
|
|
125
120
|
<ul>
|
|
126
121
|
${issues.map((issue) => html`
|
|
127
122
|
<li>
|
|
@@ -129,7 +124,7 @@ require('nighthawk')({
|
|
|
129
124
|
<a href="https://www.github.com/${issue.project.repoOwner}" target="_blank">${issue.project.repoOwner}</a>
|
|
130
125
|
/ <a href="${issue.project.repo}" target="_blank">${issue.project.repoName}</a>
|
|
131
126
|
</span>
|
|
132
|
-
|
|
127
|
+
<a href="${issue.issue.url}" target="_blank" class="issue-title">${issue.issue.title}</a>
|
|
133
128
|
</li>
|
|
134
129
|
`)}
|
|
135
130
|
</ul>
|
|
@@ -146,19 +141,21 @@ require('nighthawk')({
|
|
|
146
141
|
}, null)
|
|
147
142
|
render(html`
|
|
148
143
|
<statusboard-page .config="${config}">
|
|
149
|
-
<h1>Issues: ${req.params.label}</h1>
|
|
150
144
|
<div class="issues-list">
|
|
151
|
-
<
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
145
|
+
<h1>Issues: ${req.params.label}</h1>
|
|
146
|
+
<div>
|
|
147
|
+
<ul>
|
|
148
|
+
${issues.map((issue) => html`
|
|
149
|
+
<li>
|
|
150
|
+
<span class="project-link">
|
|
151
|
+
<a href="https://www.github.com/${issue.project.repoOwner}" target="_blank">${issue.project.repoOwner}</a>
|
|
152
|
+
/ <a href="${issue.project.repo}" target="_blank">${issue.project.repoName}</a>
|
|
153
|
+
</span>
|
|
154
|
+
<a href="${issue.issue.url}" target="_blank" class="issue-title">${issue.issue.title}</a>
|
|
155
|
+
</li>
|
|
156
|
+
`)}
|
|
157
|
+
</ul>
|
|
158
|
+
</div>
|
|
162
159
|
</div>
|
|
163
160
|
</statusboard-page>
|
|
164
161
|
`, document.body)
|
|
@@ -13,73 +13,68 @@ class ProjectList extends LitElement {
|
|
|
13
13
|
render () {
|
|
14
14
|
return html`
|
|
15
15
|
<link rel="stylesheet" href="${this.config.files.css.projectList}" />
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
<img src="https://badgen.net/github/stars/${project.repo}?color=yellow" />
|
|
27
|
-
</a>
|
|
28
|
-
</td>
|
|
29
|
-
<td title="Watchers">
|
|
30
|
-
<a href="https://www.github.com/${project.repo}">
|
|
31
|
-
<img src="https://badgen.net/github/watchers/${project.repo}" />
|
|
32
|
-
</a>
|
|
33
|
-
</td>
|
|
34
|
-
<td title="Issues">
|
|
35
|
-
<a href="https://www.github.com/${project.repo}">
|
|
36
|
-
<img src="https://badgen.net/github/open-issues/${project.repo}" />
|
|
37
|
-
</a>
|
|
38
|
-
</td>
|
|
39
|
-
<td title="PRs">
|
|
40
|
-
<a href="https://www.github.com/${project.repo}">
|
|
41
|
-
<img src="https://badgen.net/github/open-prs/${project.repo}" />
|
|
42
|
-
</a>
|
|
43
|
-
</td>
|
|
44
|
-
<td title="commits">
|
|
45
|
-
<a href="https://www.github.com/${project.repo}">
|
|
46
|
-
<img src="https://badgen.net/github/commits/${project.repo}" />
|
|
47
|
-
</a>
|
|
48
|
-
</td>
|
|
49
|
-
<td title="License">
|
|
50
|
-
<a href="https://www.github.com/${project.repo}">
|
|
51
|
-
<img src="https://badgen.net/github/license/${project.repo}" />
|
|
52
|
-
</a>
|
|
53
|
-
</td>
|
|
54
|
-
<td title="Contributors">
|
|
55
|
-
<a href="https://www.github.com/${project.repo}">
|
|
56
|
-
<img src="https://badgen.net/github/contributors/${project.repo}" />
|
|
57
|
-
</a>
|
|
58
|
-
</td>
|
|
59
|
-
<td>
|
|
60
|
-
${project.packageJson && (html`
|
|
16
|
+
<main>
|
|
17
|
+
<h2>Projects</h2>
|
|
18
|
+
<table class="project-list">
|
|
19
|
+
${this.projects.map((project) => html`
|
|
20
|
+
<tr>
|
|
21
|
+
<td>
|
|
22
|
+
<a href="https://www.github.com/${project.repoOwner}" target="_blank">${project.repoOwner}</a>
|
|
23
|
+
/ <a href="${(project.repoDetails && project.repoDetails.url) || `https://www.github.com/${project.repoOwner}/${project.repoName}`}" target="_blank">${project.repoName}</a>
|
|
24
|
+
</td>
|
|
25
|
+
<td title="Stars">
|
|
61
26
|
<a href="https://npmjs.org/package/${project.packageName}">
|
|
62
|
-
<img src="https://badgen.net/
|
|
27
|
+
<img src="https://badgen.net/github/stars/${project.repo}?color=yellow" />
|
|
63
28
|
</a>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
29
|
+
</td>
|
|
30
|
+
<td title="Watchers">
|
|
31
|
+
<a href="https://www.github.com/${project.repo}">
|
|
32
|
+
<img src="https://badgen.net/github/watchers/${project.repo}" />
|
|
33
|
+
</a>
|
|
34
|
+
</td>
|
|
35
|
+
<td title="Issues">
|
|
36
|
+
<a href="https://www.github.com/${project.repo}">
|
|
37
|
+
<img src="https://badgen.net/github/open-issues/${project.repo}" />
|
|
38
|
+
</a>
|
|
39
|
+
</td>
|
|
40
|
+
<td title="PRs">
|
|
41
|
+
<a href="https://www.github.com/${project.repo}">
|
|
42
|
+
<img src="https://badgen.net/github/open-prs/${project.repo}" />
|
|
43
|
+
</a>
|
|
44
|
+
</td>
|
|
45
|
+
<td title="commits">
|
|
46
|
+
<a href="https://www.github.com/${project.repo}">
|
|
47
|
+
<img src="https://badgen.net/github/commits/${project.repo}" />
|
|
48
|
+
</a>
|
|
49
|
+
</td>
|
|
50
|
+
<td title="License">
|
|
51
|
+
<a href="https://www.github.com/${project.repo}">
|
|
52
|
+
<img src="https://badgen.net/github/license/${project.repo}" />
|
|
70
53
|
</a>
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<a href="https://travis-ci.org/${project.repo}">
|
|
76
|
-
<img src="https://badgen.net/travis/${project.repo}" />
|
|
54
|
+
</td>
|
|
55
|
+
<td title="Contributors">
|
|
56
|
+
<a href="https://www.github.com/${project.repo}">
|
|
57
|
+
<img src="https://badgen.net/github/contributors/${project.repo}" />
|
|
77
58
|
</a>
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
59
|
+
</td>
|
|
60
|
+
<td>
|
|
61
|
+
${project.packageJson && (html`
|
|
62
|
+
<a href="https://npmjs.org/package/${project.packageName}">
|
|
63
|
+
<img src="https://badgen.net/npm/v/${project.packageName}" />
|
|
64
|
+
</a>
|
|
65
|
+
`)}
|
|
66
|
+
</td>
|
|
67
|
+
<td>
|
|
68
|
+
${project.packageJson && (html`
|
|
69
|
+
<a href="https://npmjs.org/package/${project.packageName}">
|
|
70
|
+
<img src="https://badgen.net/npm/dm/${project.packageName}" />
|
|
71
|
+
</a>
|
|
72
|
+
`)}
|
|
73
|
+
</td>
|
|
74
|
+
</tr>
|
|
75
|
+
`)}
|
|
76
|
+
</table>
|
|
77
|
+
</main>
|
|
83
78
|
`
|
|
84
79
|
}
|
|
85
80
|
}
|