graphile-test
Version:
PostGraphile Testing
68 lines (67 loc) • 2.33 kB
JavaScript
;
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' || (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;