"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const codegen_1 = require("ajv/dist/compile/codegen"); const transform = { trimStart: (s) => s.trimStart(), trimEnd: (s) => s.trimEnd(), trimLeft: (s) => s.trimStart(), trimRight: (s) => s.trimEnd(), trim: (s) => s.trim(), toLowerCase: (s) => s.toLowerCase(), toUpperCase: (s) => s.toUpperCase(), toEnumCase: (s, cfg) => (cfg === null || cfg === void 0 ? void 0 : cfg.hash[configKey(s)]) || s, }; const getDef = Object.assign(_getDef, { transform }); function _getDef() { return { keyword: "transform", schemaType: "array", before: "enum", code(cxt) { const { gen, data, schema, parentSchema, it } = cxt; const { parentData, parentDataProperty } = it; const tNames = schema; if (!tNames.length) return; let cfg; if (tNames.includes("toEnumCase")) { const config = getEnumCaseCfg(parentSchema); cfg = gen.scopeValue("obj", { ref: config, code: (0, codegen_1.stringify)(config) }); } gen.if((0, codegen_1._) `typeof ${data} == "string" && ${parentData} !== undefined`, () => { gen.assign(data, transformExpr(tNames.slice())); gen.assign((0, codegen_1._) `${parentData}[${parentDataProperty}]`, data); }); function transformExpr(ts) { if (!ts.length) return data; const t = ts.pop(); if (!(t in transform)) throw new Error(`transform: unknown transformation ${t}`); const func = gen.scopeValue("func", { ref: transform[t], code: (0, codegen_1._) `require("ajv-keywords/dist/definitions/transform").transform${(0, codegen_1.getProperty)(t)}`, }); const arg = transformExpr(ts); return cfg && t === "toEnumCase" ? (0, codegen_1._) `${func}(${arg}, ${cfg})` : (0, codegen_1._) `${func}(${arg})`; } }, metaSchema: { type: "array", items: { type: "string", enum: Object.keys(transform) }, }, }; } function getEnumCaseCfg(parentSchema) { // build hash table to enum values const cfg = { hash: {} }; // requires `enum` in the same schema as transform if (!parentSchema.enum) throw new Error('transform: "toEnumCase" requires "enum"'); for (const v of parentSchema.enum) { if (typeof v !== "string") continue; const k = configKey(v); // requires all `enum` values have unique keys if (cfg.hash[k]) { throw new Error('transform: "toEnumCase" requires all lowercased "enum" values to be unique'); } cfg.hash[k] = v; } return cfg; } function configKey(s) { return s.toLowerCase(); } exports.default = getDef; module.exports = getDef; //# sourceMappingURL=transform.js.map