@salesforce/lds-runtime-aura 1.309.0-dev16 → 1.309.0-dev18

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.
@@ -20,6 +20,7 @@ import useRelatedListsPredictions from '@salesforce/gate/lds.pdl.useRelatedLists
20
20
  import useCmpDefPredictions from '@salesforce/gate/lds.pdl.useCmpDefPredictions';
21
21
  import applyPredictionRequestLimit from '@salesforce/gate/lds.pdl.applyRequestLimit';
22
22
  import useExactMatchesPlusGate from '@salesforce/gate/lds.pdl.useExactMatchesPlus';
23
+ import useRecordTypeId from '@salesforce/gate/lds.pdl.useRecordTypeId';
23
24
  import { GetApexWireAdapterFactory, registerPrefetcher as registerPrefetcher$1 } from 'force/ldsAdaptersApex';
24
25
  import { getRecordAvatarsAdapterFactory, getRecordAdapterFactory, coerceFieldIdArray, getRecordsAdapterFactory, getRecordActionsAdapterFactory, getObjectInfosAdapterFactory, coerceObjectIdArray, getObjectInfoAdapterFactory, coerceObjectId, getRelatedListsActionsAdapterFactory, getRelatedListInfoBatchAdapterFactory, getRelatedListRecordsBatchAdapterFactory, getRelatedListRecordsAdapterFactory, getListInfoByNameAdapterFactory, getListInfosByObjectNameAdapterFactory, getListRecordsByNameAdapterFactory, getListObjectInfoAdapterFactory, instrument, configuration, InMemoryRecordRepresentationQueryEvaluator, UiApiNamespace, RecordRepresentationRepresentationType, registerPrefetcher } from 'force/ldsAdaptersUiapi';
25
26
  import { BaseCommand, convertAuraResponseToData, convertFetchResponseToData } from 'force/luvioRuntime5';
@@ -1778,21 +1779,27 @@ const PDL_EXECUTE_ASYNC_OPTIONS = {
1778
1779
  };
1779
1780
 
1780
1781
  class PredictivePrefetchPage {
1781
- constructor(context) {
1782
+ constructor(context, similarContext) {
1782
1783
  this.context = context;
1783
- this.similarContext = undefined;
1784
+ this.similarContext = similarContext;
1785
+ }
1786
+ getExactKey() {
1787
+ return { ...this.context };
1788
+ }
1789
+ getSimilarKey() {
1790
+ return { ...this.similarContext };
1784
1791
  }
1785
1792
  }
1786
1793
 
1787
1794
  class LexDefaultPage extends PredictivePrefetchPage {
1788
- constructor(context) {
1789
- super(context);
1795
+ constructor(context, similarContext) {
1796
+ super(context, similarContext);
1790
1797
  }
1791
1798
  supportsRequest(_request) {
1792
1799
  return true;
1793
1800
  }
1794
1801
  buildSaveRequestData(request) {
1795
- return [{ context: this.context, request }];
1802
+ return [{ key: this.getExactKey(), request }];
1796
1803
  }
1797
1804
  resolveSimilarRequest(similarRequest) {
1798
1805
  return similarRequest;
@@ -2530,6 +2537,14 @@ class GetRelatedListInfoBatchRequestStrategy extends LuvioAdapterRequestStrategy
2530
2537
  buildConcreteRequest(similarRequest, _context) {
2531
2538
  return similarRequest;
2532
2539
  }
2540
+ isContextDependent(context, request) {
2541
+ // We have a higher degree of confidence of being able to use a similar request when
2542
+ // optional config is not set AND the object type of the page context is the same as the
2543
+ // object type related list is for. This approach is based heavily with early predictions
2544
+ // and the max of 12 aura requests in mind.
2545
+ return (context.objectApiName === request.config.parentObjectApiName &&
2546
+ request.config.recordTypeId === undefined);
2547
+ }
2533
2548
  canCombine(reqA, reqB) {
2534
2549
  return reqA.parentObjectApiName === reqB.parentObjectApiName;
2535
2550
  }
@@ -2658,10 +2673,13 @@ class PrefetchRepository {
2658
2673
  existingRequestEntry.requestMetadata.requestTime = requestTime;
2659
2674
  }
2660
2675
  });
2661
- const { modifyBeforeSaveHook } = this.options;
2676
+ const { modifyBeforeSaveHook, modifyPageBeforeSavingHook } = this.options;
2662
2677
  if (modifyBeforeSaveHook !== undefined) {
2663
2678
  page.requests = modifyBeforeSaveHook(page.requests);
2664
2679
  }
2680
+ if (modifyPageBeforeSavingHook !== undefined) {
2681
+ modifyPageBeforeSavingHook(page);
2682
+ }
2665
2683
  setPromises.push(this.storage.set(id, page));
2666
2684
  }
2667
2685
  this.clearRequestBuffer();
@@ -2680,10 +2698,13 @@ class PrefetchRepository {
2680
2698
  this.requestBuffer.set(identifier, batchForKey);
2681
2699
  }
2682
2700
  getPage(key) {
2683
- const identifier = stableJSONStringify$1(key);
2701
+ const identifier = this.getKeyId(key);
2684
2702
  return this.storage.get(identifier);
2685
2703
  }
2686
2704
  getPageRequests(key) {
2705
+ if (!key) {
2706
+ return [];
2707
+ }
2687
2708
  const page = this.getPage(key);
2688
2709
  if (page === undefined) {
2689
2710
  return [];
@@ -2968,18 +2989,19 @@ const RECORD_HOME_SUPPORTED_ADAPTERS = new Set([
2968
2989
  ]);
2969
2990
  class RecordHomePage extends LexDefaultPage {
2970
2991
  constructor(context, requestStrategies, options) {
2971
- super(context);
2992
+ super(context, {
2993
+ ...context,
2994
+ recordId: '*',
2995
+ });
2972
2996
  this.requestStrategies = requestStrategies;
2973
2997
  this.options = options;
2974
- const { recordId: _, ...rest } = this.context;
2975
- this.similarContext = {
2976
- recordId: '*',
2977
- ...rest,
2978
- };
2979
2998
  }
2980
2999
  supportsRequest(request) {
2981
3000
  return RECORD_HOME_SUPPORTED_ADAPTERS.has(request.adapterName);
2982
3001
  }
3002
+ getExactKey() {
3003
+ return RecordHomePage.contextToExactKey(this.context);
3004
+ }
2983
3005
  buildSaveRequestData(request) {
2984
3006
  const requestBuckets = [];
2985
3007
  const { adapterName } = request;
@@ -2989,7 +3011,7 @@ class RecordHomePage extends LexDefaultPage {
2989
3011
  }
2990
3012
  if (matchingRequestStrategy.isContextDependent(this.context, request)) {
2991
3013
  requestBuckets.push({
2992
- context: this.similarContext,
3014
+ key: this.getSimilarKey(),
2993
3015
  request: matchingRequestStrategy.transformForSaveSimilarRequest(request),
2994
3016
  });
2995
3017
  // When `options.useExactMatchesPlus` is not enabled, we can save this request on the similar bucket only
@@ -2999,7 +3021,7 @@ class RecordHomePage extends LexDefaultPage {
2999
3021
  }
3000
3022
  if (!matchingRequestStrategy.onlySavedInSimilar) {
3001
3023
  requestBuckets.push({
3002
- context: this.context,
3024
+ key: this.getExactKey(),
3003
3025
  request: matchingRequestStrategy.transformForSave(request),
3004
3026
  });
3005
3027
  }
@@ -3051,6 +3073,10 @@ class RecordHomePage extends LexDefaultPage {
3051
3073
  maybeRecordHomePageContext.recordId !== undefined &&
3052
3074
  maybeRecordHomePageContext.type === 'recordPage');
3053
3075
  }
3076
+ static contextToExactKey(context) {
3077
+ const { recordTypeId: _, ...key } = context;
3078
+ return key;
3079
+ }
3054
3080
  }
3055
3081
 
3056
3082
  const OBJECT_HOME_SUPPORTED_ADAPTERS = new Set([
@@ -3062,10 +3088,9 @@ const OBJECT_HOME_SUPPORTED_ADAPTERS = new Set([
3062
3088
  ]);
3063
3089
  class ObjectHomePage extends LexDefaultPage {
3064
3090
  constructor(context, requestStrategies, options) {
3065
- super(context);
3091
+ super(context, context);
3066
3092
  this.requestStrategies = requestStrategies;
3067
3093
  this.options = options;
3068
- this.similarContext = context;
3069
3094
  }
3070
3095
  supportsRequest(request) {
3071
3096
  return OBJECT_HOME_SUPPORTED_ADAPTERS.has(request.adapterName);
@@ -3079,7 +3104,7 @@ class ObjectHomePage extends LexDefaultPage {
3079
3104
  }
3080
3105
  if (matchingRequestStrategy.isContextDependent(this.context, request)) {
3081
3106
  requestBuckets.push({
3082
- context: this.similarContext,
3107
+ key: this.getSimilarKey(),
3083
3108
  request: matchingRequestStrategy.transformForSaveSimilarRequest(request),
3084
3109
  });
3085
3110
  // When `options.useExactMatchesPlus` is not enabled, we can save this request on the similar bucket only
@@ -3088,7 +3113,7 @@ class ObjectHomePage extends LexDefaultPage {
3088
3113
  }
3089
3114
  }
3090
3115
  requestBuckets.push({
3091
- context: this.context,
3116
+ key: this.getExactKey(),
3092
3117
  request: matchingRequestStrategy.transformForSave(request),
3093
3118
  });
3094
3119
  return requestBuckets;
@@ -3766,10 +3791,10 @@ class ApplicationPredictivePrefetcher {
3766
3791
  if (this.page.supportsRequest(request)) {
3767
3792
  const saveBuckets = this.page.buildSaveRequestData(request);
3768
3793
  saveBuckets.forEach((saveBucket) => {
3769
- const { request: requestToSave, context } = saveBucket;
3794
+ const { request: requestToSave, key } = saveBucket;
3770
3795
  // No need to differentiate from predictions requests because these
3771
3796
  // are made from the adapters factory, which are not prediction aware.
3772
- this.repository.saveRequest(context, requestToSave);
3797
+ this.repository.saveRequest(key, requestToSave);
3773
3798
  });
3774
3799
  }
3775
3800
  return Promise.resolve().then();
@@ -3777,8 +3802,8 @@ class ApplicationPredictivePrefetcher {
3777
3802
  }
3778
3803
  async predict() {
3779
3804
  const alwaysRequests = this.page.getAlwaysRunRequests();
3780
- const similarPageRequests = await this.getSimilarPageRequests();
3781
- const exactPageRequests = await this.getExactPageRequest();
3805
+ const similarPageRequests = this.getSimilarPageRequests();
3806
+ const exactPageRequests = this.getExactPageRequests();
3782
3807
  // Always requests can't be reduced in - Some of them are essential to keep the page rendering at the beginning.
3783
3808
  const reducedRequests = this.requestRunner
3784
3809
  .reduceRequests([...exactPageRequests, ...similarPageRequests])
@@ -3788,33 +3813,25 @@ class ApplicationPredictivePrefetcher {
3788
3813
  return Promise.all(predictedRequests.map((request) => this.requestRunner.runRequest(request))).then();
3789
3814
  }
3790
3815
  getPredictionSummary() {
3791
- const exactPageRequests = this.repository.getPageRequests(this.context) || [];
3792
- const similarPageRequests = this.page.similarContext !== undefined
3793
- ? this.repository.getPageRequests(this.page.similarContext)
3794
- : [];
3795
- return { exact: exactPageRequests.length, similar: similarPageRequests.length };
3816
+ return {
3817
+ exact: this.getExactPageRequests().length,
3818
+ similar: this.getSimilarPageRequests().length,
3819
+ };
3796
3820
  }
3797
3821
  hasPredictions() {
3798
3822
  const summary = this.getPredictionSummary();
3799
3823
  return summary.exact > 0 || summary.similar > 0;
3800
3824
  }
3801
3825
  getSimilarPageRequests() {
3802
- let resolvedSimilarPageRequests = [];
3803
- if (this.page.similarContext !== undefined) {
3804
- const similarPageRequests = this.repository.getPageRequests(this.page.similarContext);
3805
- if (similarPageRequests !== undefined) {
3806
- resolvedSimilarPageRequests = similarPageRequests.map((entry) => {
3807
- return {
3808
- ...entry,
3809
- request: this.page.resolveSimilarRequest(entry.request),
3810
- };
3811
- });
3812
- }
3813
- }
3814
- return resolvedSimilarPageRequests;
3826
+ return this.repository.getPageRequests(this.page.getSimilarKey()).map((entry) => {
3827
+ return {
3828
+ ...entry,
3829
+ request: this.page.resolveSimilarRequest(entry.request),
3830
+ };
3831
+ });
3815
3832
  }
3816
- getExactPageRequest() {
3817
- return this.repository.getPageRequests(this.context) || [];
3833
+ getExactPageRequests() {
3834
+ return this.repository.getPageRequests(this.page.getExactKey()) || [];
3818
3835
  }
3819
3836
  }
3820
3837
 
@@ -3877,6 +3894,7 @@ function predictComponentDefs(cmpDefPredictions, requestRunner) {
3877
3894
  const reducedPredictions = requestRunner.reduceRequests(cmpDefPredictions);
3878
3895
  reducedPredictions.map((request) => requestRunner.runRequest(request.request));
3879
3896
  }
3897
+ const DEFAULT_RECORD_TYPE_ID = '012000000000000AAA';
3880
3898
  class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher {
3881
3899
  constructor(context, repository, requestRunner,
3882
3900
  // These strategies need to be in sync with the "predictiveDataLoadCapable" list
@@ -3889,6 +3907,17 @@ class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher {
3889
3907
  }
3890
3908
  getPage() {
3891
3909
  if (RecordHomePage.handlesContext(this.context)) {
3910
+ /*
3911
+ * `recordTypeId` is required in order to create similar request keys. However, the means by which it is
3912
+ * obtained varies based on when in the app lifecycle predictions are requested.
3913
+ */
3914
+ // check context for record type
3915
+ if (!this.context.recordTypeId) {
3916
+ // don't have it (i.e., early predictions), so need try to obtain via exact matches
3917
+ const exact = this.repository.getPage(RecordHomePage.contextToExactKey(this.context));
3918
+ // use found recordTypeId, otherwise fallback to default
3919
+ this.context.recordTypeId = (exact && exact.recordTypeId) || DEFAULT_RECORD_TYPE_ID;
3920
+ }
3892
3921
  return new RecordHomePage(this.context, this.requestStrategies, this.options);
3893
3922
  }
3894
3923
  else if (ObjectHomePage.handlesContext(this.context)) {
@@ -3897,7 +3926,7 @@ class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher {
3897
3926
  return new LexDefaultPage(this.context);
3898
3927
  }
3899
3928
  getAllPageRequests() {
3900
- const exactPageRequests = this.getExactPageRequest();
3929
+ const exactPageRequests = this.getExactPageRequests();
3901
3930
  let similarPageRequests = this.getSimilarPageRequests();
3902
3931
  if (exactPageRequests.length > 0 && this.options.useExactMatchesPlus === true) {
3903
3932
  similarPageRequests = similarPageRequests.filter((requestEntry) => {
@@ -3910,7 +3939,7 @@ class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher {
3910
3939
  async predict() {
3911
3940
  const alwaysRequests = this.page.getAlwaysRunRequests();
3912
3941
  const pageRequests = this.getAllPageRequests();
3913
- // IMPORTANT: Because there's no way to diferentiate a cmpDef prediction from the page
3942
+ // IMPORTANT: Because there's no way to differentiate a cmpDef prediction from the page
3914
3943
  // requesting the cmpDef, we need to predict cmpDefs before we start watching
3915
3944
  // for predictions in the page. Having this code after an
3916
3945
  // await will make the predictions to be saved as predictions too.
@@ -4101,7 +4130,7 @@ function getEnvironmentSetting(name) {
4101
4130
  }
4102
4131
  return undefined;
4103
4132
  }
4104
- // version: 1.309.0-dev16-189d0681ed
4133
+ // version: 1.309.0-dev18-8649efafcc
4105
4134
 
4106
4135
  const forceRecordTransactionsDisabled = getEnvironmentSetting(EnvironmentSettings.ForceRecordTransactionsDisabled);
4107
4136
  //TODO: Some duplication here that can be most likely moved to a util class
@@ -4490,11 +4519,17 @@ function setupPredictivePrefetcher(luvio) {
4490
4519
  const requestRunner = new LexRequestRunner(luvio);
4491
4520
  const repository = new PrefetchRepository(storage, {
4492
4521
  modifyBeforeSaveHook: (requests) => requestRunner.reduceRequests(requests),
4522
+ modifyPageBeforeSavingHook: (page) => {
4523
+ if (RecordHomePage.handlesContext(__lexPrefetcher.context)) {
4524
+ page.recordTypeId = __lexPrefetcher.context.recordTypeId;
4525
+ }
4526
+ },
4493
4527
  });
4494
4528
  const inflightRequestLimit = applyPredictionRequestLimit.isOpen({ fallback: false })
4495
4529
  ? getInflightRequestLimit()
4496
4530
  : 1000;
4497
- const useExactMatchesPlus = useExactMatchesPlusGate.isOpen({ fallback: false });
4531
+ const useExactMatchesPlus = useExactMatchesPlusGate.isOpen({ fallback: false }) &&
4532
+ useRecordTypeId.isOpen({ fallback: false }) === false;
4498
4533
  const prefetcherOptions = {
4499
4534
  inflightRequestLimit,
4500
4535
  useExactMatchesPlus,
@@ -4580,13 +4615,12 @@ function buildPredictorForContext(context) {
4580
4615
  }
4581
4616
  const currentContext = __lexPrefetcher.context;
4582
4617
  let isSameContext = false;
4583
- if (currentContext && currentContext.type === 'recordPage') {
4584
- const rhPageContext = currentContext;
4618
+ if (RecordHomePage.handlesContext(currentContext)) {
4585
4619
  isSameContext =
4586
- rhPageContext.actionName === context.actionName &&
4587
- rhPageContext.objectApiName === context.objectApiName &&
4588
- rhPageContext.recordId === context.recordId &&
4589
- rhPageContext.type === context.type;
4620
+ currentContext.actionName === context.actionName &&
4621
+ currentContext.objectApiName === context.objectApiName &&
4622
+ currentContext.recordId === context.recordId &&
4623
+ currentContext.type === context.type;
4590
4624
  }
4591
4625
  // // This chunk configures which page we're going to use to try and preload.
4592
4626
  __lexPrefetcher.context = context;
@@ -4730,4 +4764,4 @@ function ldsEngineCreator() {
4730
4764
  }
4731
4765
 
4732
4766
  export { buildPredictorForContext, ldsEngineCreator as default, initializeLDS, initializeOneStore, whenPredictionsReady };
4733
- // version: 1.309.0-dev16-7409c81567
4767
+ // version: 1.309.0-dev18-1503ff674d
@@ -1,4 +1,4 @@
1
- import { type RecordHomePageContext } from './predictive-loading';
1
+ import type { RecordHomePageContext } from './predictive-loading';
2
2
  export declare function whenPredictionsReady(callback: () => void): void;
3
3
  /**
4
4
  * @typedef {Object} RecordHomePageContext
@@ -9,9 +9,9 @@ export type RequestEntry<Request> = {
9
9
  };
10
10
  };
11
11
  /**
12
- * Request and Context data to be saved.
12
+ * Request and context-based Key data to be saved.
13
13
  */
14
14
  export type SaveRequestData<Request, Context> = {
15
15
  request: Request;
16
- context: Context;
16
+ key: Context;
17
17
  };
@@ -2,10 +2,10 @@ import type { LexRequest } from '../prefetcher';
2
2
  import { PredictivePrefetchPage } from './predictive-prefetch-page';
3
3
  export type DefaultPageContext = Record<string, any>;
4
4
  export declare class LexDefaultPage<Request extends LexRequest, Context extends DefaultPageContext> extends PredictivePrefetchPage<Request, Context> {
5
- constructor(context: Context);
5
+ constructor(context: Context, similarContext?: Context);
6
6
  supportsRequest(_request: Request): boolean;
7
7
  buildSaveRequestData(request: Request): {
8
- context: Context;
8
+ key: Context;
9
9
  request: Request;
10
10
  }[];
11
11
  resolveSimilarRequest(similarRequest: Request): Request;
@@ -11,7 +11,6 @@ export declare const OBJECT_HOME_SUPPORTED_ADAPTERS: Set<string>;
11
11
  export declare class ObjectHomePage extends LexDefaultPage<ObjectHomePageRequest, ObjectHomePageContext> {
12
12
  private requestStrategies;
13
13
  private options;
14
- similarContext: ObjectHomePageContext;
15
14
  constructor(context: ObjectHomePageContext, requestStrategies: {
16
15
  getListInfoByName: GetListInfoByNameRequestStrategy;
17
16
  getListRecordsByName: GetListRecordsByNameRequestStrategy;
@@ -21,7 +20,7 @@ export declare class ObjectHomePage extends LexDefaultPage<ObjectHomePageRequest
21
20
  }, options: LexPrefetcherOptions);
22
21
  supportsRequest(request: LexRequest): boolean;
23
22
  buildSaveRequestData(request: ObjectHomePageRequest): {
24
- context: ObjectHomePageContext;
23
+ key: ObjectHomePageContext;
25
24
  request: any;
26
25
  }[];
27
26
  resolveSimilarRequest(similarRequest: ObjectHomePageRequest): ObjectHomePageRequest;
@@ -1,10 +1,12 @@
1
1
  import type { SaveRequestData } from '../common';
2
2
  export declare abstract class PredictivePrefetchPage<Request, Context> {
3
- context: Context;
4
- similarContext: Partial<Context> | undefined;
5
- constructor(context: Context);
3
+ protected context: Context;
4
+ protected similarContext?: Context | undefined;
5
+ protected constructor(context: Context, similarContext?: Context | undefined);
6
6
  abstract supportsRequest(request: Request): boolean;
7
7
  abstract buildSaveRequestData(request: Request): SaveRequestData<Request, Context>[];
8
8
  abstract resolveSimilarRequest(similarRequest: Request): Request;
9
9
  abstract getAlwaysRunRequests(): Request[];
10
+ getExactKey(): Context;
11
+ getSimilarKey(): Context;
10
12
  }
@@ -5,6 +5,7 @@ export declare const RECORD_HOME_SUPPORTED_ADAPTERS: Set<string>;
5
5
  export type RecordHomePageContext = {
6
6
  objectApiName: string;
7
7
  recordId: string;
8
+ recordTypeId?: string;
8
9
  actionName: string;
9
10
  type: 'recordPage';
10
11
  };
@@ -26,11 +27,11 @@ type RecordHomePageRequestStrategies = {
26
27
  export declare class RecordHomePage extends LexDefaultPage<RecordHomePageRequest, RecordHomePageContext> {
27
28
  private requestStrategies;
28
29
  private options;
29
- similarContext: RecordHomePageContext;
30
30
  constructor(context: RecordHomePageContext, requestStrategies: RecordHomePageRequestStrategies, options: LexPrefetcherOptions);
31
31
  supportsRequest(request: LexRequest): boolean;
32
+ getExactKey(): RecordHomePageContext;
32
33
  buildSaveRequestData(request: RecordHomePageRequest): {
33
- context: RecordHomePageContext;
34
+ key: RecordHomePageContext;
34
35
  request: any;
35
36
  }[];
36
37
  resolveSimilarRequest(similarRequest: RecordHomePageRequest): RecordHomePageRequest;
@@ -49,5 +50,6 @@ export declare class RecordHomePage extends LexDefaultPage<RecordHomePageRequest
49
50
  */
50
51
  shouldExecuteAlwaysRequestByThemself(): boolean;
51
52
  static handlesContext(context: LexContext): context is RecordHomePageContext;
53
+ static contextToExactKey(context: RecordHomePageContext): RecordHomePageContext;
52
54
  }
53
55
  export {};
@@ -27,7 +27,7 @@ export declare class LexPredictivePrefetcher extends ApplicationPredictivePrefet
27
27
  private requestStrategies;
28
28
  protected options: LexPrefetcherOptions;
29
29
  page: LexDefaultPage<LexRequest, LexContext>;
30
- constructor(context: LexContext, repository: PrefetchRepository, requestRunner: RequestRunner<LexRequest>, requestStrategies: {
30
+ constructor(context: LexContext, repository: PrefetchRepository<LexRequest>, requestRunner: RequestRunner<LexRequest>, requestStrategies: {
31
31
  getRecord: GetRecordRequestStrategy;
32
32
  getRecords: GetRecordsRequestStrategy;
33
33
  getRecordActions: GetRecordActionsRequestStrategy;
@@ -1,15 +1,15 @@
1
1
  import type { PrefetchRepository } from '../repository';
2
2
  import type { PredictivePrefetchPage } from '../pages';
3
3
  import type { RequestRunner } from '../request-runner';
4
- import type { RequestEntry } from '../common';
5
- export declare abstract class ApplicationPredictivePrefetcher<Request, Context extends Record<string, any>> {
6
- protected repository: PrefetchRepository;
4
+ import type { BaseAdapterRequest } from '../request-strategy';
5
+ export declare abstract class ApplicationPredictivePrefetcher<Request extends BaseAdapterRequest, Context extends Record<string, any>> {
6
+ protected repository: PrefetchRepository<Request>;
7
7
  protected requestRunner: RequestRunner<Request>;
8
8
  private _context;
9
9
  isRecording: boolean;
10
10
  page: PredictivePrefetchPage<Request, Context>;
11
11
  queuedPredictionRequests: Request[];
12
- constructor(context: Context, repository: PrefetchRepository, requestRunner: RequestRunner<Request>);
12
+ constructor(context: Context, repository: PrefetchRepository<Request>, requestRunner: RequestRunner<Request>);
13
13
  abstract getPage(): PredictivePrefetchPage<Request, Context>;
14
14
  set context(value: Context);
15
15
  get context(): Context;
@@ -22,6 +22,11 @@ export declare abstract class ApplicationPredictivePrefetcher<Request, Context e
22
22
  similar: number;
23
23
  };
24
24
  hasPredictions(): boolean;
25
- getSimilarPageRequests(): RequestEntry<Request>[];
26
- getExactPageRequest(): RequestEntry<Request>[];
25
+ getSimilarPageRequests(): {
26
+ request: Request;
27
+ requestMetadata: {
28
+ requestTime: number;
29
+ };
30
+ }[];
31
+ getExactPageRequests(): import("../common").RequestEntry<Request>[];
27
32
  }
@@ -7,23 +7,25 @@ export type History = {
7
7
  };
8
8
  export type PageEntry<Request> = {
9
9
  id: string;
10
+ recordTypeId?: string;
10
11
  requests: RequestEntry<Request>[];
11
12
  };
12
- export type PrefetchRepositoryOptions = {
13
- modifyBeforeSaveHook?: (requests: RequestEntry<any>[]) => RequestEntry<any>[];
13
+ export type PrefetchRepositoryOptions<Request> = {
14
+ modifyBeforeSaveHook?: (requests: RequestEntry<Request>[]) => RequestEntry<Request>[];
15
+ modifyPageBeforeSavingHook?: (page: PageEntry<Request>) => void;
14
16
  };
15
- export declare class PrefetchRepository {
17
+ export declare class PrefetchRepository<Request> {
16
18
  private storage;
17
19
  private options;
18
20
  private requestBuffer;
19
- constructor(storage: PrefetchStorage, options?: PrefetchRepositoryOptions);
21
+ constructor(storage: PrefetchStorage, options?: PrefetchRepositoryOptions<Request>);
20
22
  clearRequestBuffer(): void;
21
23
  pageStartTime: number;
22
24
  markPageStart(): void;
23
25
  flushRequestsToStorage(): Promise<void>;
24
26
  getKeyId(key: Key): string;
25
27
  saveRequest<Request>(key: Key, request: Request): void;
26
- getPage<Request>(key: Key): PageEntry<Request> | undefined;
27
- getPageRequests<Request>(key: Key): RequestEntry<Request>[];
28
+ getPage(key: Key): PageEntry<Request> | undefined;
29
+ getPageRequests(key: Key): RequestEntry<Request>[];
28
30
  }
29
31
  export {};
@@ -12,6 +12,7 @@ export declare class GetRelatedListInfoBatchRequestStrategy extends LuvioAdapter
12
12
  adapterName: string;
13
13
  adapterFactory: import("@luvio/engine").AdapterFactory<GetRelatedListInfoBatchConfig, import("packages/lds-adapters-uiapi/dist/es/es2018/types/src/generated/types/RelatedListInfoBatchRepresentation").RelatedListInfoBatchRepresentation>;
14
14
  buildConcreteRequest(similarRequest: GetRelatedListInfoBatchRequest, _context: GetRelatedListInfoBatchContext): GetRelatedListInfoBatchRequest;
15
+ isContextDependent(context: GetRelatedListInfoBatchContext, request: GetRelatedListInfoBatchRequest): boolean;
15
16
  canCombine(reqA: GetRelatedListInfoBatchConfig, reqB: GetRelatedListInfoBatchConfig): boolean;
16
17
  combineRequests(reqA: GetRelatedListInfoBatchConfig, reqB: GetRelatedListInfoBatchConfig): GetRelatedListInfoBatchConfig;
17
18
  }
@@ -1,5 +1,5 @@
1
1
  import type { RequestEntry } from '../common';
2
- export type BaseAdapterRequest<Config> = {
2
+ export type BaseAdapterRequest<Config = unknown> = {
3
3
  adapterName: string;
4
4
  config: Config;
5
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-aura",
3
- "version": "1.309.0-dev16",
3
+ "version": "1.309.0-dev18",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS engine for Aura runtime",
6
6
  "main": "dist/ldsEngineCreator.js",
@@ -35,15 +35,15 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "@luvio/service-broker": "5.3.2-dev2",
38
- "@salesforce/lds-adapters-apex": "^1.309.0-dev16",
39
- "@salesforce/lds-adapters-uiapi": "^1.309.0-dev16",
38
+ "@salesforce/lds-adapters-apex": "^1.309.0-dev18",
39
+ "@salesforce/lds-adapters-uiapi": "^1.309.0-dev18",
40
40
  "@salesforce/lds-adapters-uiapi-lex": "^1.302.0",
41
- "@salesforce/lds-ads-bridge": "^1.309.0-dev16",
42
- "@salesforce/lds-aura-storage": "^1.309.0-dev16",
43
- "@salesforce/lds-bindings": "^1.309.0-dev16",
44
- "@salesforce/lds-instrumentation": "^1.309.0-dev16",
45
- "@salesforce/lds-network-aura": "^1.309.0-dev16",
46
- "@salesforce/lds-network-fetch-with-jwt": "^1.309.0-dev16"
41
+ "@salesforce/lds-ads-bridge": "^1.309.0-dev18",
42
+ "@salesforce/lds-aura-storage": "^1.309.0-dev18",
43
+ "@salesforce/lds-bindings": "^1.309.0-dev18",
44
+ "@salesforce/lds-instrumentation": "^1.309.0-dev18",
45
+ "@salesforce/lds-network-aura": "^1.309.0-dev18",
46
+ "@salesforce/lds-network-fetch-with-jwt": "^1.309.0-dev18"
47
47
  },
48
48
  "dependencies": {
49
49
  "@luvio/command-aura-network": "5.3.2-dev2",
@@ -64,15 +64,15 @@
64
64
  "@luvio/service-subscription": "5.3.2-dev2",
65
65
  "@luvio/service-type-registry": "5.3.2-dev2",
66
66
  "@luvio/utils": "5.3.2-dev2",
67
- "@salesforce/lds-adapters-uiapi-lex": "^1.309.0-dev16"
67
+ "@salesforce/lds-adapters-uiapi-lex": "^1.309.0-dev18"
68
68
  },
69
69
  "luvioBundlesize": [
70
70
  {
71
71
  "path": "./dist/ldsEngineCreator.js",
72
72
  "maxSize": {
73
- "none": "178 kB",
73
+ "none": "179.1 kB",
74
74
  "min": "75 kB",
75
- "compressed": "32 kB"
75
+ "compressed": "32.1 kB"
76
76
  }
77
77
  }
78
78
  ],