UNPKG

expand-value

Version:

Get deeply nested values from an object, like dot-prop and get-value, but with support for advanced features like bracket-notation and more.

107 lines (105 loc) 3.45 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/utils.ts import isNumber from "is-number"; import { Segmenter } from "intl-segmenter"; var { defineProperty } = Reflect; var isObject = /* @__PURE__ */ __name((val) => val && typeof val === "object" && !Array.isArray(val), "isObject"); var size = /* @__PURE__ */ __name((value) => { if (value == null) return 0; if (isNumber(value)) return String(value).length; if (isObject(value)) return Object.keys(value).length; if (typeof value.length === "number") return value.length; if (typeof value.size === "number") return value.size; return null; }, "size"); var findSafeBreakPoint = /* @__PURE__ */ __name((input) => { for (let i = input.length - 1; i >= 0; i--) { if (/\s/.test(input[i]) || /^[\x20-\x7E]$/.test(input[i])) { return i + 1; } } return input.length; }, "findSafeBreakPoint"); var getSegments = /* @__PURE__ */ __name((input, language = "en", granularity) => { const segmenter = new Segmenter(language, { granularity, localeMatcher: "best fit" }); return Array.from(segmenter.segment(input)).map((segment) => segment.segment); }, "getSegments"); var getGraphemes = /* @__PURE__ */ __name((input, language = "en", maxChunkLength = 500) => { const graphemes = []; let position = 0; while (position < input.length) { const remainingText = input.slice(position); const chunkSize = Math.min(maxChunkLength, remainingText.length); const potentialChunk = remainingText.slice(0, chunkSize); const breakPoint = findSafeBreakPoint(potentialChunk); const chunk = potentialChunk.slice(0, breakPoint); const chunkSegments = getSegments(chunk, language, "grapheme"); graphemes.push(...chunkSegments); position += breakPoint; } return graphemes; }, "getGraphemes"); // src/helpers.ts var first = /* @__PURE__ */ __name((value) => { if (!value) return; if (value instanceof Set || value instanceof Map) { value = [...value]; } if (isObject(value)) { return typeof value.first === "function" ? value.first() : value.first; } if (Array.isArray(value)) { return value[0]; } if (typeof value === "string") { const graphemes = getGraphemes(value.slice(0, 20)); return graphemes[0]; } return value[0]; }, "first"); var last = /* @__PURE__ */ __name((value) => { if (!value) return; if (value instanceof Set || value instanceof Map) { value = [...value]; } if (isObject(value)) { return typeof value.last === "function" ? value.last() : value.last; } if (Array.isArray(value)) { return value[value.length - 1]; } if (typeof value === "string") { const graphemes = getGraphemes(value.slice(-20)); return graphemes[graphemes.length - 1]; } return value[value.length - 1]; }, "last"); var length = /* @__PURE__ */ __name((value) => { if (typeof value?.length === "number") { return value.length; } if (typeof value?.size === "number") { return value.size; } return size2(value); }, "length"); var size2 = /* @__PURE__ */ __name((value) => { if (value === null) { return 1; } if (typeof value?.size === "number") { return value.size; } if (typeof value?.length === "number") { return value.length; } return size(value); }, "size"); export { first, last, length, size2 as size }; //# sourceMappingURL=helpers.mjs.map