powerautodoc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/config/defaults.d.ts +4 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +17 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +106 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/renderOptions.d.ts +4 -0
- package/dist/config/renderOptions.d.ts.map +1 -0
- package/dist/config/renderOptions.js +6 -0
- package/dist/config/renderOptions.js.map +1 -0
- package/dist/config/schema.d.ts +61 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +6 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/flow.d.ts +35 -0
- package/dist/ir/flow.d.ts.map +1 -0
- package/dist/ir/flow.js +2 -0
- package/dist/ir/flow.js.map +1 -0
- package/dist/ir/form.d.ts +14 -0
- package/dist/ir/form.d.ts.map +1 -0
- package/dist/ir/form.js +2 -0
- package/dist/ir/form.js.map +1 -0
- package/dist/ir/index.d.ts +10 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/plugin.d.ts +38 -0
- package/dist/ir/plugin.d.ts.map +1 -0
- package/dist/ir/plugin.js +2 -0
- package/dist/ir/plugin.js.map +1 -0
- package/dist/ir/relationship.d.ts +10 -0
- package/dist/ir/relationship.d.ts.map +1 -0
- package/dist/ir/relationship.js +2 -0
- package/dist/ir/relationship.js.map +1 -0
- package/dist/ir/solution.d.ts +15 -0
- package/dist/ir/solution.d.ts.map +1 -0
- package/dist/ir/solution.js +2 -0
- package/dist/ir/solution.js.map +1 -0
- package/dist/ir/table.d.ts +28 -0
- package/dist/ir/table.d.ts.map +1 -0
- package/dist/ir/table.js +2 -0
- package/dist/ir/table.js.map +1 -0
- package/dist/ir/view.d.ts +20 -0
- package/dist/ir/view.d.ts.map +1 -0
- package/dist/ir/view.js +2 -0
- package/dist/ir/view.js.map +1 -0
- package/dist/ir/webResource.d.ts +28 -0
- package/dist/ir/webResource.d.ts.map +1 -0
- package/dist/ir/webResource.js +16 -0
- package/dist/ir/webResource.js.map +1 -0
- package/dist/parsers/flowParser.d.ts +3 -0
- package/dist/parsers/flowParser.d.ts.map +1 -0
- package/dist/parsers/flowParser.js +226 -0
- package/dist/parsers/flowParser.js.map +1 -0
- package/dist/parsers/formParser.d.ts +4 -0
- package/dist/parsers/formParser.d.ts.map +1 -0
- package/dist/parsers/formParser.js +117 -0
- package/dist/parsers/formParser.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +10 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/pluginParser.d.ts +3 -0
- package/dist/parsers/pluginParser.d.ts.map +1 -0
- package/dist/parsers/pluginParser.js +193 -0
- package/dist/parsers/pluginParser.js.map +1 -0
- package/dist/parsers/relationshipParser.d.ts +5 -0
- package/dist/parsers/relationshipParser.d.ts.map +1 -0
- package/dist/parsers/relationshipParser.js +71 -0
- package/dist/parsers/relationshipParser.js.map +1 -0
- package/dist/parsers/solutionManifestParser.d.ts +3 -0
- package/dist/parsers/solutionManifestParser.d.ts.map +1 -0
- package/dist/parsers/solutionManifestParser.js +54 -0
- package/dist/parsers/solutionManifestParser.js.map +1 -0
- package/dist/parsers/solutionParser.d.ts +4 -0
- package/dist/parsers/solutionParser.d.ts.map +1 -0
- package/dist/parsers/solutionParser.js +63 -0
- package/dist/parsers/solutionParser.js.map +1 -0
- package/dist/parsers/tableParser.d.ts +3 -0
- package/dist/parsers/tableParser.d.ts.map +1 -0
- package/dist/parsers/tableParser.js +130 -0
- package/dist/parsers/tableParser.js.map +1 -0
- package/dist/parsers/viewParser.d.ts +4 -0
- package/dist/parsers/viewParser.d.ts.map +1 -0
- package/dist/parsers/viewParser.js +161 -0
- package/dist/parsers/viewParser.js.map +1 -0
- package/dist/parsers/webResourceParser.d.ts +8 -0
- package/dist/parsers/webResourceParser.d.ts.map +1 -0
- package/dist/parsers/webResourceParser.js +260 -0
- package/dist/parsers/webResourceParser.js.map +1 -0
- package/dist/publisher/wikiAssembler.d.ts +6 -0
- package/dist/publisher/wikiAssembler.d.ts.map +1 -0
- package/dist/publisher/wikiAssembler.js +99 -0
- package/dist/publisher/wikiAssembler.js.map +1 -0
- package/dist/publisher/wikiPublisher.d.ts +9 -0
- package/dist/publisher/wikiPublisher.d.ts.map +1 -0
- package/dist/publisher/wikiPublisher.js +149 -0
- package/dist/publisher/wikiPublisher.js.map +1 -0
- package/dist/renderers/flowRenderer.d.ts +6 -0
- package/dist/renderers/flowRenderer.d.ts.map +1 -0
- package/dist/renderers/flowRenderer.js +141 -0
- package/dist/renderers/flowRenderer.js.map +1 -0
- package/dist/renderers/index.d.ts +6 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +6 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/overviewRenderer.d.ts +6 -0
- package/dist/renderers/overviewRenderer.d.ts.map +1 -0
- package/dist/renderers/overviewRenderer.js +71 -0
- package/dist/renderers/overviewRenderer.js.map +1 -0
- package/dist/renderers/pluginRenderer.d.ts +6 -0
- package/dist/renderers/pluginRenderer.d.ts.map +1 -0
- package/dist/renderers/pluginRenderer.js +167 -0
- package/dist/renderers/pluginRenderer.js.map +1 -0
- package/dist/renderers/rendererUtils.d.ts +8 -0
- package/dist/renderers/rendererUtils.d.ts.map +1 -0
- package/dist/renderers/rendererUtils.js +14 -0
- package/dist/renderers/rendererUtils.js.map +1 -0
- package/dist/renderers/tableRenderer.d.ts +5 -0
- package/dist/renderers/tableRenderer.d.ts.map +1 -0
- package/dist/renderers/tableRenderer.js +231 -0
- package/dist/renderers/tableRenderer.js.map +1 -0
- package/dist/renderers/webResourceRenderer.d.ts.map +1 -0
- package/dist/renderers/webresourceRenderer.d.ts +5 -0
- package/dist/renderers/webresourceRenderer.js +163 -0
- package/dist/renderers/webresourceRenderer.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
const parser = new XMLParser({
|
|
5
|
+
attributeNamePrefix: '@_',
|
|
6
|
+
ignoreAttributes: false,
|
|
7
|
+
isArray: (name) => ['cell', 'LocalizedName', 'condition', 'filter', 'link-entity'].includes(name)
|
|
8
|
+
});
|
|
9
|
+
function mapViewType(querytype, isQuickFind) {
|
|
10
|
+
if (isQuickFind)
|
|
11
|
+
return 'Quick Find';
|
|
12
|
+
const typeMap = {
|
|
13
|
+
0: 'Public',
|
|
14
|
+
1: 'System',
|
|
15
|
+
2: 'Associated',
|
|
16
|
+
64: 'Lookup',
|
|
17
|
+
128: 'SubGrid',
|
|
18
|
+
};
|
|
19
|
+
return typeMap[querytype] ?? 'Other';
|
|
20
|
+
}
|
|
21
|
+
function buildAliasMap(fetchxml) {
|
|
22
|
+
const map = {};
|
|
23
|
+
const entity = fetchxml?.fetch?.entity;
|
|
24
|
+
if (!entity)
|
|
25
|
+
return map;
|
|
26
|
+
function processLinks(linkEntity) {
|
|
27
|
+
if (!linkEntity)
|
|
28
|
+
return;
|
|
29
|
+
const links = Array.isArray(linkEntity) ? linkEntity : [linkEntity];
|
|
30
|
+
for (const link of links) {
|
|
31
|
+
const alias = link['@_alias'];
|
|
32
|
+
const joinField = link['@_to']; // ← was link['@_name']
|
|
33
|
+
if (alias && joinField)
|
|
34
|
+
map[alias] = joinField;
|
|
35
|
+
if (link['link-entity'])
|
|
36
|
+
processLinks(link['link-entity']);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
processLinks(entity['link-entity']);
|
|
40
|
+
return map;
|
|
41
|
+
}
|
|
42
|
+
function extractFilters(fetchxml) {
|
|
43
|
+
const entity = fetchxml?.fetch?.entity;
|
|
44
|
+
if (!entity)
|
|
45
|
+
return [];
|
|
46
|
+
const conditions = [];
|
|
47
|
+
function processFilter(filter, depth) {
|
|
48
|
+
if (!filter)
|
|
49
|
+
return;
|
|
50
|
+
const filters = Array.isArray(filter) ? filter : [filter];
|
|
51
|
+
for (const f of filters) {
|
|
52
|
+
if (f?.['@_isquickfindfields'] === '1')
|
|
53
|
+
continue;
|
|
54
|
+
const groupType = f['@_type'] ?? 'and';
|
|
55
|
+
const rawConditions = Array.isArray(f.condition)
|
|
56
|
+
? f.condition
|
|
57
|
+
: [f.condition].filter(Boolean);
|
|
58
|
+
for (const condition of rawConditions) {
|
|
59
|
+
if (!condition?.['@_attribute'])
|
|
60
|
+
continue;
|
|
61
|
+
conditions.push({
|
|
62
|
+
attribute: condition['@_attribute'],
|
|
63
|
+
operator: condition['@_operator'] ?? '',
|
|
64
|
+
value: condition['@_value'],
|
|
65
|
+
filterType: groupType,
|
|
66
|
+
depth,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function processLinkEntity(linkEntity, depth) {
|
|
72
|
+
if (!linkEntity)
|
|
73
|
+
return;
|
|
74
|
+
const links = Array.isArray(linkEntity) ? linkEntity : [linkEntity];
|
|
75
|
+
for (const link of links) {
|
|
76
|
+
const entityName = link['@_name'] ?? '';
|
|
77
|
+
const linkType = link['@_link-type'] ?? 'inner';
|
|
78
|
+
const joinField = link['@_to'] ?? '';
|
|
79
|
+
conditions.push({
|
|
80
|
+
attribute: entityName,
|
|
81
|
+
operator: linkType === 'inner' ? 'must have data' : 'optional',
|
|
82
|
+
isJoin: true,
|
|
83
|
+
joinType: linkType,
|
|
84
|
+
joinField,
|
|
85
|
+
depth,
|
|
86
|
+
});
|
|
87
|
+
processFilter(link.filter, depth + 1);
|
|
88
|
+
if (link['link-entity'])
|
|
89
|
+
processLinkEntity(link['link-entity'], depth + 1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
processFilter(entity.filter, 0);
|
|
93
|
+
if (entity['link-entity'])
|
|
94
|
+
processLinkEntity(entity['link-entity'], 1);
|
|
95
|
+
return conditions;
|
|
96
|
+
}
|
|
97
|
+
export function parseViewXml(viewXmlPath) {
|
|
98
|
+
const raw = fs.readFileSync(viewXmlPath, 'utf-8');
|
|
99
|
+
const parsed = parser.parse(raw);
|
|
100
|
+
const query = parsed?.savedqueries?.savedquery;
|
|
101
|
+
if (!query) {
|
|
102
|
+
console.warn(`No savedquery found in: ${viewXmlPath}`);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const localizedNames = query.LocalizedNames?.LocalizedName ?? [];
|
|
106
|
+
const nameEntry = localizedNames.find((n) => n['@_languagecode'] === '1033');
|
|
107
|
+
const name = nameEntry?.['@_description'] ?? path.basename(viewXmlPath);
|
|
108
|
+
const aliasMap = buildAliasMap(query.fetchxml);
|
|
109
|
+
const cells = query.layoutxml?.grid?.row?.cell ?? [];
|
|
110
|
+
const columns = cells
|
|
111
|
+
.map((cell) => {
|
|
112
|
+
const colName = cell['@_name'] ?? '';
|
|
113
|
+
if (colName.includes('.')) {
|
|
114
|
+
const [alias, field] = colName.split('.');
|
|
115
|
+
const tableName = aliasMap[alias] ?? alias;
|
|
116
|
+
return `${tableName}.${field}`;
|
|
117
|
+
}
|
|
118
|
+
return colName;
|
|
119
|
+
})
|
|
120
|
+
.filter(Boolean);
|
|
121
|
+
const querytype = parseInt(query.querytype ?? '0');
|
|
122
|
+
const isQuickFind = Number(query.isquickfindquery) === 1;
|
|
123
|
+
const isDefault = Number(query.isdefault) === 1;
|
|
124
|
+
return {
|
|
125
|
+
name,
|
|
126
|
+
type: mapViewType(querytype, isQuickFind),
|
|
127
|
+
columns,
|
|
128
|
+
description: '',
|
|
129
|
+
isDefault,
|
|
130
|
+
isQuickFind,
|
|
131
|
+
filters: extractFilters(query.fetchxml),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export function parseEntityViews(entityFolderPath) {
|
|
135
|
+
const savedQueriesPath = path.join(entityFolderPath, 'SavedQueries');
|
|
136
|
+
if (!fs.existsSync(savedQueriesPath))
|
|
137
|
+
return [];
|
|
138
|
+
const files = fs
|
|
139
|
+
.readdirSync(savedQueriesPath)
|
|
140
|
+
.filter(f => f.endsWith('.xml'));
|
|
141
|
+
const views = [];
|
|
142
|
+
for (const file of files) {
|
|
143
|
+
const filePath = path.join(savedQueriesPath, file);
|
|
144
|
+
try {
|
|
145
|
+
const view = parseViewXml(filePath);
|
|
146
|
+
if (view)
|
|
147
|
+
views.push(view);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
console.error(`Failed to parse view: ${file}`, err);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return views.sort((a, b) => {
|
|
154
|
+
if (a.isDefault && !b.isDefault)
|
|
155
|
+
return -1;
|
|
156
|
+
if (!a.isDefault && b.isDefault)
|
|
157
|
+
return 1;
|
|
158
|
+
return a.name.localeCompare(b.name);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=viewParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewParser.js","sourceRoot":"","sources":["../../src/parsers/viewParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WebResourceModel } from '../ir/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Scan the WebResources folder of an unpacked solution and build WebResourceModels.
|
|
4
|
+
* For each *_data.xml file found, we parse the metadata and (for JS type-3 resources)
|
|
5
|
+
* also parse the sibling source file to extract functions.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseAllWebResources(unpackedPath: string): WebResourceModel[];
|
|
8
|
+
//# sourceMappingURL=webResourceParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webResourceParser.d.ts","sourceRoot":"","sources":["../../src/parsers/webResourceParser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAuB,MAAM,gBAAgB,CAAC;AAiN5E;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA2D7E"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { WEB_RESOURCE_TYPE_MAP } from '../ir/index.js';
|
|
5
|
+
const xmlParser = new XMLParser({
|
|
6
|
+
attributeNamePrefix: '@_',
|
|
7
|
+
ignoreAttributes: false,
|
|
8
|
+
});
|
|
9
|
+
// -----------------------------------------------
|
|
10
|
+
// JS function extraction
|
|
11
|
+
// -----------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Strip block and line comments from JS source so they don't
|
|
14
|
+
* interfere with function signature matching.
|
|
15
|
+
* We keep a pass of JSDoc blocks separately before stripping.
|
|
16
|
+
*/
|
|
17
|
+
function stripComments(src) {
|
|
18
|
+
// Replace block comments (non-greedy)
|
|
19
|
+
let out = src.replace(/\/\*[\s\S]*?\*\//g, ' ');
|
|
20
|
+
// Replace line comments
|
|
21
|
+
out = out.replace(/\/\/[^\n]*/g, '');
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the leading JSDoc comment immediately before a given character offset.
|
|
26
|
+
*/
|
|
27
|
+
function extractJsDocBefore(src, offset) {
|
|
28
|
+
// Walk backwards past whitespace to find end of a block comment
|
|
29
|
+
const before = src.slice(0, offset).trimEnd();
|
|
30
|
+
if (!before.endsWith('*/'))
|
|
31
|
+
return undefined;
|
|
32
|
+
const start = before.lastIndexOf('/**');
|
|
33
|
+
if (start === -1)
|
|
34
|
+
return undefined;
|
|
35
|
+
const block = before.slice(start);
|
|
36
|
+
// Extract @description or the first non-tag line
|
|
37
|
+
const descMatch = block.match(/@description\s+([^\n*@]+)/);
|
|
38
|
+
if (descMatch)
|
|
39
|
+
return descMatch[1].trim();
|
|
40
|
+
// Fall back to the first substantive line after /**
|
|
41
|
+
const lines = block
|
|
42
|
+
.split('\n')
|
|
43
|
+
.map(l => l.replace(/^\s*\*+\s?/, '').trim())
|
|
44
|
+
.filter(l => l && !l.startsWith('@') && l !== '/');
|
|
45
|
+
return lines[0] ?? undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Detect the primary JS namespace from patterns like:
|
|
49
|
+
* ISMS.Account = {
|
|
50
|
+
* var ISMS = ISMS || {}; ISMS.Account = {
|
|
51
|
+
*/
|
|
52
|
+
function detectNamespace(src) {
|
|
53
|
+
// Match: ISMS.Something = { or ISMS.Something.SubThing = {
|
|
54
|
+
const match = src.match(/^\s*([A-Za-z_$][A-Za-z0-9_$]*(?:\.[A-Za-z_$][A-Za-z0-9_$]+)+)\s*=\s*\{/m);
|
|
55
|
+
return match?.[1];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse clean parameter names from a raw param string.
|
|
59
|
+
* Handles defaults, destructuring (simplified), rest params.
|
|
60
|
+
*/
|
|
61
|
+
function parseParams(rawParams) {
|
|
62
|
+
if (!rawParams.trim())
|
|
63
|
+
return [];
|
|
64
|
+
return rawParams
|
|
65
|
+
.split(',')
|
|
66
|
+
.map(p => {
|
|
67
|
+
// Strip default values
|
|
68
|
+
const noDefault = p.split('=')[0].trim();
|
|
69
|
+
// Strip rest operator
|
|
70
|
+
return noDefault.replace(/^\.\.\./, '').trim();
|
|
71
|
+
})
|
|
72
|
+
.filter(Boolean);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract all named functions from a JS source file.
|
|
76
|
+
*
|
|
77
|
+
* Handles the patterns we see in Power Platform web resources:
|
|
78
|
+
* 1. Object literal methods: FuncName: [async] function(params) { ... }
|
|
79
|
+
* 2. Standalone declarations: [async] function FuncName(params) { ... }
|
|
80
|
+
* 3. Arrow assignments: [const|let|var] FuncName = [async] (params) => ...
|
|
81
|
+
*/
|
|
82
|
+
function extractFunctions(src) {
|
|
83
|
+
const functions = [];
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
const clean = stripComments(src);
|
|
86
|
+
// Pattern 1 — object literal method: `Name: [async] function [optName](params)`
|
|
87
|
+
const objectMethodRe = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*:\s*(async\s+)?function\s*(?:[A-Za-z_$][A-Za-z0-9_$]*)?\s*\(([^)]*)\)/g;
|
|
88
|
+
// Pattern 2 — named function declaration: `[async] function Name(params)`
|
|
89
|
+
const declRe = /(async\s+)?function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(([^)]*)\)/g;
|
|
90
|
+
// Pattern 3 — arrow / expression: `[const|let|var] Name = [async] (params) =>`
|
|
91
|
+
const arrowRe = /(?:const|let|var)\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*=\s*(async\s+)?(?:\(([^)]*)\)|([A-Za-z_$][A-Za-z0-9_$]*))\s*=>/g;
|
|
92
|
+
for (const match of clean.matchAll(objectMethodRe)) {
|
|
93
|
+
const name = match[1];
|
|
94
|
+
if (seen.has(name))
|
|
95
|
+
continue;
|
|
96
|
+
seen.add(name);
|
|
97
|
+
// Find offset in original source for JSDoc extraction
|
|
98
|
+
const offset = src.indexOf(match[0]);
|
|
99
|
+
functions.push({
|
|
100
|
+
name,
|
|
101
|
+
isAsync: !!match[2],
|
|
102
|
+
params: parseParams(match[3]),
|
|
103
|
+
jsDoc: offset >= 0 ? extractJsDocBefore(src, offset) : undefined,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
for (const match of clean.matchAll(declRe)) {
|
|
107
|
+
const name = match[2];
|
|
108
|
+
if (seen.has(name))
|
|
109
|
+
continue;
|
|
110
|
+
seen.add(name);
|
|
111
|
+
const offset = src.indexOf(match[0]);
|
|
112
|
+
functions.push({
|
|
113
|
+
name,
|
|
114
|
+
isAsync: !!match[1],
|
|
115
|
+
params: parseParams(match[3]),
|
|
116
|
+
jsDoc: offset >= 0 ? extractJsDocBefore(src, offset) : undefined,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
for (const match of clean.matchAll(arrowRe)) {
|
|
120
|
+
const name = match[1];
|
|
121
|
+
if (seen.has(name))
|
|
122
|
+
continue;
|
|
123
|
+
seen.add(name);
|
|
124
|
+
const offset = src.indexOf(match[0]);
|
|
125
|
+
// params are either group 3 (parenthesised) or group 4 (single ident)
|
|
126
|
+
const rawParams = match[3] ?? match[4] ?? '';
|
|
127
|
+
functions.push({
|
|
128
|
+
name,
|
|
129
|
+
isAsync: !!match[2],
|
|
130
|
+
params: parseParams(rawParams),
|
|
131
|
+
jsDoc: offset >= 0 ? extractJsDocBefore(src, offset) : undefined,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return functions;
|
|
135
|
+
}
|
|
136
|
+
function parseDependencyXml(raw) {
|
|
137
|
+
if (!raw)
|
|
138
|
+
return [];
|
|
139
|
+
try {
|
|
140
|
+
// DependencyXml is HTML-entity encoded inside the XML — decode first
|
|
141
|
+
const decoded = raw
|
|
142
|
+
.replace(/</g, '<')
|
|
143
|
+
.replace(/>/g, '>')
|
|
144
|
+
.replace(/&/g, '&')
|
|
145
|
+
.replace(/"/g, '"');
|
|
146
|
+
const parsed = xmlParser.parse(decoded);
|
|
147
|
+
const deps = parsed?.Dependencies?.Dependency;
|
|
148
|
+
if (!deps)
|
|
149
|
+
return [];
|
|
150
|
+
const arr = Array.isArray(deps) ? deps : [deps];
|
|
151
|
+
return arr
|
|
152
|
+
.map((d) => d?.Library?.['@_name'] ?? d?.Library?.name ?? '')
|
|
153
|
+
.filter(Boolean);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function parseDataXml(filePath) {
|
|
160
|
+
try {
|
|
161
|
+
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
162
|
+
const parsed = xmlParser.parse(raw);
|
|
163
|
+
const wr = parsed?.WebResource;
|
|
164
|
+
if (!wr)
|
|
165
|
+
return null;
|
|
166
|
+
return {
|
|
167
|
+
id: (wr.WebResourceId ?? '').replace(/[{}]/g, ''),
|
|
168
|
+
name: wr.Name ?? wr.n ?? '',
|
|
169
|
+
displayName: wr.DisplayName ?? wr.Name ?? wr.n ?? '',
|
|
170
|
+
typeCode: Number(wr.WebResourceType ?? 0),
|
|
171
|
+
introducedVersion: String(wr.IntroducedVersion ?? '1.0'),
|
|
172
|
+
dependencies: parseDependencyXml(wr.DependencyXml ?? ''),
|
|
173
|
+
fileName: wr.FileName ?? '',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
console.error(`Failed to parse web resource data XML: ${filePath}`, err);
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// -----------------------------------------------
|
|
182
|
+
// Main entry point
|
|
183
|
+
// -----------------------------------------------
|
|
184
|
+
/**
|
|
185
|
+
* Scan the WebResources folder of an unpacked solution and build WebResourceModels.
|
|
186
|
+
* For each *_data.xml file found, we parse the metadata and (for JS type-3 resources)
|
|
187
|
+
* also parse the sibling source file to extract functions.
|
|
188
|
+
*/
|
|
189
|
+
export function parseAllWebResources(unpackedPath) {
|
|
190
|
+
const webResourcesPath = path.join(unpackedPath, 'WebResources');
|
|
191
|
+
if (!fs.existsSync(webResourcesPath)) {
|
|
192
|
+
console.warn(`No WebResources folder found at: ${webResourcesPath}`);
|
|
193
|
+
return [];
|
|
194
|
+
}
|
|
195
|
+
const results = [];
|
|
196
|
+
// Recursively find all _data.xml files
|
|
197
|
+
const dataFiles = findDataXmlFiles(webResourcesPath);
|
|
198
|
+
console.log(` Found ${dataFiles.length} web resource data files`);
|
|
199
|
+
for (const dataFile of dataFiles) {
|
|
200
|
+
const meta = parseDataXml(dataFile);
|
|
201
|
+
if (!meta)
|
|
202
|
+
continue;
|
|
203
|
+
const resourceType = WEB_RESOURCE_TYPE_MAP[meta.typeCode] ?? 'Unknown';
|
|
204
|
+
const model = {
|
|
205
|
+
id: meta.id,
|
|
206
|
+
name: meta.name,
|
|
207
|
+
displayName: meta.displayName,
|
|
208
|
+
resourceType,
|
|
209
|
+
introducedVersion: meta.introducedVersion,
|
|
210
|
+
dependencies: meta.dependencies,
|
|
211
|
+
fileName: meta.fileName,
|
|
212
|
+
};
|
|
213
|
+
// For JavaScript resources, parse the source file
|
|
214
|
+
if (resourceType === 'JavaScript') {
|
|
215
|
+
// Sibling source file = data file with '.data.xml' stripped — e.g. Account.js.data.xml → Account.js
|
|
216
|
+
const sourceFile = dataFile.replace(/\.data\.xml$/, '');
|
|
217
|
+
if (fs.existsSync(sourceFile)) {
|
|
218
|
+
try {
|
|
219
|
+
const src = fs.readFileSync(sourceFile, 'utf-8');
|
|
220
|
+
model.namespace = detectNamespace(src);
|
|
221
|
+
model.functions = extractFunctions(src);
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
console.warn(`Could not read JS source for ${meta.name}: ${sourceFile}`, err);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.warn(`JS source file not found for ${meta.name}: ${sourceFile}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
results.push(model);
|
|
232
|
+
}
|
|
233
|
+
// Sort: JS files first, then by name
|
|
234
|
+
results.sort((a, b) => {
|
|
235
|
+
if (a.resourceType === 'JavaScript' && b.resourceType !== 'JavaScript')
|
|
236
|
+
return -1;
|
|
237
|
+
if (a.resourceType !== 'JavaScript' && b.resourceType === 'JavaScript')
|
|
238
|
+
return 1;
|
|
239
|
+
return a.name.localeCompare(b.name);
|
|
240
|
+
});
|
|
241
|
+
return results;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Recursively walk a directory and collect all files ending in .data.xml
|
|
245
|
+
* pac solution unpack co-locates each .data.xml alongside its source file.
|
|
246
|
+
*/
|
|
247
|
+
function findDataXmlFiles(dir) {
|
|
248
|
+
const results = [];
|
|
249
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
250
|
+
const fullPath = path.join(dir, entry.name);
|
|
251
|
+
if (entry.isDirectory()) {
|
|
252
|
+
results.push(...findDataXmlFiles(fullPath));
|
|
253
|
+
}
|
|
254
|
+
else if (entry.isFile() && entry.name.endsWith('.data.xml')) {
|
|
255
|
+
results.push(fullPath);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return results;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=webResourceParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webResourceParser.js","sourceRoot":"","sources":["../../src/parsers/webResourceParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DocGenConfig } from '../config/index.js';
|
|
2
|
+
import type { SolutionModel, FlowModel, PluginAssemblyModel } from '../ir/index.js';
|
|
3
|
+
import type { WikiPage } from './wikiPublisher.js';
|
|
4
|
+
import type { WebResourceModel } from '../ir/index.js';
|
|
5
|
+
export declare function buildWikiPages(config: DocGenConfig, solutions: SolutionModel[], mergedSolution: SolutionModel, flows: FlowModel[], pluginAssemblies?: PluginAssemblyModel[], webResources?: WebResourceModel[]): WikiPage[];
|
|
6
|
+
//# sourceMappingURL=wikiAssembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikiAssembler.d.ts","sourceRoot":"","sources":["../../src/publisher/wikiAssembler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,aAAa,EAAE,EAC1B,cAAc,EAAE,aAAa,EAC7B,KAAK,EAAE,SAAS,EAAE,EAClB,gBAAgB,GAAE,mBAAmB,EAAO,EAC5C,YAAY,GAAE,gBAAgB,EAAO,GACpC,QAAQ,EAAE,CA6GZ"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { renderOverviewMarkdown } from '../renderers/index.js';
|
|
2
|
+
import { renderTableMarkdown } from '../renderers/index.js';
|
|
3
|
+
import { renderFlowSummaryMarkdown, renderSingleFlowMarkdown } from '../renderers/index.js';
|
|
4
|
+
import { renderPluginSummaryMarkdown, renderAssemblyIndexMarkdown, renderSinglePluginTypeMarkdown } from '../renderers/index.js';
|
|
5
|
+
import { renderWebResourceSummaryMarkdown, renderWebResourceDetailMarkdown } from '../renderers/index.js';
|
|
6
|
+
export function buildWikiPages(config, solutions, mergedSolution, flows, pluginAssemblies = [], webResources = []) {
|
|
7
|
+
if (!config.wiki)
|
|
8
|
+
return [];
|
|
9
|
+
const base = config.wiki.parentPath.replace(/\/$/, '');
|
|
10
|
+
const pages = [];
|
|
11
|
+
// ---- Overview ----
|
|
12
|
+
pages.push({
|
|
13
|
+
path: `${base}/Overview`,
|
|
14
|
+
content: renderOverviewMarkdown(solutions, flows, pluginAssemblies),
|
|
15
|
+
});
|
|
16
|
+
// ---- Data Model ----
|
|
17
|
+
pages.push({
|
|
18
|
+
path: `${base}/Data Model`,
|
|
19
|
+
content: `# Data Model\n\n[[_TOSP_]]\n`,
|
|
20
|
+
});
|
|
21
|
+
for (const table of mergedSolution.tables) {
|
|
22
|
+
pages.push({
|
|
23
|
+
path: `${base}/Data Model/${table.displayName}`,
|
|
24
|
+
content: renderTableMarkdown(table, config),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// ---- Automation ----
|
|
28
|
+
const hasFlows = flows.length > 0;
|
|
29
|
+
const validAssemblies = pluginAssemblies.filter(a => a.assemblyName.trim() !== '');
|
|
30
|
+
const hasPlugins = validAssemblies.length > 0;
|
|
31
|
+
if (hasFlows || hasPlugins) {
|
|
32
|
+
pages.push({
|
|
33
|
+
path: `${base}/Automation`,
|
|
34
|
+
content: `# Automation\n\nPower Automate flows and plugins in this solution.\n`,
|
|
35
|
+
});
|
|
36
|
+
// ---- Flows ----
|
|
37
|
+
if (hasFlows) {
|
|
38
|
+
const flowsBasePath = `${base}/Automation/Flows`;
|
|
39
|
+
pages.push({
|
|
40
|
+
path: flowsBasePath,
|
|
41
|
+
content: renderFlowSummaryMarkdown(flows, flowsBasePath),
|
|
42
|
+
});
|
|
43
|
+
for (const flow of flows) {
|
|
44
|
+
pages.push({
|
|
45
|
+
path: `${flowsBasePath}/${flow.name}`,
|
|
46
|
+
content: renderSingleFlowMarkdown(flow),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ---- Plugins ----
|
|
51
|
+
if (hasPlugins) {
|
|
52
|
+
const pluginsBasePath = `${base}/Automation/Plugins`;
|
|
53
|
+
pages.push({
|
|
54
|
+
path: pluginsBasePath,
|
|
55
|
+
content: renderPluginSummaryMarkdown(validAssemblies),
|
|
56
|
+
});
|
|
57
|
+
for (const assembly of validAssemblies) {
|
|
58
|
+
const safeAssemblyName = assembly.assemblyName.replace(/\./g, '-');
|
|
59
|
+
const assemblyBasePath = `${pluginsBasePath}/${safeAssemblyName}`;
|
|
60
|
+
pages.push({
|
|
61
|
+
path: assemblyBasePath,
|
|
62
|
+
content: renderAssemblyIndexMarkdown(assembly, assemblyBasePath),
|
|
63
|
+
});
|
|
64
|
+
for (const fullName of assembly.pluginTypeNames) {
|
|
65
|
+
const shortName = fullName.startsWith(assembly.assemblyName + '.')
|
|
66
|
+
? fullName.slice(assembly.assemblyName.length + 1)
|
|
67
|
+
: fullName;
|
|
68
|
+
const steps = assembly.steps.filter(s => s.className === shortName);
|
|
69
|
+
pages.push({
|
|
70
|
+
path: `${assemblyBasePath}/${shortName}`,
|
|
71
|
+
content: renderSinglePluginTypeMarkdown(shortName, steps, assembly),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ---- Web Resources ----
|
|
77
|
+
const jsResources = webResources.filter(r => r.resourceType === 'JavaScript');
|
|
78
|
+
if (jsResources.length > 0) {
|
|
79
|
+
const wrBasePath = `${base}/Custom Code/Web Resources`;
|
|
80
|
+
pages.push({
|
|
81
|
+
path: `${base}/Custom Code`,
|
|
82
|
+
content: `# Custom Code\n\n[[_TOSP_]]\n`,
|
|
83
|
+
});
|
|
84
|
+
pages.push({
|
|
85
|
+
path: wrBasePath,
|
|
86
|
+
content: renderWebResourceSummaryMarkdown(jsResources),
|
|
87
|
+
});
|
|
88
|
+
for (const resource of jsResources) {
|
|
89
|
+
const title = resource.name.split('/').pop() ?? resource.name;
|
|
90
|
+
pages.push({
|
|
91
|
+
path: `${wrBasePath}/${title}`,
|
|
92
|
+
content: renderWebResourceDetailMarkdown(resource),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return pages;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=wikiAssembler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikiAssembler.js","sourceRoot":"","sources":["../../src/publisher/wikiAssembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WikiConfig } from '../config/index.js';
|
|
2
|
+
export interface WikiPage {
|
|
3
|
+
/** Full path from wiki root e.g. /Leave Management (App)/Data Model/vel_leaverequest */
|
|
4
|
+
path: string;
|
|
5
|
+
/** Markdown content */
|
|
6
|
+
content: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function publishToWiki(config: WikiConfig, pages: WikiPage[]): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=wikiPublisher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wikiPublisher.d.ts","sourceRoot":"","sources":["../../src/publisher/wikiPublisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAsJD,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|