@tobi-or-not/docpress 0.1.4 → 0.1.6
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/bin/docpress.js +1 -1
- package/dist/cli.js +432 -0
- package/dist/cli.js.map +1 -0
- package/package.json +10 -9
- package/types/{index.d.ts → cli.d.ts} +1 -1
- package/dist/commands/build.js +0 -16
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/fetch.js +0 -25
- package/dist/commands/fetch.js.map +0 -1
- package/dist/commands/global.js +0 -6
- package/dist/commands/global.js.map +0 -1
- package/dist/commands/prepare.js +0 -46
- package/dist/commands/prepare.js.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/lib/fetch.js +0 -92
- package/dist/lib/fetch.js.map +0 -1
- package/dist/lib/git.js +0 -33
- package/dist/lib/git.js.map +0 -1
- package/dist/lib/prepare.js +0 -128
- package/dist/lib/prepare.js.map +0 -1
- package/dist/lib/vitepress.js +0 -50
- package/dist/lib/vitepress.js.map +0 -1
- package/dist/schemas/build.js +0 -3
- package/dist/schemas/build.js.map +0 -1
- package/dist/schemas/fetch.js +0 -24
- package/dist/schemas/fetch.js.map +0 -1
- package/dist/schemas/global.js +0 -16
- package/dist/schemas/global.js.map +0 -1
- package/dist/schemas/prepare.js +0 -22
- package/dist/schemas/prepare.js.map +0 -1
- package/dist/utils/commands.js +0 -25
- package/dist/utils/commands.js.map +0 -1
- package/dist/utils/const.js +0 -8
- package/dist/utils/const.js.map +0 -1
- package/dist/utils/functions.js +0 -107
- package/dist/utils/functions.js.map +0 -1
- package/dist/utils/regex.js +0 -20
- package/dist/utils/regex.js.map +0 -1
package/bin/docpress.js
CHANGED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { createOption as l, createCommand as R, Command as ie } from "commander";
|
|
2
|
+
import { readFileSync as y, existsSync as T, mkdirSync as ce, readdirSync as M, statSync as D, appendFileSync as z, cpSync as E, rmSync as N, writeFileSync as v, renameSync as ae } from "node:fs";
|
|
3
|
+
import { resolve as i, join as de, basename as m, dirname as J, parse as S } from "node:path";
|
|
4
|
+
import { z as d } from "zod";
|
|
5
|
+
import pe from "axios";
|
|
6
|
+
import { rimrafSync as ue } from "rimraf";
|
|
7
|
+
import { Octokit as le } from "octokit";
|
|
8
|
+
import { simpleGit as fe } from "simple-git";
|
|
9
|
+
import { build as me } from "vitepress";
|
|
10
|
+
import ge from "yaml";
|
|
11
|
+
const he = "@tobi-or-not/docpress", be = "module", ve = "0.1.6", ye = "pnpm@9.12.3", we = "dist/docpress.js", Se = "types/index.d.ts", $e = {
|
|
12
|
+
docpress: "bin/docpress.js"
|
|
13
|
+
}, Ce = [
|
|
14
|
+
"bin",
|
|
15
|
+
"dist",
|
|
16
|
+
"types"
|
|
17
|
+
], xe = {
|
|
18
|
+
node: ">=20"
|
|
19
|
+
}, ke = {
|
|
20
|
+
build: "pnpm run build:types && pnpm run build:vite",
|
|
21
|
+
"build:clean": "rimraf ./dist ./types ./tsconfig.tsbuildinfo",
|
|
22
|
+
"build:docker": "docker build --tag tobi-or-not/docpress --target prod .",
|
|
23
|
+
"build:types": "tsc",
|
|
24
|
+
"build:vite": "vite build",
|
|
25
|
+
dev: "vite-node ./dev/docpress.ts",
|
|
26
|
+
format: "eslint . --fix",
|
|
27
|
+
lint: "eslint .",
|
|
28
|
+
prepare: "husky",
|
|
29
|
+
start: "./bin/docpress.js",
|
|
30
|
+
"start:docker": "docker run --name docpress --rm -v $(pwd)/docpress:/app/docpress:rw tobi-or-not/docpress",
|
|
31
|
+
"stop:docker": "docker rm --force docpress",
|
|
32
|
+
test: "vitest run",
|
|
33
|
+
"test:cov": "vitest run --coverage",
|
|
34
|
+
"vp:build": "vitepress build ./docpress",
|
|
35
|
+
"vp:build:docker": "docker build --tag tobi-or-not/docs --target prod .",
|
|
36
|
+
"vp:dev": "vitepress dev ./docpress --port 8080",
|
|
37
|
+
"vp:dev:docker": "docker run --publish 8080:8080 --name docpress-vp --rm tobi-or-not/docs",
|
|
38
|
+
"vp:preview": "vitepress preview ./docpress --port 8080"
|
|
39
|
+
}, _e = {
|
|
40
|
+
axios: "^1.7.7",
|
|
41
|
+
commander: "^12.1.0",
|
|
42
|
+
octokit: "^4.0.2",
|
|
43
|
+
rimraf: "^6.0.1",
|
|
44
|
+
"simple-git": "^3.27.0",
|
|
45
|
+
vitepress: "^1.4.1",
|
|
46
|
+
yaml: "^2.6.0",
|
|
47
|
+
zod: "^3.23.8"
|
|
48
|
+
}, Pe = {
|
|
49
|
+
"@antfu/eslint-config": "^3.8.0",
|
|
50
|
+
"@commitlint/cli": "^19.5.0",
|
|
51
|
+
"@commitlint/config-conventional": "^19.5.0",
|
|
52
|
+
"@types/node": "^22.7.7",
|
|
53
|
+
"@vitest/coverage-v8": "^2.1.3",
|
|
54
|
+
eslint: "^9.13.0",
|
|
55
|
+
husky: "^9.1.6",
|
|
56
|
+
"lint-staged": "^15.2.10",
|
|
57
|
+
typescript: "^5.6.3",
|
|
58
|
+
vite: "^5.4.9",
|
|
59
|
+
"vite-node": "^2.1.3",
|
|
60
|
+
vitest: "^2.1.3"
|
|
61
|
+
}, Oe = {
|
|
62
|
+
registry: "https://registry.npmjs.org/",
|
|
63
|
+
access: "public",
|
|
64
|
+
tag: "latest"
|
|
65
|
+
}, Re = {
|
|
66
|
+
name: he,
|
|
67
|
+
type: be,
|
|
68
|
+
version: ve,
|
|
69
|
+
packageManager: ye,
|
|
70
|
+
module: we,
|
|
71
|
+
types: Se,
|
|
72
|
+
bin: $e,
|
|
73
|
+
files: Ce,
|
|
74
|
+
engines: xe,
|
|
75
|
+
scripts: ke,
|
|
76
|
+
dependencies: _e,
|
|
77
|
+
devDependencies: Pe,
|
|
78
|
+
publishConfig: Oe
|
|
79
|
+
}, B = d.object({}), x = i(process.cwd(), "docpress"), H = i(process.cwd(), "docpress/repositories.json"), W = i(process.cwd(), "docpress/owner.json"), q = i(process.cwd(), "docpress/docs"), De = i(process.cwd(), "docpress/docs/index.md"), L = i(process.cwd(), "docpress/.vitepress/config.ts");
|
|
80
|
+
async function P(e) {
|
|
81
|
+
try {
|
|
82
|
+
return (await pe.head(e)).status;
|
|
83
|
+
} catch (t) {
|
|
84
|
+
return t.response?.status || t.status || 500;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function h(e, t) {
|
|
88
|
+
let s = "";
|
|
89
|
+
return t?.removeIdx && (s = e.replace(/^\d{2}-/, "")), t?.replaceDash && (s = (s || e).replaceAll("-", " ")), t?.mode === "capitalize" ? s = (s || e).slice(0, 1).toUpperCase() + (s || e).slice(1).toLowerCase() : t?.mode === "lowercase" ? s = (s || e).toLowerCase() : t?.mode === "uppercase" && (s = (s || e).toUpperCase()), s || e;
|
|
90
|
+
}
|
|
91
|
+
function F(e, { clean: t } = { clean: !1 }) {
|
|
92
|
+
try {
|
|
93
|
+
t && T(e) && ue(`${e}/*`, { glob: !0 }), T(e) || ce(e, { recursive: !0 });
|
|
94
|
+
} catch (s) {
|
|
95
|
+
console.error(s);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function Ee(e) {
|
|
99
|
+
return D(e).isDirectory();
|
|
100
|
+
}
|
|
101
|
+
function Fe(e) {
|
|
102
|
+
return D(e).isFile();
|
|
103
|
+
}
|
|
104
|
+
function j(e) {
|
|
105
|
+
return (Array.isArray(e) ? e : [e]).flatMap((t) => Fe(t) ? [t] : Ee(t) ? M(t).flatMap((s) => j(de(t, s))) : []);
|
|
106
|
+
}
|
|
107
|
+
function X(e) {
|
|
108
|
+
return j(e).filter((t) => m(t).endsWith(".md"));
|
|
109
|
+
}
|
|
110
|
+
function je(e) {
|
|
111
|
+
return e.reduce((t, s, o, n) => o ? o === n.length - 1 ? `${t} or "${s}"` : `${t}, "${s}"` : `"${s}"`, "");
|
|
112
|
+
}
|
|
113
|
+
function Ie() {
|
|
114
|
+
return JSON.parse(y(W).toString());
|
|
115
|
+
}
|
|
116
|
+
function Te() {
|
|
117
|
+
return JSON.parse(y(H).toString());
|
|
118
|
+
}
|
|
119
|
+
function Y(...e) {
|
|
120
|
+
return e.reduce((t, s) => (s === null || Object.keys(s).forEach((o) => {
|
|
121
|
+
const n = t ? t[o] : null, r = s[o];
|
|
122
|
+
V(n) && V(r) ? t[o] = Y(n, r) : t[o] = r;
|
|
123
|
+
}), t), {});
|
|
124
|
+
}
|
|
125
|
+
function V(e) {
|
|
126
|
+
return e && typeof e == "object" && !Array.isArray(e);
|
|
127
|
+
}
|
|
128
|
+
const A = ["github"], f = d.object({
|
|
129
|
+
branch: d.string().describe("Branch used to collect Git provider data.").optional().default("main"),
|
|
130
|
+
gitProvider: d.enum(A).describe(`Git provider used to retrieve data. Values should be one of ${je(A)}.`).optional().default("github"),
|
|
131
|
+
reposFilter: d.string().transform((e) => e.split(",")).or(d.string().array()).describe("List of comma separated repositories to retrieve from Git provider. Default to all user's public repositories.").optional(),
|
|
132
|
+
token: d.string().describe("Git provider token used to collect data.").optional(),
|
|
133
|
+
username: d.string().describe("Git provider username used to collect data.")
|
|
134
|
+
}), b = d.object({
|
|
135
|
+
extraHeaderPages: d.string().describe("List of comma separated additional files or directories to process Vitepress header pages.").transform((e) => e.split(",")).optional(),
|
|
136
|
+
extraPublicContent: d.string().describe("List of comma separated additional files or directories to process Vitepress public folder.").transform((e) => e.split(",")).optional(),
|
|
137
|
+
extraTheme: d.string().describe("List of comma separated additional files or directories to use as Vitepress theme.").transform((e) => e.split(",")).optional(),
|
|
138
|
+
vitepressConfig: d.string().describe("Path to the vitepress configuration file.").transform((e) => JSON.parse(y(i(process.cwd(), e)).toString())).optional()
|
|
139
|
+
}), I = d.object({
|
|
140
|
+
config: d.string().describe("Path to the docpress configuration file.").transform((e) => JSON.parse(y(i(process.cwd(), e)).toString())).optional()
|
|
141
|
+
});
|
|
142
|
+
f.merge(b).merge(B);
|
|
143
|
+
const Ne = {
|
|
144
|
+
build: B,
|
|
145
|
+
fetch: f,
|
|
146
|
+
prepare: b,
|
|
147
|
+
global: I
|
|
148
|
+
};
|
|
149
|
+
function K(e, t) {
|
|
150
|
+
const s = Ne[e].safeParse({
|
|
151
|
+
...I.parse(t).config,
|
|
152
|
+
...t
|
|
153
|
+
});
|
|
154
|
+
if (s.success)
|
|
155
|
+
return s.data;
|
|
156
|
+
throw new Error(`Invalid options: ${s.error}`);
|
|
157
|
+
}
|
|
158
|
+
function k(e, t) {
|
|
159
|
+
return t.forEach((s) => e.addOption(s)), e;
|
|
160
|
+
}
|
|
161
|
+
async function Le({ username: e, token: t, branch: s }) {
|
|
162
|
+
const o = new le({ auth: t }), { data: n } = await o.request("GET /users/{username}", { username: e }), { data: r } = await o.request("GET /users/{username}/repos", { username: e, sort: "full_name" });
|
|
163
|
+
return { user: n, repos: r, branch: s };
|
|
164
|
+
}
|
|
165
|
+
async function Ve(e, t, s, o) {
|
|
166
|
+
F(t, { clean: !0 });
|
|
167
|
+
try {
|
|
168
|
+
const n = fe({ baseDir: t });
|
|
169
|
+
await n.init().addConfig("core.sparseCheckout", "true", !0, "local").addRemote("origin", e);
|
|
170
|
+
for (const r of o)
|
|
171
|
+
z(i(t, ".git/info/sparse-checkout"), `${r}
|
|
172
|
+
`, "utf8");
|
|
173
|
+
await n.pull("origin", s), o.some((r) => r.includes("docs")) && (E(i(t, "docs"), t, { recursive: !0 }), N(i(t, "docs"), { recursive: !0 })), N(i(t, ".git"), { recursive: !0 });
|
|
174
|
+
} catch (n) {
|
|
175
|
+
console.error(n);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function Ae(e, t, s) {
|
|
179
|
+
const o = `https://github.com/${e}/${t}/tree/${s}/README.md`, n = `https://github.com/${e}/${t}/tree/${s}/docs`, r = `https://github.com/${e}/${t}/tree/${s}/docs/01-readme.md`, a = await P(o), c = await P(n), u = await P(r);
|
|
180
|
+
return {
|
|
181
|
+
rootReadmeStatus: a,
|
|
182
|
+
docsFolderStatus: c,
|
|
183
|
+
docsReadmeStatus: u
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
async function Ue({ username: e, branch: t, reposFilter: s, token: o }) {
|
|
187
|
+
F(x, { clean: !0 }), await Le({ username: e, token: o, branch: t }).then(async ({ user: n, repos: r, branch: a }) => ze(n, r, a, s)).then(async ({ repos: n }) => Je(n, s));
|
|
188
|
+
}
|
|
189
|
+
async function Ge(e, t, s) {
|
|
190
|
+
const o = [];
|
|
191
|
+
return await Promise.all(
|
|
192
|
+
e.map(async (n) => {
|
|
193
|
+
const r = t ?? n.default_branch ?? "main", a = i(q, n.name), c = Q(n, s);
|
|
194
|
+
let u = [];
|
|
195
|
+
!n.fork && !n.private && !c && (u = await Me(n, r)), o.push({
|
|
196
|
+
...n,
|
|
197
|
+
docpress: {
|
|
198
|
+
filtered: c,
|
|
199
|
+
branch: r,
|
|
200
|
+
includes: u,
|
|
201
|
+
projectPath: a,
|
|
202
|
+
raw_url: `https://raw.githubusercontent.com/${n.owner.login}/${n.name}/${r}`,
|
|
203
|
+
replace_url: `https://github.com/${n.owner.login}/${n.name}/tree/${r}`
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
})
|
|
207
|
+
), o;
|
|
208
|
+
}
|
|
209
|
+
async function Me(e, t) {
|
|
210
|
+
const s = await Ae(e.owner.login, e.name, t), o = [];
|
|
211
|
+
return Object.values(s).every((n) => n === 404) || !e.size ? [] : (s.docsFolderStatus !== 404 && o.push("docs/*"), (s.docsFolderStatus === 404 || s.docsReadmeStatus === 404) && o.push("README.md", "!*/**/README.md"), o);
|
|
212
|
+
}
|
|
213
|
+
async function ze(e, t, s, o) {
|
|
214
|
+
v(W, JSON.stringify(e, null, 2));
|
|
215
|
+
const n = await Ge(t, s, o);
|
|
216
|
+
return v(H, JSON.stringify(n, null, 2)), { user: e, repos: n };
|
|
217
|
+
}
|
|
218
|
+
async function Je(e, t) {
|
|
219
|
+
if (!e) {
|
|
220
|
+
console.warn("No repository respect docpress rules.");
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
await Promise.all(
|
|
224
|
+
e.filter((s) => !Q(s, t)).map(async (s) => Ve(s.clone_url, s.docpress.projectPath, s.docpress.branch, s.docpress.includes))
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
function Q(e, t) {
|
|
228
|
+
const s = t?.filter((r) => r.startsWith("!")).some((r) => e.name === r.substring(1)), o = !t || t?.filter((r) => !r.startsWith("!")).includes(e.name), n = s || !o;
|
|
229
|
+
return "docpress" in e && !e.docpress.includes.length ? !0 : !(e.clone_url && !e.fork && !e.private && !n);
|
|
230
|
+
}
|
|
231
|
+
const _ = [
|
|
232
|
+
l("-C, --config <string>", I.shape.config._def.description)
|
|
233
|
+
], Z = "fetch", ee = [
|
|
234
|
+
l("-b, --branch <string>", f.shape.branch._def.description).default(f.shape.branch._def.defaultValue()),
|
|
235
|
+
l("-g, --git-provider <string>", f.shape.gitProvider._def.description).default(f.shape.gitProvider._def.defaultValue()),
|
|
236
|
+
l("-r, --repos-filter <string>", f.shape.reposFilter._def.description),
|
|
237
|
+
l("-T, --token <string>", f.shape.token._def.description),
|
|
238
|
+
l("-u, --username <string>", f.shape.username._def.description)
|
|
239
|
+
], Be = k(R(Z), [...ee, ..._]).description("Fetch docs with the given username and git provider.").action(async (e) => {
|
|
240
|
+
await te(e);
|
|
241
|
+
});
|
|
242
|
+
async function te(e) {
|
|
243
|
+
const { username: t, reposFilter: s, token: o, branch: n, gitProvider: r } = K(Z, e);
|
|
244
|
+
await Ue({ username: t, branch: n, reposFilter: s, gitProvider: r, token: o });
|
|
245
|
+
}
|
|
246
|
+
const He = "build", We = k(R(He), _).description("Build vitepress website.").action(async (e) => {
|
|
247
|
+
await se();
|
|
248
|
+
});
|
|
249
|
+
async function se() {
|
|
250
|
+
await me(x);
|
|
251
|
+
}
|
|
252
|
+
const qe = {
|
|
253
|
+
base: "/",
|
|
254
|
+
lang: "en-US",
|
|
255
|
+
vite: {
|
|
256
|
+
publicDir: "../public"
|
|
257
|
+
},
|
|
258
|
+
title: "Home",
|
|
259
|
+
description: "Docpress",
|
|
260
|
+
srcDir: "./docs",
|
|
261
|
+
cleanUrls: !0,
|
|
262
|
+
ignoreDeadLinks: "localhostLinks",
|
|
263
|
+
themeConfig: {
|
|
264
|
+
outline: [2, 3],
|
|
265
|
+
search: {
|
|
266
|
+
provider: "local",
|
|
267
|
+
options: {
|
|
268
|
+
translations: {
|
|
269
|
+
button: {
|
|
270
|
+
buttonText: "Search...",
|
|
271
|
+
buttonAriaLabel: "Search"
|
|
272
|
+
},
|
|
273
|
+
modal: {
|
|
274
|
+
backButtonTitle: "erase search",
|
|
275
|
+
displayDetails: "show details",
|
|
276
|
+
noResultsText: "No results for : ",
|
|
277
|
+
resetButtonTitle: "cancel search",
|
|
278
|
+
footer: {
|
|
279
|
+
selectText: "go to",
|
|
280
|
+
navigateText: "navigate in results",
|
|
281
|
+
closeText: "close"
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
function Xe(e, t, s) {
|
|
290
|
+
const o = Y(qe, s ?? {});
|
|
291
|
+
return {
|
|
292
|
+
...o,
|
|
293
|
+
themeConfig: {
|
|
294
|
+
...o.themeConfig,
|
|
295
|
+
sidebar: e,
|
|
296
|
+
nav: t
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
function Ye(e, t) {
|
|
301
|
+
const o = y(e, "utf8").replace(/\[([^\]]+)\]\(\.\.\/([^)]+)\)/g, (n, r, a) => `[${r}](${t}/${a})`);
|
|
302
|
+
v(e, o, "utf8");
|
|
303
|
+
}
|
|
304
|
+
function Ke(e, t) {
|
|
305
|
+
const o = y(e, "utf8").replace(/\[([^\]]+)\]\((?!\.?\/docs\/|docs\/|http)(\.?\/)?([^/][^)]+)\)/g, (n, r, a, c) => `[${r}](${t}/${c})`).replace(/\[([^\]]+)\]\((\.?\/docs\/|docs\/)([^)]*)\)/g, (n, r, a, c) => `[${r}](${c})`);
|
|
306
|
+
v(e, o, "utf8");
|
|
307
|
+
}
|
|
308
|
+
function U(e, t) {
|
|
309
|
+
const n = `${m(t) === "readme.md" ? `
|
|
310
|
+
## Sources` : "# Sources"}
|
|
311
|
+
|
|
312
|
+
Take a look at the [project sources](${e}).
|
|
313
|
+
`;
|
|
314
|
+
z(t, n, "utf8");
|
|
315
|
+
}
|
|
316
|
+
function Qe(e, t) {
|
|
317
|
+
const { name: s, login: o, bio: n } = t;
|
|
318
|
+
return {
|
|
319
|
+
layout: "home",
|
|
320
|
+
hero: {
|
|
321
|
+
name: s ? `${s}'s projects` : `${o}'s projects`,
|
|
322
|
+
tagline: n ?? "Robots are everywhere 🤖"
|
|
323
|
+
// \U0001F916
|
|
324
|
+
},
|
|
325
|
+
features: e
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
function Ze(e, t, s) {
|
|
329
|
+
const o = {
|
|
330
|
+
title: h(e, { mode: "capitalize", replaceDash: !0 }),
|
|
331
|
+
details: t,
|
|
332
|
+
link: `/${e}/readme`
|
|
333
|
+
};
|
|
334
|
+
return s ? [...s, o] : [o];
|
|
335
|
+
}
|
|
336
|
+
function et(e, t) {
|
|
337
|
+
return {
|
|
338
|
+
text: h(e, { mode: "capitalize", replaceDash: !0 }),
|
|
339
|
+
collapsed: !0,
|
|
340
|
+
items: t
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function O(e, t, s) {
|
|
344
|
+
const o = {
|
|
345
|
+
text: t === "readme" ? "Introduction" : h(t, { mode: "capitalize", replaceDash: !0 }),
|
|
346
|
+
link: `/${e}/${t}`
|
|
347
|
+
};
|
|
348
|
+
return s ? [...s, o] : [o];
|
|
349
|
+
}
|
|
350
|
+
function tt(e, t) {
|
|
351
|
+
const s = [], o = [];
|
|
352
|
+
for (const r of e) {
|
|
353
|
+
X([r.docpress.projectPath]).forEach((c) => {
|
|
354
|
+
Ye(c, `https://github.com/${r.owner.login}/${r.name}/tree/${r.docpress.branch}`), m(c).toLowerCase() === "readme.md" && Ke(c, `https://github.com/${r.owner.login}/${r.name}/tree/${r.docpress.branch}`);
|
|
355
|
+
});
|
|
356
|
+
const a = M(r.docpress.projectPath).filter((c) => D(i(r.docpress.projectPath, c)).isFile() && m(i(r.docpress.projectPath, c)).endsWith(".md")).sort((c, u) => c.localeCompare(u)).reduce((c, u, $, C) => {
|
|
357
|
+
const g = i(r.docpress.projectPath, u), p = h(m(g), { mode: "lowercase", removeIdx: !0 });
|
|
358
|
+
if (p !== m(g) && ae(g, i(J(g), p)), $ === C.length - 1) {
|
|
359
|
+
let w;
|
|
360
|
+
if (C.length > 1)
|
|
361
|
+
return w = i(r.docpress.projectPath, "sources.md"), U(r.html_url, w), O(
|
|
362
|
+
r.name,
|
|
363
|
+
S(w).name,
|
|
364
|
+
O(r.name, S(p).name, c)
|
|
365
|
+
);
|
|
366
|
+
w = i(r.docpress.projectPath, "readme.md"), U(r.html_url, w);
|
|
367
|
+
}
|
|
368
|
+
return O(r.name, S(p).name, c);
|
|
369
|
+
}, []);
|
|
370
|
+
o.push(et(r.name, a)), s.push(...Ze(r.name, r.description || ""));
|
|
371
|
+
}
|
|
372
|
+
const n = Qe(s.sort((r, a) => r.title.localeCompare(a.title)), t);
|
|
373
|
+
return {
|
|
374
|
+
sidebar: o.sort((r, a) => r.text.localeCompare(a.text)),
|
|
375
|
+
index: n
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
function st(e) {
|
|
379
|
+
const t = X(e), s = [];
|
|
380
|
+
for (const o of t) {
|
|
381
|
+
const n = i(process.cwd(), o), r = i(q, h(m(o), { mode: "lowercase", removeIdx: !0 }));
|
|
382
|
+
E(n, r), s.push({
|
|
383
|
+
text: h(S(n).name, { replaceDash: !0, removeIdx: !0 }),
|
|
384
|
+
link: `/${h(S(n).name, { removeIdx: !0, mode: "lowercase" })}`
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
return s;
|
|
388
|
+
}
|
|
389
|
+
function G(e, t, s) {
|
|
390
|
+
const o = j(e);
|
|
391
|
+
for (const n of o) {
|
|
392
|
+
const r = i(process.cwd(), n), a = i(t, m(n));
|
|
393
|
+
E(r, a);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
function rt(e, t) {
|
|
397
|
+
F(J(L)), v(L, `export default ${JSON.stringify(e, null, 2)}
|
|
398
|
+
`), v(De, `---
|
|
399
|
+
`.concat(ge.stringify(t)));
|
|
400
|
+
}
|
|
401
|
+
const re = "prepare", oe = [
|
|
402
|
+
l("-c, --extra-public-content <string>", b.shape.extraPublicContent._def.description),
|
|
403
|
+
l("-p, --extra-header-pages <string>", b.shape.extraHeaderPages._def.description),
|
|
404
|
+
l("-t, --extra-theme <string>", b.shape.extraTheme._def.description),
|
|
405
|
+
l("-v, --vitepress-config <string>", b.shape.vitepressConfig._def.description)
|
|
406
|
+
], ot = k(R(re), [...oe, ..._]).description("Transform doc to the target vitepress format.").action(async (e) => {
|
|
407
|
+
await ne(e);
|
|
408
|
+
});
|
|
409
|
+
async function ne(e) {
|
|
410
|
+
const { extraHeaderPages: t, extraPublicContent: s, extraTheme: o, vitepressConfig: n } = K(re, e), r = Ie(), a = Te().reduce((g, p) => p.clone_url && !p.fork && !p.private && p.docpress.includes.length && !p.docpress.filtered ? [...g, p] : g, []), { sidebar: c, index: u } = tt(a, r), $ = [];
|
|
411
|
+
t && $.push(...st(t)), s && G(s, i(x, "public")), o && G(o, i(x, ".vitepress/theme"));
|
|
412
|
+
const C = Xe(c, $, n);
|
|
413
|
+
rt(C, u);
|
|
414
|
+
}
|
|
415
|
+
function nt() {
|
|
416
|
+
const e = new ie().name("docpress").description("Build your doc website faster than light ⚡️⚡️⚡️").version(`${Re.version}`).addCommand(Be).addCommand(ot).addCommand(We).action(async (t, s) => {
|
|
417
|
+
await te(t), await ne(t), await se();
|
|
418
|
+
}).configureHelp({
|
|
419
|
+
sortSubcommands: !0,
|
|
420
|
+
sortOptions: !0,
|
|
421
|
+
showGlobalOptions: !0
|
|
422
|
+
}).enablePositionalOptions().passThroughOptions();
|
|
423
|
+
return k(e, [...ee, ...oe, ..._]), e;
|
|
424
|
+
}
|
|
425
|
+
function ht() {
|
|
426
|
+
nt().parseAsync();
|
|
427
|
+
}
|
|
428
|
+
export {
|
|
429
|
+
nt as getProgram,
|
|
430
|
+
ht as main
|
|
431
|
+
};
|
|
432
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sources":["../src/schemas/build.ts","../src/utils/const.ts","../src/utils/functions.ts","../src/schemas/fetch.ts","../src/schemas/prepare.ts","../src/schemas/global.ts","../src/utils/commands.ts","../src/lib/git.ts","../src/lib/fetch.ts","../src/commands/global.ts","../src/commands/fetch.ts","../src/commands/build.ts","../src/lib/vitepress.ts","../src/utils/regex.ts","../src/lib/prepare.ts","../src/commands/prepare.ts","../src/cli.ts"],"sourcesContent":["import { z } from 'zod'\n\nexport const buildOptsSchema = z.object({})\n\nexport type BuildOpts = Zod.infer<typeof buildOptsSchema>\n","import { resolve } from 'node:path'\n\nexport const DOCPRESS_DIR = resolve(process.cwd(), 'docpress')\n\nexport const USER_REPOS_INFOS = resolve(process.cwd(), 'docpress/repositories.json')\n\nexport const USER_INFOS = resolve(process.cwd(), 'docpress/owner.json')\n\nexport const DOCS_DIR = resolve(process.cwd(), 'docpress/docs')\n\nexport const INDEX_FILE = resolve(process.cwd(), 'docpress/docs/index.md')\n\nexport const VITEPRESS_CONFIG = resolve(process.cwd(), 'docpress/.vitepress/config.ts')\n","import { existsSync, mkdirSync, readdirSync, readFileSync, statSync } from 'node:fs'\nimport { basename, join } from 'node:path'\nimport axios from 'axios'\nimport { rimrafSync } from 'rimraf'\nimport type { EnhancedRepository } from '../lib/fetch.js'\nimport type { getInfos } from '../lib/git.js'\nimport { USER_INFOS, USER_REPOS_INFOS } from './const.js'\n\nexport async function checkHttpStatus(url: string): Promise<number> {\n try {\n const response = await axios.head(url)\n return response.status\n } catch (error) {\n return error.response?.status || error.status || 500\n }\n}\n\ninterface PrettifyOpts {\n mode?: 'capitalize' | 'uppercase' | 'lowercase'\n replaceDash?: boolean\n removeIdx?: boolean\n}\n\nexport function prettify(s: string, opts: PrettifyOpts) {\n let u: string = ''\n\n if (opts?.removeIdx) {\n u = s.replace(/^\\d{2}-/, '')\n }\n\n if (opts?.replaceDash) {\n u = (u || s).replaceAll('-', ' ')\n }\n\n if (opts?.mode === 'capitalize') {\n u = (u || s).slice(0, 1).toUpperCase() + (u || s).slice(1).toLowerCase()\n } else if (opts?.mode === 'lowercase') {\n u = (u || s).toLowerCase()\n } else if (opts?.mode === 'uppercase') {\n u = (u || s).toUpperCase()\n }\n\n return u || s\n}\n\nexport function createDir(directory: string, { clean }: { clean?: boolean } = { clean: false }) {\n try {\n if (clean && existsSync(directory)) {\n rimrafSync(`${directory}/*`, { glob: true })\n }\n if (!existsSync(directory)) {\n mkdirSync(directory, { recursive: true })\n }\n } catch (err) {\n console.error(err)\n }\n}\n\nexport function isDir(path: string) {\n return statSync(path).isDirectory()\n}\n\nexport function isFile(path: string) {\n return statSync(path).isFile()\n}\n\nexport function extractFiles(paths: string[] | string): string[] {\n return (Array.isArray(paths) ? paths : [paths]).flatMap((path) => {\n if (isFile(path)) {\n return [path]\n }\n if (isDir(path)) {\n return readdirSync(path).flatMap(file => extractFiles(join(path, file)))\n }\n return []\n })\n}\n\nexport function getMdFiles(path: string[]) {\n return extractFiles(path).filter(file => basename(file).endsWith('.md'))\n}\n\nexport function prettifyEnum(arr: readonly string[]) {\n return arr.reduce((acc, cur, idx, arr) => {\n if (!idx) {\n return `\"${cur}\"`\n } else if (idx === arr.length - 1) {\n return `${acc} or \"${cur}\"`\n } else {\n return `${acc}, \"${cur}\"`\n }\n }, '')\n}\n\nexport function getUserInfos() {\n return JSON.parse(readFileSync(USER_INFOS).toString()) as Awaited<ReturnType<typeof getInfos>>['user']\n}\n\nexport function getUserRepos() {\n return JSON.parse(readFileSync(USER_REPOS_INFOS).toString()) as EnhancedRepository[]\n}\n\nexport function deepMerge<T extends Record<string, any> | null>(...objects: T[]): T {\n return objects.reduce((acc, obj) => {\n if (obj === null) {\n return acc\n }\n\n Object.keys(obj).forEach((key) => {\n const accValue = acc ? acc[key] : null\n const objValue = obj[key]\n\n if (isObject(accValue) && isObject(objValue)) {\n (acc as Record<string, any>)[key] = deepMerge(accValue, objValue)\n } else {\n (acc as Record<string, any>)[key] = objValue\n }\n })\n return acc\n }, {} as T)\n}\n\nfunction isObject(val: any): val is object {\n return val && typeof val === 'object' && !Array.isArray(val)\n}\n","import { z } from 'zod'\nimport { prettifyEnum } from '../utils/functions.js'\n\nconst providers = ['github'] as const\n\nexport const fetchOptsSchema = z.object({\n branch: z.string()\n .describe('Branch used to collect Git provider data.')\n .optional()\n .default('main'),\n gitProvider: z.enum(providers)\n .describe(`Git provider used to retrieve data. Values should be one of ${prettifyEnum(providers)}.`)\n .optional()\n .default('github'),\n reposFilter: z.string()\n .transform(repos => repos.split(','))\n .or(z.string().array())\n .describe('List of comma separated repositories to retrieve from Git provider. Default to all user\\'s public repositories.')\n .optional(),\n token: z.string()\n .describe('Git provider token used to collect data.')\n .optional(),\n username: z.string()\n .describe('Git provider username used to collect data.'),\n})\n\nexport type FetchOpts = Zod.infer<typeof fetchOptsSchema>\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport type { defineConfig } from 'vitepress'\nimport { z } from 'zod'\n\nexport const prepareOptsSchema = z.object({\n extraHeaderPages: z.string()\n .describe('List of comma separated additional files or directories to process Vitepress header pages.')\n .transform(paths => paths.split(','))\n .optional(),\n extraPublicContent: z.string()\n .describe('List of comma separated additional files or directories to process Vitepress public folder.')\n .transform(paths => paths.split(','))\n .optional(),\n extraTheme: z.string()\n .describe('List of comma separated additional files or directories to use as Vitepress theme.')\n .transform(paths => paths.split(','))\n .optional(),\n vitepressConfig: z.string()\n .describe('Path to the vitepress configuration file.')\n .transform(path => JSON.parse(readFileSync(resolve(process.cwd(), path)).toString()) as ReturnType<typeof defineConfig>)\n .optional(),\n})\n\nexport type PrepareOpts = Zod.infer<typeof prepareOptsSchema>\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { z } from 'zod'\nimport { buildOptsSchema } from './build.js'\nimport type { FetchOpts } from './fetch.js'\nimport { fetchOptsSchema } from './fetch.js'\nimport type { PrepareOpts } from './prepare.js'\nimport { prepareOptsSchema } from './prepare.js'\n\nexport const globalOptsSchema = z.object({\n config: z.string()\n .describe('Path to the docpress configuration file.')\n .transform(path => JSON.parse(readFileSync(resolve(process.cwd(), path)).toString()) as FetchOpts & PrepareOpts)\n .optional(),\n})\n\nexport type GlobalOpts = Zod.infer<typeof globalOptsSchema>\n\nexport const configSchema = fetchOptsSchema\n .merge(prepareOptsSchema)\n .merge(buildOptsSchema)\n\nexport type Config = Zod.infer<typeof configSchema>\n","import type { Command, Option } from 'commander'\nimport type { GlobalOpts } from '../schemas/global.js'\nimport { globalOptsSchema } from '../schemas/global.js'\nimport type { BuildOpts } from '../schemas/build.js'\nimport { buildOptsSchema } from '../schemas/build.js'\nimport type { FetchOpts } from '../schemas/fetch.js'\nimport { fetchOptsSchema } from '../schemas/fetch.js'\nimport type { PrepareOpts } from '../schemas/prepare.js'\nimport { prepareOptsSchema } from '../schemas/prepare.js'\n\ntype Cmd = 'fetch' | 'build' | 'prepare' | 'global'\n\ninterface Options {\n build: BuildOpts\n fetch: FetchOpts\n prepare: PrepareOpts\n global: GlobalOpts\n}\n\nexport const options = {\n build: buildOptsSchema,\n fetch: fetchOptsSchema,\n prepare: prepareOptsSchema,\n global: globalOptsSchema,\n}\n\nexport function parseOptions<T extends Cmd>(cmd: T, opts: Options[T]) {\n const res = options[cmd].safeParse({\n ...globalOptsSchema.parse(opts).config,\n ...opts,\n })\n\n if (res.success) {\n return res.data as Options[T]\n }\n throw new Error(`Invalid options: ${res.error}`)\n}\n\nexport function addOptions(cmd: Command, opts: Option[]) {\n opts.forEach(opt => cmd.addOption(opt))\n return cmd\n}\n","import { appendFileSync, cpSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { Octokit } from 'octokit'\nimport { simpleGit } from 'simple-git'\nimport { createDir } from '../utils/functions.js'\nimport type { FetchOpts } from '../schemas/fetch.js'\n\nexport async function getInfos({ username, token, branch }: Pick<FetchOpts, 'username' | 'branch' | 'token'>) {\n const octokit = new Octokit({ auth: token })\n const { data: user } = await octokit.request('GET /users/{username}', { username })\n const { data: repos } = await octokit.request('GET /users/{username}/repos', { username, sort: 'full_name' })\n\n return { user, repos, branch }\n}\n\nexport async function cloneRepo(url: string, projectDir: string, branch: string, includes: string[]) {\n createDir(projectDir, { clean: true })\n\n try {\n const git = simpleGit({ baseDir: projectDir })\n await git.init()\n .addConfig('core.sparseCheckout', 'true', true, 'local')\n .addRemote('origin', url)\n\n for (const item of includes) {\n appendFileSync(resolve(projectDir, '.git/info/sparse-checkout'), `${item}\\n`, 'utf8')\n }\n\n await git.pull('origin', branch)\n\n if (includes.some(item => item.includes('docs'))) {\n cpSync(resolve(projectDir, 'docs'), projectDir, { recursive: true })\n rmSync(resolve(projectDir, 'docs'), { recursive: true })\n }\n rmSync(resolve(projectDir, '.git'), { recursive: true })\n } catch (e) {\n console.error(e)\n }\n}\n","import { resolve } from 'node:path'\nimport { writeFileSync } from 'node:fs'\nimport type { FetchOpts } from '../schemas/fetch.js'\nimport { checkHttpStatus, createDir } from '../utils/functions.js'\nimport { DOCPRESS_DIR, DOCS_DIR, USER_INFOS, USER_REPOS_INFOS } from '../utils/const.js'\nimport { cloneRepo, getInfos } from './git.js'\n\nexport type EnhancedRepository = Awaited<ReturnType<typeof getInfos>>['repos'][number] & {\n docpress: {\n branch: string\n filtered: boolean\n includes: string[]\n projectPath: string\n raw_url: string\n replace_url: string\n }\n}\n\nexport async function checkDoc(repoOwner: FetchOpts['username'], repoName: string, branch: FetchOpts['branch']) {\n const rootReadmeUrl = `https://github.com/${repoOwner}/${repoName}/tree/${branch}/README.md`\n const docsFolderUrl = `https://github.com/${repoOwner}/${repoName}/tree/${branch}/docs`\n const docsReadmeUrl = `https://github.com/${repoOwner}/${repoName}/tree/${branch}/docs/01-readme.md`\n\n const rootReadmeStatus = await checkHttpStatus(rootReadmeUrl)\n const docsFolderStatus = await checkHttpStatus(docsFolderUrl)\n const docsReadmeStatus = await checkHttpStatus(docsReadmeUrl)\n\n return {\n rootReadmeStatus,\n docsFolderStatus,\n docsReadmeStatus,\n }\n}\n\nexport async function fetchDoc({ username, branch, reposFilter, token }: FetchOpts) {\n createDir(DOCPRESS_DIR, { clean: true })\n\n await getInfos({ username, token, branch })\n .then(async ({ user, repos, branch }) => generateInfos(user, repos, branch, reposFilter))\n .then(async ({ repos }) => getDoc(repos, reposFilter))\n}\n\nexport async function enhanceRepositories(repos: Awaited<ReturnType<typeof getInfos>>['repos'], branch?: FetchOpts['branch'], reposFilter?: FetchOpts['reposFilter']) {\n const enhancedRepos: EnhancedRepository[] = []\n\n await Promise.all(\n repos.map(async (repo) => {\n const computedBranch = branch ?? repo.default_branch ?? 'main'\n const projectPath = resolve(DOCS_DIR, repo.name)\n const filtered = isRepoFiltered(repo, reposFilter)\n let includes: string[] = []\n\n if (!repo.fork && !repo.private && !filtered) {\n includes = await getSparseCheckout(repo, computedBranch)\n }\n\n enhancedRepos.push({\n ...repo,\n docpress: {\n filtered,\n branch: computedBranch,\n includes,\n projectPath,\n raw_url: `https://raw.githubusercontent.com/${repo.owner.login}/${repo.name}/${computedBranch}`,\n replace_url: `https://github.com/${repo.owner.login}/${repo.name}/tree/${computedBranch}`,\n },\n })\n }),\n )\n\n return enhancedRepos\n}\n\nexport async function getSparseCheckout(repo: Awaited<ReturnType<typeof getInfos>>['repos'][number], branch: FetchOpts['branch']) {\n const docsStatus = await checkDoc(repo.owner.login, repo.name, branch)\n\n const includes: string[] = []\n if (Object.values(docsStatus).every(status => status === 404) || !repo.size) {\n return []\n }\n if (docsStatus.docsFolderStatus !== 404) {\n includes.push('docs/*')\n }\n if (docsStatus.docsFolderStatus === 404 || docsStatus.docsReadmeStatus === 404) {\n includes.push('README.md', '!*/**/README.md')\n }\n return includes\n}\n\nexport async function generateInfos(user: Awaited<ReturnType<typeof getInfos>>['user'], repos: Awaited<ReturnType<typeof getInfos>>['repos'], branch?: FetchOpts['branch'], reposFilter?: FetchOpts['reposFilter']) {\n writeFileSync(USER_INFOS, JSON.stringify(user, null, 2))\n\n const enhancedRepos = await enhanceRepositories(repos, branch, reposFilter)\n writeFileSync(USER_REPOS_INFOS, JSON.stringify(enhancedRepos, null, 2))\n\n return { user, repos: enhancedRepos }\n}\n\nexport async function getDoc(repos?: EnhancedRepository[], reposFilter?: FetchOpts['reposFilter']) {\n if (!repos) {\n console.warn('No repository respect docpress rules.')\n return\n }\n\n await Promise.all(\n repos\n .filter(repo => !isRepoFiltered(repo, reposFilter))\n .map(async repo => cloneRepo(repo.clone_url as string, repo.docpress.projectPath, repo.docpress.branch, repo.docpress.includes)),\n )\n}\n\nexport function isRepoFiltered(repo: EnhancedRepository | Awaited<ReturnType<typeof getInfos>>['repos'][number], reposFilter?: FetchOpts['reposFilter']) {\n const isExcluded = reposFilter?.filter(filter => filter.startsWith('!'))\n .some(filter => repo.name === filter.substring(1))\n const isIncluded = !reposFilter || reposFilter?.filter(filter => !filter.startsWith('!'))\n .includes(repo.name)\n\n const isFiltered = isExcluded || !isIncluded\n\n if ('docpress' in repo && !repo.docpress.includes.length) {\n return true\n }\n\n if (!!repo.clone_url && !repo.fork && !repo.private && !isFiltered) {\n return false\n }\n return true\n}\n","import { createOption } from 'commander'\nimport { globalOptsSchema } from '../schemas/global.js'\n\nexport const globalOpts = [\n createOption('-C, --config <string>', globalOptsSchema.shape.config._def.description),\n]\n","import { createCommand, createOption } from 'commander'\nimport { addOptions, parseOptions } from '../utils/commands.js'\nimport { fetchOptsSchema } from '../schemas/fetch.js'\nimport { fetchDoc } from '../lib/fetch.js'\nimport type { Config } from '../schemas/global.js'\nimport { globalOpts } from './global.js'\n\nconst cmdName = 'fetch'\n\nexport const fetchOpts = [\n createOption('-b, --branch <string>', fetchOptsSchema.shape.branch._def.description)\n .default(fetchOptsSchema.shape.branch._def.defaultValue()),\n createOption('-g, --git-provider <string>', fetchOptsSchema.shape.gitProvider._def.description)\n .default(fetchOptsSchema.shape.gitProvider._def.defaultValue()),\n createOption('-r, --repos-filter <string>', fetchOptsSchema.shape.reposFilter._def.description),\n createOption('-T, --token <string>', fetchOptsSchema.shape.token._def.description),\n createOption('-u, --username <string>', fetchOptsSchema.shape.username._def.description),\n]\n\nexport const fetchCmd = addOptions(createCommand(cmdName), [...fetchOpts, ...globalOpts])\n .description('Fetch docs with the given username and git provider.')\n .action(async (opts) => {\n await main(opts)\n })\n\nexport async function main(opts: Config) {\n const { username, reposFilter, token, branch, gitProvider } = parseOptions(cmdName, opts)\n\n await fetchDoc({ username, branch, reposFilter, gitProvider, token })\n}\n","import { build as vitepressBuild } from 'vitepress'\nimport { createCommand } from 'commander'\nimport { addOptions } from '../utils/commands.js'\nimport { DOCPRESS_DIR } from '../utils/const.js'\nimport { globalOpts } from './global.js'\n\nconst cmdName = 'build'\n\nexport const buildOpts = []\n\nexport const buildCmd = addOptions(createCommand(cmdName), globalOpts)\n .description('Build vitepress website.')\n .action(async (_opts) => {\n await main()\n })\n\nexport async function main() {\n await vitepressBuild(DOCPRESS_DIR)\n}\n","import type { defineConfig } from 'vitepress'\nimport { deepMerge } from '../utils/functions.js'\nimport type { Page, SidebarProject } from './prepare.js'\n\nconst defaultVitepressConfig: ReturnType<typeof defineConfig> = {\n base: '/',\n lang: 'en-US',\n vite: {\n publicDir: '../public',\n },\n title: 'Home',\n description: 'Docpress',\n srcDir: './docs',\n cleanUrls: true,\n ignoreDeadLinks: 'localhostLinks',\n themeConfig: {\n outline: [2, 3],\n search: {\n provider: 'local',\n options: {\n translations: {\n button: {\n buttonText: 'Search...',\n buttonAriaLabel: 'Search',\n },\n modal: {\n backButtonTitle: 'erase search',\n displayDetails: 'show details',\n noResultsText: 'No results for : ',\n resetButtonTitle: 'cancel search',\n footer: {\n selectText: 'go to',\n navigateText: 'navigate in results',\n closeText: 'close',\n },\n },\n },\n },\n },\n },\n}\n\nexport function getVitepressConfig(sidebar: SidebarProject[], nav: Page[], vitepressConfig?: ReturnType<typeof defineConfig>): Partial<ReturnType<typeof defineConfig>> {\n const mergedConfig = deepMerge(defaultVitepressConfig, vitepressConfig ?? {})\n\n return {\n ...mergedConfig,\n themeConfig: {\n ...mergedConfig.themeConfig,\n sidebar,\n nav,\n },\n }\n}\n","import { readFileSync, writeFileSync } from 'node:fs'\n\nexport function replaceRelativePath(file: string, url: string) {\n const fileContent = readFileSync(file, 'utf8')\n const updatedContent = fileContent.replace(/\\[([^\\]]+)\\]\\(\\.\\.\\/([^)]+)\\)/g, (_match, p1, p2) => {\n return `[${p1}](${url}/${p2})`\n })\n writeFileSync(file, updatedContent, 'utf8')\n}\n\nexport function replaceReadmePath(file: string, url: string) {\n const readmeContent = readFileSync(file, 'utf8')\n const updatedContent = readmeContent\n .replace(/\\[([^\\]]+)\\]\\((?!\\.?\\/docs\\/|docs\\/|http)(\\.?\\/)?([^/][^)]+)\\)/g, (_match, p1, _p2, p3) => {\n return `[${p1}](${url}/${p3})`\n })\n .replace(/\\[([^\\]]+)\\]\\((\\.?\\/docs\\/|docs\\/)([^)]*)\\)/g, (_match, p1, _p2, p3) => {\n return `[${p1}](${p3})`\n })\n writeFileSync(file, updatedContent, 'utf8')\n}\n","import { basename, dirname, parse, resolve } from 'node:path'\nimport { appendFileSync, cpSync, readdirSync, readFileSync, renameSync, statSync, writeFileSync } from 'node:fs'\nimport YAML from 'yaml'\nimport type { defineConfig } from 'vitepress'\nimport type { getUserInfos } from '../utils/functions.js'\nimport { createDir, extractFiles, getMdFiles, prettify } from '../utils/functions.js'\nimport { DOCS_DIR, INDEX_FILE, VITEPRESS_CONFIG } from '../utils/const.js'\nimport { replaceReadmePath, replaceRelativePath } from '../utils/regex.js'\nimport type { EnhancedRepository } from './fetch.js'\n\nexport interface Page {\n text: string\n link: string\n}\n\nexport interface SidebarProject {\n text: string\n collapsed: boolean\n items: Page[]\n}\n\nexport interface Feature {\n title: string\n details: string\n link: string\n}\n\nexport interface Index {\n layout: string\n hero: {\n name: string\n tagline: string\n }\n features: Feature[]\n}\n\nfunction addSources(repoUrl: string, outputPath: string) {\n const fileName = basename(outputPath)\n const title = fileName === 'readme.md' ? '\\n## Sources' : '# Sources'\n\n const sourcesContent = `${title}\\n\\nTake a look at the [project sources](${repoUrl}).\\n`\n\n appendFileSync(outputPath, sourcesContent, 'utf8')\n}\n\n// export function addContribution(outputPath: string) {\n// const sourcesContent = `\n// If you'd like to improve or fix the code, check out the [contribution guidelines](/contribute).\n// `\n\n// appendFileSync(outputPath, sourcesContent, 'utf8')\n// }\n\nexport function generateIndex(features: Feature[], user: ReturnType<typeof getUserInfos>) {\n const { name, login, bio } = user\n return {\n layout: 'home',\n hero: {\n name: name ? `${name}'s projects` : `${login}'s projects`,\n tagline: bio ?? 'Robots are everywhere 🤖', // \\U0001F916\n },\n features,\n }\n}\n\nexport function generateFeatures(repoName: string, description: string, features?: Feature[]) {\n const content = {\n title: prettify(repoName, { mode: 'capitalize', replaceDash: true }),\n details: description,\n link: `/${repoName}/readme`,\n }\n\n return features ? [...features, content] : [content]\n}\n\nexport function generateSidebarProject(repoName: string, sidebarPages: Page[]) {\n return {\n text: prettify(repoName, { mode: 'capitalize', replaceDash: true }),\n collapsed: true,\n items: sidebarPages,\n }\n}\n\nexport function generateSidebarPages(repoName: string, fileName: string, sidebarPages?: Page[]) {\n const content = {\n text: fileName === 'readme' ? 'Introduction' : prettify(fileName, { mode: 'capitalize', replaceDash: true }),\n link: `/${repoName}/${fileName}`,\n }\n\n return sidebarPages ? [...sidebarPages, content] : [content]\n}\n\nexport function transformDoc(repositories: EnhancedRepository[], user: ReturnType<typeof getUserInfos>) {\n const features: Feature[] = []\n const sidebar: SidebarProject[] = []\n\n for (const repository of repositories) {\n getMdFiles([repository.docpress.projectPath]).forEach((file) => {\n replaceRelativePath(file, `https://github.com/${repository.owner.login}/${repository.name}/tree/${repository.docpress.branch}`)\n\n if (basename(file).toLowerCase() === 'readme.md') {\n replaceReadmePath(file, `https://github.com/${repository.owner.login}/${repository.name}/tree/${repository.docpress.branch}`)\n }\n })\n\n const sidebarItems = readdirSync(repository.docpress.projectPath)\n .filter((file) => {\n return statSync(resolve(repository.docpress.projectPath, file)).isFile()\n && basename(resolve(repository.docpress.projectPath, file)).endsWith('.md')\n })\n .sort((a, b) => a.localeCompare(b))\n .reduce((acc: Page[], cur, idx, arr) => {\n const file = resolve(repository.docpress.projectPath, cur)\n const filename = prettify(basename(file), { mode: 'lowercase', removeIdx: true })\n\n if (filename !== basename(file)) {\n renameSync(file, resolve(dirname(file), filename))\n }\n\n if (idx === arr.length - 1) {\n let sourceFile\n if (arr.length > 1) {\n sourceFile = resolve(repository.docpress.projectPath, 'sources.md')\n addSources(repository.html_url, sourceFile)\n\n return generateSidebarPages(\n repository.name,\n parse(sourceFile).name,\n generateSidebarPages(repository.name, parse(filename).name, acc),\n )\n }\n sourceFile = resolve(repository.docpress.projectPath, 'readme.md')\n addSources(repository.html_url, sourceFile)\n }\n\n return generateSidebarPages(repository.name, parse(filename).name, acc)\n }, [])\n\n sidebar.push(generateSidebarProject(repository.name, sidebarItems))\n features.push(...generateFeatures(repository.name, repository.description || ''))\n }\n\n const index = generateIndex(features.sort((a, b) => a.title.localeCompare(b.title)), user)\n return {\n sidebar: sidebar.sort((a, b) => a.text.localeCompare(b.text)),\n index,\n }\n}\n\nexport function addExtraPages(paths: string[]) {\n const files = getMdFiles(paths)\n const nav: Page[] = []\n\n for (const file of files) {\n const src = resolve(process.cwd(), file)\n const dest = resolve(DOCS_DIR, prettify(basename(file), { mode: 'lowercase', removeIdx: true }))\n cpSync(src, dest)\n nav.push({\n text: prettify(parse(src).name, { replaceDash: true, removeIdx: true }),\n link: `/${prettify(parse(src).name, { removeIdx: true, mode: 'lowercase' })}`,\n })\n }\n return nav\n}\n\nexport function addContent(path: string | string[], dir: string, fn?: () => void) {\n const files = extractFiles(path)\n\n for (const file of files) {\n const src = resolve(process.cwd(), file)\n const dest = resolve(dir, basename(file))\n if (fn) {\n fn()\n }\n cpSync(src, dest)\n }\n}\n\nexport function parseVitepressConfig(path: string) {\n return JSON.parse(readFileSync(resolve(process.cwd(), path)).toString())\n}\n\nexport function generateVitepressFiles(vitepressConfig: Partial<ReturnType<typeof defineConfig>>, index: Index) {\n createDir(dirname(VITEPRESS_CONFIG))\n\n writeFileSync(VITEPRESS_CONFIG, `export default ${JSON.stringify(vitepressConfig, null, 2)}\\n`)\n writeFileSync(INDEX_FILE, '---\\n'.concat(YAML.stringify(index)))\n}\n","import { resolve } from 'node:path'\nimport { createCommand, createOption } from 'commander'\nimport { DOCPRESS_DIR } from '../utils/const.js'\nimport { getUserInfos, getUserRepos } from '../utils/functions.js'\nimport { addOptions, parseOptions } from '../utils/commands.js'\nimport { getVitepressConfig } from '../lib/vitepress.js'\nimport { addContent, addExtraPages, generateVitepressFiles, transformDoc } from '../lib/prepare.js'\nimport { prepareOptsSchema } from '../schemas/prepare.js'\nimport type { EnhancedRepository } from '../lib/fetch.js'\nimport type { Page } from '../lib/prepare.js'\nimport type { PrepareOpts } from '../schemas/prepare.js'\nimport { globalOpts } from './global.js'\n\nconst cmdName = 'prepare'\n\nexport const prepareOpts = [\n createOption('-c, --extra-public-content <string>', prepareOptsSchema.shape.extraPublicContent._def.description),\n createOption('-p, --extra-header-pages <string>', prepareOptsSchema.shape.extraHeaderPages._def.description),\n createOption('-t, --extra-theme <string>', prepareOptsSchema.shape.extraTheme._def.description),\n createOption('-v, --vitepress-config <string>', prepareOptsSchema.shape.vitepressConfig._def.description),\n]\n\nexport const prepareCmd = addOptions(createCommand(cmdName), [...prepareOpts, ...globalOpts])\n .description('Transform doc to the target vitepress format.')\n .action(async (opts) => {\n await main(opts)\n })\n\nexport async function main(opts: PrepareOpts) {\n const { extraHeaderPages, extraPublicContent, extraTheme, vitepressConfig } = parseOptions(cmdName, opts)\n\n const user = getUserInfos()\n const repositories = getUserRepos()\n .reduce((acc: EnhancedRepository[], cur) => {\n if (cur.clone_url && !cur.fork && !cur.private && cur.docpress.includes.length && !cur.docpress.filtered) {\n return [...acc, cur]\n }\n return acc\n }, [])\n\n const { sidebar, index } = transformDoc(repositories, user)\n const nav: Page[] = []\n\n if (extraHeaderPages) {\n nav.push(...addExtraPages(extraHeaderPages))\n }\n if (extraPublicContent) {\n addContent(extraPublicContent, resolve(DOCPRESS_DIR, 'public'))\n }\n if (extraTheme) {\n addContent(extraTheme, resolve(DOCPRESS_DIR, '.vitepress/theme'))\n }\n\n const config = getVitepressConfig(sidebar, nav, vitepressConfig)\n\n generateVitepressFiles(config, index)\n}\n","import { Command } from 'commander'\nimport pkg from '../package.json' with { type: 'json' }\nimport { fetchCmd, main as fetchFn, fetchOpts } from './commands/fetch.js'\nimport { buildCmd, main as buildFn } from './commands/build.js'\nimport { prepareCmd, main as prepareFn, prepareOpts } from './commands/prepare.js'\nimport { addOptions } from './utils/commands.js'\nimport { globalOpts } from './commands/global.js'\n\nexport function getProgram() {\n const pm = new Command()\n .name('docpress')\n .description('Build your doc website faster than light ⚡️⚡️⚡️')\n .version(`${pkg.version}`)\n .addCommand((fetchCmd))\n .addCommand(prepareCmd)\n .addCommand(buildCmd)\n .action(async (opts, _cmd) => {\n await fetchFn(opts)\n await prepareFn(opts)\n await buildFn()\n })\n .configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n showGlobalOptions: true,\n })\n .enablePositionalOptions()\n .passThroughOptions()\n\n addOptions(pm, [...fetchOpts, ...prepareOpts, ...globalOpts])\n\n return pm\n}\n\nexport function main() {\n const pm = getProgram()\n pm.parseAsync()\n}\n"],"names":["buildOptsSchema","z","DOCPRESS_DIR","resolve","USER_REPOS_INFOS","USER_INFOS","DOCS_DIR","INDEX_FILE","VITEPRESS_CONFIG","checkHttpStatus","url","axios","error","prettify","s","opts","u","createDir","directory","clean","existsSync","rimrafSync","mkdirSync","err","isDir","path","statSync","isFile","extractFiles","paths","readdirSync","file","join","getMdFiles","basename","prettifyEnum","arr","acc","cur","idx","getUserInfos","readFileSync","getUserRepos","deepMerge","objects","obj","key","accValue","objValue","isObject","val","providers","fetchOptsSchema","repos","prepareOptsSchema","globalOptsSchema","options","parseOptions","cmd","res","addOptions","opt","getInfos","username","token","branch","octokit","Octokit","user","cloneRepo","projectDir","includes","git","simpleGit","item","appendFileSync","cpSync","rmSync","e","checkDoc","repoOwner","repoName","rootReadmeUrl","docsFolderUrl","docsReadmeUrl","rootReadmeStatus","docsFolderStatus","docsReadmeStatus","fetchDoc","reposFilter","generateInfos","getDoc","enhanceRepositories","enhancedRepos","repo","computedBranch","projectPath","filtered","isRepoFiltered","getSparseCheckout","docsStatus","status","writeFileSync","isExcluded","filter","isIncluded","isFiltered","globalOpts","createOption","cmdName","fetchOpts","fetchCmd","createCommand","main","gitProvider","buildCmd","_opts","vitepressBuild","defaultVitepressConfig","getVitepressConfig","sidebar","nav","vitepressConfig","mergedConfig","replaceRelativePath","updatedContent","_match","p1","p2","replaceReadmePath","_p2","p3","addSources","repoUrl","outputPath","sourcesContent","generateIndex","features","name","login","bio","generateFeatures","description","content","generateSidebarProject","sidebarPages","generateSidebarPages","fileName","transformDoc","repositories","repository","sidebarItems","a","b","filename","renameSync","dirname","sourceFile","parse","index","addExtraPages","files","src","dest","addContent","dir","fn","generateVitepressFiles","YAML","prepareOpts","prepareCmd","extraHeaderPages","extraPublicContent","extraTheme","config","getProgram","pm","Command","pkg","_cmd","fetchFn","prepareFn","buildFn"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tobi-or-not/docpress",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.1.
|
|
5
|
-
"
|
|
4
|
+
"version": "0.1.6",
|
|
5
|
+
"module": "dist/docpress.js",
|
|
6
6
|
"types": "types/index.d.ts",
|
|
7
7
|
"bin": {
|
|
8
8
|
"docpress": "bin/docpress.js"
|
|
@@ -22,7 +22,6 @@
|
|
|
22
22
|
"rimraf": "^6.0.1",
|
|
23
23
|
"simple-git": "^3.27.0",
|
|
24
24
|
"vitepress": "^1.4.1",
|
|
25
|
-
"vue": "^3.5.12",
|
|
26
25
|
"yaml": "^2.6.0",
|
|
27
26
|
"zod": "^3.23.8"
|
|
28
27
|
},
|
|
@@ -46,21 +45,23 @@
|
|
|
46
45
|
"tag": "latest"
|
|
47
46
|
},
|
|
48
47
|
"scripts": {
|
|
49
|
-
"build": "
|
|
48
|
+
"build": "pnpm run build:types && pnpm run build:vite",
|
|
50
49
|
"build:clean": "rimraf ./dist ./types ./tsconfig.tsbuildinfo",
|
|
51
|
-
"build:docker": "docker build --tag
|
|
52
|
-
"
|
|
50
|
+
"build:docker": "docker build --tag tobi-or-not/docpress --target prod .",
|
|
51
|
+
"build:types": "tsc",
|
|
52
|
+
"build:vite": "vite build",
|
|
53
|
+
"dev": "vite-node ./dev/docpress.ts",
|
|
53
54
|
"format": "eslint . --fix",
|
|
54
55
|
"lint": "eslint .",
|
|
55
56
|
"start": "./bin/docpress.js",
|
|
56
|
-
"start:docker": "docker run --
|
|
57
|
+
"start:docker": "docker run --name docpress --rm -v $(pwd)/docpress:/app/docpress:rw tobi-or-not/docpress",
|
|
57
58
|
"stop:docker": "docker rm --force docpress",
|
|
58
59
|
"test": "vitest run",
|
|
59
60
|
"test:cov": "vitest run --coverage",
|
|
60
61
|
"vp:build": "vitepress build ./docpress",
|
|
61
|
-
"vp:build:docker": "docker build --tag
|
|
62
|
+
"vp:build:docker": "docker build --tag tobi-or-not/docs --target prod .",
|
|
62
63
|
"vp:dev": "vitepress dev ./docpress --port 8080",
|
|
63
|
-
"vp:dev:docker": "docker run --publish 8080:8080 --rm
|
|
64
|
+
"vp:dev:docker": "docker run --publish 8080:8080 --name docpress-vp --rm tobi-or-not/docs",
|
|
64
65
|
"vp:preview": "vitepress preview ./docpress --port 8080"
|
|
65
66
|
}
|
|
66
67
|
}
|
package/dist/commands/build.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { build as vitepressBuild } from 'vitepress';
|
|
2
|
-
import { createCommand } from 'commander';
|
|
3
|
-
import { addOptions } from '../utils/commands.js';
|
|
4
|
-
import { DOCPRESS_DIR } from '../utils/const.js';
|
|
5
|
-
import { globalOpts } from './global.js';
|
|
6
|
-
const cmdName = 'build';
|
|
7
|
-
export const buildOpts = [];
|
|
8
|
-
export const buildCmd = addOptions(createCommand(cmdName), globalOpts)
|
|
9
|
-
.description('Build vitepress website.')
|
|
10
|
-
.action(async (_opts) => {
|
|
11
|
-
await main();
|
|
12
|
-
});
|
|
13
|
-
export async function main() {
|
|
14
|
-
await vitepressBuild(DOCPRESS_DIR);
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=build.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,WAAW,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,GAAG,OAAO,CAAA;AAEvB,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAE3B,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;KACnE,WAAW,CAAC,0BAA0B,CAAC;KACvC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;IACtB,MAAM,IAAI,EAAE,CAAA;AACd,CAAC,CAAC,CAAA;AAEJ,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,cAAc,CAAC,YAAY,CAAC,CAAA;AACpC,CAAC"}
|