tg-bot-builder
Version:
Modular NestJS builder for multi-step Telegram bots with Prisma persistence and pluggable session storage.
67 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeHistory = exports.normalizeAnswers = exports.serializeValue = void 0;
const serializeValue = (value, nullValue) => {
if (value === undefined || value === null) {
return nullValue;
}
if (typeof value === 'string' ||
typeof value === 'number' ||
typeof value === 'boolean') {
return value;
}
if (typeof value === 'bigint') {
return value.toString();
}
if (Array.isArray(value)) {
return value.map((item) => (0, exports.serializeValue)(item, nullValue));
}
if (typeof value === 'object') {
const entries = Object.entries(value);
const normalized = {};
for (const [key, item] of entries) {
normalized[key] = (0, exports.serializeValue)(item, nullValue);
}
return normalized;
}
return nullValue;
};
exports.serializeValue = serializeValue;
const normalizeAnswers = (answers, nullValue) => {
if (!answers || typeof answers !== 'object' || Array.isArray(answers)) {
return {};
}
const result = {};
for (const [key, value] of Object.entries(answers)) {
result[key] = value ?? nullValue;
}
return result;
};
exports.normalizeAnswers = normalizeAnswers;
const normalizeHistory = (history, nullValue) => {
if (!Array.isArray(history)) {
return [];
}
return history
.map((entry) => typeof entry === 'object' && entry !== null
? entry
: undefined)
.filter((entry) => Boolean(entry))
.map((entry) => {
const pageIdValue = entry.pageId;
const timestampValue = entry.timestamp;
const pageId = typeof pageIdValue === 'string'
? pageIdValue
: String(pageIdValue ?? '');
const timestamp = typeof timestampValue === 'string'
? timestampValue
: new Date().toISOString();
return {
pageId,
timestamp,
value: (0, exports.serializeValue)(entry.value, nullValue),
};
});
};
exports.normalizeHistory = normalizeHistory;
//# sourceMappingURL=serialization.js.map