Skip to content

Commit 47c4dce

Browse files
committed
Replace deepAccess with optional chaining
Closes #12543
1 parent a9958be commit 47c4dce

20 files changed

+82
-101
lines changed

libraries/appnexusUtils/anKeywords.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ export function getANMapFromOrtbSegments(ortb2) {
136136
let ortbSegsArrObj = deepAccess(ortb2, path) || [];
137137
ortbSegsArrObj.forEach(segObj => {
138138
// only read segment data from known sources
139-
const segtax = ORTB_SEGTAX_KEY_MAP[deepAccess(segObj, 'ext.segtax')];
139+
const segtax = ORTB_SEGTAX_KEY_MAP[segObj?.ext?.segtax];
140140
if (segtax) {
141141
segObj.segment.forEach(seg => {
142142
// if source was in multiple locations of ortb or had multiple segments in same area, stack them together into an array

libraries/fpdUtils/pageInfo.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import * as utils from '../../src/utils.js';
2-
31
/**
42
* get page title
53
* @returns {string}
@@ -67,7 +65,7 @@ export function getReferrer(bidRequest = {}, bidderRequest = {}) {
6765
if (bidRequest.params && bidRequest.params.referrer) {
6866
pageUrl = bidRequest.params.referrer;
6967
} else {
70-
pageUrl = utils.deepAccess(bidderRequest, 'refererInfo.page');
68+
pageUrl = bidderRequest?.refererInfo?.page;
7169
}
7270
return pageUrl;
7371
}

libraries/ortbConverter/processors/banner.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {
22
createTrackPixelHtml,
3-
deepAccess,
43
inIframe,
54
mergeDeep,
65
sizesToSizeTuples,
@@ -15,7 +14,7 @@ import {BANNER} from '../../../src/mediaTypes.js';
1514
export function fillBannerImp(imp, bidRequest, context) {
1615
if (context.mediaType && context.mediaType !== BANNER) return;
1716

18-
const bannerParams = deepAccess(bidRequest, 'mediaTypes.banner');
17+
const bannerParams = bidRequest?.mediaTypes?.banner;
1918
if (bannerParams) {
2019
const banner = {
2120
topframe: inIframe() === true ? 0 : 1

libraries/ortbConverter/processors/video.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {deepAccess, isEmpty, logWarn, mergeDeep, sizesToSizeTuples, sizeTupleToRtbSize} from '../../../src/utils.js';
1+
import {isEmpty, logWarn, mergeDeep, sizesToSizeTuples, sizeTupleToRtbSize} from '../../../src/utils.js';
22
import {VIDEO} from '../../../src/mediaTypes.js';
33

44
import {ORTB_VIDEO_PARAMS} from '../../../src/video.js';
55

66
export function fillVideoImp(imp, bidRequest, context) {
77
if (context.mediaType && context.mediaType !== VIDEO) return;
88

9-
const videoParams = deepAccess(bidRequest, 'mediaTypes.video');
9+
const videoParams = bidRequest?.mediaTypes?.video;
1010
if (!isEmpty(videoParams)) {
1111
const video = Object.fromEntries(
1212
// Parameters that share the same name & semantics between pbjs adUnits and imp.video
@@ -27,7 +27,7 @@ export function fillVideoImp(imp, bidRequest, context) {
2727

2828
export function fillVideoResponse(bidResponse, seatbid, context) {
2929
if (bidResponse.mediaType === VIDEO) {
30-
if (deepAccess(context.imp, 'video.w') && deepAccess(context.imp, 'video.h')) {
30+
if (context?.imp?.video?.w && context?.imp?.video?.h) {
3131
[bidResponse.playerWidth, bidResponse.playerHeight] = [context.imp.video.w, context.imp.video.h];
3232
}
3333

modules/criteoBidAdapter.js

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {deepAccess, deepSetValue, isArray, logError, logWarn, parseUrl, triggerPixel} from '../src/utils.js';
1+
import {deepSetValue, isArray, logError, logWarn, parseUrl, triggerPixel} from '../src/utils.js';
22
import {registerBidder} from '../src/adapters/bidderFactory.js';
33
import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js';
44
import {getStorageManager} from '../src/storageManager.js';
@@ -92,7 +92,7 @@ function imp(buildImp, bidRequest, context) {
9292
}
9393
deepSetValue(imp, 'video.ext', {
9494
context: bidRequest.mediaTypes.video.context,
95-
playersizes: parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'), parseSize),
95+
playersizes: parseSizes(bidRequest?.mediaTypes?.video?.playerSize, parseSize),
9696
plcmt: bidRequest.mediaTypes.video.plcmt,
9797
poddur: bidRequest.mediaTypes.video.adPodDurationSec,
9898
rqddurs: bidRequest.mediaTypes.video.durationRangeSec,
@@ -156,7 +156,7 @@ function request(buildRequest, imps, bidderRequest, context) {
156156
* @returns {*}
157157
*/
158158
function bidResponse(buildBidResponse, bid, context) {
159-
context.mediaType = deepAccess(bid, 'ext.mediatype');
159+
context.mediaType = bid?.ext?.mediatype;
160160
if (context.mediaType === NATIVE && typeof bid.adm_native !== 'undefined') {
161161
bid.adm = bid.adm_native;
162162
delete bid.adm_native;
@@ -165,22 +165,22 @@ function bidResponse(buildBidResponse, bid, context) {
165165
let bidResponse = buildBidResponse(bid, context);
166166
const {bidRequest} = context;
167167

168-
bidResponse.currency = deepAccess(bid, 'ext.cur')
168+
bidResponse.currency = bid?.ext?.cur;
169169

170-
if (typeof deepAccess(bid, 'ext.meta') !== 'undefined') {
170+
if (typeof bid?.ext?.meta !== 'undefined') {
171171
deepSetValue(bidResponse, 'meta', {
172172
...bidResponse.meta,
173173
...bid.ext.meta
174174
});
175175
}
176-
if (typeof deepAccess(bid, 'ext.paf.content_id') !== 'undefined') {
176+
if (typeof bid?.ext?.paf?.content_id !== 'undefined') {
177177
deepSetValue(bidResponse, 'meta.paf.content_id', bid.ext.paf.content_id)
178178
}
179179

180180
if (bidResponse.mediaType === VIDEO) {
181181
bidResponse.vastUrl = bid.ext?.displayurl;
182182
// if outstream video, add a default render for it.
183-
if (deepAccess(bidRequest, 'mediaTypes.video.context') === OUTSTREAM) {
183+
if (bidRequest?.mediaTypes?.video?.context === OUTSTREAM) {
184184
bidResponse.renderer = createOutstreamVideoRenderer(bid);
185185
}
186186
}
@@ -200,9 +200,9 @@ function bidResponse(buildBidResponse, bid, context) {
200200
function response(buildResponse, bidResponses, ortbResponse, context) {
201201
let response = buildResponse(bidResponses, ortbResponse, context);
202202

203-
const pafTransmission = deepAccess(ortbResponse, 'ext.paf.transmission');
203+
const pafTransmission = ortbResponse?.ext?.paf?.transmission;
204204
response.bids.forEach(bid => {
205-
if (typeof pafTransmission !== 'undefined' && typeof deepAccess(bid, 'meta.paf.content_id') !== 'undefined') {
205+
if (typeof pafTransmission !== 'undefined' && typeof bid?.meta?.paf?.content_id !== 'undefined') {
206206
deepSetValue(bid, 'meta.paf.transmission', pafTransmission);
207207
} else {
208208
delete bid.meta.paf;
@@ -362,7 +362,7 @@ export const spec = {
362362
// We support native request without assets requirements because we can fill them later on.
363363
// This is a trick to fool oRTB converter isOpenRTBBidRequestValid(ortb) fn because it needs
364364
// nativeOrtbRequest.assets to be non-empty.
365-
if (deepAccess(bidRequest, 'nativeOrtbRequest.assets') == null) {
365+
if (bidRequest?.nativeOrtbRequest?.assets == null) {
366366
logWarn(LOG_PREFIX + 'native asset requirements are missing');
367367
deepSetValue(bidRequest, 'nativeOrtbRequest.assets', [{}]);
368368
}
@@ -391,7 +391,7 @@ export const spec = {
391391
const interpretedResponse = CONVERTER.fromORTB({response: response.body, request: request.data});
392392
const bids = interpretedResponse.bids || [];
393393

394-
const fledgeAuctionConfigs = deepAccess(response.body, 'ext.igi')?.filter(igi => isArray(igi?.igs))
394+
const fledgeAuctionConfigs = response.body?.ext?.igi?.filter(igi => isArray(igi?.igs))
395395
.flatMap(igi => igi.igs);
396396
if (fledgeAuctionConfigs?.length) {
397397
return {
@@ -548,11 +548,11 @@ function parseSize(size) {
548548
}
549549

550550
function hasVideoMediaType(bidRequest) {
551-
return deepAccess(bidRequest, 'mediaTypes.video') !== undefined;
551+
return bidRequest?.mediaTypes?.video !== undefined;
552552
}
553553

554554
function hasNativeMediaType(bidRequest) {
555-
return deepAccess(bidRequest, 'mediaTypes.native') !== undefined;
555+
return bidRequest?.mediaTypes?.native !== undefined;
556556
}
557557

558558
function hasValidVideoMediaType(bidRequest) {
@@ -562,12 +562,12 @@ function hasValidVideoMediaType(bidRequest) {
562562

563563
requiredMediaTypesParams.forEach(function (param) {
564564
if (param === 'placement') {
565-
if (deepAccess(bidRequest, 'mediaTypes.video.' + param) === undefined && deepAccess(bidRequest, 'params.video.' + param) === undefined && deepAccess(bidRequest, 'mediaTypes.video.plcmt') === undefined && deepAccess(bidRequest, 'params.video.plcmt') === undefined) {
565+
if (bidRequest?.mediaTypes?.video?.[param] === undefined && bidRequest?.params?.video?.[param] === undefined && bidRequest?.mediaTypes?.video?.plcmt === undefined && bidRequest?.params?.video?.plcmt === undefined) {
566566
isValid = false;
567567
logError('Criteo Bid Adapter: mediaTypes.video.' + param + ' or mediaTypes.video.plcmt is required');
568568
}
569569
} else {
570-
if (deepAccess(bidRequest, 'mediaTypes.video.' + param) === undefined && deepAccess(bidRequest, 'params.video.' + param) === undefined) {
570+
if (bidRequest?.mediaTypes?.video?.[param] === undefined && bidRequest?.params?.video?.[param] === undefined) {
571571
isValid = false;
572572
logError('Criteo Bid Adapter: mediaTypes.video.' + param + ' is required');
573573
}
@@ -604,13 +604,13 @@ function getFloors(bidRequest) {
604604
if (getFloor) {
605605
if (bidRequest.mediaTypes?.banner) {
606606
floors.banner = {};
607-
const bannerSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.banner.sizes'))
607+
const bannerSizes = parseSizes(bidRequest?.mediaTypes?.banner?.sizes)
608608
bannerSizes.forEach(bannerSize => floors.banner[parseSize(bannerSize).toString()] = getFloor.call(bidRequest, { size: bannerSize, mediaType: BANNER }));
609609
}
610610

611611
if (bidRequest.mediaTypes?.video) {
612612
floors.video = {};
613-
const videoSizes = parseSizes(deepAccess(bidRequest, 'mediaTypes.video.playerSize'))
613+
const videoSizes = parseSizes(bidRequest?.mediaTypes?.video?.playerSize)
614614
videoSizes.forEach(videoSize => floors.video[parseSize(videoSize).toString()] = getFloor.call(bidRequest, { size: videoSize, mediaType: VIDEO }));
615615
}
616616

modules/dfpAdServerVideo.js

+3-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { getRefererInfo } from '../src/refererDetection.js';
1414
import { targeting } from '../src/targeting.js';
1515
import {
1616
buildUrl,
17-
deepAccess,
1817
formatQS,
1918
isEmpty,
2019
isNumber,
@@ -90,7 +89,7 @@ export function buildDfpVideoUrl(options) {
9089

9190
const derivedParams = {
9291
correlator: Date.now(),
93-
sz: parseSizesInput(deepAccess(adUnit, 'mediaTypes.video.playerSize')).join('|'),
92+
sz: parseSizesInput(adUnit?.mediaTypes?.video?.playerSize).join('|'),
9493
url: encodeURIComponent(location.href),
9594
};
9695

@@ -208,7 +207,7 @@ function buildUrlFromAdserverUrlComponents(components, bid, options) {
208207
* @return {string | undefined} The encoded vast url if it exists, or undefined
209208
*/
210209
function getDescriptionUrl(bid, components, prop) {
211-
return deepAccess(components, `${prop}.description_url`) || encodeURIComponent(dep.ri().page);
210+
return components?.[prop]?.description_url || encodeURIComponent(dep.ri().page);
212211
}
213212

214213
/**
@@ -240,7 +239,7 @@ function getCustParams(bid, options, urlCustParams) {
240239
events.emit(EVENTS.SET_TARGETING, {[adUnit.code]: prebidTargetingSet});
241240

242241
// merge the prebid + publisher targeting sets
243-
const publisherTargetingSet = deepAccess(options, 'params.cust_params');
242+
const publisherTargetingSet = options?.params?.cust_params;
244243
const targetingSet = Object.assign({}, prebidTargetingSet, publisherTargetingSet);
245244
let encodedParams = encodeURIComponent(formatQS(targetingSet));
246245
if (urlCustParams) {

modules/prebidServerBidAdapter/index.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import Adapter from '../../src/adapter.js';
22
import {
3-
deepAccess,
43
deepClone,
54
flatten,
65
generateUUID,
@@ -450,7 +449,7 @@ export function PrebidServer() {
450449

451450
/* Prebid executes this function when the page asks to send out bid requests */
452451
baseAdapter.callBids = function(s2sBidRequest, bidRequests, addBidResponse, done, ajax) {
453-
const adapterMetrics = s2sBidRequest.metrics = useMetrics(deepAccess(bidRequests, '0.metrics'))
452+
const adapterMetrics = s2sBidRequest.metrics = useMetrics(bidRequests?.[0]?.metrics)
454453
.newMetrics()
455454
.renameWith((n) => [`adapter.s2s.${n}`, `adapters.s2s.${s2sBidRequest.s2sConfig.defaultVendor}.${n}`])
456455
done = adapterMetrics.startTiming('total').stopBefore(done);
@@ -568,7 +567,7 @@ export const processPBSRequest = hook('sync', function (s2sBidRequest, bidReques
568567
const requestJson = request && JSON.stringify(request);
569568
logInfo('BidRequest: ' + requestJson);
570569
const endpointUrl = getMatchingConsentUrl(s2sBidRequest.s2sConfig.endpoint, gdprConsent);
571-
const customHeaders = deepAccess(s2sBidRequest, 's2sConfig.customHeaders', {});
570+
const customHeaders = s2sBidRequest?.s2sConfig?.customHeaders ?? {};
572571
if (request && requestJson && endpointUrl) {
573572
const networkDone = s2sBidRequest.metrics.startTiming('net');
574573
ajax(

modules/prebidServerBidAdapter/ortbConverter.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {ortbConverter} from '../../libraries/ortbConverter/converter.js';
2-
import {deepAccess, deepSetValue, getBidRequest, logError, logWarn, mergeDeep, timestamp} from '../../src/utils.js';
2+
import {deepSetValue, getBidRequest, logError, logWarn, mergeDeep, timestamp} from '../../src/utils.js';
33
import {config} from '../../src/config.js';
44
import {S2S, STATUS} from '../../src/constants.js';
55
import {createBid} from '../../src/bidfactory.js';
@@ -183,7 +183,7 @@ const PBS_CONVERTER = ortbConverter({
183183
},
184184
sourceExtSchain(orig, ortbRequest, proxyBidderRequest, context) {
185185
// pass schains in ext.prebid.schains
186-
let chains = (deepAccess(ortbRequest, 'ext.prebid.schains') || []);
186+
let chains = ortbRequest?.ext?.prebid?.schains || [];
187187
const chainBidders = new Set(chains.flatMap((item) => item.bidders));
188188

189189
chains = Object.values(
@@ -192,7 +192,7 @@ const PBS_CONVERTER = ortbConverter({
192192
.filter((req) => !chainBidders.has(req.bidderCode)) // schain defined in s2sConfig.extPrebid takes precedence
193193
.map((req) => ({
194194
bidders: [req.bidderCode],
195-
schain: deepAccess(req, 'bids.0.schain')
195+
schain: req?.bids?.[0]?.schain
196196
})))
197197
.filter(({bidders, schain}) => bidders?.length > 0 && schain)
198198
.reduce((chains, {bidders, schain}) => {

modules/taboolaBidAdapter.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import {registerBidder} from '../src/adapters/bidderFactory.js';
44
import {BANNER} from '../src/mediaTypes.js';
55
import {config} from '../src/config.js';
6-
import {deepAccess, deepSetValue, getWindowSelf, replaceAuctionPrice, isArray, safeJSONParse, isPlainObject} from '../src/utils.js';
6+
import {deepSetValue, getWindowSelf, replaceAuctionPrice, isArray, safeJSONParse, isPlainObject} from '../src/utils.js';
77
import {getStorageManager} from '../src/storageManager.js';
88
import {ajax} from '../src/ajax.js';
99
import {ortbConverter} from '../libraries/ortbConverter/converter.js';
@@ -347,7 +347,7 @@ function fillTaboolaImpData(bid, imp) {
347347
imp.bidfloor = bidfloor;
348348
imp.bidfloorcur = bidfloorcur;
349349
}
350-
deepSetValue(imp, 'ext.gpid', deepAccess(bid, 'ortb2Imp.ext.gpid'));
350+
deepSetValue(imp, 'ext.gpid', bid?.ortb2Imp?.ext?.gpid);
351351
}
352352

353353
function getBanners(bid, pos) {

modules/teadsBidAdapter.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {getValue, logError, deepAccess, parseSizesInput, isArray, getBidIdParameter} from '../src/utils.js';
1+
import {logError, parseSizesInput, isArray, getBidIdParameter} from '../src/utils.js';
22
import {registerBidder} from '../src/adapters/bidderFactory.js';
33
import {getStorageManager} from '../src/storageManager.js';
44
import {isAutoplayEnabled} from '../libraries/autoplayDetection/autoplay.js';
@@ -34,8 +34,8 @@ export const spec = {
3434
isBidRequestValid: function(bid) {
3535
let isValid = false;
3636
if (typeof bid.params !== 'undefined') {
37-
let isValidPlacementId = _validateId(getValue(bid.params, 'placementId'));
38-
let isValidPageId = _validateId(getValue(bid.params, 'pageId'));
37+
let isValidPlacementId = _validateId(bid.params.placementId);
38+
let isValidPageId = _validateId(bid.params.pageId);
3939
isValid = isValidPlacementId && isValidPageId;
4040
}
4141

@@ -113,12 +113,12 @@ export const spec = {
113113
payload.us_privacy = bidderRequest.uspConsent;
114114
}
115115

116-
const userAgentClientHints = deepAccess(firstBidRequest, 'ortb2.device.sua');
116+
const userAgentClientHints = firstBidRequest?.ortb2?.device?.sua;
117117
if (userAgentClientHints) {
118118
payload.userAgentClientHints = userAgentClientHints;
119119
}
120120

121-
const dsa = deepAccess(bidderRequest, 'ortb2.regs.ext.dsa');
121+
const dsa = bidderRequest?.ortb2?.regs?.ext?.dsa;
122122
if (dsa) {
123123
payload.dsa = dsa;
124124
}
@@ -198,7 +198,7 @@ function getSharedViewerIdParameters(validBidRequests) {
198198
let sharedViewerIdObject = {};
199199
for (const sharedViewerId in sharedViewerIdMapping) {
200200
const key = sharedViewerIdMapping[sharedViewerId];
201-
const value = deepAccess(validBidRequests, `0.userId.${key}`);
201+
const value = validBidRequests?.[0]?.userId?.[key];
202202
if (value) {
203203
sharedViewerIdObject[sharedViewerId] = value;
204204
}
@@ -287,10 +287,10 @@ function findGdprStatus(gdprApplies, gdprData) {
287287

288288
function buildRequestObject(bid) {
289289
const reqObj = {};
290-
let placementId = getValue(bid.params, 'placementId');
291-
let pageId = getValue(bid.params, 'pageId');
292-
const gpid = deepAccess(bid, 'ortb2Imp.ext.gpid');
293-
const videoPlcmt = deepAccess(bid, 'mediaTypes.video.plcmt');
290+
let placementId = bid.params.placementId;
291+
let pageId = bid.params.pageId;
292+
const gpid = bid?.ortb2Imp?.ext?.gpid;
293+
const videoPlcmt = bid?.mediaTypes?.video?.plcmt;
294294

295295
reqObj.sizes = getSizes(bid);
296296
reqObj.bidId = getBidIdParameter('bidId', bid);
@@ -309,9 +309,9 @@ function getSizes(bid) {
309309
}
310310

311311
function concatSizes(bid) {
312-
let playerSize = deepAccess(bid, 'mediaTypes.video.playerSize');
313-
let videoSizes = deepAccess(bid, 'mediaTypes.video.sizes');
314-
let bannerSizes = deepAccess(bid, 'mediaTypes.banner.sizes');
312+
let playerSize = bid?.mediaTypes?.video?.playerSize;
313+
let videoSizes = bid?.mediaTypes?.video?.sizes;
314+
let bannerSizes = bid?.mediaTypes?.banner?.sizes;
315315

316316
if (isArray(bannerSizes) || isArray(playerSize) || isArray(videoSizes)) {
317317
let mediaTypesSizes = [bannerSizes, videoSizes, playerSize];
@@ -343,7 +343,7 @@ function _validateId(id) {
343343
* @returns `{} | {firstPartyCookieTeadsId: string}`
344344
*/
345345
function getFirstPartyTeadsIdParameter(validBidRequests) {
346-
const firstPartyTeadsIdFromUserIdModule = deepAccess(validBidRequests, '0.userId.teadsId');
346+
const firstPartyTeadsIdFromUserIdModule = validBidRequests?.[0]?.userId?.teadsId;
347347

348348
if (firstPartyTeadsIdFromUserIdModule) {
349349
return {firstPartyCookieTeadsId: firstPartyTeadsIdFromUserIdModule};

modules/userId/index.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,6 @@ import {
131131
STORAGE_TYPE_LOCALSTORAGE
132132
} from '../../src/storageManager.js';
133133
import {
134-
deepAccess,
135134
deepSetValue,
136135
delayExecution,
137136
isArray,
@@ -659,7 +658,7 @@ let initIdSystem;
659658
function getPPID(eids = getUserIdsAsEids() || []) {
660659
// userSync.ppid should be one of the 'source' values in getUserIdsAsEids() eg pubcid.org or id5-sync.com
661660
const matchingUserId = ppidSource && eids.find(userID => userID.source === ppidSource);
662-
if (matchingUserId && typeof deepAccess(matchingUserId, 'uids.0.id') === 'string') {
661+
if (matchingUserId && typeof matchingUserId?.uids?.[0]?.id === 'string') {
663662
const ppidValue = matchingUserId.uids[0].id.replace(/[\W_]/g, '');
664663
if (ppidValue.length >= 32 && ppidValue.length <= 150) {
665664
return ppidValue;

0 commit comments

Comments
 (0)