UNPKG

graphile-test

Version:
68 lines (67 loc) 2.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.snapshot = exports.prune = exports.pruneHashes = exports.pruneUUIDs = exports.pruneIdArrays = exports.pruneIds = exports.pruneDates = void 0; const uuidRegexp = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; const idReplacement = (v) => (!v ? v : '[ID]'); function mapValues(obj, fn) { return Object.entries(obj).reduce((acc, [key, value]) => { acc[key] = fn(value, key); return acc; }, {}); } const pruneDates = (row) => mapValues(row, (v, k) => { if (!v) { return v; } if (v instanceof Date) { return '[DATE]'; } else if (typeof v === 'string' && /(_at|At)$/.test(k) && /^20[0-9]{2}-[0-9]{2}-[0-9]{2}/.test(v)) { return '[DATE]'; } return v; }); exports.pruneDates = pruneDates; const pruneIds = (row) => mapValues(row, (v, k) => (k === 'id' || k === 'rowId' || (typeof k === 'string' && k.endsWith('_id'))) && (typeof v === 'string' || typeof v === 'number') ? idReplacement(v) : v); exports.pruneIds = pruneIds; const pruneIdArrays = (row) => mapValues(row, (v, k) => typeof k === 'string' && k.endsWith('_ids') && Array.isArray(v) ? `[UUIDs-${v.length}]` : v); exports.pruneIdArrays = pruneIdArrays; const pruneUUIDs = (row) => mapValues(row, (v, k) => { if (typeof v !== 'string') { return v; } if (['uuid', 'queue_name'].includes(k) && uuidRegexp.test(v)) { return '[UUID]'; } if (k === 'gravatar' && /^[0-9a-f]{32}$/i.test(v)) { return '[gUUID]'; } return v; }); exports.pruneUUIDs = pruneUUIDs; const pruneHashes = (row) => mapValues(row, (v, k) => typeof k === 'string' && k.endsWith('_hash') && typeof v === 'string' && v.startsWith('$') ? '[hash]' : v); exports.pruneHashes = pruneHashes; const prune = (obj) => (0, exports.pruneHashes)((0, exports.pruneUUIDs)((0, exports.pruneIds)((0, exports.pruneIdArrays)((0, exports.pruneDates)(obj))))); exports.prune = prune; const snapshot = (obj) => { if (Array.isArray(obj)) { return obj.map(exports.snapshot); } else if (obj && typeof obj === 'object') { return mapValues((0, exports.prune)(obj), exports.snapshot); } return obj; }; exports.snapshot = snapshot;