@xrmforge/typegen 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2337,281 +2337,6 @@ function generateEntityNamesEnum(entityNames, _options = {}) {
2337
2337
  return lines.join("\n");
2338
2338
  }
2339
2339
 
2340
- // src/generators/webapi-helpers.ts
2341
- function select(...fields) {
2342
- if (fields.length === 0) return "";
2343
- return `?$select=${fields.join(",")}`;
2344
- }
2345
- function parseLookup(response, navigationProperty) {
2346
- const key = `_${navigationProperty}_value`;
2347
- const id = response[key];
2348
- if (!id) return null;
2349
- return {
2350
- id,
2351
- name: response[`${key}@OData.Community.Display.V1.FormattedValue`] ?? "",
2352
- entityType: response[`${key}@Microsoft.Dynamics.CRM.lookuplogicalname`] ?? ""
2353
- };
2354
- }
2355
- function parseLookups(response, navigationProperties) {
2356
- const result = {};
2357
- for (const prop of navigationProperties) {
2358
- result[prop] = parseLookup(response, prop);
2359
- }
2360
- return result;
2361
- }
2362
- function parseFormattedValue(response, fieldName) {
2363
- return response[`${fieldName}@OData.Community.Display.V1.FormattedValue`] ?? null;
2364
- }
2365
- function selectExpand(fields, expand) {
2366
- const parts = [];
2367
- if (fields.length > 0) parts.push(`$select=${fields.join(",")}`);
2368
- if (expand) parts.push(`$expand=${expand}`);
2369
- return parts.length > 0 ? `?${parts.join("&")}` : "";
2370
- }
2371
-
2372
- // src/generators/xrm-constants.ts
2373
- var DisplayState = /* @__PURE__ */ ((DisplayState2) => {
2374
- DisplayState2["Expanded"] = "expanded";
2375
- DisplayState2["Collapsed"] = "collapsed";
2376
- return DisplayState2;
2377
- })(DisplayState || {});
2378
- var FormNotificationLevel = /* @__PURE__ */ ((FormNotificationLevel2) => {
2379
- FormNotificationLevel2["Error"] = "ERROR";
2380
- FormNotificationLevel2["Warning"] = "WARNING";
2381
- FormNotificationLevel2["Info"] = "INFO";
2382
- return FormNotificationLevel2;
2383
- })(FormNotificationLevel || {});
2384
- var RequiredLevel = /* @__PURE__ */ ((RequiredLevel2) => {
2385
- RequiredLevel2["None"] = "none";
2386
- RequiredLevel2["Required"] = "required";
2387
- RequiredLevel2["Recommended"] = "recommended";
2388
- return RequiredLevel2;
2389
- })(RequiredLevel || {});
2390
- var SubmitMode = /* @__PURE__ */ ((SubmitMode2) => {
2391
- SubmitMode2["Always"] = "always";
2392
- SubmitMode2["Never"] = "never";
2393
- SubmitMode2["Dirty"] = "dirty";
2394
- return SubmitMode2;
2395
- })(SubmitMode || {});
2396
- var SaveMode = /* @__PURE__ */ ((SaveMode2) => {
2397
- SaveMode2[SaveMode2["Save"] = 1] = "Save";
2398
- SaveMode2[SaveMode2["SaveAndClose"] = 2] = "SaveAndClose";
2399
- SaveMode2[SaveMode2["Deactivate"] = 5] = "Deactivate";
2400
- SaveMode2[SaveMode2["Reactivate"] = 6] = "Reactivate";
2401
- SaveMode2[SaveMode2["Send"] = 7] = "Send";
2402
- SaveMode2[SaveMode2["Disqualify"] = 15] = "Disqualify";
2403
- SaveMode2[SaveMode2["Qualify"] = 16] = "Qualify";
2404
- SaveMode2[SaveMode2["Assign"] = 47] = "Assign";
2405
- SaveMode2[SaveMode2["SaveAsCompleted"] = 58] = "SaveAsCompleted";
2406
- SaveMode2[SaveMode2["SaveAndNew"] = 59] = "SaveAndNew";
2407
- SaveMode2[SaveMode2["AutoSave"] = 70] = "AutoSave";
2408
- return SaveMode2;
2409
- })(SaveMode || {});
2410
- var ClientType = /* @__PURE__ */ ((ClientType2) => {
2411
- ClientType2["Web"] = "Web";
2412
- ClientType2["Outlook"] = "Outlook";
2413
- ClientType2["Mobile"] = "Mobile";
2414
- return ClientType2;
2415
- })(ClientType || {});
2416
- var ClientState = /* @__PURE__ */ ((ClientState2) => {
2417
- ClientState2["Online"] = "Online";
2418
- ClientState2["Offline"] = "Offline";
2419
- return ClientState2;
2420
- })(ClientState || {});
2421
- var OperationType = /* @__PURE__ */ ((OperationType2) => {
2422
- OperationType2[OperationType2["Action"] = 0] = "Action";
2423
- OperationType2[OperationType2["Function"] = 1] = "Function";
2424
- OperationType2[OperationType2["CRUD"] = 2] = "CRUD";
2425
- return OperationType2;
2426
- })(OperationType || {});
2427
- var StructuralProperty = /* @__PURE__ */ ((StructuralProperty2) => {
2428
- StructuralProperty2[StructuralProperty2["Unknown"] = 0] = "Unknown";
2429
- StructuralProperty2[StructuralProperty2["PrimitiveType"] = 1] = "PrimitiveType";
2430
- StructuralProperty2[StructuralProperty2["ComplexType"] = 2] = "ComplexType";
2431
- StructuralProperty2[StructuralProperty2["EnumerationType"] = 3] = "EnumerationType";
2432
- StructuralProperty2[StructuralProperty2["Collection"] = 4] = "Collection";
2433
- StructuralProperty2[StructuralProperty2["EntityType"] = 5] = "EntityType";
2434
- return StructuralProperty2;
2435
- })(StructuralProperty || {});
2436
- var BindingType = /* @__PURE__ */ ((BindingType2) => {
2437
- BindingType2[BindingType2["Global"] = 0] = "Global";
2438
- BindingType2[BindingType2["Entity"] = 1] = "Entity";
2439
- BindingType2[BindingType2["EntityCollection"] = 2] = "EntityCollection";
2440
- return BindingType2;
2441
- })(BindingType || {});
2442
-
2443
- // src/generators/action-runtime.ts
2444
- function executeRequest(request) {
2445
- return Xrm.WebApi.online.execute(request);
2446
- }
2447
- function executeMultiple(requests) {
2448
- return Xrm.WebApi.online.executeMultiple(requests);
2449
- }
2450
- function cleanRecordId(id) {
2451
- return id.replace(/[{}]/g, "");
2452
- }
2453
- function buildBoundRequest(operationName, entityLogicalName, operationType, recordId, paramMeta, params) {
2454
- const parameterTypes = {
2455
- entity: {
2456
- typeName: `mscrm.${entityLogicalName}`,
2457
- structuralProperty: 5 /* EntityType */
2458
- }
2459
- };
2460
- if (paramMeta) {
2461
- for (const [key, meta] of Object.entries(paramMeta)) {
2462
- parameterTypes[key] = meta;
2463
- }
2464
- }
2465
- const request = {
2466
- getMetadata: () => ({
2467
- boundParameter: "entity",
2468
- parameterTypes,
2469
- operationName,
2470
- operationType
2471
- }),
2472
- entity: {
2473
- id: cleanRecordId(recordId),
2474
- entityType: entityLogicalName
2475
- }
2476
- };
2477
- if (params) {
2478
- for (const [key, value] of Object.entries(params)) {
2479
- request[key] = value;
2480
- }
2481
- }
2482
- return request;
2483
- }
2484
- function buildUnboundRequest(operationName, operationType, paramMeta, params) {
2485
- const parameterTypes = {};
2486
- if (paramMeta) {
2487
- for (const [key, meta] of Object.entries(paramMeta)) {
2488
- parameterTypes[key] = meta;
2489
- }
2490
- }
2491
- const request = {
2492
- getMetadata: () => ({
2493
- boundParameter: null,
2494
- parameterTypes,
2495
- operationName,
2496
- operationType
2497
- })
2498
- };
2499
- if (params) {
2500
- for (const [key, value] of Object.entries(params)) {
2501
- request[key] = value;
2502
- }
2503
- }
2504
- return request;
2505
- }
2506
- function createBoundAction(operationName, entityLogicalName, paramMeta) {
2507
- return {
2508
- execute(recordId, params) {
2509
- const req = buildBoundRequest(
2510
- operationName,
2511
- entityLogicalName,
2512
- 0 /* Action */,
2513
- recordId,
2514
- paramMeta,
2515
- params
2516
- );
2517
- return executeRequest(req);
2518
- },
2519
- request(recordId, params) {
2520
- return buildBoundRequest(
2521
- operationName,
2522
- entityLogicalName,
2523
- 0 /* Action */,
2524
- recordId,
2525
- paramMeta,
2526
- params
2527
- );
2528
- }
2529
- };
2530
- }
2531
- function createUnboundAction(operationName, paramMeta) {
2532
- return {
2533
- async execute(params) {
2534
- const req = buildUnboundRequest(
2535
- operationName,
2536
- 0 /* Action */,
2537
- paramMeta,
2538
- params
2539
- );
2540
- const response = await executeRequest(req);
2541
- if (!response.ok) {
2542
- const errorText = await response.text();
2543
- throw new Error(errorText);
2544
- }
2545
- if (response.status !== 204) {
2546
- return response.json();
2547
- }
2548
- return response;
2549
- },
2550
- request(params) {
2551
- return buildUnboundRequest(
2552
- operationName,
2553
- 0 /* Action */,
2554
- paramMeta,
2555
- params
2556
- );
2557
- }
2558
- };
2559
- }
2560
- function createUnboundFunction(operationName) {
2561
- return {
2562
- async execute() {
2563
- const req = buildUnboundRequest(operationName, 1 /* Function */);
2564
- const response = await executeRequest(req);
2565
- if (!response.ok) {
2566
- const errorText = await response.text();
2567
- throw new Error(errorText);
2568
- }
2569
- return response.json();
2570
- },
2571
- request() {
2572
- return buildUnboundRequest(operationName, 1 /* Function */);
2573
- }
2574
- };
2575
- }
2576
- function createBoundFunction(operationName, entityLogicalName) {
2577
- return {
2578
- async execute(recordId) {
2579
- const req = buildBoundRequest(
2580
- operationName,
2581
- entityLogicalName,
2582
- 1 /* Function */,
2583
- recordId
2584
- );
2585
- const response = await executeRequest(req);
2586
- if (!response.ok) {
2587
- const errorText = await response.text();
2588
- throw new Error(errorText);
2589
- }
2590
- return response.json();
2591
- },
2592
- request(recordId) {
2593
- return buildBoundRequest(
2594
- operationName,
2595
- entityLogicalName,
2596
- 1 /* Function */,
2597
- recordId
2598
- );
2599
- }
2600
- };
2601
- }
2602
- async function withProgress(message, operation) {
2603
- Xrm.Utility.showProgressIndicator(message);
2604
- try {
2605
- return await operation();
2606
- } catch (error) {
2607
- const msg = error instanceof Error ? error.message : String(error);
2608
- Xrm.Navigation.openErrorDialog({ message: msg });
2609
- throw error;
2610
- } finally {
2611
- Xrm.Utility.closeProgressIndicator();
2612
- }
2613
- }
2614
-
2615
2340
  // src/metadata/custom-api-types.ts
2616
2341
  function mapCustomApiParameterType(type, entityName) {
2617
2342
  switch (type) {
@@ -2750,22 +2475,29 @@ function generateActionModule(apis, isFunction, options = {}) {
2750
2475
  lines.push(generateResultInterface(name, apiInfo.responseProperties));
2751
2476
  lines.push("");
2752
2477
  }
2478
+ const typeArgs = buildTypeArgs(name, hasParams, hasResult);
2753
2479
  if (apiInfo.api.bindingtype === 0 /* Global */) {
2754
2480
  if (isFunction) {
2755
- lines.push(`export const ${name} = createUnboundFunction('${apiInfo.api.uniquename}');`);
2481
+ const funcTypeArg = hasResult ? `<${name}Result>` : "<unknown>";
2482
+ lines.push(`export const ${name} = createUnboundFunction${funcTypeArg}('${apiInfo.api.uniquename}');`);
2756
2483
  } else if (hasParams) {
2757
2484
  const paramMeta = generateParameterMetaMap(apiInfo.requestParameters);
2758
- lines.push(`export const ${name} = createUnboundAction('${apiInfo.api.uniquename}', ${paramMeta});`);
2485
+ lines.push(`export const ${name} = createUnboundAction${typeArgs}('${apiInfo.api.uniquename}', ${paramMeta});`);
2486
+ } else if (hasResult) {
2487
+ lines.push(`export const ${name} = createUnboundAction<${name}Result>('${apiInfo.api.uniquename}');`);
2759
2488
  } else {
2760
2489
  lines.push(`export const ${name} = createUnboundAction('${apiInfo.api.uniquename}');`);
2761
2490
  }
2762
2491
  } else {
2763
2492
  const entity = apiInfo.api.boundentitylogicalname;
2764
2493
  if (isFunction) {
2765
- lines.push(`export const ${name} = createBoundFunction('${apiInfo.api.uniquename}', '${entity}');`);
2494
+ const funcTypeArg = hasResult ? `<${name}Result>` : "<unknown>";
2495
+ lines.push(`export const ${name} = createBoundFunction${funcTypeArg}('${apiInfo.api.uniquename}', '${entity}');`);
2766
2496
  } else if (hasParams) {
2767
2497
  const paramMeta = generateParameterMetaMap(apiInfo.requestParameters);
2768
- lines.push(`export const ${name} = createBoundAction('${apiInfo.api.uniquename}', '${entity}', ${paramMeta});`);
2498
+ lines.push(`export const ${name} = createBoundAction${typeArgs}('${apiInfo.api.uniquename}', '${entity}', ${paramMeta});`);
2499
+ } else if (hasResult) {
2500
+ lines.push(`export const ${name} = createBoundAction<${name}Result>('${apiInfo.api.uniquename}', '${entity}');`);
2769
2501
  } else {
2770
2502
  lines.push(`export const ${name} = createBoundAction('${apiInfo.api.uniquename}', '${entity}');`);
2771
2503
  }
@@ -2774,6 +2506,18 @@ function generateActionModule(apis, isFunction, options = {}) {
2774
2506
  }
2775
2507
  return lines.join("\n");
2776
2508
  }
2509
+ function buildTypeArgs(name, hasParams, hasResult) {
2510
+ if (hasParams && hasResult) {
2511
+ return `<${name}Params, ${name}Result>`;
2512
+ }
2513
+ if (hasParams) {
2514
+ return `<${name}Params>`;
2515
+ }
2516
+ if (hasResult) {
2517
+ return `<${name}Result>`;
2518
+ }
2519
+ return "";
2520
+ }
2777
2521
  function generateParameterMetaMap(params) {
2778
2522
  const entries = [];
2779
2523
  for (const param of params) {
@@ -3300,24 +3044,18 @@ ${navPropsContent}` : fieldsEnumContent;
3300
3044
  const importPath = "@xrmforge/helpers";
3301
3045
  const grouped = groupCustomApis(customApis);
3302
3046
  for (const [key, apis] of grouped.actions) {
3303
- const entityName = key === "global" ? void 0 : key;
3304
- const declarations = generateActionDeclarations(apis, false, entityName, { importPath });
3305
3047
  const module = generateActionModule(apis, false, { importPath });
3306
3048
  files.push({
3307
3049
  relativePath: `actions/${key}.ts`,
3308
- content: addGeneratedHeader(`${declarations}
3309
- ${module}`),
3050
+ content: addGeneratedHeader(module),
3310
3051
  type: "action"
3311
3052
  });
3312
3053
  }
3313
3054
  for (const [key, apis] of grouped.functions) {
3314
- const entityName = key === "global" ? void 0 : key;
3315
- const declarations = generateActionDeclarations(apis, true, entityName, { importPath });
3316
3055
  const module = generateActionModule(apis, true, { importPath });
3317
3056
  files.push({
3318
3057
  relativePath: `functions/${key}.ts`,
3319
- content: addGeneratedHeader(`${declarations}
3320
- ${module}`),
3058
+ content: addGeneratedHeader(module),
3321
3059
  type: "action"
3322
3060
  });
3323
3061
  }
@@ -3360,18 +3098,13 @@ ${module}`),
3360
3098
  export {
3361
3099
  ApiRequestError,
3362
3100
  AuthenticationError,
3363
- BindingType,
3364
3101
  ChangeDetector,
3365
- ClientState,
3366
- ClientType,
3367
3102
  ConfigError,
3368
3103
  ConsoleLogSink,
3369
3104
  DEFAULT_LABEL_CONFIG,
3370
3105
  DataverseHttpClient,
3371
- DisplayState,
3372
3106
  ErrorCode,
3373
3107
  FastXmlParser,
3374
- FormNotificationLevel,
3375
3108
  GenerationError,
3376
3109
  JsonLogSink,
3377
3110
  LogLevel,
@@ -3379,25 +3112,14 @@ export {
3379
3112
  MetadataCache,
3380
3113
  MetadataClient,
3381
3114
  MetadataError,
3382
- OperationType,
3383
- RequiredLevel,
3384
- SaveMode,
3385
3115
  SilentLogSink,
3386
- StructuralProperty,
3387
- SubmitMode,
3388
3116
  TypeGenerationOrchestrator,
3389
3117
  XrmForgeError,
3390
3118
  configureLogging,
3391
- createBoundAction,
3392
- createBoundFunction,
3393
3119
  createCredential,
3394
3120
  createLogger,
3395
- createUnboundAction,
3396
- createUnboundFunction,
3397
3121
  defaultXmlParser,
3398
3122
  disambiguateEnumMembers,
3399
- executeMultiple,
3400
- executeRequest,
3401
3123
  extractControlFields,
3402
3124
  getJSDocLabel as formatDualLabel,
3403
3125
  generateActionDeclarations,
@@ -3427,15 +3149,9 @@ export {
3427
3149
  isXrmForgeError,
3428
3150
  labelToIdentifier,
3429
3151
  parseForm,
3430
- parseFormattedValue,
3431
- parseLookup,
3432
- parseLookups,
3433
- select,
3434
- selectExpand,
3435
3152
  shouldIncludeInEntityInterface,
3436
3153
  toLookupValueProperty,
3437
3154
  toPascalCase,
3438
- toSafeIdentifier,
3439
- withProgress
3155
+ toSafeIdentifier
3440
3156
  };
3441
3157
  //# sourceMappingURL=index.js.map