@power-maverick/tool-erd-generator 0.0.7 → 0.0.8

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 (48) hide show
  1. package/MIGRATION_COMPLETE.md +181 -0
  2. package/README.md +118 -359
  3. package/index.html +18 -1
  4. package/package.json +12 -27
  5. package/tsconfig.json +20 -15
  6. package/{webview/vite.config.ts → vite.config.ts} +1 -1
  7. package/CONVERSION_SUMMARY.md +0 -288
  8. package/REFACTORING_COMPLETE.md +0 -352
  9. package/TYPESCRIPT_NOTES.md +0 -57
  10. package/dist/src/components/ERDGenerator.d.ts +0 -44
  11. package/dist/src/components/ERDGenerator.d.ts.map +0 -1
  12. package/dist/src/components/ERDGenerator.js +0 -232
  13. package/dist/src/components/ERDGenerator.js.map +0 -1
  14. package/dist/src/dvdtIntegration/integration.d.ts +0 -47
  15. package/dist/src/dvdtIntegration/integration.d.ts.map +0 -1
  16. package/dist/src/dvdtIntegration/integration.js +0 -223
  17. package/dist/src/dvdtIntegration/integration.js.map +0 -1
  18. package/dist/src/index.d.ts +0 -6
  19. package/dist/src/index.d.ts.map +0 -1
  20. package/dist/src/index.js +0 -26
  21. package/dist/src/index.js.map +0 -1
  22. package/dist/src/models/interfaces.d.ts +0 -84
  23. package/dist/src/models/interfaces.d.ts.map +0 -1
  24. package/dist/src/models/interfaces.js +0 -3
  25. package/dist/src/models/interfaces.js.map +0 -1
  26. package/dist/src/models/platformApi.d.ts +0 -92
  27. package/dist/src/models/platformApi.d.ts.map +0 -1
  28. package/dist/src/models/platformApi.js +0 -213
  29. package/dist/src/models/platformApi.js.map +0 -1
  30. package/dist/src/utils/Constants.d.ts +0 -3
  31. package/dist/src/utils/Constants.d.ts.map +0 -1
  32. package/dist/src/utils/Constants.js +0 -6
  33. package/dist/src/utils/Constants.js.map +0 -1
  34. package/dist/src/utils/DataverseClient.d.ts +0 -53
  35. package/dist/src/utils/DataverseClient.d.ts.map +0 -1
  36. package/dist/src/utils/DataverseClient.js +0 -236
  37. package/dist/src/utils/DataverseClient.js.map +0 -1
  38. package/dist/webview/index.css +0 -1
  39. package/dist/webview/index.html +0 -13
  40. package/dist/webview/index.js +0 -49
  41. package/tsconfig.webview.json +0 -24
  42. package/ui/test.html +0 -326
  43. package/webview/App.tsx +0 -412
  44. package/webview/index.html +0 -12
  45. package/webview/main.tsx +0 -10
  46. package/webview/styles.css +0 -288
  47. package/webview/tsconfig.json +0 -35
  48. /package/{webview/tsconfig.node.json → tsconfig.node.json} +0 -0
@@ -1,236 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DataverseClient = void 0;
16
- const axios_1 = __importDefault(require("axios"));
17
- /**
18
- * Client for interacting with Dataverse Web API
19
- */
20
- class DataverseClient {
21
- constructor(config) {
22
- this.environmentUrl = config.environmentUrl.replace(/\/$/, '');
23
- this.apiVersion = config.apiVersion || '9.2';
24
- this.axiosInstance = axios_1.default.create({
25
- baseURL: `${this.environmentUrl}/api/data/v${this.apiVersion}`,
26
- headers: {
27
- 'Authorization': `Bearer ${config.accessToken}`,
28
- 'Accept': 'application/json',
29
- 'Content-Type': 'application/json',
30
- 'OData-MaxVersion': '4.0',
31
- 'OData-Version': '4.0',
32
- },
33
- });
34
- }
35
- /**
36
- * Fetch solution metadata from Dataverse
37
- * @param solutionUniqueName Unique name of the solution
38
- * @returns Solution with all tables and metadata
39
- */
40
- fetchSolution(solutionUniqueName) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- var _a, _b, _c, _d;
43
- try {
44
- // Fetch solution details
45
- const solutionResponse = yield this.axiosInstance.get(`/solutions?$filter=uniquename eq '${solutionUniqueName}'&$select=friendlyname,uniquename,_publisherid_value,version&$expand=publisherid($select=customizationprefix)`);
46
- if (!solutionResponse.data.value || solutionResponse.data.value.length === 0) {
47
- throw new Error(`Solution '${solutionUniqueName}' not found`);
48
- }
49
- const solutionData = solutionResponse.data.value[0];
50
- // Publisher Prefix
51
- const publisherPrefix = (_b = (_a = solutionData.publisherid) === null || _a === void 0 ? void 0 : _a.customizationprefix) !== null && _b !== void 0 ? _b : 'unknown';
52
- // Fetch solution components (tables)
53
- const componentsResponse = yield this.axiosInstance.get(`/solutioncomponents?$filter=_solutionid_value eq ${solutionData.solutionid} and componenttype eq 1&$select=objectid`);
54
- const tableIds = componentsResponse.data.value.map((c) => c.objectid);
55
- console.log('tableIds', tableIds);
56
- // Fetch tables in parallel
57
- const tables = yield this.fetchTables(tableIds);
58
- console.log('tables', tables);
59
- return {
60
- uniqueName: solutionData.uniquename,
61
- displayName: solutionData.friendlyname,
62
- version: solutionData.version,
63
- publisherPrefix: publisherPrefix,
64
- tables: tables,
65
- };
66
- }
67
- catch (error) {
68
- if (error.response) {
69
- throw new Error(`Dataverse API error: ${error.response.status} - ${((_d = (_c = error.response.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message) || error.message}`);
70
- }
71
- throw error;
72
- }
73
- });
74
- }
75
- /**
76
- * Fetch multiple tables by their IDs
77
- */
78
- fetchTables(tableIds) {
79
- return __awaiter(this, void 0, void 0, function* () {
80
- const tables = [];
81
- for (const tableId of tableIds) {
82
- try {
83
- const table = yield this.fetchTable(tableId);
84
- if (table) {
85
- tables.push(table);
86
- }
87
- }
88
- catch (error) {
89
- console.warn(`Failed to fetch table ${tableId}:`, error);
90
- }
91
- }
92
- return tables;
93
- });
94
- }
95
- /**
96
- * Fetch a single table by ID
97
- */
98
- fetchTable(tableId) {
99
- return __awaiter(this, void 0, void 0, function* () {
100
- var _a, _b;
101
- try {
102
- // Fetch entity metadata
103
- const entityResponse = yield this.axiosInstance.get(`/EntityDefinitions(${tableId})?$select=LogicalName,DisplayName,SchemaName,PrimaryIdAttribute,PrimaryNameAttribute,TableType,IsIntersect`);
104
- const entity = entityResponse.data;
105
- // Fetch attributes
106
- const attributesResponse = yield this.axiosInstance.get(`/EntityDefinitions(${tableId})/Attributes?$select=LogicalName,DisplayName,AttributeType,IsPrimaryId,IsPrimaryName,RequiredLevel`);
107
- const attributes = attributesResponse.data.value.map((attr) => {
108
- var _a, _b, _c, _d;
109
- return ({
110
- logicalName: attr.LogicalName,
111
- displayName: ((_b = (_a = attr.DisplayName) === null || _a === void 0 ? void 0 : _a.UserLocalizedLabel) === null || _b === void 0 ? void 0 : _b.Label) || attr.LogicalName,
112
- type: this.mapAttributeType(attr.AttributeType),
113
- isPrimaryId: attr.IsPrimaryId || false,
114
- isPrimaryName: attr.IsPrimaryName || false,
115
- isRequired: ((_c = attr.RequiredLevel) === null || _c === void 0 ? void 0 : _c.Value) === 'ApplicationRequired' || ((_d = attr.RequiredLevel) === null || _d === void 0 ? void 0 : _d.Value) === 'SystemRequired',
116
- });
117
- });
118
- // Fetch relationships
119
- const relationships = yield this.fetchRelationships(tableId, entity.LogicalName);
120
- return {
121
- logicalName: entity.LogicalName,
122
- displayName: ((_b = (_a = entity.DisplayName) === null || _a === void 0 ? void 0 : _a.UserLocalizedLabel) === null || _b === void 0 ? void 0 : _b.Label) || entity.LogicalName,
123
- schemaName: entity.SchemaName,
124
- primaryIdAttribute: entity.PrimaryIdAttribute,
125
- primaryNameAttribute: entity.PrimaryNameAttribute,
126
- isIntersect: entity.IsIntersect || false,
127
- tableType: entity.TableType,
128
- attributes: attributes,
129
- relationships: relationships,
130
- };
131
- }
132
- catch (error) {
133
- console.warn(`Failed to fetch table metadata for ${tableId}:`, error);
134
- return null;
135
- }
136
- });
137
- }
138
- /**
139
- * Fetch relationships for a table
140
- */
141
- fetchRelationships(tableId, logicalName) {
142
- return __awaiter(this, void 0, void 0, function* () {
143
- const relationships = [];
144
- try {
145
- // Fetch One-to-Many relationships
146
- const oneToManyResponse = yield this.axiosInstance.get(`/EntityDefinitions(${tableId})/OneToManyRelationships?$select=SchemaName,ReferencedEntity,ReferencingEntity,ReferencingAttribute`);
147
- for (const rel of oneToManyResponse.data.value) {
148
- if (rel.ReferencedEntity === logicalName) {
149
- relationships.push({
150
- schemaName: rel.SchemaName,
151
- type: 'OneToMany',
152
- relatedTable: rel.ReferencingEntity,
153
- lookupAttribute: rel.ReferencingAttribute,
154
- });
155
- }
156
- }
157
- // Fetch Many-to-One relationships
158
- const manyToOneResponse = yield this.axiosInstance.get(`/EntityDefinitions(${tableId})/ManyToOneRelationships?$select=SchemaName,ReferencedEntity,ReferencingEntity,ReferencingAttribute`);
159
- for (const rel of manyToOneResponse.data.value) {
160
- if (rel.ReferencingEntity === logicalName) {
161
- relationships.push({
162
- schemaName: rel.SchemaName,
163
- type: 'ManyToOne',
164
- relatedTable: rel.ReferencedEntity,
165
- lookupAttribute: rel.ReferencingAttribute,
166
- });
167
- }
168
- }
169
- // Fetch Many-to-Many relationships
170
- const manyToManyResponse = yield this.axiosInstance.get(`/EntityDefinitions(${tableId})/ManyToManyRelationships?$select=SchemaName,Entity1LogicalName,Entity2LogicalName,IntersectEntityName`);
171
- for (const rel of manyToManyResponse.data.value) {
172
- const isEntity1 = rel.Entity1LogicalName === logicalName;
173
- relationships.push({
174
- schemaName: rel.SchemaName,
175
- type: 'ManyToMany',
176
- relatedTable: isEntity1 ? rel.Entity2LogicalName : rel.Entity1LogicalName,
177
- intersectTable: rel.IntersectEntityName,
178
- });
179
- }
180
- }
181
- catch (error) {
182
- console.warn(`Failed to fetch relationships for ${logicalName}:`, error);
183
- }
184
- return relationships;
185
- });
186
- }
187
- /**
188
- * Map Dataverse attribute types to simplified types
189
- */
190
- mapAttributeType(attributeType) {
191
- const typeMap = {
192
- 'String': 'string',
193
- 'Memo': 'string',
194
- 'Integer': 'int',
195
- 'BigInt': 'int',
196
- 'Decimal': 'decimal',
197
- 'Double': 'decimal',
198
- 'Money': 'money',
199
- 'DateTime': 'datetime',
200
- 'Boolean': 'boolean',
201
- 'Lookup': 'lookup',
202
- 'Customer': 'lookup',
203
- 'Owner': 'lookup',
204
- 'Picklist': 'picklist',
205
- 'State': 'picklist',
206
- 'Status': 'picklist',
207
- 'Uniqueidentifier': 'guid',
208
- };
209
- return typeMap[attributeType] || 'string';
210
- }
211
- /**
212
- * List all solutions in the environment
213
- * @returns Array of solution names
214
- */
215
- listSolutions() {
216
- return __awaiter(this, void 0, void 0, function* () {
217
- var _a, _b;
218
- try {
219
- const response = yield this.axiosInstance.get(`/solutions?$select=uniquename,friendlyname,version&$filter=isvisible eq true&$orderby=friendlyname asc`);
220
- return response.data.value.map((s) => ({
221
- uniqueName: s.uniquename,
222
- displayName: s.friendlyname,
223
- version: s.version,
224
- }));
225
- }
226
- catch (error) {
227
- if (error.response) {
228
- throw new Error(`Dataverse API error: ${error.response.status} - ${((_b = (_a = error.response.data) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.message) || error.message}`);
229
- }
230
- throw error;
231
- }
232
- });
233
- }
234
- }
235
- exports.DataverseClient = DataverseClient;
236
- //# sourceMappingURL=DataverseClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DataverseClient.js","sourceRoot":"","sources":["../../../src/utils/DataverseClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA6C;AAe7C;;GAEG;AACH,MAAa,eAAe;IAK1B,YAAY,MAAuB;QACjC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;QAE7C,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,cAAc,IAAI,CAAC,UAAU,EAAE;YAC9D,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE;gBAC/C,QAAQ,EAAE,kBAAkB;gBAC5B,cAAc,EAAE,kBAAkB;gBAClC,kBAAkB,EAAE,KAAK;gBACzB,eAAe,EAAE,KAAK;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACG,aAAa,CAAC,kBAA0B;;;YAC5C,IAAI,CAAC;gBACH,yBAAyB;gBACzB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACnD,qCAAqC,kBAAkB,+GAA+G,CACvK,CAAC;gBACF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7E,MAAM,IAAI,KAAK,CAAC,aAAa,kBAAkB,aAAa,CAAC,CAAC;gBAChE,CAAC;gBACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEpD,mBAAmB;gBACnB,MAAM,eAAe,GAAG,MAAA,MAAA,YAAY,CAAC,WAAW,0CAAE,mBAAmB,mCAAI,SAAS,CAAC;gBAEnF,qCAAqC;gBACrC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACrD,oDAAoD,YAAY,CAAC,UAAU,0CAA0C,CACtH,CAAC;gBACF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAElC,2BAA2B;gBAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAE9B,OAAO;oBACL,UAAU,EAAE,YAAY,CAAC,UAAU;oBACnC,WAAW,EAAE,YAAY,CAAC,YAAY;oBACtC,OAAO,EAAE,YAAY,CAAC,OAAO;oBAC7B,eAAe,EAAE,eAAe;oBAChC,MAAM,EAAE,MAAM;iBACf,CAAC;YACJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAA,MAAA,MAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,0CAAE,KAAK,0CAAE,OAAO,KAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7H,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;OAEG;IACW,WAAW,CAAC,QAAkB;;YAC1C,MAAM,MAAM,GAAqB,EAAE,CAAC;YAEpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC7C,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACrB,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,yBAAyB,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAED;;OAEG;IACW,UAAU,CAAC,OAAe;;;YACtC,IAAI,CAAC;gBACH,wBAAwB;gBACxB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACjD,sBAAsB,OAAO,4GAA4G,CAC1I,CAAC;gBAEF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC;gBAEnC,mBAAmB;gBACnB,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACrD,sBAAsB,OAAO,oGAAoG,CAClI,CAAC;gBAEF,MAAM,UAAU,GAAyB,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;;oBAAC,OAAA,CAAC;wBACzF,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,WAAW,EAAE,CAAA,MAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,kBAAkB,0CAAE,KAAK,KAAI,IAAI,CAAC,WAAW;wBAC5E,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;wBAC/C,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK;wBACtC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK;wBAC1C,UAAU,EAAE,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,MAAK,qBAAqB,IAAI,CAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,MAAK,gBAAgB;qBAClH,CAAC,CAAA;iBAAA,CAAC,CAAC;gBAEJ,sBAAsB;gBACtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEjF,OAAO;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,CAAA,MAAA,MAAA,MAAM,CAAC,WAAW,0CAAE,kBAAkB,0CAAE,KAAK,KAAI,MAAM,CAAC,WAAW;oBAChF,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;oBAC7C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;oBACjD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,KAAK;oBACxC,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,UAAU,EAAE,UAAU;oBACtB,aAAa,EAAE,aAAa;iBAC7B,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;OAEG;IACW,kBAAkB,CAAC,OAAe,EAAE,WAAmB;;YACnE,MAAM,aAAa,GAA4B,EAAE,CAAC;YAElD,IAAI,CAAC;gBACH,kCAAkC;gBAClC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACpD,sBAAsB,OAAO,qGAAqG,CACnI,CAAC;gBAEF,KAAK,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,gBAAgB,KAAK,WAAW,EAAE,CAAC;wBACzC,aAAa,CAAC,IAAI,CAAC;4BACjB,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,IAAI,EAAE,WAAW;4BACjB,YAAY,EAAE,GAAG,CAAC,iBAAiB;4BACnC,eAAe,EAAE,GAAG,CAAC,oBAAoB;yBAC1C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,kCAAkC;gBAClC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACpD,sBAAsB,OAAO,qGAAqG,CACnI,CAAC;gBAEF,KAAK,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC/C,IAAI,GAAG,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;wBAC1C,aAAa,CAAC,IAAI,CAAC;4BACjB,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,IAAI,EAAE,WAAW;4BACjB,YAAY,EAAE,GAAG,CAAC,gBAAgB;4BAClC,eAAe,EAAE,GAAG,CAAC,oBAAoB;yBAC1C,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAED,mCAAmC;gBACnC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CACrD,sBAAsB,OAAO,wGAAwG,CACtI,CAAC;gBAEF,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChD,MAAM,SAAS,GAAG,GAAG,CAAC,kBAAkB,KAAK,WAAW,CAAC;oBACzD,aAAa,CAAC,IAAI,CAAC;wBACjB,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,IAAI,EAAE,YAAY;wBAClB,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB;wBACzE,cAAc,EAAE,GAAG,CAAC,mBAAmB;qBACxC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,aAAa,CAAC;QACvB,CAAC;KAAA;IAED;;OAEG;IACK,gBAAgB,CAAC,aAAqB;QAC5C,MAAM,OAAO,GAA8B;YACzC,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,QAAQ;YACjB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,UAAU;YACpB,kBAAkB,EAAE,MAAM;SAC3B,CAAC;QAEF,OAAO,OAAO,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACG,aAAa;;;YACjB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAC3C,wGAAwG,CACzG,CAAC;gBAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;oBAC1C,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,WAAW,EAAE,CAAC,CAAC,YAAY;oBAC3B,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAA,MAAA,MAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,0CAAE,KAAK,0CAAE,OAAO,KAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7H,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;CACF;AAhPD,0CAgPC"}
@@ -1 +0,0 @@
1
- *{margin:0;padding:0;box-sizing:border-box}body{font-family:var(--vscode-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);background:var(--vscode-editor-background, linear-gradient(135deg, #667eea 0%, #764ba2 100%));color:var(--vscode-editor-foreground, #333);padding:20px;min-height:100vh;line-height:1.6}.container{max-width:1400px;margin:0 auto}.header{text-align:center;margin-bottom:30px;padding-bottom:20px;border-bottom:1px solid var(--vscode-panel-border, rgba(255, 255, 255, .2));color:var(--vscode-foreground, white)}.header h1{font-size:2rem;margin-bottom:10px}.header p{font-size:1rem;opacity:.8}.card{background:var(--vscode-editor-background, white);border:1px solid var(--vscode-panel-border, #e5e7eb);border-radius:8px;padding:24px;margin-bottom:20px;box-shadow:0 4px 6px #0000001a}.info-message{background:var(--vscode-inputValidation-infoBackground, #063b49);border:1px solid var(--vscode-inputValidation-infoBorder, #007acc);color:var(--vscode-inputValidation-infoForeground, #ffffff);padding:15px;border-radius:6px;margin-bottom:20px}.error{background:var(--vscode-inputValidation-errorBackground, #5a1d1d);border:1px solid var(--vscode-inputValidation-errorBorder, #be1100);color:var(--vscode-inputValidation-errorForeground, #ffffff);padding:15px;border-radius:6px;margin-bottom:20px}.loading{text-align:center;padding:40px;color:var(--vscode-foreground, white);font-size:1.5rem}.form-group{margin-bottom:20px}.form-group label{display:block;margin-bottom:8px;font-weight:500;font-size:14px;color:var(--vscode-foreground, #333)}select{width:100%;padding:10px 35px 10px 12px;background:var(--vscode-input-background, #f3f4f6);color:var(--vscode-input-foreground, #333);border:1px solid var(--vscode-input-border, #d1d5db);border-radius:4px;font-size:14px;font-family:inherit;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url('data:image/svg+xml;utf8,<svg fill="%23666" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path d="M4 6l4 4 4-4z"/></svg>');background-repeat:no-repeat;background-position:right 10px center;background-size:12px}select:focus{outline:none;border-color:var(--vscode-focusBorder, #007acc)}select:disabled{opacity:.5;cursor:not-allowed}.generate-section{margin-top:20px}h2{margin-bottom:20px;font-size:1.3rem;color:var(--vscode-foreground, #333)}h3{margin-bottom:15px;font-size:1.1rem;color:var(--vscode-foreground, #333)}.format-selector{display:flex;gap:10px;margin-bottom:20px;align-items:center;flex-wrap:wrap}.format-btn{padding:8px 16px;border:1px solid var(--vscode-panel-border, #d1d5db);background:var(--vscode-button-secondaryBackground, #f3f4f6);color:var(--vscode-button-secondaryForeground, #333);border-radius:4px;cursor:pointer;transition:all .2s;font-size:14px;font-weight:500}.format-btn:hover{background:var(--vscode-button-secondaryHoverBackground, #e5e7eb)}.format-btn.active{border-color:var(--vscode-focusBorder, #007acc);background:var(--vscode-button-background, #0e639c);color:var(--vscode-button-foreground, #ffffff)}.config-section{margin-top:20px;padding-top:20px;border-top:1px solid var(--vscode-panel-border, #e5e7eb)}.config-group{margin-bottom:15px}.config-group label{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:14px}.config-group input[type=checkbox]{width:18px;height:18px;cursor:pointer}.config-group input[type=number]{width:100px;padding:6px 10px;background:var(--vscode-input-background, #f3f4f6);color:var(--vscode-input-foreground, #333);border:1px solid var(--vscode-input-border, #d1d5db);border-radius:4px;font-size:14px}.config-group input[type=number]:focus{outline:none;border-color:var(--vscode-focusBorder, #007acc)}.config-label-group{display:flex;align-items:center;gap:10px;margin-bottom:8px}.config-label-group label{font-weight:500;min-width:200px}.config-help{font-size:12px;opacity:.7;margin-left:28px;margin-top:-8px;margin-bottom:8px}.btn{padding:10px 20px;border:none;border-radius:4px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;font-family:inherit}.btn-primary{background:var(--vscode-button-background, #667eea);color:var(--vscode-button-foreground, #ffffff);margin-top:20px}.btn-primary:hover{background:var(--vscode-button-hoverBackground, #5568d3)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-secondary{background:var(--vscode-button-secondaryBackground, #f3f4f6);color:var(--vscode-button-secondaryForeground, #333);margin-right:10px}.btn-secondary:hover{background:var(--vscode-button-secondaryHoverBackground, #e5e7eb)}.diagram-controls{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}.diagram-container{margin-top:20px;border:1px solid var(--vscode-panel-border, #e5e7eb);border-radius:8px;padding:20px;background:var(--vscode-editor-background, #f9fafb);overflow:auto;max-height:600px}.diagram-text{background:var(--vscode-textCodeBlock-background, #1e1e1e);color:var(--vscode-textCodeBlock-foreground, #d4d4d4);padding:20px;border-radius:6px;overflow-x:auto;font-family:var(--vscode-editor-font-family, "Courier New", monospace);font-size:13px;border:1px solid var(--vscode-panel-border, #3c3c3c)}.mermaid-container{text-align:center;background:var(--vscode-editor-background, #ffffff);padding:1rem;border-radius:4px;overflow-x:auto}
@@ -1,13 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Dataverse ERD Generator</title>
7
- <script type="module" crossorigin src="/index.js"></script>
8
- <link rel="stylesheet" crossorigin href="/index.css">
9
- </head>
10
- <body>
11
- <div id="root"></div>
12
- </body>
13
- </html>