@osdk/maker 0.12.0-beta.19 → 0.12.0-beta.20

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @osdk/maker
2
2
 
3
+ ## 0.12.0-beta.20
4
+
5
+ ### Minor Changes
6
+
7
+ - 45ed433: Target objects are configurable and default parameter ordering is better in OAC actions
8
+
3
9
  ## 0.12.0-beta.19
4
10
 
5
11
  ### Patch Changes
@@ -19,7 +19,7 @@ import invariant from "tiny-invariant";
19
19
  import { convertToDisplayName, getAllInterfaceProperties } from "./defineObject.js";
20
20
  import { namespace, ontologyDefinition, updateOntology } from "./defineOntology.js";
21
21
  import { convertConditionDefinition, convertMappingValue } from "./ontologyUtils.js";
22
- import { OntologyEntityTypeEnum } from "./types.js";
22
+ import { CREATE_OR_MODIFY_OBJECT_PARAMETER, MODIFY_OBJECT_PARAMETER, OntologyEntityTypeEnum } from "./types.js";
23
23
  export function defineCreateInterfaceObjectAction(interfaceType, objectType, validation) {
24
24
  const allProperties = Object.entries(getAllInterfaceProperties(interfaceType)).filter(([_, prop]) => !isStruct(prop.sharedPropertyType.type));
25
25
  if (allProperties.length !== Object.entries(getAllInterfaceProperties(interfaceType)).length) {
@@ -127,6 +127,7 @@ export function defineCreateObjectAction(def) {
127
127
  structFieldValues: {}
128
128
  }
129
129
  }],
130
+ parameterOrdering: def.parameterOrdering ?? createDefaultParameterOrdering(def, parameters),
130
131
  ...(def.actionLevelValidation ? {
131
132
  validation: [convertValidationRule(def.actionLevelValidation)]
132
133
  } : {}),
@@ -141,9 +142,6 @@ export function defineCreateObjectAction(def) {
141
142
  }),
142
143
  ...(def.sections && {
143
144
  sections: Object.fromEntries(def.sections.map(section => [section.id, section]))
144
- }),
145
- ...(def.parameterOrdering && {
146
- parameterOrdering: def.parameterOrdering
147
145
  })
148
146
  });
149
147
  }
@@ -220,18 +218,22 @@ export function defineModifyObjectAction(def) {
220
218
  const propertyParameters = Object.keys(def.objectType.properties ?? {}).filter(id => !Object.keys(def.nonParameterMappings ?? {}).includes(id) && !def.excludedProperties?.includes(id) && !isStruct(def.objectType.properties?.[id].type) && id !== def.objectType.primaryKeyPropertyApiName);
221
219
  const parameterNames = new Set(propertyParameters);
222
220
  Object.keys(def.parameterConfiguration ?? {}).forEach(param => parameterNames.add(param));
221
+ parameterNames.add(MODIFY_OBJECT_PARAMETER);
223
222
  if (def.parameterOrdering) {
223
+ if (!def.parameterOrdering.includes(MODIFY_OBJECT_PARAMETER)) {
224
+ def.parameterOrdering = [MODIFY_OBJECT_PARAMETER, ...def.parameterOrdering];
225
+ }
224
226
  const sortedOrdering = [...def.parameterOrdering].sort();
225
227
  const sortedParameterNames = [...parameterNames].sort();
226
228
  !(sortedOrdering.length === sortedParameterNames.length && sortedOrdering.every((name, index) => name === sortedParameterNames[index])) ? process.env.NODE_ENV !== "production" ? invariant(false, `Action parameter ordering for ${def.objectType.apiName} does not match non-excluded properties`) : invariant(false) : void 0;
227
229
  }
228
230
  const parameters = createParameters(def, parameterNames, false);
229
231
  parameters.forEach(p => {
230
- if (p.defaultValue === undefined) {
232
+ if (p.id !== MODIFY_OBJECT_PARAMETER && p.defaultValue === undefined) {
231
233
  p.defaultValue = {
232
234
  type: "objectParameterPropertyValue",
233
235
  objectParameterPropertyValue: {
234
- parameterId: "objectToModifyParameter",
236
+ parameterId: MODIFY_OBJECT_PARAMETER,
235
237
  propertyTypeId: p.id
236
238
  }
237
239
  };
@@ -241,27 +243,12 @@ export function defineModifyObjectAction(def) {
241
243
  return defineAction({
242
244
  apiName: def.apiName ?? `modify-object-${kebab(def.objectType.apiName.split(".").pop() ?? def.objectType.apiName)}`,
243
245
  displayName: def.displayName ?? `Modify ${def.objectType.displayName}`,
244
- parameters: [{
245
- id: "objectToModifyParameter",
246
- displayName: "Modify object",
247
- type: {
248
- type: "objectReference",
249
- objectReference: {
250
- objectTypeId: def.objectType.apiName
251
- }
252
- },
253
- validation: {
254
- allowedValues: {
255
- type: "objectQuery"
256
- },
257
- required: true
258
- }
259
- }, ...parameters],
246
+ parameters: parameters,
260
247
  status: def.status ?? "active",
261
248
  rules: [{
262
249
  type: "modifyObjectRule",
263
250
  modifyObjectRule: {
264
- objectToModify: "objectToModifyParameter",
251
+ objectToModify: MODIFY_OBJECT_PARAMETER,
265
252
  propertyValues: {
266
253
  ...Object.fromEntries(propertyParameters.map(p => [p, {
267
254
  type: "parameterId",
@@ -278,6 +265,7 @@ export function defineModifyObjectAction(def) {
278
265
  affectedLinkTypes: [],
279
266
  typeGroups: []
280
267
  },
268
+ parameterOrdering: def.parameterOrdering ?? createDefaultParameterOrdering(def, parameters, MODIFY_OBJECT_PARAMETER),
281
269
  ...(def.actionLevelValidation ? {
282
270
  validation: [convertValidationRule(def.actionLevelValidation)]
283
271
  } : {}),
@@ -292,9 +280,6 @@ export function defineModifyObjectAction(def) {
292
280
  }),
293
281
  ...(def.sections && {
294
282
  sections: Object.fromEntries(def.sections.map(section => [section.id, section]))
295
- }),
296
- ...(def.parameterOrdering && {
297
- parameterOrdering: def.parameterOrdering
298
283
  })
299
284
  });
300
285
  }
@@ -341,18 +326,22 @@ export function defineCreateOrModifyObjectAction(def) {
341
326
  const propertyParameters = Object.keys(def.objectType.properties ?? {}).filter(id => !def.excludedProperties?.includes(id) && !isStruct(def.objectType.properties?.[id].type) && id !== def.objectType.primaryKeyPropertyApiName);
342
327
  const parameterNames = new Set(propertyParameters);
343
328
  Object.keys(def.parameterConfiguration ?? {}).forEach(param => parameterNames.add(param));
329
+ parameterNames.add(CREATE_OR_MODIFY_OBJECT_PARAMETER);
344
330
  if (def.parameterOrdering) {
331
+ if (!def.parameterOrdering.includes(CREATE_OR_MODIFY_OBJECT_PARAMETER)) {
332
+ def.parameterOrdering = [CREATE_OR_MODIFY_OBJECT_PARAMETER, ...def.parameterOrdering];
333
+ }
345
334
  const sortedOrdering = [...def.parameterOrdering].sort();
346
335
  const sortedParameterNames = [...parameterNames].sort();
347
336
  !(sortedOrdering.length === sortedParameterNames.length && sortedOrdering.every((name, index) => name === sortedParameterNames[index])) ? process.env.NODE_ENV !== "production" ? invariant(false, `Action parameter ordering for ${def.objectType.apiName} does not match non-excluded properties`) : invariant(false) : void 0;
348
337
  }
349
338
  const parameters = createParameters(def, parameterNames, false);
350
339
  parameters.forEach(p => {
351
- if (p.defaultValue === undefined) {
340
+ if (p.id !== CREATE_OR_MODIFY_OBJECT_PARAMETER && p.defaultValue === undefined) {
352
341
  p.defaultValue = {
353
342
  type: "objectParameterPropertyValue",
354
343
  objectParameterPropertyValue: {
355
- parameterId: "objectToCreateOrModifyParameter",
344
+ parameterId: CREATE_OR_MODIFY_OBJECT_PARAMETER,
356
345
  propertyTypeId: p.id
357
346
  }
358
347
  };
@@ -362,34 +351,12 @@ export function defineCreateOrModifyObjectAction(def) {
362
351
  return defineAction({
363
352
  apiName: def.apiName ?? `create-or-modify-${kebab(def.objectType.apiName.split(".").pop() ?? def.objectType.apiName)}`,
364
353
  displayName: def.displayName ?? `Create or Modify ${def.objectType.displayName}`,
365
- parameters: [{
366
- id: "objectToCreateOrModifyParameter",
367
- displayName: "Create or modify object",
368
- type: {
369
- type: "objectReference",
370
- objectReference: {
371
- objectTypeId: def.objectType.apiName,
372
- maybeCreateObjectOption: !def.primaryKeyOption || def.primaryKeyOption === "autoGenerated" ? {
373
- type: "autoGenerated",
374
- autoGenerated: {}
375
- } : {
376
- type: "userInput",
377
- userInput: {}
378
- }
379
- }
380
- },
381
- validation: {
382
- allowedValues: {
383
- type: "objectQuery"
384
- },
385
- required: true
386
- }
387
- }, ...parameters],
354
+ parameters: parameters,
388
355
  status: def.status ?? "active",
389
356
  rules: [{
390
357
  type: "addOrModifyObjectRuleV2",
391
358
  addOrModifyObjectRuleV2: {
392
- objectToModify: "objectToCreateOrModifyParameter",
359
+ objectToModify: CREATE_OR_MODIFY_OBJECT_PARAMETER,
393
360
  propertyValues: {
394
361
  ...Object.fromEntries(propertyParameters.map(p => [p, {
395
362
  type: "parameterId",
@@ -406,6 +373,7 @@ export function defineCreateOrModifyObjectAction(def) {
406
373
  affectedLinkTypes: [],
407
374
  typeGroups: []
408
375
  },
376
+ parameterOrdering: def.parameterOrdering ?? createDefaultParameterOrdering(def, parameters, CREATE_OR_MODIFY_OBJECT_PARAMETER),
409
377
  ...(def.actionLevelValidation ? {
410
378
  validation: [convertValidationRule(def.actionLevelValidation)]
411
379
  } : {}),
@@ -420,9 +388,6 @@ export function defineCreateOrModifyObjectAction(def) {
420
388
  }),
421
389
  ...(def.sections && {
422
390
  sections: Object.fromEntries(def.sections.map(section => [section.id, section]))
423
- }),
424
- ...(def.parameterOrdering && {
425
- parameterOrdering: def.parameterOrdering
426
391
  })
427
392
  });
428
393
  }
@@ -460,19 +425,70 @@ export function defineAction(actionDef) {
460
425
  },
461
426
  __type: OntologyEntityTypeEnum.ACTION_TYPE
462
427
  };
463
- validateActionValidation(fullAction);
428
+ validateActionConfiguration(fullAction);
464
429
  updateOntology(fullAction);
465
430
  return fullAction;
466
431
  }
467
432
  function createParameters(def, parameterSet, defaultRequired) {
468
- const parameterNames = Array.from(parameterSet);
433
+ const targetParam = [];
469
434
  // prefix objectReference parameters with the namespace
470
- parameterNames.forEach(name => {
435
+ parameterSet.forEach(name => {
471
436
  if (typeof def.parameterConfiguration?.[name]?.customParameterType === "object" && def.parameterConfiguration?.[name]?.customParameterType.type === "objectReference") {
472
437
  def.parameterConfiguration[name].customParameterType.objectReference.objectTypeId = sanitize(def.parameterConfiguration[name].customParameterType.objectReference.objectTypeId);
473
438
  }
439
+ if (name === MODIFY_OBJECT_PARAMETER) {
440
+ targetParam.push({
441
+ id: MODIFY_OBJECT_PARAMETER,
442
+ displayName: def.parameterConfiguration?.[name]?.displayName ?? "Modify object",
443
+ type: {
444
+ type: "objectReference",
445
+ objectReference: {
446
+ objectTypeId: def.objectType.apiName
447
+ }
448
+ },
449
+ validation: {
450
+ ...def.parameterConfiguration?.[name],
451
+ allowedValues: {
452
+ type: "objectQuery"
453
+ },
454
+ required: def.parameterConfiguration?.[name]?.required ?? true
455
+ },
456
+ defaultValue: def.parameterConfiguration?.[name]?.defaultValue,
457
+ description: def.parameterConfiguration?.[name]?.description
458
+ });
459
+ parameterSet.delete(MODIFY_OBJECT_PARAMETER);
460
+ }
461
+ if (name === CREATE_OR_MODIFY_OBJECT_PARAMETER) {
462
+ targetParam.push({
463
+ id: CREATE_OR_MODIFY_OBJECT_PARAMETER,
464
+ displayName: def.parameterConfiguration?.[name]?.displayName ?? "Create or modify object",
465
+ type: {
466
+ type: "objectReference",
467
+ objectReference: {
468
+ objectTypeId: def.objectType.apiName,
469
+ maybeCreateObjectOption: !def.primaryKeyOption || def.primaryKeyOption === "autoGenerated" ? {
470
+ type: "autoGenerated",
471
+ autoGenerated: {}
472
+ } : {
473
+ type: "userInput",
474
+ userInput: {}
475
+ }
476
+ }
477
+ },
478
+ validation: {
479
+ ...def.parameterConfiguration?.[name],
480
+ allowedValues: {
481
+ type: "objectQuery"
482
+ },
483
+ required: def.parameterConfiguration?.[name]?.required ?? true
484
+ },
485
+ defaultValue: def.parameterConfiguration?.[name]?.defaultValue,
486
+ description: def.parameterConfiguration?.[name]?.description
487
+ });
488
+ parameterSet.delete(CREATE_OR_MODIFY_OBJECT_PARAMETER);
489
+ }
474
490
  });
475
- return Array.from(parameterNames).map(id => ({
491
+ return [...targetParam, ...Array.from(parameterSet).map(id => ({
476
492
  id,
477
493
  displayName: def.parameterConfiguration?.[id]?.displayName ?? def.objectType.properties?.[id]?.displayName ?? convertToDisplayName(id),
478
494
  type: def.parameterConfiguration?.[id]?.customParameterType ?? extractActionParameterType(def.objectType.properties?.[id]),
@@ -490,7 +506,7 @@ function createParameters(def, parameterSet, defaultRequired) {
490
506
  },
491
507
  defaultValue: def.parameterConfiguration?.[id]?.defaultValue,
492
508
  description: def.parameterConfiguration?.[id]?.description
493
- }));
509
+ }))];
494
510
  }
495
511
  function referencedParameterIds(actionDef) {
496
512
  const parameterIds = new Set();
@@ -778,7 +794,7 @@ function convertValidationRule(actionValidation) {
778
794
  }
779
795
  };
780
796
  }
781
- function validateActionValidation(action) {
797
+ function validateActionConfiguration(action) {
782
798
  const seenParameterIds = new Set();
783
799
  const parameterMap = action.parameters?.reduce((acc, param) => {
784
800
  acc[param.id] = param;
@@ -787,15 +803,13 @@ function validateActionValidation(action) {
787
803
  const orderedParameters = action.parameterOrdering?.map(id => parameterMap[id]) ?? action.parameters;
788
804
  orderedParameters?.forEach(param => {
789
805
  param.validation.conditionalOverrides?.forEach(override => {
790
- validateActionCondition(override.condition, param.id, seenParameterIds, action.parameters);
806
+ validateParameterCondition(override.condition, param.id, seenParameterIds, action.parameters);
791
807
  });
792
- if (param.defaultValue?.type === "staticValue") {
793
- !(param.defaultValue.staticValue.type === param.type) ? process.env.NODE_ENV !== "production" ? invariant(false, `Default static value for parameter ${param.id} does not match type`) : invariant(false) : void 0;
794
- }
808
+ validateParameterPrefill(param.id, seenParameterIds, action.parameters, param.defaultValue);
795
809
  seenParameterIds.add(param.id);
796
810
  });
797
811
  }
798
- function validateActionCondition(condition, currentParameterId, seenParameterIds, parameters) {
812
+ function validateParameterCondition(condition, currentParameterId, seenParameterIds, parameters) {
799
813
  switch (condition.type) {
800
814
  case "parameter":
801
815
  const overrideParamId = condition.parameterId;
@@ -806,12 +820,12 @@ function validateActionCondition(condition, currentParameterId, seenParameterIds
806
820
  case "and":
807
821
  // this will not catch the niche edge case where users use the full syntax for unions
808
822
  if ("conditions" in condition) {
809
- condition.conditions.forEach(c => validateActionCondition(c, currentParameterId, seenParameterIds, parameters));
823
+ condition.conditions.forEach(c => validateParameterCondition(c, currentParameterId, seenParameterIds, parameters));
810
824
  }
811
825
  break;
812
826
  case "or":
813
827
  if ("conditions" in condition) {
814
- condition.conditions.forEach(c => validateActionCondition(c, currentParameterId, seenParameterIds, parameters));
828
+ condition.conditions.forEach(c => validateParameterCondition(c, currentParameterId, seenParameterIds, parameters));
815
829
  }
816
830
  break;
817
831
  case "comparison":
@@ -826,13 +840,40 @@ function validateActionCondition(condition, currentParameterId, seenParameterIds
826
840
  throw new Error(`Unknown condition type on parameter ${currentParameterId}`);
827
841
  }
828
842
  }
843
+ function validateParameterPrefill(currentParameterId, seenParameterIds, parameters, defaultValue) {
844
+ if (!defaultValue) return;
845
+ switch (defaultValue.type) {
846
+ case "objectParameterPropertyValue":
847
+ !parameters?.some(p => p.id === defaultValue.objectParameterPropertyValue.parameterId) ? process.env.NODE_ENV !== "production" ? invariant(false, `Default value for parameter ${currentParameterId} is referencing unknown parameter ${defaultValue.objectParameterPropertyValue.parameterId}`) : invariant(false) : void 0;
848
+ !seenParameterIds.has(defaultValue.objectParameterPropertyValue.parameterId) ? process.env.NODE_ENV !== "production" ? invariant(false, `Default value for parameter ${currentParameterId} is referencing later parameter ${defaultValue.objectParameterPropertyValue.parameterId}`) : invariant(false) : void 0;
849
+ break;
850
+ case "staticValue":
851
+ !(defaultValue.staticValue.type === parameters?.find(p => p.id === currentParameterId)?.type) ? process.env.NODE_ENV !== "production" ? invariant(false, `Default static value for parameter ${currentParameterId} does not match type`) : invariant(false) : void 0;
852
+ break;
853
+ case "staticObject":
854
+ case "interfaceParameterPropertyValue":
855
+ case "objectQueryPrefill":
856
+ case "objectQueryPropertyValue":
857
+ case "objectSetRidPrefill":
858
+ case "redacted":
859
+ break;
860
+ default:
861
+ throw new Error(`Unknown default value type for parameter ${currentParameterId}`);
862
+ }
863
+ }
829
864
  function validateActionParameters(def) {
830
865
  // validates that parameters either exist as object properties or have a type defined
831
866
  [...Object.keys(def.parameterConfiguration ?? {})].forEach(id => {
832
- !(def.objectType.properties?.[id] !== undefined || def.parameterConfiguration?.[id].customParameterType !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Parameter ${id} does not exist as a property on ${def.objectType.apiName} and its type is not explicitly defined`) : invariant(false) : void 0;
867
+ !(def.objectType.properties?.[id] !== undefined || def.parameterConfiguration?.[id].customParameterType !== undefined || id === MODIFY_OBJECT_PARAMETER || id === CREATE_OR_MODIFY_OBJECT_PARAMETER) ? process.env.NODE_ENV !== "production" ? invariant(false, `Parameter ${id} does not exist as a property on ${def.objectType.apiName} and its type is not explicitly defined`) : invariant(false) : void 0;
833
868
  });
834
869
  [...Object.keys(def.nonParameterMappings ?? {}), ...(def.excludedProperties ?? [])].forEach(id => {
835
870
  !(def.objectType.properties?.[id] !== undefined) ? process.env.NODE_ENV !== "production" ? invariant(false, `Property ${id} does not exist as a property on ${def.objectType.apiName}`) : invariant(false) : void 0;
836
871
  });
837
872
  }
873
+
874
+ // Parameters with configurations will be ordered first in the order they were defined
875
+ // followed by the rest of the parameters in the order they were defined on the object type
876
+ function createDefaultParameterOrdering(def, parameters, priorityId) {
877
+ return [...(priorityId ? [priorityId] : []), ...Object.keys(def.parameterConfiguration ?? {}), ...Object.keys(def.objectType.properties ?? {}).filter(id => !def.parameterConfiguration?.[id] && parameters.some(p => p.id === id))];
878
+ }
838
879
  //# sourceMappingURL=defineAction.js.map