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,64 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ActionDispatcher = void 0;
const optional_1 = require("@jet/environment/types/optional");
class ActionDispatcher {
constructor(metricsPipeline) {
this.implementations = {};
this.metricsPipeline = metricsPipeline;
}
register(type, implementation) {
if (type in this.implementations) {
console.error(`An implementation is already registered for ${type}`);
}
this.implementations[type] = implementation;
}
async perform(action, metricsBehavior) {
if (!(action.$kind in this.implementations)) {
// 1. If there is no implementation registered for the type of action
// we were passed, we check for a chained dispatcher to forward to.
// If one is found, we forward this call without doing any work.
// If none is found, we give up.
if (optional_1.isSome(this.next)) {
return await this.next.perform(action, metricsBehavior);
}
else {
return "unsupported";
}
}
// 2. We have an implementation for the action we were given.
// We are responsible for processing metrics for that action.
this.processMetrics(action, metricsBehavior);
if (optional_1.isSome(this.next)) {
// 3a. If we have another dispatcher we are chained to, we forward to it
// if the implementation we have for the given action decides it cannot
// support performing it.
const outcome = await this.implementations[action.$kind](action);
if (outcome === "unsupported") {
return await this.next.perform(action, { behavior: "notProcessed" });
}
else {
return outcome;
}
}
else {
// 3b. We hand off control to the implementation we have for the given action type.
// If the implementation cannot perform the action, we give up.
return await this.implementations[action.$kind](action);
}
}
processMetrics(action, metricsBehavior) {
if (metricsBehavior.behavior === "notProcessed") {
return;
}
const actionMetrics = action.actionMetrics;
const context = {
customMetrics: actionMetrics.custom,
pageFields: metricsBehavior.context.pageFields,
};
action.actionMetrics.data.forEach((data) => {
void this.metricsPipeline.process(data, context);
});
}
}
exports.ActionDispatcher = ActionDispatcher;

13
node_modules/@jet/engine/lib/actions/index.js generated vendored Normal file
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("./action-dispatcher"), exports);

17
node_modules/@jet/engine/lib/dependencies/index.js generated vendored Normal file
View File

@@ -0,0 +1,17 @@
"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("./jet-bag"), exports);
__exportStar(require("./jet-host"), exports);
__exportStar(require("./jet-network-fetch"), exports);
__exportStar(require("./localized-strings-bundle"), exports);
__exportStar(require("./localized-strings-json-object"), exports);

40
node_modules/@jet/engine/lib/dependencies/jet-bag.js generated vendored Normal file
View File

@@ -0,0 +1,40 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JetBag = void 0;
class JetBag {
constructor(backing) {
this.backing = backing;
}
registerBagKeys() {
// do nothing.
}
string(key) {
const value = this.backing[key];
return typeof value === "string" || value === null ? value : undefined;
}
double(key) {
const value = this.backing[key];
return typeof value === "number" || value === null ? value : undefined;
}
integer(key) {
const value = this.backing[key];
return typeof value === "number" || value === null ? value : undefined;
}
boolean(key) {
const value = this.backing[key];
return typeof value === "boolean" || value === null ? value : undefined;
}
array(key) {
const value = this.backing[key];
return Array.isArray(value) || value === null ? value : undefined;
}
dictionary(key) {
const value = this.backing[key];
return typeof value === "object" ? value : undefined;
}
url(key) {
const value = this.backing[key];
return typeof value === "string" ? value : undefined;
}
}
exports.JetBag = JetBag;

19
node_modules/@jet/engine/lib/dependencies/jet-host.js generated vendored Normal file
View File

@@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JetHost = void 0;
class JetHost {
constructor(options) {
this.osBuild = "unknown";
this.deviceModel = "unknown";
this.deviceModelFamily = "unknown";
this.devicePhysicalModel = "unknown";
this.deviceLocalizedModel = "unknown";
this.clientIdentifier = "unknown";
this.clientVersion = "unknown";
this.platform = options.platform;
}
isOSAtLeast() {
return false;
}
}
exports.JetHost = JetHost;

View File

@@ -0,0 +1,39 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.JetNetworkFetch = void 0;
const optional_1 = require("@jet/environment/types/optional");
class JetNetworkFetch {
async fetch(request) {
var _a, _b, _c;
if (optional_1.isNothing(process === null || process === void 0 ? void 0 : process.env.MEDIA_API_TOKEN)) {
return await Promise.reject(new Error("process.env.MEDIA_API_TOKEN must be specified"));
}
const headers = {
...((_a = request.headers) !== null && _a !== void 0 ? _a : {}),
authorization: `Bearer ${process === null || process === void 0 ? void 0 : process.env.MEDIA_API_TOKEN}`,
};
const response = await fetch(request.url, {
body: request.body,
method: (_b = request.method) !== null && _b !== void 0 ? _b : undefined,
cache: (_c = request.cache) !== null && _c !== void 0 ? _c : undefined,
headers: headers,
});
return {
ok: response.ok,
headers: Array.from(response.headers.keys()).reduce((previous, key) => {
const value = response.headers.get(key);
if (optional_1.isSome(value)) {
previous[key] = value;
}
return previous;
}, {}),
redirected: response.redirected,
status: response.status,
statusText: response.statusText,
url: response.url,
body: await response.text(),
metrics: [],
};
}
}
exports.JetNetworkFetch = JetNetworkFetch;

View File

@@ -0,0 +1,68 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LocalizedStringsBundle = void 0;
const environment_1 = require("@jet/environment");
const localized_strings_json_object_1 = require("./localized-strings-json-object");
/**
* A localized string data source which loads strings from the application bundle.
*
* The bundle used by this data source can be a web app webpack bundle
* or a native app bundle bridged over to JS code.
*/
class LocalizedStringsBundle {
// MARK: - Initialization
/**
* Create localized strings bundle with all required attributes.
*
* @param bundle - The app bundle object.
*/
constructor(bundle) {
this.bundle = bundle;
}
// MARK: - LocalizedStringsDataSource
async fetchStrings(language) {
var _a;
// Load the strings from bundle and cache them.
const localizations = this.bundle.localizationsProperty;
if (environment_1.isNothing(localizations)) {
throw new Error("Localized strings bundle index file is missing 'localizations' property");
}
let strings;
const format = (_a = localizations.format) !== null && _a !== void 0 ? _a : "json/inline" /* jsonInline */;
if (format === "json/inline" /* jsonInline */) {
const inlineLocalizations = localizations;
strings = inlineLocalizations[language];
}
else {
const externalLocalizations = localizations;
switch (externalLocalizations.format) {
case "json/multi-file" /* jsonMultiFile */:
{
// The path points to directory where JSON files are located.
// We don't even have to list a directory, just construct a final path.
// The path is also not an OS path but a bundle (e.g. JetPack) path.
// Bundle APIs always use "/" in the path, same as the paths used in the
// index.json (manifest) files.
const jsonPath = `${externalLocalizations.path}/${language}.json`;
strings = (await this.bundle.loadResource(jsonPath));
}
break;
case "json/single-file" /* jsonSingleFile */:
// The bundle contains single JSON file with all strings dictionary in it.
strings = (await this.bundle.loadResource(externalLocalizations.path))[language];
break;
case "loctable" /* loctable */:
throw new Error("Loctable format not supported in JS implementation");
case "js" /* js */:
throw new Error("Not yet implemented");
default:
throw new Error(`Unknown localization format: ${JSON.stringify(format)}`);
}
}
if (environment_1.isNothing(strings)) {
throw new Error(`Missing strings for ${language}`);
}
return new localized_strings_json_object_1.LocalizedStringsJSONObject(strings);
}
}
exports.LocalizedStringsBundle = LocalizedStringsBundle;

View File

@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.LocalizedStringsJSONObject = void 0;
/**
* A type providing access to underlying localized strings JSON object.
*/
class LocalizedStringsJSONObject {
/**
* Create localized strings JSON object.
*
* @param strings - A dictionary containing localized strings.
*/
constructor(strings) {
this.strings = strings;
}
// MARK: - Localized Strings
string(key) {
return this.strings[key];
}
}
exports.LocalizedStringsJSONObject = LocalizedStringsJSONObject;

15
node_modules/@jet/engine/lib/index.js generated vendored Normal file
View File

@@ -0,0 +1,15 @@
"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("./actions"), exports);
__exportStar(require("./dependencies"), exports);
__exportStar(require("./metrics"), exports);

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;

18
node_modules/@jet/engine/lib/metrics/index.js generated vendored Normal file
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);

13
node_modules/@jet/engine/lib/metrics/linting/index.js generated vendored Normal file
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,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetricsPipeline = exports.FlushBehavior = void 0;
const metrics_fields_builder_1 = require("./aggregating/metrics-fields-builder");
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) {
void 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,52 @@
"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) {
void 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;
}
// eslint-disable-next-line @typescript-eslint/no-floating-promises
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 });