@salesforce/lds-runtime-mobile 1.354.0-dev2 → 1.354.0-dev20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -19,11 +19,11 @@ import { withRegistration, register } from '@salesforce/lds-default-luvio';
19
19
  import { setupInstrumentation, instrumentAdapter as instrumentAdapter$1, instrumentLuvio, setLdsAdaptersUiapiInstrumentation, setLdsNetworkAdapterInstrumentation } from '@salesforce/lds-instrumentation';
20
20
  import { HttpStatusCode, setBypassDeepFreeze, StoreKeySet, serializeStructuredKey, StringKeyInMemoryStore, Reader, deepFreeze, emitAdapterEvent, ingestShape, coerceConfig as coerceConfig$1, typeCheckConfig as typeCheckConfig$h, createResourceParams as createResourceParams$h, StoreKeyMap, buildNetworkSnapshotCachePolicy as buildNetworkSnapshotCachePolicy$f, resolveLink, createCustomAdapterEventEmitter, isFileReference, Environment, Luvio, InMemoryStore } from '@luvio/engine';
21
21
  import { isSupportedEntity, configuration, getObjectInfoAdapterFactory, RECORD_ID_PREFIX, RECORD_FIELDS_KEY_JUNCTION, isStoreKeyRecordViewEntity, extractRecordIdFromStoreKey, buildRecordRepKeyFromId, keyBuilderRecord, RecordRepresentationTTL, keyBuilderQuickActionExecutionRepresentation, ingestQuickActionExecutionRepresentation, getRecordId18 as getRecordId18$1, getRecordsAdapterFactory as getRecordsAdapterFactory$1, RecordRepresentationRepresentationType, ObjectInfoRepresentationType, getObjectInfosAdapterFactory, getObjectInfoDirectoryAdapterFactory, UiApiNamespace, RecordRepresentationType, RecordRepresentationVersion } from '@salesforce/lds-adapters-uiapi';
22
+ import { getInstrumentation, idleDetector } from 'o11y/client';
22
23
  import { Kind as Kind$1, visit as visit$1, isObjectType, defaultFieldResolver, buildSchema, parse as parse$5, extendSchema, isScalarType, execute, print } from '@luvio/graphql-parser';
23
24
  import FIRST_DAY_OF_WEEK from '@salesforce/i18n/firstDayOfWeek';
24
25
  import graphqQueryFieldLimit from '@salesforce/gate/lmr.graphqQueryFieldLimit';
25
26
  import caseSensitiveUserId from '@salesforce/user/Id';
26
- import { idleDetector, getInstrumentation } from 'o11y/client';
27
27
  import { instrument as instrument$1 } from '@salesforce/lds-bindings';
28
28
  import ldsAdapterO11yLoggingGate from '@salesforce/gate/lmr.ldsAdapterO11yLogging';
29
29
  import LOCALE from '@salesforce/i18n/locale';
@@ -53,7 +53,7 @@ const { entries: entries$3, keys: keys$5 } = Object;
53
53
 
54
54
  const UI_API_BASE_URI = '/services/data/v64.0/ui-api';
55
55
 
56
- let instrumentation$2 = {
56
+ let instrumentation$3 = {
57
57
  aggregateUiChunkCount: (_cb) => { },
58
58
  aggregateUiConnectError: () => { },
59
59
  duplicateRequest: (_cb) => { },
@@ -65,7 +65,7 @@ let instrumentation$2 = {
65
65
  networkRateLimitExceeded: () => { },
66
66
  };
67
67
  function instrument(newInstrumentation) {
68
- instrumentation$2 = Object.assign(instrumentation$2, newInstrumentation);
68
+ instrumentation$3 = Object.assign(instrumentation$3, newInstrumentation);
69
69
  }
70
70
 
71
71
  const LDS_RECORDS_AGGREGATE_UI = 'LDS_Records_AggregateUi';
@@ -135,7 +135,7 @@ function mergeRecordFields$2(first, second) {
135
135
  * would otherwise cause a query length exception.
136
136
  */
137
137
  function dispatchSplitRecordAggregateUiAction(recordId, networkAdapter, resourceRequest, resourceRequestContext) {
138
- instrumentation$2.getRecordAggregateInvoke();
138
+ instrumentation$3.getRecordAggregateInvoke();
139
139
  return networkAdapter(resourceRequest, resourceRequestContext).then((resp) => {
140
140
  const { body } = resp;
141
141
  // This response body could be an executeAggregateUi, which we don't natively support.
@@ -151,7 +151,7 @@ function dispatchSplitRecordAggregateUiAction(recordId, networkAdapter, resource
151
151
  }
152
152
  const merged = body.compositeResponse.reduce((seed, response) => {
153
153
  if (response.httpStatusCode !== HttpStatusCode.Ok) {
154
- instrumentation$2.getRecordAggregateReject(() => recordId);
154
+ instrumentation$3.getRecordAggregateReject(() => recordId);
155
155
  throw createErrorResponse(HttpStatusCode.ServerError, {
156
156
  error: response.message,
157
157
  });
@@ -161,7 +161,7 @@ function dispatchSplitRecordAggregateUiAction(recordId, networkAdapter, resource
161
161
  }
162
162
  return mergeRecordFields$2(seed, response.body);
163
163
  }, null);
164
- instrumentation$2.getRecordAggregateResolve(() => {
164
+ instrumentation$3.getRecordAggregateResolve(() => {
165
165
  return {
166
166
  recordId,
167
167
  apiName: merged.apiName,
@@ -169,7 +169,7 @@ function dispatchSplitRecordAggregateUiAction(recordId, networkAdapter, resource
169
169
  });
170
170
  return createOkResponse$1(merged);
171
171
  }, (err) => {
172
- instrumentation$2.getRecordAggregateReject(() => recordId);
172
+ instrumentation$3.getRecordAggregateReject(() => recordId);
173
173
  // rethrow error
174
174
  throw err;
175
175
  });
@@ -247,7 +247,7 @@ function buildAndDispatchGetRecordAggregateUi(recordId, req, params) {
247
247
  const { networkAdapter, resourceRequest, resourceRequestContext } = req;
248
248
  const compositeRequest = buildGetRecordByFieldsCompositeRequest(resourceRequest, params);
249
249
  // W-12245125: Emit chunk size metrics
250
- instrumentation$2.aggregateUiChunkCount(() => compositeRequest.length);
250
+ instrumentation$3.aggregateUiChunkCount(() => compositeRequest.length);
251
251
  const aggregateUiParams = {
252
252
  compositeRequest,
253
253
  };
@@ -491,7 +491,7 @@ function platformNetworkAdapter(baseNetworkAdapter) {
491
491
  return (resourceRequest, resourceRequestContext) => {
492
492
  if (!tokenBucket.take(1)) {
493
493
  // We are hitting rate limiting, add some metrics
494
- instrumentation$2.networkRateLimitExceeded();
494
+ instrumentation$3.networkRateLimitExceeded();
495
495
  }
496
496
  const salesforceRequest = {
497
497
  networkAdapter: baseNetworkAdapter,
@@ -23299,7 +23299,7 @@ function calculateRequestedFieldsForType(typename, selectionSet, namedFragmentsM
23299
23299
  return acc;
23300
23300
  }, new Map());
23301
23301
  }
23302
- function mergeSelectionSets(set1, set2) {
23302
+ function mergeSelectionSets(set1 = { kind: 'SelectionSet', selections: [] }, set2) {
23303
23303
  if (!set2) {
23304
23304
  return set1;
23305
23305
  }
@@ -42716,6 +42716,211 @@ class UiApiDraftRecordService {
42716
42716
  }
42717
42717
  }
42718
42718
 
42719
+ function attachObserversToAdapterRequestContext(observers, adapterRequestContext) {
42720
+ if (adapterRequestContext === undefined) {
42721
+ return { eventObservers: observers };
42722
+ }
42723
+ if (adapterRequestContext.eventObservers === undefined) {
42724
+ return { ...adapterRequestContext, eventObservers: observers };
42725
+ }
42726
+ return {
42727
+ ...adapterRequestContext,
42728
+ eventObservers: adapterRequestContext.eventObservers.concat(observers),
42729
+ };
42730
+ }
42731
+ /**
42732
+ * Use this method to sanitize the unknown error object when
42733
+ * we are unsure of the type of the error thrown
42734
+ *
42735
+ * @param err Unknown object to sanitize
42736
+ * @returns an instance of error
42737
+ */
42738
+ function normalizeError(err) {
42739
+ if (err instanceof Error) {
42740
+ return err;
42741
+ }
42742
+ else if (typeof err === 'string') {
42743
+ return new Error(err);
42744
+ }
42745
+ return new Error(stringify$2(err));
42746
+ }
42747
+
42748
+ const O11Y_NAMESPACE_LDS_MOBILE = 'lds-mobile';
42749
+ // metrics
42750
+ /** GraphQL */
42751
+ const GRAPHQL_EVAL_ERROR = 'gql-eval-error';
42752
+ const GRAPHQL_EVAL_DB_READ_DURATION = 'gql-eval-db-read-duration';
42753
+ const GRAPHQL_EVAL_ROOT_QUERY_COUNT = 'gql-eval-root-query-count';
42754
+ const GRAPHQL_EVAL_TOTAL_QUERY_COUNT = 'gql-eval-total-query-count';
42755
+ const GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT = 'gql-eval-max-child-count';
42756
+ const GRAPHQL_EVAL_QUERY_RECORD_COUNT = 'gql-eval-query-record-count';
42757
+ const GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED = 'gql-snapshot-refresh-undefined';
42758
+ /** Draft Queue */
42759
+ const DRAFT_QUEUE_STATE_STARTED = 'draft-queue-state-started';
42760
+ const DRAFT_QUEUE_STATE_ERROR = 'draft-queue-state-error';
42761
+ const DRAFT_QUEUE_STATE_WAITING = 'draft-queue-state-waiting';
42762
+ const DRAFT_QUEUE_STATE_STOPPED = 'draft-queue-state-stopped';
42763
+ const DRAFT_QUEUE_ACTION_ADDED = 'draft-queue-action-added';
42764
+ const DRAFT_QUEUE_ACTION_UPLOADING = 'draft-queue-action-uploading';
42765
+ const DRAFT_QUEUE_ACTION_COMPLETED = 'draft-queue-action-completed';
42766
+ const DRAFT_QUEUE_ACTION_DELETED = 'draft-queue-action-deleted';
42767
+ const DRAFT_QUEUE_ACTION_UPDATED = 'draft-queue-action-updated';
42768
+ const DRAFT_QUEUE_ACTION_FAILED = 'draft-queue-action-failed';
42769
+ const DRAFT_QUEUE_TOTAL_MERGE_ACTIONS_CALLS = 'draft-queue-total-mergeActions-calls';
42770
+ /** Content Document */
42771
+ const CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS = 'content-document-version-total-synthesize-calls';
42772
+ const CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR = 'create-content-document-version-draft-synthesize-error';
42773
+ /** Priming */
42774
+ const PRIMING_TOTAL_SESSION_COUNT = 'priming-total-session-count';
42775
+ const PRIMING_TOTAL_ERROR_COUNT = 'priming-total-error-count';
42776
+ const PRIMING_TOTAL_PRIMED_COUNT = 'priming-total-primed-count';
42777
+ const PRIMING_TOTAL_CONFLICT_COUNT = 'priming-total-conflict-count';
42778
+ // logs
42779
+ const GRAPHQL_QUERY_PARSE_ERROR = 'gql-query-parse-error';
42780
+ const GRAPHQL_SQL_EVAL_PRECONDITION_ERROR = 'gql-sql-pre-eval-error';
42781
+ const GRAPHQL_CREATE_SNAPSHOT_ERROR = 'gql-create-snapshot-error';
42782
+ const DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR = 'draft-aware-create-content-document-and-version-error';
42783
+ const ldsMobileInstrumentation = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
42784
+ const nimbusLogger = typeof __nimbus !== 'undefined' &&
42785
+ __nimbus.plugins !== undefined &&
42786
+ __nimbus.plugins.JSLoggerPlugin !== undefined
42787
+ ? __nimbus.plugins.JSLoggerPlugin
42788
+ : undefined;
42789
+ function reportGraphqlQueryParseError(err) {
42790
+ const error = normalizeError(err);
42791
+ const errorCode = GRAPHQL_QUERY_PARSE_ERROR;
42792
+ // Metric
42793
+ reportGraphqlAdapterError(errorCode);
42794
+ // Log
42795
+ ldsMobileInstrumentation.error(error, errorCode);
42796
+ }
42797
+ function reportGraphqlSqlEvalPreconditionError(err) {
42798
+ const error = normalizeError(err);
42799
+ const errorCode = GRAPHQL_SQL_EVAL_PRECONDITION_ERROR;
42800
+ // Metric
42801
+ reportGraphqlAdapterError(errorCode);
42802
+ // Log
42803
+ ldsMobileInstrumentation.error(error, errorCode);
42804
+ }
42805
+ function reportGraphqlCreateSnapshotError(err) {
42806
+ const error = normalizeError(err);
42807
+ const errorCode = GRAPHQL_CREATE_SNAPSHOT_ERROR;
42808
+ // Metric
42809
+ reportGraphqlAdapterError(errorCode);
42810
+ // Log
42811
+ ldsMobileInstrumentation.error(error, errorCode);
42812
+ }
42813
+ function reportGraphQlEvalDbReadDuration(duration) {
42814
+ ldsMobileInstrumentation.trackValue(GRAPHQL_EVAL_DB_READ_DURATION, duration);
42815
+ }
42816
+ function reportGraphqlAdapterError(errorCode) {
42817
+ // Increment overall count with errorCode as tag
42818
+ ldsMobileInstrumentation.incrementCounter(GRAPHQL_EVAL_ERROR, 1, true, { errorCode });
42819
+ }
42820
+ function reportGraphqlQueryInstrumentation(data) {
42821
+ const queryBuckets = [1, 2, 3, 4, 5, 10, 20, 50, 100];
42822
+ const recordBuckets = [
42823
+ 1, 5, 10, 20, 50, 100, 1000, 2000, 5000, 10000, 50000, 100000, 1000000,
42824
+ ];
42825
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_ROOT_QUERY_COUNT, data.rootQueryCount, queryBuckets);
42826
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_TOTAL_QUERY_COUNT, data.totalQueryCount, queryBuckets);
42827
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT, data.maxChildRelationships, queryBuckets);
42828
+ ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_QUERY_RECORD_COUNT, data.requestedRecordCount, recordBuckets);
42829
+ }
42830
+ function incrementGraphQLRefreshUndfined() {
42831
+ ldsMobileInstrumentation.incrementCounter(GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED);
42832
+ }
42833
+ function reportDraftActionEvent(state, draftCount, message) {
42834
+ if (nimbusLogger) {
42835
+ nimbusLogger.logInfo(`Draft action event: ${state}, depth: ${draftCount}${message ? `, message: ${message}` : ''}`);
42836
+ }
42837
+ switch (state) {
42838
+ case 'added':
42839
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_ADDED);
42840
+ break;
42841
+ case 'uploading':
42842
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPLOADING);
42843
+ break;
42844
+ case 'completed':
42845
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_COMPLETED);
42846
+ break;
42847
+ case 'deleted':
42848
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_DELETED);
42849
+ break;
42850
+ case 'failed':
42851
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_FAILED, 1, true);
42852
+ break;
42853
+ case 'updated':
42854
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPDATED);
42855
+ break;
42856
+ }
42857
+ }
42858
+ function reportDraftQueueState(state, draftCount) {
42859
+ if (nimbusLogger) {
42860
+ nimbusLogger.logInfo(`Draft state changed: ${state}, depth: ${draftCount}`);
42861
+ }
42862
+ switch (state) {
42863
+ case 'started':
42864
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STARTED);
42865
+ break;
42866
+ case 'error':
42867
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_ERROR, 1, true);
42868
+ break;
42869
+ case 'waiting':
42870
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_WAITING);
42871
+ break;
42872
+ case 'stopped':
42873
+ ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STOPPED);
42874
+ break;
42875
+ }
42876
+ }
42877
+ function reportDraftAwareContentDocumentVersionSynthesizeError(err) {
42878
+ let error;
42879
+ if (err.body !== undefined) {
42880
+ error = err.body;
42881
+ }
42882
+ else {
42883
+ error = normalizeError(err);
42884
+ }
42885
+ const errorCode = DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR;
42886
+ const errorType = error.errorType;
42887
+ const tags = {
42888
+ errorCode,
42889
+ };
42890
+ if (errorType !== undefined) {
42891
+ tags.errorType = errorType;
42892
+ }
42893
+ // Metric
42894
+ ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR, 1, true, tags);
42895
+ // Log
42896
+ ldsMobileInstrumentation.error(error, errorCode);
42897
+ }
42898
+ function reportDraftAwareContentVersionSynthesizeCalls(mimeType) {
42899
+ ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS, 1, undefined, { mimeType });
42900
+ }
42901
+ /** Priming */
42902
+ function reportPrimingSessionCreated() {
42903
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_SESSION_COUNT, 1, undefined, {});
42904
+ }
42905
+ function reportPrimingError(errorType, recordCount) {
42906
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_ERROR_COUNT, recordCount, undefined, {
42907
+ errorType,
42908
+ });
42909
+ }
42910
+ function reportPrimingSuccess(recordCount) {
42911
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_PRIMED_COUNT, recordCount, undefined);
42912
+ }
42913
+ function reportPrimingConflict(resolutionType, recordCount) {
42914
+ ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_CONFLICT_COUNT, recordCount, undefined, {
42915
+ resolutionType,
42916
+ });
42917
+ }
42918
+ /** Network */
42919
+ function reportChunkCandidateUrlLength(urlLength) {
42920
+ const buckets = [8000, 10000, 12000, 14000, 16000];
42921
+ ldsMobileInstrumentation.bucketValue('chunk-candidate-url-length-histogram', urlLength, buckets);
42922
+ }
42923
+
42719
42924
  const QUICK_ACTION_HANDLER = 'QUICK_ACTION_HANDLER';
42720
42925
  class QuickActionExecutionRepresentationHandler extends AbstractResourceRequestActionHandler {
42721
42926
  constructor(getLuvio, draftRecordService, draftQueue, networkAdapter, isDraftId, sideEffectService, objectInfoService, getRecord) {
@@ -42726,6 +42931,7 @@ class QuickActionExecutionRepresentationHandler extends AbstractResourceRequestA
42726
42931
  this.objectInfoService = objectInfoService;
42727
42932
  this.getRecord = getRecord;
42728
42933
  this.handlerId = QUICK_ACTION_HANDLER;
42934
+ this.instrumentation = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
42729
42935
  draftRecordService.registerRecordHandler(this);
42730
42936
  }
42731
42937
  async draftActionToSideEffects(queueEntry) {
@@ -42757,10 +42963,26 @@ class QuickActionExecutionRepresentationHandler extends AbstractResourceRequestA
42757
42963
  luvio.storeIngest(key, ingestQuickActionExecutionRepresentation, response);
42758
42964
  }
42759
42965
  async handleActionCompleted(action, queueOperations) {
42966
+ /* performQuickAction will not return the new record itself, so before the action
42967
+ * is marked as completed, we need to fetch the actual record. This must be done before
42968
+ * the super method is called because the super method will revert the side effects that
42969
+ * were created for this action, and critically that means evicting the synthetic record
42970
+ * that was created to represent the draft of what would become the canonical record.
42971
+ * Since getRecord is a network call, it is better to have a small timeframe (on the order
42972
+ * of microseconds) where both the synthetic record and the canonical record are in the
42973
+ * store instead of the record missing from the store for the entire duration of the
42974
+ * network call.
42975
+ */
42976
+ try {
42977
+ await this.fetchRecordIntoStoreFromCompletedAction(action);
42978
+ }
42979
+ catch (error) {
42980
+ this.instrumentation.error(error, 'Error fetching the record created from performQuickAction adapter.');
42981
+ }
42760
42982
  await super.handleActionCompleted(action, queueOperations);
42761
- this.getLuvio();
42983
+ }
42984
+ async fetchRecordIntoStoreFromCompletedAction(action) {
42762
42985
  const canonicalId = action.response.body.id;
42763
- this.buildTagForTargetId(canonicalId);
42764
42986
  const prefix = canonicalId.substring(0, 3);
42765
42987
  if (prefix.length !== 3) {
42766
42988
  // if we can't get a prefix, don't do the rest
@@ -44335,7 +44557,75 @@ function filterToPredicates(where, recordType, alias, objectInfoMap, joins, draf
44335
44557
  // in 'Account' has the 'Owner' as the 'RelationshipName', the api name in 'referenceToInfos' is 'User'
44336
44558
  if (fieldInfo.referenceToInfos.length === 1) {
44337
44559
  const childRecordType = fieldInfo.referenceToInfos[0].apiName;
44338
- predicates.push(...filterToPredicates(where[field], childRecordType, childAlias, objectInfoMap, joins));
44560
+ let p = filterToPredicates(where[field], childRecordType, childAlias, objectInfoMap, joins);
44561
+ if (isSinglePredicate(p[0]) && p[0].value === null) {
44562
+ // @W-18311580 - this is a reference field with a null value. We need to ensure that we handle the case
44563
+ // where we are joining to a record that may not exist in our offline database, so we need to detect if
44564
+ // the value is really a null, or if it is a missing record in the offline database.
44565
+ //
44566
+ // This effecitvely adds the following predicates to a "where Contact.Account.Name IS NULL" query:
44567
+ //
44568
+ // AND (
44569
+ // (
44570
+ // json_extract("Contact__c_Account__r".data, '$.fields.Id.value') IS NOT NULL (a)
44571
+ // AND json_extract("Contact__c".data, '$.fields.AccountId.value') IS NOT NULL (b)
44572
+ // )
44573
+ // OR json_extract("Contact__c".data, '$.fields.AccountId.value') IS NULL (c)
44574
+ // )
44575
+ //
44576
+ // Where:
44577
+ // (a) AND (b) ensures we have an account record when it is supposed to exist,
44578
+ // OR (c) if AccountId is null, we know we are not referencing an account record.
44579
+ let notNullPredicate = {
44580
+ type: PredicateType.compound,
44581
+ operator: 'and',
44582
+ children: [
44583
+ {
44584
+ alias: alias,
44585
+ leftPath: leftPath,
44586
+ operator: 'IS NOT',
44587
+ value: null,
44588
+ dataType: 'String',
44589
+ type: PredicateType.single,
44590
+ isCaseSensitive: true,
44591
+ },
44592
+ {
44593
+ alias: childAlias,
44594
+ leftPath: `$.fields.Id.value`,
44595
+ operator: 'IS NOT',
44596
+ value: null,
44597
+ dataType: 'String',
44598
+ type: PredicateType.single,
44599
+ isCaseSensitive: true,
44600
+ },
44601
+ ],
44602
+ };
44603
+ let nullPredicate = {
44604
+ type: PredicateType.compound,
44605
+ operator: 'or',
44606
+ children: [
44607
+ notNullPredicate,
44608
+ {
44609
+ alias: alias,
44610
+ leftPath: leftPath,
44611
+ operator: 'IS',
44612
+ value: null,
44613
+ dataType: 'String',
44614
+ type: PredicateType.single,
44615
+ isCaseSensitive: true,
44616
+ },
44617
+ ],
44618
+ };
44619
+ let compoundPredicate = {
44620
+ type: PredicateType.compound,
44621
+ operator: 'and',
44622
+ children: [...p, nullPredicate],
44623
+ };
44624
+ predicates.push(compoundPredicate);
44625
+ }
44626
+ else {
44627
+ predicates.push(...p);
44628
+ }
44339
44629
  }
44340
44630
  else {
44341
44631
  // @W-12618378 polymorphic query sometimes does not work as expected on server. The GQL on certain entities could fail.
@@ -47248,7 +47538,7 @@ function isRecordType(type) {
47248
47538
  return Boolean(interfaces.find((iface) => iface.name === 'Record'));
47249
47539
  }
47250
47540
 
47251
- var uiapiSchemaString = "scalar String\nscalar DateTime\nscalar Currency\nscalar ID\nscalar Boolean\nscalar Longitude\nscalar Float\nscalar MultiPicklist\nscalar Base64\nscalar Url\nscalar PhoneNumber\nscalar Email\nscalar TextArea\nscalar Latitude\nscalar Picklist\nscalar RichTextArea\nscalar EncryptedString\nscalar Double\nscalar Long\nscalar JSON\nscalar Time\nscalar Int\nscalar Percent\nscalar LongTextArea\nscalar IdOrRef\nscalar Date\ntype PercentAggregate implements FieldValue {\n value: Percent\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: PercentValue\n min: PercentValue\n sum: PercentValue\n}\n\ntype StringAggregate implements FieldValue {\n value: String\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: StringValue\n min: StringValue\n}\n\ntype Query {\n uiapi: UIAPI!\n analytics: Analytics__Analytics! @fieldCategory\n setup: Setup__Setup! @fieldCategory\n}\n\ninput EmailOperators {\n eq: Email\n ne: Email\n like: Email\n lt: Email\n gt: Email\n lte: Email\n gte: Email\n in: [Email]\n nin: [Email]\n}\n\ninput PolymorphicParentRelationshipRecordOrderBy @generic {\n RecordOrderBy: RecordOrderBy @fieldCategory\n}\n\ninput DoubleOperators {\n eq: Double\n ne: Double\n lt: Double\n gt: Double\n lte: Double\n gte: Double\n in: [Double]\n nin: [Double]\n}\n\ntype DateOnlyAggregation {\n value: Date\n format: String\n}\n\ntype RecordCreatePayload @generic {\n Record: RecordRepresentation\n}\n\ntype DateAggregate implements FieldValue {\n value: Date\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n grouping: IntValue\n max: DateValue\n min: DateValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ninput PolymorphicParentRelationshipGroupBy @generic {\n RecordGroupBy: RecordGroupBy @fieldCategory\n}\n\nenum GroupByFunction {\n DAY_IN_WEEK\n DAY_IN_MONTH\n DAY_IN_YEAR\n WEEK_IN_MONTH\n WEEK_IN_YEAR\n CALENDAR_MONTH\n CALENDAR_QUARTER\n CALENDAR_YEAR\n FISCAL_MONTH\n FISCAL_QUARTER\n FISCAL_YEAR\n DAY_ONLY\n HOUR_IN_DAY\n}\n\ntype RecordTypeInfo {\n available: Boolean!\n defaultRecordTypeMapping: Boolean!\n master: Boolean!\n name: String\n recordTypeId: ID\n}\n\ninput UIAPIMutationsInput {\n allOrNone: Boolean = true\n}\n\ntype BooleanValue implements FieldValue {\n value: Boolean\n displayValue: String\n}\n\ntype ReferenceToInfo {\n ApiName: String!\n nameFields: [String]!\n objectInfo: ObjectInfo\n}\n\ninterface FieldValue {\n displayValue: String\n}\n\ntype LongitudeValue implements FieldValue {\n value: Longitude\n displayValue: String\n}\n\ntype StringValue implements FieldValue {\n value: String\n displayValue: String\n label: String\n}\n\ntype IntValue implements FieldValue {\n value: Int\n displayValue: String\n format: String\n}\n\ntype UrlValue implements FieldValue {\n value: Url\n displayValue: String\n}\n\ninput IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: JoinInput\n ninq: JoinInput\n}\n\ninput Setup__SetupOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ntype LongAggregate implements FieldValue {\n value: Long\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: LongValue\n min: LongValue\n sum: LongValue\n}\n\ntype PhoneNumberAggregate implements FieldValue {\n value: PhoneNumber\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: PhoneNumberValue\n min: PhoneNumberValue\n}\n\ninput TimeOperators {\n eq: Time\n ne: Time\n lt: Time\n gt: Time\n lte: Time\n gte: Time\n in: [Time]\n nin: [Time]\n}\n\ntype PicklistValue implements FieldValue {\n value: Picklist\n displayValue: String\n label: String\n}\n\ntype CurrencyAggregate implements FieldValue {\n value: Currency\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: CurrencyValue\n min: CurrencyValue\n sum: CurrencyValue\n}\n\ntype RelatedListInfo {\n childApiName: String!\n relatedListName: String!\n label: String!\n displayColumns: [ListColumn!]!\n orderedByInfo: [ListOrder!]!\n parentApiName: String!\n fieldApiName: String!\n}\n\ninput StringOperators {\n eq: String\n ne: String\n like: String\n lt: String\n gt: String\n lte: String\n gte: String\n in: [String]\n nin: [String]\n}\n\ntype UIAPI {\n query: RecordQuery!\n aggregate: RecordQueryAggregate!\n objectInfos(apiNames: [String], locale: String): [ObjectInfo]\n relatedListByName(parentApiName: String!, relatedListName: String!): RelatedListInfo\n}\n\ninput MultiPicklistOperators {\n eq: MultiPicklist\n ne: MultiPicklist\n includes: [MultiPicklist]\n excludes: [MultiPicklist]\n}\n\ntype DateTimeAggregate implements FieldValue {\n value: DateTime\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n dayOnly: DateOnlyAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n hourInDay: DateFunctionAggregation\n max: DateTimeValue\n min: DateTimeValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ninput BooleanOperators {\n eq: Boolean\n ne: Boolean\n}\n\ntype EmailAggregate implements FieldValue {\n value: Email\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: EmailValue\n min: EmailValue\n}\n\n#enum OrderByType {\n#}\n\ninput GroupByDateFunction {\n function: GroupByFunction\n}\n\ntype RichTextAreaValue implements FieldValue {\n value: RichTextArea\n displayValue: String\n}\n\ntype MultiPicklistValue implements FieldValue {\n value: MultiPicklist\n displayValue: String\n label: String\n}\n\ntype Setup__SetupEdge @generic {\n node: Setup__EntityRepresentation\n cursor: String!\n}\n\ninput DatePrimitiveOperators {\n eq: Date\n ne: Date\n lt: Date\n gt: Date\n lte: Date\n gte: Date\n in: [Date]\n nin: [Date]\n}\n\ntype TimeAggregate implements FieldValue {\n value: Time\n displayValue: String\n format: String\n hourInDay: DateFunctionAggregation\n}\n\ntype __Type {\n kind: __TypeKind!\n name: String\n description: String\n fields(includeDeprecated: Boolean = false): [__Field!]\n interfaces: [__Type!]\n possibleTypes: [__Type!]\n enumValues(includeDeprecated: Boolean = false): [__EnumValue!]\n inputFields: [__InputValue!]\n ofType: __Type\n}\n\ntype ListColumn {\n fieldApiName: String!\n label: String!\n lookupId: String\n sortable: Boolean\n}\n\ntype Setup__SetupQuery {\n # scope should be RecordScope, but it is an empty enum\n recordQuery(after: String, first: Int, orderBy: Setup__SetupOrderBy, scope: String @fieldCategory, upperBound: Int, where: Setup__SetupFilter): Setup__SetupConnection @fieldCategory\n}\n\ntype Setup__SetupQueryAggregate {\n recordQueryAggregate(after: String, first: Int, groupBy: Setup__SetupGroupBy, orderBy: Setup__SetupAggregateOrderBy, scope: String @fieldCategory, upperBound: Int, where: Setup__SetupFilter): Setup__SetupAggregateConnection @fieldCategory\n}\n\ntype Setup__SetupRecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: Setup__SetupRecordAggregate @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicAggregateParentRelationship @fieldCategory\n}\n\ntype Setup__SetupRecordResult @generic {\n aggregate: Setup__SetupRecordAggregate\n}\n\ntype SObject__Field {\n name: String!\n value: String\n}\n\nenum SObject__FieldType {\n ALL\n CUSTOM\n STANDARD\n}\n\ntype Setup__EntityRepresentation @generic {\n Id: ID!\n ApiName: String!\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n Entity__fields(type: SObject__FieldType): [SObject__Field]!\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n parentRelationship: Setup__EntityRepresentation @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, upperBound: Int): Setup__SetupConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ntype LatitudeAggregate implements FieldValue {\n value: Latitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LatitudeValue\n min: LatitudeValue\n sum: DoubleValue\n}\n\ninput CurrencyOperators {\n eq: Currency\n ne: Currency\n lt: Currency\n gt: Currency\n lte: Currency\n gte: Currency\n in: [Currency]\n nin: [Currency]\n}\n\ninput DistanceInput {\n latitude: Latitude!\n longitude: Longitude!\n}\n\nunion PolymorphicAggregateParentRelationship @generic = RecordAggregate\n\nunion PolymorphicParentRelationship @generic = RecordRepresentation\n\nenum AggregateOrderByNumberFunction {\n AVG\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n SUM\n}\n\ntype LongTextAreaValue implements FieldValue {\n value: LongTextArea\n displayValue: String\n}\n\ntype LatitudeValue implements FieldValue {\n value: Latitude\n displayValue: String\n}\n\ninput OrderByClause {\n order: ResultOrder\n nulls: NullOrder\n}\n\ninput GroupByClause {\n group: Boolean\n}\n\ntype RecordAggregateConnection @generic {\n edges: [RecordAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype LongitudeAggregate implements FieldValue {\n value: Longitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LongitudeValue\n min: LongitudeValue\n sum: DoubleValue\n}\n\ntype RecordEdge @generic {\n node: RecordRepresentation\n cursor: String!\n}\n\nunion Setup__SetupPolymorphicParentRelationship @generic = Setup__EntityRepresentation\n\ntype DateValue implements FieldValue {\n value: Date\n displayValue: String\n format: String\n}\n\ninput URLOperators {\n eq: Url\n ne: Url\n like: Url\n lt: Url\n gt: Url\n lte: Url\n gte: Url\n in: [Url]\n nin: [Url]\n}\n\ninput LongOperators {\n eq: Long\n ne: Long\n lt: Long\n gt: Long\n lte: Long\n gte: Long\n in: [Long]\n nin: [Long]\n}\n\nenum DataType {\n STRING\n TEXTAREA\n PHONE\n EMAIL\n URL\n ENCRYPTEDSTRING\n BOOLEAN\n CURRENCY\n INT\n LONG\n DOUBLE\n PERCENT\n DATETIME\n TIME\n DATE\n REFERENCE\n PICKLIST\n MULTIPICKLIST\n ADDRESS\n LOCATION\n BASE64\n COMPLEXVALUE\n COMBOBOX\n JSON\n JUNCTIONIDLIST\n ANYTYPE\n}\n\nenum NullOrder {\n FIRST\n LAST\n}\n\ntype PhoneNumberValue implements FieldValue {\n value: PhoneNumber\n displayValue: String\n}\n\n# Cannot have empty enum\n# enum RecordScope @generic {\n# }\n\ninput Setup__SetupFilter @generic {\n and: [Setup__SetupFilter]\n or: [Setup__SetupFilter]\n not: Setup__SetupFilter\n parentRelationshipRecordFilter: Setup__SetupFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: Setup__SetupPolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n Setup__IdOperator: Setup__IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype DoubleAggregate implements FieldValue {\n value: Double\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: DoubleValue\n min: DoubleValue\n sum: DoubleValue\n}\n\ntype __Field {\n name: String!\n description: String\n args: [__InputValue!]!\n type: __Type!\n isDeprecated: Boolean!\n deprecationReason: String\n}\n\ninput DateOperators {\n eq: DateInput\n ne: DateInput\n lt: DateInput\n gt: DateInput\n lte: DateInput\n gte: DateInput\n in: [DateInput]\n nin: [DateInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n}\n\ninput GeolocationInput {\n latitude: Latitude!\n longitude: Longitude!\n radius: Float!\n unit: Unit!\n}\n\ninput JoinInput {\n Record: RecordFilter @fieldCategory\n ApiName: String\n}\n\ninput TextAreaOperators {\n eq: TextArea\n ne: TextArea\n like: TextArea\n lt: TextArea\n gt: TextArea\n lte: TextArea\n gte: TextArea\n in: [TextArea]\n nin: [TextArea]\n}\n\ntype TextAreaValue implements FieldValue {\n value: TextArea\n displayValue: String\n}\n\ntype RecordUpdatePayload @generic {\n success: Boolean\n}\n\ninput PercentOperators {\n eq: Percent\n ne: Percent\n lt: Percent\n gt: Percent\n lte: Percent\n gte: Percent\n in: [Percent]\n nin: [Percent]\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordOrderBy @generic {\n Setup__SetupOrderBy: Setup__SetupOrderBy @fieldCategory\n}\n\ntype DoubleValue implements FieldValue {\n value: Double\n displayValue: String\n format: String\n}\n\ntype IDAggregate implements FieldValue {\n value: ID\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: IDValue\n min: IDValue\n}\n\ntype __InputValue {\n name: String!\n description: String\n type: __Type!\n defaultValue: String\n}\n\ntype RecordAggregateEdge @generic {\n node: RecordResult\n cursor: String!\n}\n\ntype __Directive {\n name: String\n description: String\n locations: [__DirectiveLocation!]\n args: [__InputValue!]!\n}\n\ninput RecordCreateInput @generic {\n record: RecordCreateRepresentation! @fieldCategory\n}\n\ntype ThemeInfo {\n color: String\n iconUrl: String\n}\n\ninput AggregateOrderByStringClause {\n function: AggregateOrderByStringFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype RecordDeletePayload {\n Id: ID\n}\n\ntype UrlAggregate implements FieldValue {\n value: Url\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: UrlValue\n min: UrlValue\n}\n\nenum DateLiteral {\n LAST_YEAR\n LAST_WEEK\n THIS_QUARTER\n NEXT_FISCAL_YEAR\n LAST_QUARTER\n TOMORROW\n NEXT_FISCAL_QUARTER\n YESTERDAY\n NEXT_QUARTER\n THIS_FISCAL_QUARTER\n THIS_WEEK\n LAST_MONTH\n LAST_90_DAYS\n NEXT_90_DAYS\n THIS_FISCAL_YEAR\n NEXT_WEEK\n TODAY\n NEXT_YEAR\n NEXT_MONTH\n LAST_FISCAL_QUARTER\n THIS_MONTH\n LAST_FISCAL_YEAR\n THIS_YEAR\n}\n\ntype __EnumValue {\n name: String!\n description: String\n isDeprecated: Boolean!\n deprecationReason: String\n}\n\ntype RecordRepresentation implements Record @generic {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n parentRelationship: RecordRepresentation @fieldCategory\n polymorphicParentRelationship: PolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, upperBound: Int): RecordConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n}\n\ntype IDValue implements FieldValue {\n value: ID\n displayValue: String\n}\n\nenum Unit {\n MI\n KM\n}\n\ninput PolymorphicParentRelationshipOrderBy @generic {\n RecordAggregateOrderBy: RecordAggregateOrderBy @fieldCategory\n}\n\ninput OrderByGeolocationClause {\n distance: DistanceInput\n order: ResultOrder\n nulls: NullOrder\n}\n\ninput Setup__IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: Setup__JoinInput\n ninq: Setup__JoinInput\n}\n\nenum NullsOrder {\n FIRST\n LAST\n}\n\ntype TextAreaAggregate implements FieldValue {\n value: TextArea\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: TextAreaValue\n min: TextAreaValue\n}\n\nenum GroupByType {\n GROUP_BY\n ROLLUP\n CUBE\n}\n\nenum ResultOrder {\n ASC\n DESC\n}\n\ninput RecordOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput Setup__JoinInput {\n Record: Setup__SetupFilter @fieldCategory\n ApiName: String\n}\n\ninput PicklistOperators {\n eq: Picklist\n ne: Picklist\n in: [Picklist]\n nin: [Picklist]\n like: Picklist\n lt: Picklist\n gt: Picklist\n lte: Picklist\n gte: Picklist\n}\n\nenum ResultsOrder {\n ASC\n DESC\n}\n\ninput RecordFilter @generic {\n and: [RecordFilter]\n or: [RecordFilter]\n not: RecordFilter\n parentRelationshipRecordFilter: RecordFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: PolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n IdOperator: IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype TimeValue implements FieldValue {\n value: Time\n displayValue: String\n format: String\n}\n\ninput GeolocationOperators {\n lt: GeolocationInput\n gt: GeolocationInput\n}\n\ntype PicklistAggregate implements FieldValue {\n value: Picklist\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: PicklistValue\n min: PicklistValue\n}\n\ninput LatitudeOperators {\n eq: Latitude\n ne: Latitude\n lt: Latitude\n gt: Latitude\n lte: Latitude\n gte: Latitude\n in: [Latitude]\n nin: [Latitude]\n}\n\ninput RecordUpdateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype DateTimeValue implements FieldValue {\n value: DateTime\n displayValue: String\n format: String\n}\n\ninput RecordDeleteInput {\n Id: IdOrRef!\n}\n\nenum __DirectiveLocation {\n QUERY\n MUTATION\n FIELD\n FRAGMENT_DEFINITION\n FRAGMENT_SPREAD\n INLINE_FRAGMENT\n SCHEMA\n SCALAR\n OBJECT\n FIELD_DEFINITION\n ARGUMENT_DEFINITION\n INTERFACE\n UNION\n ENUM\n ENUM_VALUE\n INPUT_OBJECT\n INPUT_FIELD_DEFINITION\n}\n\ntype IntAggregate implements FieldValue {\n value: Int\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: IntValue\n min: IntValue\n sum: LongValue\n}\n\ntype ListOrder {\n fieldApiName: String!\n sortDirection: ResultOrder\n}\n\ntype RecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: RecordAggregate @fieldCategory\n polymorphicParentRelationship: PolymorphicAggregateParentRelationship @fieldCategory\n}\n\ntype JSONValue implements FieldValue {\n value: JSON\n displayValue: String\n}\n\ntype EmailValue implements FieldValue {\n value: Email\n displayValue: String\n}\n\ntype Setup__Setup {\n query: Setup__SetupQuery!\n aggregate: Setup__SetupQueryAggregate!\n}\n\ntype Setup__SetupAggregateConnection @generic {\n edges: [Setup__SetupAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ninput Setup__SetupGroupBy @generic {\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableField: GroupByClause @fieldCategory\n groupableParentRelationship: Setup__SetupGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype Setup__SetupAggregateEdge @generic {\n cursor: String!\n node: Setup__SetupRecordResult\n}\n\ninput Setup__SetupAggregateOrderBy @generic {\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableParentRelationship: Setup__SetupAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipOrderBy @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n type: String\n}\n\n\nenum AggregateOrderByStringFunction {\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n}\n\ntype LongValue implements FieldValue {\n value: Long\n displayValue: String\n format: String\n}\n\ninput DateFunctionInput {\n value: LongOperators\n convertTimezoneValue: LongOperators\n}\n\n# Mutations aren't supported yet.\n#type Mutation {\n# uiapi(input: UIAPIMutationsInput): UIAPIMutations!\n#}\n\ntype DependentField {\n controllingField: String!\n dependentFields: [String]!\n}\n\ninput LongTextAreaOperators {\n eq: LongTextArea\n ne: LongTextArea\n like: LongTextArea\n lt: LongTextArea\n gt: LongTextArea\n lte: LongTextArea\n gte: LongTextArea\n in: [LongTextArea]\n nin: [LongTextArea]\n}\n\nenum __TypeKind {\n SCALAR\n OBJECT\n INTERFACE\n UNION\n ENUM\n INPUT_OBJECT\n LIST\n NON_NULL\n}\n\ntype Setup__SetupConnection @generic {\n edges: [Setup__SetupEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype PercentValue implements FieldValue {\n value: Percent\n displayValue: String\n format: String\n}\n\ninput DateTimeOperators {\n eq: DateTimeInput\n ne: DateTimeInput\n lt: DateTimeInput\n gt: DateTimeInput\n lte: DateTimeInput\n gte: DateTimeInput\n in: [DateTimeInput]\n nin: [DateTimeInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n DAY_ONLY: DateTimeFunctionInput\n HOUR_IN_DAY: DateFunctionInput\n}\n\ninput NoFunctionAggregateOrderByClause {\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype BooleanAggregate implements FieldValue {\n value: Boolean\n displayValue: String\n grouping: IntValue\n}\n\ntype RecordQueryAggregate {\n # RecordScope is replaced with String\n recordQueryAggregate(after: String, first: Int, groupBy: RecordGroupBy, orderBy: RecordAggregateOrderBy, scope: String @fieldCategory, upperBound: Int, where: RecordFilter): RecordAggregateConnection @fieldCategory\n}\n\ninput RecordAggregateOrderBy @generic {\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableParentRelationship: RecordAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipOrderBy @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n type: String\n}\n\ntype RecordConnection @generic {\n edges: [RecordEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype FilteredLookupInfo {\n controllingFields: [String]!\n dependent: Boolean!\n optionalFilter: Boolean!\n}\n\ninput PhoneNumberOperators {\n eq: PhoneNumber\n ne: PhoneNumber\n like: PhoneNumber\n lt: PhoneNumber\n gt: PhoneNumber\n lte: PhoneNumber\n gte: PhoneNumber\n in: [PhoneNumber]\n nin: [PhoneNumber]\n}\n\ntype ObjectInfo {\n ApiName: String!\n childRelationships: [ChildRelationship]!\n createable: Boolean!\n custom: Boolean!\n defaultRecordTypeId: ID\n deletable: Boolean!\n dependentFields: [DependentField]!\n feedEnabled: Boolean!\n fields: [Field]!\n keyPrefix: String\n label: String\n labelPlural: String\n layoutable: Boolean!\n mruEnabled: Boolean!\n nameFields: [String]!\n queryable: Boolean!\n recordTypeInfos: [RecordTypeInfo]!\n searchable: Boolean!\n themeInfo: ThemeInfo\n updateable: Boolean!\n locale: String\n}\n\ninput LongitudeOperators {\n eq: Longitude\n ne: Longitude\n lt: Longitude\n gt: Longitude\n lte: Longitude\n gte: Longitude\n in: [Longitude]\n nin: [Longitude]\n}\n\ninput RecordCreateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\nenum FieldExtraTypeInfo {\n IMAGE_URL\n EXTERNAL_LOOKUP\n INDIRECT_LOOKUP\n PERSONNAME\n SWITCHABLE_PERSONNAME\n PLAINTEXTAREA\n RICHTEXTAREA\n}\n\ntype RateLimit {\n cost: Long\n limit: Long\n remaining: Long\n resetAt: DateTime\n}\n\ninput DateRange {\n last_n_days: Int\n next_n_days: Int\n last_n_weeks: Int\n next_n_weeks: Int\n last_n_months: Int\n next_n_months: Int\n last_n_quarters: Int\n next_n_quarters: Int\n last_n_fiscal_quarters: Int\n next_n_fiscal_quarters: Int\n last_n_years: Int\n next_n_years: Int\n last_n_fiscal_years: Int\n next_n_fiscal_years: Int\n n_days_ago: Int\n n_weeks_ago: Int\n n_months_ago: Int\n n_quarters_ago: Int\n n_years_ago: Int\n n_fiscal_quarters_ago: Int\n n_fiscal_years_ago: Int\n}\n\ntype UIAPIMutations {\n recordCreate(input: RecordCreateInput!): RecordCreatePayload @fieldCategory\n recordDelete(input: RecordDeleteInput!): RecordDeletePayload @fieldCategory\n recordUpdate(input: RecordUpdateInput!): RecordUpdatePayload @fieldCategory\n}\n\ninput DateTimeFunctionInput {\n value: DatePrimitiveOperators\n convertTimezoneValue: DatePrimitiveOperators\n}\n\ntype Base64Value implements FieldValue {\n value: Base64\n displayValue: String\n}\n\ninput IntegerOperators {\n eq: Int\n ne: Int\n lt: Int\n gt: Int\n lte: Int\n gte: Int\n in: [Int]\n nin: [Int]\n}\n\ntype EncryptedStringValue implements FieldValue {\n value: EncryptedString\n displayValue: String\n}\n\ninterface Record {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n}\n\ninput PolymorphicParentRelationshipRecordFilter @generic {\n RecordFilter: RecordFilter @fieldCategory\n}\n\ninput AggregateOrderByNumberClause {\n function: AggregateOrderByNumberFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype __Schema {\n types: [__Type!]!\n queryType: __Type!\n mutationType: __Type\n directives: [__Directive!]!\n subscriptionType: __Type\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordFilter @generic {\n Setup__SetupFilter: Setup__SetupFilter @fieldCategory\n}\n\nunion Setup__SetupPolymorphicAggregateParentRelationship @generic = Setup__SetupRecordAggregate\n\ninput Setup__SetupPolymorphicParentRelationshipGroupBy @generic {\n Setup__SetupGroupBy: Setup__SetupGroupBy @fieldCategory\n}\n\ninput Setup__SetupPolymorphicParentRelationshipOrderBy @generic {\n Setup__SetupAggregateOrderBy: Setup__SetupAggregateOrderBy @fieldCategory\n}\n\ntype CompoundField @generic {\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n}\n\ninput RecordUpdateInput @generic {\n Id: IdOrRef!\n record: RecordUpdateRepresentation! @fieldCategory\n}\n\ninput DateTimeInput {\n value: DateTime\n literal: DateLiteral\n range: DateRange\n}\n\ntype ChildRelationship {\n childObjectApiName: String!\n fieldName: String\n junctionIdListNames: [String]!\n junctionReferenceTo: [String]!\n relationshipName: String\n objectInfo: ObjectInfo\n}\n\ntype RecordResult @generic {\n aggregate: RecordAggregate\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\ntype CurrencyValue implements FieldValue {\n value: Currency\n displayValue: String\n format: String\n}\n\ninput DateInput {\n value: Date\n literal: DateLiteral\n range: DateRange\n}\n\ninput RecordGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: RecordGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: PolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype DateFunctionAggregation {\n value: Long\n format: String\n}\n\ntype RecordQuery {\n recordQuery(after: String, first: Int, orderBy: RecordOrderBy, scope: String @fieldCategory, upperBound: Int, where: RecordFilter): RecordConnection @fieldCategory\n}\n\n# add browse family schema\ntype Analytics__Analytics {\n # assetTypes: [AnalyticsAssetType], but AnalyticsAssetType is an empty enum\n browse(after: String, assetTypes: [String], first: Int, orderBy: Analytics__AnalyticsOrderBy, where: Analytics__AnalyticsFilter): Analytics__AnalyticsBrowse!\n # Add other fields here if needed\n}\n\n# enum AnalyticsAssetType @generic {\n# }\n\ntype Analytics__AnalyticsBrowse {\n edges: [Analytics__AnalyticsEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__AnalyticsEdge {\n node: Analytics__AnalyticsRepresentation\n cursor: String!\n}\n\ninterface Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n}\n\ntype Analytics__AnalyticsRepresentation implements Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n}\n\ntype Analytics__SemanticDefinition implements Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n SubMetrics: Analytics__SemanticSubMetricDefinitionConnection\n}\n\ninput Analytics__AnalyticsOrderBy {\n MasterLabel: Analytics__OrderByInput\n Id: Analytics__OrderByInput\n ApiName: Analytics__OrderByInput\n CreatedById: Analytics__OrderByInput\n CreatedDate: Analytics__OrderByInput\n LastModifiedDate: Analytics__OrderByInput\n LastModifiedById: Analytics__OrderByInput\n}\n\ninput Analytics__OrderByInput {\n order: Analytics__SortEnumType\n}\n\nenum Analytics__SortEnumType {\n ASC\n DESC\n}\n\ninput Analytics__AnalyticsFilter {\n Id: Setup__IdOperators\n MasterLabel: StringOperators\n DeveloperName: StringOperators\n NamespacePrefix: StringOperators\n CreatedById: Setup__IdOperators\n CreatedDate: DateTimeOperators\n LastModifiedById: Setup__IdOperators\n LastModifiedDate: DateTimeOperators\n and: [Analytics__AnalyticsFilter]\n or: [Analytics__AnalyticsFilter]\n not: Analytics__AnalyticsFilter\n}\n\ntype Analytics__AnalyticsWorkspaceAssetConnection {\n edges: [Analytics__AnalyticsWorkspaceAssetEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__AnalyticsWorkspaceAssetEdge {\n node: Analytics__AnalyticsWorkspaceAsset\n cursor: String!\n}\n\ntype Analytics__AnalyticsWorkspaceAsset {\n AnalyticsWorkspace: Analytics__AnalyticsWorkspace\n AssetUsageType: PicklistValue\n}\n\ntype Analytics__AnalyticsWorkspace {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionConnection {\n edges: [Analytics__SemanticSubMetricDefinitionEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticSubMetricDefinitionEdge {\n node: Analytics__SemanticSubMetricDefinitionRepresentation\n cursor: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionRepresentation {\n Id: ID!\n ApiName: String!\n}\n\ndirective @generic on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT\ndirective @fieldCategory on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\ndirective @category(name: String!) on FIELD\n";
47541
+ var uiapiSchemaString = "scalar String\nscalar DateTime\nscalar Currency\nscalar ID\nscalar Boolean\nscalar Longitude\nscalar Float\nscalar MultiPicklist\nscalar Base64\nscalar Url\nscalar PhoneNumber\nscalar Email\nscalar TextArea\nscalar Latitude\nscalar Picklist\nscalar RichTextArea\nscalar EncryptedString\nscalar Double\nscalar Long\nscalar JSON\nscalar Time\nscalar Int\nscalar Percent\nscalar LongTextArea\nscalar IdOrRef\nscalar Date\ntype PercentAggregate implements FieldValue {\n value: Percent\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: PercentValue\n min: PercentValue\n sum: PercentValue\n}\n\ntype StringAggregate implements FieldValue {\n value: String\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: StringValue\n min: StringValue\n}\n\ntype Query {\n uiapi: UIAPI!\n analytics: Analytics__Analytics! @fieldCategory\n setup: Setup__Setup! @fieldCategory\n}\n\ninput EmailOperators {\n eq: Email\n ne: Email\n like: Email\n lt: Email\n gt: Email\n lte: Email\n gte: Email\n in: [Email]\n nin: [Email]\n}\n\ninput PolymorphicParentRelationshipRecordOrderBy @generic {\n RecordOrderBy: RecordOrderBy @fieldCategory\n}\n\ninput DoubleOperators {\n eq: Double\n ne: Double\n lt: Double\n gt: Double\n lte: Double\n gte: Double\n in: [Double]\n nin: [Double]\n}\n\ntype DateOnlyAggregation {\n value: Date\n format: String\n}\n\ntype RecordCreatePayload @generic {\n Record: RecordRepresentation\n}\n\ntype DateAggregate implements FieldValue {\n value: Date\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n grouping: IntValue\n max: DateValue\n min: DateValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ninput PolymorphicParentRelationshipGroupBy @generic {\n RecordGroupBy: RecordGroupBy @fieldCategory\n}\n\nenum GroupByFunction {\n DAY_IN_WEEK\n DAY_IN_MONTH\n DAY_IN_YEAR\n WEEK_IN_MONTH\n WEEK_IN_YEAR\n CALENDAR_MONTH\n CALENDAR_QUARTER\n CALENDAR_YEAR\n FISCAL_MONTH\n FISCAL_QUARTER\n FISCAL_YEAR\n DAY_ONLY\n HOUR_IN_DAY\n}\n\ntype RecordTypeInfo {\n available: Boolean!\n defaultRecordTypeMapping: Boolean!\n master: Boolean!\n name: String\n recordTypeId: ID\n}\n\ninput UIAPIMutationsInput {\n allOrNone: Boolean = true\n}\n\ntype BooleanValue implements FieldValue {\n value: Boolean\n displayValue: String\n}\n\ntype ReferenceToInfo {\n ApiName: String!\n nameFields: [String]!\n objectInfo: ObjectInfo\n}\n\ninterface FieldValue {\n displayValue: String\n}\n\ntype LongitudeValue implements FieldValue {\n value: Longitude\n displayValue: String\n}\n\ntype StringValue implements FieldValue {\n value: String\n displayValue: String\n label: String\n}\n\ntype IntValue implements FieldValue {\n value: Int\n displayValue: String\n format: String\n}\n\ntype UrlValue implements FieldValue {\n value: Url\n displayValue: String\n}\n\ninput IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: JoinInput\n ninq: JoinInput\n}\n\ninput Setup__SetupOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: Setup__SetupOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ntype LongAggregate implements FieldValue {\n value: Long\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: LongValue\n min: LongValue\n sum: LongValue\n}\n\ntype PhoneNumberAggregate implements FieldValue {\n value: PhoneNumber\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: PhoneNumberValue\n min: PhoneNumberValue\n}\n\ninput TimeOperators {\n eq: Time\n ne: Time\n lt: Time\n gt: Time\n lte: Time\n gte: Time\n in: [Time]\n nin: [Time]\n}\n\ntype PicklistValue implements FieldValue {\n value: Picklist\n displayValue: String\n label: String\n}\n\ntype CurrencyAggregate implements FieldValue {\n value: Currency\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: CurrencyValue\n min: CurrencyValue\n sum: CurrencyValue\n}\n\ntype RelatedListInfo {\n childApiName: String!\n relatedListName: String!\n label: String!\n displayColumns: [ListColumn!]!\n orderedByInfo: [ListOrder!]!\n parentApiName: String!\n fieldApiName: String!\n}\n\ninput StringOperators {\n eq: String\n ne: String\n like: String\n lt: String\n gt: String\n lte: String\n gte: String\n in: [String]\n nin: [String]\n}\n\ntype UIAPI {\n query: RecordQuery!\n aggregate: RecordQueryAggregate!\n objectInfos(apiNames: [String], locale: String): [ObjectInfo]\n relatedListByName(parentApiName: String!, relatedListName: String!): RelatedListInfo\n}\n\ninput MultiPicklistOperators {\n eq: MultiPicklist\n ne: MultiPicklist\n includes: [MultiPicklist]\n excludes: [MultiPicklist]\n}\n\ntype DateTimeAggregate implements FieldValue {\n value: DateTime\n displayValue: String\n calendarMonth: DateFunctionAggregation\n calendarQuarter: DateFunctionAggregation\n calendarYear: DateFunctionAggregation\n count: LongValue\n countDistinct: LongValue\n dayInMonth: DateFunctionAggregation\n dayInWeek: DateFunctionAggregation\n dayInYear: DateFunctionAggregation\n dayOnly: DateOnlyAggregation\n fiscalMonth: DateFunctionAggregation\n fiscalQuarter: DateFunctionAggregation\n fiscalYear: DateFunctionAggregation\n format: String\n hourInDay: DateFunctionAggregation\n max: DateTimeValue\n min: DateTimeValue\n weekInMonth: DateFunctionAggregation\n weekInYear: DateFunctionAggregation\n}\n\ninput BooleanOperators {\n eq: Boolean\n ne: Boolean\n}\n\ntype EmailAggregate implements FieldValue {\n value: Email\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: EmailValue\n min: EmailValue\n}\n\n#enum OrderByType {\n#}\n\ninput GroupByDateFunction {\n function: GroupByFunction\n}\n\ntype RichTextAreaValue implements FieldValue {\n value: RichTextArea\n displayValue: String\n}\n\ntype MultiPicklistValue implements FieldValue {\n value: MultiPicklist\n displayValue: String\n label: String\n}\n\ntype Setup__SetupEdge @generic {\n node: Setup__EntityRepresentation\n cursor: String!\n}\n\ninput DatePrimitiveOperators {\n eq: Date\n ne: Date\n lt: Date\n gt: Date\n lte: Date\n gte: Date\n in: [Date]\n nin: [Date]\n}\n\ntype TimeAggregate implements FieldValue {\n value: Time\n displayValue: String\n format: String\n hourInDay: DateFunctionAggregation\n}\n\ntype __Type {\n kind: __TypeKind!\n name: String\n description: String\n fields(includeDeprecated: Boolean = false): [__Field!]\n interfaces: [__Type!]\n possibleTypes: [__Type!]\n enumValues(includeDeprecated: Boolean = false): [__EnumValue!]\n inputFields: [__InputValue!]\n ofType: __Type\n}\n\ntype ListColumn {\n fieldApiName: String!\n label: String!\n lookupId: String\n sortable: Boolean\n}\n\ntype Setup__SetupQuery {\n # scope should be RecordScope, but it is an empty enum\n recordQuery(after: String, first: Int, orderBy: Setup__SetupOrderBy, scope: String @fieldCategory, upperBound: Int, where: Setup__SetupFilter): Setup__SetupConnection @fieldCategory\n}\n\ntype Setup__SetupQueryAggregate {\n recordQueryAggregate(after: String, first: Int, groupBy: Setup__SetupGroupBy, orderBy: Setup__SetupAggregateOrderBy, scope: String @fieldCategory, upperBound: Int, where: Setup__SetupFilter): Setup__SetupAggregateConnection @fieldCategory\n}\n\ntype Setup__SetupRecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: Setup__SetupRecordAggregate @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicAggregateParentRelationship @fieldCategory\n}\n\ntype Setup__SetupRecordResult @generic {\n aggregate: Setup__SetupRecordAggregate\n}\n\ntype SObject__Field {\n name: String!\n value: String\n}\n\nenum SObject__FieldType {\n ALL\n CUSTOM\n STANDARD\n}\n\ntype Setup__EntityRepresentation @generic {\n Id: ID!\n ApiName: String!\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n Entity__fields(type: SObject__FieldType): [SObject__Field]!\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n parentRelationship: Setup__EntityRepresentation @fieldCategory\n polymorphicParentRelationship: Setup__SetupPolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: Setup__SetupFilter, orderBy: Setup__SetupOrderBy, upperBound: Int): Setup__SetupConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n AnyType: AnyType @fieldCategory\n}\n\ntype LatitudeAggregate implements FieldValue {\n value: Latitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LatitudeValue\n min: LatitudeValue\n sum: DoubleValue\n}\n\ninput CurrencyOperators {\n eq: Currency\n ne: Currency\n lt: Currency\n gt: Currency\n lte: Currency\n gte: Currency\n in: [Currency]\n nin: [Currency]\n}\n\ninput DistanceInput {\n latitude: Latitude!\n longitude: Longitude!\n}\n\nunion PolymorphicAggregateParentRelationship @generic = RecordAggregate\n\nunion PolymorphicParentRelationship @generic = RecordRepresentation\n\nenum AggregateOrderByNumberFunction {\n AVG\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n SUM\n}\n\ntype LongTextAreaValue implements FieldValue {\n value: LongTextArea\n displayValue: String\n}\n\ntype LatitudeValue implements FieldValue {\n value: Latitude\n displayValue: String\n}\n\ninput OrderByClause {\n order: ResultOrder\n nulls: NullOrder\n}\n\ninput GroupByClause {\n group: Boolean\n}\n\ntype RecordAggregateConnection @generic {\n edges: [RecordAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ntype LongitudeAggregate implements FieldValue {\n value: Longitude\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n max: LongitudeValue\n min: LongitudeValue\n sum: DoubleValue\n}\n\ntype RecordEdge @generic {\n node: RecordRepresentation\n cursor: String!\n}\n\nunion Setup__SetupPolymorphicParentRelationship @generic = Setup__EntityRepresentation\n\ntype DateValue implements FieldValue {\n value: Date\n displayValue: String\n format: String\n}\n\ninput URLOperators {\n eq: Url\n ne: Url\n like: Url\n lt: Url\n gt: Url\n lte: Url\n gte: Url\n in: [Url]\n nin: [Url]\n}\n\ninput LongOperators {\n eq: Long\n ne: Long\n lt: Long\n gt: Long\n lte: Long\n gte: Long\n in: [Long]\n nin: [Long]\n}\n\nenum DataType {\n STRING\n TEXTAREA\n PHONE\n EMAIL\n URL\n ENCRYPTEDSTRING\n BOOLEAN\n CURRENCY\n INT\n LONG\n DOUBLE\n PERCENT\n DATETIME\n TIME\n DATE\n REFERENCE\n PICKLIST\n MULTIPICKLIST\n ADDRESS\n LOCATION\n BASE64\n COMPLEXVALUE\n COMBOBOX\n JSON\n JUNCTIONIDLIST\n ANYTYPE\n}\n\nenum NullOrder {\n FIRST\n LAST\n}\n\ntype PhoneNumberValue implements FieldValue {\n value: PhoneNumber\n displayValue: String\n}\n\n# Cannot have empty enum\n# enum RecordScope @generic {\n# }\n\ninput Setup__SetupFilter @generic {\n and: [Setup__SetupFilter]\n or: [Setup__SetupFilter]\n not: Setup__SetupFilter\n parentRelationshipRecordFilter: Setup__SetupFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: Setup__SetupPolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n Setup__IdOperator: Setup__IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype DoubleAggregate implements FieldValue {\n value: Double\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n max: DoubleValue\n min: DoubleValue\n sum: DoubleValue\n}\n\ntype __Field {\n name: String!\n description: String\n args: [__InputValue!]!\n type: __Type!\n isDeprecated: Boolean!\n deprecationReason: String\n}\n\ninput DateOperators {\n eq: DateInput\n ne: DateInput\n lt: DateInput\n gt: DateInput\n lte: DateInput\n gte: DateInput\n in: [DateInput]\n nin: [DateInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n}\n\ninput GeolocationInput {\n latitude: Latitude!\n longitude: Longitude!\n radius: Float!\n unit: Unit!\n}\n\ninput JoinInput {\n Record: RecordFilter @fieldCategory\n ApiName: String\n}\n\ninput TextAreaOperators {\n eq: TextArea\n ne: TextArea\n like: TextArea\n lt: TextArea\n gt: TextArea\n lte: TextArea\n gte: TextArea\n in: [TextArea]\n nin: [TextArea]\n}\n\ntype TextAreaValue implements FieldValue {\n value: TextArea\n displayValue: String\n}\n\ntype RecordUpdatePayload @generic {\n success: Boolean\n}\n\ninput PercentOperators {\n eq: Percent\n ne: Percent\n lt: Percent\n gt: Percent\n lte: Percent\n gte: Percent\n in: [Percent]\n nin: [Percent]\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordOrderBy @generic {\n Setup__SetupOrderBy: Setup__SetupOrderBy @fieldCategory\n}\n\ntype DoubleValue implements FieldValue {\n value: Double\n displayValue: String\n format: String\n}\n\ntype IDAggregate implements FieldValue {\n value: ID\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: IDValue\n min: IDValue\n}\n\ntype __InputValue {\n name: String!\n description: String\n type: __Type!\n defaultValue: String\n}\n\ntype RecordAggregateEdge @generic {\n node: RecordResult\n cursor: String!\n}\n\ntype __Directive {\n name: String\n description: String\n locations: [__DirectiveLocation!]\n args: [__InputValue!]!\n}\n\ninput RecordCreateInput @generic {\n record: RecordCreateRepresentation! @fieldCategory\n}\n\ntype ThemeInfo {\n color: String\n iconUrl: String\n}\n\ninput AggregateOrderByStringClause {\n function: AggregateOrderByStringFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype RecordDeletePayload {\n Id: ID\n}\n\ntype UrlAggregate implements FieldValue {\n value: Url\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: UrlValue\n min: UrlValue\n}\n\nenum DateLiteral {\n LAST_YEAR\n LAST_WEEK\n THIS_QUARTER\n NEXT_FISCAL_YEAR\n LAST_QUARTER\n TOMORROW\n NEXT_FISCAL_QUARTER\n YESTERDAY\n NEXT_QUARTER\n THIS_FISCAL_QUARTER\n THIS_WEEK\n LAST_MONTH\n LAST_90_DAYS\n NEXT_90_DAYS\n THIS_FISCAL_YEAR\n NEXT_WEEK\n TODAY\n NEXT_YEAR\n NEXT_MONTH\n LAST_FISCAL_QUARTER\n THIS_MONTH\n LAST_FISCAL_YEAR\n THIS_YEAR\n}\n\ntype __EnumValue {\n name: String!\n description: String\n isDeprecated: Boolean!\n deprecationReason: String\n}\n\ntype RecordRepresentation implements Record @generic {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n parentRelationship: RecordRepresentation @fieldCategory\n polymorphicParentRelationship: PolymorphicParentRelationship @fieldCategory\n childRelationship(first: Int, after: String, where: RecordFilter, orderBy: RecordOrderBy, upperBound: Int): RecordConnection @fieldCategory\n CompoundField: CompoundField @fieldCategory\n AnyType: AnyType @fieldCategory\n}\n\nunion AnyType = BooleanValue | DateValue | DateTimeValue | DoubleValue | StringValue\n\ntype IDValue implements FieldValue {\n value: ID\n displayValue: String\n}\n\nenum Unit {\n MI\n KM\n}\n\ninput PolymorphicParentRelationshipOrderBy @generic {\n RecordAggregateOrderBy: RecordAggregateOrderBy @fieldCategory\n}\n\ninput OrderByGeolocationClause {\n distance: DistanceInput\n order: ResultOrder\n nulls: NullOrder\n}\n\ninput Setup__IdOperators {\n eq: ID\n ne: ID\n lt: ID\n gt: ID\n lte: ID\n gte: ID\n in: [ID]\n nin: [ID]\n inq: Setup__JoinInput\n ninq: Setup__JoinInput\n}\n\nenum NullsOrder {\n FIRST\n LAST\n}\n\ntype TextAreaAggregate implements FieldValue {\n value: TextArea\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n max: TextAreaValue\n min: TextAreaValue\n}\n\nenum GroupByType {\n GROUP_BY\n ROLLUP\n CUBE\n}\n\nenum ResultOrder {\n ASC\n DESC\n}\n\ninput RecordOrderBy @generic {\n orderableField: OrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableParentRelationship: RecordOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipRecordOrderBy @fieldCategory\n}\n\ninput Setup__JoinInput {\n Record: Setup__SetupFilter @fieldCategory\n ApiName: String\n}\n\ninput PicklistOperators {\n eq: Picklist\n ne: Picklist\n in: [Picklist]\n nin: [Picklist]\n like: Picklist\n lt: Picklist\n gt: Picklist\n lte: Picklist\n gte: Picklist\n}\n\nenum ResultsOrder {\n ASC\n DESC\n}\n\ninput RecordFilter @generic {\n and: [RecordFilter]\n or: [RecordFilter]\n not: RecordFilter\n parentRelationshipRecordFilter: RecordFilter @fieldCategory\n polymorphicParentRelationshipRecordFilter: PolymorphicParentRelationshipRecordFilter @fieldCategory\n IntegerOperator: IntegerOperators @fieldCategory\n LongOperator: LongOperators @fieldCategory\n StringOperator: StringOperators @fieldCategory\n DoubleOperator: DoubleOperators @fieldCategory\n PercentOperator: PercentOperators @fieldCategory\n LongitudeOperator: LongitudeOperators @fieldCategory\n LatitudeOperator: LatitudeOperators @fieldCategory\n EmailOperator: EmailOperators @fieldCategory\n TextAreaOperator: TextAreaOperators @fieldCategory\n LongTextAreaOperator: LongTextAreaOperators @fieldCategory\n URLOperator: URLOperators @fieldCategory\n PhoneNumberOperator: PhoneNumberOperators @fieldCategory\n BooleanOperator: BooleanOperators @fieldCategory\n IdOperator: IdOperators @fieldCategory\n CurrencyOperator: CurrencyOperators @fieldCategory\n TimeOperator: TimeOperators @fieldCategory\n DateOperator: DateOperators @fieldCategory\n DateTimeOperator: DateTimeOperators @fieldCategory\n PicklistOperator: PicklistOperators @fieldCategory\n MultiPicklistOperator: MultiPicklistOperators @fieldCategory\n GeolocationOperator: GeolocationOperators @fieldCategory\n}\n\ntype TimeValue implements FieldValue {\n value: Time\n displayValue: String\n format: String\n}\n\ninput GeolocationOperators {\n lt: GeolocationInput\n gt: GeolocationInput\n}\n\ntype PicklistAggregate implements FieldValue {\n value: Picklist\n displayValue: String\n count: LongValue\n countDistinct: LongValue\n grouping: IntValue\n label: String\n max: PicklistValue\n min: PicklistValue\n}\n\ninput LatitudeOperators {\n eq: Latitude\n ne: Latitude\n lt: Latitude\n gt: Latitude\n lte: Latitude\n gte: Latitude\n in: [Latitude]\n nin: [Latitude]\n}\n\ninput RecordUpdateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype DateTimeValue implements FieldValue {\n value: DateTime\n displayValue: String\n format: String\n}\n\ninput RecordDeleteInput {\n Id: IdOrRef!\n}\n\nenum __DirectiveLocation {\n QUERY\n MUTATION\n FIELD\n FRAGMENT_DEFINITION\n FRAGMENT_SPREAD\n INLINE_FRAGMENT\n SCHEMA\n SCALAR\n OBJECT\n FIELD_DEFINITION\n ARGUMENT_DEFINITION\n INTERFACE\n UNION\n ENUM\n ENUM_VALUE\n INPUT_OBJECT\n INPUT_FIELD_DEFINITION\n}\n\ntype IntAggregate implements FieldValue {\n value: Int\n displayValue: String\n avg: DoubleValue\n count: LongValue\n countDistinct: LongValue\n format: String\n grouping: IntValue\n max: IntValue\n min: IntValue\n sum: LongValue\n}\n\ntype ListOrder {\n fieldApiName: String!\n sortDirection: ResultOrder\n}\n\ntype RecordAggregate @generic {\n ApiName: String!\n BooleanAggregate: BooleanAggregate @fieldCategory\n CurrencyAggregate: CurrencyAggregate @fieldCategory\n DateAggregate: DateAggregate @fieldCategory\n DoubleAggregate: DoubleAggregate @fieldCategory\n EmailAggregate: EmailAggregate @fieldCategory\n IDAggregate: IDAggregate @fieldCategory\n IntAggregate: IntAggregate @fieldCategory\n LatitudeAggregate: LatitudeAggregate @fieldCategory\n LongitudeAggregate: LongitudeAggregate @fieldCategory\n LongAggregate: LongAggregate @fieldCategory\n PercentAggregate: PercentAggregate @fieldCategory\n PhoneNumberAggregate: PhoneNumberAggregate @fieldCategory\n PicklistAggregate: PicklistAggregate @fieldCategory\n StringAggregate: StringAggregate @fieldCategory\n TextAreaAggregate: TextAreaAggregate @fieldCategory\n TimeAggregate: TimeAggregate @fieldCategory\n UrlAggregate: UrlAggregate @fieldCategory\n parentRelationship: RecordAggregate @fieldCategory\n polymorphicParentRelationship: PolymorphicAggregateParentRelationship @fieldCategory\n}\n\ntype JSONValue implements FieldValue {\n value: JSON\n displayValue: String\n}\n\ntype EmailValue implements FieldValue {\n value: Email\n displayValue: String\n}\n\ntype Setup__Setup {\n query: Setup__SetupQuery!\n aggregate: Setup__SetupQueryAggregate!\n}\n\ntype Setup__SetupAggregateConnection @generic {\n edges: [Setup__SetupAggregateEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n}\n\ninput Setup__SetupGroupBy @generic {\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableField: GroupByClause @fieldCategory\n groupableParentRelationship: Setup__SetupGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype Setup__SetupAggregateEdge @generic {\n cursor: String!\n node: Setup__SetupRecordResult\n}\n\ninput Setup__SetupAggregateOrderBy @generic {\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableParentRelationship: Setup__SetupAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: Setup__SetupPolymorphicParentRelationshipOrderBy @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n type: String\n}\n\n\nenum AggregateOrderByStringFunction {\n COUNT\n COUNT_DISTINCT\n MAX\n MIN\n}\n\ntype LongValue implements FieldValue {\n value: Long\n displayValue: String\n format: String\n}\n\ninput DateFunctionInput {\n value: LongOperators\n convertTimezoneValue: LongOperators\n}\n\n# Mutations aren't supported yet.\n#type Mutation {\n# uiapi(input: UIAPIMutationsInput): UIAPIMutations!\n#}\n\ntype DependentField {\n controllingField: String!\n dependentFields: [String]!\n}\n\ninput LongTextAreaOperators {\n eq: LongTextArea\n ne: LongTextArea\n like: LongTextArea\n lt: LongTextArea\n gt: LongTextArea\n lte: LongTextArea\n gte: LongTextArea\n in: [LongTextArea]\n nin: [LongTextArea]\n}\n\nenum __TypeKind {\n SCALAR\n OBJECT\n INTERFACE\n UNION\n ENUM\n INPUT_OBJECT\n LIST\n NON_NULL\n}\n\ntype Setup__SetupConnection @generic {\n edges: [Setup__SetupEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype PercentValue implements FieldValue {\n value: Percent\n displayValue: String\n format: String\n}\n\ninput DateTimeOperators {\n eq: DateTimeInput\n ne: DateTimeInput\n lt: DateTimeInput\n gt: DateTimeInput\n lte: DateTimeInput\n gte: DateTimeInput\n in: [DateTimeInput]\n nin: [DateTimeInput]\n DAY_IN_WEEK: DateFunctionInput\n DAY_IN_MONTH: DateFunctionInput\n DAY_IN_YEAR: DateFunctionInput\n WEEK_IN_MONTH: DateFunctionInput\n WEEK_IN_YEAR: DateFunctionInput\n CALENDAR_MONTH: DateFunctionInput\n CALENDAR_QUARTER: DateFunctionInput\n CALENDAR_YEAR: DateFunctionInput\n FISCAL_MONTH: DateFunctionInput\n FISCAL_QUARTER: DateFunctionInput\n FISCAL_YEAR: DateFunctionInput\n DAY_ONLY: DateTimeFunctionInput\n HOUR_IN_DAY: DateFunctionInput\n}\n\ninput NoFunctionAggregateOrderByClause {\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype BooleanAggregate implements FieldValue {\n value: Boolean\n displayValue: String\n grouping: IntValue\n}\n\ntype RecordQueryAggregate {\n # RecordScope is replaced with String\n recordQueryAggregate(after: String, first: Int, groupBy: RecordGroupBy, orderBy: RecordAggregateOrderBy, scope: String @fieldCategory, upperBound: Int, where: RecordFilter): RecordAggregateConnection @fieldCategory\n}\n\ninput RecordAggregateOrderBy @generic {\n orderableField: NoFunctionAggregateOrderByClause @fieldCategory\n orderableGeolocationField: OrderByGeolocationClause @fieldCategory\n orderableNumberField: AggregateOrderByNumberClause @fieldCategory\n orderableParentRelationship: RecordAggregateOrderBy @fieldCategory\n orderablePolymorphicParentRelationship: PolymorphicParentRelationshipOrderBy @fieldCategory\n orderableStringField: AggregateOrderByStringClause @fieldCategory\n type: String\n}\n\ntype RecordConnection @generic {\n edges: [RecordEdge]\n pageInfo: PageInfo!\n totalCount: Int!\n pageResultCount: Int!\n}\n\ntype FilteredLookupInfo {\n controllingFields: [String]!\n dependent: Boolean!\n optionalFilter: Boolean!\n}\n\ninput PhoneNumberOperators {\n eq: PhoneNumber\n ne: PhoneNumber\n like: PhoneNumber\n lt: PhoneNumber\n gt: PhoneNumber\n lte: PhoneNumber\n gte: PhoneNumber\n in: [PhoneNumber]\n nin: [PhoneNumber]\n}\n\ntype ObjectInfo {\n ApiName: String!\n childRelationships: [ChildRelationship]!\n createable: Boolean!\n custom: Boolean!\n defaultRecordTypeId: ID\n deletable: Boolean!\n dependentFields: [DependentField]!\n feedEnabled: Boolean!\n fields: [Field]!\n keyPrefix: String\n label: String\n labelPlural: String\n layoutable: Boolean!\n mruEnabled: Boolean!\n nameFields: [String]!\n queryable: Boolean!\n recordTypeInfos: [RecordTypeInfo]!\n searchable: Boolean!\n themeInfo: ThemeInfo\n updateable: Boolean!\n locale: String\n}\n\ninput LongitudeOperators {\n eq: Longitude\n ne: Longitude\n lt: Longitude\n gt: Longitude\n lte: Longitude\n gte: Longitude\n in: [Longitude]\n nin: [Longitude]\n}\n\ninput RecordCreateRepresentation @generic {\n Int: Int @fieldCategory\n String: String @fieldCategory\n Boolean: Boolean @fieldCategory\n ID: IdOrRef @fieldCategory\n DateTime: DateTime @fieldCategory\n Time: Time @fieldCategory\n Date: Date @fieldCategory\n TextArea: TextArea @fieldCategory\n LongTextArea: LongTextArea @fieldCategory\n RichTextArea: RichTextArea @fieldCategory\n PhoneNumber: PhoneNumber @fieldCategory\n Email: Email @fieldCategory\n Url: Url @fieldCategory\n EncryptedString: EncryptedString @fieldCategory\n Currency: Currency @fieldCategory\n Longitude: Longitude @fieldCategory\n Latitude: Latitude @fieldCategory\n Picklist: Picklist @fieldCategory\n MultiPicklist: MultiPicklist @fieldCategory\n Long: Long @fieldCategory\n Double: Double @fieldCategory\n Percent: Percent @fieldCategory\n Base64: Base64 @fieldCategory\n JSON: JSON @fieldCategory\n}\n\ntype Field {\n ApiName: String!\n calculated: Boolean!\n compound: Boolean!\n compoundComponentName: String\n compoundFieldName: String\n controllerName: String\n controllingFields: [String]!\n createable: Boolean!\n custom: Boolean!\n dataType: DataType\n extraTypeInfo: FieldExtraTypeInfo\n filterable: Boolean!\n filteredLookupInfo: FilteredLookupInfo\n highScaleNumber: Boolean!\n htmlFormatted: Boolean!\n inlineHelpText: String\n label: String\n nameField: Boolean!\n polymorphicForeignKey: Boolean!\n precision: Int\n reference: Boolean!\n referenceTargetField: String\n referenceToInfos: [ReferenceToInfo]!\n relationshipName: String\n required: Boolean!\n scale: Int\n searchPrefilterable: Boolean\n sortable: Boolean!\n updateable: Boolean!\n}\n\nenum FieldExtraTypeInfo {\n IMAGE_URL\n EXTERNAL_LOOKUP\n INDIRECT_LOOKUP\n PERSONNAME\n SWITCHABLE_PERSONNAME\n PLAINTEXTAREA\n RICHTEXTAREA\n}\n\ntype RateLimit {\n cost: Long\n limit: Long\n remaining: Long\n resetAt: DateTime\n}\n\ninput DateRange {\n last_n_days: Int\n next_n_days: Int\n last_n_weeks: Int\n next_n_weeks: Int\n last_n_months: Int\n next_n_months: Int\n last_n_quarters: Int\n next_n_quarters: Int\n last_n_fiscal_quarters: Int\n next_n_fiscal_quarters: Int\n last_n_years: Int\n next_n_years: Int\n last_n_fiscal_years: Int\n next_n_fiscal_years: Int\n n_days_ago: Int\n n_weeks_ago: Int\n n_months_ago: Int\n n_quarters_ago: Int\n n_years_ago: Int\n n_fiscal_quarters_ago: Int\n n_fiscal_years_ago: Int\n}\n\ntype UIAPIMutations {\n recordCreate(input: RecordCreateInput!): RecordCreatePayload @fieldCategory\n recordDelete(input: RecordDeleteInput!): RecordDeletePayload @fieldCategory\n recordUpdate(input: RecordUpdateInput!): RecordUpdatePayload @fieldCategory\n}\n\ninput DateTimeFunctionInput {\n value: DatePrimitiveOperators\n convertTimezoneValue: DatePrimitiveOperators\n}\n\ntype Base64Value implements FieldValue {\n value: Base64\n displayValue: String\n}\n\ninput IntegerOperators {\n eq: Int\n ne: Int\n lt: Int\n gt: Int\n lte: Int\n gte: Int\n in: [Int]\n nin: [Int]\n}\n\ntype EncryptedStringValue implements FieldValue {\n value: EncryptedString\n displayValue: String\n}\n\ninterface Record {\n Id: ID!\n ApiName: String!\n WeakEtag: Long!\n DisplayValue: String\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n SystemModstamp: DateTimeValue\n RecordTypeId(fallback: Boolean): IDValue\n}\n\ninput PolymorphicParentRelationshipRecordFilter @generic {\n RecordFilter: RecordFilter @fieldCategory\n}\n\ninput AggregateOrderByNumberClause {\n function: AggregateOrderByNumberFunction\n order: ResultsOrder\n nulls: NullsOrder\n}\n\ntype __Schema {\n types: [__Type!]!\n queryType: __Type!\n mutationType: __Type\n directives: [__Directive!]!\n subscriptionType: __Type\n}\n\ninput Setup__SetupPolymorphicParentRelationshipRecordFilter @generic {\n Setup__SetupFilter: Setup__SetupFilter @fieldCategory\n}\n\nunion Setup__SetupPolymorphicAggregateParentRelationship @generic = Setup__SetupRecordAggregate\n\ninput Setup__SetupPolymorphicParentRelationshipGroupBy @generic {\n Setup__SetupGroupBy: Setup__SetupGroupBy @fieldCategory\n}\n\ninput Setup__SetupPolymorphicParentRelationshipOrderBy @generic {\n Setup__SetupAggregateOrderBy: Setup__SetupAggregateOrderBy @fieldCategory\n}\n\ntype CompoundField @generic {\n IntValue: IntValue @fieldCategory\n StringValue: StringValue @fieldCategory\n BooleanValue: BooleanValue @fieldCategory\n IDValue: IDValue @fieldCategory\n DateTimeValue: DateTimeValue @fieldCategory\n TimeValue: TimeValue @fieldCategory\n DateValue: DateValue @fieldCategory\n TextAreaValue: TextAreaValue @fieldCategory\n LongTextAreaValue: LongTextAreaValue @fieldCategory\n RichTextAreaValue: RichTextAreaValue @fieldCategory\n PhoneNumberValue: PhoneNumberValue @fieldCategory\n EmailValue: EmailValue @fieldCategory\n UrlValue: UrlValue @fieldCategory\n EncryptedStringValue: EncryptedStringValue @fieldCategory\n CurrencyValue: CurrencyValue @fieldCategory\n LongitudeValue: LongitudeValue @fieldCategory\n LatitudeValue: LatitudeValue @fieldCategory\n PicklistValue: PicklistValue @fieldCategory\n MultiPicklistValue: MultiPicklistValue @fieldCategory\n LongValue: LongValue @fieldCategory\n DoubleValue: DoubleValue @fieldCategory\n PercentValue: PercentValue @fieldCategory\n Base64Value: Base64Value @fieldCategory\n JSONValue: JSONValue @fieldCategory\n}\n\ninput RecordUpdateInput @generic {\n Id: IdOrRef!\n record: RecordUpdateRepresentation! @fieldCategory\n}\n\ninput DateTimeInput {\n value: DateTime\n literal: DateLiteral\n range: DateRange\n}\n\ntype ChildRelationship {\n childObjectApiName: String!\n fieldName: String\n junctionIdListNames: [String]!\n junctionReferenceTo: [String]!\n relationshipName: String\n objectInfo: ObjectInfo\n}\n\ntype RecordResult @generic {\n aggregate: RecordAggregate\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\ntype CurrencyValue implements FieldValue {\n value: Currency\n displayValue: String\n format: String\n}\n\ninput DateInput {\n value: Date\n literal: DateLiteral\n range: DateRange\n}\n\ninput RecordGroupBy @generic {\n groupableField: GroupByClause @fieldCategory\n groupableDateField: GroupByDateFunction @fieldCategory\n groupableParentRelationship: RecordGroupBy @fieldCategory\n groupablePolymorphicParentRelationship: PolymorphicParentRelationshipGroupBy @fieldCategory\n type: GroupByType = GROUP_BY\n}\n\ntype DateFunctionAggregation {\n value: Long\n format: String\n}\n\ntype RecordQuery {\n recordQuery(after: String, first: Int, orderBy: RecordOrderBy, scope: String @fieldCategory, upperBound: Int, where: RecordFilter): RecordConnection @fieldCategory\n}\n\n# add browse family schema\ntype Analytics__Analytics {\n # assetTypes: [AnalyticsAssetType], but AnalyticsAssetType is an empty enum\n browse(after: String, assetTypes: [String], first: Int, orderBy: Analytics__AnalyticsOrderBy, where: Analytics__AnalyticsFilter): Analytics__AnalyticsBrowse!\n # Add other fields here if needed\n}\n\n# enum AnalyticsAssetType @generic {\n# }\n\ntype Analytics__AnalyticsBrowse {\n edges: [Analytics__AnalyticsEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__AnalyticsEdge {\n node: Analytics__AnalyticsRepresentation\n cursor: String!\n}\n\ninterface Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n}\n\ntype Analytics__DataspaceRepresentation {\n Id: ID!\n ApiName: String!\n MasterLabel: String\n DeveloperName: String\n}\n\ntype Analytics__AnalyticsRepresentation implements Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n}\n\ntype Analytics__SemanticDefinition implements Analytics__AnalyticsRepresentationInterface {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n NamespacePrefix: StringValue\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n SubMetrics: Analytics__SemanticSubMetricDefinitionConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n}\n\ninput Analytics__AnalyticsOrderBy {\n MasterLabel: Analytics__OrderByInput\n Id: Analytics__OrderByInput\n ApiName: Analytics__OrderByInput\n CreatedById: Analytics__OrderByInput\n CreatedDate: Analytics__OrderByInput\n LastModifiedDate: Analytics__OrderByInput\n LastModifiedById: Analytics__OrderByInput\n}\n\ninput Analytics__OrderByInput {\n order: Analytics__SortEnumType\n}\n\nenum Analytics__SortEnumType {\n ASC\n DESC\n}\n\ninput Analytics__AnalyticsFilter {\n Id: Setup__IdOperators\n MasterLabel: StringOperators\n DeveloperName: StringOperators\n NamespacePrefix: StringOperators\n CreatedById: Setup__IdOperators\n CreatedDate: DateTimeOperators\n LastModifiedById: Setup__IdOperators\n LastModifiedDate: DateTimeOperators\n and: [Analytics__AnalyticsFilter]\n or: [Analytics__AnalyticsFilter]\n not: Analytics__AnalyticsFilter\n}\n\ntype Analytics__AnalyticsWorkspaceAssetConnection {\n edges: [Analytics__AnalyticsWorkspaceAssetEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__AnalyticsWorkspaceAssetEdge {\n node: Analytics__AnalyticsWorkspaceAsset\n cursor: String!\n}\n\ntype Analytics__AnalyticsWorkspaceAsset {\n AnalyticsWorkspace: Analytics__AnalyticsWorkspace\n AssetUsageType: PicklistValue\n ActivePromotionRequestId: IDValue\n}\n\ntype Analytics__AnalyticsWorkspace {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionConnection {\n edges: [Analytics__SemanticSubMetricDefinitionEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticSubMetricDefinitionEdge {\n node: Analytics__SemanticSubMetricDefinitionRepresentation\n cursor: String!\n}\n\ntype Analytics__SemanticSubMetricDefinitionRepresentation {\n Id: ID!\n ApiName: String!\n}\n\ntype Analytics__SemanticModel {\n MasterLabel: StringValue\n DeveloperName: StringValue\n CreatedById: IDValue\n LastModifiedById: IDValue\n LastModifiedDate: DateTimeValue\n CreatedDate: DateTimeValue\n Id: ID!\n ApiName: String!\n AnalyticsWorkspaces: Analytics__AnalyticsWorkspaceAssetConnection\n NamespacePrefix: StringValue\n RelatedModel: Analytics__SemanticModelRelatedModelConnection\n Dataspaces: [Analytics__DataspaceRepresentation]\n RecordOperations: [String]\n}\n\ntype Analytics__SemanticModelRelatedModelConnection {\n edges: [Analytics__SemanticModelRelatedModelEdge]\n totalCount: Int!\n pageResultCount: Int!\n pageInfo: PageInfo!\n}\n\ntype Analytics__SemanticModelRelatedModelEdge {\n node: Analytics__SemanticModelRelatedModelRepresentation\n cursor: String!\n}\n\ntype Analytics__SemanticModelRelatedModelRepresentation {\n Id: ID!\n ApiName: String!\n SemanticModelId: IDValue\n RelatedSemanticModel: Analytics__SemanticModel\n}\n\ndirective @generic on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT\ndirective @fieldCategory on FIELD_DEFINITION | ARGUMENT_DEFINITION | INPUT_FIELD_DEFINITION | ENUM_VALUE\ndirective @category(name: String!) on FIELD\n";
47252
47542
 
47253
47543
  // Define additional schema that is missing from uiapi that we use in local evaluation
47254
47544
  const additionalSchemaDefinitions = /* GraphQL */ `
@@ -51097,211 +51387,6 @@ class NimbusDraftQueue {
51097
51387
  }
51098
51388
  }
51099
51389
 
51100
- function attachObserversToAdapterRequestContext(observers, adapterRequestContext) {
51101
- if (adapterRequestContext === undefined) {
51102
- return { eventObservers: observers };
51103
- }
51104
- if (adapterRequestContext.eventObservers === undefined) {
51105
- return { ...adapterRequestContext, eventObservers: observers };
51106
- }
51107
- return {
51108
- ...adapterRequestContext,
51109
- eventObservers: adapterRequestContext.eventObservers.concat(observers),
51110
- };
51111
- }
51112
- /**
51113
- * Use this method to sanitize the unknown error object when
51114
- * we are unsure of the type of the error thrown
51115
- *
51116
- * @param err Unknown object to sanitize
51117
- * @returns an instance of error
51118
- */
51119
- function normalizeError(err) {
51120
- if (err instanceof Error) {
51121
- return err;
51122
- }
51123
- else if (typeof err === 'string') {
51124
- return new Error(err);
51125
- }
51126
- return new Error(stringify$2(err));
51127
- }
51128
-
51129
- const O11Y_NAMESPACE_LDS_MOBILE = 'lds-mobile';
51130
- // metrics
51131
- /** GraphQL */
51132
- const GRAPHQL_EVAL_ERROR = 'gql-eval-error';
51133
- const GRAPHQL_EVAL_DB_READ_DURATION = 'gql-eval-db-read-duration';
51134
- const GRAPHQL_EVAL_ROOT_QUERY_COUNT = 'gql-eval-root-query-count';
51135
- const GRAPHQL_EVAL_TOTAL_QUERY_COUNT = 'gql-eval-total-query-count';
51136
- const GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT = 'gql-eval-max-child-count';
51137
- const GRAPHQL_EVAL_QUERY_RECORD_COUNT = 'gql-eval-query-record-count';
51138
- const GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED = 'gql-snapshot-refresh-undefined';
51139
- /** Draft Queue */
51140
- const DRAFT_QUEUE_STATE_STARTED = 'draft-queue-state-started';
51141
- const DRAFT_QUEUE_STATE_ERROR = 'draft-queue-state-error';
51142
- const DRAFT_QUEUE_STATE_WAITING = 'draft-queue-state-waiting';
51143
- const DRAFT_QUEUE_STATE_STOPPED = 'draft-queue-state-stopped';
51144
- const DRAFT_QUEUE_ACTION_ADDED = 'draft-queue-action-added';
51145
- const DRAFT_QUEUE_ACTION_UPLOADING = 'draft-queue-action-uploading';
51146
- const DRAFT_QUEUE_ACTION_COMPLETED = 'draft-queue-action-completed';
51147
- const DRAFT_QUEUE_ACTION_DELETED = 'draft-queue-action-deleted';
51148
- const DRAFT_QUEUE_ACTION_UPDATED = 'draft-queue-action-updated';
51149
- const DRAFT_QUEUE_ACTION_FAILED = 'draft-queue-action-failed';
51150
- const DRAFT_QUEUE_TOTAL_MERGE_ACTIONS_CALLS = 'draft-queue-total-mergeActions-calls';
51151
- /** Content Document */
51152
- const CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS = 'content-document-version-total-synthesize-calls';
51153
- const CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR = 'create-content-document-version-draft-synthesize-error';
51154
- /** Priming */
51155
- const PRIMING_TOTAL_SESSION_COUNT = 'priming-total-session-count';
51156
- const PRIMING_TOTAL_ERROR_COUNT = 'priming-total-error-count';
51157
- const PRIMING_TOTAL_PRIMED_COUNT = 'priming-total-primed-count';
51158
- const PRIMING_TOTAL_CONFLICT_COUNT = 'priming-total-conflict-count';
51159
- // logs
51160
- const GRAPHQL_QUERY_PARSE_ERROR = 'gql-query-parse-error';
51161
- const GRAPHQL_SQL_EVAL_PRECONDITION_ERROR = 'gql-sql-pre-eval-error';
51162
- const GRAPHQL_CREATE_SNAPSHOT_ERROR = 'gql-create-snapshot-error';
51163
- const DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR = 'draft-aware-create-content-document-and-version-error';
51164
- const ldsMobileInstrumentation = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
51165
- const nimbusLogger = typeof __nimbus !== 'undefined' &&
51166
- __nimbus.plugins !== undefined &&
51167
- __nimbus.plugins.JSLoggerPlugin !== undefined
51168
- ? __nimbus.plugins.JSLoggerPlugin
51169
- : undefined;
51170
- function reportGraphqlQueryParseError(err) {
51171
- const error = normalizeError(err);
51172
- const errorCode = GRAPHQL_QUERY_PARSE_ERROR;
51173
- // Metric
51174
- reportGraphqlAdapterError(errorCode);
51175
- // Log
51176
- ldsMobileInstrumentation.error(error, errorCode);
51177
- }
51178
- function reportGraphqlSqlEvalPreconditionError(err) {
51179
- const error = normalizeError(err);
51180
- const errorCode = GRAPHQL_SQL_EVAL_PRECONDITION_ERROR;
51181
- // Metric
51182
- reportGraphqlAdapterError(errorCode);
51183
- // Log
51184
- ldsMobileInstrumentation.error(error, errorCode);
51185
- }
51186
- function reportGraphqlCreateSnapshotError(err) {
51187
- const error = normalizeError(err);
51188
- const errorCode = GRAPHQL_CREATE_SNAPSHOT_ERROR;
51189
- // Metric
51190
- reportGraphqlAdapterError(errorCode);
51191
- // Log
51192
- ldsMobileInstrumentation.error(error, errorCode);
51193
- }
51194
- function reportGraphQlEvalDbReadDuration(duration) {
51195
- ldsMobileInstrumentation.trackValue(GRAPHQL_EVAL_DB_READ_DURATION, duration);
51196
- }
51197
- function reportGraphqlAdapterError(errorCode) {
51198
- // Increment overall count with errorCode as tag
51199
- ldsMobileInstrumentation.incrementCounter(GRAPHQL_EVAL_ERROR, 1, true, { errorCode });
51200
- }
51201
- function reportGraphqlQueryInstrumentation(data) {
51202
- const queryBuckets = [1, 2, 3, 4, 5, 10, 20, 50, 100];
51203
- const recordBuckets = [
51204
- 1, 5, 10, 20, 50, 100, 1000, 2000, 5000, 10000, 50000, 100000, 1000000,
51205
- ];
51206
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_ROOT_QUERY_COUNT, data.rootQueryCount, queryBuckets);
51207
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_TOTAL_QUERY_COUNT, data.totalQueryCount, queryBuckets);
51208
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_MAX_CHILD_RELATIONSHIPS_COUNT, data.maxChildRelationships, queryBuckets);
51209
- ldsMobileInstrumentation.bucketValue(GRAPHQL_EVAL_QUERY_RECORD_COUNT, data.requestedRecordCount, recordBuckets);
51210
- }
51211
- function incrementGraphQLRefreshUndfined() {
51212
- ldsMobileInstrumentation.incrementCounter(GRAPHQL_SNAPSHOT_REFRESH_UNDEFINED);
51213
- }
51214
- function reportDraftActionEvent(state, draftCount, message) {
51215
- if (nimbusLogger) {
51216
- nimbusLogger.logInfo(`Draft action event: ${state}, depth: ${draftCount}${message ? `, message: ${message}` : ''}`);
51217
- }
51218
- switch (state) {
51219
- case 'added':
51220
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_ADDED);
51221
- break;
51222
- case 'uploading':
51223
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPLOADING);
51224
- break;
51225
- case 'completed':
51226
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_COMPLETED);
51227
- break;
51228
- case 'deleted':
51229
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_DELETED);
51230
- break;
51231
- case 'failed':
51232
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_FAILED, 1, true);
51233
- break;
51234
- case 'updated':
51235
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_ACTION_UPDATED);
51236
- break;
51237
- }
51238
- }
51239
- function reportDraftQueueState(state, draftCount) {
51240
- if (nimbusLogger) {
51241
- nimbusLogger.logInfo(`Draft state changed: ${state}, depth: ${draftCount}`);
51242
- }
51243
- switch (state) {
51244
- case 'started':
51245
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STARTED);
51246
- break;
51247
- case 'error':
51248
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_ERROR, 1, true);
51249
- break;
51250
- case 'waiting':
51251
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_WAITING);
51252
- break;
51253
- case 'stopped':
51254
- ldsMobileInstrumentation.incrementCounter(DRAFT_QUEUE_STATE_STOPPED);
51255
- break;
51256
- }
51257
- }
51258
- function reportDraftAwareContentDocumentVersionSynthesizeError(err) {
51259
- let error;
51260
- if (err.body !== undefined) {
51261
- error = err.body;
51262
- }
51263
- else {
51264
- error = normalizeError(err);
51265
- }
51266
- const errorCode = DRAFT_AWARE_CREATE_CONTENT_DOCUMENT_AND_VERSION_ERROR;
51267
- const errorType = error.errorType;
51268
- const tags = {
51269
- errorCode,
51270
- };
51271
- if (errorType !== undefined) {
51272
- tags.errorType = errorType;
51273
- }
51274
- // Metric
51275
- ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_DRAFT_SYNTHESIZE_ERROR, 1, true, tags);
51276
- // Log
51277
- ldsMobileInstrumentation.error(error, errorCode);
51278
- }
51279
- function reportDraftAwareContentVersionSynthesizeCalls(mimeType) {
51280
- ldsMobileInstrumentation.incrementCounter(CREATE_CONTENT_DOCUMENT_AND_VERSION_TOTAL_SYNTHESIZE_CALLS, 1, undefined, { mimeType });
51281
- }
51282
- /** Priming */
51283
- function reportPrimingSessionCreated() {
51284
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_SESSION_COUNT, 1, undefined, {});
51285
- }
51286
- function reportPrimingError(errorType, recordCount) {
51287
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_ERROR_COUNT, recordCount, undefined, {
51288
- errorType,
51289
- });
51290
- }
51291
- function reportPrimingSuccess(recordCount) {
51292
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_PRIMED_COUNT, recordCount, undefined);
51293
- }
51294
- function reportPrimingConflict(resolutionType, recordCount) {
51295
- ldsMobileInstrumentation.incrementCounter(PRIMING_TOTAL_CONFLICT_COUNT, recordCount, undefined, {
51296
- resolutionType,
51297
- });
51298
- }
51299
- /** Network */
51300
- function reportChunkCandidateUrlLength(urlLength) {
51301
- const buckets = [8000, 10000, 12000, 14000, 16000];
51302
- ldsMobileInstrumentation.bucketValue('chunk-candidate-url-length-histogram', urlLength, buckets);
51303
- }
51304
-
51305
51390
  /**
51306
51391
  * HOF (high-order-function) that instruments any async operation. If the operation
51307
51392
  * has an error then the hasError param will be set on the call to o11y.incrementCounter
@@ -51990,6 +52075,9 @@ class LdsInternalDataTable {
51990
52075
  }
51991
52076
 
51992
52077
  const tasker = idleDetector.declareNotifierTaskMulti('NimbusSqliteStore');
52078
+ const instrumentation$2 = getInstrumentation('lds-mobile');
52079
+ const GRAPHQL_QUERY_ROOT_KEY = 'UiApi::uiapi::Query[uiapi]__uiapi__query';
52080
+ const GRAPHQL_QUERY_ROOT_METRIC_NAME = 'gql-query-root-object-size';
51993
52081
  class NimbusSqliteStore {
51994
52082
  constructor(plugin, additionalTableMap = {}) {
51995
52083
  this.plugin = plugin;
@@ -52041,6 +52129,9 @@ class NimbusSqliteStore {
52041
52129
  }
52042
52130
  const table = this.getTable(segment);
52043
52131
  const upsertOperation = table.entriesToUpsertOperations(entries, segment);
52132
+ if (entries[GRAPHQL_QUERY_ROOT_KEY]) {
52133
+ this.trackGraphQLQueryRootSize(upsertOperation);
52134
+ }
52044
52135
  return this.batchOperationAsPromise([upsertOperation]);
52045
52136
  }
52046
52137
  setMetadata(entries, segment) {
@@ -52056,7 +52147,11 @@ class NimbusSqliteStore {
52056
52147
  if (cur.type === 'setEntries') {
52057
52148
  if (keys(cur.entries).length > 0) {
52058
52149
  const table = this.getTable(cur.segment);
52059
- acc.push(table.entriesToUpsertOperations(cur.entries, cur.segment));
52150
+ const upsertOperation = table.entriesToUpsertOperations(cur.entries, cur.segment);
52151
+ if (cur.entries[GRAPHQL_QUERY_ROOT_KEY]) {
52152
+ this.trackGraphQLQueryRootSize(upsertOperation);
52153
+ }
52154
+ acc.push(upsertOperation);
52060
52155
  }
52061
52156
  }
52062
52157
  else if (cur.type === 'setMetadata') {
@@ -52141,6 +52236,19 @@ class NimbusSqliteStore {
52141
52236
  });
52142
52237
  }).finally(() => tasker.done());
52143
52238
  }
52239
+ trackGraphQLQueryRootSize(upsertOperation) {
52240
+ try {
52241
+ if (upsertOperation.type !== 'upsert') {
52242
+ return;
52243
+ }
52244
+ const row = upsertOperation.rows.find((r) => r[0] === GRAPHQL_QUERY_ROOT_KEY);
52245
+ if (!(row && row[1] && typeof row[1] === 'string')) {
52246
+ return;
52247
+ }
52248
+ instrumentation$2.trackValue(GRAPHQL_QUERY_ROOT_METRIC_NAME, row[1].length);
52249
+ }
52250
+ catch { }
52251
+ }
52144
52252
  }
52145
52253
 
52146
52254
  // These const values must be in sync with the latest
@@ -52496,6 +52604,7 @@ function generateTypedBatches(work, batchSize) {
52496
52604
  return batches;
52497
52605
  }
52498
52606
 
52607
+ const skippedCompoundFieldTypes = ['Address', 'Location'];
52499
52608
  function getMissingElementsFromSuperset(superset, subset) {
52500
52609
  return subset.filter((val) => !superset.includes(val));
52501
52610
  }
@@ -52512,6 +52621,7 @@ function buildFieldUnionArray(existingRecord, incomingRecord, objectInfo) {
52512
52621
  const allFields = Array.from(new Set([...Object.keys(existingRecord.fields), ...Object.keys(incomingRecord.fields)]));
52513
52622
  const fieldUnion = [];
52514
52623
  let includesSpanningFields = false;
52624
+ let includesSkippedFields = false;
52515
52625
  allFields.forEach((fieldName) => {
52516
52626
  const objectInfoField = objectInfo.fields[fieldName];
52517
52627
  if (objectInfoField === undefined) {
@@ -52529,10 +52639,17 @@ function buildFieldUnionArray(existingRecord, incomingRecord, objectInfo) {
52529
52639
  }
52530
52640
  }
52531
52641
  else {
52642
+ if (skippedCompoundFieldTypes.includes(objectInfo.fields[fieldName].dataType)) {
52643
+ includesSkippedFields = true;
52644
+ }
52532
52645
  fieldUnion.push(fieldName);
52533
52646
  }
52534
52647
  });
52535
- return { fields: fieldUnion, includesSpanningFields };
52648
+ return {
52649
+ fields: fieldUnion,
52650
+ includesSpanningFields,
52651
+ includesSkippedFields,
52652
+ };
52536
52653
  }
52537
52654
  /**
52538
52655
  * Merges (if possible) an incoming record from a priming session with an existing record in the durable store.
@@ -52595,9 +52712,15 @@ function mergeRecord(existingRecord, incomingRecord, objectInfo) {
52595
52712
  }
52596
52713
  else {
52597
52714
  const missingFields = getMissingElementsFromSuperset(Object.keys(incomingRecord.fields), Object.keys(existingRecord.fields));
52598
- // if the only missing fields are spanning fields and their corresponding lookup fields match, we can merge
52599
- // since none of the changed fields are part of the incoming record
52600
- if (missingFields.every((field) => {
52715
+ // tests for missing optional fields, pending fields, and spanning fields that can be merged
52716
+ const fieldIsMergeable = (field) => {
52717
+ // missing and pending fields in the existing record are mergeable
52718
+ const fieldState = existingRecord.fields[field].__state;
52719
+ if (fieldState && (fieldState.pending === true || fieldState.isMissing === true)) {
52720
+ return true;
52721
+ }
52722
+ // if the only missing fields are spanning fields and their corresponding lookup fields match, we can merge
52723
+ // since none of the changed fields are part of the incoming record
52601
52724
  const referenceFieldName = findReferenceFieldForSpanningField(field, objectInfo);
52602
52725
  if (referenceFieldName === undefined) {
52603
52726
  return false;
@@ -52606,7 +52729,8 @@ function mergeRecord(existingRecord, incomingRecord, objectInfo) {
52606
52729
  incomingRecord.fields[referenceFieldName] &&
52607
52730
  incomingRecord.fields[referenceFieldName].value ===
52608
52731
  existingRecord.fields[referenceFieldName].value);
52609
- })) {
52732
+ };
52733
+ if (missingFields.every(fieldIsMergeable)) {
52610
52734
  return {
52611
52735
  ok: true,
52612
52736
  needsWrite: true,
@@ -52626,8 +52750,8 @@ function mergeRecord(existingRecord, incomingRecord, objectInfo) {
52626
52750
  };
52627
52751
  }
52628
52752
  // If Etags do not match and the incoming record does not contain all fields, re-request the record
52629
- const { fields, includesSpanningFields } = buildFieldUnionArray(existingRecord, incomingRecord, objectInfo);
52630
- if (includesSpanningFields) {
52753
+ const { fields, includesSpanningFields, includesSkippedFields } = buildFieldUnionArray(existingRecord, incomingRecord, objectInfo);
52754
+ if (includesSpanningFields || includesSkippedFields) {
52631
52755
  return {
52632
52756
  ok: false,
52633
52757
  code: 'conflict-spanning-record',
@@ -52754,7 +52878,7 @@ class ConflictPool {
52754
52878
 
52755
52879
  const instrumentation$1 = getInstrumentation(O11Y_NAMESPACE_LDS_MOBILE);
52756
52880
  const DEFAULT_BATCH_SIZE = 500;
52757
- const DEFAULT_CONCURRENCY = 6;
52881
+ const DEFAULT_CONCURRENCY = 4;
52758
52882
  const MAX_RETRY_COUNT = 2;
52759
52883
  const SESSION_BATCH_SIZE = 'priming-session-batch-size';
52760
52884
  const SESSION_CONCURRENCY_LIMIT = 'priming-session-concurrency-limit';
@@ -52864,7 +52988,7 @@ class PrimingSession extends EventEmitter {
52864
52988
  duration: Date.now() - workTime,
52865
52989
  });
52866
52990
  for (const result of results) {
52867
- const returnedError = this.processFetchedRecords(result, abortController, stats);
52991
+ const returnedError = await this.processFetchedRecords(result, abortController, stats);
52868
52992
  if (returnedError) {
52869
52993
  errors.push(returnedError);
52870
52994
  }
@@ -52899,7 +53023,7 @@ class PrimingSession extends EventEmitter {
52899
53023
  this.enqueueBatches(batches, paginationCount + 1);
52900
53024
  }
52901
53025
  }
52902
- processFetchedRecords(result, abortController, stats) {
53026
+ async processFetchedRecords(result, abortController, stats) {
52903
53027
  if (result.ok === false) {
52904
53028
  const { error } = result;
52905
53029
  let primingError = 'unknown';
@@ -52931,59 +53055,55 @@ class PrimingSession extends EventEmitter {
52931
53055
  const { records } = result;
52932
53056
  stats.successCount = records.length;
52933
53057
  const beforeWrite = Date.now();
52934
- // dispatch the write but DO NOT wait on it to unblock the network pool
52935
- this.recordIngestor
52936
- .insertRecords(records, false)
52937
- .then(({ written, conflicted, errors }) => {
52938
- instrumentation$1.trackValue(SESSION_INGEST_WRITTEN, written.length);
52939
- instrumentation$1.trackValue(SESSION_INGEST_CONFLICTED, conflicted.length);
52940
- instrumentation$1.trackValue(SESSION_INGEST_ERRORS, errors.length);
52941
- instrumentation$1.trackValue(SESSION_INGEST_DURATION, Date.now() - beforeWrite);
52942
- stats.conflictedCount = conflicted.length;
52943
- this.emit('batch-written', {
52944
- written,
52945
- conflicted,
52946
- errors: errors.map((e) => e.ids).reduce((a, b) => a.concat(b), []),
52947
- duration: Date.now() - beforeWrite,
52948
- });
52949
- if (abortController.aborted) {
52950
- for (const id of written) {
52951
- this.retryTracker.delete(id);
52952
- }
52953
- for (const id of conflicted) {
53058
+ const { written, conflicted, errors } = await this.recordIngestor.insertRecords(records, false);
53059
+ instrumentation$1.trackValue(SESSION_INGEST_WRITTEN, written.length);
53060
+ instrumentation$1.trackValue(SESSION_INGEST_CONFLICTED, conflicted.length);
53061
+ instrumentation$1.trackValue(SESSION_INGEST_ERRORS, errors.length);
53062
+ instrumentation$1.trackValue(SESSION_INGEST_DURATION, Date.now() - beforeWrite);
53063
+ stats.conflictedCount = conflicted.length;
53064
+ this.emit('batch-written', {
53065
+ written,
53066
+ conflicted,
53067
+ errors: errors.map((e) => e.ids).reduce((a, b) => a.concat(b), []),
53068
+ duration: Date.now() - beforeWrite,
53069
+ });
53070
+ if (abortController.aborted) {
53071
+ for (const id of written) {
53072
+ this.retryTracker.delete(id);
53073
+ }
53074
+ for (const id of conflicted) {
53075
+ this.retryTracker.delete(id);
53076
+ }
53077
+ for (const error of errors) {
53078
+ for (const id of error.ids) {
52954
53079
  this.retryTracker.delete(id);
52955
53080
  }
52956
- for (const error of errors) {
52957
- for (const id of error.ids) {
52958
- this.retryTracker.delete(id);
52959
- }
52960
- }
52961
- return;
52962
53081
  }
52963
- if (errors.length > 0) {
52964
- errors.forEach(({ ids, message }) => {
52965
- this.emit('error', {
52966
- ids,
52967
- code: 'unknown',
52968
- message: message,
52969
- });
52970
- for (const id of ids) {
52971
- this.retryTracker.delete(id);
52972
- }
53082
+ return;
53083
+ }
53084
+ if (errors.length > 0) {
53085
+ errors.forEach(({ ids, message }) => {
53086
+ this.emit('error', {
53087
+ ids,
53088
+ code: 'unknown',
53089
+ message: message,
52973
53090
  });
52974
- }
52975
- // now that the records are persisted, emit the primed event
52976
- if (written.length > 0) {
52977
- this.emit('primed', Array.from(written));
52978
- for (const id of written) {
53091
+ for (const id of ids) {
52979
53092
  this.retryTracker.delete(id);
52980
53093
  }
53094
+ });
53095
+ }
53096
+ // now that the records are persisted, emit the primed event
53097
+ if (written.length > 0) {
53098
+ this.emit('primed', Array.from(written));
53099
+ for (const id of written) {
53100
+ this.retryTracker.delete(id);
52981
53101
  }
52982
- // if any records could not be written to the store because there were conflicts, handle the conflicts
52983
- if (conflicted.length > 0) {
52984
- this.handleWriteConflicts(records, conflicted, abortController);
52985
- }
52986
- });
53102
+ }
53103
+ // if any records could not be written to the store because there were conflicts, handle the conflicts
53104
+ if (conflicted.length > 0) {
53105
+ await this.handleWriteConflicts(records, conflicted, abortController);
53106
+ }
52987
53107
  }
52988
53108
  async handleWriteConflicts(records, conflicted, abortController) {
52989
53109
  const result = await this.conflictPool.enqueueConflictedRecords(records.filter((x) => conflicted.includes(x.id)), abortController);
@@ -53617,7 +53737,15 @@ class RecordLoaderSOQLComposite extends NetworkRecordLoader {
53617
53737
  if (Object.keys(recordTypeInfos).length > 1) {
53618
53738
  fieldSet.add('RecordTypeId');
53619
53739
  }
53620
- const fields = Array.from(fieldSet);
53740
+ const fields = Array.from(fieldSet).filter((field) => {
53741
+ const fieldMetadata = batch.objectInfo.fields[field];
53742
+ // skip Address and Location compound fields
53743
+ if (fieldMetadata.compound &&
53744
+ skippedCompoundFieldTypes.includes(fieldMetadata.dataType)) {
53745
+ return false;
53746
+ }
53747
+ return true;
53748
+ });
53621
53749
  // We will have SOQL format specific data types for us by adding a format() value.
53622
53750
  // The field alias will have ___display added to the end.
53623
53751
  for (const field of fieldSet) {
@@ -53636,7 +53764,6 @@ class RecordLoaderSOQLComposite extends NetworkRecordLoader {
53636
53764
  }
53637
53765
  }
53638
53766
  const query = `SELECT ${fields.join(',')} FROM ${batch.type} `;
53639
- // console.log(`DUSTIN: soql batch query: ${query}`);
53640
53767
  return query;
53641
53768
  }
53642
53769
  generateWhere(ids) {
@@ -55676,4 +55803,4 @@ register({
55676
55803
  });
55677
55804
 
55678
55805
  export { O11Y_NAMESPACE_LDS_MOBILE, getRuntime, ingest$1o as ingestDenormalizedRecordRepresentation, registerReportObserver, reportGraphqlQueryParseError };
55679
- // version: 1.354.0-dev2-be1ef0f23e
55806
+ // version: 1.354.0-dev20-152e5f8922