@salesforce/lds-worker-api 1.124.4 → 1.124.6

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.
@@ -751,4 +751,4 @@ if (process.env.NODE_ENV !== 'production') {
751
751
  }
752
752
 
753
753
  export { createPrimingSession, draftManager, draftQueue, executeAdapter, executeMutatingAdapter, getImperativeAdapterNames, invokeAdapter, invokeAdapterWithDraftToReplace, invokeAdapterWithMetadata, nimbusDraftQueue, setMetadataTTL, setUiApiRecordTTL, subscribeToAdapter };
754
- // version: 1.124.4-f07bfc14d
754
+ // version: 1.124.6-8cacd232f
@@ -3776,7 +3776,7 @@ function withDefaultLuvio(callback) {
3776
3776
  }
3777
3777
  callbacks.push(callback);
3778
3778
  }
3779
- // version: 1.124.4-f07bfc14d
3779
+ // version: 1.124.6-8cacd232f
3780
3780
 
3781
3781
  // TODO [TD-0081508]: once that TD is fulfilled we can probably change this file
3782
3782
  function instrumentAdapter$1(createFunction, _metadata) {
@@ -15200,7 +15200,7 @@ function parseAndVisit(source) {
15200
15200
  updateReferenceMapWithKnownKey(ast, luvioDocumentNode);
15201
15201
  return luvioDocumentNode;
15202
15202
  }
15203
- // version: 1.124.4-f07bfc14d
15203
+ // version: 1.124.6-8cacd232f
15204
15204
 
15205
15205
  function unwrap(data) {
15206
15206
  // The lwc-luvio bindings import a function from lwc called "unwrap".
@@ -16113,7 +16113,7 @@ function createGraphQLWireAdapterConstructor(luvio, adapter, metadata, astResolv
16113
16113
  const { apiFamily, name } = metadata;
16114
16114
  return createGraphQLWireAdapterConstructor$1(adapter, `${apiFamily}.${name}`, luvio, astResolver);
16115
16115
  }
16116
- // version: 1.124.4-f07bfc14d
16116
+ // version: 1.124.6-8cacd232f
16117
16117
 
16118
16118
  /**
16119
16119
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -44347,7 +44347,7 @@ withDefaultLuvio((luvio) => {
44347
44347
  dropFunction: instrumentation$2.notifyRecordUpdateAvailableDropped,
44348
44348
  });
44349
44349
  });
44350
- // version: 1.124.4-fc08995da
44350
+ // version: 1.124.6-3b244264b
44351
44351
 
44352
44352
  var caseSensitiveUserId = '005B0000000GR4OIAW';
44353
44353
 
@@ -49175,10 +49175,6 @@ function customActionHandler(executor, id, draftQueue) {
49175
49175
  });
49176
49176
  return queueOperations;
49177
49177
  };
49178
- const replaceAction = (actionId, _withActionId, _uploadingActionId, _actions) => {
49179
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
49180
- throw new Error(`${actionId} does not support action replacing. You can only delete ${actionId}`);
49181
- };
49182
49178
  const getRedirectMappings = (_action) => {
49183
49179
  return undefined;
49184
49180
  };
@@ -49190,7 +49186,9 @@ function customActionHandler(executor, id, draftQueue) {
49190
49186
  handleAction: handle,
49191
49187
  buildPendingAction,
49192
49188
  getQueueOperationsForCompletingDrafts: getQueueOperationsForCompletingDrafts,
49193
- handleReplaceAction: replaceAction,
49189
+ handleReplaceAction: () => {
49190
+ throw Error('replaceAction not supported for custom actions');
49191
+ },
49194
49192
  getRedirectMappings,
49195
49193
  handleActionRemoved: () => Promise.resolve(),
49196
49194
  handleActionCompleted: () => Promise.resolve(),
@@ -49257,13 +49255,13 @@ class DurableDraftQueue {
49257
49255
  this.userState = DraftQueueState.Started;
49258
49256
  if (this.state === DraftQueueState.Started) {
49259
49257
  // Do nothing if the queue state is already started
49260
- return Promise.resolve();
49258
+ return;
49261
49259
  }
49262
49260
  if (this.replacingAction !== undefined) {
49263
49261
  // If we're replacing an action do nothing
49264
49262
  // replace will restart the queue for us as long as the user
49265
49263
  // has last set the queue to be started
49266
- return Promise.resolve();
49264
+ return;
49267
49265
  }
49268
49266
  this.retryIntervalMilliseconds = 0;
49269
49267
  this.state = DraftQueueState.Started;
@@ -49503,92 +49501,11 @@ class DurableDraftQueue {
49503
49501
  await this.startQueue();
49504
49502
  }
49505
49503
  }
49506
- replaceAction(actionId, withActionId) {
49507
- // ids must be unique
49508
- if (actionId === withActionId) {
49509
- return Promise.reject('Swapped and swapping action ids cannot be the same');
49510
- }
49511
- // cannot have a replace action already in progress
49512
- if (this.replacingAction !== undefined) {
49513
- return Promise.reject('Cannot replace actions while a replace action is in progress');
49514
- }
49515
- this.stopQueueManually();
49516
- const replacing = this.getQueueActions().then(async (actions) => {
49517
- const first = actions.filter((action) => action.id === actionId)[0];
49518
- if (first === undefined) {
49519
- this.replacingAction = undefined;
49520
- await this.startQueueSafe();
49521
- return Promise.reject('No action to replace');
49522
- }
49523
- // put in a try/finally block so we don't leave this.replacingAction
49524
- // indefinitely set
49525
- let actionToReplace;
49526
- try {
49527
- const replaceResult = this.getHandler(first.handler).handleReplaceAction(actionId, withActionId, this.uploadingActionId, actions);
49528
- actionToReplace = replaceResult.actionToReplace;
49529
- // TODO [W-8873834]: Will add batching support to durable store
49530
- // we should use that here to remove and set both actions in one operation
49531
- await this.removeDraftAction(replaceResult.replacingAction.id);
49532
- await this.draftStore.writeAction(actionToReplace);
49533
- await this.notifyChangedListeners({
49534
- type: DraftQueueEventType.ActionUpdated,
49535
- action: actionToReplace,
49536
- });
49537
- }
49538
- finally {
49539
- this.replacingAction = undefined;
49540
- }
49541
- await this.startQueueSafe();
49542
- return actionToReplace;
49543
- });
49544
- this.replacingAction = replacing;
49545
- return replacing;
49504
+ replaceAction(targetActionId, sourceActionId) {
49505
+ return this.replaceOrMergeActions(targetActionId, sourceActionId, false);
49546
49506
  }
49547
49507
  mergeActions(targetActionId, sourceActionId) {
49548
- // ids must be unique
49549
- if (targetActionId === sourceActionId) {
49550
- return Promise.reject(new Error('targetActionId and sourceActionId cannot be the same.'));
49551
- }
49552
- // cannot have a replace action already in progress
49553
- if (this.replacingAction !== undefined) {
49554
- return Promise.reject(new Error('Cannot merge actions while a replace/merge action operation is in progress.'));
49555
- }
49556
- this.stopQueueManually();
49557
- const promise = this.getQueueActions().then(async (actions) => {
49558
- const target = actions.find((action) => action.id === targetActionId);
49559
- if (target === undefined) {
49560
- this.replacingAction = undefined;
49561
- await this.startQueueSafe();
49562
- throw Error('targetActionId not found in the draft queue.');
49563
- }
49564
- const source = actions.find((action) => action.id === sourceActionId);
49565
- if (source === undefined) {
49566
- this.replacingAction = undefined;
49567
- await this.startQueueSafe();
49568
- throw Error('sourceActionId not found in the draft queue.');
49569
- }
49570
- // put in a try/finally block so we don't leave this.replacingAction
49571
- // indefinitely set
49572
- let merged;
49573
- try {
49574
- merged = this.getHandler(target.handler).mergeActions(target, source);
49575
- // update the target
49576
- await this.draftStore.writeAction(merged);
49577
- await this.notifyChangedListeners({
49578
- type: DraftQueueEventType.ActionUpdated,
49579
- action: merged,
49580
- });
49581
- // remove the source from queue
49582
- await this.removeDraftAction(sourceActionId);
49583
- }
49584
- finally {
49585
- this.replacingAction = undefined;
49586
- }
49587
- await this.startQueueSafe();
49588
- return merged;
49589
- });
49590
- this.replacingAction = promise;
49591
- return promise;
49508
+ return this.replaceOrMergeActions(targetActionId, sourceActionId, true);
49592
49509
  }
49593
49510
  async setMetadata(actionId, metadata) {
49594
49511
  const keys$1 = keys$4(metadata);
@@ -49623,6 +49540,81 @@ class DurableDraftQueue {
49623
49540
  }
49624
49541
  }, this.retryIntervalMilliseconds);
49625
49542
  }
49543
+ async getActionsForReplaceOrMerge(targetActionId, sourceActionId) {
49544
+ const actions = await this.getQueueActions();
49545
+ const target = actions.find((action) => action.id === targetActionId);
49546
+ if (target === undefined) {
49547
+ this.replacingAction = undefined;
49548
+ await this.startQueueSafe();
49549
+ throw Error(`targetActionId ${targetActionId} not found in the draft queue.`);
49550
+ }
49551
+ const source = actions.find((action) => action.id === sourceActionId);
49552
+ if (source === undefined) {
49553
+ this.replacingAction = undefined;
49554
+ await this.startQueueSafe();
49555
+ throw Error(`sourceActionId ${sourceActionId} not found in the draft queue.`);
49556
+ }
49557
+ return { target, source };
49558
+ }
49559
+ assertReplaceOrMergePrerequisites(target, source) {
49560
+ // ensure actions are in a state to be replaced/merged
49561
+ const { targetId: targetCacheKey, tag: targetTag, status: targetStatus, version: targetVersion, } = target;
49562
+ const { targetId: sourceCacheKey, tag: sourceTag, status: sourceStatus, version: sourceVersion, } = source;
49563
+ if (targetCacheKey !== sourceCacheKey) {
49564
+ throw Error('Cannot replace/merge actions for different targetIds.');
49565
+ }
49566
+ if (targetTag !== sourceTag) {
49567
+ throw Error('Cannot replace/merge actions for different tags.');
49568
+ }
49569
+ if (targetStatus === DraftActionStatus.Completed ||
49570
+ targetStatus === DraftActionStatus.Uploading) {
49571
+ throw Error(`Cannot replace/merge actions when targetAction is in ${targetStatus} status.`);
49572
+ }
49573
+ if (sourceStatus !== DraftActionStatus.Pending) {
49574
+ throw Error(`Cannot replace/merge actions when sourceAction is in ${sourceStatus} status.`);
49575
+ }
49576
+ if (targetVersion !== sourceVersion) {
49577
+ throw Error('Cannot replace/merge actions with different versions.');
49578
+ }
49579
+ }
49580
+ async replaceOrMergeActions(targetActionId, sourceActionId, merge) {
49581
+ // ids must be unique
49582
+ if (targetActionId === sourceActionId) {
49583
+ throw Error('targetActionId and sourceActionId cannot be the same.');
49584
+ }
49585
+ // cannot have a replace action already in progress
49586
+ if (this.replacingAction !== undefined) {
49587
+ throw Error('Cannot replace/merge actions while a replace/merge action operation is in progress.');
49588
+ }
49589
+ this.stopQueueManually();
49590
+ const promise = this.getActionsForReplaceOrMerge(targetActionId, sourceActionId).then(async ({ target, source }) => {
49591
+ // put in a try/finally block so we don't leave this.replacingAction
49592
+ // indefinitely set
49593
+ let updatedTarget;
49594
+ try {
49595
+ this.assertReplaceOrMergePrerequisites(target, source);
49596
+ const handler = this.getHandler(target.handler);
49597
+ updatedTarget = merge
49598
+ ? handler.mergeActions(target, source)
49599
+ : handler.handleReplaceAction(target, source);
49600
+ // update the target
49601
+ await this.draftStore.writeAction(updatedTarget);
49602
+ await this.notifyChangedListeners({
49603
+ type: DraftQueueEventType.ActionUpdated,
49604
+ action: updatedTarget,
49605
+ });
49606
+ // remove the source from queue
49607
+ await this.removeDraftAction(sourceActionId);
49608
+ }
49609
+ finally {
49610
+ this.replacingAction = undefined;
49611
+ await this.startQueueSafe();
49612
+ }
49613
+ return updatedTarget;
49614
+ });
49615
+ this.replacingAction = promise;
49616
+ return promise;
49617
+ }
49626
49618
  }
49627
49619
 
49628
49620
  const DRAFT_ACTION_KEY_JUNCTION = '__DraftAction__';
@@ -50042,56 +50034,53 @@ class AbstractResourceRequestActionHandler {
50042
50034
  }
50043
50035
  await this.ingestResponses(recordsToIngest, action);
50044
50036
  }
50045
- handleReplaceAction(actionId, withActionId, uploadingActionId, actions) {
50046
- // get the action to replace
50047
- const actionToReplace = actions.filter((action) => action.id === actionId)[0];
50048
- // get the replacing action
50049
- const replacingAction = actions.filter((action) => action.id === withActionId)[0];
50050
- // reject if either action is undefined
50051
- if (actionToReplace === undefined || replacingAction === undefined) {
50052
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50053
- throw new Error('One or both actions does not exist');
50054
- }
50055
- // reject if either action is uploading
50056
- if (actionToReplace.id === uploadingActionId || replacingAction.id === uploadingActionId) {
50057
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50058
- throw new Error('Cannot replace an draft action that is uploading');
50059
- }
50060
- // reject if these two draft actions aren't acting on the same target
50061
- if (actionToReplace.tag !== replacingAction.tag) {
50062
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50063
- throw new Error('Cannot swap actions targeting different targets');
50064
- }
50065
- // reject if the replacing action is not pending
50066
- if (replacingAction.status !== DraftActionStatus.Pending) {
50067
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50068
- throw new Error('Cannot replace with a non-pending action');
50069
- }
50037
+ handleReplaceAction(targetAction, sourceAction) {
50070
50038
  //reject if the action to replace is a POST action
50071
- const pendingAction = actionToReplace;
50039
+ const pendingAction = targetAction;
50072
50040
  if (pendingAction.data.method === 'post') {
50073
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50074
- throw new Error('Cannot replace a POST action');
50041
+ throw Error('Cannot replace a POST action');
50075
50042
  }
50076
- if (this.isActionOfType(actionToReplace) &&
50077
- this.isActionOfType(replacingAction)) {
50078
- const actionToReplaceCopy = {
50079
- ...actionToReplace,
50080
- status: DraftActionStatus.Pending,
50081
- };
50082
- actionToReplace.status = DraftActionStatus.Pending;
50083
- actionToReplace.data = replacingAction.data;
50084
- return {
50085
- original: actionToReplaceCopy,
50086
- actionToReplace: actionToReplace,
50087
- replacingAction: replacingAction,
50088
- };
50043
+ if (this.isActionOfType(targetAction) &&
50044
+ this.isActionOfType(sourceAction)) {
50045
+ targetAction.status = DraftActionStatus.Pending;
50046
+ targetAction.data = sourceAction.data;
50047
+ return targetAction;
50089
50048
  }
50090
50049
  else {
50091
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50092
- throw new Error('Incompatible Action types to replace one another');
50050
+ throw Error('Incompatible Action types to replace one another');
50093
50051
  }
50094
50052
  }
50053
+ mergeActions(targetAction, sourceAction) {
50054
+ const { id: targetId, data: targetData, metadata: targetMetadata, timestamp: targetTimestamp, } = targetAction;
50055
+ const { method: targetMethod, body: targetBody } = targetData;
50056
+ const { data: sourceData, metadata: sourceMetadata } = sourceAction;
50057
+ const { method: sourceMethod, body: sourceBody } = sourceData;
50058
+ if (targetMethod.toLowerCase() === 'delete' || sourceMethod.toLowerCase() === 'delete') {
50059
+ throw Error('Cannot merge DELETE actions.');
50060
+ }
50061
+ if (targetMethod.toLowerCase() === 'patch' && sourceMethod.toLowerCase() === 'post') {
50062
+ // overlaying a POST over a PATCH is not supported
50063
+ throw Error('Cannot merge a POST action over top of a PATCH action.');
50064
+ }
50065
+ // overlay top-level properties, maintain target's timestamp and id
50066
+ const merged = {
50067
+ ...targetAction,
50068
+ ...sourceAction,
50069
+ timestamp: targetTimestamp,
50070
+ id: targetId,
50071
+ };
50072
+ // overlay data
50073
+ // NOTE: we stick to the target's ResourceRequest properties (except body
50074
+ // which is merged) because we don't want to overwrite a POST with a PATCH
50075
+ // (all other cases should be fine or wouldn't have passed pre-requisites)
50076
+ merged.data = {
50077
+ ...targetData,
50078
+ body: this.mergeRequestBody(targetBody, sourceBody),
50079
+ };
50080
+ // overlay metadata
50081
+ merged.metadata = { ...targetMetadata, ...sourceMetadata };
50082
+ return merged;
50083
+ }
50095
50084
  shouldDeleteActionByTagOnRemoval(action) {
50096
50085
  return action.data.method === 'post';
50097
50086
  }
@@ -55509,6 +55498,16 @@ function buildRecordFieldValueRepresentationsFromDraftFields(luvio, apiName, fie
55509
55498
  if (fieldInfo !== undefined) {
55510
55499
  const { dataType, relationshipName, referenceToInfos } = fieldInfo;
55511
55500
  recordFields[fieldName].displayValue = formatDisplayValue(draftField, dataType);
55501
+ if (dataType === 'DateTime' &&
55502
+ draftField !== null &&
55503
+ typeof draftField === 'string') {
55504
+ try {
55505
+ recordFields[fieldName].value = new Date(draftField).toISOString();
55506
+ }
55507
+ catch (e) {
55508
+ throw Error('date field value not valid');
55509
+ }
55510
+ }
55512
55511
  if (dataType === 'Reference' && relationshipName !== null && draftField !== null) {
55513
55512
  if (typeof draftField !== 'string') {
55514
55513
  throw Error('reference field value is not a string');
@@ -55942,68 +55941,17 @@ class UiApiActionHandler extends AbstractResourceRequestActionHandler {
55942
55941
  synchronousIngest(response) {
55943
55942
  return this.recordService.synchronousIngestRecord(response);
55944
55943
  }
55945
- mergeActions(targetAction, sourceAction) {
55946
- // NOTE: a lot of the logic in this method could be hoisted to the
55947
- // AbstractResourceRequestActionHandler, and then some new abstract mergeBody()
55948
- // method could be called there and implemented here. As of right now there
55949
- // are no other concrete ResourceRequest handlers implementing mergeActions
55950
- // so to keep this simple we aren't hoisting the shared stuff yet.
55951
- const { id: targetId, targetId: targetCacheKey, tag: targetTag, status: targetStatus, data: targetData, metadata: targetMetadata, timestamp: targetTimestamp, version: targetVersion, } = targetAction;
55952
- const { method: targetMethod, body: targetBody } = targetData;
55953
- const { targetId: sourceCacheKey, tag: sourceTag, status: sourceStatus, data: sourceData, metadata: sourceMetadata, version: sourceVersion, } = sourceAction;
55954
- const { method: sourceMethod, body: sourceBody } = sourceData;
55955
- // pre-requisites
55956
- if (targetCacheKey !== sourceCacheKey) {
55957
- throw Error('Cannot merge actions for different targetIds.');
55958
- }
55959
- if (targetTag !== sourceTag) {
55960
- throw Error('Cannot merge actions for different tags.');
55961
- }
55962
- if (targetStatus === DraftActionStatus.Completed ||
55963
- targetStatus === DraftActionStatus.Uploading) {
55964
- throw Error(`Cannot merge actions when targetAction is in ${targetStatus} status.`);
55965
- }
55966
- if (sourceStatus === DraftActionStatus.Completed ||
55967
- sourceStatus === DraftActionStatus.Uploading) {
55968
- throw Error(`Cannot merge actions when sourceAction is in ${sourceStatus} status.`);
55969
- }
55970
- if (targetMethod.toLowerCase() === 'delete' || sourceMethod.toLowerCase() === 'delete') {
55971
- throw Error('Cannot merge DELETE actions.');
55972
- }
55973
- if (targetMethod.toLowerCase() === 'patch' && sourceMethod.toLowerCase() === 'post') {
55974
- // overlaying a POST over a PATCH is not supported
55975
- throw Error('Cannot merge a POST action over top of a PATCH action.');
55976
- }
55977
- if (targetVersion !== sourceVersion) {
55978
- throw Error('Cannot merge actions with different versions.');
55979
- }
55980
- // overlay top-level properties, maintain target's timestamp and id
55981
- const merged = {
55982
- ...targetAction,
55983
- ...sourceAction,
55984
- timestamp: targetTimestamp,
55985
- id: targetId,
55986
- };
55987
- // overlay data
55944
+ mergeRequestBody(targetBody, sourceBody) {
55988
55945
  // IMPORTANT: spread operator isn't deep clone so we have to individually
55989
55946
  // spread nested objects (just "fields" for RecordInputReps)
55990
- // NOTE: we stick to the target's ResourceRequest properties (except body
55991
- // which is merged) because we don't want to overwrite a POST with a PATCH
55992
- // (all other cases should be fine or wouldn't have passed pre-requisites)
55993
- merged.data = {
55994
- ...targetData,
55995
- body: {
55996
- ...targetBody,
55997
- ...sourceBody,
55998
- fields: {
55999
- ...targetBody.fields,
56000
- ...sourceBody.fields,
56001
- },
55947
+ return {
55948
+ ...targetBody,
55949
+ ...sourceBody,
55950
+ fields: {
55951
+ ...targetBody.fields,
55952
+ ...sourceBody.fields,
56002
55953
  },
56003
55954
  };
56004
- // overlay metadata
56005
- merged.metadata = { ...targetMetadata, ...sourceMetadata };
56006
- return merged;
56007
55955
  }
56008
55956
  }
56009
55957
  function isField(key, data) {
@@ -56518,7 +56466,7 @@ class QuickActionExecutionRepresentationHandler extends AbstractResourceRequestA
56518
56466
  });
56519
56467
  luvio.storeIngest(key, ingest$x$1, response);
56520
56468
  }
56521
- mergeActions(_targetAction, _sourceAction) {
56469
+ mergeRequestBody() {
56522
56470
  throw Error('mergeActions not supported for QuickActionExecutionRepresentationHandler');
56523
56471
  }
56524
56472
  }
@@ -57205,7 +57153,7 @@ class ContentDocumentCompositeRepresentationActionHandler extends AbstractResour
57205
57153
  this.binaryStoreUrlsToUpdate.set(fileReference.handle, versionDataUrl);
57206
57154
  }
57207
57155
  }
57208
- mergeActions(_targetAction, _sourceAction) {
57156
+ mergeRequestBody() {
57209
57157
  throw Error('mergeActions not supported for ContentDocumentCompositeRepresentationActionHandler');
57210
57158
  }
57211
57159
  async ingestResponses(responses, action) {
@@ -59902,7 +59850,7 @@ register({
59902
59850
  id: '@salesforce/lds-network-adapter',
59903
59851
  instrument: instrument$1,
59904
59852
  });
59905
- // version: 1.124.4-f07bfc14d
59853
+ // version: 1.124.6-8cacd232f
59906
59854
 
59907
59855
  const { create: create$2, keys: keys$2 } = Object;
59908
59856
  const { stringify: stringify$1, parse: parse$1 } = JSON;
@@ -74167,7 +74115,7 @@ register({
74167
74115
  configuration: { ...configurationForGraphQLAdapters },
74168
74116
  instrument,
74169
74117
  });
74170
- // version: 1.124.4-fc08995da
74118
+ // version: 1.124.6-3b244264b
74171
74119
 
74172
74120
  // On core the unstable adapters are re-exported with different names,
74173
74121
 
@@ -76296,7 +76244,7 @@ withDefaultLuvio((luvio) => {
76296
76244
  unstable_graphQL_imperative = createImperativeAdapter(luvio, createInstrumentedAdapter(ldsAdapter, adapterMetadata), adapterMetadata);
76297
76245
  graphQLImperative = ldsAdapter;
76298
76246
  });
76299
- // version: 1.124.4-fc08995da
76247
+ // version: 1.124.6-3b244264b
76300
76248
 
76301
76249
  var gqlApi = /*#__PURE__*/Object.freeze({
76302
76250
  __proto__: null,
@@ -76978,4 +76926,4 @@ const { luvio } = getRuntime();
76978
76926
  setDefaultLuvio({ luvio });
76979
76927
 
76980
76928
  export { createPrimingSession, draftManager, draftQueue, executeAdapter, executeMutatingAdapter, getImperativeAdapterNames, invokeAdapter, invokeAdapterWithDraftToReplace, invokeAdapterWithMetadata, nimbusDraftQueue, registerReportObserver, setMetadataTTL, setUiApiRecordTTL, subscribeToAdapter };
76981
- // version: 1.124.4-f07bfc14d
76929
+ // version: 1.124.6-8cacd232f
@@ -3782,7 +3782,7 @@
3782
3782
  }
3783
3783
  callbacks.push(callback);
3784
3784
  }
3785
- // version: 1.124.4-f07bfc14d
3785
+ // version: 1.124.6-8cacd232f
3786
3786
 
3787
3787
  // TODO [TD-0081508]: once that TD is fulfilled we can probably change this file
3788
3788
  function instrumentAdapter$1(createFunction, _metadata) {
@@ -15206,7 +15206,7 @@
15206
15206
  updateReferenceMapWithKnownKey(ast, luvioDocumentNode);
15207
15207
  return luvioDocumentNode;
15208
15208
  }
15209
- // version: 1.124.4-f07bfc14d
15209
+ // version: 1.124.6-8cacd232f
15210
15210
 
15211
15211
  function unwrap(data) {
15212
15212
  // The lwc-luvio bindings import a function from lwc called "unwrap".
@@ -16119,7 +16119,7 @@
16119
16119
  const { apiFamily, name } = metadata;
16120
16120
  return createGraphQLWireAdapterConstructor$1(adapter, `${apiFamily}.${name}`, luvio, astResolver);
16121
16121
  }
16122
- // version: 1.124.4-f07bfc14d
16122
+ // version: 1.124.6-8cacd232f
16123
16123
 
16124
16124
  /**
16125
16125
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -44353,7 +44353,7 @@
44353
44353
  dropFunction: instrumentation$2.notifyRecordUpdateAvailableDropped,
44354
44354
  });
44355
44355
  });
44356
- // version: 1.124.4-fc08995da
44356
+ // version: 1.124.6-3b244264b
44357
44357
 
44358
44358
  var caseSensitiveUserId = '005B0000000GR4OIAW';
44359
44359
 
@@ -49181,10 +49181,6 @@
49181
49181
  });
49182
49182
  return queueOperations;
49183
49183
  };
49184
- const replaceAction = (actionId, _withActionId, _uploadingActionId, _actions) => {
49185
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
49186
- throw new Error(`${actionId} does not support action replacing. You can only delete ${actionId}`);
49187
- };
49188
49184
  const getRedirectMappings = (_action) => {
49189
49185
  return undefined;
49190
49186
  };
@@ -49196,7 +49192,9 @@
49196
49192
  handleAction: handle,
49197
49193
  buildPendingAction,
49198
49194
  getQueueOperationsForCompletingDrafts: getQueueOperationsForCompletingDrafts,
49199
- handleReplaceAction: replaceAction,
49195
+ handleReplaceAction: () => {
49196
+ throw Error('replaceAction not supported for custom actions');
49197
+ },
49200
49198
  getRedirectMappings,
49201
49199
  handleActionRemoved: () => Promise.resolve(),
49202
49200
  handleActionCompleted: () => Promise.resolve(),
@@ -49263,13 +49261,13 @@
49263
49261
  this.userState = DraftQueueState.Started;
49264
49262
  if (this.state === DraftQueueState.Started) {
49265
49263
  // Do nothing if the queue state is already started
49266
- return Promise.resolve();
49264
+ return;
49267
49265
  }
49268
49266
  if (this.replacingAction !== undefined) {
49269
49267
  // If we're replacing an action do nothing
49270
49268
  // replace will restart the queue for us as long as the user
49271
49269
  // has last set the queue to be started
49272
- return Promise.resolve();
49270
+ return;
49273
49271
  }
49274
49272
  this.retryIntervalMilliseconds = 0;
49275
49273
  this.state = DraftQueueState.Started;
@@ -49509,92 +49507,11 @@
49509
49507
  await this.startQueue();
49510
49508
  }
49511
49509
  }
49512
- replaceAction(actionId, withActionId) {
49513
- // ids must be unique
49514
- if (actionId === withActionId) {
49515
- return Promise.reject('Swapped and swapping action ids cannot be the same');
49516
- }
49517
- // cannot have a replace action already in progress
49518
- if (this.replacingAction !== undefined) {
49519
- return Promise.reject('Cannot replace actions while a replace action is in progress');
49520
- }
49521
- this.stopQueueManually();
49522
- const replacing = this.getQueueActions().then(async (actions) => {
49523
- const first = actions.filter((action) => action.id === actionId)[0];
49524
- if (first === undefined) {
49525
- this.replacingAction = undefined;
49526
- await this.startQueueSafe();
49527
- return Promise.reject('No action to replace');
49528
- }
49529
- // put in a try/finally block so we don't leave this.replacingAction
49530
- // indefinitely set
49531
- let actionToReplace;
49532
- try {
49533
- const replaceResult = this.getHandler(first.handler).handleReplaceAction(actionId, withActionId, this.uploadingActionId, actions);
49534
- actionToReplace = replaceResult.actionToReplace;
49535
- // TODO [W-8873834]: Will add batching support to durable store
49536
- // we should use that here to remove and set both actions in one operation
49537
- await this.removeDraftAction(replaceResult.replacingAction.id);
49538
- await this.draftStore.writeAction(actionToReplace);
49539
- await this.notifyChangedListeners({
49540
- type: DraftQueueEventType.ActionUpdated,
49541
- action: actionToReplace,
49542
- });
49543
- }
49544
- finally {
49545
- this.replacingAction = undefined;
49546
- }
49547
- await this.startQueueSafe();
49548
- return actionToReplace;
49549
- });
49550
- this.replacingAction = replacing;
49551
- return replacing;
49510
+ replaceAction(targetActionId, sourceActionId) {
49511
+ return this.replaceOrMergeActions(targetActionId, sourceActionId, false);
49552
49512
  }
49553
49513
  mergeActions(targetActionId, sourceActionId) {
49554
- // ids must be unique
49555
- if (targetActionId === sourceActionId) {
49556
- return Promise.reject(new Error('targetActionId and sourceActionId cannot be the same.'));
49557
- }
49558
- // cannot have a replace action already in progress
49559
- if (this.replacingAction !== undefined) {
49560
- return Promise.reject(new Error('Cannot merge actions while a replace/merge action operation is in progress.'));
49561
- }
49562
- this.stopQueueManually();
49563
- const promise = this.getQueueActions().then(async (actions) => {
49564
- const target = actions.find((action) => action.id === targetActionId);
49565
- if (target === undefined) {
49566
- this.replacingAction = undefined;
49567
- await this.startQueueSafe();
49568
- throw Error('targetActionId not found in the draft queue.');
49569
- }
49570
- const source = actions.find((action) => action.id === sourceActionId);
49571
- if (source === undefined) {
49572
- this.replacingAction = undefined;
49573
- await this.startQueueSafe();
49574
- throw Error('sourceActionId not found in the draft queue.');
49575
- }
49576
- // put in a try/finally block so we don't leave this.replacingAction
49577
- // indefinitely set
49578
- let merged;
49579
- try {
49580
- merged = this.getHandler(target.handler).mergeActions(target, source);
49581
- // update the target
49582
- await this.draftStore.writeAction(merged);
49583
- await this.notifyChangedListeners({
49584
- type: DraftQueueEventType.ActionUpdated,
49585
- action: merged,
49586
- });
49587
- // remove the source from queue
49588
- await this.removeDraftAction(sourceActionId);
49589
- }
49590
- finally {
49591
- this.replacingAction = undefined;
49592
- }
49593
- await this.startQueueSafe();
49594
- return merged;
49595
- });
49596
- this.replacingAction = promise;
49597
- return promise;
49514
+ return this.replaceOrMergeActions(targetActionId, sourceActionId, true);
49598
49515
  }
49599
49516
  async setMetadata(actionId, metadata) {
49600
49517
  const keys$1 = keys$4(metadata);
@@ -49629,6 +49546,81 @@
49629
49546
  }
49630
49547
  }, this.retryIntervalMilliseconds);
49631
49548
  }
49549
+ async getActionsForReplaceOrMerge(targetActionId, sourceActionId) {
49550
+ const actions = await this.getQueueActions();
49551
+ const target = actions.find((action) => action.id === targetActionId);
49552
+ if (target === undefined) {
49553
+ this.replacingAction = undefined;
49554
+ await this.startQueueSafe();
49555
+ throw Error(`targetActionId ${targetActionId} not found in the draft queue.`);
49556
+ }
49557
+ const source = actions.find((action) => action.id === sourceActionId);
49558
+ if (source === undefined) {
49559
+ this.replacingAction = undefined;
49560
+ await this.startQueueSafe();
49561
+ throw Error(`sourceActionId ${sourceActionId} not found in the draft queue.`);
49562
+ }
49563
+ return { target, source };
49564
+ }
49565
+ assertReplaceOrMergePrerequisites(target, source) {
49566
+ // ensure actions are in a state to be replaced/merged
49567
+ const { targetId: targetCacheKey, tag: targetTag, status: targetStatus, version: targetVersion, } = target;
49568
+ const { targetId: sourceCacheKey, tag: sourceTag, status: sourceStatus, version: sourceVersion, } = source;
49569
+ if (targetCacheKey !== sourceCacheKey) {
49570
+ throw Error('Cannot replace/merge actions for different targetIds.');
49571
+ }
49572
+ if (targetTag !== sourceTag) {
49573
+ throw Error('Cannot replace/merge actions for different tags.');
49574
+ }
49575
+ if (targetStatus === DraftActionStatus.Completed ||
49576
+ targetStatus === DraftActionStatus.Uploading) {
49577
+ throw Error(`Cannot replace/merge actions when targetAction is in ${targetStatus} status.`);
49578
+ }
49579
+ if (sourceStatus !== DraftActionStatus.Pending) {
49580
+ throw Error(`Cannot replace/merge actions when sourceAction is in ${sourceStatus} status.`);
49581
+ }
49582
+ if (targetVersion !== sourceVersion) {
49583
+ throw Error('Cannot replace/merge actions with different versions.');
49584
+ }
49585
+ }
49586
+ async replaceOrMergeActions(targetActionId, sourceActionId, merge) {
49587
+ // ids must be unique
49588
+ if (targetActionId === sourceActionId) {
49589
+ throw Error('targetActionId and sourceActionId cannot be the same.');
49590
+ }
49591
+ // cannot have a replace action already in progress
49592
+ if (this.replacingAction !== undefined) {
49593
+ throw Error('Cannot replace/merge actions while a replace/merge action operation is in progress.');
49594
+ }
49595
+ this.stopQueueManually();
49596
+ const promise = this.getActionsForReplaceOrMerge(targetActionId, sourceActionId).then(async ({ target, source }) => {
49597
+ // put in a try/finally block so we don't leave this.replacingAction
49598
+ // indefinitely set
49599
+ let updatedTarget;
49600
+ try {
49601
+ this.assertReplaceOrMergePrerequisites(target, source);
49602
+ const handler = this.getHandler(target.handler);
49603
+ updatedTarget = merge
49604
+ ? handler.mergeActions(target, source)
49605
+ : handler.handleReplaceAction(target, source);
49606
+ // update the target
49607
+ await this.draftStore.writeAction(updatedTarget);
49608
+ await this.notifyChangedListeners({
49609
+ type: DraftQueueEventType.ActionUpdated,
49610
+ action: updatedTarget,
49611
+ });
49612
+ // remove the source from queue
49613
+ await this.removeDraftAction(sourceActionId);
49614
+ }
49615
+ finally {
49616
+ this.replacingAction = undefined;
49617
+ await this.startQueueSafe();
49618
+ }
49619
+ return updatedTarget;
49620
+ });
49621
+ this.replacingAction = promise;
49622
+ return promise;
49623
+ }
49632
49624
  }
49633
49625
 
49634
49626
  const DRAFT_ACTION_KEY_JUNCTION = '__DraftAction__';
@@ -50048,56 +50040,53 @@
50048
50040
  }
50049
50041
  await this.ingestResponses(recordsToIngest, action);
50050
50042
  }
50051
- handleReplaceAction(actionId, withActionId, uploadingActionId, actions) {
50052
- // get the action to replace
50053
- const actionToReplace = actions.filter((action) => action.id === actionId)[0];
50054
- // get the replacing action
50055
- const replacingAction = actions.filter((action) => action.id === withActionId)[0];
50056
- // reject if either action is undefined
50057
- if (actionToReplace === undefined || replacingAction === undefined) {
50058
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50059
- throw new Error('One or both actions does not exist');
50060
- }
50061
- // reject if either action is uploading
50062
- if (actionToReplace.id === uploadingActionId || replacingAction.id === uploadingActionId) {
50063
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50064
- throw new Error('Cannot replace an draft action that is uploading');
50065
- }
50066
- // reject if these two draft actions aren't acting on the same target
50067
- if (actionToReplace.tag !== replacingAction.tag) {
50068
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50069
- throw new Error('Cannot swap actions targeting different targets');
50070
- }
50071
- // reject if the replacing action is not pending
50072
- if (replacingAction.status !== DraftActionStatus.Pending) {
50073
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50074
- throw new Error('Cannot replace with a non-pending action');
50075
- }
50043
+ handleReplaceAction(targetAction, sourceAction) {
50076
50044
  //reject if the action to replace is a POST action
50077
- const pendingAction = actionToReplace;
50045
+ const pendingAction = targetAction;
50078
50046
  if (pendingAction.data.method === 'post') {
50079
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50080
- throw new Error('Cannot replace a POST action');
50047
+ throw Error('Cannot replace a POST action');
50081
50048
  }
50082
- if (this.isActionOfType(actionToReplace) &&
50083
- this.isActionOfType(replacingAction)) {
50084
- const actionToReplaceCopy = {
50085
- ...actionToReplace,
50086
- status: DraftActionStatus.Pending,
50087
- };
50088
- actionToReplace.status = DraftActionStatus.Pending;
50089
- actionToReplace.data = replacingAction.data;
50090
- return {
50091
- original: actionToReplaceCopy,
50092
- actionToReplace: actionToReplace,
50093
- replacingAction: replacingAction,
50094
- };
50049
+ if (this.isActionOfType(targetAction) &&
50050
+ this.isActionOfType(sourceAction)) {
50051
+ targetAction.status = DraftActionStatus.Pending;
50052
+ targetAction.data = sourceAction.data;
50053
+ return targetAction;
50095
50054
  }
50096
50055
  else {
50097
- // eslint-disable-next-line @salesforce/lds/no-error-in-production
50098
- throw new Error('Incompatible Action types to replace one another');
50056
+ throw Error('Incompatible Action types to replace one another');
50099
50057
  }
50100
50058
  }
50059
+ mergeActions(targetAction, sourceAction) {
50060
+ const { id: targetId, data: targetData, metadata: targetMetadata, timestamp: targetTimestamp, } = targetAction;
50061
+ const { method: targetMethod, body: targetBody } = targetData;
50062
+ const { data: sourceData, metadata: sourceMetadata } = sourceAction;
50063
+ const { method: sourceMethod, body: sourceBody } = sourceData;
50064
+ if (targetMethod.toLowerCase() === 'delete' || sourceMethod.toLowerCase() === 'delete') {
50065
+ throw Error('Cannot merge DELETE actions.');
50066
+ }
50067
+ if (targetMethod.toLowerCase() === 'patch' && sourceMethod.toLowerCase() === 'post') {
50068
+ // overlaying a POST over a PATCH is not supported
50069
+ throw Error('Cannot merge a POST action over top of a PATCH action.');
50070
+ }
50071
+ // overlay top-level properties, maintain target's timestamp and id
50072
+ const merged = {
50073
+ ...targetAction,
50074
+ ...sourceAction,
50075
+ timestamp: targetTimestamp,
50076
+ id: targetId,
50077
+ };
50078
+ // overlay data
50079
+ // NOTE: we stick to the target's ResourceRequest properties (except body
50080
+ // which is merged) because we don't want to overwrite a POST with a PATCH
50081
+ // (all other cases should be fine or wouldn't have passed pre-requisites)
50082
+ merged.data = {
50083
+ ...targetData,
50084
+ body: this.mergeRequestBody(targetBody, sourceBody),
50085
+ };
50086
+ // overlay metadata
50087
+ merged.metadata = { ...targetMetadata, ...sourceMetadata };
50088
+ return merged;
50089
+ }
50101
50090
  shouldDeleteActionByTagOnRemoval(action) {
50102
50091
  return action.data.method === 'post';
50103
50092
  }
@@ -55515,6 +55504,16 @@
55515
55504
  if (fieldInfo !== undefined) {
55516
55505
  const { dataType, relationshipName, referenceToInfos } = fieldInfo;
55517
55506
  recordFields[fieldName].displayValue = formatDisplayValue(draftField, dataType);
55507
+ if (dataType === 'DateTime' &&
55508
+ draftField !== null &&
55509
+ typeof draftField === 'string') {
55510
+ try {
55511
+ recordFields[fieldName].value = new Date(draftField).toISOString();
55512
+ }
55513
+ catch (e) {
55514
+ throw Error('date field value not valid');
55515
+ }
55516
+ }
55518
55517
  if (dataType === 'Reference' && relationshipName !== null && draftField !== null) {
55519
55518
  if (typeof draftField !== 'string') {
55520
55519
  throw Error('reference field value is not a string');
@@ -55948,68 +55947,17 @@
55948
55947
  synchronousIngest(response) {
55949
55948
  return this.recordService.synchronousIngestRecord(response);
55950
55949
  }
55951
- mergeActions(targetAction, sourceAction) {
55952
- // NOTE: a lot of the logic in this method could be hoisted to the
55953
- // AbstractResourceRequestActionHandler, and then some new abstract mergeBody()
55954
- // method could be called there and implemented here. As of right now there
55955
- // are no other concrete ResourceRequest handlers implementing mergeActions
55956
- // so to keep this simple we aren't hoisting the shared stuff yet.
55957
- const { id: targetId, targetId: targetCacheKey, tag: targetTag, status: targetStatus, data: targetData, metadata: targetMetadata, timestamp: targetTimestamp, version: targetVersion, } = targetAction;
55958
- const { method: targetMethod, body: targetBody } = targetData;
55959
- const { targetId: sourceCacheKey, tag: sourceTag, status: sourceStatus, data: sourceData, metadata: sourceMetadata, version: sourceVersion, } = sourceAction;
55960
- const { method: sourceMethod, body: sourceBody } = sourceData;
55961
- // pre-requisites
55962
- if (targetCacheKey !== sourceCacheKey) {
55963
- throw Error('Cannot merge actions for different targetIds.');
55964
- }
55965
- if (targetTag !== sourceTag) {
55966
- throw Error('Cannot merge actions for different tags.');
55967
- }
55968
- if (targetStatus === DraftActionStatus.Completed ||
55969
- targetStatus === DraftActionStatus.Uploading) {
55970
- throw Error(`Cannot merge actions when targetAction is in ${targetStatus} status.`);
55971
- }
55972
- if (sourceStatus === DraftActionStatus.Completed ||
55973
- sourceStatus === DraftActionStatus.Uploading) {
55974
- throw Error(`Cannot merge actions when sourceAction is in ${sourceStatus} status.`);
55975
- }
55976
- if (targetMethod.toLowerCase() === 'delete' || sourceMethod.toLowerCase() === 'delete') {
55977
- throw Error('Cannot merge DELETE actions.');
55978
- }
55979
- if (targetMethod.toLowerCase() === 'patch' && sourceMethod.toLowerCase() === 'post') {
55980
- // overlaying a POST over a PATCH is not supported
55981
- throw Error('Cannot merge a POST action over top of a PATCH action.');
55982
- }
55983
- if (targetVersion !== sourceVersion) {
55984
- throw Error('Cannot merge actions with different versions.');
55985
- }
55986
- // overlay top-level properties, maintain target's timestamp and id
55987
- const merged = {
55988
- ...targetAction,
55989
- ...sourceAction,
55990
- timestamp: targetTimestamp,
55991
- id: targetId,
55992
- };
55993
- // overlay data
55950
+ mergeRequestBody(targetBody, sourceBody) {
55994
55951
  // IMPORTANT: spread operator isn't deep clone so we have to individually
55995
55952
  // spread nested objects (just "fields" for RecordInputReps)
55996
- // NOTE: we stick to the target's ResourceRequest properties (except body
55997
- // which is merged) because we don't want to overwrite a POST with a PATCH
55998
- // (all other cases should be fine or wouldn't have passed pre-requisites)
55999
- merged.data = {
56000
- ...targetData,
56001
- body: {
56002
- ...targetBody,
56003
- ...sourceBody,
56004
- fields: {
56005
- ...targetBody.fields,
56006
- ...sourceBody.fields,
56007
- },
55953
+ return {
55954
+ ...targetBody,
55955
+ ...sourceBody,
55956
+ fields: {
55957
+ ...targetBody.fields,
55958
+ ...sourceBody.fields,
56008
55959
  },
56009
55960
  };
56010
- // overlay metadata
56011
- merged.metadata = { ...targetMetadata, ...sourceMetadata };
56012
- return merged;
56013
55961
  }
56014
55962
  }
56015
55963
  function isField(key, data) {
@@ -56524,7 +56472,7 @@
56524
56472
  });
56525
56473
  luvio.storeIngest(key, ingest$x$1, response);
56526
56474
  }
56527
- mergeActions(_targetAction, _sourceAction) {
56475
+ mergeRequestBody() {
56528
56476
  throw Error('mergeActions not supported for QuickActionExecutionRepresentationHandler');
56529
56477
  }
56530
56478
  }
@@ -57211,7 +57159,7 @@
57211
57159
  this.binaryStoreUrlsToUpdate.set(fileReference.handle, versionDataUrl);
57212
57160
  }
57213
57161
  }
57214
- mergeActions(_targetAction, _sourceAction) {
57162
+ mergeRequestBody() {
57215
57163
  throw Error('mergeActions not supported for ContentDocumentCompositeRepresentationActionHandler');
57216
57164
  }
57217
57165
  async ingestResponses(responses, action) {
@@ -59908,7 +59856,7 @@
59908
59856
  id: '@salesforce/lds-network-adapter',
59909
59857
  instrument: instrument$1,
59910
59858
  });
59911
- // version: 1.124.4-f07bfc14d
59859
+ // version: 1.124.6-8cacd232f
59912
59860
 
59913
59861
  const { create: create$2, keys: keys$2 } = Object;
59914
59862
  const { stringify: stringify$1, parse: parse$1 } = JSON;
@@ -74173,7 +74121,7 @@
74173
74121
  configuration: { ...configurationForGraphQLAdapters },
74174
74122
  instrument,
74175
74123
  });
74176
- // version: 1.124.4-fc08995da
74124
+ // version: 1.124.6-3b244264b
74177
74125
 
74178
74126
  // On core the unstable adapters are re-exported with different names,
74179
74127
 
@@ -76302,7 +76250,7 @@
76302
76250
  unstable_graphQL_imperative = createImperativeAdapter(luvio, createInstrumentedAdapter(ldsAdapter, adapterMetadata), adapterMetadata);
76303
76251
  graphQLImperative = ldsAdapter;
76304
76252
  });
76305
- // version: 1.124.4-fc08995da
76253
+ // version: 1.124.6-3b244264b
76306
76254
 
76307
76255
  var gqlApi = /*#__PURE__*/Object.freeze({
76308
76256
  __proto__: null,
@@ -77001,4 +76949,4 @@
77001
76949
  Object.defineProperty(exports, '__esModule', { value: true });
77002
76950
 
77003
76951
  }));
77004
- // version: 1.124.4-f07bfc14d
76952
+ // version: 1.124.6-8cacd232f
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-worker-api",
3
- "version": "1.124.4",
3
+ "version": "1.124.6",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "",
6
6
  "main": "dist/standalone/es/lds-worker-api.js",
@@ -320,6 +320,39 @@
320
320
  "unique": false,
321
321
  "updateable": true
322
322
  },
323
+ "LastFaultDateTime": {
324
+ "apiName": "LastFaultDateTime",
325
+ "calculated": false,
326
+ "compound": false,
327
+ "compoundComponentName": null,
328
+ "compoundFieldName": null,
329
+ "controllerName": null,
330
+ "controllingFields": [],
331
+ "createable": true,
332
+ "custom": true,
333
+ "dataType": "DateTime",
334
+ "extraTypeInfo": null,
335
+ "filterable": true,
336
+ "filteredLookupInfo": null,
337
+ "highScaleNumber": false,
338
+ "htmlFormatted": false,
339
+ "inlineHelpText": null,
340
+ "label": "Last Fault Date Time",
341
+ "length": 0,
342
+ "nameField": false,
343
+ "polymorphicForeignKey": false,
344
+ "precision": 0,
345
+ "reference": false,
346
+ "referenceTargetField": null,
347
+ "referenceToInfos": [],
348
+ "relationshipName": null,
349
+ "required": false,
350
+ "scale": 0,
351
+ "searchPrefilterable": false,
352
+ "sortable": true,
353
+ "unique": false,
354
+ "updateable": true
355
+ },
323
356
  "ManufacturedDate": {
324
357
  "apiName": "ManufacturedDate",
325
358
  "calculated": false,
@@ -55,6 +55,10 @@
55
55
  "displayValue": null,
56
56
  "value": null
57
57
  },
58
+ "LastFaultDateTime": {
59
+ "displayValue": null,
60
+ "value": null
61
+ },
58
62
  "LastFliedById": {
59
63
  "displayValue": null,
60
64
  "value": null
@@ -19,6 +19,10 @@
19
19
  "displayValue": "formatted",
20
20
  "value": "2021-10-11T06:53:20.000Z"
21
21
  },
22
+ "LastFaultDateTime": {
23
+ "displayValue": "formatted",
24
+ "value": "2023-03-16T18:00:00.000Z"
25
+ },
22
26
  "LastFlightTime": {
23
27
  "displayValue": "formatted",
24
28
  "value": "12:45:30"
@@ -10,6 +10,7 @@
10
10
  "Price": 1500000.01,
11
11
  "ManufacturedDate": "2021-10-11",
12
12
  "LastServiceDateTime": "2021-10-11T06:53:20.000Z",
13
+ "LastFaultDateTime": "2023-03-16T18:00:00.000+0000",
13
14
  "LastFlightTime": "12:45:30"
14
15
  }
15
16
  },