Skip to content

Instantly share code, notes, and snippets.

@codeAdrian
Created May 2, 2023 07:28
Show Gist options
  • Save codeAdrian/55a5c75afa8051f78699bb2581beed0d to your computer and use it in GitHub Desktop.
Save codeAdrian/55a5c75afa8051f78699bb2581beed0d to your computer and use it in GitHub Desktop.
/* UTILS */
const getFullName = (firstName, lastName, middleName) =>
[firstName, middleName, lastName].filter((n) => !!n).join(" ");
const getFormattedBalance = (locale, currency, value) => {
return new Intl.NumberFormat(locale, {
style: "currency",
currency
}).format(value);
};
const getRedactedEmail = (email) => {
const [name, ...rest] = email.split("@");
const [service, domain] = rest.join("").split(".");
const redactedName = `${name[0]}*****${name[name.length - 1]}`;
const redactedDomain = `${service[0]}***${
service[service.length - 1]
}.${domain}`;
return `${redactedName}@${redactedDomain}`;
};
const getRedactedName = (name) => (Boolean(name.length) ? `${name[0]}.` : "");
/* PROXY */
const handleRedactedGet = (obj, prop) => {
if (prop === "fullName") {
return getFullName(
Reflect.get(obj, "firstName"),
getRedactedName(Reflect.get(obj, "lastName")),
getRedactedName(Reflect.get(obj, "middleName") || "")
);
}
if (prop === "middleName") {
return getRedactedName(Reflect.get(obj, "middleName"));
}
if (prop === "lastName") {
return getRedactedName(Reflect.get(obj, "lastName"));
}
if (prop === "email") {
return getRedactedEmail(Reflect.get(obj, "email"));
}
if (!(prop in obj)) {
console.error(`${prop} doesn't exist in object`, obj);
return;
}
return "Data not available";
};
const createRedactedDataProxy = (user) => {
const proxy = new Proxy(user, {
get: handleRedactedGet
});
return proxy;
};
/* USE */
const user = createRedactedDataProxy({
firstName: "John",
middleName: "",
lastName: "Doe",
email: "john.doe@email.com",
balance: 2649.53,
currency: "USD",
locale: "en-US"
});
console.log(user.fullName); // John D.
console.log(user.email); // j*****e@e***l.com
console.log(user.balance); // 'Data not available'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment