@microsoft/managed-apps-codegen 0.2.1

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 (119) hide show
  1. package/LICENSE +153 -0
  2. package/README.md +37 -0
  3. package/dist/CodegenProject.d.ts +26 -0
  4. package/dist/CodegenProject.d.ts.map +1 -0
  5. package/dist/CodegenProject.js +140 -0
  6. package/dist/CodegenProject.js.map +1 -0
  7. package/dist/Connector/generateConnectorModel.d.ts +13 -0
  8. package/dist/Connector/generateConnectorModel.d.ts.map +1 -0
  9. package/dist/Connector/generateConnectorModel.js +163 -0
  10. package/dist/Connector/generateConnectorModel.js.map +1 -0
  11. package/dist/Connector/generateConnectorService.d.ts +15 -0
  12. package/dist/Connector/generateConnectorService.d.ts.map +1 -0
  13. package/dist/Connector/generateConnectorService.js +331 -0
  14. package/dist/Connector/generateConnectorService.js.map +1 -0
  15. package/dist/Connector/index.d.ts +6 -0
  16. package/dist/Connector/index.d.ts.map +1 -0
  17. package/dist/Connector/index.js +6 -0
  18. package/dist/Connector/index.js.map +1 -0
  19. package/dist/Dataverse/generateDataverseModel.d.ts +18 -0
  20. package/dist/Dataverse/generateDataverseModel.d.ts.map +1 -0
  21. package/dist/Dataverse/generateDataverseModel.js +226 -0
  22. package/dist/Dataverse/generateDataverseModel.js.map +1 -0
  23. package/dist/Dataverse/generateDataverseService.d.ts +17 -0
  24. package/dist/Dataverse/generateDataverseService.d.ts.map +1 -0
  25. package/dist/Dataverse/generateDataverseService.js +323 -0
  26. package/dist/Dataverse/generateDataverseService.js.map +1 -0
  27. package/dist/Dataverse/index.d.ts +6 -0
  28. package/dist/Dataverse/index.d.ts.map +1 -0
  29. package/dist/Dataverse/index.js +6 -0
  30. package/dist/Dataverse/index.js.map +1 -0
  31. package/dist/SharePointTabular/generateSharepointTabularModel.d.ts +16 -0
  32. package/dist/SharePointTabular/generateSharepointTabularModel.d.ts.map +1 -0
  33. package/dist/SharePointTabular/generateSharepointTabularModel.js +130 -0
  34. package/dist/SharePointTabular/generateSharepointTabularModel.js.map +1 -0
  35. package/dist/SharePointTabular/index.d.ts +5 -0
  36. package/dist/SharePointTabular/index.d.ts.map +1 -0
  37. package/dist/SharePointTabular/index.js +5 -0
  38. package/dist/SharePointTabular/index.js.map +1 -0
  39. package/dist/SqlStoredProc/generateSqlStoredProcModel.d.ts +16 -0
  40. package/dist/SqlStoredProc/generateSqlStoredProcModel.d.ts.map +1 -0
  41. package/dist/SqlStoredProc/generateSqlStoredProcModel.js +38 -0
  42. package/dist/SqlStoredProc/generateSqlStoredProcModel.js.map +1 -0
  43. package/dist/SqlStoredProc/generateSqlStoredProcService.d.ts +16 -0
  44. package/dist/SqlStoredProc/generateSqlStoredProcService.d.ts.map +1 -0
  45. package/dist/SqlStoredProc/generateSqlStoredProcService.js +89 -0
  46. package/dist/SqlStoredProc/generateSqlStoredProcService.js.map +1 -0
  47. package/dist/SqlStoredProc/index.d.ts +6 -0
  48. package/dist/SqlStoredProc/index.d.ts.map +1 -0
  49. package/dist/SqlStoredProc/index.js +6 -0
  50. package/dist/SqlStoredProc/index.js.map +1 -0
  51. package/dist/Tabular/generateCommonModels.d.ts +11 -0
  52. package/dist/Tabular/generateCommonModels.d.ts.map +1 -0
  53. package/dist/Tabular/generateCommonModels.js +27 -0
  54. package/dist/Tabular/generateCommonModels.js.map +1 -0
  55. package/dist/Tabular/generateTabularModel.d.ts +15 -0
  56. package/dist/Tabular/generateTabularModel.d.ts.map +1 -0
  57. package/dist/Tabular/generateTabularModel.js +31 -0
  58. package/dist/Tabular/generateTabularModel.js.map +1 -0
  59. package/dist/Tabular/generateTabularService.d.ts +19 -0
  60. package/dist/Tabular/generateTabularService.d.ts.map +1 -0
  61. package/dist/Tabular/generateTabularService.js +165 -0
  62. package/dist/Tabular/generateTabularService.js.map +1 -0
  63. package/dist/Tabular/index.d.ts +7 -0
  64. package/dist/Tabular/index.d.ts.map +1 -0
  65. package/dist/Tabular/index.js +7 -0
  66. package/dist/Tabular/index.js.map +1 -0
  67. package/dist/defaultPrettierConfig.d.ts +6 -0
  68. package/dist/defaultPrettierConfig.d.ts.map +1 -0
  69. package/dist/defaultPrettierConfig.js +10 -0
  70. package/dist/defaultPrettierConfig.js.map +1 -0
  71. package/dist/index.d.ts +13 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +11 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/shared/constants.d.ts +9 -0
  76. package/dist/shared/constants.d.ts.map +1 -0
  77. package/dist/shared/constants.js +9 -0
  78. package/dist/shared/constants.js.map +1 -0
  79. package/dist/shared/dataverseUtils.d.ts +61 -0
  80. package/dist/shared/dataverseUtils.d.ts.map +1 -0
  81. package/dist/shared/dataverseUtils.js +138 -0
  82. package/dist/shared/dataverseUtils.js.map +1 -0
  83. package/dist/shared/flowUtils.d.ts +11 -0
  84. package/dist/shared/flowUtils.d.ts.map +1 -0
  85. package/dist/shared/flowUtils.js +16 -0
  86. package/dist/shared/flowUtils.js.map +1 -0
  87. package/dist/shared/nameUtils.d.ts +33 -0
  88. package/dist/shared/nameUtils.d.ts.map +1 -0
  89. package/dist/shared/nameUtils.js +180 -0
  90. package/dist/shared/nameUtils.js.map +1 -0
  91. package/dist/shared/project.d.ts +22 -0
  92. package/dist/shared/project.d.ts.map +1 -0
  93. package/dist/shared/project.js +5 -0
  94. package/dist/shared/project.js.map +1 -0
  95. package/dist/shared/schemaUtils.d.ts +32 -0
  96. package/dist/shared/schemaUtils.d.ts.map +1 -0
  97. package/dist/shared/schemaUtils.js +110 -0
  98. package/dist/shared/schemaUtils.js.map +1 -0
  99. package/dist/shared/sqlStoredProcUtils.d.ts +11 -0
  100. package/dist/shared/sqlStoredProcUtils.d.ts.map +1 -0
  101. package/dist/shared/sqlStoredProcUtils.js +19 -0
  102. package/dist/shared/sqlStoredProcUtils.js.map +1 -0
  103. package/dist/shared/swaggerUtils.d.ts +12 -0
  104. package/dist/shared/swaggerUtils.d.ts.map +1 -0
  105. package/dist/shared/swaggerUtils.js +12 -0
  106. package/dist/shared/swaggerUtils.js.map +1 -0
  107. package/dist/shared/typeUtils.d.ts +22 -0
  108. package/dist/shared/typeUtils.d.ts.map +1 -0
  109. package/dist/shared/typeUtils.js +94 -0
  110. package/dist/shared/typeUtils.js.map +1 -0
  111. package/dist/shared/types.d.ts +24 -0
  112. package/dist/shared/types.d.ts.map +1 -0
  113. package/dist/shared/types.js +5 -0
  114. package/dist/shared/types.js.map +1 -0
  115. package/dist/types.d.ts +5 -0
  116. package/dist/types.d.ts.map +1 -0
  117. package/dist/types.js +5 -0
  118. package/dist/types.js.map +1 -0
  119. package/package.json +61 -0
@@ -0,0 +1,331 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { Scope } from 'ts-morph';
5
+ import { formatPropertyName, getServiceName, normalizeGenericTypeName, sanitizeName, } from '../shared/nameUtils.js';
6
+ import { extractReferencedType, isJsonObject, mapJsonTypeToTypeScript, } from '../shared/schemaUtils.js';
7
+ import { hasPaths } from '../shared/swaggerUtils.js';
8
+ // ─── Entry point ──────────────────────────────────────────────────────────────
9
+ export async function generateConnectorService({ parentContext, swaggerObject, serviceFilePath, dataSourcesFilePath, isLogicFlow, }) {
10
+ const { modelName, dataSourceName, project } = parentContext;
11
+ const serviceFile = await project.createFile('service', serviceFilePath, '');
12
+ const operations = buildOperationsFromPaths(swaggerObject, modelName, isLogicFlow);
13
+ const allReferencedTypes = [...new Set(operations.flatMap((op) => op.referencedModelTypes))];
14
+ // External package imports
15
+ serviceFile.addImportDeclaration({
16
+ moduleSpecifier: '@microsoft/managed-apps/data',
17
+ namedImports: ['getClient'],
18
+ });
19
+ serviceFile.addImportDeclaration({
20
+ moduleSpecifier: '@microsoft/managed-apps/data',
21
+ namedImports: ['IOperationResult'],
22
+ isTypeOnly: true,
23
+ });
24
+ serviceFile.addImportDeclaration({
25
+ moduleSpecifier: dataSourcesFilePath,
26
+ defaultImport: 'dataSources',
27
+ });
28
+ // Model type imports — type-only; fixMissingImports cannot mark them as type-only
29
+ if (allReferencedTypes.length > 0) {
30
+ serviceFile.addImportDeclaration({
31
+ moduleSpecifier: serviceFile.getRelativePathAsModuleSpecifierTo(project.getSourceFile('model')),
32
+ namedImports: allReferencedTypes,
33
+ isTypeOnly: true,
34
+ });
35
+ }
36
+ const serviceName = `${modelName}Service`;
37
+ serviceFile.addClass({
38
+ name: serviceName,
39
+ isExported: true,
40
+ properties: [
41
+ {
42
+ name: 'dataSourceName',
43
+ isStatic: true,
44
+ isReadonly: true,
45
+ scope: Scope.Private,
46
+ initializer: `'${dataSourceName.toLowerCase()}'`,
47
+ },
48
+ {
49
+ name: 'client',
50
+ isStatic: true,
51
+ isReadonly: true,
52
+ scope: Scope.Private,
53
+ initializer: 'getClient(dataSources)',
54
+ },
55
+ ],
56
+ methods: operations.map((op) => buildMethod(op, serviceName)),
57
+ });
58
+ }
59
+ // ─── Path → operations ────────────────────────────────────────────────────────
60
+ function buildOperationsFromPaths(swaggerObject, modelName, isLogicFlow) {
61
+ const operations = [];
62
+ if (!hasPaths(swaggerObject)) {
63
+ return operations;
64
+ }
65
+ const globalParameters = 'parameters' in swaggerObject && isJsonObject(swaggerObject.parameters)
66
+ ? swaggerObject.parameters
67
+ : undefined;
68
+ for (const pathValue of Object.values(swaggerObject.paths)) {
69
+ if (!isJsonObject(pathValue))
70
+ continue;
71
+ for (const operationValue of Object.values(pathValue)) {
72
+ if (!isJsonObject(operationValue) || !('operationId' in operationValue))
73
+ continue;
74
+ const op = buildOperation(operationValue, modelName, isLogicFlow, globalParameters);
75
+ if (op)
76
+ operations.push(op);
77
+ }
78
+ }
79
+ return operations;
80
+ }
81
+ function buildOperation(operationObj, modelName, isLogicFlow, globalParameters) {
82
+ if (typeof operationObj.operationId !== 'string')
83
+ return null;
84
+ const operationId = operationObj.operationId;
85
+ const summary = typeof operationObj.summary === 'string' ? operationObj.summary : undefined;
86
+ const description = typeof operationObj.description === 'string' ? operationObj.description : undefined;
87
+ const referencedModelTypes = [];
88
+ const { params, internalDefaults } = collectParams(operationObj, modelName, isLogicFlow, referencedModelTypes, globalParameters);
89
+ const returnType = determineReturnType(operationObj, modelName, referencedModelTypes);
90
+ return {
91
+ operationId,
92
+ functionName: sanitizeOperationId(operationId),
93
+ summary,
94
+ description,
95
+ params,
96
+ internalDefaults,
97
+ returnType,
98
+ referencedModelTypes,
99
+ };
100
+ }
101
+ // ─── Parameter collection ─────────────────────────────────────────────────────
102
+ function collectParams(operationObj, modelName, isLogicFlow, referencedModelTypes, globalParameters) {
103
+ const params = [];
104
+ const internalDefaults = [];
105
+ if (!Array.isArray(operationObj.parameters)) {
106
+ return { params, internalDefaults };
107
+ }
108
+ const rawParams = operationObj.parameters;
109
+ const ordered = sortParamsRequiredFirst(rawParams);
110
+ for (const rawParam of ordered) {
111
+ if (!isJsonObject(rawParam))
112
+ continue;
113
+ // Resolve $ref to global parameters (e.g. #/parameters/groupId__in_path) so inline
114
+ // types are used directly instead of being treated as model type imports.
115
+ const param = resolveGlobalParamRef(rawParam, globalParameters);
116
+ const paramName = getParamName(param).trim();
117
+ if (!paramName || paramName.toLowerCase() === 'connectionid')
118
+ continue;
119
+ // Logic flow: skip internal params that have defaults — hardcode them in the body
120
+ if (isLogicFlow && param['x-ms-visibility'] === 'internal' && 'default' in param) {
121
+ internalDefaults.push({ name: paramName, value: param['default'] });
122
+ continue;
123
+ }
124
+ const paramType = getParamType(param, modelName, referencedModelTypes);
125
+ const required = 'required' in param && (param.required === true || param.required === 'true');
126
+ const normalizedName = sanitizeName(paramName);
127
+ params.push({ normalizedName, originalName: paramName, type: paramType, required });
128
+ }
129
+ return { params, internalDefaults };
130
+ }
131
+ function sortParamsRequiredFirst(params) {
132
+ return [...params].sort((a, b) => {
133
+ const aReq = isJsonObject(a) && (a.required === true || a.required === 'true') ? 1 : 0;
134
+ const bReq = isJsonObject(b) && (b.required === true || b.required === 'true') ? 1 : 0;
135
+ return bReq - aReq;
136
+ });
137
+ }
138
+ /**
139
+ * If `param` is a `$ref` pointing to `#/parameters/<name>`, resolves it against
140
+ * `globalParameters` and returns the resolved object. Otherwise returns `param` as-is.
141
+ * This prevents global parameter ref names from being mistakenly added to referencedModelTypes.
142
+ */
143
+ function resolveGlobalParamRef(param, globalParameters) {
144
+ if (typeof param.$ref === 'string' &&
145
+ param.$ref.toLowerCase().startsWith('#/parameters/') &&
146
+ globalParameters) {
147
+ const refName = param.$ref.substring('#/parameters/'.length);
148
+ const resolved = globalParameters[refName];
149
+ if (isJsonObject(resolved))
150
+ return resolved;
151
+ }
152
+ return param;
153
+ }
154
+ function getParamName(param) {
155
+ // $ref parameters: extract name from ref path
156
+ if (typeof param.$ref === 'string' && param.$ref.toLowerCase().startsWith('#/parameters/')) {
157
+ return param.$ref.substring('#/parameters/'.length);
158
+ }
159
+ return typeof param.name === 'string' ? param.name : '';
160
+ }
161
+ function getParamType(param, modelName, referencedModelTypes) {
162
+ // Body param with schema
163
+ if (isJsonObject(param.schema)) {
164
+ return resolveSchemaType(param.schema, modelName, referencedModelTypes);
165
+ }
166
+ // $ref param — only model definition refs are valid types to import.
167
+ // A #/parameters/ ref here means resolveGlobalParamRef couldn't resolve it (no global
168
+ // parameters section), so treat it as unknown rather than polluting referencedModelTypes
169
+ // with a non-existent type name.
170
+ if (typeof param.$ref === 'string') {
171
+ if (param.$ref.toLowerCase().startsWith('#/definitions/')) {
172
+ const refType = normalizeGenericTypeName(extractReferencedType(param.$ref));
173
+ referencedModelTypes.push(refType);
174
+ return refType;
175
+ }
176
+ return 'unknown';
177
+ }
178
+ // Inline type
179
+ if (typeof param.type === 'string') {
180
+ // binary format string → string
181
+ if (param.format === 'binary' && param.type === 'string')
182
+ return 'string';
183
+ return mapJsonTypeToTypeScript(param.type);
184
+ }
185
+ return 'unknown';
186
+ }
187
+ function resolveSchemaType(schema, modelName, referencedModelTypes) {
188
+ if (typeof schema.$ref === 'string') {
189
+ const refType = normalizeGenericTypeName(extractReferencedType(schema.$ref));
190
+ referencedModelTypes.push(refType);
191
+ return refType;
192
+ }
193
+ if (typeof schema.type === 'string') {
194
+ if (schema.format === 'binary' && schema.type === 'string')
195
+ return 'string';
196
+ return mapJsonTypeToTypeScript(schema.type);
197
+ }
198
+ return 'unknown';
199
+ }
200
+ // ─── Return type resolution ───────────────────────────────────────────────────
201
+ function determineReturnType(operationObj, modelName, referencedModelTypes) {
202
+ if (!isJsonObject(operationObj.responses))
203
+ return 'void';
204
+ const response200 = operationObj.responses['200'];
205
+ if (!isJsonObject(response200) || !isJsonObject(response200.schema))
206
+ return 'void';
207
+ return extractOutputType(response200.schema, modelName, referencedModelTypes);
208
+ }
209
+ function extractOutputType(schema, modelName, referencedModelTypes) {
210
+ // { properties: { value: { type: 'array', items: { $ref } } } }
211
+ if (isJsonObject(schema.properties) && isJsonObject(schema.properties.value)) {
212
+ const valueNode = schema.properties.value;
213
+ if (valueNode.type === 'array' && isJsonObject(valueNode.items)) {
214
+ const itemsNode = valueNode.items;
215
+ if (typeof itemsNode.$ref === 'string') {
216
+ const refType = normalizeGenericTypeName(extractReferencedType(itemsNode.$ref));
217
+ referencedModelTypes.push(refType);
218
+ return `{ value: ${refType}[] }`;
219
+ }
220
+ }
221
+ }
222
+ // type === 'array' + items.$ref
223
+ if (schema.type === 'array' && isJsonObject(schema.items)) {
224
+ const itemsNode = schema.items;
225
+ if (typeof itemsNode.$ref === 'string') {
226
+ const refType = normalizeGenericTypeName(extractReferencedType(itemsNode.$ref));
227
+ referencedModelTypes.push(refType);
228
+ return `${refType}[]`;
229
+ }
230
+ }
231
+ // items.$ref (non-array wrapper)
232
+ if (isJsonObject(schema.items) && typeof schema.items.$ref === 'string') {
233
+ const refType = normalizeGenericTypeName(extractReferencedType(schema.items.$ref));
234
+ referencedModelTypes.push(refType);
235
+ return refType;
236
+ }
237
+ // Direct $ref
238
+ if (typeof schema.$ref === 'string') {
239
+ const refType = normalizeGenericTypeName(extractReferencedType(schema.$ref));
240
+ referencedModelTypes.push(refType);
241
+ return refType;
242
+ }
243
+ // Primitive type
244
+ if (typeof schema.type === 'string') {
245
+ return mapJsonTypeToTypeScript(schema.type);
246
+ }
247
+ return 'void';
248
+ }
249
+ // ─── Method body construction ─────────────────────────────────────────────────
250
+ function buildMethod(op, serviceName) {
251
+ const docs = op.summary
252
+ ? [
253
+ {
254
+ description: op.description ? `${op.summary}\n${op.description}` : op.summary,
255
+ },
256
+ ]
257
+ : undefined;
258
+ return {
259
+ name: op.functionName,
260
+ isStatic: true,
261
+ isAsync: true,
262
+ scope: Scope.Public,
263
+ parameters: op.params.map((p) => ({
264
+ name: p.normalizedName,
265
+ type: p.type,
266
+ hasQuestionToken: !p.required,
267
+ })),
268
+ returnType: `Promise<IOperationResult<${op.returnType}>>`,
269
+ statements: buildStatements(op, serviceName),
270
+ docs,
271
+ };
272
+ }
273
+ function buildStatements(op, serviceName) {
274
+ const tableNameExpr = getServiceName(serviceName.replace(/Service$/, ''));
275
+ const hasParams = op.params.length > 0;
276
+ const hasInternalDefaults = op.internalDefaults.length > 0;
277
+ if (!hasParams && !hasInternalDefaults) {
278
+ return [
279
+ `const result = await ${serviceName}.client.executeAsync<void, ${op.returnType}>(`,
280
+ ` {`,
281
+ ` connectorOperation: {`,
282
+ ` tableName: ${tableNameExpr},`,
283
+ ` operationName: '${op.operationId}',`,
284
+ ` },`,
285
+ ` });`,
286
+ `return result;`,
287
+ ];
288
+ }
289
+ // Build params type from original names (may need quoting)
290
+ const originalParamsType = `{ ${op.params
291
+ .map((p) => `${formatPropertyName(p.originalName)}${p.required ? '' : '?'}: ${p.type}`)
292
+ .join(', ')} }`;
293
+ // Build params object literal: { 'x.y': normalizedXY, plain: plain }
294
+ const paramsObject = op.params
295
+ .map((p) => p.normalizedName !== p.originalName
296
+ ? `${formatPropertyName(p.originalName)}: ${p.normalizedName}`
297
+ : p.normalizedName)
298
+ .join(', ');
299
+ const internalDefaultsLiteral = op.internalDefaults
300
+ .map(({ name, value }) => `${formatPropertyName(name)}: ${JSON.stringify(value)}`)
301
+ .join(', ');
302
+ const parametersValue = hasInternalDefaults ? 'allParams' : 'params';
303
+ const statements = [`const params: ${originalParamsType} = { ${paramsObject} };`];
304
+ if (hasInternalDefaults) {
305
+ statements.push(`const allParams = { ...params, ${internalDefaultsLiteral} };`);
306
+ }
307
+ statements.push(...[
308
+ `const result = await ${serviceName}.client.executeAsync<${originalParamsType}, ${op.returnType}>(`,
309
+ ` {`,
310
+ ` connectorOperation: {`,
311
+ ` tableName: ${tableNameExpr},`,
312
+ ` operationName: '${op.operationId}',`,
313
+ ` parameters: ${parametersValue}`,
314
+ ` },`,
315
+ ` });`,
316
+ `return result;`,
317
+ ]);
318
+ return statements;
319
+ }
320
+ // ─── Utility ──────────────────────────────────────────────────────────────────
321
+ /** Sanitizes an operationId to a valid JS identifier by replacing non-identifier characters with underscores. */
322
+ function sanitizeOperationId(operationId) {
323
+ // Replace any characters that are not valid in JS identifiers
324
+ const sanitized = operationId.replace(/[^a-zA-Z0-9_$]/g, '_');
325
+ if (!sanitized || /^\d/.test(sanitized)) {
326
+ return `_${sanitized}`;
327
+ }
328
+ return sanitized;
329
+ }
330
+ export default generateConnectorService;
331
+ //# sourceMappingURL=generateConnectorService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateConnectorService.js","sourceRoot":"","sources":["../../src/Connector/generateConnectorService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ export { default as generateConnectorModel } from './generateConnectorModel.js';
5
+ export { default as generateConnectorService } from './generateConnectorService.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Connector/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ export { default as generateConnectorModel } from './generateConnectorModel.js';
5
+ export { default as generateConnectorService } from './generateConnectorService.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Connector/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ICodegenContext } from '../shared/types.js';
5
+ import type { JsonObject } from '../types.js';
6
+ interface GenerateModelContext {
7
+ parentContext: ICodegenContext;
8
+ schema: JsonObject;
9
+ fileColumnNames: string[];
10
+ imageColumnNames: string[];
11
+ modelFilePath: string;
12
+ }
13
+ export declare function generateDataverseModel({ parentContext, schema, fileColumnNames, imageColumnNames, modelFilePath, }: GenerateModelContext): Promise<{
14
+ hasLookupColumns: boolean;
15
+ multiSelectPicklistFields: string[];
16
+ }>;
17
+ export default generateDataverseModel;
18
+ //# sourceMappingURL=generateDataverseModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateDataverseModel.d.ts","sourceRoot":"","sources":["../../src/Dataverse/generateDataverseModel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,UAAU,oBAAoB;IAC5B,aAAa,EAAE,eAAe,CAAC;IAC/B,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,sBAAsB,CAAC,EAC3C,aAAa,EACb,MAAM,EACN,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,yBAAyB,EAAE,MAAM,EAAE,CAAC;CACrC,CAAC,CAsCD;AA6RD,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,226 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { VariableDeclarationKind } from 'ts-morph';
5
+ import { generateLookupValuePropertyName, generateODataBindPropertyName, getDataverseLookupColumns, getDataverseMultiSelectPicklistFields, hasOptionsetData, iterateDataverseProperties, } from '../shared/dataverseUtils.js';
6
+ import { convertToValidIdentifier, formatPropertyName, normalizePropertyName, sanitizeName, } from '../shared/nameUtils.js';
7
+ import { formatEnumLabel, generateOptionsetEnumName } from '../shared/schemaUtils.js';
8
+ import { getPropertiesNode, getRequiredFields, isJsonObject } from '../shared/schemaUtils.js';
9
+ import { determineTypeScriptType } from '../shared/typeUtils.js';
10
+ export async function generateDataverseModel({ parentContext, schema, fileColumnNames, imageColumnNames, modelFilePath, }) {
11
+ const { modelName, project, logger } = parentContext;
12
+ const sourceFile = await project.createFile('model', modelFilePath, '');
13
+ const propertiesNode = getPropertiesNode(schema);
14
+ const lookupColumns = getDataverseLookupColumns(propertiesNode);
15
+ const hasLookupColumns = lookupColumns.size > 0;
16
+ const multiSelectPicklistFields = getDataverseMultiSelectPicklistFields(propertiesNode);
17
+ addOptionsetDeclarations(sourceFile, modelName, propertiesNode);
18
+ if (!hasLookupColumns) {
19
+ addFullInterface(sourceFile, modelName, schema, propertiesNode);
20
+ }
21
+ else {
22
+ const baseInterfaceName = `${modelName}Base`;
23
+ addBaseInterface(sourceFile, baseInterfaceName, modelName, schema, lookupColumns, propertiesNode, logger);
24
+ addExtendedInterface(sourceFile, modelName, baseInterfaceName, schema, lookupColumns, propertiesNode);
25
+ }
26
+ addUploadColumnNameType(sourceFile, modelName, fileColumnNames, imageColumnNames);
27
+ return { hasLookupColumns, multiSelectPicklistFields };
28
+ }
29
+ // ─── Upload Column Name Type ──────────────────────────────────────────────────
30
+ function addUploadColumnNameType(sourceFile, modelName, fileColumnNames, imageColumnNames) {
31
+ const id = convertToValidIdentifier(modelName);
32
+ if (fileColumnNames.length > 0) {
33
+ sourceFile.addTypeAlias({
34
+ name: `${id}FileColumnName`,
35
+ isExported: true,
36
+ type: fileColumnNames.map((col) => `'${col}'`).join(' | '),
37
+ });
38
+ }
39
+ if (imageColumnNames.length > 0) {
40
+ sourceFile.addTypeAlias({
41
+ name: `${id}ImageColumnName`,
42
+ isExported: true,
43
+ type: imageColumnNames.map((col) => `'${col}'`).join(' | '),
44
+ });
45
+ }
46
+ if (fileColumnNames.length === 0 && imageColumnNames.length === 0) {
47
+ return;
48
+ }
49
+ const uploadType = fileColumnNames.length > 0 && imageColumnNames.length > 0
50
+ ? `${id}FileColumnName | ${id}ImageColumnName`
51
+ : fileColumnNames.length > 0
52
+ ? `${id}FileColumnName`
53
+ : `${id}ImageColumnName`;
54
+ sourceFile.addTypeAlias({
55
+ name: `${id}UploadColumnName`,
56
+ isExported: true,
57
+ type: uploadType,
58
+ });
59
+ }
60
+ // ─── Optionset Declarations ───────────────────────────────────────────────────
61
+ function addOptionsetDeclarations(sourceFile, modelName, propertiesNode) {
62
+ for (const [propName, propValue] of Object.entries(propertiesNode)) {
63
+ if (!isJsonObject(propValue) || !hasOptionsetData(propValue)) {
64
+ continue;
65
+ }
66
+ const enumName = generateOptionsetEnumName(modelName, propName);
67
+ const enumValues = propValue['x-ms-enum-values'];
68
+ const enumLabels = propValue.enum;
69
+ if (!Array.isArray(enumValues)) {
70
+ // No x-ms-enum-values: emit a string union type alias from the enum labels.
71
+ sourceFile.addTypeAlias({
72
+ name: enumName,
73
+ isExported: true,
74
+ type: enumLabels.map(formatEnumLabel).join(' | '),
75
+ });
76
+ continue;
77
+ }
78
+ if (!enumValues.every((val) => typeof val === 'number')) {
79
+ throw new Error(`Unsupported Dataverse optionset format: x-ms-enum-values must be an array of numbers. Property: ${propName} in model ${modelName}`);
80
+ }
81
+ // Dataverse format: x-ms-enum-values contains numeric values.
82
+ // Emit a const object mapping numeric keys to display names, plus a keyof type alias.
83
+ const entries = enumLabels.map((label, i) => {
84
+ const sanitizedLabel = !label || (typeof label === 'string' && label.trim() === '')
85
+ ? `EmptyOption${i}`
86
+ : sanitizeName(label);
87
+ return ` ${enumValues[i]}: '${sanitizedLabel}'`;
88
+ });
89
+ sourceFile.addVariableStatement({
90
+ declarationKind: VariableDeclarationKind.Const,
91
+ isExported: true,
92
+ declarations: [
93
+ {
94
+ name: enumName,
95
+ initializer: `{\n${entries.join(',\n')}\n} as const`,
96
+ },
97
+ ],
98
+ });
99
+ sourceFile.addTypeAlias({
100
+ name: enumName,
101
+ isExported: true,
102
+ type: `keyof typeof ${enumName}`,
103
+ });
104
+ }
105
+ }
106
+ /**
107
+ * Adds a single interface for entities with no lookup columns.
108
+ * All properties (including read-only) are included.
109
+ */
110
+ function addFullInterface(sourceFile, modelName, schema, propertiesNode) {
111
+ const requiredFields = getRequiredFields(schema);
112
+ const properties = Object.entries(propertiesNode).map(([propName, propValue]) => {
113
+ const propValueAsObject = isJsonObject(propValue) ? propValue : undefined;
114
+ const formattedName = normalizePropertyName(formatPropertyName(convertToValidIdentifier(propName)));
115
+ const description = typeof propValueAsObject?.description === 'string'
116
+ ? propValueAsObject.description
117
+ : undefined;
118
+ return {
119
+ name: formattedName,
120
+ type: determineTypeScriptType(modelName, propValueAsObject, '', propName),
121
+ hasQuestionToken: !requiredFields.has(propName),
122
+ docs: description ? [{ description }] : undefined,
123
+ };
124
+ });
125
+ sourceFile.addInterface({
126
+ name: convertToValidIdentifier(modelName),
127
+ isExported: true,
128
+ properties,
129
+ });
130
+ }
131
+ /**
132
+ * Adds the base interface for PATCH/POST operations on entities with lookup columns.
133
+ * - Skips read-only properties (they belong in the extended GET interface)
134
+ * - Replaces lookup columns with @odata.bind string properties
135
+ * - Skips lookup-related name properties (e.g., owneridname)
136
+ */
137
+ function addBaseInterface(sourceFile, interfaceName, originalModelName, schema, lookupColumns, propertiesNode, logger) {
138
+ const properties = [];
139
+ const requiredFields = getRequiredFields(schema);
140
+ for (const prop of iterateDataverseProperties(propertiesNode, lookupColumns)) {
141
+ const { type, readOnly, propName, propValue } = prop;
142
+ // lookupRelated properties (e.g., owneridname) should always be read-only.
143
+ // Log a warning if an anomaly is detected, but it will be skipped regardless.
144
+ if (logger && type === 'lookupRelated' && !readOnly) {
145
+ logger.trackActivityEvent('apps-codegen.generateDataverseModel.addBaseInterface.warning', {
146
+ message: 'Anomaly: lookupRelated property is not read-only',
147
+ modelName: originalModelName,
148
+ columnName: propName,
149
+ });
150
+ }
151
+ // Skip read-only properties and lookup-related properties (e.g., owneridname)
152
+ // They are handled in the extended interface, and cannot be written to.
153
+ if (readOnly || type === 'lookupRelated') {
154
+ continue;
155
+ }
156
+ // Replace the lookup columns with an @odata.bind property for write operations.
157
+ if (type === 'lookup') {
158
+ properties.push({
159
+ name: formatPropertyName(generateODataBindPropertyName(prop.schemaName)),
160
+ type: 'string',
161
+ hasQuestionToken: !requiredFields.has(propName),
162
+ });
163
+ continue;
164
+ }
165
+ const formattedName = normalizePropertyName(formatPropertyName(convertToValidIdentifier(propName)));
166
+ const description = typeof propValue.description === 'string' ? propValue.description : undefined;
167
+ properties.push({
168
+ name: formattedName,
169
+ type: determineTypeScriptType(originalModelName, propValue, '', propName),
170
+ hasQuestionToken: !requiredFields.has(propName),
171
+ docs: description ? [{ description }] : undefined,
172
+ });
173
+ }
174
+ sourceFile.addInterface({
175
+ name: convertToValidIdentifier(interfaceName),
176
+ isExported: true,
177
+ properties,
178
+ });
179
+ }
180
+ /**
181
+ * Adds the extended interface for GET operations on entities with lookup columns.
182
+ * Extends the base interface and adds:
183
+ * - Read-only properties (excluding lookup columns, which are handled separately)
184
+ * - Lookup object properties (e.g., ownerid?: object)
185
+ * - Lookup value properties (e.g., _ownerid_value?: string)
186
+ */
187
+ function addExtendedInterface(sourceFile, modelName, baseInterfaceName, schema, lookupColumns, propertiesNode) {
188
+ const requiredFields = getRequiredFields(schema);
189
+ const properties = [];
190
+ for (const { type, readOnly, propName, propValue } of iterateDataverseProperties(propertiesNode, lookupColumns)) {
191
+ // Exclude non-readonly properties (they are handled in the base interface)
192
+ // Exclude lookup properties, they are handled separately below
193
+ if (!readOnly || type === 'lookup') {
194
+ continue;
195
+ }
196
+ const formattedName = normalizePropertyName(formatPropertyName(convertToValidIdentifier(propName)));
197
+ const description = typeof propValue.description === 'string' ? propValue.description : undefined;
198
+ properties.push({
199
+ name: formattedName,
200
+ type: determineTypeScriptType(modelName, propValue, '', propName),
201
+ hasQuestionToken: !requiredFields.has(propName),
202
+ docs: description ? [{ description }] : undefined,
203
+ });
204
+ }
205
+ // Lookup-specific properties: the lookup object and its extracted GUID value.
206
+ for (const lookupPropName of lookupColumns.keys()) {
207
+ properties.push({
208
+ name: formatPropertyName(convertToValidIdentifier(lookupPropName)),
209
+ type: 'object',
210
+ hasQuestionToken: true,
211
+ });
212
+ properties.push({
213
+ name: formatPropertyName(generateLookupValuePropertyName(lookupPropName)),
214
+ type: 'string',
215
+ hasQuestionToken: true,
216
+ });
217
+ }
218
+ sourceFile.addInterface({
219
+ name: convertToValidIdentifier(modelName),
220
+ isExported: true,
221
+ extends: [convertToValidIdentifier(baseInterfaceName)],
222
+ properties,
223
+ });
224
+ }
225
+ export default generateDataverseModel;
226
+ //# sourceMappingURL=generateDataverseModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateDataverseModel.js","sourceRoot":"","sources":["../../src/Dataverse/generateDataverseModel.ts"],"names":[],"mappings":"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"}