@satoshibits/cache-keys
Version:
Type-safe cache key generation with zero dependencies
119 lines • 4.79 kB
JavaScript
;
import { createKeyFactory, createSimpleKeyFactory } from '../factory.mjs';
import { sanitizeKeyComponent, splitKeyComponents } from '../sanitizer.mjs';
/**
* Analytics-related cache key factories
*/
export var analyticsKeys = {
/**
* Real-time analytics data key
* @example analyticsKeys.realtime.key('dashboard123')
* @returns 'analytics:realtime:dashboard123'
*/
realtime: createSimpleKeyFactory('analytics', 'realtime'),
/**
* Hourly aggregated metrics key
* @example analyticsKeys.hourly.key('metric123', '2024-01-15', 14)
* @returns 'analytics:hourly:metric123:2024-01-15:14'
*/
hourly: createKeyFactory('analytics', 'hourly', function (metricId, date, hour) {
return "".concat(sanitizeKeyComponent(String(metricId)), ":").concat(sanitizeKeyComponent(date), ":").concat(hour);
}, function (suffix) {
var _a, _b, _c;
var parts = splitKeyComponents(suffix, ':', true);
if (parts.length !== 3)
return null;
return {
metricId: (_a = parts[0]) !== null && _a !== void 0 ? _a : '',
date: (_b = parts[1]) !== null && _b !== void 0 ? _b : '',
hour: (_c = parts[2]) !== null && _c !== void 0 ? _c : ''
};
}),
/**
* Daily aggregated metrics key
* @example analyticsKeys.daily.key('metric123', '2024-01-15')
* @returns 'analytics:daily:metric123:2024-01-15'
*/
daily: createKeyFactory('analytics', 'daily', function (metricId, date) {
return "".concat(sanitizeKeyComponent(String(metricId)), ":").concat(sanitizeKeyComponent(date));
}, function (suffix) {
var _a, _b;
var parts = splitKeyComponents(suffix, ':', true);
if (parts.length !== 2)
return null;
return {
metricId: (_a = parts[0]) !== null && _a !== void 0 ? _a : '',
date: (_b = parts[1]) !== null && _b !== void 0 ? _b : ''
};
}),
/**
* Monthly aggregated metrics key
* @example analyticsKeys.monthly.key('metric123', '2024-01')
* @returns 'analytics:monthly:metric123:2024-01'
*/
monthly: createKeyFactory('analytics', 'monthly', function (metricId, yearMonth) {
return "".concat(sanitizeKeyComponent(String(metricId)), ":").concat(sanitizeKeyComponent(yearMonth));
}, function (suffix) {
var _a, _b;
var parts = splitKeyComponents(suffix, ':', true);
if (parts.length !== 2)
return null;
return {
metricId: (_a = parts[0]) !== null && _a !== void 0 ? _a : '',
yearMonth: (_b = parts[1]) !== null && _b !== void 0 ? _b : ''
};
}),
/**
* Custom report key
* @example analyticsKeys.report.key('report123')
* @returns 'analytics:report:report123'
*/
report: createSimpleKeyFactory('analytics', 'report'),
/**
* Funnel analysis key
* @example analyticsKeys.funnel.key('funnel123', '2024-01-15')
* @returns 'analytics:funnel:funnel123:2024-01-15'
*/
funnel: createKeyFactory('analytics', 'funnel', function (funnelId, date) {
return "".concat(sanitizeKeyComponent(String(funnelId)), ":").concat(sanitizeKeyComponent(date));
}, function (suffix) {
var _a, _b;
var parts = splitKeyComponents(suffix, ':', true);
if (parts.length !== 2)
return null;
return {
funnelId: (_a = parts[0]) !== null && _a !== void 0 ? _a : '',
date: (_b = parts[1]) !== null && _b !== void 0 ? _b : ''
};
}),
/**
* Cohort analysis key
* @example analyticsKeys.cohort.key('cohort123', '2024-W03')
* @returns 'analytics:cohort:cohort123:2024-W03'
*/
cohort: createKeyFactory('analytics', 'cohort', function (cohortId, period) {
return "".concat(sanitizeKeyComponent(String(cohortId)), ":").concat(sanitizeKeyComponent(period));
}, function (suffix) {
var _a, _b;
var parts = splitKeyComponents(suffix, ':', true);
if (parts.length !== 2)
return null;
return {
cohortId: (_a = parts[0]) !== null && _a !== void 0 ? _a : '',
period: (_b = parts[1]) !== null && _b !== void 0 ? _b : ''
};
}),
/**
* Event stream buffer key
* @example analyticsKeys.eventStream.key('stream123')
* @returns 'analytics:eventStream:stream123'
*/
eventStream: createSimpleKeyFactory('analytics', 'eventStream'),
/**
* Dashboard configuration key
* @example analyticsKeys.dashboard.key('dashboard123')
* @returns 'analytics:dashboard:dashboard123'
*/
dashboard: createSimpleKeyFactory('analytics', 'dashboard'),
};
//# sourceMappingURL=analytics.mjs.map