dogsbay 0.2.0-beta.91 → 0.2.0-beta.92
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/commands/migrate-fluidtopics-rest.js +113 -0
- package/dist/commands/migrate-fluidtopics.js +158 -0
- package/dist/index.js +39 -0
- package/package.json +17 -15
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `migrate-fluidtopics-rest` — migrate a *live* Fluid Topics portal (via the
|
|
3
|
+
* khub REST API) into a scaffolded Dogsbay-MD site. Reverse-engineers DITA-OT
|
|
4
|
+
* HTML5 → TreeNode → Dogsbay-MD. Works on any public FT portal.
|
|
5
|
+
*
|
|
6
|
+
* Same output shape as `migrate-fluidtopics` (Option A, Git Markdown export);
|
|
7
|
+
* this is Option B (live REST).
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { join, resolve, dirname } from "node:path";
|
|
11
|
+
import pc from "picocolors";
|
|
12
|
+
import YAML from "yaml";
|
|
13
|
+
import { emitSiteScaffold } from "@dogsbay/format-astro";
|
|
14
|
+
import { serializeConfig } from "../config/serialize.js";
|
|
15
|
+
export async function migrateFluidtopicsRest(source, options) {
|
|
16
|
+
if (!/^https?:\/\//i.test(source)) {
|
|
17
|
+
console.log(pc.red(`Error: source must be a portal URL (e.g. https://www.servicenow.com/docs)`));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const outputDir = resolve(options.output || "fluidtopics-rest-dogsbay");
|
|
21
|
+
const existingConfig = ["yml", "yaml", "json"]
|
|
22
|
+
.map((ext) => join(outputDir, `dogsbay.config.${ext}`))
|
|
23
|
+
.find(existsSync);
|
|
24
|
+
if (existingConfig && !options.force) {
|
|
25
|
+
console.log(pc.red(`Error: ${outputDir} already contains a Dogsbay site (${existingConfig}). Pass --force.`));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const siteName = options.siteName || "Documentation";
|
|
29
|
+
const basePath = options.basePath !== undefined ? options.basePath : "";
|
|
30
|
+
const hrefPrefix = basePath;
|
|
31
|
+
console.log();
|
|
32
|
+
console.log(pc.bold(`Migrating Fluid Topics portal (REST) to Dogsbay-MD: ${siteName}`));
|
|
33
|
+
console.log(`Portal: ${source}`);
|
|
34
|
+
console.log(`Output: ${outputDir}`);
|
|
35
|
+
console.log();
|
|
36
|
+
const contentDir = join(outputDir, "content");
|
|
37
|
+
const astroDir = join(outputDir, "astro");
|
|
38
|
+
mkdirSync(contentDir, { recursive: true });
|
|
39
|
+
mkdirSync(astroDir, { recursive: true });
|
|
40
|
+
const { importFluidTopicsRest } = (await import(
|
|
41
|
+
/* @vite-ignore */ "@dogsbay/format-fluidtopics-rest"));
|
|
42
|
+
const { treeToDogsbayMd } = (await import(
|
|
43
|
+
/* @vite-ignore */ "@dogsbay/format-dogsbay-md"));
|
|
44
|
+
const { pages, nav, unresolved, mapsProcessed, assets } = await importFluidTopicsRest({
|
|
45
|
+
portalBase: source,
|
|
46
|
+
maps: options.map,
|
|
47
|
+
titleFilter: options.titleFilter,
|
|
48
|
+
lang: options.lang,
|
|
49
|
+
hrefPrefix,
|
|
50
|
+
throttleMs: options.throttle ? Number(options.throttle) : undefined,
|
|
51
|
+
singlePage: options.singlePage,
|
|
52
|
+
onProgress: (m) => console.log(pc.dim(` ${m}`)),
|
|
53
|
+
});
|
|
54
|
+
const unit = options.singlePage ? "page(s) (one per book)" : "topics";
|
|
55
|
+
console.log(pc.green(`Imported`) + ` ${pages.length} ${unit} from ${mapsProcessed} map(s)`);
|
|
56
|
+
// Write extracted images as real content-rooted assets (per _assets convention).
|
|
57
|
+
for (const a of assets) {
|
|
58
|
+
const dest = join(contentDir, a.path);
|
|
59
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
60
|
+
writeFileSync(dest, a.data);
|
|
61
|
+
}
|
|
62
|
+
if (assets.length)
|
|
63
|
+
console.log(pc.green(`Wrote`) + ` ${assets.length} images to content/_assets/`);
|
|
64
|
+
for (const page of pages) {
|
|
65
|
+
const dest = join(contentDir, `${page.slug || "index"}.md`);
|
|
66
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
67
|
+
const body = treeToDogsbayMd(page.tree, { frontmatter: page.frontmatter });
|
|
68
|
+
writeFileSync(dest, body.endsWith("\n") ? body : `${body}\n`);
|
|
69
|
+
}
|
|
70
|
+
console.log(pc.green(`Wrote`) + ` ${pages.length} pages to ./content/`);
|
|
71
|
+
writeFileSync(join(contentDir, "nav.yml"), YAML.stringify(navItemsToSingleKey(nav, basePath)));
|
|
72
|
+
console.log(pc.green(`Wrote`) + ` content/nav.yml (${nav.length} top-level items)`);
|
|
73
|
+
const config = {
|
|
74
|
+
schemaVersion: 1,
|
|
75
|
+
site: { name: siteName, url: options.siteUrl, basePath },
|
|
76
|
+
content: { sources: [{ path: "./content", from: "dogsbay-md" }] },
|
|
77
|
+
agent: { llmsTxt: true, mdMirror: true },
|
|
78
|
+
};
|
|
79
|
+
writeFileSync(join(outputDir, "dogsbay.config.yml"), serializeConfig(config, "yaml"));
|
|
80
|
+
emitSiteScaffold(astroDir, siteName, { siteName, siteUrl: options.siteUrl, basePath, llmsTxt: true, mdMirror: true, local: options.local }, true);
|
|
81
|
+
const unresolvedCount = Object.values(unresolved).reduce((n, a) => n + a.length, 0);
|
|
82
|
+
writeFileSync(join(outputDir, "MIGRATION.md"), `# Migration notes — ${siteName} (Fluid Topics REST)\n\nMigrated live from \`${source}\` via the khub API; DITA-OT HTML5 reverse-engineered to Dogsbay-MD.\n\n- Maps: **${mapsProcessed}**\n- Pages: **${pages.length}**\n- Unresolved in-content links: **${unresolvedCount}**\n\nMedia and any conref/keyref/profiling were already resolved/flattened upstream by FT's DITA-OT run.\n`);
|
|
83
|
+
console.log(pc.green(`Scaffolded`) + ` Astro project + config + MIGRATION.md`);
|
|
84
|
+
if (!options.quiet) {
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(pc.bold("Done."));
|
|
87
|
+
console.log(` cd ${outputDir} && npx dogsbay site dev`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function navItemsToSingleKey(items, basePath) {
|
|
91
|
+
const out = [];
|
|
92
|
+
for (const item of items) {
|
|
93
|
+
if (item.children && item.children.length > 0) {
|
|
94
|
+
out.push({ [item.label]: navItemsToSingleKey(item.children, basePath) });
|
|
95
|
+
}
|
|
96
|
+
else if (item.href) {
|
|
97
|
+
out.push({ [item.label]: hrefToNavPath(item.href, basePath) });
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
out.push({ [item.label]: [] });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
function hrefToNavPath(href, basePath) {
|
|
106
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(href))
|
|
107
|
+
return href;
|
|
108
|
+
let s = href.split("#")[0];
|
|
109
|
+
if (basePath && s.startsWith(basePath))
|
|
110
|
+
s = s.slice(basePath.length);
|
|
111
|
+
s = s.replace(/^\/+/, "");
|
|
112
|
+
return s ? `${s}.md` : "index.md";
|
|
113
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `migrate-fluidtopics` — one-way migrate a Fluid Topics Markdown export
|
|
3
|
+
* (e.g. the ServiceNow/ServiceNowDocs repo) into a scaffolded Dogsbay-MD site.
|
|
4
|
+
*
|
|
5
|
+
* Canonical migration layout (see the migration-shape skill):
|
|
6
|
+
* <output>/
|
|
7
|
+
* content/ <- Dogsbay-MD, the new source of truth
|
|
8
|
+
* <pub>/<topic>.md
|
|
9
|
+
* nav.yml
|
|
10
|
+
* astro/ <- generated Astro project (emitSiteScaffold)
|
|
11
|
+
* dogsbay.config.yml
|
|
12
|
+
* MIGRATION.md
|
|
13
|
+
*
|
|
14
|
+
* Mirrors `migrate-mkdocs`, reusing the shared emitters
|
|
15
|
+
* (importer -> treeToDogsbayMd -> emitSiteScaffold + serializeConfig).
|
|
16
|
+
*/
|
|
17
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
18
|
+
import { join, resolve, basename, dirname } from "node:path";
|
|
19
|
+
import pc from "picocolors";
|
|
20
|
+
import YAML from "yaml";
|
|
21
|
+
import { emitSiteScaffold } from "@dogsbay/format-astro";
|
|
22
|
+
import { serializeConfig } from "../config/serialize.js";
|
|
23
|
+
export async function migrateFluidtopics(source, options) {
|
|
24
|
+
const sourceDir = resolve(source);
|
|
25
|
+
const markdownDir = join(sourceDir, "markdown");
|
|
26
|
+
if (!existsSync(markdownDir)) {
|
|
27
|
+
console.log(pc.red(`Error: no markdown/ directory found in ${sourceDir}`));
|
|
28
|
+
console.log("Point this at a Fluid Topics Markdown export (e.g. a ServiceNowDocs checkout).");
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const outputDir = resolve(options.output || `${basename(sourceDir)}-dogsbay`);
|
|
32
|
+
const existingConfig = ["yml", "yaml", "json"]
|
|
33
|
+
.map((ext) => join(outputDir, `dogsbay.config.${ext}`))
|
|
34
|
+
.find(existsSync);
|
|
35
|
+
if (existingConfig && !options.force) {
|
|
36
|
+
console.log(pc.red(`Error: ${outputDir} already contains a Dogsbay site (${basename(existingConfig)}).`));
|
|
37
|
+
console.log("Pass --force to overwrite.");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const siteName = options.siteName || "Documentation";
|
|
41
|
+
// A dedicated docs repo serves at the host root by default (matches the
|
|
42
|
+
// openshift-docs-dogsbay / GitHub Pages project-site convention).
|
|
43
|
+
const basePath = options.basePath !== undefined ? options.basePath : "";
|
|
44
|
+
const hrefPrefix = basePath; // root-relative slugs when basePath is ""
|
|
45
|
+
console.log();
|
|
46
|
+
console.log(pc.bold(`Migrating Fluid Topics Markdown export to Dogsbay-MD: ${siteName}`));
|
|
47
|
+
console.log(`Source: ${sourceDir}`);
|
|
48
|
+
console.log(`Output: ${outputDir}`);
|
|
49
|
+
console.log();
|
|
50
|
+
const contentDir = join(outputDir, "content");
|
|
51
|
+
const astroDir = join(outputDir, "astro");
|
|
52
|
+
mkdirSync(contentDir, { recursive: true });
|
|
53
|
+
mkdirSync(astroDir, { recursive: true });
|
|
54
|
+
// 1. Import the export -> pages + nav.
|
|
55
|
+
const { importFluidTopicsProject } = (await import(
|
|
56
|
+
/* @vite-ignore */ "@dogsbay/format-fluidtopics-markdown"));
|
|
57
|
+
const { treeToDogsbayMd } = (await import(
|
|
58
|
+
/* @vite-ignore */ "@dogsbay/format-dogsbay-md"));
|
|
59
|
+
const { pages, nav, unresolved } = await importFluidTopicsProject(sourceDir, {
|
|
60
|
+
hrefPrefix,
|
|
61
|
+
publications: options.publication,
|
|
62
|
+
});
|
|
63
|
+
if (options.publication && options.publication.length > 0) {
|
|
64
|
+
console.log(pc.dim(`Scoped to publications: ${options.publication.join(", ")}`));
|
|
65
|
+
}
|
|
66
|
+
// 2. Write each page to ./content/<slug>.md as Dogsbay-MD.
|
|
67
|
+
for (const page of pages) {
|
|
68
|
+
const rel = `${page.slug || "index"}.md`;
|
|
69
|
+
const dest = join(contentDir, rel);
|
|
70
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
71
|
+
const body = treeToDogsbayMd(page.tree, { frontmatter: page.frontmatter });
|
|
72
|
+
writeFileSync(dest, body.endsWith("\n") ? body : `${body}\n`);
|
|
73
|
+
}
|
|
74
|
+
console.log(pc.green("Wrote") + ` ${pages.length} pages to ./content/ as Dogsbay-MD`);
|
|
75
|
+
// 3. nav.yml (single-key-map; file paths relative to content/).
|
|
76
|
+
const navYml = navItemsToSingleKey(nav, basePath);
|
|
77
|
+
writeFileSync(join(contentDir, "nav.yml"), YAML.stringify(navYml));
|
|
78
|
+
console.log(pc.green("Extracted") + ` navigation to content/nav.yml (${navYml.length} top-level items)`);
|
|
79
|
+
// 4. dogsbay.config.yml.
|
|
80
|
+
const dogsbayConfig = {
|
|
81
|
+
schemaVersion: 1,
|
|
82
|
+
site: { name: siteName, url: options.siteUrl, basePath },
|
|
83
|
+
content: { sources: [{ path: "./content", from: "dogsbay-md" }] },
|
|
84
|
+
agent: { llmsTxt: true, mdMirror: true },
|
|
85
|
+
};
|
|
86
|
+
writeFileSync(join(outputDir, "dogsbay.config.yml"), serializeConfig(dogsbayConfig, "yaml"));
|
|
87
|
+
console.log(pc.green("Wrote") + " dogsbay.config.yml");
|
|
88
|
+
// 5. Scaffold the Astro project under ./astro/.
|
|
89
|
+
emitSiteScaffold(astroDir, siteName, { siteName, siteUrl: options.siteUrl, basePath, llmsTxt: true, mdMirror: true, local: options.local }, true);
|
|
90
|
+
console.log(pc.green("Scaffolded") + " Astro project at ./astro/");
|
|
91
|
+
// 6. MIGRATION.md.
|
|
92
|
+
const unresolvedCount = Object.values(unresolved).reduce((n, a) => n + a.length, 0);
|
|
93
|
+
writeFileSync(join(outputDir, "MIGRATION.md"), buildMigrationNotes({ sourceDir, siteName, pageCount: pages.length, unresolvedCount, basePath }));
|
|
94
|
+
console.log(pc.green("Wrote") + " MIGRATION.md");
|
|
95
|
+
if (!options.quiet) {
|
|
96
|
+
console.log();
|
|
97
|
+
console.log(pc.bold("Done! Your Dogsbay-MD site is ready."));
|
|
98
|
+
console.log();
|
|
99
|
+
console.log("Next steps:");
|
|
100
|
+
console.log(` cd ${outputDir}`);
|
|
101
|
+
console.log(" npx dogsbay site dev # live preview (auto-installs)");
|
|
102
|
+
console.log();
|
|
103
|
+
console.log("Edit ./content/*.md (canonical Dogsbay-MD) from here on.");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function navItemsToSingleKey(items, basePath) {
|
|
107
|
+
const out = [];
|
|
108
|
+
for (const item of items) {
|
|
109
|
+
if (item.children && item.children.length > 0) {
|
|
110
|
+
out.push({ [item.label]: navItemsToSingleKey(item.children, basePath) });
|
|
111
|
+
}
|
|
112
|
+
else if (item.href) {
|
|
113
|
+
out.push({ [item.label]: hrefToNavPath(item.href, basePath) });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
out.push({ [item.label]: [] });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
/** Convert a resolved route href back to a content-relative .md path. */
|
|
122
|
+
function hrefToNavPath(href, basePath) {
|
|
123
|
+
if (/^[a-z][a-z0-9+.-]*:/i.test(href))
|
|
124
|
+
return href; // external
|
|
125
|
+
let s = href.split("#")[0];
|
|
126
|
+
if (basePath && s.startsWith(basePath))
|
|
127
|
+
s = s.slice(basePath.length);
|
|
128
|
+
s = s.replace(/^\/+/, "");
|
|
129
|
+
if (!s)
|
|
130
|
+
return "index.md";
|
|
131
|
+
return `${s}.md`;
|
|
132
|
+
}
|
|
133
|
+
function buildMigrationNotes(args) {
|
|
134
|
+
return [
|
|
135
|
+
`# Migration notes — ${args.siteName}`,
|
|
136
|
+
"",
|
|
137
|
+
`Migrated from a Fluid Topics Markdown export at \`${args.sourceDir}\`.`,
|
|
138
|
+
"",
|
|
139
|
+
`- Pages: **${args.pageCount}**`,
|
|
140
|
+
`- Base path: \`${args.basePath || "(root)"}\``,
|
|
141
|
+
`- Unresolved internal links: **${args.unresolvedCount}** (broken cross-references in the source export are left as-is).`,
|
|
142
|
+
"",
|
|
143
|
+
"## What this did",
|
|
144
|
+
"",
|
|
145
|
+
"- Converted each topic to Dogsbay-MD under `./content/` (DITA `topic_type` → frontmatter `type`).",
|
|
146
|
+
"- Embedded HTML tables → Markdown tables; DITA nav-card grids → `:::cards`.",
|
|
147
|
+
"- Resolved both link schemes (relative `.md` + `raw.githubusercontent` TOC URLs) to routes.",
|
|
148
|
+
"- Built `content/nav.yml` from each publication's `index.md` TOC + the README order.",
|
|
149
|
+
"",
|
|
150
|
+
"## Known gaps",
|
|
151
|
+
"",
|
|
152
|
+
"- **Media is omitted** in the source export — image references may be dangling. Pull assets from the live portal or replace as needed.",
|
|
153
|
+
"- Conref/keyref/profiling were already resolved/flattened by the export (not recoverable here).",
|
|
154
|
+
"",
|
|
155
|
+
"Edit `./content/*.md` from here on; re-run the migration to refresh.",
|
|
156
|
+
"",
|
|
157
|
+
].join("\n");
|
|
158
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,8 @@ import { add, list } from "./commands/add.js";
|
|
|
8
8
|
import { importMkdocs } from "./commands/import-mkdocs.js";
|
|
9
9
|
import { migrateMkdocs } from "./commands/migrate-mkdocs.js";
|
|
10
10
|
import { migrateAsciidoc } from "./commands/migrate-asciidoc.js";
|
|
11
|
+
import { migrateFluidtopics } from "./commands/migrate-fluidtopics.js";
|
|
12
|
+
import { migrateFluidtopicsRest } from "./commands/migrate-fluidtopics-rest.js";
|
|
11
13
|
import { preprocessVariants } from "./commands/preprocess-variants.js";
|
|
12
14
|
import { lighthouse } from "./commands/lighthouse.js";
|
|
13
15
|
import { convert } from "./commands/convert.js";
|
|
@@ -233,6 +235,43 @@ program
|
|
|
233
235
|
.option("--local", "Use file: references to local monorepo packages (for development)")
|
|
234
236
|
.option("--quiet", "Suppress the 'Next steps' trailer")
|
|
235
237
|
.action((source, options) => migrateAsciidoc(source, options));
|
|
238
|
+
program
|
|
239
|
+
.command("migrate-fluidtopics")
|
|
240
|
+
.description("One-way migrate a Fluid Topics Markdown export (e.g. a ServiceNowDocs " +
|
|
241
|
+
"checkout: markdown/{publication}/**) to a scaffolded Dogsbay-MD " +
|
|
242
|
+
"project. Source-of-truth becomes ./content/*.md.")
|
|
243
|
+
.argument("<source>", "Path to the FT Markdown export (containing markdown/)")
|
|
244
|
+
.option("-o, --output <dir>", "Output directory (default: {source}-dogsbay)")
|
|
245
|
+
.option("--force", "Overwrite an existing Dogsbay site at the output dir")
|
|
246
|
+
.option("--site-name <name>", "Site name written into dogsbay.config.yml")
|
|
247
|
+
.option("--site-url <url>", "Canonical URL of the destination site. Drives robots.txt, sitemap, " +
|
|
248
|
+
"canonical tags, and llms.txt.")
|
|
249
|
+
.option("--base-path <path>", 'Path under the host where docs are served (default "" = host root, ' +
|
|
250
|
+
"the dedicated-repo convention).")
|
|
251
|
+
.option("--publication <name>", "Limit the migration to one or more publications (top-level markdown/{pub} " +
|
|
252
|
+
"folder). Repeatable. Useful for previewing a slice of a huge corpus.", (val, prev = []) => [...prev, val])
|
|
253
|
+
.option("--local", "Use file: references to local monorepo packages (for development)")
|
|
254
|
+
.option("--quiet", "Suppress the 'Next steps' trailer")
|
|
255
|
+
.action((source, options) => migrateFluidtopics(source, options));
|
|
256
|
+
program
|
|
257
|
+
.command("migrate-fluidtopics-rest")
|
|
258
|
+
.description("Migrate a LIVE Fluid Topics portal via the khub REST API (Option B): " +
|
|
259
|
+
"reverse-engineers DITA-OT HTML5 → Dogsbay-MD. Works on any public FT " +
|
|
260
|
+
"portal (ServiceNow, Johnson Controls, FT docs).")
|
|
261
|
+
.argument("<portal-url>", "FT portal root (e.g. https://www.servicenow.com/docs or https://docs.johnsoncontrols.com/bas)")
|
|
262
|
+
.option("-o, --output <dir>", "Output directory (default: fluidtopics-rest-dogsbay)")
|
|
263
|
+
.option("--force", "Overwrite an existing Dogsbay site at the output dir")
|
|
264
|
+
.option("--site-name <name>", "Site name written into dogsbay.config.yml")
|
|
265
|
+
.option("--site-url <url>", "Canonical URL of the destination site")
|
|
266
|
+
.option("--base-path <path>", 'Path under the host where docs are served (default "" = host root)')
|
|
267
|
+
.option("--map <id>", "Limit to one or more map ids (repeatable)", (v, p = []) => [...p, v])
|
|
268
|
+
.option("--title-filter <substr>", "Limit to maps whose title contains this substring (case-insensitive)")
|
|
269
|
+
.option("--lang <locale>", "Locale to request from the portal (e.g. en-US)")
|
|
270
|
+
.option("--throttle <ms>", "Delay between khub requests (default 150)")
|
|
271
|
+
.option("--single-page", "Roll each map into ONE page (whole book) instead of one page per topic; xrefs become in-page anchors")
|
|
272
|
+
.option("--local", "Use file: references to local monorepo packages (for development)")
|
|
273
|
+
.option("--quiet", "Suppress the trailer")
|
|
274
|
+
.action((source, options) => migrateFluidtopicsRest(source, options));
|
|
236
275
|
program
|
|
237
276
|
.command("preprocess-variants")
|
|
238
277
|
.description("Add variant tabs to file includes (e.g. Python 3.10+ / 3.9+ tabs)")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dogsbay",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.92",
|
|
4
4
|
"description": "CLI for Dogsbay — scaffold, build, and serve documentation sites with markdown / MkDocs / Obsidian / OpenAPI sources",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -33,20 +33,22 @@
|
|
|
33
33
|
"picocolors": "^1.1.0",
|
|
34
34
|
"prompts": "^2.4.2",
|
|
35
35
|
"yaml": "^2.8.3",
|
|
36
|
-
"@dogsbay/autodoc-python": "0.2.0-beta.
|
|
37
|
-
"@dogsbay/format-
|
|
38
|
-
"@dogsbay/format-
|
|
39
|
-
"@dogsbay/format-obsidian": "0.2.0-beta.
|
|
40
|
-
"@dogsbay/format-mdx": "0.2.0-beta.
|
|
41
|
-
"@dogsbay/format-starlight": "0.2.0-beta.
|
|
42
|
-
"@dogsbay/format-docusaurus": "0.2.0-beta.
|
|
43
|
-
"@dogsbay/docusaurus-adapter-tigera": "0.2.0-beta.
|
|
44
|
-
"@dogsbay/format-dogsbay-md": "0.2.0-beta.
|
|
45
|
-
"@dogsbay/format-
|
|
46
|
-
"@dogsbay/
|
|
47
|
-
"@dogsbay/format-
|
|
48
|
-
"@dogsbay/
|
|
49
|
-
"@dogsbay/
|
|
36
|
+
"@dogsbay/autodoc-python": "0.2.0-beta.92",
|
|
37
|
+
"@dogsbay/format-astro": "0.2.0-beta.92",
|
|
38
|
+
"@dogsbay/format-mkdocs": "0.2.0-beta.92",
|
|
39
|
+
"@dogsbay/format-obsidian": "0.2.0-beta.92",
|
|
40
|
+
"@dogsbay/format-mdx": "0.2.0-beta.92",
|
|
41
|
+
"@dogsbay/format-starlight": "0.2.0-beta.92",
|
|
42
|
+
"@dogsbay/format-docusaurus": "0.2.0-beta.92",
|
|
43
|
+
"@dogsbay/docusaurus-adapter-tigera": "0.2.0-beta.92",
|
|
44
|
+
"@dogsbay/format-dogsbay-md": "0.2.0-beta.92",
|
|
45
|
+
"@dogsbay/format-fluidtopics-markdown": "0.2.0-beta.92",
|
|
46
|
+
"@dogsbay/format-fluidtopics-rest": "0.2.0-beta.92",
|
|
47
|
+
"@dogsbay/format-openapi": "0.2.0-beta.92",
|
|
48
|
+
"@dogsbay/adoc2md-modular": "0.2.0-beta.92",
|
|
49
|
+
"@dogsbay/format-asciidoc": "0.2.0-beta.92",
|
|
50
|
+
"@dogsbay/minja": "0.2.0-beta.92",
|
|
51
|
+
"@dogsbay/types": "0.2.0-beta.92"
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
52
54
|
"@types/markdown-it": "^14.1.0",
|