From 18de2b3b61544656ce3833d364b2c6fc4653a03c Mon Sep 17 00:00:00 2001 From: ASurovenko Date: Wed, 12 Jun 2024 14:07:59 +0200 Subject: [PATCH 1/4] ZetaGlobalSsp adapter: merge params.site and ortb2.site --- modules/zeta_global_sspBidAdapter.js | 4 ++-- test/spec/modules/zeta_global_sspBidAdapter_spec.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index a273927e1ec..2ea6d745096 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -128,8 +128,8 @@ export const spec = { id: bidderRequest.bidderRequestId, cur: [DEFAULT_CUR], imp: imps, - site: params.site ? params.site : {}, - device: {...(bidderRequest.ortb2?.device || {}), ...params.device}, + site: {...bidderRequest?.ortb2?.site, ...params?.site}, + device: {...bidderRequest?.ortb2?.device, ...params?.device}, user: params.user ? params.user : {}, app: params.app ? params.app : {}, ext: { diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index dfa7c9e6984..bfa9e9f6365 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -132,6 +132,9 @@ describe('Zeta Ssp Bid Adapter', function () { userIdAsEids: eids, timeout: 500, ortb2: { + site: { + inventorypartnerdomain: 'disqus.com' + }, device: { sua: { mobile: 1, @@ -709,4 +712,12 @@ describe('Zeta Ssp Bid Adapter', function () { expect(payload.ext.tags.nullTag).to.be.undefined; expect(payload.ext.tags.complexEmptyTag).to.be.undefined; }); + + it('Test that site payload param are merged from ortb2 and params', function () { + const request = spec.buildRequests(bannerRequest, bannerRequest[0]); + const payload = JSON.parse(request.data); + + expect(payload.site.page).to.eql('http://www.zetaglobal.com/page?param=value'); + expect(payload.site.inventorypartnerdomain).to.eql('disqus.com'); + }); }); From 729db3c108fdbeb3e68d745fa259d2e1896db23e Mon Sep 17 00:00:00 2001 From: ASurovenko Date: Fri, 14 Jun 2024 18:18:23 +0200 Subject: [PATCH 2/4] fix unit test --- test/spec/modules/zeta_global_sspBidAdapter_spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spec/modules/zeta_global_sspBidAdapter_spec.js b/test/spec/modules/zeta_global_sspBidAdapter_spec.js index bfa9e9f6365..a903c91ec18 100644 --- a/test/spec/modules/zeta_global_sspBidAdapter_spec.js +++ b/test/spec/modules/zeta_global_sspBidAdapter_spec.js @@ -717,7 +717,7 @@ describe('Zeta Ssp Bid Adapter', function () { const request = spec.buildRequests(bannerRequest, bannerRequest[0]); const payload = JSON.parse(request.data); - expect(payload.site.page).to.eql('http://www.zetaglobal.com/page?param=value'); + expect(payload.site.page).to.eql('zetaglobal.com/page'); expect(payload.site.inventorypartnerdomain).to.eql('disqus.com'); }); }); From a0755830c3e54bb97c88b7bb283d9b9ee5f4ef82 Mon Sep 17 00:00:00 2001 From: ASurovenko Date: Tue, 25 Jun 2024 16:17:21 +0200 Subject: [PATCH 3/4] extract buildVideo into utils --- modules/zeta_global_sspBidAdapter.js | 71 +--------------------------- modules/zmaticooBidAdapter.js | 67 +------------------------- src/utils.js | 69 +++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 136 deletions(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index 2ea6d745096..72aeb2b5b2a 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -1,4 +1,4 @@ -import {deepAccess, deepSetValue, isArray, isBoolean, isNumber, isStr, logWarn} from '../src/utils.js'; +import {buildVideo, deepSetValue, isArray, logWarn} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -20,32 +20,6 @@ const DEFAULT_CUR = 'USD'; const TTL = 300; const NET_REV = true; -const DATA_TYPES = { - 'NUMBER': 'number', - 'STRING': 'string', - 'BOOLEAN': 'boolean', - 'ARRAY': 'array', - 'OBJECT': 'object' -}; -const VIDEO_CUSTOM_PARAMS = { - 'mimes': DATA_TYPES.ARRAY, - 'minduration': DATA_TYPES.NUMBER, - 'maxduration': DATA_TYPES.NUMBER, - 'startdelay': DATA_TYPES.NUMBER, - 'playbackmethod': DATA_TYPES.ARRAY, - 'api': DATA_TYPES.ARRAY, - 'protocols': DATA_TYPES.ARRAY, - 'w': DATA_TYPES.NUMBER, - 'h': DATA_TYPES.NUMBER, - 'battr': DATA_TYPES.ARRAY, - 'linearity': DATA_TYPES.NUMBER, - 'placement': DATA_TYPES.NUMBER, - 'plcmt': DATA_TYPES.NUMBER, - 'minbitrate': DATA_TYPES.NUMBER, - 'maxbitrate': DATA_TYPES.NUMBER, - 'skip': DATA_TYPES.NUMBER -} - export const spec = { code: BIDDER_CODE, gvlid: 469, @@ -308,49 +282,6 @@ function buildBanner(request) { } } -function buildVideo(request) { - let video = {}; - const videoParams = deepAccess(request, 'mediaTypes.video', {}); - for (const key in VIDEO_CUSTOM_PARAMS) { - if (videoParams.hasOwnProperty(key)) { - video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); - } - } - if (videoParams.playerSize) { - if (isArray(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0][0], 10); - video.h = parseInt(videoParams.playerSize[0][1], 10); - } else if (isNumber(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0], 10); - video.h = parseInt(videoParams.playerSize[1], 10); - } - } - return video; -} - -function checkParamDataType(key, value, datatype) { - let functionToExecute; - switch (datatype) { - case DATA_TYPES.BOOLEAN: - functionToExecute = isBoolean; - break; - case DATA_TYPES.NUMBER: - functionToExecute = isNumber; - break; - case DATA_TYPES.STRING: - functionToExecute = isStr; - break; - case DATA_TYPES.ARRAY: - functionToExecute = isArray; - break; - } - if (functionToExecute(value)) { - return value; - } - logWarn('Ignoring param key: ' + key + ', expects ' + datatype + ', found ' + typeof value); - return undefined; -} - function provideEids(request, payload) { if (Array.isArray(request.userIdAsEids) && request.userIdAsEids.length > 0) { deepSetValue(payload, 'user.ext.eids', request.userIdAsEids); diff --git a/modules/zmaticooBidAdapter.js b/modules/zmaticooBidAdapter.js index 905da191ab7..a26c34767b8 100644 --- a/modules/zmaticooBidAdapter.js +++ b/modules/zmaticooBidAdapter.js @@ -1,4 +1,4 @@ -import {deepAccess, isArray, isBoolean, isNumber, isStr, logWarn, triggerPixel} from '../src/utils.js'; +import {buildVideo, deepAccess, logWarn, triggerPixel} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -16,28 +16,6 @@ const DEFAULT_CUR = 'USD'; const TTL = 200; const NET_REV = true; -const DATA_TYPES = { - 'NUMBER': 'number', 'STRING': 'string', 'BOOLEAN': 'boolean', 'ARRAY': 'array', 'OBJECT': 'object' -}; -const VIDEO_CUSTOM_PARAMS = { - 'mimes': DATA_TYPES.ARRAY, - 'minduration': DATA_TYPES.NUMBER, - 'maxduration': DATA_TYPES.NUMBER, - 'startdelay': DATA_TYPES.NUMBER, - 'playbackmethod': DATA_TYPES.ARRAY, - 'api': DATA_TYPES.ARRAY, - 'protocols': DATA_TYPES.ARRAY, - 'w': DATA_TYPES.NUMBER, - 'h': DATA_TYPES.NUMBER, - 'battr': DATA_TYPES.ARRAY, - 'linearity': DATA_TYPES.NUMBER, - 'placement': DATA_TYPES.NUMBER, - 'plcmt': DATA_TYPES.NUMBER, - 'minbitrate': DATA_TYPES.NUMBER, - 'maxbitrate': DATA_TYPES.NUMBER, - 'skip': DATA_TYPES.NUMBER -} - export const spec = { code: BIDDER_CODE, supportedMediaTypes: [BANNER, VIDEO], @@ -239,49 +217,6 @@ function buildBanner(request) { }; } -function buildVideo(request) { - let video = {}; - const videoParams = deepAccess(request, 'mediaTypes.video', {}); - for (const key in VIDEO_CUSTOM_PARAMS) { - if (videoParams.hasOwnProperty(key)) { - video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); - } - } - if (videoParams.playerSize) { - if (isArray(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0][0], 10); - video.h = parseInt(videoParams.playerSize[0][1], 10); - } else if (isNumber(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0], 10); - video.h = parseInt(videoParams.playerSize[1], 10); - } - } - return video; -} - -export function checkParamDataType(key, value, datatype) { - let functionToExecute; - switch (datatype) { - case DATA_TYPES.BOOLEAN: - functionToExecute = isBoolean; - break; - case DATA_TYPES.NUMBER: - functionToExecute = isNumber; - break; - case DATA_TYPES.STRING: - functionToExecute = isStr; - break; - case DATA_TYPES.ARRAY: - functionToExecute = isArray; - break; - } - if (functionToExecute(value)) { - return value; - } - logWarn('Ignoring param key: ' + key + ', expects ' + datatype + ', found ' + typeof value); - return undefined; -} - function hasBannerMediaType(bidRequest) { return !!deepAccess(bidRequest, 'mediaTypes.banner'); } diff --git a/src/utils.js b/src/utils.js index 1f05b7b37c1..7e595b185ef 100644 --- a/src/utils.js +++ b/src/utils.js @@ -4,10 +4,37 @@ import {includes} from './polyfill.js'; import { EVENTS, S2S } from './constants.js'; import {GreedyPromise} from './utils/promise.js'; import {getGlobal} from './prebidGlobal.js'; +import { default as deepAccess } from 'dlv/index.js'; export { default as deepAccess } from 'dlv/index.js'; export { dset as deepSetValue } from 'dset'; +const DATA_TYPES = { + 'NUMBER': 'number', + 'STRING': 'string', + 'BOOLEAN': 'boolean', + 'ARRAY': 'array', + 'OBJECT': 'object' +}; +const VIDEO_CUSTOM_PARAMS = { + 'mimes': DATA_TYPES.ARRAY, + 'minduration': DATA_TYPES.NUMBER, + 'maxduration': DATA_TYPES.NUMBER, + 'startdelay': DATA_TYPES.NUMBER, + 'playbackmethod': DATA_TYPES.ARRAY, + 'api': DATA_TYPES.ARRAY, + 'protocols': DATA_TYPES.ARRAY, + 'w': DATA_TYPES.NUMBER, + 'h': DATA_TYPES.NUMBER, + 'battr': DATA_TYPES.ARRAY, + 'linearity': DATA_TYPES.NUMBER, + 'placement': DATA_TYPES.NUMBER, + 'plcmt': DATA_TYPES.NUMBER, + 'minbitrate': DATA_TYPES.NUMBER, + 'maxbitrate': DATA_TYPES.NUMBER, + 'skip': DATA_TYPES.NUMBER +} + var tStr = 'String'; var tFn = 'Function'; var tNumb = 'Number'; @@ -1189,3 +1216,45 @@ export function hasNonSerializableProperty(obj, checkedObjects = new Set()) { } return false; } + +export function buildVideo(request) { + let video = {}; + const videoParams = deepAccess(request, 'mediaTypes.video', {}); + for (const key in VIDEO_CUSTOM_PARAMS) { + if (videoParams.hasOwnProperty(key)) { + video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); + } + } + if (videoParams.playerSize) { + if (isArray(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0][0], 10); + video.h = parseInt(videoParams.playerSize[0][1], 10); + } else if (isNumber(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0], 10); + video.h = parseInt(videoParams.playerSize[1], 10); + } + } + return video; +} + +function checkParamDataType(key, value, datatype) { + let functionToExecute; + switch (datatype) { + case DATA_TYPES.BOOLEAN: + functionToExecute = isBoolean; + break; + case DATA_TYPES.NUMBER: + functionToExecute = isNumber; + break; + case DATA_TYPES.STRING: + functionToExecute = isStr; + break; + case DATA_TYPES.ARRAY: + functionToExecute = isArray; + break; + } + if (functionToExecute(value)) { + return value; + } + return undefined; +} From 59a8b8ff6492f5911eac4b14fd09bfcc01a61066 Mon Sep 17 00:00:00 2001 From: ASurovenko Date: Wed, 26 Jun 2024 10:24:21 +0200 Subject: [PATCH 4/4] Revert "extract buildVideo into utils" This reverts commit a0755830c3e54bb97c88b7bb283d9b9ee5f4ef82. --- modules/zeta_global_sspBidAdapter.js | 71 +++++++++++++++++++++++++++- modules/zmaticooBidAdapter.js | 67 +++++++++++++++++++++++++- src/utils.js | 69 --------------------------- 3 files changed, 136 insertions(+), 71 deletions(-) diff --git a/modules/zeta_global_sspBidAdapter.js b/modules/zeta_global_sspBidAdapter.js index 72aeb2b5b2a..2ea6d745096 100644 --- a/modules/zeta_global_sspBidAdapter.js +++ b/modules/zeta_global_sspBidAdapter.js @@ -1,4 +1,4 @@ -import {buildVideo, deepSetValue, isArray, logWarn} from '../src/utils.js'; +import {deepAccess, deepSetValue, isArray, isBoolean, isNumber, isStr, logWarn} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; import {config} from '../src/config.js'; @@ -20,6 +20,32 @@ const DEFAULT_CUR = 'USD'; const TTL = 300; const NET_REV = true; +const DATA_TYPES = { + 'NUMBER': 'number', + 'STRING': 'string', + 'BOOLEAN': 'boolean', + 'ARRAY': 'array', + 'OBJECT': 'object' +}; +const VIDEO_CUSTOM_PARAMS = { + 'mimes': DATA_TYPES.ARRAY, + 'minduration': DATA_TYPES.NUMBER, + 'maxduration': DATA_TYPES.NUMBER, + 'startdelay': DATA_TYPES.NUMBER, + 'playbackmethod': DATA_TYPES.ARRAY, + 'api': DATA_TYPES.ARRAY, + 'protocols': DATA_TYPES.ARRAY, + 'w': DATA_TYPES.NUMBER, + 'h': DATA_TYPES.NUMBER, + 'battr': DATA_TYPES.ARRAY, + 'linearity': DATA_TYPES.NUMBER, + 'placement': DATA_TYPES.NUMBER, + 'plcmt': DATA_TYPES.NUMBER, + 'minbitrate': DATA_TYPES.NUMBER, + 'maxbitrate': DATA_TYPES.NUMBER, + 'skip': DATA_TYPES.NUMBER +} + export const spec = { code: BIDDER_CODE, gvlid: 469, @@ -282,6 +308,49 @@ function buildBanner(request) { } } +function buildVideo(request) { + let video = {}; + const videoParams = deepAccess(request, 'mediaTypes.video', {}); + for (const key in VIDEO_CUSTOM_PARAMS) { + if (videoParams.hasOwnProperty(key)) { + video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); + } + } + if (videoParams.playerSize) { + if (isArray(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0][0], 10); + video.h = parseInt(videoParams.playerSize[0][1], 10); + } else if (isNumber(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0], 10); + video.h = parseInt(videoParams.playerSize[1], 10); + } + } + return video; +} + +function checkParamDataType(key, value, datatype) { + let functionToExecute; + switch (datatype) { + case DATA_TYPES.BOOLEAN: + functionToExecute = isBoolean; + break; + case DATA_TYPES.NUMBER: + functionToExecute = isNumber; + break; + case DATA_TYPES.STRING: + functionToExecute = isStr; + break; + case DATA_TYPES.ARRAY: + functionToExecute = isArray; + break; + } + if (functionToExecute(value)) { + return value; + } + logWarn('Ignoring param key: ' + key + ', expects ' + datatype + ', found ' + typeof value); + return undefined; +} + function provideEids(request, payload) { if (Array.isArray(request.userIdAsEids) && request.userIdAsEids.length > 0) { deepSetValue(payload, 'user.ext.eids', request.userIdAsEids); diff --git a/modules/zmaticooBidAdapter.js b/modules/zmaticooBidAdapter.js index a26c34767b8..905da191ab7 100644 --- a/modules/zmaticooBidAdapter.js +++ b/modules/zmaticooBidAdapter.js @@ -1,4 +1,4 @@ -import {buildVideo, deepAccess, logWarn, triggerPixel} from '../src/utils.js'; +import {deepAccess, isArray, isBoolean, isNumber, isStr, logWarn, triggerPixel} from '../src/utils.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, VIDEO} from '../src/mediaTypes.js'; @@ -16,6 +16,28 @@ const DEFAULT_CUR = 'USD'; const TTL = 200; const NET_REV = true; +const DATA_TYPES = { + 'NUMBER': 'number', 'STRING': 'string', 'BOOLEAN': 'boolean', 'ARRAY': 'array', 'OBJECT': 'object' +}; +const VIDEO_CUSTOM_PARAMS = { + 'mimes': DATA_TYPES.ARRAY, + 'minduration': DATA_TYPES.NUMBER, + 'maxduration': DATA_TYPES.NUMBER, + 'startdelay': DATA_TYPES.NUMBER, + 'playbackmethod': DATA_TYPES.ARRAY, + 'api': DATA_TYPES.ARRAY, + 'protocols': DATA_TYPES.ARRAY, + 'w': DATA_TYPES.NUMBER, + 'h': DATA_TYPES.NUMBER, + 'battr': DATA_TYPES.ARRAY, + 'linearity': DATA_TYPES.NUMBER, + 'placement': DATA_TYPES.NUMBER, + 'plcmt': DATA_TYPES.NUMBER, + 'minbitrate': DATA_TYPES.NUMBER, + 'maxbitrate': DATA_TYPES.NUMBER, + 'skip': DATA_TYPES.NUMBER +} + export const spec = { code: BIDDER_CODE, supportedMediaTypes: [BANNER, VIDEO], @@ -217,6 +239,49 @@ function buildBanner(request) { }; } +function buildVideo(request) { + let video = {}; + const videoParams = deepAccess(request, 'mediaTypes.video', {}); + for (const key in VIDEO_CUSTOM_PARAMS) { + if (videoParams.hasOwnProperty(key)) { + video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); + } + } + if (videoParams.playerSize) { + if (isArray(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0][0], 10); + video.h = parseInt(videoParams.playerSize[0][1], 10); + } else if (isNumber(videoParams.playerSize[0])) { + video.w = parseInt(videoParams.playerSize[0], 10); + video.h = parseInt(videoParams.playerSize[1], 10); + } + } + return video; +} + +export function checkParamDataType(key, value, datatype) { + let functionToExecute; + switch (datatype) { + case DATA_TYPES.BOOLEAN: + functionToExecute = isBoolean; + break; + case DATA_TYPES.NUMBER: + functionToExecute = isNumber; + break; + case DATA_TYPES.STRING: + functionToExecute = isStr; + break; + case DATA_TYPES.ARRAY: + functionToExecute = isArray; + break; + } + if (functionToExecute(value)) { + return value; + } + logWarn('Ignoring param key: ' + key + ', expects ' + datatype + ', found ' + typeof value); + return undefined; +} + function hasBannerMediaType(bidRequest) { return !!deepAccess(bidRequest, 'mediaTypes.banner'); } diff --git a/src/utils.js b/src/utils.js index 7e595b185ef..1f05b7b37c1 100644 --- a/src/utils.js +++ b/src/utils.js @@ -4,37 +4,10 @@ import {includes} from './polyfill.js'; import { EVENTS, S2S } from './constants.js'; import {GreedyPromise} from './utils/promise.js'; import {getGlobal} from './prebidGlobal.js'; -import { default as deepAccess } from 'dlv/index.js'; export { default as deepAccess } from 'dlv/index.js'; export { dset as deepSetValue } from 'dset'; -const DATA_TYPES = { - 'NUMBER': 'number', - 'STRING': 'string', - 'BOOLEAN': 'boolean', - 'ARRAY': 'array', - 'OBJECT': 'object' -}; -const VIDEO_CUSTOM_PARAMS = { - 'mimes': DATA_TYPES.ARRAY, - 'minduration': DATA_TYPES.NUMBER, - 'maxduration': DATA_TYPES.NUMBER, - 'startdelay': DATA_TYPES.NUMBER, - 'playbackmethod': DATA_TYPES.ARRAY, - 'api': DATA_TYPES.ARRAY, - 'protocols': DATA_TYPES.ARRAY, - 'w': DATA_TYPES.NUMBER, - 'h': DATA_TYPES.NUMBER, - 'battr': DATA_TYPES.ARRAY, - 'linearity': DATA_TYPES.NUMBER, - 'placement': DATA_TYPES.NUMBER, - 'plcmt': DATA_TYPES.NUMBER, - 'minbitrate': DATA_TYPES.NUMBER, - 'maxbitrate': DATA_TYPES.NUMBER, - 'skip': DATA_TYPES.NUMBER -} - var tStr = 'String'; var tFn = 'Function'; var tNumb = 'Number'; @@ -1216,45 +1189,3 @@ export function hasNonSerializableProperty(obj, checkedObjects = new Set()) { } return false; } - -export function buildVideo(request) { - let video = {}; - const videoParams = deepAccess(request, 'mediaTypes.video', {}); - for (const key in VIDEO_CUSTOM_PARAMS) { - if (videoParams.hasOwnProperty(key)) { - video[key] = checkParamDataType(key, videoParams[key], VIDEO_CUSTOM_PARAMS[key]); - } - } - if (videoParams.playerSize) { - if (isArray(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0][0], 10); - video.h = parseInt(videoParams.playerSize[0][1], 10); - } else if (isNumber(videoParams.playerSize[0])) { - video.w = parseInt(videoParams.playerSize[0], 10); - video.h = parseInt(videoParams.playerSize[1], 10); - } - } - return video; -} - -function checkParamDataType(key, value, datatype) { - let functionToExecute; - switch (datatype) { - case DATA_TYPES.BOOLEAN: - functionToExecute = isBoolean; - break; - case DATA_TYPES.NUMBER: - functionToExecute = isNumber; - break; - case DATA_TYPES.STRING: - functionToExecute = isStr; - break; - case DATA_TYPES.ARRAY: - functionToExecute = isArray; - break; - } - if (functionToExecute(value)) { - return value; - } - return undefined; -}