@bendyline/docblocks-cli 1.1.2 → 2.1.0

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.
Files changed (66) hide show
  1. package/README.md +55 -94
  2. package/dist/index.d.ts +2 -2
  3. package/dist/index.js +7183 -18
  4. package/dist/index.js.map +1 -1
  5. package/package.json +12 -12
  6. package/dist/commands/build.d.ts +0 -14
  7. package/dist/commands/build.d.ts.map +0 -1
  8. package/dist/commands/build.js +0 -74
  9. package/dist/commands/build.js.map +0 -1
  10. package/dist/commands/convert.d.ts +0 -32
  11. package/dist/commands/convert.d.ts.map +0 -1
  12. package/dist/commands/convert.js +0 -168
  13. package/dist/commands/convert.js.map +0 -1
  14. package/dist/commands/init.d.ts +0 -3
  15. package/dist/commands/init.d.ts.map +0 -1
  16. package/dist/commands/init.js +0 -23
  17. package/dist/commands/init.js.map +0 -1
  18. package/dist/commands/mcp.d.ts +0 -12
  19. package/dist/commands/mcp.d.ts.map +0 -1
  20. package/dist/commands/mcp.js +0 -20
  21. package/dist/commands/mcp.js.map +0 -1
  22. package/dist/commands/parse.d.ts +0 -6
  23. package/dist/commands/parse.d.ts.map +0 -1
  24. package/dist/commands/parse.js +0 -38
  25. package/dist/commands/parse.js.map +0 -1
  26. package/dist/commands/serve.d.ts +0 -28
  27. package/dist/commands/serve.d.ts.map +0 -1
  28. package/dist/commands/serve.js +0 -182
  29. package/dist/commands/serve.js.map +0 -1
  30. package/dist/commands/themes.d.ts +0 -6
  31. package/dist/commands/themes.d.ts.map +0 -1
  32. package/dist/commands/themes.js +0 -15
  33. package/dist/commands/themes.js.map +0 -1
  34. package/dist/commands/transforms.d.ts +0 -6
  35. package/dist/commands/transforms.d.ts.map +0 -1
  36. package/dist/commands/transforms.js +0 -15
  37. package/dist/commands/transforms.js.map +0 -1
  38. package/dist/commands/video.d.ts +0 -31
  39. package/dist/commands/video.d.ts.map +0 -1
  40. package/dist/commands/video.js +0 -116
  41. package/dist/commands/video.js.map +0 -1
  42. package/dist/converters/docx-to-md.d.ts +0 -10
  43. package/dist/converters/docx-to-md.d.ts.map +0 -1
  44. package/dist/converters/docx-to-md.js +0 -17
  45. package/dist/converters/docx-to-md.js.map +0 -1
  46. package/dist/converters/pdf-to-md.d.ts +0 -14
  47. package/dist/converters/pdf-to-md.d.ts.map +0 -1
  48. package/dist/converters/pdf-to-md.js +0 -51
  49. package/dist/converters/pdf-to-md.js.map +0 -1
  50. package/dist/converters/pptx-to-md.d.ts +0 -13
  51. package/dist/converters/pptx-to-md.d.ts.map +0 -1
  52. package/dist/converters/pptx-to-md.js +0 -67
  53. package/dist/converters/pptx-to-md.js.map +0 -1
  54. package/dist/index.d.ts.map +0 -1
  55. package/dist/mcp/server.d.ts +0 -12
  56. package/dist/mcp/server.d.ts.map +0 -1
  57. package/dist/mcp/server.js +0 -518
  58. package/dist/mcp/server.js.map +0 -1
  59. package/dist/render-html.d.ts +0 -9
  60. package/dist/render-html.d.ts.map +0 -1
  61. package/dist/render-html.js +0 -60
  62. package/dist/render-html.js.map +0 -1
  63. package/dist/version.d.ts +0 -2
  64. package/dist/version.d.ts.map +0 -1
  65. package/dist/version.js +0 -15
  66. package/dist/version.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks-cli",
3
- "version": "1.1.2",
4
- "description": "DocBlocks CLI build, serve, and manage markdown document projects",
3
+ "version": "2.1.0",
4
+ "description": "Build, preview, convert, render, inspect, and automate documents",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
7
7
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "url": "https://github.com/bendyline/docblocks.git",
10
10
  "directory": "packages/cli"
11
11
  },
12
- "homepage": "https://github.com/bendyline/docblocks",
12
+ "homepage": "https://docblocks.com/cli/",
13
13
  "keywords": [
14
14
  "docblocks",
15
15
  "cli",
@@ -32,18 +32,18 @@
32
32
  "typecheck": "tsc --noEmit"
33
33
  },
34
34
  "dependencies": {
35
- "@bendyline/squisq": "1.5.1",
36
- "@bendyline/squisq-cli": "1.2.1",
37
- "@bendyline/squisq-editor-react": "1.6.1",
38
- "@bendyline/squisq-formats": "1.4.1",
39
- "@bendyline/squisq-react": "1.4.1",
40
- "@bendyline/squisq-video": "1.2.1",
41
- "@modelcontextprotocol/sdk": "1.28.0",
35
+ "@bendyline/docblocks": "2.1.0",
36
+ "@bendyline/squisq": "2.3.0",
37
+ "@bendyline/squisq-cli": "2.3.0",
38
+ "@bendyline/squisq-editor-react": "2.3.1",
39
+ "@bendyline/squisq-formats": "2.3.0",
40
+ "@bendyline/squisq-react": "2.3.0",
41
+ "@bendyline/squisq-video": "2.2.0",
42
+ "@modelcontextprotocol/sdk": "1.29.0",
42
43
  "commander": "13.1.0",
43
44
  "jszip": "3.10.1",
44
- "mammoth": "1.12.0",
45
- "pdfjs-dist": "4.10.38",
46
45
  "playwright-core": "1.58.2",
46
+ "pdf-lib": "1.17.1",
47
47
  "zod": "3.25.76"
48
48
  }
49
49
  }
@@ -1,14 +0,0 @@
1
- import { Command } from 'commander';
2
- export interface BuildOptions {
3
- input: string;
4
- output: string;
5
- theme?: string;
6
- }
7
- export interface BuildResult {
8
- inputDir: string;
9
- outputDir: string;
10
- builtFiles: string[];
11
- }
12
- export declare function runBuild(opts: BuildOptions): Promise<BuildResult>;
13
- export declare const buildCommand: Command;
14
- //# sourceMappingURL=build.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAmCvE;AAED,eAAO,MAAM,YAAY,SAiBrB,CAAC"}
@@ -1,74 +0,0 @@
1
- import { Command } from 'commander';
2
- import { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { renderMarkdownHtml } from '../render-html.js';
5
- export async function runBuild(opts) {
6
- const inputDir = path.resolve(opts.input);
7
- const outputDir = path.resolve(opts.output);
8
- const inputStat = await stat(inputDir).catch(() => null);
9
- if (!inputStat?.isDirectory()) {
10
- throw new Error(`Input directory not found: ${inputDir}`);
11
- }
12
- const markdownFiles = await listMarkdownFiles(inputDir);
13
- if (markdownFiles.length === 0) {
14
- throw new Error(`No markdown files found in ${inputDir}.`);
15
- }
16
- await mkdir(outputDir, { recursive: true });
17
- const builtFiles = [];
18
- for (const sourcePath of markdownFiles) {
19
- const relativePath = path.relative(inputDir, sourcePath);
20
- const outputPath = path.join(outputDir, replaceMarkdownExtension(relativePath));
21
- const source = await readFile(sourcePath, 'utf-8');
22
- const html = await renderMarkdownHtml(source, {
23
- title: titleFromPath(relativePath),
24
- sourcePath,
25
- assetRoot: inputDir,
26
- themeId: opts.theme,
27
- mode: 'static',
28
- });
29
- await mkdir(path.dirname(outputPath), { recursive: true });
30
- await writeFile(outputPath, html, 'utf-8');
31
- builtFiles.push(outputPath);
32
- }
33
- return { inputDir, outputDir, builtFiles };
34
- }
35
- export const buildCommand = new Command('build')
36
- .description('Build markdown files into HTML output')
37
- .option('-i, --input <dir>', 'input directory', '.')
38
- .option('-o, --output <dir>', 'output directory', 'dist')
39
- .option('-t, --theme <id>', 'Squisq theme ID to apply')
40
- .action(async (opts) => {
41
- try {
42
- const result = await runBuild(opts);
43
- for (const outFile of result.builtFiles) {
44
- console.error(`Built: ${outFile}`);
45
- }
46
- console.error(`Done. ${result.builtFiles.length} file(s) built to ${result.outputDir}`);
47
- }
48
- catch (err) {
49
- const message = err instanceof Error ? err.message : String(err);
50
- console.error(`Error: ${message}`);
51
- process.exitCode = 1;
52
- }
53
- });
54
- async function listMarkdownFiles(root) {
55
- const entries = await readdir(root, { withFileTypes: true });
56
- const files = await Promise.all(entries.map(async (entry) => {
57
- const absolutePath = path.join(root, entry.name);
58
- if (entry.isDirectory())
59
- return listMarkdownFiles(absolutePath);
60
- return isMarkdownFile(entry.name) ? [absolutePath] : [];
61
- }));
62
- return files.flat().sort((a, b) => a.localeCompare(b));
63
- }
64
- function isMarkdownFile(fileName) {
65
- return /\.(md|markdown)$/i.test(fileName);
66
- }
67
- function replaceMarkdownExtension(filePath) {
68
- return filePath.replace(/\.(md|markdown)$/i, '.html');
69
- }
70
- function titleFromPath(filePath) {
71
- const baseName = path.basename(filePath).replace(/\.(md|markdown)$/i, '');
72
- return baseName || 'DocBlocks Document';
73
- }
74
- //# sourceMappingURL=build.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /**
2
- * convert command
3
- *
4
- * Reads a markdown file, ZIP/DBK container, or folder and exports to
5
- * supported formats: DOCX, PPTX, PDF, HTML, and container ZIP (.dbk).
6
- *
7
- * Wraps the same logic as squisq-cli's convert command, reusing the
8
- * underlying squisq libraries directly.
9
- */
10
- import { Command } from 'commander';
11
- import type { MarkdownDocument } from '@bendyline/squisq/markdown';
12
- import type { ContentContainer } from '@bendyline/squisq/storage';
13
- export interface ConvertOptions {
14
- outputDir?: string;
15
- formats?: string;
16
- theme?: string;
17
- transform?: string;
18
- }
19
- export interface ConvertResult {
20
- outputFiles: {
21
- path: string;
22
- format: string;
23
- size: number;
24
- }[];
25
- }
26
- export declare function runConvert(inputPath: string, opts: ConvertOptions): Promise<ConvertResult>;
27
- /**
28
- * Apply a transform style to a MarkdownDocument.
29
- */
30
- export declare function applyTransformToMarkdown(markdownDoc: MarkdownDocument, container: ContentContainer, transformStyle: string, themeId?: string): Promise<MarkdownDocument>;
31
- export declare const convertCommand: Command;
32
- //# sourceMappingURL=convert.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAqBlE,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAmEhG;AA8DD;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,gBAAgB,EAC7B,SAAS,EAAE,gBAAgB,EAC3B,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAQ3B;AAkBD,eAAO,MAAM,cAAc,SAqBvB,CAAC"}
@@ -1,168 +0,0 @@
1
- /**
2
- * convert command
3
- *
4
- * Reads a markdown file, ZIP/DBK container, or folder and exports to
5
- * supported formats: DOCX, PPTX, PDF, HTML, and container ZIP (.dbk).
6
- *
7
- * Wraps the same logic as squisq-cli's convert command, reusing the
8
- * underlying squisq libraries directly.
9
- */
10
- import { writeFile, mkdir, stat } from 'node:fs/promises';
11
- import { dirname, basename, extname, join, resolve } from 'node:path';
12
- import { Command } from 'commander';
13
- const ALL_FORMATS = ['docx', 'pptx', 'pdf', 'html', 'dbk'];
14
- function parseFormats(value) {
15
- const requested = value.split(',').map((s) => s.trim().toLowerCase());
16
- const valid = [];
17
- for (const r of requested) {
18
- if (ALL_FORMATS.includes(r)) {
19
- valid.push(r);
20
- }
21
- else {
22
- console.warn(`Unknown format "${r}" — skipping. Valid: ${ALL_FORMATS.join(', ')}`);
23
- }
24
- }
25
- if (valid.length === 0) {
26
- throw new Error(`No valid formats specified. Valid: ${ALL_FORMATS.join(', ')}`);
27
- }
28
- return valid;
29
- }
30
- export async function runConvert(inputPath, opts) {
31
- const resolvedInput = resolve(inputPath);
32
- const formats = opts.formats ? parseFormats(opts.formats) : [...ALL_FORMATS];
33
- const outputDir = opts.outputDir ? resolve(opts.outputDir) : dirname(resolvedInput);
34
- const inputBasename = basename(resolvedInput);
35
- const inputExt = extname(inputBasename);
36
- const baseName = inputExt ? inputBasename.slice(0, -inputExt.length) : inputBasename;
37
- await mkdir(outputDir, { recursive: true });
38
- // Validate theme
39
- if (opts.theme) {
40
- const { getAvailableThemes } = await import('@bendyline/squisq/schemas');
41
- const themes = getAvailableThemes();
42
- if (!themes.includes(opts.theme)) {
43
- throw new Error(`Unknown theme "${opts.theme}". Available: ${themes.join(', ')}`);
44
- }
45
- }
46
- // Validate transform
47
- if (opts.transform) {
48
- const { getTransformStyleIds } = await import('@bendyline/squisq/transform');
49
- const styles = getTransformStyleIds();
50
- if (!styles.includes(opts.transform)) {
51
- throw new Error(`Unknown transform style "${opts.transform}". Available: ${styles.join(', ')}`);
52
- }
53
- }
54
- console.error(`Reading: ${resolvedInput}`);
55
- const { readInput } = await import('@bendyline/squisq-cli/api');
56
- const result = await readInput(resolvedInput);
57
- const { container } = result;
58
- if (!result.markdownDoc) {
59
- throw new Error('Convert command requires a markdown document. JSON Doc input is not supported for convert — use the video command instead.');
60
- }
61
- // Apply transform if requested
62
- let exportMarkdownDoc = result.markdownDoc;
63
- if (opts.transform) {
64
- exportMarkdownDoc = await applyTransformToMarkdown(result.markdownDoc, container, opts.transform, opts.theme);
65
- console.error(` Applied transform: ${opts.transform}`);
66
- }
67
- const themeId = opts.theme;
68
- const outputFiles = [];
69
- for (const format of formats) {
70
- const outPath = join(outputDir, `${baseName}.${format}`);
71
- const buf = await exportToFormat(format, exportMarkdownDoc, container, baseName, themeId);
72
- await writeFile(outPath, buf);
73
- const info = await stat(outPath);
74
- outputFiles.push({ path: outPath, format, size: info.size });
75
- console.error(` ✓ ${outPath}`);
76
- }
77
- console.error('Done.');
78
- return { outputFiles };
79
- }
80
- async function exportToFormat(format, markdownDoc, container, baseName, themeId) {
81
- switch (format) {
82
- case 'docx': {
83
- const { markdownDocToDocx } = await import('@bendyline/squisq-formats/docx');
84
- const buf = await markdownDocToDocx(markdownDoc, { themeId });
85
- return Buffer.from(buf);
86
- }
87
- case 'pptx': {
88
- const { markdownDocToPptx } = await import('@bendyline/squisq-formats/pptx');
89
- const images = await collectContainerImages(container);
90
- const buf = await markdownDocToPptx(markdownDoc, { themeId, images });
91
- return Buffer.from(buf);
92
- }
93
- case 'pdf': {
94
- const { markdownDocToPdf } = await import('@bendyline/squisq-formats/pdf');
95
- const buf = await markdownDocToPdf(markdownDoc, { themeId });
96
- return Buffer.from(buf);
97
- }
98
- case 'html': {
99
- const { markdownToDoc } = await import('@bendyline/squisq/doc');
100
- const { docToHtml, collectImagePaths } = await import('@bendyline/squisq-formats/html');
101
- const { PLAYER_BUNDLE } = await import('@bendyline/squisq-react/standalone-source');
102
- const doc = markdownToDoc(markdownDoc);
103
- const imagePaths = collectImagePaths(doc);
104
- const images = new Map();
105
- for (const imgPath of imagePaths) {
106
- const data = await container.readFile(imgPath);
107
- if (data) {
108
- images.set(imgPath, data);
109
- }
110
- }
111
- return docToHtml(doc, {
112
- playerScript: PLAYER_BUNDLE,
113
- images,
114
- title: baseName,
115
- mode: 'static',
116
- themeId,
117
- });
118
- }
119
- case 'dbk': {
120
- const { containerToZip } = await import('@bendyline/squisq-formats/container');
121
- const blob = await containerToZip(container);
122
- const buf = await blob.arrayBuffer();
123
- return Buffer.from(buf);
124
- }
125
- }
126
- }
127
- /**
128
- * Apply a transform style to a MarkdownDocument.
129
- */
130
- export async function applyTransformToMarkdown(markdownDoc, container, transformStyle, themeId) {
131
- const { markdownToDoc, docToMarkdown } = await import('@bendyline/squisq/doc');
132
- const { applyTransform, extractDocImages } = await import('@bendyline/squisq/transform');
133
- const doc = markdownToDoc(markdownDoc);
134
- const images = extractDocImages(doc.blocks);
135
- const result = applyTransform(doc, transformStyle, { themeId, images });
136
- return docToMarkdown(result.doc);
137
- }
138
- async function collectContainerImages(container) {
139
- const images = new Map();
140
- const files = await container.listFiles();
141
- for (const file of files) {
142
- if (/\.(jpg|jpeg|png|gif|webp|svg|bmp|avif)$/i.test(file.path)) {
143
- const data = await container.readFile(file.path);
144
- if (data) {
145
- images.set(file.path, data);
146
- }
147
- }
148
- }
149
- return images;
150
- }
151
- export const convertCommand = new Command('convert')
152
- .description('Convert a markdown document to DOCX, PPTX, PDF, HTML, and DBK container formats')
153
- .argument('<input>', 'Path to .md file, .zip/.dbk container, or folder')
154
- .option('-o, --output-dir <dir>', 'Output directory (default: same as input)')
155
- .option('-f, --formats <list>', `Comma-separated formats to produce (default: all). Valid: ${ALL_FORMATS.join(', ')}`)
156
- .option('-t, --theme <id>', 'Squisq theme ID to apply (e.g., documentary, cinematic, bold)')
157
- .option('--transform <style>', 'Transform style to apply before export (e.g., documentary, magazine, minimal)')
158
- .action(async (inputPath, opts) => {
159
- try {
160
- await runConvert(inputPath, opts);
161
- }
162
- catch (err) {
163
- const message = err instanceof Error ? err.message : String(err);
164
- console.error(`Error: ${message}`);
165
- process.exitCode = 1;
166
- }
167
- });
168
- //# sourceMappingURL=convert.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/commands/convert.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const initCommand: Command;
3
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAuBpB,CAAC"}
@@ -1,23 +0,0 @@
1
- import { Command } from 'commander';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- export const initCommand = new Command('init')
5
- .description('Initialize a DocBlocks workspace in the current directory')
6
- .argument('[dir]', 'directory to initialize', '.')
7
- .action((dir) => {
8
- const targetDir = path.resolve(dir);
9
- const configDir = path.join(targetDir, '.docblocks');
10
- if (fs.existsSync(configDir)) {
11
- console.error('DocBlocks workspace already initialized in this directory.');
12
- process.exitCode = 1;
13
- return;
14
- }
15
- fs.mkdirSync(configDir, { recursive: true });
16
- const config = {
17
- name: path.basename(targetDir),
18
- version: '0.1.0',
19
- };
20
- fs.writeFileSync(path.join(configDir, 'config.json'), JSON.stringify(config, null, 2) + '\n');
21
- console.error(`Initialized DocBlocks workspace in ${targetDir}`);
22
- });
23
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,2DAA2D,CAAC;KACxE,QAAQ,CAAC,OAAO,EAAE,yBAAyB,EAAE,GAAG,CAAC;KACjD,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAErD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC5E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,OAAO,EAAE,OAAO;KACjB,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE9F,OAAO,CAAC,KAAK,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * mcp command — start the DocBlocks MCP server over stdio.
3
- *
4
- * Usage:
5
- * docblocks mcp
6
- *
7
- * For Claude Desktop, add to your config:
8
- * { "mcpServers": { "docblocks": { "command": "npx", "args": ["docblocks", "mcp"] } } }
9
- */
10
- import { Command } from 'commander';
11
- export declare const mcpCommand: Command;
12
- //# sourceMappingURL=mcp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,UAAU,SASnB,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * mcp command — start the DocBlocks MCP server over stdio.
3
- *
4
- * Usage:
5
- * docblocks mcp
6
- *
7
- * For Claude Desktop, add to your config:
8
- * { "mcpServers": { "docblocks": { "command": "npx", "args": ["docblocks", "mcp"] } } }
9
- */
10
- import { Command } from 'commander';
11
- export const mcpCommand = new Command('mcp')
12
- .description('Start an MCP server over stdio for AI-assisted document operations')
13
- .action(async () => {
14
- const { createMcpServer } = await import('../mcp/server.js');
15
- const { StdioServerTransport } = await import('@modelcontextprotocol/sdk/server/stdio.js');
16
- const server = createMcpServer();
17
- const transport = new StdioServerTransport();
18
- await server.connect(transport);
19
- });
20
- //# sourceMappingURL=mcp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAE3F,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * parse command — parse a markdown file and print its structure as JSON.
3
- */
4
- import { Command } from 'commander';
5
- export declare const parseCommand: Command;
6
- //# sourceMappingURL=parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,YAAY,SA8BrB,CAAC"}
@@ -1,38 +0,0 @@
1
- /**
2
- * parse command — parse a markdown file and print its structure as JSON.
3
- */
4
- import { readFile } from 'node:fs/promises';
5
- import { resolve } from 'node:path';
6
- import { Command } from 'commander';
7
- export const parseCommand = new Command('parse')
8
- .description('Parse a markdown file and print its structure as JSON')
9
- .argument('<input>', 'Path to a .md file')
10
- .action(async (inputPath) => {
11
- try {
12
- const resolvedInput = resolve(inputPath);
13
- const content = await readFile(resolvedInput, 'utf-8');
14
- const { parseMarkdown } = await import('@bendyline/squisq/markdown');
15
- const markdownDoc = parseMarkdown(content);
16
- // Compute summary stats
17
- const stats = {
18
- headingCount: 0,
19
- paragraphCount: 0,
20
- blockCount: markdownDoc.children?.length ?? 0,
21
- };
22
- if (markdownDoc.children) {
23
- for (const node of markdownDoc.children) {
24
- if (node.type === 'heading')
25
- stats.headingCount++;
26
- if (node.type === 'paragraph')
27
- stats.paragraphCount++;
28
- }
29
- }
30
- process.stdout.write(JSON.stringify({ stats, document: markdownDoc }, null, 2) + '\n');
31
- }
32
- catch (err) {
33
- const message = err instanceof Error ? err.message : String(err);
34
- console.error(`Error: ${message}`);
35
- process.exitCode = 1;
36
- }
37
- });
38
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/commands/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,uDAAuD,CAAC;KACpE,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,EAAE;IAClC,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QAE3C,wBAAwB;QACxB,MAAM,KAAK,GAAG;YACZ,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,UAAU,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;SAC9C,CAAC;QAEF,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,YAAY,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,28 +0,0 @@
1
- import { Command } from 'commander';
2
- import { type Server } from 'node:http';
3
- export interface ServeOptions {
4
- port: number;
5
- dir: string;
6
- theme?: string;
7
- }
8
- export interface PreviewServer {
9
- server: Server;
10
- root: string;
11
- url: string;
12
- }
13
- export declare function startPreviewServer(opts: ServeOptions): Promise<PreviewServer>;
14
- export declare const serveCommand: Command;
15
- type ServeTarget = {
16
- kind: 'file';
17
- filePath: string;
18
- markdown: boolean;
19
- } | {
20
- kind: 'missing';
21
- } | {
22
- kind: 'forbidden';
23
- } | {
24
- kind: 'bad-request';
25
- };
26
- export declare function resolveServeTarget(root: string, requestUrl: string): Promise<ServeTarget>;
27
- export {};
28
- //# sourceMappingURL=serve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAsC,KAAK,MAAM,EAAuB,MAAM,WAAW,CAAC;AAKjG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAyBnF;AAED,eAAO,MAAM,YAAY,SAkBrB,CAAC;AA4CL,KAAK,WAAW,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAoB/F"}