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.
- package/README.md +189 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +58 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/models/index.d.ts +64 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +34 -0
- package/dist/models/index.js.map +1 -0
- package/dist/parser/commentExtractor.d.ts +12 -0
- package/dist/parser/commentExtractor.d.ts.map +1 -0
- package/dist/parser/commentExtractor.js +132 -0
- package/dist/parser/commentExtractor.js.map +1 -0
- package/dist/parser/fileScanner.d.ts +2 -0
- package/dist/parser/fileScanner.d.ts.map +1 -0
- package/dist/parser/fileScanner.js +48 -0
- package/dist/parser/fileScanner.js.map +1 -0
- package/dist/parser/index.d.ts +4 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +10 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/tagParser.d.ts +9 -0
- package/dist/parser/tagParser.d.ts.map +1 -0
- package/dist/parser/tagParser.js +235 -0
- package/dist/parser/tagParser.js.map +1 -0
- package/dist/pipeline.d.ts +31 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +147 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/publisher/confluenceApi.d.ts +33 -0
- package/dist/publisher/confluenceApi.d.ts.map +1 -0
- package/dist/publisher/confluenceApi.js +131 -0
- package/dist/publisher/confluenceApi.js.map +1 -0
- package/dist/publisher/diff.d.ts +6 -0
- package/dist/publisher/diff.d.ts.map +1 -0
- package/dist/publisher/diff.js +54 -0
- package/dist/publisher/diff.js.map +1 -0
- package/dist/publisher/index.d.ts +3 -0
- package/dist/publisher/index.d.ts.map +1 -0
- package/dist/publisher/index.js +9 -0
- package/dist/publisher/index.js.map +1 -0
- package/dist/renderer/components.d.ts +9 -0
- package/dist/renderer/components.d.ts.map +1 -0
- package/dist/renderer/components.js +161 -0
- package/dist/renderer/components.js.map +1 -0
- package/dist/renderer/confluenceHtml.d.ts +6 -0
- package/dist/renderer/confluenceHtml.d.ts.map +1 -0
- package/dist/renderer/confluenceHtml.js +128 -0
- package/dist/renderer/confluenceHtml.js.map +1 -0
- package/dist/renderer/index.d.ts +3 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +14 -0
- package/dist/renderer/index.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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, "&")
|
|
157
|
+
.replace(/</g, "<")
|
|
158
|
+
.replace(/>/g, ">")
|
|
159
|
+
.replace(/"/g, """);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/renderer/components.ts"],"names":[],"mappings":";;AAgBA,kCAOC;AAED,kCAOC;AAED,8BAIC;AAmBD,oCAMC;AAED,8BAOC;AAED,kCAuDC;AAED,kCAiCC;AAlKD;;;GAGG;AAEH,kFAAkF;AAClF,SAAS,OAAO;IACd,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAY;IACrD,OAAO;QACL,4EAA4E,OAAO,EAAE,IAAI;QACzF,iCAAiC,UAAU,CAAC,KAAK,CAAC,iBAAiB;QACnE,sBAAsB,IAAI,sBAAsB;QAChD,wBAAwB;KACzB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,KAAa;IACtD,OAAO;QACL,4EAA4E,OAAO,EAAE,IAAI;QACzF,kCAAkC,KAAK,iBAAiB;QACxD,iCAAiC,UAAU,CAAC,KAAK,CAAC,iBAAiB;QACnE,wBAAwB;KACzB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,SAAS,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,sBAAsB;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAClE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAClE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEhE,IAAI,OAAO;QAAE,OAAO,MAAM,CAAC;IAE3B,uCAAuC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO;QACL,0EAA0E,OAAO,EAAE,IAAI;QACvF,yBAAyB,UAAU,CAAC,IAAI,CAAC,0BAA0B;QACnE,wBAAwB;KACzB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,SAAS,CAAC,IAAY,EAAE,WAAmB,MAAM;IAC/D,OAAO;QACL,0EAA0E,OAAO,EAAE,IAAI;QACvF,oCAAoC,QAAQ,iBAAiB;QAC7D,gCAAgC,IAAI,0BAA0B;QAC9D,wBAAwB;KACzB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,WAAW,CAAC,MAAe,EAAE,KAAa;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE1C,0BAA0B;IAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU;YAAE,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY;YAAE,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/D,IAAI,CAAC,CAAC,WAAW;YAAE,cAAc,GAAG,IAAI,CAAC;IAC3C,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,IAAI,QAAQ,GAAG,+BAA+B,SAAS,QAAQ,CAAC;IAChE,IAAI,WAAW,GAAG,CAAC;QAAE,QAAQ,IAAI,qBAAqB,WAAW,QAAQ,CAAC;IAC1E,IAAI,cAAc;QAAE,QAAQ,IAAI,4BAA4B,CAAC;IAC7D,QAAQ,IAAI,aAAa,CAAC;IAE1B,KAAK,CAAC,IAAI,CAAC,gCAAgC,QAAQ,SAAS,CAAC,CAAC;IAE9D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,cAAc;QACd,IAAI,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACf,WAAW,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5B,WAAW,IAAI,iBAAiB,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,OAAO,CAAC,CAAC;QAEtC,oBAAoB;QACpB,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAED,qBAAqB;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,WAAW,CAAC,KAAY,EAAE,QAAgB,CAAC;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAElC,mCAAmC;IACnC,MAAM,MAAM,GACV,KAAK,GAAG,CAAC;QACP,CAAC,CAAC,0CAA0C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS;QACzE,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IAE1D,cAAc;IACd,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,cAAc;IACd,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,IAAI,WAAW,MAAM,0CAA0C,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,kBAAkB;IAClB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -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, "&")
|
|
124
|
+
.replace(/</g, "<")
|
|
125
|
+
.replace(/>/g, ">")
|
|
126
|
+
.replace(/"/g, """);
|
|
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 @@
|
|
|
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
|
+
}
|