UNPKG

typedash

Version:

modern, type-safe collection of utility functions

63 lines (57 loc) 1.58 kB
'use strict'; // 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