UNPKG

@phantomstudios/ft-lib

Version:

A collection of Javascript UI & tracking utils for FT sites

173 lines 6.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateOrigamiEvent = exports.validateConfig = exports.parseConfig = void 0; var yup_1 = require("yup"); var disableAppFormatTransformValue = false; //transform passed values to first character uppercase and replace spaces with underscores var unifyValuesTransform = function (value, disableTransform) { if (disableTransform === void 0) { disableTransform = false; } if (disableTransform) return value; return (value.trim().charAt(0).toUpperCase() + value.trim().slice(1).toLowerCase().replace(/ /g, "_").replace(/-/g, "_")); }; //replace legacy 'AlphaGrid'.. var authorTransform = function (value) { if (value.toLowerCase() === "alphagrid") { return "Alpha_Grid"; } return (value.trim().charAt(0).toUpperCase() + value.trim().slice(1).toLowerCase().replace(/ /g, "_").replace(/-/g, "_")); }; var configSchema = (0, yup_1.object)({ product: (0, yup_1.string)().oneOf(["paid-post", "commercial-ft-com"]), url: (0, yup_1.string)().required(), feature: (0, yup_1.string)().required().oneOf(["channel", "microsite", "commercial"]), author: (0, yup_1.string)().defined().default("").transform(authorTransform), sponsor: (0, yup_1.string)().defined().default(""), articleName: (0, yup_1.string)().defined().default(""), videoName: (0, yup_1.string)().defined().default(""), videoType: (0, yup_1.string)() .optional() .default("") .transform(unifyValuesTransform) .oneOf(["Feature", "Case_study", "Interview", "Animation", ""]), hasVideo: (0, yup_1.boolean)().optional().nullable(), primaryTopic: (0, yup_1.string)().defined().default("").transform(unifyValuesTransform), secondaryTopic: (0, yup_1.string)() .defined() .default("") .transform(unifyValuesTransform), advertiserIndustry: (0, yup_1.string)().defined().default(""), app: (0, yup_1.string)() .required() .defined() .transform(function (value) { return unifyValuesTransform(value, disableAppFormatTransformValue); }) .oneOf([ "Stream", "Article", "Animated_article", "Immersive_article", "Video", "Article_with_video", "Audio", "Infographic", "Interactive_infographic", "Photo_essay", "home-page", "capabilities", "my-products", "audience", "case-studies", "markets", "news-and-insights", "other", ]), publishDate: (0, yup_1.string)().nullable().default(""), isBranded: (0, yup_1.boolean)().defined(), contentType: (0, yup_1.string)().defined().default("").transform(unifyValuesTransform), campaign: (0, yup_1.string)().defined().default(""), server: (0, yup_1.string)().equals(["https://spoor-api.ft.com/px.gif"]), title: (0, yup_1.string)().defined().default(""), adbook_campaign_id: (0, yup_1.string)().optional().default(""), source_id: (0, yup_1.string)().optional(), wordCount: (0, yup_1.number)().optional(), commercial_product: (0, yup_1.string)().optional().default("ft"), }); var origamiEventSchema = (0, yup_1.object)({ category: (0, yup_1.string)() .required() .oneOf([ "page", "video", "audio", "cta", "scroll", "brandedContent", "internal click", "external click", "share", "channel", ]), action: (0, yup_1.string)().required(), app: (0, yup_1.string)().nullable().notRequired(), product: (0, yup_1.string)().nullable().notRequired(), source: (0, yup_1.string)().nullable().notRequired(), meta: (0, yup_1.mixed)().nullable().notRequired(), duration: (0, yup_1.number)() .nullable() .notRequired() .when("category", { is: function (value) { return value === "video" || "audio"; }, then: function () { return (0, yup_1.number)().required(); }, }), progress: (0, yup_1.number)() .nullable() .notRequired() .when("category", { is: function (value) { return value === "video" || "audio"; }, then: function () { return (0, yup_1.number)().required(); }, }), }); var parseConfig = function (config, disableAppFormatTransform) { var _a; disableAppFormatTransformValue = disableAppFormatTransform; try { //Replace app value based on deprecated hasVideo field and then remove hasVideo if (config.hasVideo && config.app.toLowerCase() === "article") { config.app = "Article_with_video"; } delete config.hasVideo; //Parse wordCount as number if not already if (config.wordCount) { config.wordCount = Number(config.wordCount); } return configSchema.cast(config); } catch (err) { (_a = err.errors) === null || _a === void 0 ? void 0 : _a.map(function (err) { console.info("FTTracker - config cast error: " + err); }); return config; } }; exports.parseConfig = parseConfig; var validateConfig = function (config, disableAppFormatTransform, logValidationErrors) { var _a; disableAppFormatTransformValue = disableAppFormatTransform; try { configSchema.validateSync(config, { strict: false, abortEarly: false, }); } catch (err) { if (logValidationErrors) { (_a = err.errors) === null || _a === void 0 ? void 0 : _a.map(function (err) { console.info("FTTracker - config validation error: " + err); }); } } return undefined; }; exports.validateConfig = validateConfig; var validateOrigamiEvent = function (config) { var _a; try { var parsedConfig = origamiEventSchema.cast(config); origamiEventSchema.validateSync(parsedConfig, { strict: true, abortEarly: false, }); } catch (err) { (_a = err.errors) === null || _a === void 0 ? void 0 : _a.map(function (err) { console.info("FTTracker - Origami event validation error: " + err); }); } return undefined; }; exports.validateOrigamiEvent = validateOrigamiEvent; //# sourceMappingURL=yupValidator.js.map