UNPKG

rolldown

Version:

Fast JavaScript/TypeScript bundler in Rust with Rollup-compatible API.

48 lines (47 loc) 1.64 kB
//#region src/get-log-filter.ts const getLogFilter = (filters) => { if (filters.length === 0) return () => true; const normalizedFilters = filters.map((filter) => filter.split("&").map((subFilter) => { const inverted = subFilter.startsWith("!"); if (inverted) subFilter = subFilter.slice(1); const [key, ...value] = subFilter.split(":"); return { inverted, key: key.split("."), parts: value.join(":").split("*") }; })); return (log) => { nextIntersectedFilter: for (const intersectedFilters of normalizedFilters) { for (const { inverted, key, parts } of intersectedFilters) { const isFilterSatisfied = testFilter(log, key, parts); if (inverted ? isFilterSatisfied : !isFilterSatisfied) continue nextIntersectedFilter; } return true; } return false; }; }; const testFilter = (log, key, parts) => { let rawValue = log; for (let index = 0; index < key.length; index++) { if (!rawValue) return false; const part = key[index]; if (!(part in rawValue)) return false; rawValue = rawValue[part]; } let value = typeof rawValue === "object" ? JSON.stringify(rawValue) : String(rawValue); if (parts.length === 1) return value === parts[0]; if (!value.startsWith(parts[0])) return false; const lastPartIndex = parts.length - 1; for (let index = 1; index < lastPartIndex; index++) { const part = parts[index]; const position = value.indexOf(part); if (position === -1) return false; value = value.slice(position + part.length); } return value.endsWith(parts[lastPartIndex]); }; var get_log_filter_default = getLogFilter; //#endregion export { get_log_filter_default as default };