UNPKG

@rnaga/wp-node

Version:

👉 **[View Full Documentation at rnaga.github.io/wp-node →](https://rnaga.github.io/wp-node/)**

126 lines (125 loc) • 4.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.filterRecordByFields = exports.blogFlag = exports.userRef = exports.stringMetaTable = exports.stringZeroOrOne = exports.string = exports.path = exports.boolean = exports.stringArr = exports.numberArr = exports.number = exports.booleanWithDefault = exports.numberWithDefault = exports.undefinedIfEmptyString = void 0; exports.unionOfLiterals = unionOfLiterals; const zod_1 = require("zod"); // https://github.com/colinhacks/zod/discussions/2790 function unionOfLiterals(constants) { const literals = constants.map((x) => zod_1.z.literal(x)); return literals; } const undefinedIfEmptyString = (v) => !v || 0 >= v.length ? undefined : v; exports.undefinedIfEmptyString = undefinedIfEmptyString; const numberWithDefault = (d) => { return zod_1.z.union([ zod_1.z.number().nonnegative().default(d), zod_1.z .string() //.refine((v) => /^[0-9]+$/.test(v)) .transform((v) => parseInt(v)), ]); }; exports.numberWithDefault = numberWithDefault; const booleanWithDefault = (d) => zod_1.z.union([ zod_1.z.boolean().transform((v) => (v ? "true" : "false")), zod_1.z.enum(["true", "false"]).default(d), zod_1.z.number().max(1).nonnegative(), ]); exports.booleanWithDefault = booleanWithDefault; exports.number = zod_1.z.union([ zod_1.z.number().nonnegative(), zod_1.z .string() // .refine((v) => /^[0-9]+$/.test(v)) .transform((v) => parseInt(v)), ]); exports.numberArr = zod_1.z.union([ zod_1.z.array(zod_1.z.number()), zod_1.z.string().transform((v) => v.split(",").map((v) => parseInt(v))), ]); exports.stringArr = zod_1.z.union([ zod_1.z.array(zod_1.z.string()), zod_1.z.string().transform((v) => v.split(",")), ]); exports.boolean = zod_1.z.union([ zod_1.z.boolean(), zod_1.z .enum(["1", "0", "true", "false"]) .transform((v) => v === "1" || v === "true"), ]); exports.path = zod_1.z .string() .min(1) .max(100) .trim() .refine((v) => v.startsWith("/")); exports.string = zod_1.z.any().transform((v) => `${v}`); exports.stringZeroOrOne = zod_1.z.union([ zod_1.z.enum(["0", "1"]).optional().default("0"), zod_1.z .number() .int() .refine((value) => value === 0 || value === 1) .transform((value) => `${value}`), zod_1.z.boolean().transform((value) => (value ? "1" : "0")), ]); exports.stringMetaTable = zod_1.z.enum([ "post", "comment", "blog", "term", "user", "site", ]); exports.userRef = zod_1.z.string().transform((val) => { if (val.match(/^\d+$/)) { return parseInt(val); } return val; }); exports.blogFlag = zod_1.z.enum([ "public", "archived", "mature", "spam", "deleted", ]); const filterRecordByFields = (data, fields) => { // If data is a string, return it as is if (typeof data === "string") { return data; } const fieldsSchema = zod_1.z .string() .optional() .transform((val) => val ? val .split(",") .map((field) => field.trim()) .filter((field) => field.length > 0) : []); const parsedFields = fieldsSchema.parse(Array.isArray(fields) ? fields.join(",") : fields); // If fields are specified, filter the result data if (0 == parsedFields.length) { return data; } const filterObject = (record) => { const filteredRecord = {}; parsedFields.forEach((field) => { if (field in record) { filteredRecord[field] = record[field]; } }); return filteredRecord; }; // If data is an object, filter it if (typeof data === "object" && !Array.isArray(data)) { return filterObject(data); } // If data is an array, filter each item if (Array.isArray(data)) { return data.map((item) => filterObject(item)); } return data; }; exports.filterRecordByFields = filterRecordByFields;