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,48 @@
|
|
|
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.scanPath = scanPath;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const SUPPORTED_EXTENSIONS = new Set([
|
|
10
|
+
".ts", ".tsx", ".js", ".jsx",
|
|
11
|
+
".py",
|
|
12
|
+
".h", ".cpp", ".hpp",
|
|
13
|
+
]);
|
|
14
|
+
function scanPath(filePath) {
|
|
15
|
+
const resolved = path_1.default.resolve(filePath);
|
|
16
|
+
if (!fs_1.default.existsSync(resolved)) {
|
|
17
|
+
throw new Error(`Path not found: ${resolved}`);
|
|
18
|
+
}
|
|
19
|
+
const stat = fs_1.default.statSync(resolved);
|
|
20
|
+
if (stat.isFile()) {
|
|
21
|
+
return isSupportedFile(resolved) ? [resolved] : [];
|
|
22
|
+
}
|
|
23
|
+
if (stat.isDirectory()) {
|
|
24
|
+
return scanDirectory(resolved);
|
|
25
|
+
}
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
function scanDirectory(dirPath) {
|
|
29
|
+
const results = [];
|
|
30
|
+
const entries = fs_1.default.readdirSync(dirPath, { withFileTypes: true });
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
const fullPath = path_1.default.join(dirPath, entry.name);
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
// Skip node_modules and hidden dirs
|
|
35
|
+
if (entry.name === "node_modules" || entry.name.startsWith("."))
|
|
36
|
+
continue;
|
|
37
|
+
results.push(...scanDirectory(fullPath));
|
|
38
|
+
}
|
|
39
|
+
else if (entry.isFile() && isSupportedFile(fullPath)) {
|
|
40
|
+
results.push(fullPath);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return results;
|
|
44
|
+
}
|
|
45
|
+
function isSupportedFile(filePath) {
|
|
46
|
+
return SUPPORTED_EXTENSIONS.has(path_1.default.extname(filePath).toLowerCase());
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=fileScanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileScanner.js","sourceRoot":"","sources":["../../src/parser/fileScanner.ts"],"names":[],"mappings":";;;;;AASA,4BAkBC;AA3BD,4CAAoB;AACpB,gDAAwB;AAExB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAC5B,KAAK;IACL,IAAI,EAAE,MAAM,EAAE,MAAM;CACrB,CAAC,CAAC;AAEH,SAAgB,QAAQ,CAAC,QAAgB;IACvC,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,YAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,oCAAoC;YACpC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC1E,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,oBAAoB,CAAC,GAAG,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blocksToDocument = exports.extractDocBlocks = exports.scanPath = void 0;
|
|
4
|
+
var fileScanner_1 = require("./fileScanner");
|
|
5
|
+
Object.defineProperty(exports, "scanPath", { enumerable: true, get: function () { return fileScanner_1.scanPath; } });
|
|
6
|
+
var commentExtractor_1 = require("./commentExtractor");
|
|
7
|
+
Object.defineProperty(exports, "extractDocBlocks", { enumerable: true, get: function () { return commentExtractor_1.extractDocBlocks; } });
|
|
8
|
+
var tagParser_1 = require("./tagParser");
|
|
9
|
+
Object.defineProperty(exports, "blocksToDocument", { enumerable: true, get: function () { return tagParser_1.blocksToDocument; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,uDAAmE;AAA1D,oHAAA,gBAAgB,OAAA;AACzB,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Document } from "../models";
|
|
2
|
+
import { RawDocBlock } from "./commentExtractor";
|
|
3
|
+
/**
|
|
4
|
+
* Convert a set of doc blocks into a Document.
|
|
5
|
+
* Each block with @api becomes an endpoint.
|
|
6
|
+
* @group tags create new groups; endpoints after a @group belong to it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function blocksToDocument(blocks: RawDocBlock[], title?: string): Document;
|
|
9
|
+
//# sourceMappingURL=tagParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagParser.d.ts","sourceRoot":"","sources":["../../src/parser/tagParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,QAAQ,EAIT,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAuKjD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,QAAQ,CAyFpF"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.blocksToDocument = blocksToDocument;
|
|
4
|
+
const models_1 = require("../models");
|
|
5
|
+
/**
|
|
6
|
+
* Parse raw lines from a doc block into structured tags.
|
|
7
|
+
* Tags start with @tagname and their content continues until the next @tag.
|
|
8
|
+
*/
|
|
9
|
+
function parseTagsFromLines(lines) {
|
|
10
|
+
const tags = [];
|
|
11
|
+
let currentTag = null;
|
|
12
|
+
for (const line of lines) {
|
|
13
|
+
const trimmed = line.trim();
|
|
14
|
+
const tagMatch = trimmed.match(/^@(\w+)\s*(.*)/);
|
|
15
|
+
if (tagMatch) {
|
|
16
|
+
// Flush previous tag
|
|
17
|
+
if (currentTag) {
|
|
18
|
+
tags.push(currentTag);
|
|
19
|
+
}
|
|
20
|
+
currentTag = {
|
|
21
|
+
name: tagMatch[1].toLowerCase(),
|
|
22
|
+
rawContent: tagMatch[2] || "",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
else if (currentTag) {
|
|
26
|
+
// Continuation line — append to current tag
|
|
27
|
+
currentTag.rawContent += "\n" + trimmed;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Flush last tag
|
|
31
|
+
if (currentTag) {
|
|
32
|
+
tags.push(currentTag);
|
|
33
|
+
}
|
|
34
|
+
return tags;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse a @param or @returns tag content.
|
|
38
|
+
* Format: {type} Name - Description
|
|
39
|
+
* Or: {type} [Name=default] - Description
|
|
40
|
+
*/
|
|
41
|
+
function parseParamContent(rawContent) {
|
|
42
|
+
const content = rawContent.trim();
|
|
43
|
+
let type = "";
|
|
44
|
+
let remaining = content;
|
|
45
|
+
// Extract {type}
|
|
46
|
+
const typeMatch = content.match(/^\{([^}]+)\}\s*/);
|
|
47
|
+
if (typeMatch) {
|
|
48
|
+
type = typeMatch[1];
|
|
49
|
+
remaining = content.slice(typeMatch[0].length);
|
|
50
|
+
}
|
|
51
|
+
// Check for optional [Name] or [Name=default]
|
|
52
|
+
let optional = false;
|
|
53
|
+
let defaultValue;
|
|
54
|
+
let name = "";
|
|
55
|
+
let description = "";
|
|
56
|
+
const optionalMatch = remaining.match(/^\[([^\]]+)\]\s*(?:-\s*)?/);
|
|
57
|
+
if (optionalMatch) {
|
|
58
|
+
optional = true;
|
|
59
|
+
const inner = optionalMatch[1];
|
|
60
|
+
const eqIndex = inner.indexOf("=");
|
|
61
|
+
if (eqIndex !== -1) {
|
|
62
|
+
name = inner.slice(0, eqIndex);
|
|
63
|
+
defaultValue = inner.slice(eqIndex + 1);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
name = inner;
|
|
67
|
+
}
|
|
68
|
+
description = remaining.slice(optionalMatch[0].length).trim();
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// Required param: Name - Description
|
|
72
|
+
const dashIndex = remaining.indexOf(" - ");
|
|
73
|
+
if (dashIndex !== -1) {
|
|
74
|
+
name = remaining.slice(0, dashIndex).trim();
|
|
75
|
+
description = remaining.slice(dashIndex + 3).trim();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// No description separator — entire thing is the name
|
|
79
|
+
name = remaining.trim();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Clean up multiline descriptions
|
|
83
|
+
description = description.replace(/\n/g, " ").trim();
|
|
84
|
+
const param = { name, type, description, optional };
|
|
85
|
+
if (defaultValue !== undefined) {
|
|
86
|
+
param.default = defaultValue;
|
|
87
|
+
}
|
|
88
|
+
return param;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Parse @example tag content.
|
|
92
|
+
* First line is the title/description.
|
|
93
|
+
* Lines starting with >>> are request messages.
|
|
94
|
+
* Lines starting with <<< are response messages.
|
|
95
|
+
* Other lines are appended to the last category.
|
|
96
|
+
*/
|
|
97
|
+
function parseExampleContent(rawContent) {
|
|
98
|
+
const lines = rawContent.split("\n");
|
|
99
|
+
const description = lines[0]?.trim() || "";
|
|
100
|
+
const request = [];
|
|
101
|
+
const response = [];
|
|
102
|
+
for (let i = 1; i < lines.length; i++) {
|
|
103
|
+
const line = lines[i].trim();
|
|
104
|
+
if (!line)
|
|
105
|
+
continue;
|
|
106
|
+
if (line.startsWith(">>>")) {
|
|
107
|
+
request.push(line.slice(3).trim());
|
|
108
|
+
}
|
|
109
|
+
else if (line.startsWith("<<<")) {
|
|
110
|
+
response.push(line.slice(3).trim());
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Continuation of previous category
|
|
114
|
+
if (response.length > 0) {
|
|
115
|
+
response[response.length - 1] += " " + line;
|
|
116
|
+
}
|
|
117
|
+
else if (request.length > 0) {
|
|
118
|
+
request[request.length - 1] += " " + line;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { description, request, response };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Parse @value tag content into a Value tree node.
|
|
126
|
+
* Format: {type} Name - Description
|
|
127
|
+
* Dot notation: Name.Child.Grandchild
|
|
128
|
+
*/
|
|
129
|
+
function parseValueContent(rawContent) {
|
|
130
|
+
const content = rawContent.trim();
|
|
131
|
+
let type = "";
|
|
132
|
+
let remaining = content;
|
|
133
|
+
const typeMatch = content.match(/^\{([^}]+)\}\s*/);
|
|
134
|
+
if (typeMatch) {
|
|
135
|
+
type = typeMatch[1];
|
|
136
|
+
remaining = content.slice(typeMatch[0].length);
|
|
137
|
+
}
|
|
138
|
+
let name = "";
|
|
139
|
+
let description = "";
|
|
140
|
+
const dashIndex = remaining.indexOf(" - ");
|
|
141
|
+
if (dashIndex !== -1) {
|
|
142
|
+
name = remaining.slice(0, dashIndex).trim();
|
|
143
|
+
description = remaining.slice(dashIndex + 3).trim();
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
name = remaining.trim();
|
|
147
|
+
}
|
|
148
|
+
description = description.replace(/\n/g, " ").trim();
|
|
149
|
+
return { name, type, description, children: [] };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Convert a set of doc blocks into a Document.
|
|
153
|
+
* Each block with @api becomes an endpoint.
|
|
154
|
+
* @group tags create new groups; endpoints after a @group belong to it.
|
|
155
|
+
*/
|
|
156
|
+
function blocksToDocument(blocks, title = "") {
|
|
157
|
+
const doc = (0, models_1.createDocument)(title);
|
|
158
|
+
let currentGroupIndex = 0;
|
|
159
|
+
for (const block of blocks) {
|
|
160
|
+
const tags = parseTagsFromLines(block.lines);
|
|
161
|
+
// Check if this block is a standalone @group tag
|
|
162
|
+
const groupTag = tags.find((t) => t.name === "group");
|
|
163
|
+
const apiTag = tags.find((t) => t.name === "api");
|
|
164
|
+
if (groupTag && !apiTag) {
|
|
165
|
+
// Standalone group — create a new group section
|
|
166
|
+
const group = (0, models_1.createGroup)(groupTag.rawContent.trim());
|
|
167
|
+
// Check for description tag in same block
|
|
168
|
+
const descTag = tags.find((t) => t.name === "description");
|
|
169
|
+
if (descTag) {
|
|
170
|
+
group.description = descTag.rawContent.replace(/\n/g, " ").trim();
|
|
171
|
+
}
|
|
172
|
+
currentGroupIndex = doc.groups.length;
|
|
173
|
+
doc.groups.push(group);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (!apiTag)
|
|
177
|
+
continue;
|
|
178
|
+
// This block defines an endpoint
|
|
179
|
+
const endpointName = apiTag.rawContent.trim();
|
|
180
|
+
// Determine kind
|
|
181
|
+
const kindTag = tags.find((t) => t.name === "kind");
|
|
182
|
+
const kind = kindTag?.rawContent.trim() || "call";
|
|
183
|
+
const endpoint = (0, models_1.createEndpoint)(endpointName, kind);
|
|
184
|
+
// If this block also has @group, create a new group first
|
|
185
|
+
if (groupTag) {
|
|
186
|
+
const group = (0, models_1.createGroup)(groupTag.rawContent.trim());
|
|
187
|
+
currentGroupIndex = doc.groups.length;
|
|
188
|
+
doc.groups.push(group);
|
|
189
|
+
}
|
|
190
|
+
// Process all tags
|
|
191
|
+
for (const tag of tags) {
|
|
192
|
+
switch (tag.name) {
|
|
193
|
+
case "description":
|
|
194
|
+
endpoint.description = tag.rawContent.replace(/\n/g, " ").trim();
|
|
195
|
+
break;
|
|
196
|
+
case "param":
|
|
197
|
+
endpoint.params.push(parseParamContent(tag.rawContent));
|
|
198
|
+
break;
|
|
199
|
+
case "returns":
|
|
200
|
+
endpoint.returns.push(parseParamContent(tag.rawContent));
|
|
201
|
+
break;
|
|
202
|
+
case "example":
|
|
203
|
+
endpoint.examples.push(parseExampleContent(tag.rawContent));
|
|
204
|
+
break;
|
|
205
|
+
case "warning":
|
|
206
|
+
endpoint.warnings.push(tag.rawContent.replace(/\n/g, " ").trim());
|
|
207
|
+
break;
|
|
208
|
+
case "since":
|
|
209
|
+
endpoint.since = tag.rawContent.trim();
|
|
210
|
+
break;
|
|
211
|
+
case "deprecated":
|
|
212
|
+
endpoint.deprecated = tag.rawContent.replace(/\n/g, " ").trim();
|
|
213
|
+
break;
|
|
214
|
+
case "internal":
|
|
215
|
+
endpoint.internal = true;
|
|
216
|
+
break;
|
|
217
|
+
case "value": {
|
|
218
|
+
const value = parseValueContent(tag.rawContent);
|
|
219
|
+
doc.groups[currentGroupIndex].values.push(value);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Skip internal endpoints
|
|
225
|
+
if (!endpoint.internal) {
|
|
226
|
+
doc.groups[currentGroupIndex].endpoints.push(endpoint);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Remove empty default group if others exist
|
|
230
|
+
if (doc.groups.length > 1 && doc.groups[0].endpoints.length === 0 && doc.groups[0].values.length === 0) {
|
|
231
|
+
doc.groups.shift();
|
|
232
|
+
}
|
|
233
|
+
return doc;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=tagParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagParser.js","sourceRoot":"","sources":["../../src/parser/tagParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Config, Document, DocumentConfig } from "./models";
|
|
2
|
+
export interface PipelineOptions {
|
|
3
|
+
config: Config;
|
|
4
|
+
configDir: string;
|
|
5
|
+
document?: string;
|
|
6
|
+
target: "master" | "release";
|
|
7
|
+
version: string;
|
|
8
|
+
verbose: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse source files for a single document config entry.
|
|
12
|
+
* Returns the intermediate Document model.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseDocument(docConfig: DocumentConfig, config: Config, configDir: string, verbose: boolean): Document;
|
|
15
|
+
/**
|
|
16
|
+
* Parse command: parse source files and output JSON.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runParse(options: PipelineOptions): void;
|
|
19
|
+
/**
|
|
20
|
+
* Preview command: parse + render to HTML files.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runPreview(options: PipelineOptions): void;
|
|
23
|
+
/**
|
|
24
|
+
* Publish command: parse + render + upload to Confluence.
|
|
25
|
+
*/
|
|
26
|
+
export declare function runPublish(options: PipelineOptions): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Diff command: show what would change without publishing.
|
|
29
|
+
*/
|
|
30
|
+
export declare function runDiff(options: PipelineOptions): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM5D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,QAAQ,CA+BV;AAsBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA6BvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAoBzD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCxE;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BrE"}
|
package/dist/pipeline.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
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.parseDocument = parseDocument;
|
|
7
|
+
exports.runParse = runParse;
|
|
8
|
+
exports.runPreview = runPreview;
|
|
9
|
+
exports.runPublish = runPublish;
|
|
10
|
+
exports.runDiff = runDiff;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const config_1 = require("./config");
|
|
14
|
+
const parser_1 = require("./parser");
|
|
15
|
+
const renderer_1 = require("./renderer");
|
|
16
|
+
const publisher_1 = require("./publisher");
|
|
17
|
+
/**
|
|
18
|
+
* Parse source files for a single document config entry.
|
|
19
|
+
* Returns the intermediate Document model.
|
|
20
|
+
*/
|
|
21
|
+
function parseDocument(docConfig, config, configDir, verbose) {
|
|
22
|
+
const allBlocks = [];
|
|
23
|
+
for (const source of docConfig.sources) {
|
|
24
|
+
const resolvedPath = (0, config_1.resolveSourcePath)(config.source_root, source.path, configDir);
|
|
25
|
+
if (verbose) {
|
|
26
|
+
console.log(` Scanning: ${resolvedPath}`);
|
|
27
|
+
}
|
|
28
|
+
const files = (0, parser_1.scanPath)(resolvedPath);
|
|
29
|
+
for (const file of files) {
|
|
30
|
+
if (verbose) {
|
|
31
|
+
console.log(` Parsing: ${file}`);
|
|
32
|
+
}
|
|
33
|
+
const blocks = (0, parser_1.extractDocBlocks)(file);
|
|
34
|
+
allBlocks.push(...blocks);
|
|
35
|
+
if (verbose && blocks.length > 0) {
|
|
36
|
+
console.log(` Found ${blocks.length} doc block(s)`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const doc = (0, parser_1.blocksToDocument)(allBlocks, docConfig.title);
|
|
41
|
+
doc.version = config.source_root;
|
|
42
|
+
doc.confluenceId =
|
|
43
|
+
docConfig.confluenceId.master; // Default, overridden by target
|
|
44
|
+
return doc;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the list of document configs to process (all or filtered by --document).
|
|
48
|
+
*/
|
|
49
|
+
function getDocConfigs(config, documentFilter) {
|
|
50
|
+
if (documentFilter) {
|
|
51
|
+
const found = config.documents.filter((d) => d.id === documentFilter);
|
|
52
|
+
if (found.length === 0) {
|
|
53
|
+
const available = config.documents.map((d) => d.id).join(", ");
|
|
54
|
+
throw new Error(`Document "${documentFilter}" not found. Available: ${available}`);
|
|
55
|
+
}
|
|
56
|
+
return found;
|
|
57
|
+
}
|
|
58
|
+
return config.documents;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse command: parse source files and output JSON.
|
|
62
|
+
*/
|
|
63
|
+
function runParse(options) {
|
|
64
|
+
const docConfigs = getDocConfigs(options.config, options.document);
|
|
65
|
+
for (const docConfig of docConfigs) {
|
|
66
|
+
console.log(`\nParsing: ${docConfig.title}`);
|
|
67
|
+
const doc = parseDocument(docConfig, options.config, options.configDir, options.verbose);
|
|
68
|
+
// Count endpoints
|
|
69
|
+
let endpointCount = 0;
|
|
70
|
+
for (const group of doc.groups) {
|
|
71
|
+
endpointCount += group.endpoints.length;
|
|
72
|
+
}
|
|
73
|
+
console.log(` Found ${doc.groups.length} group(s), ${endpointCount} endpoint(s)`);
|
|
74
|
+
// Output JSON
|
|
75
|
+
const outputDir = path_1.default.resolve(options.configDir, "output", "collected");
|
|
76
|
+
fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
77
|
+
const outputPath = path_1.default.join(outputDir, `${docConfig.id}.json`);
|
|
78
|
+
fs_1.default.writeFileSync(outputPath, JSON.stringify(doc, null, 2), "utf-8");
|
|
79
|
+
console.log(` Saved JSON: ${outputPath}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Preview command: parse + render to HTML files.
|
|
84
|
+
*/
|
|
85
|
+
function runPreview(options) {
|
|
86
|
+
const docConfigs = getDocConfigs(options.config, options.document);
|
|
87
|
+
for (const docConfig of docConfigs) {
|
|
88
|
+
console.log(`\nProcessing: ${docConfig.title}`);
|
|
89
|
+
const doc = parseDocument(docConfig, options.config, options.configDir, options.verbose);
|
|
90
|
+
const html = (0, renderer_1.renderDocument)(doc);
|
|
91
|
+
// Save HTML
|
|
92
|
+
const outputDir = path_1.default.resolve(options.configDir, "output", "formatted");
|
|
93
|
+
fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
94
|
+
const outputPath = path_1.default.join(outputDir, `${docConfig.id}.html`);
|
|
95
|
+
fs_1.default.writeFileSync(outputPath, html, "utf-8");
|
|
96
|
+
console.log(` Saved HTML: ${outputPath}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Publish command: parse + render + upload to Confluence.
|
|
101
|
+
*/
|
|
102
|
+
async function runPublish(options) {
|
|
103
|
+
const client = (0, publisher_1.createClientFromEnv)(options.config.confluence.base_url);
|
|
104
|
+
const docConfigs = getDocConfigs(options.config, options.document);
|
|
105
|
+
for (const docConfig of docConfigs) {
|
|
106
|
+
console.log(`\nPublishing: ${docConfig.title}`);
|
|
107
|
+
const doc = parseDocument(docConfig, options.config, options.configDir, options.verbose);
|
|
108
|
+
const html = (0, renderer_1.renderDocument)(doc);
|
|
109
|
+
const confluenceId = options.target === "release"
|
|
110
|
+
? docConfig.confluenceId.release
|
|
111
|
+
: docConfig.confluenceId.master;
|
|
112
|
+
if (!confluenceId) {
|
|
113
|
+
console.log(` Skipped: no ${options.target} confluence_id configured`);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
const result = await client.publish(confluenceId, docConfig.title, html);
|
|
117
|
+
if (result.success) {
|
|
118
|
+
console.log(` ${result.message}`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.error(` ERROR: ${result.message}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Diff command: show what would change without publishing.
|
|
128
|
+
*/
|
|
129
|
+
async function runDiff(options) {
|
|
130
|
+
const client = (0, publisher_1.createClientFromEnv)(options.config.confluence.base_url);
|
|
131
|
+
const docConfigs = getDocConfigs(options.config, options.document);
|
|
132
|
+
for (const docConfig of docConfigs) {
|
|
133
|
+
console.log(`\nChecking: ${docConfig.title}`);
|
|
134
|
+
const doc = parseDocument(docConfig, options.config, options.configDir, options.verbose);
|
|
135
|
+
const html = (0, renderer_1.renderDocument)(doc);
|
|
136
|
+
const confluenceId = options.target === "release"
|
|
137
|
+
? docConfig.confluenceId.release
|
|
138
|
+
: docConfig.confluenceId.master;
|
|
139
|
+
if (!confluenceId) {
|
|
140
|
+
console.log(` Skipped: no ${options.target} confluence_id configured`);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const diffResult = await client.diff(confluenceId, html);
|
|
144
|
+
console.log(` ${diffResult}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface PublishResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
message: string;
|
|
4
|
+
pageId: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class ConfluenceClient {
|
|
7
|
+
private client;
|
|
8
|
+
constructor(baseUrl: string, username: string, token: string);
|
|
9
|
+
/**
|
|
10
|
+
* Get the current page version number.
|
|
11
|
+
*/
|
|
12
|
+
getPageVersion(pageId: string): Promise<number>;
|
|
13
|
+
/**
|
|
14
|
+
* Get the current page body content (storage format).
|
|
15
|
+
*/
|
|
16
|
+
getPageContent(pageId: string): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Publish content to a Confluence page.
|
|
19
|
+
* Only updates if content has actually changed.
|
|
20
|
+
*/
|
|
21
|
+
publish(pageId: string, title: string, html: string, options?: {
|
|
22
|
+
force?: boolean;
|
|
23
|
+
}): Promise<PublishResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Get a diff summary of what would change.
|
|
26
|
+
*/
|
|
27
|
+
diff(pageId: string, newHtml: string): Promise<string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a ConfluenceClient from environment variables.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createClientFromEnv(baseUrl: string): ConfluenceClient;
|
|
33
|
+
//# sourceMappingURL=confluenceApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confluenceApi.d.ts","sourceRoot":"","sources":["../../src/publisher/confluenceApi.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAgB;gBAElB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAa5D;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWrD;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQrD;;;OAGG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAChC,OAAO,CAAC,aAAa,CAAC;IA0DzB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAc7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAYrE"}
|