UNPKG

@prismicio/client

Version:

The official JavaScript + TypeScript client library for Prismic

104 lines (102 loc) 3.3 kB
//#region src/filter.ts /** * Formats the value of a filter element to a stringified version accepted by * the Prismic REST API. * * @param value - Value to format. * * @returns `value` formatted for the Prismic REST API. */ const formatValue = (value) => { if (Array.isArray(value)) return `[${value.map(formatValue).join(", ")}]`; if (typeof value === "string") return `"${value.replace(/"/g, "\\\"")}"`; if (value instanceof Date) return `${value.getTime()}`; return `${value}`; }; /** * Creates a filter builder function for filters with a path and arguments. * * @typeParam Args - Arguments for the filter. * * @param name - Name of the filter used in the resulting string. * * @returns Filter builder function for the given name. */ const pathWithArgsFilter = (name) => { /** * @param path - Path to the value to be compared. */ const fn = (path, ...args) => { const formattedArgs = args.map(formatValue).join(", "); return `[${name}(${path}${path && args.length ? ", " : ""}${formattedArgs})]`; }; return fn; }; /** * Creates a filter builder function for filters with only a path. * * @param name - Name of the filter used in the resulting string. * * @returns Filter builder function for the given name. */ const pathFilter = (name) => { const filterFn = pathWithArgsFilter(name); /** * @param path - Path for the filter. */ const fn = (path) => { return filterFn(path); }; return fn; }; /** * Creates a filter builder function for filters with only arguments and no * path. * * @param name - Name of the filter used in the resulting string. * * @returns Filter builder function for the given name. */ const argsFilter = (name) => { const filterFn = pathWithArgsFilter(name); /** * @param args - Arguments for the filter. */ const fn = (...args) => { return filterFn("", ...args); }; return fn; }; const filter = { at: pathWithArgsFilter("at"), not: pathWithArgsFilter("not"), any: pathWithArgsFilter("any"), in: pathWithArgsFilter("in"), fulltext: pathWithArgsFilter("fulltext"), has: pathFilter("has"), missing: pathFilter("missing"), similar: argsFilter("similar"), geopointNear: pathWithArgsFilter("geopoint.near"), numberLessThan: pathWithArgsFilter("number.lt"), numberGreaterThan: pathWithArgsFilter("number.gt"), numberInRange: pathWithArgsFilter("number.inRange"), dateAfter: pathWithArgsFilter("date.after"), dateBefore: pathWithArgsFilter("date.before"), dateBetween: pathWithArgsFilter("date.between"), dateDayOfMonth: pathWithArgsFilter("date.day-of-month"), dateDayOfMonthAfter: pathWithArgsFilter("date.day-of-month-after"), dateDayOfMonthBefore: pathWithArgsFilter("date.day-of-month-before"), dateDayOfWeek: pathWithArgsFilter("date.day-of-week"), dateDayOfWeekAfter: pathWithArgsFilter("date.day-of-week-after"), dateDayOfWeekBefore: pathWithArgsFilter("date.day-of-week-before"), dateMonth: pathWithArgsFilter("date.month"), dateMonthAfter: pathWithArgsFilter("date.month-after"), dateMonthBefore: pathWithArgsFilter("date.month-before"), dateYear: pathWithArgsFilter("date.year"), dateHour: pathWithArgsFilter("date.hour"), dateHourAfter: pathWithArgsFilter("date.hour-after"), dateHourBefore: pathWithArgsFilter("date.hour-before") }; //#endregion exports.filter = filter; //# sourceMappingURL=filter.cjs.map