@salesforce/lds-runtime-mobile 1.281.0 → 1.282.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/main.js +36 -26
  2. package/package.json +16 -16
  3. package/sfdc/main.js +36 -26
package/dist/main.js CHANGED
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import { withRegistration, register } from '@salesforce/lds-default-luvio';
19
19
  import { setupInstrumentation, instrumentAdapter as instrumentAdapter$1, instrumentLuvio, setLdsAdaptersUiapiInstrumentation, setLdsNetworkAdapterInstrumentation } from '@salesforce/lds-instrumentation';
20
- import { HttpStatusCode, StoreKeySet, serializeStructuredKey, StringKeyInMemoryStore, Reader, deepFreeze, emitAdapterEvent, createCustomAdapterEventEmitter, StoreKeyMap, isFileReference, Environment, Luvio, InMemoryStore } from '@luvio/engine';
20
+ import { HttpStatusCode, setBypassDeepFreeze, StoreKeySet, serializeStructuredKey, StringKeyInMemoryStore, Reader, deepFreeze, emitAdapterEvent, createCustomAdapterEventEmitter, StoreKeyMap, isFileReference, Environment, Luvio, InMemoryStore } from '@luvio/engine';
21
21
  import excludeStaleRecordsGate from '@salesforce/gate/lds.graphqlEvalExcludeStaleRecords';
22
22
  import { parseAndVisit, Kind, buildSchema, isObjectType, defaultFieldResolver, visit, execute, parse as parse$7, extendSchema, isScalarType } from '@luvio/graphql-parser';
23
23
  import { RECORD_ID_PREFIX, RECORD_FIELDS_KEY_JUNCTION, isStoreKeyRecordViewEntity, getRecordId18, RECORD_REPRESENTATION_NAME, extractRecordIdFromStoreKey, keyBuilderQuickActionExecutionRepresentation, ingestQuickActionExecutionRepresentation, keyBuilderContentDocumentCompositeRepresentation, getResponseCacheKeysContentDocumentCompositeRepresentation, keyBuilderFromTypeContentDocumentCompositeRepresentation, ingestContentDocumentCompositeRepresentation, keyBuilderRecord, RECORD_VIEW_ENTITY_ID_PREFIX, getTypeCacheKeysRecord, keyBuilderFromTypeRecordRepresentation, ingestRecord, RecordRepresentationRepresentationType, ObjectInfoRepresentationType, getRecordAdapterFactory, getObjectInfoAdapterFactory, getObjectInfosAdapterFactory, getObjectInfoDirectoryAdapterFactory, UiApiNamespace, RecordRepresentationType, RecordRepresentationTTL, RecordRepresentationVersion, getRecordsAdapterFactory } from '@salesforce/lds-adapters-uiapi';
@@ -1019,7 +1019,9 @@ function isUnfulfilledSnapshot$1(cachedSnapshotResult) {
1019
1019
  * @param durableStore A DurableStore implementation
1020
1020
  * @param instrumentation An instrumentation function implementation
1021
1021
  */
1022
- function makeDurable(environment, { durableStore, instrumentation, useRevivingStore, enableDurableMetadataRefresh = false, }) {
1022
+ function makeDurable(environment, { durableStore, instrumentation, useRevivingStore, enableDurableMetadataRefresh = false, disableDeepFreeze = false, }) {
1023
+ // runtimes can choose to disable deepFreeze, e.g. headless mobile runtime
1024
+ setBypassDeepFreeze(disableDeepFreeze);
1023
1025
  let stagingStore = null;
1024
1026
  const durableTTLStore = new DurableTTLStore(durableStore);
1025
1027
  const mergeKeysPromiseMap = new Map();
@@ -7967,6 +7969,9 @@ function sanitizePredicateIDValue(value, draftFunction) {
7967
7969
  if (isArray$2(value)) {
7968
7970
  return value.map((singleValue) => sanitizePredicateIDValue(singleValue, draftFunction));
7969
7971
  }
7972
+ else if (typeof value === 'string' && value === '') {
7973
+ return value;
7974
+ }
7970
7975
  else {
7971
7976
  const coercedId = getRecordId18(value);
7972
7977
  if (coercedId !== undefined) {
@@ -8686,19 +8691,7 @@ function isCapableRelationship(node) {
8686
8691
  });
8687
8692
  }
8688
8693
  }
8689
- else if (isInlineFragmentNode(node)) {
8690
- if (!node.selectionSet)
8691
- return false;
8692
- return node.selectionSet.selections.some((selection) => {
8693
- if (selection.kind !== Kind.FIELD && selection.kind !== Kind.INLINE_FRAGMENT)
8694
- return false;
8695
- // example: Account { Id }
8696
- if (selection.kind === Kind.FIELD && selection.name.value === 'Id')
8697
- return true;
8698
- return selection.selectionSet !== undefined;
8699
- });
8700
- }
8701
- return false;
8694
+ return isInlineFragmentNode(node);
8702
8695
  }
8703
8696
  /**
8704
8697
  * checks if the 'ArgumentNode' is a specific scope type
@@ -11325,7 +11318,8 @@ function injectParentRelationships(selections, parentNode, parentPath, ancestors
11325
11318
  * @param objectInfos
11326
11319
  * @returns
11327
11320
  */
11328
- function injectFieldsForDisplayValue({ selectionSet }, parentNode, objectInfos) {
11321
+ function injectFieldsForDisplayValue(topNode, parentNode, objectInfos) {
11322
+ const { selectionSet } = topNode;
11329
11323
  if (selectionSet === undefined)
11330
11324
  return [];
11331
11325
  let displayValueNameFields = [];
@@ -11338,6 +11332,10 @@ function injectFieldsForDisplayValue({ selectionSet }, parentNode, objectInfos)
11338
11332
  displayValue = node;
11339
11333
  break;
11340
11334
  }
11335
+ if (isInlineFragmentNode(node)) {
11336
+ const name = node.typeCondition !== undefined ? node.typeCondition.name : parentNode.name;
11337
+ displayValueNameFields = injectFieldsForDisplayValue(node, { ...parentNode, name }, objectInfos);
11338
+ }
11341
11339
  }
11342
11340
  if (displayValue !== undefined) {
11343
11341
  const apiName = parentNode.name.value;
@@ -11407,10 +11405,17 @@ function injectFields(selections, parentNode, parentPath, ancestors, objectInfos
11407
11405
  // example: TimeSheetId { value }
11408
11406
  relatedIdForChildRelationship.push(createFieldNode(injectedParentFieldName, FieldValueNodeSelectionSet));
11409
11407
  }
11408
+ displayValueNameFields.push(...injectFieldsForDisplayValue(parentNode, {
11409
+ ...parent,
11410
+ name: {
11411
+ ...parent.name,
11412
+ value: targetRelationship.childObjectApiName,
11413
+ },
11414
+ }, objectInfos));
11410
11415
  }
11411
11416
  }
11412
11417
  }
11413
- displayValueNameFields = injectFieldsForDisplayValue(parentNode, parent, objectInfos);
11418
+ displayValueNameFields.push(...injectFieldsForDisplayValue(parentNode, parent, objectInfos));
11414
11419
  }
11415
11420
  }
11416
11421
  return [
@@ -16109,9 +16114,9 @@ function instrumentAdapter(adapter, metadata) {
16109
16114
  }
16110
16115
  }
16111
16116
  return instrumentAdapter$1(instrumentedMobileAdapter, metadata, {
16112
- trackL1Hits: true,
16113
- trackL2Hits: true,
16114
- trackCacheMisses: true,
16117
+ trackL1Hits: false,
16118
+ trackL2Hits: false,
16119
+ trackCacheMisses: false,
16115
16120
  reportObserver: (report) => {
16116
16121
  for (const observer of reportObservers) {
16117
16122
  observer(report);
@@ -17000,13 +17005,13 @@ function mergeRecord(existingRecord, incomingRecord, objectInfo) {
17000
17005
  // since none of the changed fields are part of the incoming record
17001
17006
  if (missingFields.every((field) => {
17002
17007
  const referenceFieldName = findReferenceFieldForSpanningField(field, objectInfo);
17003
- if (referenceFieldName !== undefined) {
17004
- return (incomingRecord.fields[referenceFieldName].value ===
17005
- existingRecord.fields[referenceFieldName].value);
17006
- }
17007
- else {
17008
+ if (referenceFieldName === undefined) {
17008
17009
  return false;
17009
17010
  }
17011
+ return (existingRecord.fields[referenceFieldName] &&
17012
+ incomingRecord.fields[referenceFieldName] &&
17013
+ incomingRecord.fields[referenceFieldName].value ===
17014
+ existingRecord.fields[referenceFieldName].value);
17010
17015
  })) {
17011
17016
  return {
17012
17017
  ok: true,
@@ -17885,6 +17890,9 @@ class LdsPrimingRecordRefresher {
17885
17890
  optionalFields: value.fields.map((f) => `${_apiName}.${f}`),
17886
17891
  },
17887
17892
  ],
17893
+ }, {
17894
+ cachePolicy: { type: 'no-cache' },
17895
+ priority: 'background',
17888
17896
  }));
17889
17897
  });
17890
17898
  const promiseResults = await allSettled(promises);
@@ -17989,6 +17997,8 @@ function getRuntime() {
17989
17997
  const durableEnv = makeDurable(gqlEnv, {
17990
17998
  durableStore: recordDenormingStore,
17991
17999
  enableDurableMetadataRefresh: ldsMetadataRefreshEnabled.isOpen({ fallback: false }),
18000
+ // disable luvio deep freeze in headless environments
18001
+ disableDeepFreeze: typeof window === 'undefined',
17992
18002
  });
17993
18003
  getIngestRecords = durableEnv.getIngestStagingStoreRecords;
17994
18004
  getIngestMetadata = durableEnv.getIngestStagingStoreMetadata;
@@ -18094,4 +18104,4 @@ register({
18094
18104
  });
18095
18105
 
18096
18106
  export { O11Y_NAMESPACE_LDS_MOBILE, getRuntime, registerReportObserver, reportGraphqlQueryParseError };
18097
- // version: 1.281.0-9a56a08f0
18107
+ // version: 1.282.0-f3e0ca0c7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-mobile",
3
- "version": "1.281.0",
3
+ "version": "1.282.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS runtime for mobile/hybrid environments.",
6
6
  "main": "dist/main.js",
@@ -32,25 +32,25 @@
32
32
  "release:corejar": "yarn build && ../core-build/scripts/core.js --name=lds-runtime-mobile"
33
33
  },
34
34
  "dependencies": {
35
- "@salesforce/lds-adapters-uiapi": "^1.281.0",
36
- "@salesforce/lds-bindings": "^1.281.0",
37
- "@salesforce/lds-instrumentation": "^1.281.0",
38
- "@salesforce/lds-priming": "^1.281.0",
35
+ "@salesforce/lds-adapters-uiapi": "^1.282.0",
36
+ "@salesforce/lds-bindings": "^1.282.0",
37
+ "@salesforce/lds-instrumentation": "^1.282.0",
38
+ "@salesforce/lds-priming": "^1.282.0",
39
39
  "@salesforce/user": "0.0.21",
40
40
  "o11y": "244.0.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@salesforce/lds-adapters-graphql": "^1.281.0",
44
- "@salesforce/lds-drafts": "^1.281.0",
45
- "@salesforce/lds-drafts-adapters-uiapi": "^1.281.0",
46
- "@salesforce/lds-graphql-eval": "^1.281.0",
47
- "@salesforce/lds-network-adapter": "^1.281.0",
48
- "@salesforce/lds-network-nimbus": "^1.281.0",
49
- "@salesforce/lds-store-binary": "^1.281.0",
50
- "@salesforce/lds-store-nimbus": "^1.281.0",
51
- "@salesforce/lds-store-sql": "^1.281.0",
52
- "@salesforce/lds-utils-adapters": "^1.281.0",
53
- "@salesforce/nimbus-plugin-lds": "^1.281.0",
43
+ "@salesforce/lds-adapters-graphql": "^1.282.0",
44
+ "@salesforce/lds-drafts": "^1.282.0",
45
+ "@salesforce/lds-drafts-adapters-uiapi": "^1.282.0",
46
+ "@salesforce/lds-graphql-eval": "^1.282.0",
47
+ "@salesforce/lds-network-adapter": "^1.282.0",
48
+ "@salesforce/lds-network-nimbus": "^1.282.0",
49
+ "@salesforce/lds-store-binary": "^1.282.0",
50
+ "@salesforce/lds-store-nimbus": "^1.282.0",
51
+ "@salesforce/lds-store-sql": "^1.282.0",
52
+ "@salesforce/lds-utils-adapters": "^1.282.0",
53
+ "@salesforce/nimbus-plugin-lds": "^1.282.0",
54
54
  "babel-plugin-dynamic-import-node": "^2.3.3",
55
55
  "wait-for-expect": "^3.0.2"
56
56
  },
package/sfdc/main.js CHANGED
@@ -17,7 +17,7 @@
17
17
  */
18
18
  import { withRegistration, register } from 'native/ldsEngineMobile';
19
19
  import { setupInstrumentation, instrumentAdapter as instrumentAdapter$1, instrumentLuvio, setLdsAdaptersUiapiInstrumentation, setLdsNetworkAdapterInstrumentation } from 'force/ldsInstrumentation';
20
- import { HttpStatusCode, StoreKeySet, serializeStructuredKey, StringKeyInMemoryStore, Reader, deepFreeze, emitAdapterEvent, createCustomAdapterEventEmitter, StoreKeyMap, isFileReference, Environment, Luvio, InMemoryStore } from 'force/luvioEngine';
20
+ import { HttpStatusCode, setBypassDeepFreeze, StoreKeySet, serializeStructuredKey, StringKeyInMemoryStore, Reader, deepFreeze, emitAdapterEvent, createCustomAdapterEventEmitter, StoreKeyMap, isFileReference, Environment, Luvio, InMemoryStore } from 'force/luvioEngine';
21
21
  import excludeStaleRecordsGate from '@salesforce/gate/lds.graphqlEvalExcludeStaleRecords';
22
22
  import { parseAndVisit, Kind, buildSchema, isObjectType, defaultFieldResolver, visit, execute, parse as parse$7, extendSchema, isScalarType } from 'force/ldsGraphqlParser';
23
23
  import { RECORD_ID_PREFIX, RECORD_FIELDS_KEY_JUNCTION, isStoreKeyRecordViewEntity, getRecordId18, RECORD_REPRESENTATION_NAME, extractRecordIdFromStoreKey, keyBuilderQuickActionExecutionRepresentation, ingestQuickActionExecutionRepresentation, keyBuilderContentDocumentCompositeRepresentation, getResponseCacheKeysContentDocumentCompositeRepresentation, keyBuilderFromTypeContentDocumentCompositeRepresentation, ingestContentDocumentCompositeRepresentation, keyBuilderRecord, RECORD_VIEW_ENTITY_ID_PREFIX, getTypeCacheKeysRecord, keyBuilderFromTypeRecordRepresentation, ingestRecord, RecordRepresentationRepresentationType, ObjectInfoRepresentationType, getRecordAdapterFactory, getObjectInfoAdapterFactory, getObjectInfosAdapterFactory, getObjectInfoDirectoryAdapterFactory, UiApiNamespace, RecordRepresentationType, RecordRepresentationTTL, RecordRepresentationVersion, getRecordsAdapterFactory } from 'force/ldsAdaptersUiapi';
@@ -1019,7 +1019,9 @@ function isUnfulfilledSnapshot$1(cachedSnapshotResult) {
1019
1019
  * @param durableStore A DurableStore implementation
1020
1020
  * @param instrumentation An instrumentation function implementation
1021
1021
  */
1022
- function makeDurable(environment, { durableStore, instrumentation, useRevivingStore, enableDurableMetadataRefresh = false, }) {
1022
+ function makeDurable(environment, { durableStore, instrumentation, useRevivingStore, enableDurableMetadataRefresh = false, disableDeepFreeze = false, }) {
1023
+ // runtimes can choose to disable deepFreeze, e.g. headless mobile runtime
1024
+ setBypassDeepFreeze(disableDeepFreeze);
1023
1025
  let stagingStore = null;
1024
1026
  const durableTTLStore = new DurableTTLStore(durableStore);
1025
1027
  const mergeKeysPromiseMap = new Map();
@@ -7967,6 +7969,9 @@ function sanitizePredicateIDValue(value, draftFunction) {
7967
7969
  if (isArray$2(value)) {
7968
7970
  return value.map((singleValue) => sanitizePredicateIDValue(singleValue, draftFunction));
7969
7971
  }
7972
+ else if (typeof value === 'string' && value === '') {
7973
+ return value;
7974
+ }
7970
7975
  else {
7971
7976
  const coercedId = getRecordId18(value);
7972
7977
  if (coercedId !== undefined) {
@@ -8686,19 +8691,7 @@ function isCapableRelationship(node) {
8686
8691
  });
8687
8692
  }
8688
8693
  }
8689
- else if (isInlineFragmentNode(node)) {
8690
- if (!node.selectionSet)
8691
- return false;
8692
- return node.selectionSet.selections.some((selection) => {
8693
- if (selection.kind !== Kind.FIELD && selection.kind !== Kind.INLINE_FRAGMENT)
8694
- return false;
8695
- // example: Account { Id }
8696
- if (selection.kind === Kind.FIELD && selection.name.value === 'Id')
8697
- return true;
8698
- return selection.selectionSet !== undefined;
8699
- });
8700
- }
8701
- return false;
8694
+ return isInlineFragmentNode(node);
8702
8695
  }
8703
8696
  /**
8704
8697
  * checks if the 'ArgumentNode' is a specific scope type
@@ -11325,7 +11318,8 @@ function injectParentRelationships(selections, parentNode, parentPath, ancestors
11325
11318
  * @param objectInfos
11326
11319
  * @returns
11327
11320
  */
11328
- function injectFieldsForDisplayValue({ selectionSet }, parentNode, objectInfos) {
11321
+ function injectFieldsForDisplayValue(topNode, parentNode, objectInfos) {
11322
+ const { selectionSet } = topNode;
11329
11323
  if (selectionSet === undefined)
11330
11324
  return [];
11331
11325
  let displayValueNameFields = [];
@@ -11338,6 +11332,10 @@ function injectFieldsForDisplayValue({ selectionSet }, parentNode, objectInfos)
11338
11332
  displayValue = node;
11339
11333
  break;
11340
11334
  }
11335
+ if (isInlineFragmentNode(node)) {
11336
+ const name = node.typeCondition !== undefined ? node.typeCondition.name : parentNode.name;
11337
+ displayValueNameFields = injectFieldsForDisplayValue(node, { ...parentNode, name }, objectInfos);
11338
+ }
11341
11339
  }
11342
11340
  if (displayValue !== undefined) {
11343
11341
  const apiName = parentNode.name.value;
@@ -11407,10 +11405,17 @@ function injectFields(selections, parentNode, parentPath, ancestors, objectInfos
11407
11405
  // example: TimeSheetId { value }
11408
11406
  relatedIdForChildRelationship.push(createFieldNode(injectedParentFieldName, FieldValueNodeSelectionSet));
11409
11407
  }
11408
+ displayValueNameFields.push(...injectFieldsForDisplayValue(parentNode, {
11409
+ ...parent,
11410
+ name: {
11411
+ ...parent.name,
11412
+ value: targetRelationship.childObjectApiName,
11413
+ },
11414
+ }, objectInfos));
11410
11415
  }
11411
11416
  }
11412
11417
  }
11413
- displayValueNameFields = injectFieldsForDisplayValue(parentNode, parent, objectInfos);
11418
+ displayValueNameFields.push(...injectFieldsForDisplayValue(parentNode, parent, objectInfos));
11414
11419
  }
11415
11420
  }
11416
11421
  return [
@@ -16109,9 +16114,9 @@ function instrumentAdapter(adapter, metadata) {
16109
16114
  }
16110
16115
  }
16111
16116
  return instrumentAdapter$1(instrumentedMobileAdapter, metadata, {
16112
- trackL1Hits: true,
16113
- trackL2Hits: true,
16114
- trackCacheMisses: true,
16117
+ trackL1Hits: false,
16118
+ trackL2Hits: false,
16119
+ trackCacheMisses: false,
16115
16120
  reportObserver: (report) => {
16116
16121
  for (const observer of reportObservers) {
16117
16122
  observer(report);
@@ -17000,13 +17005,13 @@ function mergeRecord(existingRecord, incomingRecord, objectInfo) {
17000
17005
  // since none of the changed fields are part of the incoming record
17001
17006
  if (missingFields.every((field) => {
17002
17007
  const referenceFieldName = findReferenceFieldForSpanningField(field, objectInfo);
17003
- if (referenceFieldName !== undefined) {
17004
- return (incomingRecord.fields[referenceFieldName].value ===
17005
- existingRecord.fields[referenceFieldName].value);
17006
- }
17007
- else {
17008
+ if (referenceFieldName === undefined) {
17008
17009
  return false;
17009
17010
  }
17011
+ return (existingRecord.fields[referenceFieldName] &&
17012
+ incomingRecord.fields[referenceFieldName] &&
17013
+ incomingRecord.fields[referenceFieldName].value ===
17014
+ existingRecord.fields[referenceFieldName].value);
17010
17015
  })) {
17011
17016
  return {
17012
17017
  ok: true,
@@ -17885,6 +17890,9 @@ class LdsPrimingRecordRefresher {
17885
17890
  optionalFields: value.fields.map((f) => `${_apiName}.${f}`),
17886
17891
  },
17887
17892
  ],
17893
+ }, {
17894
+ cachePolicy: { type: 'no-cache' },
17895
+ priority: 'background',
17888
17896
  }));
17889
17897
  });
17890
17898
  const promiseResults = await allSettled(promises);
@@ -17989,6 +17997,8 @@ function getRuntime() {
17989
17997
  const durableEnv = makeDurable(gqlEnv, {
17990
17998
  durableStore: recordDenormingStore,
17991
17999
  enableDurableMetadataRefresh: ldsMetadataRefreshEnabled.isOpen({ fallback: false }),
18000
+ // disable luvio deep freeze in headless environments
18001
+ disableDeepFreeze: typeof window === 'undefined',
17992
18002
  });
17993
18003
  getIngestRecords = durableEnv.getIngestStagingStoreRecords;
17994
18004
  getIngestMetadata = durableEnv.getIngestStagingStoreMetadata;
@@ -18094,4 +18104,4 @@ register({
18094
18104
  });
18095
18105
 
18096
18106
  export { O11Y_NAMESPACE_LDS_MOBILE, getRuntime, registerReportObserver, reportGraphqlQueryParseError };
18097
- // version: 1.281.0-9a56a08f0
18107
+ // version: 1.282.0-f3e0ca0c7