@salesforce/lds-runtime-aura 1.410.1 → 1.411.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,6 @@ import usePredictiveLoading from '@salesforce/gate/lds.usePredictiveLoading';
18
18
  import useApexPredictions from '@salesforce/gate/lds.pdl.useApexPredictions';
19
19
  import useRelatedListsPredictions from '@salesforce/gate/lds.pdl.useRelatedListsPredictions';
20
20
  import useRelatedListPlus from '@salesforce/gate/lds.pdl.useRelatedListPlus';
21
- import useCmpDefPredictions from '@salesforce/gate/lds.pdl.useCmpDefPredictions';
22
21
  import applyPredictionRequestLimit from '@salesforce/gate/lds.pdl.applyRequestLimit';
23
22
  import useLocalStorage from '@salesforce/gate/lds.pdl.useLocalStorage';
24
23
  import useOneStoreGraphql from '@salesforce/gate/lds.oneStoreGraphqlEnabled.ltng';
@@ -2703,7 +2702,7 @@ function buildServiceDescriptor$d(luvio) {
2703
2702
  },
2704
2703
  };
2705
2704
  }
2706
- // version: 1.410.1-ee98040f21
2705
+ // version: 1.411.0-8fa163ef05
2707
2706
 
2708
2707
  /*!
2709
2708
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -3056,7 +3055,7 @@ function buildServiceDescriptor$9(notifyRecordUpdateAvailable, getNormalizedLuvi
3056
3055
  },
3057
3056
  };
3058
3057
  }
3059
- // version: 1.410.1-ee98040f21
3058
+ // version: 1.411.0-8fa163ef05
3060
3059
 
3061
3060
  /*!
3062
3061
  * Copyright (c) 2022, Salesforce, Inc.,
@@ -4806,7 +4805,7 @@ function getEnvironmentSetting(name) {
4806
4805
  }
4807
4806
  return undefined;
4808
4807
  }
4809
- // version: 1.410.1-ee98040f21
4808
+ // version: 1.411.0-8fa163ef05
4810
4809
 
4811
4810
  /**
4812
4811
  * Observability / Critical Availability Program (230+)
@@ -8127,10 +8126,45 @@ class ObjectHomePage extends AbstractHomePage {
8127
8126
  }
8128
8127
  }
8129
8128
 
8129
+ var PdlPrefetcherEventType;
8130
+ (function (PdlPrefetcherEventType) {
8131
+ PdlPrefetcherEventType["STARTED_RECORDING"] = "started-recording";
8132
+ PdlPrefetcherEventType["STOPPED_RECORDING"] = "stopped-recording";
8133
+ })(PdlPrefetcherEventType || (PdlPrefetcherEventType = {}));
8134
+ class PrefetcherEventEmitter {
8135
+ constructor() {
8136
+ this.listeners = new Map();
8137
+ }
8138
+ subscribeTo(type, listener) {
8139
+ const typeListeners = this.listeners.get(type) ?? [];
8140
+ typeListeners.push(listener);
8141
+ this.listeners.set(type, typeListeners);
8142
+ return () => {
8143
+ const currentListeners = this.listeners.get(type) ?? [];
8144
+ this.listeners.set(type, currentListeners.filter((l) => l !== listener));
8145
+ };
8146
+ }
8147
+ emit(event) {
8148
+ const typeListeners = this.listeners.get(event.type) ?? [];
8149
+ typeListeners.forEach((listener) => {
8150
+ try {
8151
+ listener(event);
8152
+ }
8153
+ catch (error) {
8154
+ // swallow errors in production.
8155
+ if (process.env.NODE_ENV !== 'production') {
8156
+ throw error;
8157
+ }
8158
+ }
8159
+ });
8160
+ }
8161
+ }
8162
+
8130
8163
  class ApplicationPredictivePrefetcher {
8131
- constructor(context, repository, requestRunner) {
8164
+ constructor(context, repository, requestRunner, eventEmitter) {
8132
8165
  this.repository = repository;
8133
8166
  this.requestRunner = requestRunner;
8167
+ this.eventEmitter = eventEmitter;
8134
8168
  this.isRecording = false;
8135
8169
  this.totalRequestCount = 0;
8136
8170
  this.queuedPredictionRequests = [];
@@ -8144,15 +8178,26 @@ class ApplicationPredictivePrefetcher {
8144
8178
  get context() {
8145
8179
  return this._context;
8146
8180
  }
8181
+ subscribeToEvent(type, callback) {
8182
+ return this.eventEmitter.subscribeTo(type, callback);
8183
+ }
8147
8184
  async stopRecording() {
8148
8185
  this.isRecording = false;
8149
8186
  this.totalRequestCount = 0;
8150
8187
  await this.repository.flushRequestsToStorage();
8188
+ this.eventEmitter.emit({
8189
+ type: PdlPrefetcherEventType.STOPPED_RECORDING,
8190
+ page: this.page,
8191
+ });
8151
8192
  }
8152
8193
  startRecording() {
8153
8194
  this.isRecording = true;
8154
8195
  this.repository.markPageStart();
8155
8196
  this.repository.clearRequestBuffer();
8197
+ this.eventEmitter.emit({
8198
+ type: PdlPrefetcherEventType.STARTED_RECORDING,
8199
+ page: this.page,
8200
+ });
8156
8201
  }
8157
8202
  saveRequest(request) {
8158
8203
  if (!this.isRecording) {
@@ -8335,11 +8380,11 @@ function predictNonBoxcarableRequest(nonBoxcaredPredictions, requestRunner) {
8335
8380
  const DEFAULT_RECORD_TYPE_ID = '012000000000000AAA';
8336
8381
  const AURA_BOXCAR_THREADS_THRESHOLD = 3;
8337
8382
  class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher {
8338
- constructor(context, repository, requestRunner,
8383
+ constructor(context, repository, requestRunner, eventEmitter,
8339
8384
  // These strategies need to be in sync with the "predictiveDataLoadCapable" list
8340
8385
  // from scripts/lds-uiapi-plugin.js
8341
8386
  requestStrategyManager, options) {
8342
- super(context, repository, requestRunner);
8387
+ super(context, repository, requestRunner, eventEmitter);
8343
8388
  this.options = options;
8344
8389
  this.requestStrategyManager = requestStrategyManager;
8345
8390
  this.page = this.getPage();
@@ -9744,43 +9789,31 @@ function setupPredictivePrefetcher(luvio) {
9744
9789
  const prefetcherOptions = {
9745
9790
  inflightRequestLimit,
9746
9791
  };
9747
- const prefetcher = new LexPredictivePrefetcher({ context: 'unknown' }, repository, requestRunner, requestStrategyManager, prefetcherOptions);
9792
+ const eventEmitter = new PrefetcherEventEmitter();
9793
+ const prefetcher = new LexPredictivePrefetcher({ context: 'unknown' }, repository, requestRunner, eventEmitter, requestStrategyManager, prefetcherOptions);
9748
9794
  registerPrefetcher(luvio, prefetcher);
9749
9795
  if (useApexPredictions.isOpen({ fallback: false })) {
9750
9796
  registerPrefetcher$1(luvio, prefetcher);
9751
9797
  }
9752
9798
  __lexPrefetcher = prefetcher;
9753
9799
  }
9754
- function loadComponentsDefStartedOverride(...args) {
9755
- /**
9756
- * To install an override (taken from the Aura.Utils.Override):
9757
- *
9758
- * The function supplied should have the following code in it:
9759
- * ------
9760
- * var config = Array.prototype.shift.apply(arguments);
9761
- * var ret = config["fn"].apply(config["scope"], arguments);
9762
- * return ret
9763
- * ------
9764
- */
9765
- const config = Array.prototype.shift.apply(args);
9766
- const ret = config['fn'].apply(config['scope'], args);
9767
- try {
9768
- const defs = args[0] || {};
9769
- __lexPrefetcher.saveRequest({
9770
- adapterName: 'getComponentsDef',
9771
- config: defs,
9772
- });
9773
- }
9774
- catch (e) {
9775
- // dismiss any error, the activity will log it.
9776
- }
9777
- return ret;
9778
- }
9779
9800
  function saveRequestAsPrediction(request) {
9780
9801
  if (__lexPrefetcher !== undefined) {
9781
9802
  __lexPrefetcher.saveRequest(request);
9782
9803
  }
9783
9804
  }
9805
+ /**
9806
+ * Subscribes to a specific prefetcher event type.
9807
+ * @param type - The type of event to subscribe to.
9808
+ * @param callback - The callback to invoke when the specified event occurs.
9809
+ * @returns A function to unsubscribe from the prefetcher events.
9810
+ */
9811
+ function subscribeToPrefetcherEvents(type, callback) {
9812
+ if (__lexPrefetcher !== undefined) {
9813
+ return __lexPrefetcher.subscribeToEvent(type, callback);
9814
+ }
9815
+ return () => { };
9816
+ }
9784
9817
  // This is copied from lds-adapters-uiapi because the exports are totally messed up
9785
9818
  const notifyUpdateAvailableFactory = (luvio) => {
9786
9819
  return function notifyRecordUpdateAvailable(configs) {
@@ -9849,23 +9882,7 @@ function buildPredictorForContext(context) {
9849
9882
  watchPageLoadForPredictions() {
9850
9883
  // This chunk tells the prefetcher to receive events, send off any predictions we have from previous loads, then setup idle detection to stop predicting.
9851
9884
  __lexPrefetcher.startRecording();
9852
- // We only want to use cmpDef predictions on PROD code,
9853
- // as in dev, it is assumed that the definitions will change often
9854
- if (process.env.NODE_ENV === 'production') {
9855
- if (useCmpDefPredictions.isOpen({ fallback: false })) {
9856
- window['$A'].installOverride('ComponentService.loadComponentDefsStarted', loadComponentsDefStartedOverride);
9857
- }
9858
- }
9859
- onIdleDetected(() => {
9860
- __lexPrefetcher.stopRecording();
9861
- // We only want to use cmpDef predictions on PROD code,
9862
- // as in dev, it is assumed that the definitions will change often
9863
- if (process.env.NODE_ENV === 'production') {
9864
- if (useCmpDefPredictions.isOpen({ fallback: false })) {
9865
- window['$A'].uninstallOverride('ComponentService.loadComponentDefsStarted', loadComponentsDefStartedOverride);
9866
- }
9867
- }
9868
- });
9885
+ onIdleDetected(() => __lexPrefetcher.stopRecording());
9869
9886
  },
9870
9887
  runPredictions() {
9871
9888
  if (isSameContext) {
@@ -9997,5 +10014,5 @@ function ldsEngineCreator() {
9997
10014
  return { name: 'ldsEngineCreator' };
9998
10015
  }
9999
10016
 
10000
- export { LexRequestStrategy, PdlRequestPriority, buildPredictorForContext, ldsEngineCreator as default, initializeLDS, initializeOneStore, notifyUpdateAvailableFactory, registerRequestStrategy, saveRequestAsPrediction, unregisterRequestStrategy, whenPredictionsReady };
10001
- // version: 1.410.1-f2ce00a20c
10017
+ export { LexRequestStrategy, PdlPrefetcherEventType, PdlRequestPriority, buildPredictorForContext, ldsEngineCreator as default, initializeLDS, initializeOneStore, notifyUpdateAvailableFactory, registerRequestStrategy, saveRequestAsPrediction, subscribeToPrefetcherEvents, unregisterRequestStrategy, whenPredictionsReady };
10018
+ // version: 1.411.0-193e3a20c1
@@ -1,9 +1,9 @@
1
1
  import { Luvio } from '@luvio/engine';
2
2
  import { KeyParamsRecord } from '@salesforce/lds-adapters-uiapi';
3
- import { ObjectHomePageContext, type RecordHomePageContext } from './predictive-loading';
3
+ import { ObjectHomePageContext, PdlPrefetcherEventType, PrefetcherEventMap, type RecordHomePageContext } from './predictive-loading';
4
4
  import type { LexRequestStrategy } from './predictive-loading/request-strategy/lex-request-strategy';
5
5
  import { type LexRequest } from './predictive-loading/lex';
6
- export { PdlRequestPriority } from './predictive-loading';
6
+ export { PdlRequestPriority, PdlPrefetcherEventType } from './predictive-loading';
7
7
  export { LexRequestStrategy } from './predictive-loading/request-strategy/lex-request-strategy';
8
8
  /**
9
9
  * Registers a request strategy to be utilized by PDL.
@@ -19,6 +19,13 @@ export declare function registerRequestStrategy(...requestStrategy: LexRequestSt
19
19
  export declare function unregisterRequestStrategy(...requestStrategy: LexRequestStrategy[]): boolean | boolean[];
20
20
  export declare function whenPredictionsReady(callback: () => void): void;
21
21
  export declare function saveRequestAsPrediction(request: LexRequest): void;
22
+ /**
23
+ * Subscribes to a specific prefetcher event type.
24
+ * @param type - The type of event to subscribe to.
25
+ * @param callback - The callback to invoke when the specified event occurs.
26
+ * @returns A function to unsubscribe from the prefetcher events.
27
+ */
28
+ export declare function subscribeToPrefetcherEvents<T extends PdlPrefetcherEventType>(type: T, callback: (event: PrefetcherEventMap[T]) => void): () => void;
22
29
  export declare const notifyUpdateAvailableFactory: (luvio: Luvio) => (configs: Partial<KeyParamsRecord>[]) => Promise<void>;
23
30
  /**
24
31
  * @typedef {Object} RecordHomePageContext
@@ -0,0 +1,25 @@
1
+ import type { PredictivePrefetchPage } from '../pages';
2
+ export declare enum PdlPrefetcherEventType {
3
+ STARTED_RECORDING = "started-recording",
4
+ STOPPED_RECORDING = "stopped-recording"
5
+ }
6
+ export type StartedRecordingEvent = {
7
+ type: PdlPrefetcherEventType.STARTED_RECORDING;
8
+ page: PredictivePrefetchPage<any, any>;
9
+ };
10
+ export type StoppedRecordingEvent = {
11
+ type: PdlPrefetcherEventType.STOPPED_RECORDING;
12
+ page: PredictivePrefetchPage<any, any>;
13
+ };
14
+ export type PrefetcherEvent = StartedRecordingEvent | StoppedRecordingEvent;
15
+ export type PrefetcherEventMap = {
16
+ [PdlPrefetcherEventType.STARTED_RECORDING]: StartedRecordingEvent;
17
+ [PdlPrefetcherEventType.STOPPED_RECORDING]: StoppedRecordingEvent;
18
+ };
19
+ type ListenerFn<T extends PdlPrefetcherEventType> = (event: PrefetcherEventMap[T]) => void;
20
+ export declare class PrefetcherEventEmitter {
21
+ private listeners;
22
+ subscribeTo<T extends PdlPrefetcherEventType>(type: T, listener: ListenerFn<T>): () => void;
23
+ emit<T extends PdlPrefetcherEventType>(event: PrefetcherEventMap[T]): void;
24
+ }
25
+ export {};
@@ -1,2 +1,4 @@
1
1
  export * from './predictive-prefetcher';
2
2
  export * from './lex-predictive-prefetcher';
3
+ export type { PrefetcherEvent, StartedRecordingEvent, StoppedRecordingEvent, PrefetcherEventMap, } from './events';
4
+ export { PdlPrefetcherEventType } from './events';
@@ -5,11 +5,12 @@ import type { PrefetchRepository } from '../repository';
5
5
  import type { RequestEntry } from '../common';
6
6
  import type { LexContext, LexPrefetcherOptions, LexRequest } from '../lex';
7
7
  import type { RequestStrategyManager } from '../request-strategy-manager/request-strategy-manager';
8
+ import { PrefetcherEventEmitter } from './events';
8
9
  export declare class LexPredictivePrefetcher extends ApplicationPredictivePrefetcher<LexRequest, LexContext, LexDefaultPage<LexRequest, LexContext>> {
9
10
  protected options: LexPrefetcherOptions;
10
11
  page: LexDefaultPage<LexRequest, LexContext>;
11
12
  private requestStrategyManager;
12
- constructor(context: LexContext, repository: PrefetchRepository<LexRequest>, requestRunner: RequestRunner<LexRequest>, requestStrategyManager: RequestStrategyManager, options: LexPrefetcherOptions);
13
+ constructor(context: LexContext, repository: PrefetchRepository<LexRequest>, requestRunner: RequestRunner<LexRequest>, eventEmitter: PrefetcherEventEmitter, requestStrategyManager: RequestStrategyManager, options: LexPrefetcherOptions);
13
14
  getPage(): LexDefaultPage<LexRequest, LexContext>;
14
15
  getAllPageRequests(): RequestEntry<LexRequest>[];
15
16
  getPredictedRequestsOrderedByPriority(): RequestEntry<LexRequest>[];
@@ -2,18 +2,21 @@ import type { PrefetchRepository } from '../repository';
2
2
  import type { PredictivePrefetchPage } from '../pages';
3
3
  import type { RequestRunner } from '../request-runner';
4
4
  import type { BaseAdapterRequest } from '../request-strategy';
5
+ import { PrefetcherEventEmitter, PdlPrefetcherEventType, PrefetcherEventMap } from './events';
5
6
  export declare abstract class ApplicationPredictivePrefetcher<Request extends BaseAdapterRequest, Context extends Record<string, any>, Page extends PredictivePrefetchPage<Request, Context>> {
6
7
  protected repository: PrefetchRepository<Request>;
7
8
  protected requestRunner: RequestRunner<Request>;
9
+ protected eventEmitter: PrefetcherEventEmitter;
8
10
  private _context;
9
11
  isRecording: boolean;
10
12
  totalRequestCount: Number;
11
13
  page: Page;
12
14
  queuedPredictionRequests: Request[];
13
- protected constructor(context: Context, repository: PrefetchRepository<Request>, requestRunner: RequestRunner<Request>);
15
+ protected constructor(context: Context, repository: PrefetchRepository<Request>, requestRunner: RequestRunner<Request>, eventEmitter: PrefetcherEventEmitter);
14
16
  abstract getPage(): Page;
15
17
  set context(value: Context);
16
18
  get context(): Context;
19
+ subscribeToEvent<T extends PdlPrefetcherEventType>(type: T, callback: (event: PrefetcherEventMap[T]) => void): () => void;
17
20
  stopRecording(): Promise<void>;
18
21
  startRecording(): void;
19
22
  saveRequest(request: Request): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-runtime-aura",
3
- "version": "1.410.1",
3
+ "version": "1.411.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "LDS engine for Aura runtime",
6
6
  "main": "dist/ldsEngineCreator.js",
@@ -36,14 +36,14 @@
36
36
  "devDependencies": {
37
37
  "@conduit-client/service-provisioner": "3.6.3",
38
38
  "@conduit-client/tools-core": "3.6.3",
39
- "@salesforce/lds-adapters-apex": "^1.410.1",
40
- "@salesforce/lds-adapters-uiapi": "^1.410.1",
41
- "@salesforce/lds-ads-bridge": "^1.410.1",
42
- "@salesforce/lds-aura-storage": "^1.410.1",
43
- "@salesforce/lds-bindings": "^1.410.1",
44
- "@salesforce/lds-instrumentation": "^1.410.1",
45
- "@salesforce/lds-network-aura": "^1.410.1",
46
- "@salesforce/lds-network-fetch": "^1.410.1",
39
+ "@salesforce/lds-adapters-apex": "^1.411.0",
40
+ "@salesforce/lds-adapters-uiapi": "^1.411.0",
41
+ "@salesforce/lds-ads-bridge": "^1.411.0",
42
+ "@salesforce/lds-aura-storage": "^1.411.0",
43
+ "@salesforce/lds-bindings": "^1.411.0",
44
+ "@salesforce/lds-instrumentation": "^1.411.0",
45
+ "@salesforce/lds-network-aura": "^1.411.0",
46
+ "@salesforce/lds-network-fetch": "^1.411.0",
47
47
  "jwt-encode": "1.0.1"
48
48
  },
49
49
  "dependencies": {
@@ -73,10 +73,10 @@
73
73
  "@luvio/network-adapter-composable": "0.158.7",
74
74
  "@luvio/network-adapter-fetch": "0.158.7",
75
75
  "@lwc/state": "^0.23.0",
76
- "@salesforce/lds-adapters-onestore-graphql": "^1.410.1",
77
- "@salesforce/lds-adapters-uiapi-lex": "^1.410.1",
78
- "@salesforce/lds-luvio-service": "^1.410.1",
79
- "@salesforce/lds-luvio-uiapi-records-service": "^1.410.1"
76
+ "@salesforce/lds-adapters-onestore-graphql": "^1.411.0",
77
+ "@salesforce/lds-adapters-uiapi-lex": "^1.411.0",
78
+ "@salesforce/lds-luvio-service": "^1.411.0",
79
+ "@salesforce/lds-luvio-uiapi-records-service": "^1.411.0"
80
80
  },
81
81
  "luvioBundlesize": [
82
82
  {