@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
JavaScript
;
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;