ts-simple-mapper
Version:
A lightweight utility for mapping object properties between different shapes
76 lines (74 loc) • 2.67 kB
JavaScript
;
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);
// src/index.ts
var index_exports = {};
__export(index_exports, {
simpleMap: () => simpleMap
});
module.exports = __toCommonJS(index_exports);
function simpleMap(source, options = {}) {
const { exclude = [], transforms = {}, fieldMappings = {} } = options;
const result = {};
for (const sourceKey in source) {
if (Object.prototype.hasOwnProperty.call(source, sourceKey)) {
if (exclude.includes(sourceKey)) continue;
const targetKey = Object.entries(fieldMappings).find(([_, value2]) => value2 === sourceKey)?.[0] || sourceKey;
const value = source[sourceKey];
if (transforms && targetKey in transforms) {
const transform = transforms[targetKey];
if (typeof transform === "function") {
result[targetKey] = transform(cloneValue(value));
} else if (typeof transform === "object" && transform !== null && typeof value === "object" && value !== null) {
result[targetKey] = simpleMap(value, { transforms: transform });
} else {
result[targetKey] = cloneValue(value);
}
} else {
result[targetKey] = cloneValue(value);
}
}
}
return result;
}
function cloneValue(value, seen = /* @__PURE__ */ new WeakSet()) {
if (value === null || typeof value !== "object") {
return value;
}
if (seen.has(value)) {
throw new Error("Circular reference detected during deep cloning");
}
seen.add(value);
if (Array.isArray(value)) {
return value.map((item) => cloneValue(item, seen));
}
if (value instanceof Date) {
return new Date(value);
}
const result = {};
for (const key in value) {
if (Object.prototype.hasOwnProperty.call(value, key)) {
result[key] = cloneValue(value[key], seen);
}
}
return result;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
simpleMap
});