@phantomstudios/ft-lib
Version:
A collection of Javascript UI & tracking utils for FT sites
173 lines • 6.37 kB
JavaScript
;
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