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
JavaScript
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