typedash
Version:
modern, type-safe collection of utility functions
63 lines (57 loc) • 1.58 kB
JavaScript
;
// src/functions/createTypeGuard/createTypeGuard.ts
function createTypeGuard(values) {
const setValues = new Set(values);
return function predicate(v) {
return setValues.has(v);
};
}
// src/functions/_internal/isMaliciousObjectPath.ts
var isMaliciousObjectProperty = createTypeGuard(
Object.getOwnPropertyNames(Object.getPrototypeOf({}))
);
// src/functions/compact/compact.ts
function compact(array) {
return array?.filter(Boolean) ?? [];
}
// src/functions/assert/assert.ts
function assert(condition, message) {
if (arguments.length === 0) {
return;
}
if (!condition) {
throw new AssertionError(message);
}
}
var AssertionError = class extends Error {
constructor(message) {
super(
compact([
`Assertion not satisfied`,
message ? `: "${message}"` : ""
]).join("")
);
}
};
// src/functions/set/set.ts
function set(object, path, value) {
const segments = path.match(pathSegmentsRegex);
assert(segments !== null, "Invalid path");
assert(
segments.every((segment) => isMaliciousObjectProperty(segment) === false),
"Potentially malicious path"
);
let currentObject = object;
for (let index = 0; index < segments.length - 1; index++) {
const segment = segments[index];
if (segment in currentObject === false) {
currentObject[segment] = {};
}
currentObject = currentObject[segment];
}
currentObject[segments.at(-1)] = value;
}
var pathSegmentsRegex = /[\w-]+/g;
exports.set = set;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.cjs.map