UNPKG

get-value

Version:

Use property paths like 'a.b.c' to get a nested value from an object. Even works when keys have dots in them (no other dot-prop library we tested does this, or does it correctly).

1 lines 6 kB
{"version":3,"sources":["../index.ts"],"sourcesContent":["/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nexport interface Options {\n default?: unknown;\n separator?: string;\n joinChar?: string;\n join?: (segs: string[]) => string; // eslint-disable-line\n split?: (path: string) => string[]; // eslint-disable-line\n isValid?: (key: string, target: {}) => boolean; // eslint-disable-line\n}\n\nconst isObject = v => v !== null && typeof v === 'object';\n\nconst join = (\n segs: string[],\n joinChar: string,\n options: unknown\n): string => {\n if (typeof options.join === 'function') {\n return options.join(segs);\n }\n return segs[0] + joinChar + segs[1];\n};\n\nconst split = (\n path: string,\n splitChar: string,\n options: unknown\n): string[] => {\n if (typeof options.split === 'function') {\n return options.split(path);\n }\n\n return path.split(splitChar);\n};\n\nconst isValid = (\n key: string,\n target: unknown = {},\n options: unknown\n): boolean => {\n if (typeof options?.isValid === 'function') {\n return options.isValid(key, target);\n }\n\n return true;\n};\n\nconst isValidObject = (v: unknown): boolean => {\n return isObject(v) || typeof v === 'function';\n};\n\n// eslint-disable-next-line complexity\nexport const getValue = (\n target: unknown,\n path: string | number | string[],\n options: Options = {}\n): unknown => {\n if (!isObject(options)) {\n options = { default: options };\n }\n\n if (!isValidObject(target)) {\n return typeof options.default !== 'undefined' ? options.default : target;\n }\n\n if (typeof path === 'number') {\n path = String(path);\n }\n\n const pathIsArray = Array.isArray(path);\n const pathIsString = typeof path === 'string';\n const splitChar = options.separator || '.';\n const joinChar = options.joinChar || (typeof splitChar === 'string' ? splitChar : '.');\n\n if (!pathIsString && !pathIsArray) {\n return target;\n }\n\n let value = target[path];\n if (value === undefined && typeof target.get === 'function') {\n value = target.get(path);\n }\n\n if (value !== undefined) {\n return isValid(path, target, options) ? value : options.default;\n }\n\n const segs = pathIsArray ? path : split(path, splitChar, options);\n const len = segs.length;\n let idx = 0;\n\n do {\n let prop = segs[idx];\n if (typeof prop !== 'string') {\n prop = String(prop);\n }\n\n while (prop && prop.slice(-1) === '\\\\') {\n prop = join([prop.slice(0, -1), segs[++idx] || ''], joinChar, options);\n }\n\n value = target[prop];\n if (value === undefined && typeof target.get === 'function') {\n value = target.get(prop);\n }\n\n if (value !== undefined) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = value;\n } else {\n let hasProp = false;\n let n = idx + 1;\n\n while (n < len) {\n prop = join([prop, segs[n++]], joinChar, options);\n value = target[prop];\n if (value === undefined && typeof target.get === 'function') {\n value = target.get(prop);\n }\n\n if ((hasProp = value !== undefined)) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = value;\n idx = n - 1;\n break;\n }\n }\n\n if (!hasProp) {\n return options.default;\n }\n }\n } while (++idx < len && isValidObject(target));\n\n if (idx === len) {\n return target;\n }\n\n return options.default;\n};\n\nexport default getValue;\n"],"mappings":"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","names":[]}