UNPKG

nostr-tools

Version:
112 lines (108 loc) 3.82 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // filter.ts var filter_exports = {}; __export(filter_exports, { getFilterLimit: () => getFilterLimit, matchFilter: () => matchFilter, matchFilters: () => matchFilters, mergeFilters: () => mergeFilters }); module.exports = __toCommonJS(filter_exports); // kinds.ts function isReplaceableKind(kind) { return [0, 3].includes(kind) || 1e4 <= kind && kind < 2e4; } function isAddressableKind(kind) { return 3e4 <= kind && kind < 4e4; } // filter.ts function matchFilter(filter, event) { if (filter.ids && filter.ids.indexOf(event.id) === -1) { return false; } if (filter.kinds && filter.kinds.indexOf(event.kind) === -1) { return false; } if (filter.authors && filter.authors.indexOf(event.pubkey) === -1) { return false; } for (let f in filter) { if (f[0] === "#") { let tagName = f.slice(1); let values = filter[`#${tagName}`]; if (values && !event.tags.find(([t, v]) => t === f.slice(1) && values.indexOf(v) !== -1)) return false; } } if (filter.since && event.created_at < filter.since) return false; if (filter.until && event.created_at > filter.until) return false; return true; } function matchFilters(filters, event) { for (let i = 0; i < filters.length; i++) { if (matchFilter(filters[i], event)) { return true; } } return false; } function mergeFilters(...filters) { let result = {}; for (let i = 0; i < filters.length; i++) { let filter = filters[i]; Object.entries(filter).forEach(([property, values]) => { if (property === "kinds" || property === "ids" || property === "authors" || property[0] === "#") { result[property] = result[property] || []; for (let v = 0; v < values.length; v++) { let value = values[v]; if (!result[property].includes(value)) result[property].push(value); } } }); if (filter.limit && (!result.limit || filter.limit > result.limit)) result.limit = filter.limit; if (filter.until && (!result.until || filter.until > result.until)) result.until = filter.until; if (filter.since && (!result.since || filter.since < result.since)) result.since = filter.since; } return result; } function getFilterLimit(filter) { if (filter.ids && !filter.ids.length) return 0; if (filter.kinds && !filter.kinds.length) return 0; if (filter.authors && !filter.authors.length) return 0; for (const [key, value] of Object.entries(filter)) { if (key[0] === "#" && Array.isArray(value) && !value.length) return 0; } return Math.min( Math.max(0, filter.limit ?? Infinity), filter.ids?.length ?? Infinity, filter.authors?.length && filter.kinds?.every((kind) => isReplaceableKind(kind)) ? filter.authors.length * filter.kinds.length : Infinity, filter.authors?.length && filter.kinds?.every((kind) => isAddressableKind(kind)) && filter["#d"]?.length ? filter.authors.length * filter.kinds.length * filter["#d"].length : Infinity ); }