pixotope-documentalist 1.0.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 (58) hide show
  1. package/README.md +189 -0
  2. package/dist/config.d.ts +4 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +58 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +75 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/models/index.d.ts +64 -0
  11. package/dist/models/index.d.ts.map +1 -0
  12. package/dist/models/index.js +34 -0
  13. package/dist/models/index.js.map +1 -0
  14. package/dist/parser/commentExtractor.d.ts +12 -0
  15. package/dist/parser/commentExtractor.d.ts.map +1 -0
  16. package/dist/parser/commentExtractor.js +132 -0
  17. package/dist/parser/commentExtractor.js.map +1 -0
  18. package/dist/parser/fileScanner.d.ts +2 -0
  19. package/dist/parser/fileScanner.d.ts.map +1 -0
  20. package/dist/parser/fileScanner.js +48 -0
  21. package/dist/parser/fileScanner.js.map +1 -0
  22. package/dist/parser/index.d.ts +4 -0
  23. package/dist/parser/index.d.ts.map +1 -0
  24. package/dist/parser/index.js +10 -0
  25. package/dist/parser/index.js.map +1 -0
  26. package/dist/parser/tagParser.d.ts +9 -0
  27. package/dist/parser/tagParser.d.ts.map +1 -0
  28. package/dist/parser/tagParser.js +235 -0
  29. package/dist/parser/tagParser.js.map +1 -0
  30. package/dist/pipeline.d.ts +31 -0
  31. package/dist/pipeline.d.ts.map +1 -0
  32. package/dist/pipeline.js +147 -0
  33. package/dist/pipeline.js.map +1 -0
  34. package/dist/publisher/confluenceApi.d.ts +33 -0
  35. package/dist/publisher/confluenceApi.d.ts.map +1 -0
  36. package/dist/publisher/confluenceApi.js +131 -0
  37. package/dist/publisher/confluenceApi.js.map +1 -0
  38. package/dist/publisher/diff.d.ts +6 -0
  39. package/dist/publisher/diff.d.ts.map +1 -0
  40. package/dist/publisher/diff.js +54 -0
  41. package/dist/publisher/diff.js.map +1 -0
  42. package/dist/publisher/index.d.ts +3 -0
  43. package/dist/publisher/index.d.ts.map +1 -0
  44. package/dist/publisher/index.js +9 -0
  45. package/dist/publisher/index.js.map +1 -0
  46. package/dist/renderer/components.d.ts +9 -0
  47. package/dist/renderer/components.d.ts.map +1 -0
  48. package/dist/renderer/components.js +161 -0
  49. package/dist/renderer/components.js.map +1 -0
  50. package/dist/renderer/confluenceHtml.d.ts +6 -0
  51. package/dist/renderer/confluenceHtml.d.ts.map +1 -0
  52. package/dist/renderer/confluenceHtml.js +128 -0
  53. package/dist/renderer/confluenceHtml.js.map +1 -0
  54. package/dist/renderer/index.d.ts +3 -0
  55. package/dist/renderer/index.d.ts.map +1 -0
  56. package/dist/renderer/index.js +14 -0
  57. package/dist/renderer/index.js.map +1 -0
  58. package/package.json +42 -0
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfluenceClient = void 0;
7
+ exports.createClientFromEnv = createClientFromEnv;
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const diff_1 = require("./diff");
10
+ class ConfluenceClient {
11
+ constructor(baseUrl, username, token) {
12
+ const credentials = Buffer.from(`${username}:${token}`).toString("base64");
13
+ this.client = axios_1.default.create({
14
+ baseURL: baseUrl,
15
+ headers: {
16
+ Accept: "application/json",
17
+ "Content-Type": "application/json",
18
+ Authorization: `Basic ${credentials}`,
19
+ },
20
+ });
21
+ }
22
+ /**
23
+ * Get the current page version number.
24
+ */
25
+ async getPageVersion(pageId) {
26
+ const response = await this.client.get(`/${pageId}/version`);
27
+ const results = response.data.results;
28
+ if (!Array.isArray(results) || results.length === 0) {
29
+ throw new Error(`Failed to get version for page ${pageId}`);
30
+ }
31
+ return results[0].number;
32
+ }
33
+ /**
34
+ * Get the current page body content (storage format).
35
+ */
36
+ async getPageContent(pageId) {
37
+ const response = await this.client.get(`/${pageId}`, {
38
+ params: { expand: "body.storage.value" },
39
+ });
40
+ return response.data?.body?.storage?.value || "";
41
+ }
42
+ /**
43
+ * Publish content to a Confluence page.
44
+ * Only updates if content has actually changed.
45
+ */
46
+ async publish(pageId, title, html, options = {}) {
47
+ try {
48
+ // Check if content changed
49
+ if (!options.force) {
50
+ const currentContent = await this.getPageContent(pageId);
51
+ if (!(0, diff_1.hasContentChanged)(currentContent, html)) {
52
+ return {
53
+ success: true,
54
+ message: "No changes detected, skipped publishing",
55
+ pageId,
56
+ };
57
+ }
58
+ }
59
+ // Get current version
60
+ const currentVersion = await this.getPageVersion(pageId);
61
+ const newVersion = currentVersion + 1;
62
+ // Update page
63
+ const response = await this.client.put(`/${pageId}`, {
64
+ version: { number: newVersion },
65
+ title,
66
+ type: "page",
67
+ status: "current",
68
+ body: {
69
+ storage: {
70
+ value: html,
71
+ representation: "storage",
72
+ },
73
+ },
74
+ });
75
+ if (response.data?.ancestors) {
76
+ return {
77
+ success: true,
78
+ message: `Published successfully (version ${newVersion})`,
79
+ pageId,
80
+ };
81
+ }
82
+ return {
83
+ success: false,
84
+ message: `Unexpected response: ${JSON.stringify(response.data, null, 2)}`,
85
+ pageId,
86
+ };
87
+ }
88
+ catch (error) {
89
+ const msg = error?.response?.data
90
+ ? JSON.stringify(error.response.data, null, 2)
91
+ : error.message;
92
+ return {
93
+ success: false,
94
+ message: `Failed to publish: ${msg}`,
95
+ pageId,
96
+ };
97
+ }
98
+ }
99
+ /**
100
+ * Get a diff summary of what would change.
101
+ */
102
+ async diff(pageId, newHtml) {
103
+ try {
104
+ const currentContent = await this.getPageContent(pageId);
105
+ const changed = (0, diff_1.hasContentChanged)(currentContent, newHtml);
106
+ if (!changed) {
107
+ return "No changes detected.";
108
+ }
109
+ return "Content has changed. Publish to update the page.";
110
+ }
111
+ catch (error) {
112
+ return `Error checking diff: ${error.message}`;
113
+ }
114
+ }
115
+ }
116
+ exports.ConfluenceClient = ConfluenceClient;
117
+ /**
118
+ * Create a ConfluenceClient from environment variables.
119
+ */
120
+ function createClientFromEnv(baseUrl) {
121
+ const username = process.env.CONFLUENCE_USER;
122
+ const token = process.env.CONFLUENCE_TOKEN;
123
+ if (!username) {
124
+ throw new Error("CONFLUENCE_USER environment variable is not set");
125
+ }
126
+ if (!token) {
127
+ throw new Error("CONFLUENCE_TOKEN environment variable is not set");
128
+ }
129
+ return new ConfluenceClient(baseUrl, username, token);
130
+ }
131
+ //# sourceMappingURL=confluenceApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluenceApi.js","sourceRoot":"","sources":["../../src/publisher/confluenceApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Compare two HTML strings by their text content.
3
+ * Returns true if the content has changed (i.e., they are different).
4
+ */
5
+ export declare function hasContentChanged(currentHtml: string, newHtml: string): boolean;
6
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/publisher/diff.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/E"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.hasContentChanged = hasContentChanged;
37
+ const cheerio = __importStar(require("cheerio"));
38
+ /**
39
+ * Compare two HTML strings by their text content.
40
+ * Returns true if the content has changed (i.e., they are different).
41
+ */
42
+ function hasContentChanged(currentHtml, newHtml) {
43
+ const currentText = extractText(currentHtml);
44
+ const newText = extractText(newHtml);
45
+ return currentText !== newText;
46
+ }
47
+ /**
48
+ * Strip HTML tags and normalize whitespace to get plain text for comparison.
49
+ */
50
+ function extractText(html) {
51
+ const $ = cheerio.load(html);
52
+ return $.text().replace(/\s+/g, " ").trim();
53
+ }
54
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/publisher/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,8CAIC;AAVD,iDAAmC;AAEnC;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,WAAmB,EAAE,OAAe;IACpE,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,OAAO,WAAW,KAAK,OAAO,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConfluenceClient, createClientFromEnv, PublishResult } from "./confluenceApi";
2
+ export { hasContentChanged } from "./diff";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasContentChanged = exports.createClientFromEnv = exports.ConfluenceClient = void 0;
4
+ var confluenceApi_1 = require("./confluenceApi");
5
+ Object.defineProperty(exports, "ConfluenceClient", { enumerable: true, get: function () { return confluenceApi_1.ConfluenceClient; } });
6
+ Object.defineProperty(exports, "createClientFromEnv", { enumerable: true, get: function () { return confluenceApi_1.createClientFromEnv; } });
7
+ var diff_1 = require("./diff");
8
+ Object.defineProperty(exports, "hasContentChanged", { enumerable: true, get: function () { return diff_1.hasContentChanged; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuF;AAA9E,iHAAA,gBAAgB,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAC9C,+BAA2C;AAAlC,yGAAA,iBAAiB,OAAA"}
@@ -0,0 +1,9 @@
1
+ import { Param, Value } from "../models";
2
+ export declare function expandMacro(title: string, body: string): string;
3
+ export declare function statusBadge(label: string, color: string): string;
4
+ export declare function typeBadge(typeName: string): string;
5
+ export declare function warningPanel(text: string): string;
6
+ export declare function codeBlock(code: string, language?: string): string;
7
+ export declare function paramsTable(params: Param[], title: string): string;
8
+ export declare function renderValue(value: Value, depth?: number): string;
9
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/renderer/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAgBzC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIlD;AAmBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe,GAAG,MAAM,CAOzE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAuDlE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAiCnE"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.expandMacro = expandMacro;
4
+ exports.statusBadge = statusBadge;
5
+ exports.typeBadge = typeBadge;
6
+ exports.warningPanel = warningPanel;
7
+ exports.codeBlock = codeBlock;
8
+ exports.paramsTable = paramsTable;
9
+ exports.renderValue = renderValue;
10
+ /**
11
+ * Confluence Storage Format component generators.
12
+ * These produce XML/HTML macros compatible with Confluence's storage format.
13
+ */
14
+ // Generate a unique-ish macro ID (Confluence doesn't strictly require uniqueness)
15
+ function macroId() {
16
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
17
+ const r = (Math.random() * 16) | 0;
18
+ const v = c === "x" ? r : (r & 0x3) | 0x8;
19
+ return v.toString(16);
20
+ });
21
+ }
22
+ function expandMacro(title, body) {
23
+ return [
24
+ `<ac:structured-macro ac:name="expand" ac:schema-version="1" ac:macro-id="${macroId()}">`,
25
+ `<ac:parameter ac:name="title">${escapeHtml(title)}</ac:parameter>`,
26
+ `<ac:rich-text-body>${body}</ac:rich-text-body>`,
27
+ `</ac:structured-macro>`,
28
+ ].join("");
29
+ }
30
+ function statusBadge(label, color) {
31
+ return [
32
+ `<ac:structured-macro ac:name="status" ac:schema-version="1" ac:macro-id="${macroId()}">`,
33
+ `<ac:parameter ac:name="colour">${color}</ac:parameter>`,
34
+ `<ac:parameter ac:name="title">${escapeHtml(label)}</ac:parameter>`,
35
+ `</ac:structured-macro>`,
36
+ ].join("");
37
+ }
38
+ function typeBadge(typeName) {
39
+ const color = getTypeColor(typeName.trim().toLowerCase());
40
+ if (!color)
41
+ return "";
42
+ return " " + statusBadge(typeName.trim(), color);
43
+ }
44
+ function getTypeColor(type) {
45
+ // Handle array suffix
46
+ const isArray = type.endsWith(" array") || type.endsWith("[]");
47
+ const baseType = type.replace(/ array$/, "").replace(/\[\]$/, "");
48
+ if (["map", "object", "record"].includes(baseType))
49
+ return "Blue";
50
+ if (["bool", "boolean"].includes(baseType))
51
+ return "Red";
52
+ if (["int", "integer", "float", "number", "double"].includes(baseType))
53
+ return "Yellow";
54
+ if (["string", "text", "enum"].includes(baseType))
55
+ return "Green";
56
+ if (["optional", "default"].includes(baseType))
57
+ return "Purple";
58
+ if (isArray)
59
+ return "Blue";
60
+ // Unknown types still get a grey badge
61
+ return "Grey";
62
+ }
63
+ function warningPanel(text) {
64
+ return [
65
+ `<ac:structured-macro ac:name="note" ac:schema-version="1" ac:macro-id="${macroId()}">`,
66
+ `<ac:rich-text-body><p>${escapeHtml(text)}</p></ac:rich-text-body>`,
67
+ `</ac:structured-macro>`,
68
+ ].join("");
69
+ }
70
+ function codeBlock(code, language = "json") {
71
+ return [
72
+ `<ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="${macroId()}">`,
73
+ `<ac:parameter ac:name="language">${language}</ac:parameter>`,
74
+ `<ac:plain-text-body><![CDATA[${code}]]></ac:plain-text-body>`,
75
+ `</ac:structured-macro>`,
76
+ ].join("");
77
+ }
78
+ function paramsTable(params, title) {
79
+ if (params.length === 0)
80
+ return "";
81
+ const lines = [];
82
+ lines.push(`<b>${escapeHtml(title)}</b>`);
83
+ // Calculate column widths
84
+ let maxNameLen = 0;
85
+ let maxOptionLen = 0;
86
+ let hasDescription = false;
87
+ for (const p of params) {
88
+ if (p.name.length > maxNameLen)
89
+ maxNameLen = p.name.length;
90
+ if (p.type.length > maxOptionLen)
91
+ maxOptionLen = p.type.length;
92
+ if (p.description)
93
+ hasDescription = true;
94
+ }
95
+ const nameWidth = Math.max(maxNameLen * 11 + 10, 80);
96
+ const optionWidth = maxOptionLen > 0 ? maxOptionLen * 5 + 10 : 0;
97
+ let colgroup = `<colgroup><col style="width:${nameWidth}px;"/>`;
98
+ if (optionWidth > 0)
99
+ colgroup += `<col style="width:${optionWidth}px;"/>`;
100
+ if (hasDescription)
101
+ colgroup += `<col style="width:auto;"/>`;
102
+ colgroup += `</colgroup>`;
103
+ lines.push(`<table data-layout="default">${colgroup}<tbody>`);
104
+ for (const p of params) {
105
+ lines.push("<tr>");
106
+ // Name column
107
+ let nameDisplay = escapeHtml(p.name);
108
+ if (p.optional) {
109
+ nameDisplay += typeBadge("optional");
110
+ }
111
+ if (p.default !== undefined) {
112
+ nameDisplay += ` <i>(default: ${escapeHtml(p.default)})</i>`;
113
+ }
114
+ lines.push(`<td>${nameDisplay}</td>`);
115
+ // Type badge column
116
+ if (optionWidth > 0) {
117
+ lines.push(`<td>${p.type ? typeBadge(p.type) : ""}</td>`);
118
+ }
119
+ // Description column
120
+ if (hasDescription) {
121
+ lines.push(`<td>${escapeHtml(p.description)}</td>`);
122
+ }
123
+ lines.push("</tr>");
124
+ }
125
+ lines.push("</tbody></table>");
126
+ return lines.join("");
127
+ }
128
+ function renderValue(value, depth = 0) {
129
+ const lines = [];
130
+ const bullets = ["•", "◦", "▪"];
131
+ const bullet = bullets[depth % 3];
132
+ // Invisible spaces for indentation
133
+ const spaces = depth > 0
134
+ ? `<span style="color: rgb(255,255,255);">${"____".repeat(depth)}</span>`
135
+ : "";
136
+ let line = `${spaces}${bullet} ${escapeHtml(value.name)}`;
137
+ // Type badges
138
+ if (value.type) {
139
+ for (const t of value.type.split("|")) {
140
+ line += typeBadge(t.trim());
141
+ }
142
+ }
143
+ // Description
144
+ if (value.description) {
145
+ line += `<br/><i>${spaces}<span style="color: rgb(151,160,175);">${escapeHtml(value.description)}</span></i>`;
146
+ }
147
+ lines.push(line);
148
+ // Render children
149
+ for (const child of value.children) {
150
+ lines.push(renderValue(child, depth + 1));
151
+ }
152
+ return lines.join("<br/>");
153
+ }
154
+ function escapeHtml(text) {
155
+ return text
156
+ .replace(/&/g, "&amp;")
157
+ .replace(/</g, "&lt;")
158
+ .replace(/>/g, "&gt;")
159
+ .replace(/"/g, "&quot;");
160
+ }
161
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/renderer/components.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Document } from "../models";
2
+ /**
3
+ * Render a Document into Confluence Storage Format HTML.
4
+ */
5
+ export declare function renderDocument(doc: Document): string;
6
+ //# sourceMappingURL=confluenceHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluenceHtml.d.ts","sourceRoot":"","sources":["../../src/renderer/confluenceHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA4B,MAAM,WAAW,CAAC;AAU/D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAQpD"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderDocument = renderDocument;
4
+ const components_1 = require("./components");
5
+ /**
6
+ * Render a Document into Confluence Storage Format HTML.
7
+ */
8
+ function renderDocument(doc) {
9
+ const lines = [];
10
+ for (const group of doc.groups) {
11
+ lines.push(renderGroup(group));
12
+ }
13
+ return lines.join("\n");
14
+ }
15
+ function renderGroup(group) {
16
+ const lines = [];
17
+ // Group header
18
+ if (group.header) {
19
+ lines.push(`<h2>${escapeHtml(group.header)}</h2>`);
20
+ }
21
+ // Group description
22
+ if (group.description) {
23
+ lines.push(`<p>${escapeHtml(group.description)}</p>`);
24
+ }
25
+ // Endpoints
26
+ for (const endpoint of group.endpoints) {
27
+ lines.push(renderEndpoint(endpoint));
28
+ }
29
+ // Values
30
+ for (const value of group.values) {
31
+ lines.push(`<p>${(0, components_1.renderValue)(value)}</p>`);
32
+ }
33
+ return lines.join("\n");
34
+ }
35
+ function renderEndpoint(endpoint) {
36
+ const bodyParts = [];
37
+ // Heading inside expand
38
+ bodyParts.push(`<h4>${escapeHtml(endpoint.name)}</h4>`);
39
+ // Deprecated notice
40
+ if (endpoint.deprecated) {
41
+ bodyParts.push((0, components_1.warningPanel)(`Deprecated: ${endpoint.deprecated}`));
42
+ }
43
+ // Warnings
44
+ for (const warning of endpoint.warnings) {
45
+ bodyParts.push((0, components_1.warningPanel)(warning));
46
+ }
47
+ // Description
48
+ if (endpoint.description) {
49
+ bodyParts.push(`<p>${escapeHtml(endpoint.description)}</p>`);
50
+ }
51
+ // Since badge
52
+ if (endpoint.since) {
53
+ bodyParts.push(`<p><i>Since: ${escapeHtml(endpoint.since)}</i></p>`);
54
+ }
55
+ // Params table
56
+ if (endpoint.params.length > 0) {
57
+ bodyParts.push((0, components_1.paramsTable)(endpoint.params, "Params"));
58
+ }
59
+ else {
60
+ bodyParts.push("<b>No params.</b>");
61
+ }
62
+ // Returns table
63
+ if (endpoint.returns.length > 0) {
64
+ if (endpoint.params.length === 0) {
65
+ bodyParts.push("<br/><br/>");
66
+ }
67
+ bodyParts.push((0, components_1.paramsTable)(endpoint.returns, "Returns"));
68
+ }
69
+ // Examples
70
+ if (endpoint.examples.length > 0) {
71
+ bodyParts.push(renderExamples(endpoint.examples));
72
+ }
73
+ const body = bodyParts.join("\n");
74
+ // Kind badge in title
75
+ const kindLabel = endpoint.kind !== "call" ? ` [${endpoint.kind.toUpperCase()}]` : "";
76
+ const title = endpoint.name + kindLabel;
77
+ return (0, components_1.expandMacro)(title, body);
78
+ }
79
+ function renderExamples(examples) {
80
+ const lines = [];
81
+ lines.push(`<table data-layout="default"><colgroup><col style="width: 680px;" /></colgroup><tbody>`);
82
+ for (let i = 0; i < examples.length; i++) {
83
+ const example = examples[i];
84
+ lines.push("<tr><td>");
85
+ const exTitle = "Example" +
86
+ (examples.length > 1 ? ` ${i + 1}` : "") +
87
+ (example.description ? ` - ${example.description}` : "");
88
+ const exBodyParts = [];
89
+ // Request messages
90
+ if (example.request.length > 0) {
91
+ exBodyParts.push(`<p><b>Request</b> <i>(you send)</i></p>`);
92
+ for (const msg of example.request) {
93
+ exBodyParts.push(formatJsonMessage(msg));
94
+ }
95
+ }
96
+ // Response messages
97
+ if (example.response.length > 0) {
98
+ exBodyParts.push(`<p><b>Response</b> <i>(you receive)</i></p>`);
99
+ for (const msg of example.response) {
100
+ exBodyParts.push(formatJsonMessage(msg));
101
+ }
102
+ }
103
+ lines.push((0, components_1.expandMacro)(exTitle, exBodyParts.join("\n")));
104
+ lines.push("</td></tr>");
105
+ }
106
+ lines.push("</tbody></table>");
107
+ return lines.join("\n");
108
+ }
109
+ function formatJsonMessage(msg) {
110
+ // Try to pretty-print JSON
111
+ try {
112
+ const parsed = JSON.parse(msg);
113
+ const pretty = JSON.stringify(parsed, null, 2);
114
+ return (0, components_1.codeBlock)(pretty, "json");
115
+ }
116
+ catch {
117
+ // Not valid JSON — render as-is in a code block
118
+ return (0, components_1.codeBlock)(msg, "none");
119
+ }
120
+ }
121
+ function escapeHtml(text) {
122
+ return text
123
+ .replace(/&/g, "&amp;")
124
+ .replace(/</g, "&lt;")
125
+ .replace(/>/g, "&gt;")
126
+ .replace(/"/g, "&quot;");
127
+ }
128
+ //# sourceMappingURL=confluenceHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confluenceHtml.js","sourceRoot":"","sources":["../../src/renderer/confluenceHtml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { renderDocument } from "./confluenceHtml";
2
+ export { expandMacro, statusBadge, typeBadge, warningPanel, codeBlock, paramsTable, renderValue, } from "./components";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,GACZ,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderValue = exports.paramsTable = exports.codeBlock = exports.warningPanel = exports.typeBadge = exports.statusBadge = exports.expandMacro = exports.renderDocument = void 0;
4
+ var confluenceHtml_1 = require("./confluenceHtml");
5
+ Object.defineProperty(exports, "renderDocument", { enumerable: true, get: function () { return confluenceHtml_1.renderDocument; } });
6
+ var components_1 = require("./components");
7
+ Object.defineProperty(exports, "expandMacro", { enumerable: true, get: function () { return components_1.expandMacro; } });
8
+ Object.defineProperty(exports, "statusBadge", { enumerable: true, get: function () { return components_1.statusBadge; } });
9
+ Object.defineProperty(exports, "typeBadge", { enumerable: true, get: function () { return components_1.typeBadge; } });
10
+ Object.defineProperty(exports, "warningPanel", { enumerable: true, get: function () { return components_1.warningPanel; } });
11
+ Object.defineProperty(exports, "codeBlock", { enumerable: true, get: function () { return components_1.codeBlock; } });
12
+ Object.defineProperty(exports, "paramsTable", { enumerable: true, get: function () { return components_1.paramsTable; } });
13
+ Object.defineProperty(exports, "renderValue", { enumerable: true, get: function () { return components_1.renderValue; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,2CAQsB;AAPpB,yGAAA,WAAW,OAAA;AACX,yGAAA,WAAW,OAAA;AACX,uGAAA,SAAS,OAAA;AACT,0GAAA,YAAY,OAAA;AACZ,uGAAA,SAAS,OAAA;AACT,yGAAA,WAAW,OAAA;AACX,yGAAA,WAAW,OAAA"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "pixotope-documentalist",
3
+ "version": "1.0.0",
4
+ "description": "Parses JSDoc-style API documentation comments from source files and publishes to Confluence",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "pixotope-documentalist": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "ts-node src/index.ts",
16
+ "test": "vitest run",
17
+ "test:watch": "vitest",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [
21
+ "pixotope",
22
+ "documentation",
23
+ "confluence",
24
+ "api-docs"
25
+ ],
26
+ "author": "Pixotope",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "axios": "^1.7.9",
30
+ "cheerio": "^1.0.0",
31
+ "commander": "^12.1.0",
32
+ "dotenv": "^16.4.7",
33
+ "glob": "^10.4.5",
34
+ "yaml": "^2.6.1"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.17.12",
38
+ "ts-node": "^10.9.2",
39
+ "typescript": "^5.7.3",
40
+ "vitest": "^1.6.1"
41
+ }
42
+ }