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.

1 lines 5.05 kB
{"version":3,"sources":["../../src/utils.ts"],"sourcesContent":["import isNumber from 'is-number';\nimport { Segmenter } from 'intl-segmenter'; // optimized version of Intl.Segmenter\nexport { isNumber };\n\nconst { defineProperty } = Reflect;\n\nexport const isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\nexport const unquote = str => {\n if (!str) return '';\n return str.replace(/^['\"`]|['\"`]$/g, '');\n};\n\nexport const define = (node, key, value) => {\n defineProperty(node, key, {\n configurable: true,\n enumerable: false,\n writable: true,\n value\n });\n};\n\nexport const size = value => {\n if (value == null) return 0;\n if (isNumber(value)) return String(value).length;\n if (isObject(value)) return Object.keys(value).length;\n if (typeof value.length === 'number') return value.length;\n if (typeof value.size === 'number') return value.size;\n return null;\n};\n\nexport const isValidObject = val => {\n return isObject(val) || Array.isArray(val) || typeof val === 'function';\n};\n\nexport const isSafeKey = key => {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n};\n\nexport const isValid = (key, data, options) => {\n if (!isSafeKey(key)) {\n return false;\n }\n\n if (typeof options.isValid === 'function') {\n return options.isValid(key, data);\n }\n\n return true;\n};\n\nexport const isArrayLike = obj => {\n return obj != null && typeof obj === 'object' && typeof obj.length === 'number';\n};\n\nexport const toKey = value => {\n if (typeof value === 'symbol') return value;\n if (value === 0 && 1 / value === -Infinity) return '-0';\n return String(value);\n};\n\nexport const findSafeBreakPoint = input => {\n // Work backwards from the end of the input\n for (let i = input.length - 1; i >= 0; i--) {\n // Check for whitespace or simple ASCII characters\n if (/\\s/.test(input[i]) || /^[\\x20-\\x7E]$/.test(input[i])) {\n return i + 1;\n }\n }\n\n // If no safe break points were found, return the full length\n return input.length;\n};\n\nexport const getSegments = (input, language = 'en', granularity) => {\n const segmenter = new Segmenter(language, { granularity, localeMatcher: 'best fit' });\n return Array.from(segmenter.segment(input)).map(segment => segment.segment);\n};\n\nexport const getGraphemes = (input, language = 'en', maxChunkLength = 500) => {\n const graphemes = [];\n let position = 0;\n\n while (position < input.length) {\n const remainingText = input.slice(position);\n const chunkSize = Math.min(maxChunkLength, remainingText.length);\n const potentialChunk = remainingText.slice(0, chunkSize);\n\n // Find a safe position to break the chunk\n const breakPoint = findSafeBreakPoint(potentialChunk);\n const chunk = potentialChunk.slice(0, breakPoint);\n\n // Process the chunk with Intl.Segmenter\n const chunkSegments = getSegments(chunk, language, 'grapheme');\n graphemes.push(...chunkSegments);\n\n position += breakPoint;\n }\n\n return graphemes;\n};\n"],"mappings":";;;;AAAA,OAAO,cAAc;AACrB,SAAS,iBAAiB;AAG1B,IAAM,EAAE,eAAe,IAAI;AAEpB,IAAM,WAAW,gCAAO,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,GAA3D;AAEjB,IAAM,UAAU,gCAAO;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,IAAI,QAAQ,kBAAkB,EAAE;AACzC,GAHuB;AAKhB,IAAM,SAAS,wBAAC,MAAM,KAAK,UAAU;AAC1C,iBAAe,MAAM,KAAK;AAAA,IACxB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,EACF,CAAC;AACH,GAPsB;AASf,IAAM,OAAO,kCAAS;AAC3B,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,SAAS,KAAK,EAAG,QAAO,OAAO,KAAK,EAAE;AAC1C,MAAI,SAAS,KAAK,EAAG,QAAO,OAAO,KAAK,KAAK,EAAE;AAC/C,MAAI,OAAO,MAAM,WAAW,SAAU,QAAO,MAAM;AACnD,MAAI,OAAO,MAAM,SAAS,SAAU,QAAO,MAAM;AACjD,SAAO;AACT,GAPoB;AASb,IAAM,gBAAgB,gCAAO;AAClC,SAAO,SAAS,GAAG,KAAK,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ;AAC/D,GAF6B;AAItB,IAAM,YAAY,gCAAO;AAC9B,SAAO,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ;AACjE,GAFyB;AAIlB,IAAM,UAAU,wBAAC,KAAK,MAAM,YAAY;AAC7C,MAAI,CAAC,UAAU,GAAG,GAAG;AACnB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,WAAO,QAAQ,QAAQ,KAAK,IAAI;AAAA,EAClC;AAEA,SAAO;AACT,GAVuB;AAYhB,IAAM,cAAc,gCAAO;AAChC,SAAO,OAAO,QAAQ,OAAO,QAAQ,YAAY,OAAO,IAAI,WAAW;AACzE,GAF2B;AAIpB,IAAM,QAAQ,kCAAS;AAC5B,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,UAAU,KAAK,IAAI,UAAU,UAAW,QAAO;AACnD,SAAO,OAAO,KAAK;AACrB,GAJqB;AAMd,IAAM,qBAAqB,kCAAS;AAEzC,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAE1C,QAAI,KAAK,KAAK,MAAM,CAAC,CAAC,KAAK,gBAAgB,KAAK,MAAM,CAAC,CAAC,GAAG;AACzD,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AAGA,SAAO,MAAM;AACf,GAXkC;AAa3B,IAAM,cAAc,wBAAC,OAAO,WAAW,MAAM,gBAAgB;AAClE,QAAM,YAAY,IAAI,UAAU,UAAU,EAAE,aAAa,eAAe,WAAW,CAAC;AACpF,SAAO,MAAM,KAAK,UAAU,QAAQ,KAAK,CAAC,EAAE,IAAI,aAAW,QAAQ,OAAO;AAC5E,GAH2B;AAKpB,IAAM,eAAe,wBAAC,OAAO,WAAW,MAAM,iBAAiB,QAAQ;AAC5E,QAAM,YAAY,CAAC;AACnB,MAAI,WAAW;AAEf,SAAO,WAAW,MAAM,QAAQ;AAC9B,UAAM,gBAAgB,MAAM,MAAM,QAAQ;AAC1C,UAAM,YAAY,KAAK,IAAI,gBAAgB,cAAc,MAAM;AAC/D,UAAM,iBAAiB,cAAc,MAAM,GAAG,SAAS;AAGvD,UAAM,aAAa,mBAAmB,cAAc;AACpD,UAAM,QAAQ,eAAe,MAAM,GAAG,UAAU;AAGhD,UAAM,gBAAgB,YAAY,OAAO,UAAU,UAAU;AAC7D,cAAU,KAAK,GAAG,aAAa;AAE/B,gBAAY;AAAA,EACd;AAEA,SAAO;AACT,GArB4B;","names":[]}