init commit

This commit is contained in:
rxliuli
2025-11-04 05:03:50 +08:00
commit bce557cc2d
1396 changed files with 172991 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./metrics-fields-aggregator"), exports);
__exportStar(require("./metrics-fields-builder"), exports);
__exportStar(require("./metrics-fields-context"), exports);
__exportStar(require("./metrics-fields-provider"), exports);

View File

@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricsFieldsAggregator = void 0;
const optional_1 = require("@jet/environment/types/optional");
const page_metrics_fields_provider_1 = require("../field-providers/page-metrics-fields-provider");
class MetricsFieldsAggregator {
constructor() {
this.optInProviders = new Map();
this.optOutProviders = new Map();
}
static makeDefaultAggregator() {
const aggregator = new MetricsFieldsAggregator();
aggregator.addOptInProvider(new page_metrics_fields_provider_1.PageMetricsFieldsProvider(), "pageFields");
return aggregator;
}
addOptInProvider(provider, request) {
this.optInProviders.set(request, provider);
}
addOptOutProvider(provider, request) {
this.optOutProviders.set(request, provider);
}
removeOptInProvider(request) {
this.optInProviders.delete(request);
}
removeOptOutProvider(request) {
this.optOutProviders.delete(request);
}
addMetricsFields(options) {
options.including.forEach((request) => {
const provider = this.optInProviders.get(request);
if (optional_1.isNothing(provider)) {
// No provider registered
return;
}
provider.addMetricsFields(options.builder, options.context);
});
this.optOutProviders.forEach((provider, request) => {
if (optional_1.isNothing(provider) || options.excluding.includes(request)) {
return;
}
provider.addMetricsFields(options.builder, options.context);
});
}
}
exports.MetricsFieldsAggregator = MetricsFieldsAggregator;

View File

@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SimpleMetricsFieldsBuilder = void 0;
class SimpleMetricsFieldsBuilder {
constructor(baseFields) {
this.fields = baseFields;
}
addValue(value, field) {
this.fields[field] = value;
}
get allMetricsFields() {
return this.fields;
}
}
exports.SimpleMetricsFieldsBuilder = SimpleMetricsFieldsBuilder;

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@@ -0,0 +1,13 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./page-metrics-fields-provider"), exports);

View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PageMetricsFieldsProvider = void 0;
const optional_1 = require("@jet/environment/types/optional");
class PageMetricsFieldsProvider {
addMetricsFields(builder, context) {
const pageFields = context.pageFields;
if (optional_1.isNothing(pageFields)) {
// No page fields
return;
}
for (const field in pageFields) {
if (Object.prototype.hasOwnProperty.call(pageFields, field)) {
builder.addValue(pageFields[field], field);
}
}
}
}
exports.PageMetricsFieldsProvider = PageMetricsFieldsProvider;

View File

@@ -0,0 +1,18 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./aggregating"), exports);
__exportStar(require("./field-providers"), exports);
__exportStar(require("./linting"), exports);
__exportStar(require("./presenters"), exports);
__exportStar(require("./metrics-pipeline"), exports);
__exportStar(require("./recording"), exports);

View File

@@ -0,0 +1,13 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./metrics-event-linter"), exports);

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

View File

@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricsPipeline = exports.FlushBehavior = void 0;
const metrics_fields_builder_1 = require("./aggregating/metrics-fields-builder");
// eslint-disable-next-line @typescript-eslint/no-shadow
var FlushBehavior;
(function (FlushBehavior) {
FlushBehavior[FlushBehavior["automatic"] = 0] = "automatic";
FlushBehavior[FlushBehavior["never"] = 1] = "never";
})(FlushBehavior = exports.FlushBehavior || (exports.FlushBehavior = {}));
class MetricsPipeline {
constructor(options) {
var _a;
this.aggregator = options.aggregator;
this.linter = options.linter;
this.recorder = options.recorder;
this.flushBehavior = (_a = options.flushBehavior) !== null && _a !== void 0 ? _a : FlushBehavior.automatic;
}
async process(data, context) {
const builder = new metrics_fields_builder_1.SimpleMetricsFieldsBuilder(data.fields);
this.aggregator.addMetricsFields({
including: data.includingFields,
excluding: data.excludingFields,
builder: builder,
context: context,
});
const lintedEvent = await this.linter.processEvent(builder.allMetricsFields);
this.recorder.record(lintedEvent, data.topic);
if (data.shouldFlush && this.flushBehavior === FlushBehavior.automatic) {
this.recorder.flush();
}
return lintedEvent;
}
}
exports.MetricsPipeline = MetricsPipeline;

View File

@@ -0,0 +1,13 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./page-metrics-presenter"), exports);

View File

@@ -0,0 +1,51 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PageMetricsPresenter = void 0;
const optional_1 = require("@jet/environment/types/optional");
class PageMetricsPresenter {
constructor(metricsPipeline) {
this.metricsPipeline = metricsPipeline;
this.isViewAppeared = false;
}
set pageMetrics(pageMetrics) {
this.pageMetricsStore = pageMetrics;
if (optional_1.isSome(pageMetrics) && this.isViewAppeared) {
this.processInstructions("pageEnter");
}
}
get pageMetrics() {
return this.pageMetricsStore;
}
async processInstructions(invocationPoint) {
var _a, _b, _c;
if (optional_1.isNothing(this.pageMetrics)) {
return;
}
// istanbul ignore next
const invocationContext = {
customMetrics: (_a = this.baseContext) === null || _a === void 0 ? void 0 : _a.customMetrics,
pageFields: {
...(_b = this.baseContext) === null || _b === void 0 ? void 0 : _b.pageFields,
...(_c = this.pageMetrics) === null || _c === void 0 ? void 0 : _c.pageFields,
},
};
await Promise.all(this.pageMetrics.instructions.map((instruction) => {
const { invocationPoints } = instruction;
if (invocationPoints.length === 0 || !invocationPoints.includes(invocationPoint)) {
return;
}
return this.metricsPipeline.process(instruction.data, invocationContext);
}));
}
async didEnterPage() {
this.isViewAppeared = true;
if (optional_1.isSome(this.pageMetrics)) {
await this.processInstructions("pageEnter");
}
}
async didLeavePage() {
await this.processInstructions("pageExit");
this.isViewAppeared = false;
}
}
exports.PageMetricsPresenter = PageMetricsPresenter;

View File

@@ -0,0 +1,14 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./logging-event-recorder"), exports);
__exportStar(require("./metrics-event-recorder"), exports);

View File

@@ -0,0 +1,13 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggingEventRecorder = void 0;
class LoggingEventRecorder {
record(event) {
console.log(`Record Event [${String(event.fields.eventType)}]`, event);
}
async flush() {
console.log("Flushing");
return 0;
}
}
exports.LoggingEventRecorder = LoggingEventRecorder;

View File

@@ -0,0 +1,2 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });