diff options
| author | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
|---|---|---|
| committer | rxliuli <rxliuli@gmail.com> | 2025-11-04 05:03:50 +0800 |
| commit | bce557cc2dc767628bed6aac87301a1be7c5431b (patch) | |
| tree | b51a051228d01fe3306cd7626d4a96768aadb944 /node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js | |
init commit
Diffstat (limited to 'node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js')
| -rw-r--r-- | node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js b/node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js new file mode 100644 index 0000000..02003e9 --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/personalization/on-device-personalization.js @@ -0,0 +1,134 @@ +import * as onDevicePersonalizationGroupingProcessing from "./on-device-personalization-grouping-processing"; +import * as onDevicePersonalizationProcessing from "./on-device-personalization-processing"; +import * as serverData from "../../foundation/json-parsing/server-data"; +/** + * Accepts an array of data blobs, and returns a subset of those original data blobs which is personalized to the user. + * In the case where personalization is disabled, or any personalized data blobs will instead be filtered out. + * + * @param placement Placement of the personalized items for on-device personalization + * @param dataItems The input list of data blobs. + * @param includeItemsWithNoPersonalizationData Whether to include data which no personalizationData meta is present. + * @param personalizationDataContainer The data container to use for personalizing the data. + * @param allowUnmatchedFallbackResults Whether to allow fallback results to be included in the results. This will only be utilised in order to reach a preferredResultCount. + * @param preferredResultCount The preferred number of items to be included in the results. + * @param parentAppId An optional appID, which is the parent for all the dataItems. Currently only used for search. + * @param diversify An optional flag that determines if we should diverse the personalized results on the basis of server side apps ranking + * @returns The relevant list of data blobs. + */ +export function personalizeDataItems(objectGraph, placement, dataItems, includeItemsWithNoPersonalizationData, personalizationDataContainer, allowUnmatchedFallbackResults = false, preferredResultCount, parentAppId, diversify) { + if (isPersonalizationAvailable(objectGraph)) { + switch (placement) { + case "groupingAppEvent": + return personalizeGroupingDataItems(objectGraph, dataItems, includeItemsWithNoPersonalizationData, personalizationDataContainer, diversify); + default: + return onDevicePersonalizationProcessing.personalizeDataItems(objectGraph, dataItems, personalizationDataContainer, includeItemsWithNoPersonalizationData, allowUnmatchedFallbackResults, preferredResultCount, parentAppId, diversify); + } + } + else { + return onDevicePersonalizationProcessing.removePersonalizedDataItems(objectGraph, dataItems, preferredResultCount); + } +} +/** + * Accepts an array of data blobs, and returns a subset of those original data blobs which is personalized to the user. + * In the case where personalization is disabled, or any personalized data blobs will instead be filtered out. + * + * @param dataItems The input list of data blobs. + * @param includeItemsWithNoPersonalizationData Whether to include data which no personalizationData meta is present. + * @param personalizationDataContainer The data container to use for personalizing the data. + * @param diversify An optional flag that determines if we should diverse the personalized results on the basis of server side apps ranking + * @returns The relevant list of data blobs. + */ +function personalizeGroupingDataItems(objectGraph, dataItems, includeItemsWithNoPersonalizationData, personalizationDataContainer, diversify) { + var _a, _b; + // We must filter out non app-event items in order to avoid moving their positions + // when contingent_offers_personalization is turned off + let appEventsOnlyDataItems = dataItems; + let wereItemsRemoved = false; + const nonAppEventIndexes = []; + if (!objectGraph.featureFlags.isEnabled("contingent_offers_personalization")) { + appEventsOnlyDataItems = dataItems.filter((item, index) => { + if (serverData.isDefinedNonNullNonEmpty(item.type) && item.type !== "app-events") { + nonAppEventIndexes.push(index); + return false; + } + return true; + }); + wereItemsRemoved = appEventsOnlyDataItems.length !== dataItems.length; + } + // We fetch the information regarding the segment optimizer flow from the personalization container + const personalizedMetricsData = personalizationDataContainer === null || personalizationDataContainer === void 0 ? void 0 : personalizationDataContainer.metricsData; + const useSegScores = (_a = personalizedMetricsData["use_segment_scores"]) !== null && _a !== void 0 ? _a : false; + const useOnDeviceSignals = (_b = personalizedMetricsData["use_signals"]) !== null && _b !== void 0 ? _b : false; + let personalizedResults; + if (useSegScores || useOnDeviceSignals) { + personalizedResults = onDevicePersonalizationGroupingProcessing.personalizeDataItems(objectGraph, appEventsOnlyDataItems, personalizationDataContainer, diversify); + } + else { + personalizedResults = onDevicePersonalizationProcessing.personalizeDataItems(objectGraph, appEventsOnlyDataItems, personalizationDataContainer, includeItemsWithNoPersonalizationData, null, null, null, diversify); + } + // We re-add non app-event items back into their original positions + if (wereItemsRemoved) { + const resultsArray = personalizedResults.personalizedData; + nonAppEventIndexes.forEach((index) => { + const item = dataItems[index]; + if (index < resultsArray.length) { + resultsArray.splice(index, 0, item); + } + else { + resultsArray.push(item); + } + }); + personalizedResults = { + personalizedData: resultsArray, + processingType: personalizedResults.processingType, + }; + } + return personalizedResults; +} +/** + * Convenience function for determining if data personalization is available. + */ +export function isPersonalizationAvailable(objectGraph) { + return (objectGraph.client.isiOS && + objectGraph.user.isOnDevicePersonalizationEnabled && + objectGraph.bag.enableOnDevicePersonalization); +} +/** + * Reaches down to the native client to return the current set of on device personalization data, + * restricted to a set of app IDs. + * + * @param appIds A set of appIds to restrict the personalization data to. + * @returns The relevant set of personalization data + */ +export function personalizationDataContainerForAppIds(objectGraph, appIds) { + if (!isPersonalizationAvailable(objectGraph)) { + return null; + } + if (objectGraph.host.platform === "iOS") { + return objectGraph.user.onDevicePersonalizationDataContainerForAppIds(Array.from(appIds)); + } + else { + return { + personalizationData: {}, + metricsData: null, + }; + } + return null; +} +/** + * Reaches down to the native client to return the current metrics data. + * + * @returns The current AMDClient metrics data + */ +export function metricsData(objectGraph) { + if (!isPersonalizationAvailable(objectGraph)) { + return null; + } + if (objectGraph.host.platform === "iOS") { + return objectGraph.user.onDevicePersonalizationDataContainerForAppIds([]).metricsData; + } + else { + return null; + } +} +//# sourceMappingURL=on-device-personalization.js.map
\ No newline at end of file |
