mirror of
https://github.com/rxliuli/apps.apple.com.git
synced 2025-11-09 22:00:32 +00:00
456 lines
16 KiB
JavaScript
456 lines
16 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createMetricsMediaClickData = exports.createMetricsMediaData = exports.createMetricsImpressionsData = exports.createMetricsSearchData = exports.createMetricsPageData = exports.createMetricsBackClickData = exports.createMetricsClickData = exports.MediaClickEventBuilder = exports.MediaEventBuilder = exports.ImpressionsEventBuilder = exports.SearchEventBuilder = exports.PageEventBuilder = exports.BackClickEventBuilder = exports.ClickEventBuilder = exports.EventBuilder = void 0;
|
|
const optional_1 = require("../types/optional");
|
|
// region Builders
|
|
/**
|
|
* Base event builder.
|
|
*/
|
|
class EventBuilder {
|
|
/**
|
|
* Create base event builder with metrics configuration.
|
|
*
|
|
* @param configuration - Metrics configuration used to build metrics events.
|
|
*/
|
|
constructor(configuration) {
|
|
this.configuration = configuration;
|
|
this.eventFields = {};
|
|
}
|
|
/**
|
|
* Updates event builder with given event fields.
|
|
* @param eventFields - The events fields to update in builder.
|
|
* @returns Event builder with updated event fields.
|
|
*/
|
|
withEventFields(eventFields) {
|
|
this.eventFields = eventFields;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given configuration.
|
|
* @param configuration - The configuration to update in builder.
|
|
* @returns Event builder with updated configuration.
|
|
*/
|
|
withConfiguration(configuration) {
|
|
this.configuration = configuration;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given default topic.
|
|
* @param topic - The default topic to update in builder.
|
|
* @returns Event builder with updated default topic.
|
|
*/
|
|
withDefaultTopic(topic) {
|
|
this.configuration = {
|
|
...this.configuration,
|
|
defaultTopic: topic,
|
|
};
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given include fields requests.
|
|
* @param includeRequests - The include fields requests to update in builder.
|
|
* @returns Event builder with updated include fields requests.
|
|
*/
|
|
withDefaultIncludeRequests(includeRequests) {
|
|
this.configuration = {
|
|
...this.configuration,
|
|
defaultIncludeRequests: includeRequests,
|
|
};
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given exclude fields requests.
|
|
* @param excludeRequests - The exclude fields requests to update in builder.
|
|
* @returns Event builder with updated exclude fields requests.
|
|
*/
|
|
withDefaultExcludeRequests(excludeRequests) {
|
|
this.configuration = {
|
|
...this.configuration,
|
|
defaultExcludeRequests: excludeRequests,
|
|
};
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given flush behavior.
|
|
* @param shouldFlush - The flush behavior to update in builder.
|
|
* @returns Event builder with updated flush behavior.
|
|
*/
|
|
withShouldFlush(shouldFlush) {
|
|
this.configuration = {
|
|
...this.configuration,
|
|
shouldFlush: shouldFlush,
|
|
};
|
|
return this;
|
|
}
|
|
}
|
|
exports.EventBuilder = EventBuilder;
|
|
/**
|
|
* Builder for click events.
|
|
*/
|
|
class ClickEventBuilder extends EventBuilder {
|
|
/**
|
|
* Create click metrics event builder with all required properties.
|
|
*
|
|
* @param options - Object containing options required to create the builder.
|
|
*
|
|
* Options:
|
|
* - targetId - Target ID used for building events.
|
|
* - targetType - Target type used for building events.
|
|
* - configuration - Metrics configuration used to build metrics events.
|
|
*/
|
|
constructor(options) {
|
|
super(options.configuration);
|
|
this.targetId = options.targetId;
|
|
this.targetType = options.targetType;
|
|
}
|
|
/**
|
|
* Updates event builder with given target ID.
|
|
* @param targetId - The target ID to update in builder.
|
|
* @returns Event builder with updated target ID.
|
|
*/
|
|
withTargetId(targetId) {
|
|
this.targetId = targetId;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given target type.
|
|
* @param targetType - The target type to update in builder.
|
|
* @returns Event builder with updated target type.
|
|
*/
|
|
withTargetType(targetType) {
|
|
this.targetType = targetType;
|
|
return this;
|
|
}
|
|
build() {
|
|
return createMetricsClickData(this.targetId, this.targetType, this.eventFields, this.configuration);
|
|
}
|
|
}
|
|
exports.ClickEventBuilder = ClickEventBuilder;
|
|
/**
|
|
* Builder for back click events.
|
|
*/
|
|
class BackClickEventBuilder extends EventBuilder {
|
|
build() {
|
|
return createMetricsBackClickData(this.eventFields, this.configuration);
|
|
}
|
|
}
|
|
exports.BackClickEventBuilder = BackClickEventBuilder;
|
|
/**
|
|
* Builder for page events.
|
|
*/
|
|
class PageEventBuilder extends EventBuilder {
|
|
/**
|
|
* Create page metrics event builder with all required properties.
|
|
*
|
|
* @param configuration - Metrics configuration used to build metrics events.
|
|
*/
|
|
constructor(configuration) {
|
|
super(configuration);
|
|
this.timingMetrics = {};
|
|
}
|
|
/**
|
|
* Updates event builder with given fetch timing metrics.
|
|
* @param timingMetrics - The fetch timing metrics to update in builder.
|
|
* @returns Event builder with updated fetch timing metrics.
|
|
*/
|
|
withTimingMetrics(timingMetrics) {
|
|
this.timingMetrics = timingMetrics;
|
|
return this;
|
|
}
|
|
build() {
|
|
return createMetricsPageData(this.eventFields, this.timingMetrics, this.configuration);
|
|
}
|
|
}
|
|
exports.PageEventBuilder = PageEventBuilder;
|
|
/**
|
|
* Builder for search metrics events.
|
|
*/
|
|
class SearchEventBuilder extends EventBuilder {
|
|
/**
|
|
* Create search metrics event builder with all required properties.
|
|
*
|
|
* @param options - Object containing options required to create the builder.
|
|
*
|
|
* Options:
|
|
* - term - Search term used to build metrics events.
|
|
* - targetType - Target type used to build metrics events.
|
|
* - actionType - Action type used to build metrics events.
|
|
* - configuration - Metrics configuration used to build metrics events.
|
|
*/
|
|
constructor(options) {
|
|
super(options.configuration);
|
|
this.term = options.term;
|
|
this.targetType = options.targetType;
|
|
this.actionType = options.actionType;
|
|
this.actionUrl = null;
|
|
}
|
|
/**
|
|
* Updates event builder with given search term.
|
|
* @param term - The search term to update in builder.
|
|
* @returns Event builder with updated search term.
|
|
*/
|
|
withTerm(term) {
|
|
this.term = term;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given target type.
|
|
* @param targetType - The target type to update in builder.
|
|
* @returns Event builder with updated target type.
|
|
*/
|
|
withTargetType(targetType) {
|
|
this.targetType = targetType;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given action type.
|
|
* @param actionType - The action type to update in builder.
|
|
* @returns Event builder with updated action type.
|
|
*/
|
|
withActionType(actionType) {
|
|
this.actionType = actionType;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given action URL.
|
|
* @param actionUrl - The action URL to update in builder.
|
|
* @returns Event builder with updated action URL.
|
|
*/
|
|
withActionUrl(actionUrl) {
|
|
this.actionUrl = actionUrl;
|
|
return this;
|
|
}
|
|
build() {
|
|
return createMetricsSearchData(this.term, this.targetType, this.actionType, this.actionUrl, this.eventFields, this.configuration);
|
|
}
|
|
}
|
|
exports.SearchEventBuilder = SearchEventBuilder;
|
|
/**
|
|
* Builder for impressions events.
|
|
*/
|
|
class ImpressionsEventBuilder extends EventBuilder {
|
|
constructor() {
|
|
super(...arguments);
|
|
/**
|
|
* Impressions event version.
|
|
*/
|
|
this.impressionsEventVersion = 4;
|
|
}
|
|
/**
|
|
* Updates event builder with given impressions event version.
|
|
* @param version - The impressions event version to update in builder.
|
|
* @returns Event builder with updated impressions event version.
|
|
*/
|
|
withImpressionsEventVersion(version) {
|
|
this.impressionsEventVersion = version;
|
|
return this;
|
|
}
|
|
build() {
|
|
return createMetricsImpressionsData(this.eventFields, this.configuration, this.impressionsEventVersion);
|
|
}
|
|
}
|
|
exports.ImpressionsEventBuilder = ImpressionsEventBuilder;
|
|
/**
|
|
* Builder for media events.
|
|
*/
|
|
class MediaEventBuilder extends EventBuilder {
|
|
build() {
|
|
return createMetricsMediaData(this.eventFields, this.configuration);
|
|
}
|
|
}
|
|
exports.MediaEventBuilder = MediaEventBuilder;
|
|
/**
|
|
* Builder for media click events.
|
|
*/
|
|
class MediaClickEventBuilder extends EventBuilder {
|
|
/**
|
|
* Create media click event builder with all required properties.
|
|
*
|
|
* @param options - Object containing options required to create the builder.
|
|
*
|
|
* Options:
|
|
* - targetId - Target ID used for building events.
|
|
* - targetType - Target type used to build metrics events.
|
|
* - configuration - Metrics configuration used to build metrics events.
|
|
*/
|
|
constructor(options) {
|
|
super(options.configuration);
|
|
this.targetId = options.targetId;
|
|
this.targetType = options.targetType;
|
|
}
|
|
/**
|
|
* Updates event builder with given target ID.
|
|
* @param targetId - The target ID to update in builder.
|
|
* @returns Event builder with updated target ID.
|
|
*/
|
|
withTargetId(targetId) {
|
|
this.targetId = targetId;
|
|
return this;
|
|
}
|
|
/**
|
|
* Updates event builder with given target type.
|
|
* @param targetType - The target type to update in builder.
|
|
* @returns Event builder with updated target type.
|
|
*/
|
|
withTargetType(targetType) {
|
|
this.targetType = targetType;
|
|
return this;
|
|
}
|
|
build() {
|
|
return createMetricsMediaClickData(this.targetId, this.targetType, this.eventFields, this.configuration);
|
|
}
|
|
}
|
|
exports.MediaClickEventBuilder = MediaClickEventBuilder;
|
|
// region Metrics Data
|
|
/**
|
|
* Create metrics data for the click event.
|
|
*
|
|
* @param targetId - The ID of the click event target.
|
|
* @param targetType - The type of the click target.
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsClickData(targetId, targetType, eventFields, configuration) {
|
|
const eventType = "click" /* MetricsEventType.click */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
targetType: targetType,
|
|
targetId: targetId,
|
|
};
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsClickData = createMetricsClickData;
|
|
/**
|
|
* Create metrics data for the Back button click event.
|
|
*
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsBackClickData(eventFields, configuration) {
|
|
const fields = {
|
|
...eventFields,
|
|
actionType: "back",
|
|
};
|
|
return createMetricsClickData("back", "button" /* MetricsClickTargetType.button */, fields, configuration);
|
|
}
|
|
exports.createMetricsBackClickData = createMetricsBackClickData;
|
|
/**
|
|
* Create metrics data for the page event.
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param timingMetrics - The timing metrics for page data fetching.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsPageData(eventFields, timingMetrics, configuration) {
|
|
const eventType = "page" /* MetricsEventType.page */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
...timingMetrics,
|
|
};
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsPageData = createMetricsPageData;
|
|
/**
|
|
* Create metrics data for search event.
|
|
*
|
|
* @param term - The search term.
|
|
* @param target - The type of the acton target.
|
|
* @param actionType - The type of the action.
|
|
* @param actionUrl - An optional action URL.
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsSearchData(term, targetType, actionType, actionUrl, eventFields, configuration) {
|
|
const eventType = "search" /* MetricsEventType.search */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
term: term,
|
|
targetType: targetType,
|
|
actionType: actionType,
|
|
};
|
|
if ((0, optional_1.isSome)(actionUrl)) {
|
|
// actionUrl is defined for `hints` but not for searches fired from elsewhere.
|
|
fields["actionUrl"] = actionUrl;
|
|
}
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsSearchData = createMetricsSearchData;
|
|
/**
|
|
* Create metrics data for impressions event.
|
|
*
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
* @param impressionsEventVersion - The version of the impressions event.
|
|
*/
|
|
function createMetricsImpressionsData(eventFields, configuration, impressionsEventVersion = 4) {
|
|
const eventType = "impressions" /* MetricsEventType.impressions */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
impressionQueue: "data-metrics",
|
|
eventVersion: impressionsEventVersion,
|
|
};
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsImpressionsData = createMetricsImpressionsData;
|
|
/**
|
|
* Create metrics data for media event.
|
|
*
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsMediaData(eventFields, configuration) {
|
|
const eventType = "media" /* MetricsEventType.media */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
};
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsMediaData = createMetricsMediaData;
|
|
/**
|
|
* Create metrics data for media event.
|
|
*
|
|
* @param targetId - The ID of the click target.
|
|
* @param targetType - The type of the click target.
|
|
* @param eventFields - Event fields to create metrics data from.
|
|
* @param configuration - Metrics configuration used to create metrics data.
|
|
*/
|
|
function createMetricsMediaClickData(targetId, targetType, eventFields, configuration) {
|
|
const eventType = "click" /* MetricsEventType.click */;
|
|
const fields = {
|
|
...eventFields,
|
|
eventType: eventType,
|
|
targetType: targetType,
|
|
targetId: targetId,
|
|
};
|
|
return createMetricsData(fields, configuration, eventType);
|
|
}
|
|
exports.createMetricsMediaClickData = createMetricsMediaClickData;
|
|
// endregion
|
|
// region Helpers
|
|
function createMetricsData(fields, configuration, eventType) {
|
|
return {
|
|
fields: fields,
|
|
includingFields: configuration.defaultIncludeRequests[eventType],
|
|
excludingFields: configuration.defaultExcludeRequests[eventType],
|
|
topic: topicFromEventFields(fields, configuration.defaultTopic),
|
|
shouldFlush: (0, optional_1.isSome)(configuration.shouldFlush) ? configuration.shouldFlush(fields) : false,
|
|
};
|
|
}
|
|
/**
|
|
* Returns event topic for the given event fields.
|
|
* @param eventFields - Event fields.
|
|
* @param defaultTopic - An optional default topic to use if event fields doesn't have one.
|
|
*/
|
|
function topicFromEventFields(eventFields, defaultTopic) {
|
|
const topic = eventFields["topic"];
|
|
if ((0, optional_1.isSome)(topic)) {
|
|
return topic;
|
|
}
|
|
return defaultTopic;
|
|
}
|
|
// endregion
|
|
//# sourceMappingURL=builder.js.map
|