powerautodoc 0.1.17 → 0.1.19
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 +20 -20
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +10 -5
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +11 -2
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/index.js +21 -10
- package/dist/index.js.map +1 -1
- package/dist/ir/environmentVariable.d.ts +25 -0
- package/dist/ir/environmentVariable.d.ts.map +1 -0
- package/dist/ir/environmentVariable.js +7 -0
- package/dist/ir/environmentVariable.js.map +1 -0
- package/dist/ir/index.d.ts +2 -0
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/securityRole.d.ts +30 -0
- package/dist/ir/securityRole.d.ts.map +1 -0
- package/dist/ir/securityRole.js +7 -0
- package/dist/ir/securityRole.js.map +1 -0
- package/dist/parsers/environmentVariableParser.d.ts +7 -0
- package/dist/parsers/environmentVariableParser.d.ts.map +1 -0
- package/dist/parsers/environmentVariableParser.js +87 -0
- package/dist/parsers/environmentVariableParser.js.map +1 -0
- package/dist/parsers/index.d.ts +2 -0
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +2 -0
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/securityRoleParser.d.ts +9 -0
- package/dist/parsers/securityRoleParser.d.ts.map +1 -0
- package/dist/parsers/securityRoleParser.js +111 -0
- package/dist/parsers/securityRoleParser.js.map +1 -0
- package/dist/publisher/wikiAssembler.d.ts +2 -4
- package/dist/publisher/wikiAssembler.d.ts.map +1 -1
- package/dist/publisher/wikiAssembler.js +27 -8
- package/dist/publisher/wikiAssembler.js.map +1 -1
- package/dist/renderers/environmentVariableRenderer.d.ts +8 -0
- package/dist/renderers/environmentVariableRenderer.d.ts.map +1 -0
- package/dist/renderers/environmentVariableRenderer.js +69 -0
- package/dist/renderers/environmentVariableRenderer.js.map +1 -0
- package/dist/renderers/index.d.ts +3 -1
- package/dist/renderers/index.d.ts.map +1 -1
- package/dist/renderers/index.js +3 -1
- package/dist/renderers/index.js.map +1 -1
- package/dist/renderers/securityRoleRenderer.d.ts +6 -0
- package/dist/renderers/securityRoleRenderer.d.ts.map +1 -0
- package/dist/renderers/securityRoleRenderer.js +105 -0
- package/dist/renderers/securityRoleRenderer.js.map +1 -0
- package/package.json +52 -52
package/README.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
# vel-docgen
|
|
2
|
-
|
|
3
|
-
Automated as-built documentation generator for Power Platform solutions.
|
|
4
|
-
|
|
5
|
-
Reads unpacked solution XML from Git and produces structured markdown documentation
|
|
6
|
-
for Azure DevOps Wiki — automatically, on every deployment.
|
|
7
|
-
|
|
8
|
-
## Quick Start
|
|
9
|
-
```bash
|
|
10
|
-
pac solution unpack --zipfile MySolution.zip --folder ./unpacked
|
|
11
|
-
npm install
|
|
12
|
-
npm run dev
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Architecture
|
|
16
|
-
|
|
17
|
-
See `docs/architecture.jsx` for the full system design (open as a React artifact in Claude).
|
|
18
|
-
|
|
19
|
-
## Output
|
|
20
|
-
|
|
1
|
+
# vel-docgen
|
|
2
|
+
|
|
3
|
+
Automated as-built documentation generator for Power Platform solutions.
|
|
4
|
+
|
|
5
|
+
Reads unpacked solution XML from Git and produces structured markdown documentation
|
|
6
|
+
for Azure DevOps Wiki — automatically, on every deployment.
|
|
7
|
+
|
|
8
|
+
## Quick Start
|
|
9
|
+
```bash
|
|
10
|
+
pac solution unpack --zipfile MySolution.zip --folder ./unpacked
|
|
11
|
+
npm install
|
|
12
|
+
npm run dev
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
See `docs/architecture.jsx` for the full system design (open as a React artifact in Claude).
|
|
18
|
+
|
|
19
|
+
## Output
|
|
20
|
+
|
|
21
21
|
Generated docs are written to `./output/`. See `src/config/` for filtering and render options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiBhD,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiBhD,eAAO,MAAM,eAAe,EAAE,YAoC7B,CAAC;AA4BF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,GAAE,MAAsB,GAAG,YAAY,CAmC1E"}
|
package/dist/config/loader.js
CHANGED
|
@@ -40,11 +40,16 @@ export const CONFIG_DEFAULTS = {
|
|
|
40
40
|
forms: true,
|
|
41
41
|
views: true,
|
|
42
42
|
relationships: true,
|
|
43
|
-
flows:
|
|
44
|
-
classicWorkflows:
|
|
45
|
-
plugins:
|
|
46
|
-
webResources:
|
|
47
|
-
|
|
43
|
+
flows: true,
|
|
44
|
+
classicWorkflows: true,
|
|
45
|
+
plugins: true,
|
|
46
|
+
webResources: true,
|
|
47
|
+
securityRoles: true,
|
|
48
|
+
environmentVariables: {
|
|
49
|
+
enabled: false,
|
|
50
|
+
showDefaultValue: true,
|
|
51
|
+
showCurrentValue: true,
|
|
52
|
+
},
|
|
48
53
|
},
|
|
49
54
|
};
|
|
50
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAGhC,MAAM,wBAAwB,GAAG;IAC/B,2BAA2B;IAC3B,2BAA2B;IAC3B,sBAAsB;IACtB,qBAAqB;IACrB,cAAc;IACd,uBAAuB;IACvB,YAAY;IACZ,YAAY;IACZ,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,eAAe,EAAE,EAAE;YACnB,IAAI,EAAE,KAAK;SACZ;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,UAAU;KACjB;IACD,KAAK,EAAE;QACL,iBAAiB,EAAE,KAAK;QACxB,yBAAyB,EAAE,IAAI;QAC/B,4BAA4B,EAAE,IAAI;QAClC,eAAe,EAAE,wBAAwB;KAC1C;IACD,MAAM,EAAE;QACN,UAAU,EAAE,SAAS;KACtB;IACD,UAAU,EAAE;QACV,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shape of doc-gen.config.yml
|
|
3
3
|
* All fields are optional — loader merges with defaults.
|
|
4
4
|
*/
|
|
5
|
-
export type SolutionRole = 'datamodel' | 'flows' | 'classicWorkflows' | 'plugins' | 'webresources' | '
|
|
5
|
+
export type SolutionRole = 'datamodel' | 'flows' | 'classicWorkflows' | 'plugins' | 'webresources' | 'securityRoles' | 'environmentVariables' | 'all';
|
|
6
6
|
export interface SolutionEntry {
|
|
7
7
|
/** Path to the unpacked solution folder (relative to config file) */
|
|
8
8
|
path: string;
|
|
@@ -13,6 +13,14 @@ export interface SolutionEntry {
|
|
|
13
13
|
/** Optional display name — used in wiki headings. Defaults to folder name. */
|
|
14
14
|
displayName?: string;
|
|
15
15
|
}
|
|
16
|
+
export interface EnvironmentVariablesConfig {
|
|
17
|
+
/** Include environment variables in the output. Default: false */
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
/** Include the Default Value column. Default: true */
|
|
20
|
+
showDefaultValue: boolean;
|
|
21
|
+
/** Include the Current Value column. Default: true */
|
|
22
|
+
showCurrentValue: boolean;
|
|
23
|
+
}
|
|
16
24
|
export interface DocGenConfig {
|
|
17
25
|
solutions: SolutionEntry[];
|
|
18
26
|
output: {
|
|
@@ -43,7 +51,8 @@ export interface DocGenConfig {
|
|
|
43
51
|
classicWorkflows: boolean;
|
|
44
52
|
plugins: boolean;
|
|
45
53
|
webResources: boolean;
|
|
46
|
-
|
|
54
|
+
securityRoles: boolean;
|
|
55
|
+
environmentVariables: EnvironmentVariablesConfig;
|
|
47
56
|
};
|
|
48
57
|
wiki?: WikiConfig;
|
|
49
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,kBAAkB,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,GAAG,sBAAsB,GAAG,KAAK,CAAC;AAEtJ,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,IAAI,EAAE,YAAY,CAAC;IACnB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,aAAa,EAAE,CAAC;IAE3B,MAAM,EAAE;QACN,kDAAkD;QAClD,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,KAAK,EAAE;QACL,4DAA4D;QAC5D,iBAAiB,EAAE,OAAO,CAAC;QAC3B,8DAA8D;QAC9D,yBAAyB,EAAE,OAAO,CAAC;QACnC,sDAAsD;QACtD,4BAA4B,EAAE,OAAO,CAAC;QACtC,oDAAoD;QACpD,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IAEF,MAAM,EAAE;QACN,4FAA4F;QAC5F,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC;KACpC,CAAC;IAEF,UAAU,EAAE;QACV,iDAAiD;QACjD,MAAM,EAAE,OAAO,CAAC;QAChB,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,EAAE,OAAO,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;QACvB,KAAK,EAAE,OAAO,CAAC;QACf,gBAAgB,EAAE,OAAO,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,oBAAoB,EAAE,0BAA0B,CAAC;KAClD,CAAC;IAEF,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;CACb"}
|
package/dist/index.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { loadConfig } from './config/index.js';
|
|
3
|
-
import { parseSolution, parseSolutionManifest } from './parsers/index.js';
|
|
4
|
-
import { writeTableMarkdown, writeOverviewMarkdown, writePluginMarkdown } from './renderers/index.js';
|
|
5
|
-
import { parseAllFlows } from './parsers/index.js';
|
|
6
|
-
import { writeFlowMarkdown } from './renderers/index.js';
|
|
3
|
+
import { parseSolution, parseSolutionManifest, parseAllFlows, parseClassicWorkflows, parseBusinessRules, parseAllPlugins, parseAllWebResources, parseSecurityRoles, parseEnvironmentVariables, } from './parsers/index.js';
|
|
4
|
+
import { writeTableMarkdown, writeOverviewMarkdown, writeFlowMarkdown, writePluginMarkdown, writeWebResourceMarkdown, } from './renderers/index.js';
|
|
7
5
|
import { publishToWiki } from './publisher/wikiPublisher.js';
|
|
8
6
|
import { buildWikiPages } from './publisher/wikiAssembler.js';
|
|
9
|
-
import { parseAllPlugins } from './parsers/index.js';
|
|
10
|
-
import { parseAllWebResources } from './parsers/index.js';
|
|
11
|
-
import { writeWebResourceMarkdown } from './renderers/index.js';
|
|
12
|
-
import { parseClassicWorkflows } from './parsers/classicWorkflowParser.js';
|
|
13
|
-
import { parseBusinessRules } from './parsers/businessRuleParser.js';
|
|
14
7
|
async function main() {
|
|
15
8
|
const config = loadConfig();
|
|
16
9
|
const { path: outputPath } = config.output;
|
|
@@ -21,6 +14,8 @@ async function main() {
|
|
|
21
14
|
const allBusinessRules = [];
|
|
22
15
|
const allPluginAssemblies = [];
|
|
23
16
|
const allWebResources = [];
|
|
17
|
+
const allSecurityRoles = [];
|
|
18
|
+
const allEnvVars = [];
|
|
24
19
|
for (const solutionEntry of config.solutions) {
|
|
25
20
|
const { path: unpackedPath, role, publisherPrefix } = solutionEntry;
|
|
26
21
|
console.log(`\nProcessing solution: ${unpackedPath} (role: ${role})`);
|
|
@@ -36,6 +31,8 @@ async function main() {
|
|
|
36
31
|
const isClassicWorkflows = role === 'classicWorkflows' || role === 'all';
|
|
37
32
|
const isPlugins = role === 'plugins' || role === 'all';
|
|
38
33
|
const isWebResources = role === 'webresources' || role === 'all';
|
|
34
|
+
const isSecurity = role === 'all' || role === 'securityRoles';
|
|
35
|
+
const isEnvVars = role === 'all' || role === 'environmentVariables';
|
|
39
36
|
// Always parse the manifest so every solution appears in the Overview
|
|
40
37
|
const manifest = parseSolutionManifest(unpackedPath);
|
|
41
38
|
// ---- Data model ----
|
|
@@ -95,10 +92,24 @@ async function main() {
|
|
|
95
92
|
writeWebResourceMarkdown(webResources, outputPath);
|
|
96
93
|
console.log(` Parsed ${webResources.length} web resources from: ${unpackedPath}`);
|
|
97
94
|
}
|
|
95
|
+
// ---- Security Roles ----
|
|
96
|
+
if (isSecurity && config.components.securityRoles) {
|
|
97
|
+
const roles = parseSecurityRoles(unpackedPath, publisherPrefix);
|
|
98
|
+
allSecurityRoles.push(...roles);
|
|
99
|
+
console.log(` Parsed ${roles.length} security roles from: ${unpackedPath}`);
|
|
100
|
+
}
|
|
101
|
+
// ---- Environment Variables ----
|
|
102
|
+
if ((role === 'all' || role === 'environmentVariables') && config.components.environmentVariables.enabled) {
|
|
103
|
+
const envVars = parseEnvironmentVariables(unpackedPath);
|
|
104
|
+
allEnvVars.push(...envVars);
|
|
105
|
+
if (envVars.length > 0) {
|
|
106
|
+
console.log(` Parsed ${envVars.length} environment variables from: ${unpackedPath}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
98
109
|
}
|
|
99
110
|
// ---- Wiki publish ----
|
|
100
111
|
if (config.wiki && mergedSolution) {
|
|
101
|
-
const pages = buildWikiPages(config, allSolutions, mergedSolution, allFlows, allPluginAssemblies, allWebResources, allClassicWorkflows, allBusinessRules);
|
|
112
|
+
const pages = buildWikiPages(config, allSolutions, mergedSolution, allFlows, allPluginAssemblies, allWebResources, allClassicWorkflows, allBusinessRules, allSecurityRoles, allEnvVars);
|
|
102
113
|
await publishToWiki(config.wiki, pages);
|
|
103
114
|
}
|
|
104
115
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IR model for Environment Variable Definitions.
|
|
3
|
+
* Each definition may have an optional current value (from environmentvariablevalues.json).
|
|
4
|
+
* If no value file exists, currentValue is undefined and defaultValue applies.
|
|
5
|
+
*/
|
|
6
|
+
export type EnvironmentVariableType = 'String' | 'Number' | 'Boolean' | 'JSON' | 'DataSource' | 'Unknown';
|
|
7
|
+
export interface EnvironmentVariableModel {
|
|
8
|
+
/** Schema name, e.g. "isms_AccountTypeSchool" */
|
|
9
|
+
schemaName: string;
|
|
10
|
+
/** Display name, e.g. "Account Type - School" */
|
|
11
|
+
displayName: string;
|
|
12
|
+
/** Description / purpose */
|
|
13
|
+
description: string;
|
|
14
|
+
/** Data type */
|
|
15
|
+
type: EnvironmentVariableType;
|
|
16
|
+
/** Default value from the definition XML (may be empty) */
|
|
17
|
+
defaultValue: string;
|
|
18
|
+
/** Current value from environmentvariablevalues.json (undefined if not set) */
|
|
19
|
+
currentValue: string | undefined;
|
|
20
|
+
/** Whether this variable is required */
|
|
21
|
+
isRequired: boolean;
|
|
22
|
+
/** Whether the value is stored in a secret store (0=none, 1=Azure KV, 2=MS Secret Store) */
|
|
23
|
+
secretStore: number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=environmentVariable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariable.d.ts","sourceRoot":"","sources":["../../src/ir/environmentVariable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,uBAAuB,GAC/B,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,YAAY,GACZ,SAAS,CAAC;AAEd,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,wCAAwC;IACxC,UAAU,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IR model for Environment Variable Definitions.
|
|
3
|
+
* Each definition may have an optional current value (from environmentvariablevalues.json).
|
|
4
|
+
* If no value file exists, currentValue is undefined and defaultValue applies.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=environmentVariable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariable.js","sourceRoot":"","sources":["../../src/ir/environmentVariable.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/dist/ir/index.d.ts
CHANGED
|
@@ -8,5 +8,7 @@ export type { PluginStage, PluginMode, ImageType, PluginStepImageModel, PluginSt
|
|
|
8
8
|
export type { WebResourceType, WebResourceFunction, WebResourceModel } from './webResource.js';
|
|
9
9
|
export type { ClassicWorkflowCategory, ClassicWorkflowMode, ClassicWorkflowScope, ClassicWorkflowStepModel, ClassicWorkflowTriggers, ClassicWorkflowModel } from './classicWorkflow.js';
|
|
10
10
|
export type { BusinessRuleModel, BusinessRuleCondition, BusinessRuleAction, BusinessRuleActionType, BusinessRuleScope } from './businessRule.js';
|
|
11
|
+
export type { SecurityRoleModel, EntityPrivileges, PrivilegeLevel } from './securityRole.js';
|
|
12
|
+
export type { EnvironmentVariableModel, EnvironmentVariableType } from './environmentVariable.js';
|
|
11
13
|
export { WEB_RESOURCE_TYPE_MAP } from './webResource.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/ir/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7G,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClI,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACvL,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjJ,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC7G,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClI,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACvL,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACjJ,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7F,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/ir/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IR model for Security Roles
|
|
3
|
+
* Privilege levels map directly to Dataverse access levels.
|
|
4
|
+
* "None" is inferred — absent privilege entry in the XML means no access.
|
|
5
|
+
*/
|
|
6
|
+
export type PrivilegeLevel = 'Global' | 'Deep' | 'Local' | 'Basic' | 'None';
|
|
7
|
+
export type PrivilegeOperation = 'create' | 'read' | 'write' | 'delete' | 'append' | 'appendTo' | 'assign' | 'share';
|
|
8
|
+
export interface EntityPrivileges {
|
|
9
|
+
/** Display name derived from the privilege name, e.g. "Enrolment" */
|
|
10
|
+
entityName: string;
|
|
11
|
+
/** Logical name including publisher prefix, e.g. "isms_enrolment" */
|
|
12
|
+
entityLogicalName: string;
|
|
13
|
+
create: PrivilegeLevel;
|
|
14
|
+
read: PrivilegeLevel;
|
|
15
|
+
write: PrivilegeLevel;
|
|
16
|
+
delete: PrivilegeLevel;
|
|
17
|
+
append: PrivilegeLevel;
|
|
18
|
+
appendTo: PrivilegeLevel;
|
|
19
|
+
assign: PrivilegeLevel;
|
|
20
|
+
share: PrivilegeLevel;
|
|
21
|
+
}
|
|
22
|
+
export interface SecurityRoleModel {
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
isCustomizable: boolean;
|
|
26
|
+
isAutoAssigned: boolean;
|
|
27
|
+
/** Custom entity privileges only (filtered via publisher prefix) */
|
|
28
|
+
privileges: EntityPrivileges[];
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=securityRole.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRole.d.ts","sourceRoot":"","sources":["../../src/ir/securityRole.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GACxB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,OAAO,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC7B,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,oEAAoE;IACpE,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAClC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRole.js","sourceRoot":"","sources":["../../src/ir/securityRole.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EnvironmentVariableModel } from '../ir/environmentVariable.js';
|
|
2
|
+
/**
|
|
3
|
+
* Scans the EnvironmentVariableDefinitions/ folder and returns a model per variable.
|
|
4
|
+
* Sorted alphabetically by display name.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseEnvironmentVariables(solutionRoot: string): EnvironmentVariableModel[];
|
|
7
|
+
//# sourceMappingURL=environmentVariableParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariableParser.d.ts","sourceRoot":"","sources":["../../src/parsers/environmentVariableParser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAA2B,MAAM,8BAA8B,CAAC;AAgFtG;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAU1F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
4
|
+
const xmlParser = new XMLParser({
|
|
5
|
+
ignoreAttributes: false,
|
|
6
|
+
attributeNamePrefix: '@_',
|
|
7
|
+
isArray: () => false,
|
|
8
|
+
});
|
|
9
|
+
// Maps Dataverse type codes to readable labels
|
|
10
|
+
const TYPE_MAP = {
|
|
11
|
+
'100000000': 'String',
|
|
12
|
+
'100000001': 'Number',
|
|
13
|
+
'100000002': 'Boolean',
|
|
14
|
+
'100000003': 'JSON',
|
|
15
|
+
'100000010': 'DataSource',
|
|
16
|
+
};
|
|
17
|
+
function parseType(raw) {
|
|
18
|
+
return TYPE_MAP[String(raw ?? '')] ?? 'Unknown';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Reads a single EnvironmentVariableDefinitions/{schemaName}/ folder.
|
|
22
|
+
* Returns null if the definition file is missing or malformed.
|
|
23
|
+
*/
|
|
24
|
+
function parseEnvVarFolder(folderPath) {
|
|
25
|
+
const defPath = path.join(folderPath, 'environmentvariabledefinition.xml');
|
|
26
|
+
if (!fs.existsSync(defPath))
|
|
27
|
+
return null;
|
|
28
|
+
const xml = fs.readFileSync(defPath, 'utf-8');
|
|
29
|
+
const doc = xmlParser.parse(xml);
|
|
30
|
+
const def = doc['environmentvariabledefinition'];
|
|
31
|
+
if (!def)
|
|
32
|
+
return null;
|
|
33
|
+
const schemaName = def['@_schemaname'] ?? path.basename(folderPath);
|
|
34
|
+
// Display name — prefer the `default` attribute on the <displayname> element
|
|
35
|
+
const displayName = def['displayname']?.['@_default'] ??
|
|
36
|
+
def['displayname'] ??
|
|
37
|
+
schemaName;
|
|
38
|
+
// Description
|
|
39
|
+
const description = def['description']?.['@_default'] ??
|
|
40
|
+
def['description'] ??
|
|
41
|
+
'';
|
|
42
|
+
const defaultValue = String(def['defaultvalue'] ?? '');
|
|
43
|
+
const isRequired = String(def['isrequired']) === '1';
|
|
44
|
+
const secretStore = Number(def['secretstore'] ?? 0);
|
|
45
|
+
const type = parseType(def['type']);
|
|
46
|
+
// Try to read the current value from the optional values JSON
|
|
47
|
+
let currentValue;
|
|
48
|
+
const valPath = path.join(folderPath, 'environmentvariablevalues.json');
|
|
49
|
+
if (fs.existsSync(valPath)) {
|
|
50
|
+
try {
|
|
51
|
+
const json = JSON.parse(fs.readFileSync(valPath, 'utf-8'));
|
|
52
|
+
const raw = json?.environmentvariablevalues?.environmentvariablevalue?.value;
|
|
53
|
+
if (raw !== undefined && raw !== null && String(raw).trim() !== '') {
|
|
54
|
+
currentValue = String(raw);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// malformed JSON — leave currentValue undefined
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
schemaName,
|
|
63
|
+
displayName,
|
|
64
|
+
description,
|
|
65
|
+
type,
|
|
66
|
+
defaultValue,
|
|
67
|
+
currentValue,
|
|
68
|
+
isRequired,
|
|
69
|
+
secretStore,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Scans the EnvironmentVariableDefinitions/ folder and returns a model per variable.
|
|
74
|
+
* Sorted alphabetically by display name.
|
|
75
|
+
*/
|
|
76
|
+
export function parseEnvironmentVariables(solutionRoot) {
|
|
77
|
+
const defsDir = path.join(solutionRoot, 'EnvironmentVariableDefinitions');
|
|
78
|
+
if (!fs.existsSync(defsDir))
|
|
79
|
+
return [];
|
|
80
|
+
return fs
|
|
81
|
+
.readdirSync(defsDir, { withFileTypes: true })
|
|
82
|
+
.filter(e => e.isDirectory())
|
|
83
|
+
.map(e => parseEnvVarFolder(path.join(defsDir, e.name)))
|
|
84
|
+
.filter((m) => m !== null)
|
|
85
|
+
.sort((a, b) => a.displayName.localeCompare(b.displayName));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=environmentVariableParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariableParser.js","sourceRoot":"","sources":["../../src/parsers/environmentVariableParser.ts"],"names":[],"mappings":"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"}
|
package/dist/parsers/index.d.ts
CHANGED
|
@@ -9,4 +9,6 @@ export { parseAllPlugins } from './pluginParser.js';
|
|
|
9
9
|
export { parseAllWebResources } from './webResourceParser.js';
|
|
10
10
|
export { parseClassicWorkflows } from './classicWorkflowParser.js';
|
|
11
11
|
export { parseBusinessRules } from './businessRuleParser.js';
|
|
12
|
+
export { parseSecurityRoles } from './securityRoleParser.js';
|
|
13
|
+
export { parseEnvironmentVariables } from './environmentVariableParser.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/parsers/index.js
CHANGED
|
@@ -9,4 +9,6 @@ export { parseAllPlugins } from './pluginParser.js';
|
|
|
9
9
|
export { parseAllWebResources } from './webResourceParser.js';
|
|
10
10
|
export { parseClassicWorkflows } from './classicWorkflowParser.js';
|
|
11
11
|
export { parseBusinessRules } from './businessRuleParser.js';
|
|
12
|
+
export { parseSecurityRoles } from './securityRoleParser.js';
|
|
13
|
+
export { parseEnvironmentVariables } from './environmentVariableParser.js';
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SecurityRoleModel } from '../ir/securityRole.js';
|
|
2
|
+
export declare function parseSecurityRole(filePath: string, publisherPrefix?: string): SecurityRoleModel;
|
|
3
|
+
/**
|
|
4
|
+
* Scans a solution's Roles/ folder and returns a model per role file.
|
|
5
|
+
* Pass publisherPrefix (e.g. "isms") to filter privileges to that solution's
|
|
6
|
+
* custom entities only. Without it, all entities with underscores are included.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseSecurityRoles(solutionRoot: string, publisherPrefix?: string): SecurityRoleModel[];
|
|
9
|
+
//# sourceMappingURL=securityRoleParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRoleParser.d.ts","sourceRoot":"","sources":["../../src/parsers/securityRoleParser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,iBAAiB,EAGpB,MAAM,uBAAuB,CAAC;AAmF/B,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAyC/F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAUtG"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
4
|
+
const parser = new XMLParser({ ignoreAttributes: false, attributeNamePrefix: '@_' });
|
|
5
|
+
// Maps XML level strings to our PrivilegeLevel type
|
|
6
|
+
function parseLevel(level) {
|
|
7
|
+
switch (level) {
|
|
8
|
+
case 'Global': return 'Global';
|
|
9
|
+
case 'Deep': return 'Deep';
|
|
10
|
+
case 'Local': return 'Local';
|
|
11
|
+
case 'Basic': return 'Basic';
|
|
12
|
+
default: return 'None';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
// Extracts operation and entity logical name from privilege name string.
|
|
16
|
+
// e.g. "prvCreateisms_Enrolment" → { op: "create", entityLogical: "isms_enrolment" }
|
|
17
|
+
// e.g. "prvAppendToisms_Enrolment" → { op: "appendTo", entityLogical: "isms_enrolment" }
|
|
18
|
+
const PRIV_REGEX = /^prv(Create|Read|Write|Delete|AppendTo|Append|Assign|Share)(.+)$/i;
|
|
19
|
+
function parsePrivilegeName(name, level, publisherPrefix) {
|
|
20
|
+
const match = name.match(PRIV_REGEX);
|
|
21
|
+
if (!match)
|
|
22
|
+
return null;
|
|
23
|
+
const opRaw = match[1].toLowerCase();
|
|
24
|
+
const entityPart = match[2];
|
|
25
|
+
// If a publisher prefix is provided, only accept entities with that prefix.
|
|
26
|
+
// e.g. publisherPrefix="isms" filters to "isms_*" entities only.
|
|
27
|
+
if (publisherPrefix) {
|
|
28
|
+
if (!entityPart.toLowerCase().startsWith(`${publisherPrefix.toLowerCase()}_`))
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Without a prefix, at minimum require an underscore (i.e. exclude standard OOB entities).
|
|
33
|
+
if (!entityPart.includes('_'))
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
// Normalise entity logical name to lowercase
|
|
37
|
+
const entityLogical = entityPart.toLowerCase();
|
|
38
|
+
const op = opRaw === 'appendto'
|
|
39
|
+
? 'appendTo'
|
|
40
|
+
: opRaw;
|
|
41
|
+
return { op, entityLogical, originalEntityPart: entityPart, level: parseLevel(level) };
|
|
42
|
+
}
|
|
43
|
+
// Derives a display name from the original (pre-lowercase) entity part.
|
|
44
|
+
// Strips the publisher prefix: "isms_AccountType" → "AccountType"
|
|
45
|
+
function deriveDisplayName(originalEntityPart) {
|
|
46
|
+
const withoutPrefix = originalEntityPart.replace(/^[a-zA-Z0-9]+_/, '');
|
|
47
|
+
return withoutPrefix.charAt(0).toUpperCase() + withoutPrefix.slice(1);
|
|
48
|
+
}
|
|
49
|
+
function emptyPrivileges(entityLogical, originalEntityPart) {
|
|
50
|
+
return {
|
|
51
|
+
entityName: deriveDisplayName(originalEntityPart),
|
|
52
|
+
entityLogicalName: entityLogical,
|
|
53
|
+
create: 'None',
|
|
54
|
+
read: 'None',
|
|
55
|
+
write: 'None',
|
|
56
|
+
delete: 'None',
|
|
57
|
+
append: 'None',
|
|
58
|
+
appendTo: 'None',
|
|
59
|
+
assign: 'None',
|
|
60
|
+
share: 'None',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function parseSecurityRole(filePath, publisherPrefix) {
|
|
64
|
+
const xml = fs.readFileSync(filePath, 'utf-8');
|
|
65
|
+
const doc = parser.parse(xml);
|
|
66
|
+
const role = doc['Role'];
|
|
67
|
+
const id = role['@_id'] ?? '';
|
|
68
|
+
const name = role['@_name'] ?? path.basename(filePath, '.xml');
|
|
69
|
+
const isCustomizable = String(role['IsCustomizable']) === '1';
|
|
70
|
+
const isAutoAssigned = String(role['IsAutoAssigned']) === '1';
|
|
71
|
+
// Build entity privilege map
|
|
72
|
+
const entityMap = new Map();
|
|
73
|
+
const rawPrivileges = role['RolePrivileges']?.['RolePrivilege'];
|
|
74
|
+
const privArray = Array.isArray(rawPrivileges)
|
|
75
|
+
? rawPrivileges
|
|
76
|
+
: rawPrivileges
|
|
77
|
+
? [rawPrivileges]
|
|
78
|
+
: [];
|
|
79
|
+
for (const priv of privArray) {
|
|
80
|
+
const privName = priv['@_name'] ?? '';
|
|
81
|
+
const level = priv['@_level'] ?? '';
|
|
82
|
+
const parsed = parsePrivilegeName(privName, level, publisherPrefix);
|
|
83
|
+
if (!parsed)
|
|
84
|
+
continue;
|
|
85
|
+
if (!entityMap.has(parsed.entityLogical)) {
|
|
86
|
+
entityMap.set(parsed.entityLogical, emptyPrivileges(parsed.entityLogical, parsed.originalEntityPart));
|
|
87
|
+
}
|
|
88
|
+
const entry = entityMap.get(parsed.entityLogical);
|
|
89
|
+
entry[parsed.op] = parsed.level;
|
|
90
|
+
}
|
|
91
|
+
// Sort entities alphabetically by display name
|
|
92
|
+
const privileges = Array.from(entityMap.values()).sort((a, b) => a.entityName.localeCompare(b.entityName));
|
|
93
|
+
return { id, name, isCustomizable, isAutoAssigned, privileges };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Scans a solution's Roles/ folder and returns a model per role file.
|
|
97
|
+
* Pass publisherPrefix (e.g. "isms") to filter privileges to that solution's
|
|
98
|
+
* custom entities only. Without it, all entities with underscores are included.
|
|
99
|
+
*/
|
|
100
|
+
export function parseSecurityRoles(solutionRoot, publisherPrefix) {
|
|
101
|
+
const rolesDir = path.join(solutionRoot, 'Roles');
|
|
102
|
+
if (!fs.existsSync(rolesDir))
|
|
103
|
+
return [];
|
|
104
|
+
return fs
|
|
105
|
+
.readdirSync(rolesDir)
|
|
106
|
+
.filter(f => f.endsWith('.xml'))
|
|
107
|
+
.map(f => parseSecurityRole(path.join(rolesDir, f), publisherPrefix))
|
|
108
|
+
.filter(r => r.name.length > 0)
|
|
109
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=securityRoleParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRoleParser.js","sourceRoot":"","sources":["../../src/parsers/securityRoleParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { DocGenConfig } from '../config/index.js';
|
|
2
|
-
import type { SolutionModel, FlowModel, PluginAssemblyModel, WebResourceModel } from '../ir/index.js';
|
|
3
|
-
import type { ClassicWorkflowModel } from '../ir/classicWorkflow.js';
|
|
4
|
-
import type { BusinessRuleModel } from '../ir/businessRule.js';
|
|
2
|
+
import type { SolutionModel, FlowModel, PluginAssemblyModel, WebResourceModel, SecurityRoleModel, ClassicWorkflowModel, BusinessRuleModel, EnvironmentVariableModel } from '../ir/index.js';
|
|
5
3
|
import type { WikiPage } from './wikiPublisher.js';
|
|
6
|
-
export declare function buildWikiPages(config: DocGenConfig, solutions: SolutionModel[], mergedSolution: SolutionModel, flows: FlowModel[], pluginAssemblies?: PluginAssemblyModel[], webResources?: WebResourceModel[], classicWorkflows?: ClassicWorkflowModel[], businessRules?: BusinessRuleModel[]): WikiPage[];
|
|
4
|
+
export declare function buildWikiPages(config: DocGenConfig, solutions: SolutionModel[], mergedSolution: SolutionModel, flows: FlowModel[], pluginAssemblies?: PluginAssemblyModel[], webResources?: WebResourceModel[], classicWorkflows?: ClassicWorkflowModel[], businessRules?: BusinessRuleModel[], securityRoles?: SecurityRoleModel[], envVars?: EnvironmentVariableModel[]): WikiPage[];
|
|
7
5
|
//# sourceMappingURL=wikiAssembler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikiAssembler.d.ts","sourceRoot":"","sources":["../../src/publisher/wikiAssembler.ts"],"names":[],"mappings":"
|
|
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,EACV,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,gBAAgB,EAC/D,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,wBAAwB,EACrF,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AA0BnD,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,EACrC,gBAAgB,GAAE,oBAAoB,EAAO,EAC7C,aAAa,GAAE,iBAAiB,EAAO,EACvC,aAAa,GAAE,iBAAiB,EAAO,EACvC,OAAO,GAAE,wBAAwB,EAAO,GACvC,QAAQ,EAAE,CA8MZ"}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { renderOverviewMarkdown } from '../renderers/index.js';
|
|
3
|
-
import { renderTableIndexMarkdown, renderTableColumnsMarkdown, renderTableViewsMarkdown, renderTableFormsMarkdown, renderTableRelationshipsMarkdown, renderTableBusinessRulesMarkdown, renderSingleBusinessRuleMarkdown, } from '../renderers/tableRenderer.js';
|
|
4
|
-
import { renderFlowSummaryMarkdown, renderSingleFlowMarkdown } from '../renderers/index.js';
|
|
5
|
-
import { renderPluginSummaryMarkdown, renderAssemblyIndexMarkdown, renderSinglePluginTypeMarkdown } from '../renderers/index.js';
|
|
6
|
-
import { renderWebResourceSummaryMarkdown, renderWebResourceDetailMarkdown } from '../renderers/index.js';
|
|
7
|
-
import { renderClassicWorkflowMarkdown, renderClassicWorkflowsOverview } from '../renderers/classicWorkflowRenderer.js';
|
|
1
|
+
import { renderOverviewMarkdown, renderTableIndexMarkdown, renderTableColumnsMarkdown, renderTableViewsMarkdown, renderTableFormsMarkdown, renderTableRelationshipsMarkdown, renderTableBusinessRulesMarkdown, renderSingleBusinessRuleMarkdown, renderFlowSummaryMarkdown, renderSingleFlowMarkdown, renderPluginSummaryMarkdown, renderAssemblyIndexMarkdown, renderSinglePluginTypeMarkdown, renderWebResourceSummaryMarkdown, renderWebResourceDetailMarkdown, renderClassicWorkflowMarkdown, renderClassicWorkflowsOverview, renderSecurityRolesIndex, renderSecurityRolePage, encodeRoleName, renderEnvironmentVariablesPage, } from '../renderers/index.js';
|
|
8
2
|
/**
|
|
9
3
|
* Sanitise a string for use as an ADO Wiki page path segment.
|
|
10
4
|
* ADO interprets '/' as a path separator and '?' as a query string.
|
|
@@ -16,7 +10,7 @@ function s(name) {
|
|
|
16
10
|
.replace(/[#%]/g, '')
|
|
17
11
|
.trim();
|
|
18
12
|
}
|
|
19
|
-
export function buildWikiPages(config, solutions, mergedSolution, flows, pluginAssemblies = [], webResources = [], classicWorkflows = [], businessRules = []) {
|
|
13
|
+
export function buildWikiPages(config, solutions, mergedSolution, flows, pluginAssemblies = [], webResources = [], classicWorkflows = [], businessRules = [], securityRoles = [], envVars = []) {
|
|
20
14
|
if (!config.wiki)
|
|
21
15
|
return [];
|
|
22
16
|
const base = config.wiki.parentPath.replace(/\/$/, '');
|
|
@@ -163,6 +157,31 @@ export function buildWikiPages(config, solutions, mergedSolution, flows, pluginA
|
|
|
163
157
|
});
|
|
164
158
|
}
|
|
165
159
|
}
|
|
160
|
+
// ---- Security Roles----
|
|
161
|
+
if (securityRoles.length > 0) {
|
|
162
|
+
const secBasePath = `${base}/Security`;
|
|
163
|
+
pages.push({
|
|
164
|
+
path: secBasePath,
|
|
165
|
+
content: renderSecurityRolesIndex(securityRoles),
|
|
166
|
+
});
|
|
167
|
+
for (const role of securityRoles) {
|
|
168
|
+
pages.push({
|
|
169
|
+
path: `${secBasePath}/${s(encodeRoleName(role.name))}`,
|
|
170
|
+
content: renderSecurityRolePage(role),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// ---- Integrations ----
|
|
175
|
+
if (envVars.length > 0) {
|
|
176
|
+
pages.push({
|
|
177
|
+
path: `${base}/Integrations`,
|
|
178
|
+
content: `# Integrations\n\n[[_TOSP_]]\n`,
|
|
179
|
+
});
|
|
180
|
+
pages.push({
|
|
181
|
+
path: `${base}/Integrations/Environment Variables`,
|
|
182
|
+
content: renderEnvironmentVariablesPage(envVars, config.components.environmentVariables),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
166
185
|
return pages;
|
|
167
186
|
}
|
|
168
187
|
//# sourceMappingURL=wikiAssembler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wikiAssembler.js","sourceRoot":"","sources":["../../src/publisher/wikiAssembler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wikiAssembler.js","sourceRoot":"","sources":["../../src/publisher/wikiAssembler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { EnvironmentVariableModel } from '../ir/environmentVariable.js';
|
|
2
|
+
import type { EnvironmentVariablesConfig } from '../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Renders the Integrations / Environment Variables wiki page.
|
|
5
|
+
* Columns shown are controlled by the EnvironmentVariablesConfig options.
|
|
6
|
+
*/
|
|
7
|
+
export declare function renderEnvironmentVariablesPage(envVars: EnvironmentVariableModel[], options?: Pick<EnvironmentVariablesConfig, 'showDefaultValue' | 'showCurrentValue'>): string;
|
|
8
|
+
//# sourceMappingURL=environmentVariableRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariableRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/environmentVariableRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAwBtE;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,wBAAwB,EAAE,EACnC,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,kBAAkB,GAAG,kBAAkB,CAGhF,GACA,MAAM,CA+CR"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const SECRET_STORE_LABELS = {
|
|
2
|
+
0: '—',
|
|
3
|
+
1: 'Azure Key Vault',
|
|
4
|
+
2: 'Microsoft Secret Store',
|
|
5
|
+
};
|
|
6
|
+
function secretStoreLabel(n) {
|
|
7
|
+
return SECRET_STORE_LABELS[n] ?? `Unknown (${n})`;
|
|
8
|
+
}
|
|
9
|
+
function renderDefaultValue(model) {
|
|
10
|
+
if (model.secretStore > 0)
|
|
11
|
+
return '_[secret]_';
|
|
12
|
+
if (model.defaultValue !== '')
|
|
13
|
+
return `\`${model.defaultValue}\``;
|
|
14
|
+
return '_Not set_';
|
|
15
|
+
}
|
|
16
|
+
function renderCurrentValue(model) {
|
|
17
|
+
if (model.secretStore > 0)
|
|
18
|
+
return '_[secret — stored externally]_';
|
|
19
|
+
if (model.currentValue !== undefined)
|
|
20
|
+
return `\`${model.currentValue}\``;
|
|
21
|
+
return '_Not set_';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Renders the Integrations / Environment Variables wiki page.
|
|
25
|
+
* Columns shown are controlled by the EnvironmentVariablesConfig options.
|
|
26
|
+
*/
|
|
27
|
+
export function renderEnvironmentVariablesPage(envVars, options = {
|
|
28
|
+
showDefaultValue: true,
|
|
29
|
+
showCurrentValue: true,
|
|
30
|
+
}) {
|
|
31
|
+
const lines = [];
|
|
32
|
+
lines.push('# Environment Variables\n');
|
|
33
|
+
if (envVars.length === 0) {
|
|
34
|
+
lines.push('_No environment variables found in this solution._');
|
|
35
|
+
return lines.join('\n');
|
|
36
|
+
}
|
|
37
|
+
lines.push(`${envVars.length} environment variable${envVars.length === 1 ? '' : 's'} defined in this solution.\n`);
|
|
38
|
+
const hasDataSource = envVars.some(v => v.type === 'DataSource');
|
|
39
|
+
if (hasDataSource) {
|
|
40
|
+
lines.push('> **DataSource** variables hold a record GUID referencing a Dataverse lookup. ' +
|
|
41
|
+
'The value shown is the resolved GUID — check the target table for the display name.\n');
|
|
42
|
+
}
|
|
43
|
+
// Build headers and rows dynamically based on options
|
|
44
|
+
const headers = ['Display Name', 'Schema Name', 'Type', 'Required'];
|
|
45
|
+
if (options.showDefaultValue)
|
|
46
|
+
headers.push('Default Value');
|
|
47
|
+
if (options.showCurrentValue)
|
|
48
|
+
headers.push('Current Value');
|
|
49
|
+
headers.push('Secret Store');
|
|
50
|
+
const sep = headers.map(() => '---');
|
|
51
|
+
lines.push(`| ${headers.join(' | ')} |`);
|
|
52
|
+
lines.push(`| ${sep.join(' | ')} |`);
|
|
53
|
+
for (const v of envVars) {
|
|
54
|
+
const row = [
|
|
55
|
+
v.displayName || v.schemaName,
|
|
56
|
+
`\`${v.schemaName}\``,
|
|
57
|
+
v.type,
|
|
58
|
+
v.isRequired ? 'Yes' : 'No',
|
|
59
|
+
];
|
|
60
|
+
if (options.showDefaultValue)
|
|
61
|
+
row.push(renderDefaultValue(v));
|
|
62
|
+
if (options.showCurrentValue)
|
|
63
|
+
row.push(renderCurrentValue(v));
|
|
64
|
+
row.push(secretStoreLabel(v.secretStore));
|
|
65
|
+
lines.push(`| ${row.join(' | ')} |`);
|
|
66
|
+
}
|
|
67
|
+
return lines.join('\n');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=environmentVariableRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environmentVariableRenderer.js","sourceRoot":"","sources":["../../src/renderers/environmentVariableRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export { renderTableMarkdown, writeTableMarkdown } from './tableRenderer.js';
|
|
1
|
+
export { renderTableMarkdown, writeTableMarkdown, renderTableIndexMarkdown, renderTableColumnsMarkdown, renderTableViewsMarkdown, renderTableFormsMarkdown, renderTableRelationshipsMarkdown, renderTableBusinessRulesMarkdown, renderSingleBusinessRuleMarkdown, } from './tableRenderer.js';
|
|
2
2
|
export { renderOverviewMarkdown, writeOverviewMarkdown } from './overviewRenderer.js';
|
|
3
3
|
export { renderFlowMarkdown, renderFlowSummaryMarkdown, renderSingleFlowMarkdown, writeFlowMarkdown } from './flowRenderer.js';
|
|
4
4
|
export { renderPluginSummaryMarkdown, renderAssemblyIndexMarkdown, renderSinglePluginTypeMarkdown, writePluginMarkdown } from './pluginRenderer.js';
|
|
5
5
|
export { writeWebResourceMarkdown, renderWebResourceSummaryMarkdown, renderWebResourceDetailMarkdown } from './webResourceRenderer.js';
|
|
6
6
|
export { renderClassicWorkflowMarkdown, renderClassicWorkflowsOverview } from './classicWorkflowRenderer.js';
|
|
7
7
|
export { renderBusinessRuleMarkdown, renderBusinessRulesOverview } from './businessRuleRenderer.js';
|
|
8
|
+
export { renderSecurityRolePage, renderSecurityRolesIndex, encodeRoleName } from './securityRoleRenderer.js';
|
|
9
|
+
export { renderEnvironmentVariablesPage } from './environmentVariableRenderer.js';
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAAE,kBAAkB,EACvC,wBAAwB,EAAE,0BAA0B,EAAE,wBAAwB,EAC9E,wBAAwB,EAAE,gCAAgC,EAC1D,gCAAgC,EAAE,gCAAgC,GACnE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/H,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpJ,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AACvI,OAAO,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC7G,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC7G,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC"}
|
package/dist/renderers/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export { renderTableMarkdown, writeTableMarkdown } from './tableRenderer.js';
|
|
1
|
+
export { renderTableMarkdown, writeTableMarkdown, renderTableIndexMarkdown, renderTableColumnsMarkdown, renderTableViewsMarkdown, renderTableFormsMarkdown, renderTableRelationshipsMarkdown, renderTableBusinessRulesMarkdown, renderSingleBusinessRuleMarkdown, } from './tableRenderer.js';
|
|
2
2
|
export { renderOverviewMarkdown, writeOverviewMarkdown } from './overviewRenderer.js';
|
|
3
3
|
export { renderFlowMarkdown, renderFlowSummaryMarkdown, renderSingleFlowMarkdown, writeFlowMarkdown } from './flowRenderer.js';
|
|
4
4
|
export { renderPluginSummaryMarkdown, renderAssemblyIndexMarkdown, renderSinglePluginTypeMarkdown, writePluginMarkdown } from './pluginRenderer.js';
|
|
5
5
|
export { writeWebResourceMarkdown, renderWebResourceSummaryMarkdown, renderWebResourceDetailMarkdown } from './webResourceRenderer.js';
|
|
6
6
|
export { renderClassicWorkflowMarkdown, renderClassicWorkflowsOverview } from './classicWorkflowRenderer.js';
|
|
7
7
|
export { renderBusinessRuleMarkdown, renderBusinessRulesOverview } from './businessRuleRenderer.js';
|
|
8
|
+
export { renderSecurityRolePage, renderSecurityRolesIndex, encodeRoleName } from './securityRoleRenderer.js';
|
|
9
|
+
export { renderEnvironmentVariablesPage } from './environmentVariableRenderer.js';
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAAE,kBAAkB,EACvC,wBAAwB,EAAE,0BAA0B,EAAE,wBAAwB,EAC9E,wBAAwB,EAAE,gCAAgC,EAC1D,gCAAgC,EAAE,gCAAgC,GACnE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/H,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACpJ,OAAO,EAAE,wBAAwB,EAAE,gCAAgC,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AACvI,OAAO,EAAE,6BAA6B,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC7G,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC7G,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SecurityRoleModel } from '../ir/securityRole.js';
|
|
2
|
+
export declare function renderSecurityRolesIndex(roles: SecurityRoleModel[]): string;
|
|
3
|
+
export declare function renderSecurityRolePage(role: SecurityRoleModel): string;
|
|
4
|
+
/** Returns the per-role wiki sub-path, safe for ADO Wiki page names. */
|
|
5
|
+
export declare function encodeRoleName(roleName: string): string;
|
|
6
|
+
//# sourceMappingURL=securityRoleRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRoleRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/securityRoleRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAoC,MAAM,uBAAuB,CAAC;AAwCjG,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,MAAM,CA4B3E;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA8DtE;AAID,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// ─── Dot representation ────────────────────────────────────────────────────
|
|
2
|
+
// 5 dots = 5 access levels. Filled left-to-right.
|
|
3
|
+
// None=○○○○○ Basic=●○○○○ Local=●●○○○ Deep=●●●○○ Global=●●●●●
|
|
4
|
+
const LEVEL_DOTS = {
|
|
5
|
+
None: '○○○○○',
|
|
6
|
+
Basic: '●○○○○',
|
|
7
|
+
Local: '●●○○○',
|
|
8
|
+
Deep: '●●●○○',
|
|
9
|
+
Global: '●●●●●',
|
|
10
|
+
};
|
|
11
|
+
const LEVEL_LABELS = {
|
|
12
|
+
None: 'None',
|
|
13
|
+
Basic: 'User',
|
|
14
|
+
Local: 'Business Unit',
|
|
15
|
+
Deep: 'Parent: Child BUs',
|
|
16
|
+
Global: 'Organisation',
|
|
17
|
+
};
|
|
18
|
+
function dots(level) {
|
|
19
|
+
return LEVEL_DOTS[level];
|
|
20
|
+
}
|
|
21
|
+
// ─── Markdown helpers ──────────────────────────────────────────────────────
|
|
22
|
+
function mdTable(headers, rows) {
|
|
23
|
+
const sep = headers.map(() => '---');
|
|
24
|
+
const lines = [
|
|
25
|
+
`| ${headers.join(' | ')} |`,
|
|
26
|
+
`| ${sep.join(' | ')} |`,
|
|
27
|
+
...rows.map(row => `| ${row.join(' | ')} |`),
|
|
28
|
+
];
|
|
29
|
+
return lines.join('\n');
|
|
30
|
+
}
|
|
31
|
+
// ─── Index page ────────────────────────────────────────────────────────────
|
|
32
|
+
export function renderSecurityRolesIndex(roles) {
|
|
33
|
+
const lines = [];
|
|
34
|
+
lines.push('# Security Roles\n');
|
|
35
|
+
lines.push('Custom security roles defined in this solution. ' +
|
|
36
|
+
'Each role page shows the privilege matrix for all custom entities.\n');
|
|
37
|
+
if (roles.length === 0) {
|
|
38
|
+
lines.push('_No custom security roles found in this solution._');
|
|
39
|
+
return lines.join('\n');
|
|
40
|
+
}
|
|
41
|
+
const rows = roles.map(r => [
|
|
42
|
+
`[${r.name}](${encodeRoleName(r.name)})`,
|
|
43
|
+
r.isAutoAssigned ? 'Yes' : 'No',
|
|
44
|
+
String(r.privileges.length),
|
|
45
|
+
]);
|
|
46
|
+
lines.push(mdTable(['Role', 'Auto Assigned', 'Custom Entities'], rows));
|
|
47
|
+
return lines.join('\n');
|
|
48
|
+
}
|
|
49
|
+
// ─── Per-role page ─────────────────────────────────────────────────────────
|
|
50
|
+
export function renderSecurityRolePage(role) {
|
|
51
|
+
const lines = [];
|
|
52
|
+
lines.push(`# ${role.name}\n`);
|
|
53
|
+
// Metadata block
|
|
54
|
+
lines.push('| Property | Value |');
|
|
55
|
+
lines.push('| --- | --- |');
|
|
56
|
+
lines.push(`| Auto Assigned | ${role.isAutoAssigned ? 'Yes' : 'No'} |`);
|
|
57
|
+
lines.push(`| Customizable | ${role.isCustomizable ? 'Yes' : 'No'} |`);
|
|
58
|
+
lines.push(`| Custom Entity Count | ${role.privileges.length} |`);
|
|
59
|
+
lines.push('');
|
|
60
|
+
// Legend
|
|
61
|
+
lines.push('## Access Level Key\n');
|
|
62
|
+
lines.push(mdTable(['Dots', 'Level', 'Scope'], Object.entries(LEVEL_DOTS).map(([lvl, d]) => [
|
|
63
|
+
d,
|
|
64
|
+
lvl,
|
|
65
|
+
LEVEL_LABELS[lvl],
|
|
66
|
+
])));
|
|
67
|
+
lines.push('');
|
|
68
|
+
// Privilege matrix
|
|
69
|
+
lines.push('## Privilege Matrix\n');
|
|
70
|
+
if (role.privileges.length === 0) {
|
|
71
|
+
lines.push('_No custom entity privileges assigned to this role._');
|
|
72
|
+
return lines.join('\n');
|
|
73
|
+
}
|
|
74
|
+
const headers = [
|
|
75
|
+
'Entity',
|
|
76
|
+
'Create',
|
|
77
|
+
'Read',
|
|
78
|
+
'Write',
|
|
79
|
+
'Delete',
|
|
80
|
+
'Append',
|
|
81
|
+
'Append To',
|
|
82
|
+
'Assign',
|
|
83
|
+
'Share',
|
|
84
|
+
];
|
|
85
|
+
const rows = role.privileges.map((p) => [
|
|
86
|
+
p.entityName,
|
|
87
|
+
dots(p.create),
|
|
88
|
+
dots(p.read),
|
|
89
|
+
dots(p.write),
|
|
90
|
+
dots(p.delete),
|
|
91
|
+
dots(p.append),
|
|
92
|
+
dots(p.appendTo),
|
|
93
|
+
dots(p.assign),
|
|
94
|
+
dots(p.share),
|
|
95
|
+
]);
|
|
96
|
+
lines.push(mdTable(headers, rows));
|
|
97
|
+
return lines.join('\n');
|
|
98
|
+
}
|
|
99
|
+
// ─── Wiki path helper ──────────────────────────────────────────────────────
|
|
100
|
+
/** Returns the per-role wiki sub-path, safe for ADO Wiki page names. */
|
|
101
|
+
export function encodeRoleName(roleName) {
|
|
102
|
+
// Strip characters that break ADO wiki paths
|
|
103
|
+
return roleName.replace(/[/?#%]/g, '');
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=securityRoleRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityRoleRenderer.js","sourceRoot":"","sources":["../../src/renderers/securityRoleRenderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "powerautodoc",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Automated as-built documentation generator for Power Platform solutions",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"postbuild": "sed -i '1s|^|#!/usr/bin/env node\\n|' dist/index.js && chmod +x dist/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"powerautodoc": "dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
],
|
|
13
|
-
"repository": {
|
|
14
|
-
"type": "git",
|
|
15
|
-
"url": "git+https://github.com/lewginn/PowerAutoDoc.git"
|
|
16
|
-
},
|
|
17
|
-
"keywords": [
|
|
18
|
-
"power-platform",
|
|
19
|
-
"dataverse",
|
|
20
|
-
"dynamics-365",
|
|
21
|
-
"documentation",
|
|
22
|
-
"azure-devops",
|
|
23
|
-
"wiki"
|
|
24
|
-
],
|
|
25
|
-
"author": "Lewis Ginn",
|
|
26
|
-
"license": "MIT",
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@types/js-yaml": "^4.0.9",
|
|
29
|
-
"@types/node": "^25.3.3",
|
|
30
|
-
"tsx": "^4.21.0",
|
|
31
|
-
"typescript": "^5.9.3"
|
|
32
|
-
},
|
|
33
|
-
"dependencies": {
|
|
34
|
-
"adm-zip": "^0.5.16",
|
|
35
|
-
"commander": "^14.0.3",
|
|
36
|
-
"fast-xml-parser": "^5.4.2",
|
|
37
|
-
"glob": "^13.0.6",
|
|
38
|
-
"handlebars": "^4.7.8",
|
|
39
|
-
"js-yaml": "^4.1.1",
|
|
40
|
-
"zod": "^4.3.6"
|
|
41
|
-
},
|
|
42
|
-
"scripts": {
|
|
43
|
-
"dev": "tsx src/index.ts > dev.log 2>&1",
|
|
44
|
-
"build": "tsc",
|
|
45
|
-
"postbuild": "node scripts/addShebang.mjs && chmod +x dist/index.js",
|
|
46
|
-
"prepublishOnly": "npm run build",
|
|
47
|
-
"docs": "cd docs-viewer && npm run build && npx serve dist"
|
|
48
|
-
},
|
|
49
|
-
"engines": {
|
|
50
|
-
"node": ">=18"
|
|
51
|
-
}
|
|
52
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "powerautodoc",
|
|
3
|
+
"version": "0.1.19",
|
|
4
|
+
"description": "Automated as-built documentation generator for Power Platform solutions",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"postbuild": "sed -i '1s|^|#!/usr/bin/env node\\n|' dist/index.js && chmod +x dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"powerautodoc": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/lewginn/PowerAutoDoc.git"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"power-platform",
|
|
19
|
+
"dataverse",
|
|
20
|
+
"dynamics-365",
|
|
21
|
+
"documentation",
|
|
22
|
+
"azure-devops",
|
|
23
|
+
"wiki"
|
|
24
|
+
],
|
|
25
|
+
"author": "Lewis Ginn",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/js-yaml": "^4.0.9",
|
|
29
|
+
"@types/node": "^25.3.3",
|
|
30
|
+
"tsx": "^4.21.0",
|
|
31
|
+
"typescript": "^5.9.3"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"adm-zip": "^0.5.16",
|
|
35
|
+
"commander": "^14.0.3",
|
|
36
|
+
"fast-xml-parser": "^5.4.2",
|
|
37
|
+
"glob": "^13.0.6",
|
|
38
|
+
"handlebars": "^4.7.8",
|
|
39
|
+
"js-yaml": "^4.1.1",
|
|
40
|
+
"zod": "^4.3.6"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"dev": "tsx src/index.ts > dev.log 2>&1",
|
|
44
|
+
"build": "tsc",
|
|
45
|
+
"postbuild": "node scripts/addShebang.mjs && chmod +x dist/index.js",
|
|
46
|
+
"prepublishOnly": "npm run build",
|
|
47
|
+
"docs": "cd docs-viewer && npm run build && npx serve dist"
|
|
48
|
+
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=18"
|
|
51
|
+
}
|
|
52
|
+
}
|