@salesforce/lds-worker-api 1.229.0-dev4 → 1.229.0-dev6

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.
@@ -795,4 +795,4 @@ if (process.env.NODE_ENV !== 'production') {
795
795
  }
796
796
 
797
797
  export { createPrimingSession, draftManager, draftQueue, executeAdapter, executeMutatingAdapter, getImperativeAdapterNames, invokeAdapter, invokeAdapterWithDraftToReplace, invokeAdapterWithMetadata, nimbusDraftQueue, setMetadataTTL, setUiApiRecordTTL, subscribeToAdapter };
798
- // version: 1.229.0-dev4-07d38781a
798
+ // version: 1.229.0-dev6-53f3d6911
@@ -2275,6 +2275,34 @@ var FragmentReadResultState$1;
2275
2275
  const FRAGMENT_READ_RESULT_MISSING = {
2276
2276
  state: FragmentReadResultState$1.Missing,
2277
2277
  };
2278
+ function resolveLink$1(reader, storeLink, version) {
2279
+ const { StoreLinkStateValues } = reader;
2280
+ const linkState = reader.getLinkState(storeLink);
2281
+ switch (linkState.state) {
2282
+ case StoreLinkStateValues.RefNotPresent:
2283
+ case StoreLinkStateValues.NotPresent:
2284
+ case StoreLinkStateValues.Missing:
2285
+ reader.markMissingLink(storeLink.__ref);
2286
+ reader.markMissing();
2287
+ return;
2288
+ case StoreLinkStateValues.Pending:
2289
+ reader.markPending();
2290
+ return;
2291
+ case StoreLinkStateValues.Null:
2292
+ return;
2293
+ }
2294
+ const { key: __ref } = linkState;
2295
+ return reader.read({
2296
+ recordId: __ref,
2297
+ node: {
2298
+ kind: 'Fragment',
2299
+ private: [],
2300
+ opaque: true,
2301
+ version,
2302
+ },
2303
+ variables: {},
2304
+ });
2305
+ }
2278
2306
  class Reader {
2279
2307
  constructor(store, variables, refresh, baseSnapshot, ttlStrategy) {
2280
2308
  this.store = store;
@@ -3841,7 +3869,7 @@ function createResourceParamsImpl(config, configMetadata) {
3841
3869
  }
3842
3870
  return resourceParams;
3843
3871
  }
3844
- // engine version: 0.146.0-dev3-502c4337
3872
+ // engine version: 0.146.0-dev4-c265089a
3845
3873
 
3846
3874
  /**
3847
3875
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -3968,7 +3996,7 @@ function withDefaultLuvio(callback) {
3968
3996
  }
3969
3997
  callbacks.push(callback);
3970
3998
  }
3971
- // version: 1.229.0-dev4-07d38781a
3999
+ // version: 1.229.0-dev6-53f3d6911
3972
4000
 
3973
4001
  // TODO [TD-0081508]: once that TD is fulfilled we can probably change this file
3974
4002
  function instrumentAdapter$1(createFunction, _metadata) {
@@ -15429,7 +15457,7 @@ function gql(literals, ...subs) {
15429
15457
  }
15430
15458
  return superResult;
15431
15459
  }
15432
- // version: 1.229.0-dev4-07d38781a
15460
+ // version: 1.229.0-dev6-53f3d6911
15433
15461
 
15434
15462
  function unwrap(data) {
15435
15463
  // The lwc-luvio bindings import a function from lwc called "unwrap".
@@ -16353,7 +16381,7 @@ function createGraphQLWireAdapterConstructor(luvio, adapter, metadata, astResolv
16353
16381
  const { apiFamily, name } = metadata;
16354
16382
  return createGraphQLWireAdapterConstructor$1(adapter, `${apiFamily}.${name}`, luvio, astResolver);
16355
16383
  }
16356
- // version: 1.229.0-dev4-07d38781a
16384
+ // version: 1.229.0-dev6-53f3d6911
16357
16385
 
16358
16386
  /**
16359
16387
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -16452,11 +16480,11 @@ var TypeCheckShapes;
16452
16480
  TypeCheckShapes[TypeCheckShapes["Integer"] = 3] = "Integer";
16453
16481
  TypeCheckShapes[TypeCheckShapes["Unsupported"] = 4] = "Unsupported";
16454
16482
  })(TypeCheckShapes || (TypeCheckShapes = {}));
16455
- // engine version: 0.146.0-dev3-502c4337
16483
+ // engine version: 0.146.0-dev4-c265089a
16456
16484
 
16457
16485
  const { keys: ObjectKeys$3, create: ObjectCreate$3 } = Object;
16458
16486
 
16459
- const { assign: assign$9, create: create$9, freeze: freeze$4, keys: keys$b } = Object;
16487
+ const { assign: assign$9, create: create$9, freeze: freeze$4, isFrozen: isFrozen$2, keys: keys$b } = Object;
16460
16488
 
16461
16489
  ObjectCreate$3(null);
16462
16490
 
@@ -16826,7 +16854,7 @@ function buildAdapterValidationConfig$1(displayName, paramsMeta) {
16826
16854
  }
16827
16855
  const keyPrefix$1 = 'UiApi';
16828
16856
 
16829
- const { assign: assign$8, create: create$8, freeze: freeze$3, keys: keys$a } = Object;
16857
+ const { assign: assign$8, create: create$8, freeze: freeze$3, isFrozen: isFrozen$1, keys: keys$a } = Object;
16830
16858
  const { hasOwnProperty: hasOwnProperty$1 } = Object.prototype;
16831
16859
  const { split, endsWith } = String.prototype;
16832
16860
  const { isArray: isArray$7 } = Array;
@@ -19948,7 +19976,11 @@ function markNulledOutPath(record, path) {
19948
19976
  }
19949
19977
  const link = fieldValueRepresentation.link(fieldName);
19950
19978
  const resolved = link.follow();
19951
- if (isGraphNode(resolved) && resolved.isScalar('value') && path.length > 0) {
19979
+ if (isGraphNode(resolved) &&
19980
+ resolved.isScalar('value') &&
19981
+ path.length > 0 &&
19982
+ // TODO [W-14082782]: temporary fix
19983
+ !isFrozen$1(link.data)) {
19952
19984
  const linkState = link.linkData();
19953
19985
  const fields = linkState === undefined ? [] : linkState.fields;
19954
19986
  link.writeLinkData({
@@ -41169,7 +41201,7 @@ withDefaultLuvio((luvio) => {
41169
41201
  throttle(60, 60000, createLDSAdapter(luvio, 'notifyListInfoUpdateAvailable', notifyUpdateAvailableFactory$1));
41170
41202
  throttle(60, 60000, createLDSAdapter(luvio, 'notifyQuickActionDefaultsUpdateAvailable', notifyUpdateAvailableFactory));
41171
41203
  });
41172
- // version: 1.229.0-dev4-4a7593877
41204
+ // version: 1.229.0-dev6-6005e174d
41173
41205
 
41174
41206
  var caseSensitiveUserId = '005B0000000GR4OIAW';
41175
41207
 
@@ -46325,8 +46357,12 @@ function uuidv4() {
46325
46357
 
46326
46358
  const HTTP_HEADER_RETRY_AFTER = 'Retry-After';
46327
46359
  const HTTP_HEADER_IDEMPOTENCY_KEY = 'Idempotency-Key';
46360
+ const ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED = 'IDEMPOTENCY_FEATURE_NOT_ENABLED';
46361
+ const ERROR_CODE_IDEMPOTENCY_NOT_SUPPORTED = 'IDEMPOTENCY_NOT_SUPPORTED';
46328
46362
  const ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER = 'IDEMPOTENCY_KEY_USED_DIFFERENT_USER';
46329
46363
  const ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST = 'IDEMPOTENCY_CONCURRENT_REQUEST';
46364
+ const ERROR_CODE_IDEMPOTENCY_KEY_ALREADY_USED = 'IDEMPOTENCY_KEY_ALREADY_USED';
46365
+ const ERROR_CODE_IDEMPOTENCY_BACKEND_OPERATION_ERROR = 'IDEMPOTENCY_BACKEND_OPERATION_ERROR';
46330
46366
  /**
46331
46367
  * Get the retry after in milliseconds from the response headers, undefined if not specified.
46332
46368
  * The header could have two different format.
@@ -46356,7 +46392,9 @@ function buildLuvioOverrideForDraftAdapters(luvio, handler, extractTargetIdFromC
46356
46392
  const dispatchResourceRequest = async function (resourceRequest, _context) {
46357
46393
  const resourceRequestCopy = clone$1(resourceRequest);
46358
46394
  resourceRequestCopy.headers = resourceRequestCopy.headers || {};
46359
- resourceRequestCopy.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
46395
+ if (handler.hasIdempotencySupport()) {
46396
+ resourceRequestCopy.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
46397
+ }
46360
46398
  // enable return extra fields for record creation and record update http call
46361
46399
  if (resourceRequest.basePath === '/ui-api/records' &&
46362
46400
  (resourceRequest.method === 'post' || resourceRequest.method === 'patch')) {
@@ -47178,6 +47216,7 @@ class AbstractResourceRequestActionHandler {
47178
47216
  // the luvio store redirect table, during which a new draft might be enqueued
47179
47217
  // which would not see a necessary mapping.
47180
47218
  this.ephemeralRedirects = {};
47219
+ this.isIdempotencySupported = true;
47181
47220
  }
47182
47221
  enqueue(data) {
47183
47222
  return this.draftQueue.enqueue(this.handlerId, data);
@@ -47207,21 +47246,43 @@ class AbstractResourceRequestActionHandler {
47207
47246
  retryDelayInMs = getRetryAfterInMs(response.headers);
47208
47247
  shouldRetry = true;
47209
47248
  break;
47210
- case HttpStatusCode$1.ServerError:
47249
+ case HttpStatusCode$1.ServerError: {
47211
47250
  shouldRetry = true;
47251
+ if (this.handleIdempotencyServerError(response.body, updatedAction, false, ERROR_CODE_IDEMPOTENCY_BACKEND_OPERATION_ERROR)) {
47252
+ this.isIdempotencySupported = false;
47253
+ retryDelayInMs = 0;
47254
+ actionDataChanged = true;
47255
+ }
47212
47256
  break;
47257
+ }
47213
47258
  case 409 /* IdempotentWriteSpecificHttpStatusCode.Conflict */: {
47214
- const errorCode = response.body[0].errorCode;
47215
- if (errorCode === ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER) {
47216
- updatedAction.data.headers = updatedAction.data.headers || {};
47217
- updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47259
+ if (this.isUiApiErrors(response.body)) {
47260
+ const errorCode = response.body[0].errorCode;
47261
+ if (this.handleIdempotencyServerError(response.body, updatedAction, true, ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER)) {
47262
+ retryDelayInMs = 0;
47263
+ actionDataChanged = true;
47264
+ }
47265
+ else if (errorCode === ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST) {
47266
+ retryDelayInMs = getRetryAfterInMs(response.headers);
47267
+ }
47268
+ shouldRetry = true;
47269
+ }
47270
+ break;
47271
+ }
47272
+ case HttpStatusCode$1.BadRequest: {
47273
+ if (this.handleIdempotencyServerError(response.body, updatedAction, false, ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED, ERROR_CODE_IDEMPOTENCY_NOT_SUPPORTED)) {
47218
47274
  retryDelayInMs = 0;
47219
47275
  actionDataChanged = true;
47276
+ shouldRetry = true;
47220
47277
  }
47221
- else if (errorCode === ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST) {
47222
- retryDelayInMs = getRetryAfterInMs(response.headers);
47278
+ break;
47279
+ }
47280
+ case 422 /* IdempotentWriteSpecificHttpStatusCode.UnProcessableEntity */: {
47281
+ if (this.handleIdempotencyServerError(response.body, updatedAction, true, ERROR_CODE_IDEMPOTENCY_KEY_ALREADY_USED)) {
47282
+ retryDelayInMs = 0;
47283
+ actionDataChanged = true;
47284
+ shouldRetry = true;
47223
47285
  }
47224
- shouldRetry = true;
47225
47286
  break;
47226
47287
  }
47227
47288
  }
@@ -47240,6 +47301,27 @@ class AbstractResourceRequestActionHandler {
47240
47301
  return ProcessActionResult.NETWORK_ERROR;
47241
47302
  }
47242
47303
  }
47304
+ // true if response is an idempotency server error. updates or deletes idempotency key if the reponse is idempotency related error. Idempotency related error is in format of UiApiError array.
47305
+ handleIdempotencyServerError(responseBody, action, updateIdempotencyKey, ...targetErrorCodes) {
47306
+ if (this.isUiApiErrors(responseBody)) {
47307
+ const errorCode = responseBody[0].errorCode;
47308
+ if (targetErrorCodes.includes(errorCode)) {
47309
+ action.data.headers = action.data.headers || {};
47310
+ if (updateIdempotencyKey) {
47311
+ action.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47312
+ }
47313
+ else {
47314
+ delete action.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY];
47315
+ }
47316
+ return true;
47317
+ }
47318
+ }
47319
+ return false;
47320
+ }
47321
+ // checks if the body is an array of UiApiError. Sometimes the body has `enhancedErrorType` field as an error indicator(one example is the field validation failure). In such case Action being processed updates to an Error Action.
47322
+ isUiApiErrors(body) {
47323
+ return body !== undefined && Array.isArray(body) && body.length > 0 && body[0].errorCode;
47324
+ }
47243
47325
  async buildPendingAction(request, queue) {
47244
47326
  const targetId = await this.getIdFromRequest(request);
47245
47327
  if (targetId === undefined) {
@@ -47453,6 +47535,10 @@ class AbstractResourceRequestActionHandler {
47453
47535
  ...targetData,
47454
47536
  body: this.mergeRequestBody(targetBody, sourceBody),
47455
47537
  };
47538
+ // Updates Idempotency key if target has one
47539
+ if (targetData.headers && targetData.headers[HTTP_HEADER_IDEMPOTENCY_KEY]) {
47540
+ merged.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47541
+ }
47456
47542
  // overlay metadata
47457
47543
  merged.metadata = { ...targetMetadata, ...sourceMetadata };
47458
47544
  // put status back to pending to auto upload if queue is active and targed is at the head.
@@ -47489,6 +47575,9 @@ class AbstractResourceRequestActionHandler {
47489
47575
  getDraftIdsFromAction(action) {
47490
47576
  return [action.targetId];
47491
47577
  }
47578
+ hasIdempotencySupport() {
47579
+ return this.isIdempotencySupported;
47580
+ }
47492
47581
  async ingestResponses(responses, action) {
47493
47582
  const luvio = this.getLuvio();
47494
47583
  await luvio.handleSuccessResponse(() => {
@@ -51449,16 +51538,18 @@ function injectFilter(filterNode, idState, parentPath, isParentPolymorphic, obje
51449
51538
  if (!isIdField) {
51450
51539
  let subSelectionNodes = [];
51451
51540
  let subFieldsHasId = false;
51452
- filterNode.value.fields.forEach((subFieldNode) => {
51453
- // Check if the filter field has the 'Id'
51454
- if (isFieldAnIdField(subFieldNode.name.value, objectInfos[objectInfoName])) {
51455
- subFieldsHasId = true;
51456
- updateIDInfo(subFieldNode, idState, draftFunctions);
51457
- }
51458
- // try injecting the fields within predicate no matter it has relation or not.
51459
- let subResults = injectFilter(subFieldNode, idState, curPath, isPolymorphicField, objectInfos, pathToObjectApiNamesMap, draftFunctions, existingFields ? existingFields[0] : undefined);
51460
- subSelectionNodes = subSelectionNodes.concat(subResults);
51461
- });
51541
+ if (isSpanning) {
51542
+ filterNode.value.fields.forEach((subFieldNode) => {
51543
+ // Check if the filter field has the 'Id'
51544
+ if (isFieldAnIdField(subFieldNode.name.value, objectInfos[objectInfoName])) {
51545
+ subFieldsHasId = true;
51546
+ updateIDInfo(subFieldNode, idState, draftFunctions);
51547
+ }
51548
+ // try injecting the fields within predicate no matter it has relation or not.
51549
+ let subResults = injectFilter(subFieldNode, idState, curPath, isPolymorphicField, objectInfos, pathToObjectApiNamesMap, draftFunctions, existingFields ? existingFields[0] : undefined);
51550
+ subSelectionNodes = subSelectionNodes.concat(subResults);
51551
+ });
51552
+ }
51462
51553
  if (!subFieldsHasId) {
51463
51554
  // Check if the query field has the 'Id'
51464
51555
  const existingIdsInQuery = existingFields &&
@@ -51487,6 +51578,7 @@ function injectFilter(filterNode, idState, parentPath, isParentPolymorphic, obje
51487
51578
  }
51488
51579
  //Inject Conditions: 1. Same field does not exist 2. Same fields has different children. 3. Filter spanning field does not have Id. 4. InLineFragment does not have the '__typename' field
51489
51580
  if (!existingFields ||
51581
+ existingFields.length === 0 ||
51490
51582
  subSelectionNodes.length > 0 ||
51491
51583
  (isSpanning && !subFieldsHasId) ||
51492
51584
  (isInlineFragment && !isTypeNameExisting)) {
@@ -54189,7 +54281,7 @@ function draftAwareGraphQLAdapterFactory(userId, objectInfoService, store, luvio
54189
54281
  // Fulfilled snapshot (this only happens in this code path if
54190
54282
  // the error is network error or 504), otherwise we spread over
54191
54283
  // the non-eval'ed snapshot (which will be either Fulfilled or Stale)
54192
- return nonEvaluatedSnapshot.state === 'Error'
54284
+ const resultSnapshot = nonEvaluatedSnapshot.state === 'Error'
54193
54285
  ? createLocalEvalSnapshot(gqlResult, seenRecords, recordId, rebuildWithLocalEval)
54194
54286
  : {
54195
54287
  ...nonEvaluatedSnapshot,
@@ -54198,6 +54290,22 @@ function draftAwareGraphQLAdapterFactory(userId, objectInfoService, store, luvio
54198
54290
  seenRecords,
54199
54291
  rebuildWithLocalEval,
54200
54292
  };
54293
+ const { refresh, state } = resultSnapshot;
54294
+ if (state !== 'Error' && refresh) {
54295
+ // after refreshing a graphql snapshot, we want to force a rebuild regardless
54296
+ // of if the call failed or not or if the data changed or not because we want
54297
+ // to make sure any potential new drafts are picked up
54298
+ resultSnapshot.refresh = {
54299
+ ...refresh,
54300
+ resolve: (config) => {
54301
+ return refresh.resolve(config).finally(() => {
54302
+ luvio.storePublish(resultSnapshot.recordId, undefined);
54303
+ luvio.storeBroadcast();
54304
+ });
54305
+ },
54306
+ };
54307
+ }
54308
+ return resultSnapshot;
54201
54309
  };
54202
54310
  }
54203
54311
 
@@ -57941,7 +58049,7 @@ register({
57941
58049
  id: '@salesforce/lds-network-adapter',
57942
58050
  instrument: instrument$1,
57943
58051
  });
57944
- // version: 1.229.0-dev4-07d38781a
58052
+ // version: 1.229.0-dev6-53f3d6911
57945
58053
 
57946
58054
  const { create: create$2, keys: keys$2 } = Object;
57947
58055
  const { stringify: stringify$1, parse: parse$1 } = JSON;
@@ -71265,7 +71373,7 @@ function getFieldType$6(field) {
71265
71373
  }
71266
71374
  }
71267
71375
 
71268
- const { assign, create: create$1, freeze: freeze$1, keys: keys$1 } = Object;
71376
+ const { assign, create: create$1, freeze: freeze$1, isFrozen, keys: keys$1 } = Object;
71269
71377
  const { isArray: isArray$1 } = Array;
71270
71378
  const { concat, filter, includes, push, reduce } = Array.prototype;
71271
71379
 
@@ -72730,17 +72838,8 @@ function buildSelectionForField$7(source, reader, sel, variables, fragments, isC
72730
72838
  return sink;
72731
72839
  }
72732
72840
  function selectTypeLink(sel, fieldData, reader, key, sink, variables, fragments, version, selectFn, isCursorConnection) {
72733
- const resolvedLink = reader.read({
72734
- recordId: fieldData.__ref,
72735
- node: {
72736
- kind: 'Fragment',
72737
- private: [],
72738
- opaque: true,
72739
- version,
72740
- },
72741
- variables: {}
72742
- });
72743
- if (resolvedLink.data !== undefined) {
72841
+ const resolvedLink = resolveLink$1(reader, fieldData, version);
72842
+ if (resolvedLink && resolvedLink.data !== undefined) {
72744
72843
  if (isCursorConnection) {
72745
72844
  selectTypeLinkWithPagination(resolvedLink, sel, fieldData, reader, key, sink, variables, fragments, selectFn);
72746
72845
  }
@@ -73316,19 +73415,11 @@ function selectType$6(typename, sel, fieldData, reader, key, sink, variables, fr
73316
73415
  }
73317
73416
  case 'PolymorphicParentRelationship':
73318
73417
  case 'RecordRepresentation': {
73319
- const spanningFieldLink = reader.read({
73320
- recordId: fieldData.__ref,
73321
- node: {
73322
- kind: 'Fragment',
73323
- private: [],
73324
- opaque: true,
73325
- version: VERSION$f,
73326
- },
73327
- variables: {},
73328
- });
73329
- reader.markSeenId(fieldData.__ref);
73330
- const resolvedSpanningFieldValue = spanningFieldLink.data;
73418
+ const spanningFieldLink = resolveLink$1(reader, fieldData, VERSION$f);
73419
+ const resolvedSpanningFieldValue = spanningFieldLink && spanningFieldLink.data;
73420
+ const fieldDataRef = fieldData.__ref;
73331
73421
  if (resolvedSpanningFieldValue !== undefined) {
73422
+ reader.markSeenId(fieldDataRef);
73332
73423
  const { value: spanningFieldResult } = resolvedSpanningFieldValue;
73333
73424
  // Handle null values - graphql will return it at the field level, not return nested { value: null }
73334
73425
  if (spanningFieldResult === null || typeof spanningFieldResult !== 'object') {
@@ -73352,7 +73443,9 @@ function selectType$6(typename, sel, fieldData, reader, key, sink, variables, fr
73352
73443
  }
73353
73444
  }
73354
73445
  else {
73355
- reader.markMissingLink(fieldData.__ref);
73446
+ if (fieldDataRef !== undefined) {
73447
+ reader.markMissingLink(fieldDataRef);
73448
+ }
73356
73449
  reader.markMissing();
73357
73450
  }
73358
73451
  break;
@@ -76388,7 +76481,7 @@ register({
76388
76481
  configuration: { ...configurationForGraphQLAdapters },
76389
76482
  instrument,
76390
76483
  });
76391
- // version: 1.229.0-dev4-4a7593877
76484
+ // version: 1.229.0-dev6-6005e174d
76392
76485
 
76393
76486
  // On core the unstable adapters are re-exported with different names,
76394
76487
 
@@ -78635,7 +78728,7 @@ withDefaultLuvio((luvio) => {
78635
78728
  unstable_graphQL_imperative = createImperativeAdapter(luvio, createInstrumentedAdapter(ldsAdapter, adapterMetadata), adapterMetadata);
78636
78729
  graphQLImperative = ldsAdapter;
78637
78730
  });
78638
- // version: 1.229.0-dev4-4a7593877
78731
+ // version: 1.229.0-dev6-6005e174d
78639
78732
 
78640
78733
  var gqlApi = /*#__PURE__*/Object.freeze({
78641
78734
  __proto__: null,
@@ -79349,4 +79442,4 @@ const { luvio } = getRuntime();
79349
79442
  setDefaultLuvio({ luvio });
79350
79443
 
79351
79444
  export { createPrimingSession, draftManager, draftQueue, executeAdapter, executeMutatingAdapter, getImperativeAdapterNames, invokeAdapter, invokeAdapterWithDraftToReplace, invokeAdapterWithMetadata, nimbusDraftQueue, registerReportObserver, setMetadataTTL, setUiApiRecordTTL, subscribeToAdapter };
79352
- // version: 1.229.0-dev4-07d38781a
79445
+ // version: 1.229.0-dev6-53f3d6911
@@ -2281,6 +2281,34 @@
2281
2281
  const FRAGMENT_READ_RESULT_MISSING = {
2282
2282
  state: FragmentReadResultState$1.Missing,
2283
2283
  };
2284
+ function resolveLink$1(reader, storeLink, version) {
2285
+ const { StoreLinkStateValues } = reader;
2286
+ const linkState = reader.getLinkState(storeLink);
2287
+ switch (linkState.state) {
2288
+ case StoreLinkStateValues.RefNotPresent:
2289
+ case StoreLinkStateValues.NotPresent:
2290
+ case StoreLinkStateValues.Missing:
2291
+ reader.markMissingLink(storeLink.__ref);
2292
+ reader.markMissing();
2293
+ return;
2294
+ case StoreLinkStateValues.Pending:
2295
+ reader.markPending();
2296
+ return;
2297
+ case StoreLinkStateValues.Null:
2298
+ return;
2299
+ }
2300
+ const { key: __ref } = linkState;
2301
+ return reader.read({
2302
+ recordId: __ref,
2303
+ node: {
2304
+ kind: 'Fragment',
2305
+ private: [],
2306
+ opaque: true,
2307
+ version,
2308
+ },
2309
+ variables: {},
2310
+ });
2311
+ }
2284
2312
  class Reader {
2285
2313
  constructor(store, variables, refresh, baseSnapshot, ttlStrategy) {
2286
2314
  this.store = store;
@@ -3847,7 +3875,7 @@
3847
3875
  }
3848
3876
  return resourceParams;
3849
3877
  }
3850
- // engine version: 0.146.0-dev3-502c4337
3878
+ // engine version: 0.146.0-dev4-c265089a
3851
3879
 
3852
3880
  /**
3853
3881
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -3974,7 +4002,7 @@
3974
4002
  }
3975
4003
  callbacks.push(callback);
3976
4004
  }
3977
- // version: 1.229.0-dev4-07d38781a
4005
+ // version: 1.229.0-dev6-53f3d6911
3978
4006
 
3979
4007
  // TODO [TD-0081508]: once that TD is fulfilled we can probably change this file
3980
4008
  function instrumentAdapter$1(createFunction, _metadata) {
@@ -15435,7 +15463,7 @@
15435
15463
  }
15436
15464
  return superResult;
15437
15465
  }
15438
- // version: 1.229.0-dev4-07d38781a
15466
+ // version: 1.229.0-dev6-53f3d6911
15439
15467
 
15440
15468
  function unwrap(data) {
15441
15469
  // The lwc-luvio bindings import a function from lwc called "unwrap".
@@ -16359,7 +16387,7 @@
16359
16387
  const { apiFamily, name } = metadata;
16360
16388
  return createGraphQLWireAdapterConstructor$1(adapter, `${apiFamily}.${name}`, luvio, astResolver);
16361
16389
  }
16362
- // version: 1.229.0-dev4-07d38781a
16390
+ // version: 1.229.0-dev6-53f3d6911
16363
16391
 
16364
16392
  /**
16365
16393
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -16458,11 +16486,11 @@
16458
16486
  TypeCheckShapes[TypeCheckShapes["Integer"] = 3] = "Integer";
16459
16487
  TypeCheckShapes[TypeCheckShapes["Unsupported"] = 4] = "Unsupported";
16460
16488
  })(TypeCheckShapes || (TypeCheckShapes = {}));
16461
- // engine version: 0.146.0-dev3-502c4337
16489
+ // engine version: 0.146.0-dev4-c265089a
16462
16490
 
16463
16491
  const { keys: ObjectKeys$3, create: ObjectCreate$3 } = Object;
16464
16492
 
16465
- const { assign: assign$9, create: create$9, freeze: freeze$4, keys: keys$b } = Object;
16493
+ const { assign: assign$9, create: create$9, freeze: freeze$4, isFrozen: isFrozen$2, keys: keys$b } = Object;
16466
16494
 
16467
16495
  ObjectCreate$3(null);
16468
16496
 
@@ -16832,7 +16860,7 @@
16832
16860
  }
16833
16861
  const keyPrefix$1 = 'UiApi';
16834
16862
 
16835
- const { assign: assign$8, create: create$8, freeze: freeze$3, keys: keys$a } = Object;
16863
+ const { assign: assign$8, create: create$8, freeze: freeze$3, isFrozen: isFrozen$1, keys: keys$a } = Object;
16836
16864
  const { hasOwnProperty: hasOwnProperty$1 } = Object.prototype;
16837
16865
  const { split, endsWith } = String.prototype;
16838
16866
  const { isArray: isArray$7 } = Array;
@@ -19954,7 +19982,11 @@
19954
19982
  }
19955
19983
  const link = fieldValueRepresentation.link(fieldName);
19956
19984
  const resolved = link.follow();
19957
- if (isGraphNode(resolved) && resolved.isScalar('value') && path.length > 0) {
19985
+ if (isGraphNode(resolved) &&
19986
+ resolved.isScalar('value') &&
19987
+ path.length > 0 &&
19988
+ // TODO [W-14082782]: temporary fix
19989
+ !isFrozen$1(link.data)) {
19958
19990
  const linkState = link.linkData();
19959
19991
  const fields = linkState === undefined ? [] : linkState.fields;
19960
19992
  link.writeLinkData({
@@ -41175,7 +41207,7 @@
41175
41207
  throttle(60, 60000, createLDSAdapter(luvio, 'notifyListInfoUpdateAvailable', notifyUpdateAvailableFactory$1));
41176
41208
  throttle(60, 60000, createLDSAdapter(luvio, 'notifyQuickActionDefaultsUpdateAvailable', notifyUpdateAvailableFactory));
41177
41209
  });
41178
- // version: 1.229.0-dev4-4a7593877
41210
+ // version: 1.229.0-dev6-6005e174d
41179
41211
 
41180
41212
  var caseSensitiveUserId = '005B0000000GR4OIAW';
41181
41213
 
@@ -46331,8 +46363,12 @@
46331
46363
 
46332
46364
  const HTTP_HEADER_RETRY_AFTER = 'Retry-After';
46333
46365
  const HTTP_HEADER_IDEMPOTENCY_KEY = 'Idempotency-Key';
46366
+ const ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED = 'IDEMPOTENCY_FEATURE_NOT_ENABLED';
46367
+ const ERROR_CODE_IDEMPOTENCY_NOT_SUPPORTED = 'IDEMPOTENCY_NOT_SUPPORTED';
46334
46368
  const ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER = 'IDEMPOTENCY_KEY_USED_DIFFERENT_USER';
46335
46369
  const ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST = 'IDEMPOTENCY_CONCURRENT_REQUEST';
46370
+ const ERROR_CODE_IDEMPOTENCY_KEY_ALREADY_USED = 'IDEMPOTENCY_KEY_ALREADY_USED';
46371
+ const ERROR_CODE_IDEMPOTENCY_BACKEND_OPERATION_ERROR = 'IDEMPOTENCY_BACKEND_OPERATION_ERROR';
46336
46372
  /**
46337
46373
  * Get the retry after in milliseconds from the response headers, undefined if not specified.
46338
46374
  * The header could have two different format.
@@ -46362,7 +46398,9 @@
46362
46398
  const dispatchResourceRequest = async function (resourceRequest, _context) {
46363
46399
  const resourceRequestCopy = clone$1(resourceRequest);
46364
46400
  resourceRequestCopy.headers = resourceRequestCopy.headers || {};
46365
- resourceRequestCopy.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
46401
+ if (handler.hasIdempotencySupport()) {
46402
+ resourceRequestCopy.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
46403
+ }
46366
46404
  // enable return extra fields for record creation and record update http call
46367
46405
  if (resourceRequest.basePath === '/ui-api/records' &&
46368
46406
  (resourceRequest.method === 'post' || resourceRequest.method === 'patch')) {
@@ -47184,6 +47222,7 @@
47184
47222
  // the luvio store redirect table, during which a new draft might be enqueued
47185
47223
  // which would not see a necessary mapping.
47186
47224
  this.ephemeralRedirects = {};
47225
+ this.isIdempotencySupported = true;
47187
47226
  }
47188
47227
  enqueue(data) {
47189
47228
  return this.draftQueue.enqueue(this.handlerId, data);
@@ -47213,21 +47252,43 @@
47213
47252
  retryDelayInMs = getRetryAfterInMs(response.headers);
47214
47253
  shouldRetry = true;
47215
47254
  break;
47216
- case HttpStatusCode$1.ServerError:
47255
+ case HttpStatusCode$1.ServerError: {
47217
47256
  shouldRetry = true;
47257
+ if (this.handleIdempotencyServerError(response.body, updatedAction, false, ERROR_CODE_IDEMPOTENCY_BACKEND_OPERATION_ERROR)) {
47258
+ this.isIdempotencySupported = false;
47259
+ retryDelayInMs = 0;
47260
+ actionDataChanged = true;
47261
+ }
47218
47262
  break;
47263
+ }
47219
47264
  case 409 /* IdempotentWriteSpecificHttpStatusCode.Conflict */: {
47220
- const errorCode = response.body[0].errorCode;
47221
- if (errorCode === ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER) {
47222
- updatedAction.data.headers = updatedAction.data.headers || {};
47223
- updatedAction.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47265
+ if (this.isUiApiErrors(response.body)) {
47266
+ const errorCode = response.body[0].errorCode;
47267
+ if (this.handleIdempotencyServerError(response.body, updatedAction, true, ERROR_CODE_IDEMPOTENCY_KEY_USED_DIFFERENT_USER)) {
47268
+ retryDelayInMs = 0;
47269
+ actionDataChanged = true;
47270
+ }
47271
+ else if (errorCode === ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST) {
47272
+ retryDelayInMs = getRetryAfterInMs(response.headers);
47273
+ }
47274
+ shouldRetry = true;
47275
+ }
47276
+ break;
47277
+ }
47278
+ case HttpStatusCode$1.BadRequest: {
47279
+ if (this.handleIdempotencyServerError(response.body, updatedAction, false, ERROR_CODE_IDEMPOTENCY_FEATURE_NOT_ENABLED, ERROR_CODE_IDEMPOTENCY_NOT_SUPPORTED)) {
47224
47280
  retryDelayInMs = 0;
47225
47281
  actionDataChanged = true;
47282
+ shouldRetry = true;
47226
47283
  }
47227
- else if (errorCode === ERROR_CODE_IDEMPOTENCY_CONCURRENT_REQUEST) {
47228
- retryDelayInMs = getRetryAfterInMs(response.headers);
47284
+ break;
47285
+ }
47286
+ case 422 /* IdempotentWriteSpecificHttpStatusCode.UnProcessableEntity */: {
47287
+ if (this.handleIdempotencyServerError(response.body, updatedAction, true, ERROR_CODE_IDEMPOTENCY_KEY_ALREADY_USED)) {
47288
+ retryDelayInMs = 0;
47289
+ actionDataChanged = true;
47290
+ shouldRetry = true;
47229
47291
  }
47230
- shouldRetry = true;
47231
47292
  break;
47232
47293
  }
47233
47294
  }
@@ -47246,6 +47307,27 @@
47246
47307
  return ProcessActionResult.NETWORK_ERROR;
47247
47308
  }
47248
47309
  }
47310
+ // true if response is an idempotency server error. updates or deletes idempotency key if the reponse is idempotency related error. Idempotency related error is in format of UiApiError array.
47311
+ handleIdempotencyServerError(responseBody, action, updateIdempotencyKey, ...targetErrorCodes) {
47312
+ if (this.isUiApiErrors(responseBody)) {
47313
+ const errorCode = responseBody[0].errorCode;
47314
+ if (targetErrorCodes.includes(errorCode)) {
47315
+ action.data.headers = action.data.headers || {};
47316
+ if (updateIdempotencyKey) {
47317
+ action.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47318
+ }
47319
+ else {
47320
+ delete action.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY];
47321
+ }
47322
+ return true;
47323
+ }
47324
+ }
47325
+ return false;
47326
+ }
47327
+ // checks if the body is an array of UiApiError. Sometimes the body has `enhancedErrorType` field as an error indicator(one example is the field validation failure). In such case Action being processed updates to an Error Action.
47328
+ isUiApiErrors(body) {
47329
+ return body !== undefined && Array.isArray(body) && body.length > 0 && body[0].errorCode;
47330
+ }
47249
47331
  async buildPendingAction(request, queue) {
47250
47332
  const targetId = await this.getIdFromRequest(request);
47251
47333
  if (targetId === undefined) {
@@ -47459,6 +47541,10 @@
47459
47541
  ...targetData,
47460
47542
  body: this.mergeRequestBody(targetBody, sourceBody),
47461
47543
  };
47544
+ // Updates Idempotency key if target has one
47545
+ if (targetData.headers && targetData.headers[HTTP_HEADER_IDEMPOTENCY_KEY]) {
47546
+ merged.data.headers[HTTP_HEADER_IDEMPOTENCY_KEY] = uuidv4();
47547
+ }
47462
47548
  // overlay metadata
47463
47549
  merged.metadata = { ...targetMetadata, ...sourceMetadata };
47464
47550
  // put status back to pending to auto upload if queue is active and targed is at the head.
@@ -47495,6 +47581,9 @@
47495
47581
  getDraftIdsFromAction(action) {
47496
47582
  return [action.targetId];
47497
47583
  }
47584
+ hasIdempotencySupport() {
47585
+ return this.isIdempotencySupported;
47586
+ }
47498
47587
  async ingestResponses(responses, action) {
47499
47588
  const luvio = this.getLuvio();
47500
47589
  await luvio.handleSuccessResponse(() => {
@@ -51455,16 +51544,18 @@
51455
51544
  if (!isIdField) {
51456
51545
  let subSelectionNodes = [];
51457
51546
  let subFieldsHasId = false;
51458
- filterNode.value.fields.forEach((subFieldNode) => {
51459
- // Check if the filter field has the 'Id'
51460
- if (isFieldAnIdField(subFieldNode.name.value, objectInfos[objectInfoName])) {
51461
- subFieldsHasId = true;
51462
- updateIDInfo(subFieldNode, idState, draftFunctions);
51463
- }
51464
- // try injecting the fields within predicate no matter it has relation or not.
51465
- let subResults = injectFilter(subFieldNode, idState, curPath, isPolymorphicField, objectInfos, pathToObjectApiNamesMap, draftFunctions, existingFields ? existingFields[0] : undefined);
51466
- subSelectionNodes = subSelectionNodes.concat(subResults);
51467
- });
51547
+ if (isSpanning) {
51548
+ filterNode.value.fields.forEach((subFieldNode) => {
51549
+ // Check if the filter field has the 'Id'
51550
+ if (isFieldAnIdField(subFieldNode.name.value, objectInfos[objectInfoName])) {
51551
+ subFieldsHasId = true;
51552
+ updateIDInfo(subFieldNode, idState, draftFunctions);
51553
+ }
51554
+ // try injecting the fields within predicate no matter it has relation or not.
51555
+ let subResults = injectFilter(subFieldNode, idState, curPath, isPolymorphicField, objectInfos, pathToObjectApiNamesMap, draftFunctions, existingFields ? existingFields[0] : undefined);
51556
+ subSelectionNodes = subSelectionNodes.concat(subResults);
51557
+ });
51558
+ }
51468
51559
  if (!subFieldsHasId) {
51469
51560
  // Check if the query field has the 'Id'
51470
51561
  const existingIdsInQuery = existingFields &&
@@ -51493,6 +51584,7 @@
51493
51584
  }
51494
51585
  //Inject Conditions: 1. Same field does not exist 2. Same fields has different children. 3. Filter spanning field does not have Id. 4. InLineFragment does not have the '__typename' field
51495
51586
  if (!existingFields ||
51587
+ existingFields.length === 0 ||
51496
51588
  subSelectionNodes.length > 0 ||
51497
51589
  (isSpanning && !subFieldsHasId) ||
51498
51590
  (isInlineFragment && !isTypeNameExisting)) {
@@ -54195,7 +54287,7 @@
54195
54287
  // Fulfilled snapshot (this only happens in this code path if
54196
54288
  // the error is network error or 504), otherwise we spread over
54197
54289
  // the non-eval'ed snapshot (which will be either Fulfilled or Stale)
54198
- return nonEvaluatedSnapshot.state === 'Error'
54290
+ const resultSnapshot = nonEvaluatedSnapshot.state === 'Error'
54199
54291
  ? createLocalEvalSnapshot(gqlResult, seenRecords, recordId, rebuildWithLocalEval)
54200
54292
  : {
54201
54293
  ...nonEvaluatedSnapshot,
@@ -54204,6 +54296,22 @@
54204
54296
  seenRecords,
54205
54297
  rebuildWithLocalEval,
54206
54298
  };
54299
+ const { refresh, state } = resultSnapshot;
54300
+ if (state !== 'Error' && refresh) {
54301
+ // after refreshing a graphql snapshot, we want to force a rebuild regardless
54302
+ // of if the call failed or not or if the data changed or not because we want
54303
+ // to make sure any potential new drafts are picked up
54304
+ resultSnapshot.refresh = {
54305
+ ...refresh,
54306
+ resolve: (config) => {
54307
+ return refresh.resolve(config).finally(() => {
54308
+ luvio.storePublish(resultSnapshot.recordId, undefined);
54309
+ luvio.storeBroadcast();
54310
+ });
54311
+ },
54312
+ };
54313
+ }
54314
+ return resultSnapshot;
54207
54315
  };
54208
54316
  }
54209
54317
 
@@ -57947,7 +58055,7 @@
57947
58055
  id: '@salesforce/lds-network-adapter',
57948
58056
  instrument: instrument$1,
57949
58057
  });
57950
- // version: 1.229.0-dev4-07d38781a
58058
+ // version: 1.229.0-dev6-53f3d6911
57951
58059
 
57952
58060
  const { create: create$2, keys: keys$2 } = Object;
57953
58061
  const { stringify: stringify$1, parse: parse$1 } = JSON;
@@ -71271,7 +71379,7 @@
71271
71379
  }
71272
71380
  }
71273
71381
 
71274
- const { assign, create: create$1, freeze: freeze$1, keys: keys$1 } = Object;
71382
+ const { assign, create: create$1, freeze: freeze$1, isFrozen, keys: keys$1 } = Object;
71275
71383
  const { isArray: isArray$1 } = Array;
71276
71384
  const { concat, filter, includes, push, reduce } = Array.prototype;
71277
71385
 
@@ -72736,17 +72844,8 @@
72736
72844
  return sink;
72737
72845
  }
72738
72846
  function selectTypeLink(sel, fieldData, reader, key, sink, variables, fragments, version, selectFn, isCursorConnection) {
72739
- const resolvedLink = reader.read({
72740
- recordId: fieldData.__ref,
72741
- node: {
72742
- kind: 'Fragment',
72743
- private: [],
72744
- opaque: true,
72745
- version,
72746
- },
72747
- variables: {}
72748
- });
72749
- if (resolvedLink.data !== undefined) {
72847
+ const resolvedLink = resolveLink$1(reader, fieldData, version);
72848
+ if (resolvedLink && resolvedLink.data !== undefined) {
72750
72849
  if (isCursorConnection) {
72751
72850
  selectTypeLinkWithPagination(resolvedLink, sel, fieldData, reader, key, sink, variables, fragments, selectFn);
72752
72851
  }
@@ -73322,19 +73421,11 @@
73322
73421
  }
73323
73422
  case 'PolymorphicParentRelationship':
73324
73423
  case 'RecordRepresentation': {
73325
- const spanningFieldLink = reader.read({
73326
- recordId: fieldData.__ref,
73327
- node: {
73328
- kind: 'Fragment',
73329
- private: [],
73330
- opaque: true,
73331
- version: VERSION$f,
73332
- },
73333
- variables: {},
73334
- });
73335
- reader.markSeenId(fieldData.__ref);
73336
- const resolvedSpanningFieldValue = spanningFieldLink.data;
73424
+ const spanningFieldLink = resolveLink$1(reader, fieldData, VERSION$f);
73425
+ const resolvedSpanningFieldValue = spanningFieldLink && spanningFieldLink.data;
73426
+ const fieldDataRef = fieldData.__ref;
73337
73427
  if (resolvedSpanningFieldValue !== undefined) {
73428
+ reader.markSeenId(fieldDataRef);
73338
73429
  const { value: spanningFieldResult } = resolvedSpanningFieldValue;
73339
73430
  // Handle null values - graphql will return it at the field level, not return nested { value: null }
73340
73431
  if (spanningFieldResult === null || typeof spanningFieldResult !== 'object') {
@@ -73358,7 +73449,9 @@
73358
73449
  }
73359
73450
  }
73360
73451
  else {
73361
- reader.markMissingLink(fieldData.__ref);
73452
+ if (fieldDataRef !== undefined) {
73453
+ reader.markMissingLink(fieldDataRef);
73454
+ }
73362
73455
  reader.markMissing();
73363
73456
  }
73364
73457
  break;
@@ -76394,7 +76487,7 @@
76394
76487
  configuration: { ...configurationForGraphQLAdapters },
76395
76488
  instrument,
76396
76489
  });
76397
- // version: 1.229.0-dev4-4a7593877
76490
+ // version: 1.229.0-dev6-6005e174d
76398
76491
 
76399
76492
  // On core the unstable adapters are re-exported with different names,
76400
76493
 
@@ -78641,7 +78734,7 @@
78641
78734
  unstable_graphQL_imperative = createImperativeAdapter(luvio, createInstrumentedAdapter(ldsAdapter, adapterMetadata), adapterMetadata);
78642
78735
  graphQLImperative = ldsAdapter;
78643
78736
  });
78644
- // version: 1.229.0-dev4-4a7593877
78737
+ // version: 1.229.0-dev6-6005e174d
78645
78738
 
78646
78739
  var gqlApi = /*#__PURE__*/Object.freeze({
78647
78740
  __proto__: null,
@@ -79372,4 +79465,4 @@
79372
79465
  Object.defineProperty(exports, '__esModule', { value: true });
79373
79466
 
79374
79467
  }));
79375
- // version: 1.229.0-dev4-07d38781a
79468
+ // version: 1.229.0-dev6-53f3d6911
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-worker-api",
3
- "version": "1.229.0-dev4",
3
+ "version": "1.229.0-dev6",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "",
6
6
  "main": "dist/standalone/es/lds-worker-api.js",
@@ -35,15 +35,15 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@oat-sa/rollup-plugin-wildcard-external": "^1.0.0",
38
- "@salesforce/lds-adapters-graphql": "1.229.0-dev4",
39
- "@salesforce/lds-adapters-uiapi": "1.229.0-dev4",
40
- "@salesforce/lds-default-luvio": "1.229.0-dev4",
41
- "@salesforce/lds-drafts": "1.229.0-dev4",
42
- "@salesforce/lds-graphql-parser": "1.229.0-dev4",
43
- "@salesforce/lds-luvio-engine": "1.229.0-dev4",
44
- "@salesforce/lds-priming": "1.229.0-dev4",
45
- "@salesforce/lds-runtime-mobile": "1.229.0-dev4",
46
- "@salesforce/nimbus-plugin-lds": "1.229.0-dev4",
38
+ "@salesforce/lds-adapters-graphql": "1.229.0-dev6",
39
+ "@salesforce/lds-adapters-uiapi": "1.229.0-dev6",
40
+ "@salesforce/lds-default-luvio": "1.229.0-dev6",
41
+ "@salesforce/lds-drafts": "1.229.0-dev6",
42
+ "@salesforce/lds-graphql-parser": "1.229.0-dev6",
43
+ "@salesforce/lds-luvio-engine": "1.229.0-dev6",
44
+ "@salesforce/lds-priming": "1.229.0-dev6",
45
+ "@salesforce/lds-runtime-mobile": "1.229.0-dev6",
46
+ "@salesforce/nimbus-plugin-lds": "1.229.0-dev6",
47
47
  "ajv": "^8.11.0",
48
48
  "glob": "^7.1.5",
49
49
  "nimbus-types": "^2.0.0-alpha1",