From bce557cc2dc767628bed6aac87301a1be7c5431b Mon Sep 17 00:00:00 2001 From: rxliuli Date: Tue, 4 Nov 2025 05:03:50 +0800 Subject: init commit --- .../tmp/src/common/ads/on-device-ad-stitch.js | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 node_modules/@jet-app/app-store/tmp/src/common/ads/on-device-ad-stitch.js (limited to 'node_modules/@jet-app/app-store/tmp/src/common/ads/on-device-ad-stitch.js') diff --git a/node_modules/@jet-app/app-store/tmp/src/common/ads/on-device-ad-stitch.js b/node_modules/@jet-app/app-store/tmp/src/common/ads/on-device-ad-stitch.js new file mode 100644 index 0000000..4cded1e --- /dev/null +++ b/node_modules/@jet-app/app-store/tmp/src/common/ads/on-device-ad-stitch.js @@ -0,0 +1,98 @@ +/** + * Performs ad stitching for Search Landing page using `AdStitcher` + */ +"use strict"; +import { isNothing, isSome } from "@jet/environment"; +import { dataFromDataContainer } from "../../foundation/media/data-structure"; +import * as adStitch from "./ad-stitcher"; +// region Constants +export const searchLandingPagePositionInfo = { + shelfIdentifier: "first", + slot: 0, +}; +/// shelf identifier for ad stitcher position info +export const searchLandingPageAdShelfIdentifier = "SLPPage"; +// region Setup +/** + * Get a positionInfo from a locationTracker and index. + * @param locationTracker A location tracker to indicate the current parsing position. + * @param index The index of the current position. + * @returns A constructed `AdStitcherPositionInfo`. + */ +export function todayPositionInfoForLocationTrackerAndIndex(locationTracker, index) { + return { + shelfIdentifier: locationTracker.rootPosition.toString(), + slot: index, + }; +} +/** + * Creates an Ad stitcher for on device adverts *specifically for the product page YMAL shelf* + * This is specific to this position as it hardcodes a shelf identifier. + * @param adResponse Ad response to configure stitcher with. + */ +export function adStitcherForOnDeviceProductPageYMALAdvertData(objectGraph, adResponse) { + var _a; + const rawPositionInfo = (_a = adResponse === null || adResponse === void 0 ? void 0 : adResponse.onDeviceAd) === null || _a === void 0 ? void 0 : _a.positionInfo; + if (isNothing(rawPositionInfo) || isNothing(adResponse)) { + return null; + } + let shelfIdentifier; + switch (adResponse.placementType) { + case "productPageYMAL": + shelfIdentifier = "customers-also-bought-apps"; + break; + case "productPageYMALDuringDownload": + shelfIdentifier = "customers-also-bought-apps-download"; + break; + default: + break; + } + if (isNothing(shelfIdentifier)) { + return null; + } + // The slot as provided by ad platforms is one-based - adjust it so we're working with zero-based numbers. + const adjustedRawSlot = rawPositionInfo.slot - 1; + const positionInfo = { + shelfIdentifier: shelfIdentifier, + slot: adjustedRawSlot, + }; + return adStitcherForOnDeviceAdvertDataAndPositionInfo(objectGraph, adResponse, positionInfo); +} +/** + * Creates an Ad stitcher for on device adverts *specifically for search landing page* + * This is specific to SLP because we have a hardcoded position. + * @param adResponse Ad response to configure stitchcher with. + * @param landingPageResponse Search page response to configure the positionInfo. + */ +export function adStitcherForOnDeviceSLPAdvertData(objectGraph, adResponse, landingPageResponse) { + var _a; + const adMeta = (landingPageResponse === null || landingPageResponse === void 0 ? void 0 : landingPageResponse.meta) || null; + const slot = (_a = adMeta === null || adMeta === void 0 ? void 0 : adMeta.adDisplayStyle) === null || _a === void 0 ? void 0 : _a.slot; + if (isSome(slot)) { + return adStitcherForOnDeviceAdvertDataAndPositionInfo(objectGraph, adResponse, { + shelfIdentifier: searchLandingPageAdShelfIdentifier, + slot: slot, + }); + } + else { + return adStitcherForOnDeviceAdvertDataAndPositionInfo(objectGraph, adResponse, searchLandingPagePositionInfo); + } +} +function adStitcherForOnDeviceAdvertDataAndPositionInfo(objectGraph, adResponse, positionInfo) { + const mediaResponse = adResponse === null || adResponse === void 0 ? void 0 : adResponse.mediaResponse; + if (isNothing(mediaResponse) || isSome(adResponse === null || adResponse === void 0 ? void 0 : adResponse.failureReason)) { + return null; + } + const stitcher = adStitch.newAdStitcher(); + /** + * Stitch ad data to first lockup + */ + const firstAdData = dataFromDataContainer(objectGraph, mediaResponse); + const firstLockupAdTask = { + data: firstAdData, + positionInfo: positionInfo, + }; + adStitch.addTask(stitcher, firstLockupAdTask); + return stitcher; +} +//# sourceMappingURL=on-device-ad-stitch.js.map \ No newline at end of file -- cgit v1.2.3