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.
Files changed (138) hide show
  1. package/README.md +21 -0
  2. package/dist/config/defaults.d.ts +4 -0
  3. package/dist/config/defaults.d.ts.map +1 -0
  4. package/dist/config/defaults.js +17 -0
  5. package/dist/config/defaults.js.map +1 -0
  6. package/dist/config/index.d.ts +6 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js +6 -0
  9. package/dist/config/index.js.map +1 -0
  10. package/dist/config/loader.d.ts +9 -0
  11. package/dist/config/loader.d.ts.map +1 -0
  12. package/dist/config/loader.js +106 -0
  13. package/dist/config/loader.js.map +1 -0
  14. package/dist/config/renderOptions.d.ts +4 -0
  15. package/dist/config/renderOptions.d.ts.map +1 -0
  16. package/dist/config/renderOptions.js +6 -0
  17. package/dist/config/renderOptions.js.map +1 -0
  18. package/dist/config/schema.d.ts +61 -0
  19. package/dist/config/schema.d.ts.map +1 -0
  20. package/dist/config/schema.js +6 -0
  21. package/dist/config/schema.js.map +1 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +80 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/ir/flow.d.ts +35 -0
  27. package/dist/ir/flow.d.ts.map +1 -0
  28. package/dist/ir/flow.js +2 -0
  29. package/dist/ir/flow.js.map +1 -0
  30. package/dist/ir/form.d.ts +14 -0
  31. package/dist/ir/form.d.ts.map +1 -0
  32. package/dist/ir/form.js +2 -0
  33. package/dist/ir/form.js.map +1 -0
  34. package/dist/ir/index.d.ts +10 -0
  35. package/dist/ir/index.d.ts.map +1 -0
  36. package/dist/ir/index.js +2 -0
  37. package/dist/ir/index.js.map +1 -0
  38. package/dist/ir/plugin.d.ts +38 -0
  39. package/dist/ir/plugin.d.ts.map +1 -0
  40. package/dist/ir/plugin.js +2 -0
  41. package/dist/ir/plugin.js.map +1 -0
  42. package/dist/ir/relationship.d.ts +10 -0
  43. package/dist/ir/relationship.d.ts.map +1 -0
  44. package/dist/ir/relationship.js +2 -0
  45. package/dist/ir/relationship.js.map +1 -0
  46. package/dist/ir/solution.d.ts +15 -0
  47. package/dist/ir/solution.d.ts.map +1 -0
  48. package/dist/ir/solution.js +2 -0
  49. package/dist/ir/solution.js.map +1 -0
  50. package/dist/ir/table.d.ts +28 -0
  51. package/dist/ir/table.d.ts.map +1 -0
  52. package/dist/ir/table.js +2 -0
  53. package/dist/ir/table.js.map +1 -0
  54. package/dist/ir/view.d.ts +20 -0
  55. package/dist/ir/view.d.ts.map +1 -0
  56. package/dist/ir/view.js +2 -0
  57. package/dist/ir/view.js.map +1 -0
  58. package/dist/ir/webResource.d.ts +28 -0
  59. package/dist/ir/webResource.d.ts.map +1 -0
  60. package/dist/ir/webResource.js +16 -0
  61. package/dist/ir/webResource.js.map +1 -0
  62. package/dist/parsers/flowParser.d.ts +3 -0
  63. package/dist/parsers/flowParser.d.ts.map +1 -0
  64. package/dist/parsers/flowParser.js +226 -0
  65. package/dist/parsers/flowParser.js.map +1 -0
  66. package/dist/parsers/formParser.d.ts +4 -0
  67. package/dist/parsers/formParser.d.ts.map +1 -0
  68. package/dist/parsers/formParser.js +117 -0
  69. package/dist/parsers/formParser.js.map +1 -0
  70. package/dist/parsers/index.d.ts +10 -0
  71. package/dist/parsers/index.d.ts.map +1 -0
  72. package/dist/parsers/index.js +10 -0
  73. package/dist/parsers/index.js.map +1 -0
  74. package/dist/parsers/pluginParser.d.ts +3 -0
  75. package/dist/parsers/pluginParser.d.ts.map +1 -0
  76. package/dist/parsers/pluginParser.js +193 -0
  77. package/dist/parsers/pluginParser.js.map +1 -0
  78. package/dist/parsers/relationshipParser.d.ts +5 -0
  79. package/dist/parsers/relationshipParser.d.ts.map +1 -0
  80. package/dist/parsers/relationshipParser.js +71 -0
  81. package/dist/parsers/relationshipParser.js.map +1 -0
  82. package/dist/parsers/solutionManifestParser.d.ts +3 -0
  83. package/dist/parsers/solutionManifestParser.d.ts.map +1 -0
  84. package/dist/parsers/solutionManifestParser.js +54 -0
  85. package/dist/parsers/solutionManifestParser.js.map +1 -0
  86. package/dist/parsers/solutionParser.d.ts +4 -0
  87. package/dist/parsers/solutionParser.d.ts.map +1 -0
  88. package/dist/parsers/solutionParser.js +63 -0
  89. package/dist/parsers/solutionParser.js.map +1 -0
  90. package/dist/parsers/tableParser.d.ts +3 -0
  91. package/dist/parsers/tableParser.d.ts.map +1 -0
  92. package/dist/parsers/tableParser.js +130 -0
  93. package/dist/parsers/tableParser.js.map +1 -0
  94. package/dist/parsers/viewParser.d.ts +4 -0
  95. package/dist/parsers/viewParser.d.ts.map +1 -0
  96. package/dist/parsers/viewParser.js +161 -0
  97. package/dist/parsers/viewParser.js.map +1 -0
  98. package/dist/parsers/webResourceParser.d.ts +8 -0
  99. package/dist/parsers/webResourceParser.d.ts.map +1 -0
  100. package/dist/parsers/webResourceParser.js +260 -0
  101. package/dist/parsers/webResourceParser.js.map +1 -0
  102. package/dist/publisher/wikiAssembler.d.ts +6 -0
  103. package/dist/publisher/wikiAssembler.d.ts.map +1 -0
  104. package/dist/publisher/wikiAssembler.js +99 -0
  105. package/dist/publisher/wikiAssembler.js.map +1 -0
  106. package/dist/publisher/wikiPublisher.d.ts +9 -0
  107. package/dist/publisher/wikiPublisher.d.ts.map +1 -0
  108. package/dist/publisher/wikiPublisher.js +149 -0
  109. package/dist/publisher/wikiPublisher.js.map +1 -0
  110. package/dist/renderers/flowRenderer.d.ts +6 -0
  111. package/dist/renderers/flowRenderer.d.ts.map +1 -0
  112. package/dist/renderers/flowRenderer.js +141 -0
  113. package/dist/renderers/flowRenderer.js.map +1 -0
  114. package/dist/renderers/index.d.ts +6 -0
  115. package/dist/renderers/index.d.ts.map +1 -0
  116. package/dist/renderers/index.js +6 -0
  117. package/dist/renderers/index.js.map +1 -0
  118. package/dist/renderers/overviewRenderer.d.ts +6 -0
  119. package/dist/renderers/overviewRenderer.d.ts.map +1 -0
  120. package/dist/renderers/overviewRenderer.js +71 -0
  121. package/dist/renderers/overviewRenderer.js.map +1 -0
  122. package/dist/renderers/pluginRenderer.d.ts +6 -0
  123. package/dist/renderers/pluginRenderer.d.ts.map +1 -0
  124. package/dist/renderers/pluginRenderer.js +167 -0
  125. package/dist/renderers/pluginRenderer.js.map +1 -0
  126. package/dist/renderers/rendererUtils.d.ts +8 -0
  127. package/dist/renderers/rendererUtils.d.ts.map +1 -0
  128. package/dist/renderers/rendererUtils.js +14 -0
  129. package/dist/renderers/rendererUtils.js.map +1 -0
  130. package/dist/renderers/tableRenderer.d.ts +5 -0
  131. package/dist/renderers/tableRenderer.d.ts.map +1 -0
  132. package/dist/renderers/tableRenderer.js +231 -0
  133. package/dist/renderers/tableRenderer.js.map +1 -0
  134. package/dist/renderers/webResourceRenderer.d.ts.map +1 -0
  135. package/dist/renderers/webresourceRenderer.d.ts +5 -0
  136. package/dist/renderers/webresourceRenderer.js +163 -0
  137. package/dist/renderers/webresourceRenderer.js.map +1 -0
  138. package/package.json +50 -0
package/README.md ADDED
@@ -0,0 +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
+
21
+ Generated docs are written to `./output/`. See `src/config/` for filtering and render options.
@@ -0,0 +1,4 @@
1
+ export declare const DEFAULT_EXCLUDED_COLUMNS: Set<string>;
2
+ export declare const DEFAULT_EXCLUDE_BASE_CURRENCY_FIELDS = true;
3
+ export declare const DEFAULT_EXCLUDE_STANDARD_RELATIONSHIPS = true;
4
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,aAanC,CAAC;AAEH,eAAO,MAAM,oCAAoC,OAAO,CAAC;AACzD,eAAO,MAAM,sCAAsC,OAAO,CAAC"}
@@ -0,0 +1,17 @@
1
+ export const DEFAULT_EXCLUDED_COLUMNS = new Set([
2
+ 'timezoneruleversionnumber',
3
+ 'utcconversiontimezonecode',
4
+ 'importsequencenumber',
5
+ 'overriddencreatedon',
6
+ 'exchangerate',
7
+ 'transactioncurrencyid',
8
+ 'owningteam',
9
+ 'owninguser',
10
+ 'owningbusinessunit',
11
+ 'createdonbehalfby',
12
+ 'modifiedonbehalfby',
13
+ 'versionnumber',
14
+ ]);
15
+ export const DEFAULT_EXCLUDE_BASE_CURRENCY_FIELDS = true;
16
+ export const DEFAULT_EXCLUDE_STANDARD_RELATIONSHIPS = true;
17
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IAC9C,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,CAAC;AAEH,MAAM,CAAC,MAAM,oCAAoC,GAAG,IAAI,CAAC;AACzD,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type { DocGenConfig } from './schema.js';
2
+ export { loadConfig, CONFIG_DEFAULTS } from './loader.js';
3
+ export type { WikiConfig } from './schema.js';
4
+ export * from './defaults.js';
5
+ export * from './renderOptions.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { loadConfig, CONFIG_DEFAULTS } from './loader.js';
2
+ // Keep these exports for any code that references them directly
3
+ // They will be removed in a future cleanup once all callers use DocGenConfig
4
+ export * from './defaults.js';
5
+ export * from './renderOptions.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG1D,gEAAgE;AAChE,6EAA6E;AAC7E,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DocGenConfig } from './schema.js';
2
+ export declare const CONFIG_DEFAULTS: DocGenConfig;
3
+ /**
4
+ * Loads doc-gen.config.yml from the given directory (defaults to cwd).
5
+ * Merges with CONFIG_DEFAULTS — any missing keys fall back to defaults.
6
+ * Throws if the file exists but is invalid YAML.
7
+ */
8
+ export declare function loadConfig(configDir?: string): DocGenConfig;
9
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +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,YA8B7B,CAAC;AA4BF;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,SAAS,GAAE,MAAsB,GAAG,YAAY,CAmC1E"}
@@ -0,0 +1,106 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as yaml from 'js-yaml';
4
+ const DEFAULT_EXCLUDED_COLUMNS = [
5
+ 'timezoneruleversionnumber',
6
+ 'utcconversiontimezonecode',
7
+ 'importsequencenumber',
8
+ 'overriddencreatedon',
9
+ 'exchangerate',
10
+ 'transactioncurrencyid',
11
+ 'owningteam',
12
+ 'owninguser',
13
+ 'owningbusinessunit',
14
+ 'createdonbehalfby',
15
+ 'modifiedonbehalfby',
16
+ 'versionnumber',
17
+ ];
18
+ export const CONFIG_DEFAULTS = {
19
+ solutions: [
20
+ {
21
+ path: './unpacked',
22
+ publisherPrefix: '',
23
+ role: 'all',
24
+ },
25
+ ],
26
+ output: {
27
+ path: './output',
28
+ },
29
+ parse: {
30
+ customColumnsOnly: false,
31
+ excludeBaseCurrencyFields: true,
32
+ excludeStandardRelationships: true,
33
+ excludedColumns: DEFAULT_EXCLUDED_COLUMNS,
34
+ },
35
+ render: {
36
+ formLayout: 'compact',
37
+ },
38
+ components: {
39
+ tables: true,
40
+ forms: true,
41
+ views: true,
42
+ relationships: true,
43
+ flows: false,
44
+ plugins: false,
45
+ webResources: false,
46
+ security: false,
47
+ },
48
+ };
49
+ /**
50
+ * Deep merge — right side wins, arrays are replaced not concatenated.
51
+ * Keeps all defaults for any keys not present in the loaded file.
52
+ */
53
+ function deepMerge(defaults, overrides) {
54
+ const result = { ...defaults };
55
+ for (const key of Object.keys(overrides)) {
56
+ const override = overrides[key];
57
+ const def = defaults[key];
58
+ if (override !== null &&
59
+ override !== undefined &&
60
+ typeof override === 'object' &&
61
+ !Array.isArray(override) &&
62
+ typeof def === 'object' &&
63
+ def !== null &&
64
+ !Array.isArray(def)) {
65
+ result[key] = deepMerge(def, override);
66
+ }
67
+ else if (override !== undefined) {
68
+ result[key] = override;
69
+ }
70
+ }
71
+ return result;
72
+ }
73
+ /**
74
+ * Loads doc-gen.config.yml from the given directory (defaults to cwd).
75
+ * Merges with CONFIG_DEFAULTS — any missing keys fall back to defaults.
76
+ * Throws if the file exists but is invalid YAML.
77
+ */
78
+ export function loadConfig(configDir = process.cwd()) {
79
+ const configPath = path.join(configDir, 'doc-gen.config.yml');
80
+ if (!fs.existsSync(configPath)) {
81
+ console.warn(`No doc-gen.config.yml found at ${configPath} — using defaults.`);
82
+ return CONFIG_DEFAULTS;
83
+ }
84
+ const raw = fs.readFileSync(configPath, 'utf-8');
85
+ let parsed;
86
+ try {
87
+ parsed = yaml.load(raw);
88
+ }
89
+ catch (err) {
90
+ throw new Error(`Failed to parse doc-gen.config.yml: ${err.message}`);
91
+ }
92
+ if (typeof parsed !== 'object' || parsed === null) {
93
+ throw new Error('doc-gen.config.yml must be a YAML object at the top level.');
94
+ }
95
+ const merged = deepMerge(CONFIG_DEFAULTS, parsed);
96
+ // Validate each solution entry has a publisherPrefix
97
+ for (const sol of merged.solutions) {
98
+ if (!sol.publisherPrefix) {
99
+ console.warn(`Warning: solution "${sol.path}" has no publisherPrefix. ` +
100
+ 'Custom component detection will not work correctly.');
101
+ }
102
+ }
103
+ console.log(`Loaded config from: ${configPath}`);
104
+ return merged;
105
+ }
106
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const RENDER_OPTIONS: {
2
+ formLayout: "detailed" | "compact";
3
+ };
4
+ //# sourceMappingURL=renderOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderOptions.d.ts","sourceRoot":"","sources":["../../src/config/renderOptions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;gBAGA,UAAU,GAAG,SAAS;CAChD,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const RENDER_OPTIONS = {
2
+ // 'detailed' shows tabs, sections and fields per form
3
+ // 'compact' shows summary table only
4
+ formLayout: 'compact',
5
+ };
6
+ //# sourceMappingURL=renderOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderOptions.js","sourceRoot":"","sources":["../../src/config/renderOptions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,sDAAsD;IACtD,qCAAqC;IACrC,UAAU,EAAE,SAAmC;CAChD,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Shape of doc-gen.config.yml
3
+ * All fields are optional — loader merges with defaults.
4
+ */
5
+ export type SolutionRole = 'datamodel' | 'flows' | 'plugins' | 'webresources' | 'security' | 'all';
6
+ export interface SolutionEntry {
7
+ /** Path to the unpacked solution folder (relative to config file) */
8
+ path: string;
9
+ /** Publisher prefix used to detect custom components e.g. 'vel' */
10
+ publisherPrefix: string;
11
+ /** What this solution contributes to the docs */
12
+ role: SolutionRole;
13
+ /** Optional display name — used in wiki headings. Defaults to folder name. */
14
+ displayName?: string;
15
+ }
16
+ export interface DocGenConfig {
17
+ solutions: SolutionEntry[];
18
+ output: {
19
+ /** Directory to write generated markdown files */
20
+ path: string;
21
+ };
22
+ parse: {
23
+ /** Only include custom columns in output. Default: false */
24
+ customColumnsOnly: boolean;
25
+ /** Strip base currency (_base) money fields. Default: true */
26
+ excludeBaseCurrencyFields: boolean;
27
+ /** Strip standard OOB relationships. Default: true */
28
+ excludeStandardRelationships: boolean;
29
+ /** Additional columns to exclude by logical name */
30
+ excludedColumns: string[];
31
+ };
32
+ render: {
33
+ /** Form layout style. 'compact' = summary table, 'detailed' = full tab/section breakdown */
34
+ formLayout: 'compact' | 'detailed';
35
+ };
36
+ components: {
37
+ /** Toggle each documentation component on/off */
38
+ tables: boolean;
39
+ forms: boolean;
40
+ views: boolean;
41
+ relationships: boolean;
42
+ flows: boolean;
43
+ plugins: boolean;
44
+ webResources: boolean;
45
+ security: boolean;
46
+ };
47
+ wiki?: WikiConfig;
48
+ }
49
+ export interface WikiConfig {
50
+ /** ADO organisation name e.g. VelLab */
51
+ organisation: string;
52
+ /** ADO project name e.g. Velrada-DocGen */
53
+ project: string;
54
+ /** Wiki identifier e.g. Velrada-DocGen.wiki */
55
+ wikiIdentifier: string;
56
+ /** Parent page path e.g. /Leave Management (App) */
57
+ parentPath: string;
58
+ /** Personal Access Token — move to env var before pipeline */
59
+ pat: string;
60
+ }
61
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +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,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,KAAK,CAAC;AAEnG,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,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,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;KACnB,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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shape of doc-gen.config.yml
3
+ * All fields are optional — loader merges with defaults.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ import { loadConfig } from './config/index.js';
2
+ import { parseSolution, parseSolutionManifest } from './parsers/index.js';
3
+ import { writeTableMarkdown, writeOverviewMarkdown, writePluginMarkdown } from './renderers/index.js';
4
+ import { parseAllFlows } from './parsers/index.js';
5
+ import { writeFlowMarkdown } from './renderers/index.js';
6
+ import { publishToWiki } from './publisher/wikiPublisher.js';
7
+ import { buildWikiPages } from './publisher/wikiAssembler.js';
8
+ import { parseAllPlugins } from './parsers/index.js';
9
+ import { parseAllWebResources } from './parsers/index.js';
10
+ import { writeWebResourceMarkdown } from './renderers/index.js';
11
+ async function main() {
12
+ const config = loadConfig();
13
+ const { path: outputPath } = config.output;
14
+ let mergedSolution = null;
15
+ const allSolutions = [];
16
+ const allFlows = [];
17
+ const allPluginAssemblies = [];
18
+ const allWebResources = [];
19
+ for (const solutionEntry of config.solutions) {
20
+ const { path: unpackedPath, role, publisherPrefix } = solutionEntry;
21
+ console.log(`\nProcessing solution: ${unpackedPath} (role: ${role})`);
22
+ const solConfig = {
23
+ ...config,
24
+ solution: {
25
+ unpackedPath,
26
+ publisherPrefix,
27
+ },
28
+ };
29
+ const isDataModel = role === 'datamodel' || role === 'all';
30
+ const isFlows = role === 'flows' || role === 'all';
31
+ const isPlugins = role === 'plugins' || role === 'all';
32
+ const isWebResources = role === 'webresources' || role === 'all';
33
+ // ---- Data model ----
34
+ if (isDataModel) {
35
+ const manifest = parseSolutionManifest(unpackedPath);
36
+ const tables = parseSolution(unpackedPath, solConfig, publisherPrefix);
37
+ manifest.tables = tables;
38
+ allSolutions.push(manifest);
39
+ if (!mergedSolution) {
40
+ mergedSolution = manifest;
41
+ }
42
+ else {
43
+ mergedSolution.tables = [...mergedSolution.tables, ...tables];
44
+ }
45
+ writeOverviewMarkdown(manifest, outputPath);
46
+ if (config.components.tables) {
47
+ for (const table of tables) {
48
+ writeTableMarkdown(table, `${outputPath}/tables`, solConfig);
49
+ }
50
+ }
51
+ }
52
+ // ---- Flows ----
53
+ if (isFlows && config.components.flows) {
54
+ const flows = parseAllFlows(unpackedPath);
55
+ allFlows.push(...flows);
56
+ writeFlowMarkdown(flows, outputPath);
57
+ }
58
+ // ---- Plugins ----
59
+ if (isPlugins && config.components.plugins) {
60
+ const assemblies = parseAllPlugins(unpackedPath);
61
+ allPluginAssemblies.push(...assemblies);
62
+ writePluginMarkdown(assemblies, outputPath);
63
+ console.log(` Parsed ${assemblies.length} plugin assemblies from: ${unpackedPath}`);
64
+ }
65
+ // ---- Web Resources ----
66
+ if (isWebResources && config.components.webResources) {
67
+ const webResources = parseAllWebResources(unpackedPath);
68
+ allWebResources.push(...webResources);
69
+ writeWebResourceMarkdown(webResources, outputPath);
70
+ console.log(` Parsed ${webResources.length} web resources from: ${unpackedPath}`);
71
+ }
72
+ }
73
+ // ---- Wiki publish ----
74
+ if (config.wiki && mergedSolution) {
75
+ const pages = buildWikiPages(config, allSolutions, mergedSolution, allFlows, allPluginAssemblies, allWebResources);
76
+ await publishToWiki(config.wiki, pages);
77
+ }
78
+ }
79
+ main().catch(console.error);
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type FlowCategory = 'ModernFlow' | 'ClassicWorkflow';
2
+ export type FlowTriggerType = 'DataverseCreate' | 'DataverseUpdate' | 'DataverseDelete' | 'DataverseCreateOrUpdate' | 'DataverseCreateOrDelete' | 'DataverseUpdateOrDelete' | 'DataverseCreateOrUpdateOrDelete' | 'Scheduled' | 'Manual' | 'Other';
3
+ export interface FlowTriggerModel {
4
+ name: string;
5
+ type: FlowTriggerType;
6
+ /** Dataverse table logical name, if applicable */
7
+ entity?: string;
8
+ /** Raw filter expression e.g. "statuscode eq 948610001" */
9
+ filterExpression?: string;
10
+ /** Comma-separated attributes that trigger the flow */
11
+ filterAttributes?: string;
12
+ /** Human-readable one-liner */
13
+ description: string;
14
+ }
15
+ export interface FlowActionModel {
16
+ name: string;
17
+ type: string;
18
+ operationId: string;
19
+ entityName?: string;
20
+ description: string;
21
+ runAfter: string[];
22
+ /** Fields being set on Create/Update, or selected on Get */
23
+ fieldMappings?: string[];
24
+ }
25
+ export interface FlowModel {
26
+ id: string;
27
+ name: string;
28
+ category: FlowCategory;
29
+ isActive: boolean;
30
+ trigger: FlowTriggerModel;
31
+ actions: FlowActionModel[];
32
+ /** Logical names of connection references used */
33
+ connectionReferences: string[];
34
+ }
35
+ //# sourceMappingURL=flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/ir/flow.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAE5D,MAAM,MAAM,eAAe,GACvB,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,GACjB,yBAAyB,GACzB,yBAAyB,GACzB,yBAAyB,GACzB,iCAAiC,GACjC,WAAW,GACX,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AACD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,kDAAkD;IAClD,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/ir/flow.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ export interface FormSectionModel {
2
+ label: string;
3
+ columns: string[];
4
+ }
5
+ export interface FormTabModel {
6
+ label: string;
7
+ sections: FormSectionModel[];
8
+ }
9
+ export interface FormModel {
10
+ name: string;
11
+ type: 'Main' | 'Quick Create' | 'Quick View' | 'Card' | 'Other';
12
+ tabs: FormTabModel[];
13
+ }
14
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/ir/form.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;IAChE,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/ir/form.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type { SolutionModel, PublisherModel } from './solution.js';
2
+ export type { TableModel, ColumnModel, ColumnType } from './table.js';
3
+ export type { FormModel, FormTabModel, FormSectionModel } from './form.js';
4
+ export type { ViewModel, ViewFilterCondition } from './view.js';
5
+ export type { RelationshipModel } from './relationship.js';
6
+ export type { FlowModel, FlowTriggerModel, FlowActionModel, FlowTriggerType, FlowCategory } from './flow.js';
7
+ export type { PluginStage, PluginMode, ImageType, PluginStepImageModel, PluginStepModel, PluginAssemblyModel } from './plugin.js';
8
+ export type { WebResourceType, WebResourceFunction, WebResourceModel } from './webResource.js';
9
+ export { WEB_RESOURCE_TYPE_MAP } from './webResource.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { WEB_RESOURCE_TYPE_MAP } from './webResource.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,38 @@
1
+ export type PluginStage = 'PreValidation' | 'PreOperation' | 'PostOperation';
2
+ export type PluginMode = 'Synchronous' | 'Asynchronous';
3
+ export type ImageType = 'PreImage' | 'PostImage' | 'Both';
4
+ export interface PluginStepImageModel {
5
+ id: string;
6
+ name: string;
7
+ imageType: ImageType;
8
+ attributes: string[];
9
+ }
10
+ export interface PluginStepModel {
11
+ id: string;
12
+ /** Full display name e.g. "AllocationPostOperation: Update of isms_allocation" */
13
+ name: string;
14
+ /** Short class name e.g. "AllocationPostOperation" */
15
+ className: string;
16
+ /** Fully qualified type name e.g. "ISMS.CE.Plugins.AllocationPostOperation" */
17
+ pluginTypeName: string;
18
+ /** Assembly name e.g. "ISMS.CE.Plugins" */
19
+ assemblyName: string;
20
+ /** CRM message e.g. "Update", "Create", "Delete" */
21
+ message: string;
22
+ /** Primary entity logical name e.g. "isms_allocation" */
23
+ primaryEntity: string;
24
+ stage: PluginStage;
25
+ mode: PluginMode;
26
+ /** Comma-separated attribute names that trigger this step (empty = all) */
27
+ filteringAttributes: string[];
28
+ images: PluginStepImageModel[];
29
+ }
30
+ export interface PluginAssemblyModel {
31
+ assemblyName: string;
32
+ version: string;
33
+ fileName: string;
34
+ isolationMode: 'Sandbox' | 'None';
35
+ pluginTypeNames: string[];
36
+ steps: PluginStepModel[];
37
+ }
38
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/ir/plugin.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,CAAC;AAC7E,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;AACxD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/ir/plugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export interface RelationshipModel {
2
+ name: string;
3
+ type: 'OneToMany' | 'ManyToOne' | 'ManyToMany';
4
+ referencingEntity: string;
5
+ referencedEntity: string;
6
+ referencingAttribute: string;
7
+ description: string;
8
+ isCustom: boolean;
9
+ }
10
+ //# sourceMappingURL=relationship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship.d.ts","sourceRoot":"","sources":["../../src/ir/relationship.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=relationship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship.js","sourceRoot":"","sources":["../../src/ir/relationship.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { TableModel } from './table.js';
2
+ export interface PublisherModel {
3
+ uniqueName: string;
4
+ displayName: string;
5
+ prefix: string;
6
+ }
7
+ export interface SolutionModel {
8
+ uniqueName: string;
9
+ displayName: string;
10
+ version: string;
11
+ isManaged: boolean;
12
+ publisher: PublisherModel;
13
+ tables: TableModel[];
14
+ }
15
+ //# sourceMappingURL=solution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution.d.ts","sourceRoot":"","sources":["../../src/ir/solution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=solution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solution.js","sourceRoot":"","sources":["../../src/ir/solution.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { FormModel } from './form.js';
2
+ import type { ViewModel } from './view.js';
3
+ import type { RelationshipModel } from './relationship.js';
4
+ export type ColumnType = 'string' | 'integer' | 'decimal' | 'boolean' | 'datetime' | 'lookup' | 'optionset' | 'money' | 'memo' | 'uniqueidentifier' | 'unknown';
5
+ export interface ColumnModel {
6
+ logicalName: string;
7
+ displayName: string;
8
+ description: string;
9
+ type: ColumnType;
10
+ isRequired: boolean;
11
+ isCustom: boolean;
12
+ maxLength?: number;
13
+ targets?: string[];
14
+ }
15
+ export interface TableModel {
16
+ logicalName: string;
17
+ displayName: string;
18
+ pluralDisplayName: string;
19
+ description: string;
20
+ isCustom: boolean;
21
+ isActivity: boolean;
22
+ columns: ColumnModel[];
23
+ relationships: RelationshipModel[];
24
+ forms: FormModel[];
25
+ views: ViewModel[];
26
+ aiSummary?: string;
27
+ }
28
+ //# sourceMappingURL=table.d.ts.map