sourcey 3.3.1 → 3.3.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/init.d.ts.map +1 -1
- package/dist/init.js +185 -41
- package/dist/init.js.map +1 -1
- package/package.json +1 -1
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAwDA,eAAO,MAAM,IAAI,qDAyPf,CAAC"}
|
package/dist/init.js
CHANGED
|
@@ -1,41 +1,191 @@
|
|
|
1
1
|
import { defineCommand } from "citty";
|
|
2
2
|
import consola from "consola";
|
|
3
|
-
import { existsSync, writeFileSync } from "node:fs";
|
|
4
|
-
import { resolve } from "node:path";
|
|
3
|
+
import { existsSync, readFileSync, readdirSync, writeFileSync, mkdirSync } from "node:fs";
|
|
4
|
+
import { resolve, basename, relative } from "node:path";
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Auto-detection helpers
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function findDoxyfile(dir) {
|
|
9
|
+
for (const name of ["Doxyfile", "doxyfile", "Doxyfile.in"]) {
|
|
10
|
+
if (existsSync(resolve(dir, name)))
|
|
11
|
+
return name;
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
function parseDoxyfileValue(doxyfile, key) {
|
|
16
|
+
const content = readFileSync(doxyfile, "utf-8");
|
|
17
|
+
const match = content.match(new RegExp(`^\\s*${key}\\s*=\\s*(.+)`, "m"));
|
|
18
|
+
return match ? match[1].trim() : null;
|
|
19
|
+
}
|
|
20
|
+
function findOpenAPISpecs(dir) {
|
|
21
|
+
const specs = [];
|
|
22
|
+
const exts = [".yaml", ".yml", ".json"];
|
|
23
|
+
try {
|
|
24
|
+
for (const file of readdirSync(dir)) {
|
|
25
|
+
if (!exts.some((e) => file.endsWith(e)))
|
|
26
|
+
continue;
|
|
27
|
+
try {
|
|
28
|
+
const content = readFileSync(resolve(dir, file), "utf-8");
|
|
29
|
+
if (content.includes("openapi:") || content.includes('"openapi"')) {
|
|
30
|
+
specs.push(file);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch { }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
return specs;
|
|
38
|
+
}
|
|
39
|
+
function isExistingProject(dir) {
|
|
40
|
+
// Has source files, package.json, or git — not an empty directory
|
|
41
|
+
return (existsSync(resolve(dir, "package.json")) ||
|
|
42
|
+
existsSync(resolve(dir, ".git")) ||
|
|
43
|
+
existsSync(resolve(dir, "src")));
|
|
44
|
+
}
|
|
45
|
+
function suggestDocsDir(dir) {
|
|
46
|
+
// Common docs directory names — suggest first one that doesn't exist
|
|
47
|
+
for (const name of ["docs", "documentation"]) {
|
|
48
|
+
if (!existsSync(resolve(dir, name)))
|
|
49
|
+
return name;
|
|
50
|
+
}
|
|
51
|
+
return "docs";
|
|
52
|
+
}
|
|
5
53
|
export const init = defineCommand({
|
|
6
54
|
meta: {
|
|
7
55
|
name: "init",
|
|
8
|
-
description: "Scaffold a new Sourcey docs project
|
|
56
|
+
description: "Scaffold a new Sourcey docs project",
|
|
9
57
|
},
|
|
10
58
|
async run() {
|
|
11
59
|
const cwd = process.cwd();
|
|
12
|
-
|
|
13
|
-
|
|
60
|
+
consola.log("");
|
|
61
|
+
// -- Directory selection --
|
|
62
|
+
let targetDir = cwd;
|
|
63
|
+
if (isExistingProject(cwd)) {
|
|
64
|
+
const suggested = suggestDocsDir(cwd);
|
|
65
|
+
const dir = (await consola.prompt("Docs directory:", {
|
|
66
|
+
type: "text",
|
|
67
|
+
default: suggested,
|
|
68
|
+
placeholder: suggested,
|
|
69
|
+
}));
|
|
70
|
+
if (typeof dir === "symbol")
|
|
71
|
+
process.exit(0);
|
|
72
|
+
targetDir = resolve(cwd, dir);
|
|
73
|
+
if (!existsSync(targetDir)) {
|
|
74
|
+
mkdirSync(targetDir, { recursive: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (existsSync(resolve(targetDir, "sourcey.config.ts"))) {
|
|
78
|
+
consola.error("sourcey.config.ts already exists in " + (targetDir === cwd ? "this directory" : relative(cwd, targetDir)) + ".");
|
|
14
79
|
process.exit(1);
|
|
15
80
|
}
|
|
16
|
-
|
|
81
|
+
// -- Auto-detect sources --
|
|
82
|
+
const doxyfile = findDoxyfile(cwd);
|
|
83
|
+
const openapiSpecs = findOpenAPISpecs(cwd);
|
|
84
|
+
// -- Project name --
|
|
85
|
+
const defaultName = basename(cwd)
|
|
86
|
+
.replace(/[-_]/g, " ")
|
|
87
|
+
.replace(/\b\w/g, (c) => c.toUpperCase());
|
|
17
88
|
const name = (await consola.prompt("Project name:", {
|
|
18
89
|
type: "text",
|
|
19
|
-
default:
|
|
90
|
+
default: defaultName,
|
|
20
91
|
}));
|
|
21
92
|
if (typeof name === "symbol")
|
|
22
93
|
process.exit(0);
|
|
94
|
+
// -- Theme preset --
|
|
23
95
|
const preset = (await consola.prompt("Theme preset:", {
|
|
24
96
|
type: "select",
|
|
25
97
|
options: ["default", "minimal", "api-first"],
|
|
26
98
|
}));
|
|
27
99
|
if (typeof preset === "symbol")
|
|
28
100
|
process.exit(0);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
101
|
+
// -- Detected sources --
|
|
102
|
+
let addOpenAPI = null;
|
|
103
|
+
let addDoxygen = null;
|
|
104
|
+
if (openapiSpecs.length > 0) {
|
|
105
|
+
const spec = openapiSpecs.length === 1
|
|
106
|
+
? openapiSpecs[0]
|
|
107
|
+
: (await consola.prompt("Which OpenAPI spec?", {
|
|
108
|
+
type: "select",
|
|
109
|
+
options: openapiSpecs,
|
|
110
|
+
}));
|
|
111
|
+
if (typeof spec === "symbol")
|
|
112
|
+
process.exit(0);
|
|
113
|
+
const useSpec = (await consola.prompt(`Add API reference from ${spec}?`, {
|
|
114
|
+
type: "confirm",
|
|
115
|
+
initial: true,
|
|
116
|
+
}));
|
|
117
|
+
if (typeof useSpec === "symbol")
|
|
118
|
+
process.exit(0);
|
|
119
|
+
if (useSpec)
|
|
120
|
+
addOpenAPI = spec;
|
|
121
|
+
}
|
|
122
|
+
if (doxyfile) {
|
|
123
|
+
const useDoxygen = (await consola.prompt(`Found ${doxyfile} — add Doxygen API reference?`, {
|
|
124
|
+
type: "confirm",
|
|
125
|
+
initial: true,
|
|
126
|
+
}));
|
|
127
|
+
if (typeof useDoxygen === "symbol")
|
|
128
|
+
process.exit(0);
|
|
129
|
+
if (useDoxygen) {
|
|
130
|
+
const doxyfilePath = resolve(cwd, doxyfile);
|
|
131
|
+
const outputDir = parseDoxyfileValue(doxyfilePath, "OUTPUT_DIRECTORY") || ".";
|
|
132
|
+
const xmlOutput = parseDoxyfileValue(doxyfilePath, "XML_OUTPUT") || "xml";
|
|
133
|
+
const genXml = parseDoxyfileValue(doxyfilePath, "GENERATE_XML");
|
|
134
|
+
if (genXml && genXml.toUpperCase() !== "YES") {
|
|
135
|
+
consola.warn(`${doxyfile} has GENERATE_XML = ${genXml}. Set it to YES and run doxygen first.`);
|
|
136
|
+
}
|
|
137
|
+
addDoxygen = {
|
|
138
|
+
doxyfile,
|
|
139
|
+
xmlDir: outputDir + "/" + xmlOutput,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// -- Example content (only if no sources detected) --
|
|
144
|
+
let withExample = false;
|
|
145
|
+
if (!addOpenAPI && !addDoxygen) {
|
|
146
|
+
withExample = (await consola.prompt("Include example content?", {
|
|
147
|
+
type: "confirm",
|
|
148
|
+
initial: true,
|
|
149
|
+
}));
|
|
150
|
+
if (typeof withExample === "symbol")
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
35
153
|
// -- Generate files --
|
|
36
154
|
const pages = withExample
|
|
37
155
|
? `["introduction", "quickstart"]`
|
|
38
156
|
: `["introduction"]`;
|
|
157
|
+
// Build tabs array — paths relative from targetDir to cwd
|
|
158
|
+
const relPath = (file) => {
|
|
159
|
+
const abs = resolve(cwd, file);
|
|
160
|
+
const rel = relative(targetDir, abs);
|
|
161
|
+
return rel.startsWith(".") ? rel : "./" + rel;
|
|
162
|
+
};
|
|
163
|
+
let tabs = ` {
|
|
164
|
+
tab: "Documentation",
|
|
165
|
+
slug: "",
|
|
166
|
+
groups: [
|
|
167
|
+
{
|
|
168
|
+
group: "Getting Started",
|
|
169
|
+
pages: ${pages},
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
},`;
|
|
173
|
+
if (addOpenAPI) {
|
|
174
|
+
tabs += `
|
|
175
|
+
{
|
|
176
|
+
tab: "API Reference",
|
|
177
|
+
slug: "api",
|
|
178
|
+
openapi: "${relPath(addOpenAPI)}",
|
|
179
|
+
},`;
|
|
180
|
+
}
|
|
181
|
+
if (addDoxygen) {
|
|
182
|
+
tabs += `
|
|
183
|
+
{
|
|
184
|
+
tab: "API Reference",
|
|
185
|
+
slug: "api",
|
|
186
|
+
doxygen: { xml: "${relPath(addDoxygen.xmlDir)}" },
|
|
187
|
+
},`;
|
|
188
|
+
}
|
|
39
189
|
const config = `import { defineConfig } from "sourcey";
|
|
40
190
|
|
|
41
191
|
export default defineConfig({
|
|
@@ -45,16 +195,7 @@ export default defineConfig({
|
|
|
45
195
|
},
|
|
46
196
|
navigation: {
|
|
47
197
|
tabs: [
|
|
48
|
-
|
|
49
|
-
tab: "Documentation",
|
|
50
|
-
slug: "",
|
|
51
|
-
groups: [
|
|
52
|
-
{
|
|
53
|
-
group: "Getting Started",
|
|
54
|
-
pages: ${pages},
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
},
|
|
198
|
+
${tabs}
|
|
58
199
|
],
|
|
59
200
|
},
|
|
60
201
|
});
|
|
@@ -83,15 +224,16 @@ Then import it:
|
|
|
83
224
|
import { myFunction } from "my-package";
|
|
84
225
|
\`\`\`
|
|
85
226
|
`;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
227
|
+
const rel = targetDir === cwd ? "" : relative(cwd, targetDir) + "/";
|
|
228
|
+
writeFileSync(resolve(targetDir, "sourcey.config.ts"), config);
|
|
229
|
+
consola.log(` Created ${rel}sourcey.config.ts`);
|
|
230
|
+
writeFileSync(resolve(targetDir, "introduction.md"), intro);
|
|
231
|
+
consola.log(` Created ${rel}introduction.md`);
|
|
90
232
|
if (withExample) {
|
|
91
|
-
writeFileSync(resolve(
|
|
92
|
-
consola.log(
|
|
233
|
+
writeFileSync(resolve(targetDir, "quickstart.md"), quickstart);
|
|
234
|
+
consola.log(` Created ${rel}quickstart.md`);
|
|
93
235
|
}
|
|
94
|
-
if (!existsSync(resolve(
|
|
236
|
+
if (!existsSync(resolve(targetDir, "package.json"))) {
|
|
95
237
|
const pkg = JSON.stringify({
|
|
96
238
|
name: name.toLowerCase().replace(/[^a-z0-9-]/g, "-"),
|
|
97
239
|
private: true,
|
|
@@ -101,25 +243,27 @@ import { myFunction } from "my-package";
|
|
|
101
243
|
build: "sourcey build",
|
|
102
244
|
},
|
|
103
245
|
dependencies: {
|
|
104
|
-
sourcey: "^3.3.
|
|
246
|
+
sourcey: "^3.3.2",
|
|
105
247
|
},
|
|
106
248
|
}, null, 2);
|
|
107
|
-
writeFileSync(resolve(
|
|
108
|
-
consola.log(
|
|
249
|
+
writeFileSync(resolve(targetDir, "package.json"), pkg + "\n");
|
|
250
|
+
consola.log(` Created ${rel}package.json`);
|
|
109
251
|
}
|
|
110
252
|
else {
|
|
111
|
-
consola.log(
|
|
253
|
+
consola.log(` Skipped ${rel}package.json (already exists)`);
|
|
112
254
|
}
|
|
113
|
-
if (!existsSync(resolve(
|
|
114
|
-
writeFileSync(resolve(
|
|
115
|
-
consola.log(
|
|
255
|
+
if (!existsSync(resolve(targetDir, ".gitignore"))) {
|
|
256
|
+
writeFileSync(resolve(targetDir, ".gitignore"), "node_modules\ndist\n");
|
|
257
|
+
consola.log(` Created ${rel}.gitignore`);
|
|
116
258
|
}
|
|
117
259
|
consola.log("");
|
|
118
|
-
consola.success(
|
|
260
|
+
consola.success(`Created sourcey project in ${rel || "./"}`);
|
|
119
261
|
consola.log("");
|
|
120
|
-
consola.log(
|
|
121
|
-
|
|
122
|
-
|
|
262
|
+
consola.log(` Next steps:`);
|
|
263
|
+
if (rel)
|
|
264
|
+
consola.log(` cd ${relative(cwd, targetDir)}`);
|
|
265
|
+
consola.log(` npm install`);
|
|
266
|
+
consola.log(` npx sourcey dev`);
|
|
123
267
|
consola.log("");
|
|
124
268
|
},
|
|
125
269
|
});
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|