UNPKG

lodash-walk-object

Version:

Walk all properties deep in object with lodash help

1 lines 29.6 kB
{"version":3,"file":"lodash-walk-object-browser.mjs","sources":["../../../tmp-libs-for-dist/lodash-walk-object/projects/lodash-walk-object/src/lib/lodash-walk-object.ts","../../../tmp-libs-for-dist/lodash-walk-object/projects/lodash-walk-object/src/lib/index.ts","../../../tmp-libs-for-dist/lodash-walk-object/projects/lodash-walk-object/src/lodash-walk-object-browser.ts"],"sourcesContent":["import { _ } from 'tnp-core/browser';\n\nimport {\n Circ,\n Models,\n Iterator,\n UnknownRecord,\n PropertyEntry,\n PreparedPath,\n} from './models';\n\nexport class Helpers {\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n public static get Walk() {\n const self = this;\n\n return {\n Object(\n json: object,\n iterator: Iterator,\n options: Models.StartIteratorOptions = {},\n ): {\n circs: Circ[] | undefined;\n } {\n const internalOptions = self.createInternalOptions(\n options,\n _.isFunction(iterator),\n );\n\n const result = self._walk(json, json, iterator, '', internalOptions);\n\n return {\n circs: result.circural,\n };\n },\n\n ObjectBy(\n property: string,\n inContext: object,\n iterator: Iterator,\n options: Models.StartIteratorOptions = {},\n ): {\n circs: Circ[] | undefined;\n } {\n const contextRecord = inContext as UnknownRecord;\n\n if (_.isFunction(iterator)) {\n iterator(inContext, '', self._changeValue(inContext, property, true));\n }\n\n const json = contextRecord[property];\n\n if (!self.isObjectLike(json)) {\n return {\n circs: undefined,\n };\n }\n\n return self.Walk.Object(json, iterator, options);\n },\n };\n }\n\n private static createInternalOptions(\n options: Models.StartIteratorOptions,\n hasIterator: boolean,\n ): Models.InternalValues {\n const internalOptions: Models.InternalValues = {\n ...options,\n\n walkGetters: options.walkGetters ?? true,\n checkCircural: options.checkCircural ?? false,\n breadthWalk: options.breadthWalk ?? false,\n considerSharedObjects: options.considerSharedObjects ?? false,\n\n include: options.include ?? [],\n exclude: options.exclude ?? [],\n\n isGetter: false,\n isCircural: false,\n\n hasIterator,\n\n _valueChanged: false,\n _skip: false,\n _exit: false,\n };\n\n internalOptions.skipObject = () => {\n internalOptions._skip = true;\n };\n\n internalOptions.exit = () => {\n internalOptions._exit = true;\n };\n\n if (internalOptions.checkCircural) {\n internalOptions.stack = [];\n internalOptions.circural = [];\n }\n\n return internalOptions;\n }\n\n private static _walk(\n json: object,\n currentValue: unknown,\n iterator: Iterator,\n lodashPath: string,\n options: Models.InternalValues,\n ): Models.InternalValues {\n if (options.breadthWalk) {\n return this.walkBreadthFirst(json, iterator, lodashPath, options);\n }\n\n this.walkDepthFirst(\n json,\n currentValue,\n iterator,\n lodashPath,\n options,\n false,\n );\n\n return options;\n }\n\n private static walkDepthFirst(\n json: object,\n currentValue: unknown,\n iterator: Iterator,\n lodashPath: string,\n options: Models.InternalValues,\n isGetter: boolean,\n ): void {\n if (options._exit) {\n return;\n }\n\n if (this.shouldSkipPath(options.include, options.exclude, lodashPath)) {\n return;\n }\n\n const pushedToStack = this.prepareCurrentValue(\n currentValue,\n lodashPath,\n options,\n isGetter,\n );\n\n try {\n if (options._exit) {\n return;\n }\n\n if (options.hasIterator && lodashPath !== '') {\n iterator(\n currentValue,\n lodashPath,\n this._changeValue(json, lodashPath, false, options),\n options,\n );\n }\n\n if (options._exit) {\n return;\n }\n\n if (options._valueChanged) {\n currentValue = _.get(json, lodashPath);\n options._valueChanged = false;\n }\n\n if (options.isCircural) {\n return;\n }\n\n if (options._skip) {\n options._skip = false;\n return;\n }\n\n const children = this.findChildren(\n currentValue,\n lodashPath,\n options.walkGetters ?? true,\n );\n\n for (const child of children) {\n if (options._exit) {\n return;\n }\n\n this.walkDepthFirst(\n json,\n child.value,\n iterator,\n child.path,\n options,\n child.isGetter,\n );\n }\n } finally {\n if (pushedToStack && options.considerSharedObjects) {\n options.stack?.pop();\n }\n }\n }\n\n private static walkBreadthFirst(\n json: object,\n iterator: Iterator,\n lodashPath: string,\n options: Models.InternalValues,\n ): Models.InternalValues {\n const queue: Models.Ver[] = [\n {\n v: json,\n p: lodashPath,\n isGetter: false,\n ancestors: [],\n },\n ];\n\n while (queue.length > 0) {\n if (options._exit) {\n break;\n }\n\n const current = queue.shift();\n\n if (!current) {\n break;\n }\n\n if (this.shouldSkipPath(options.include, options.exclude, current.p)) {\n continue;\n }\n\n options.isGetter = current.isGetter ?? false;\n options.isCircural = false;\n\n let childAncestors = current.ancestors ?? [];\n\n if (options.checkCircural && this.isObjectLike(current.v)) {\n if (options.considerSharedObjects) {\n const existingAncestor = childAncestors.find(\n entry => entry.target === current.v,\n );\n\n if (existingAncestor) {\n options.circural ??= [];\n\n options.circural.push({\n pathToObj: current.p,\n circuralTargetPath: existingAncestor.path,\n });\n\n options.isCircural = true;\n } else {\n childAncestors = [\n ...childAncestors,\n {\n target: current.v,\n path: current.p,\n },\n ];\n }\n } else {\n options.stack ??= [];\n options.circural ??= [];\n\n const existing = options.stack.find(\n entry => entry.target === current.v,\n );\n\n if (existing) {\n options.circural.push({\n pathToObj: current.p,\n circuralTargetPath: existing.path,\n });\n\n options.isCircural = true;\n } else {\n options.stack.push({\n target: current.v,\n path: current.p,\n });\n }\n }\n }\n\n if (options.hasIterator && current.p !== '') {\n iterator(\n current.v,\n current.p,\n this._changeValue(json, current.p, false, options),\n options,\n );\n }\n\n if (options._exit) {\n break;\n }\n\n if (options._valueChanged) {\n current.v = _.get(json, current.p);\n options._valueChanged = false;\n }\n\n if (options.isCircural) {\n continue;\n }\n\n if (options._skip) {\n options._skip = false;\n continue;\n }\n\n const children = this.findChildren(\n current.v,\n current.p,\n options.walkGetters ?? true,\n );\n\n for (const child of children) {\n queue.push({\n v: child.value,\n p: child.path,\n parent: current,\n isGetter: child.isGetter,\n ancestors: childAncestors,\n });\n }\n }\n\n return options;\n }\n\n private static prepareCurrentValue(\n value: unknown,\n lodashPath: string,\n options: Models.InternalValues,\n isGetter: boolean,\n ): boolean {\n options.isGetter = isGetter;\n options.isCircural = false;\n\n if (!options.checkCircural || !this.isObjectLike(value)) {\n return false;\n }\n\n const stack = options.stack ?? [];\n const circular = options.circural ?? [];\n\n options.stack = stack;\n options.circural = circular;\n\n const existing = stack.find(entry => entry.target === value);\n\n if (existing) {\n circular.push({\n pathToObj: lodashPath,\n circuralTargetPath: existing.path,\n });\n\n options.isCircural = true;\n return false;\n }\n\n stack.push({\n target: value,\n path: lodashPath,\n });\n\n return true;\n }\n\n private static findChildren(\n value: unknown,\n parentPath: string,\n walkGetters: boolean,\n ): Array<{\n value: unknown;\n path: string;\n isGetter: boolean;\n }> {\n if (Array.isArray(value)) {\n return value.map((child, index) => ({\n value: child,\n path: `${parentPath}[${index}]`,\n isGetter: false,\n }));\n }\n\n if (!this.isObjectLike(value)) {\n return [];\n }\n\n const entries = this.getPropertyEntries(value, walkGetters);\n\n return entries.map(entry => ({\n value: entry.value,\n path: this.appendPath(parentPath, entry.key),\n isGetter: entry.isGetter,\n }));\n }\n\n private static getPropertyEntries(\n object: object,\n walkGetters: boolean,\n ): PropertyEntry[] {\n const result: PropertyEntry[] = [];\n const handledKeys = new Set<string>();\n\n for (const key of Object.keys(object)) {\n const readResult = this.readProperty(object, key);\n\n if (!readResult.success) {\n continue;\n }\n\n handledKeys.add(key);\n\n result.push({\n key,\n value: readResult.value,\n isGetter: false,\n });\n }\n\n if (!walkGetters) {\n return result;\n }\n\n for (const key of Object.getOwnPropertyNames(object)) {\n if (handledKeys.has(key)) {\n continue;\n }\n\n const readResult = this.readProperty(object, key);\n\n if (!readResult.success) {\n continue;\n }\n\n handledKeys.add(key);\n\n result.push({\n key,\n value: readResult.value,\n isGetter: true,\n });\n }\n\n let prototype = Object.getPrototypeOf(object) as object | null;\n\n while (prototype && prototype !== Object.prototype) {\n const descriptors = Object.getOwnPropertyDescriptors(prototype);\n\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if (\n key === 'constructor' ||\n handledKeys.has(key) ||\n typeof descriptor.get !== 'function'\n ) {\n continue;\n }\n\n const readResult = this.readProperty(object, key);\n\n if (!readResult.success) {\n continue;\n }\n\n handledKeys.add(key);\n\n result.push({\n key,\n value: readResult.value,\n isGetter: true,\n });\n }\n\n prototype = Object.getPrototypeOf(prototype) as object | null;\n }\n\n return result;\n }\n\n private static readProperty(\n object: object,\n key: string,\n ):\n | {\n success: true;\n value: unknown;\n }\n | {\n success: false;\n } {\n try {\n return {\n success: true,\n value: Reflect.get(object, key),\n };\n } catch {\n return {\n success: false,\n };\n }\n }\n\n private static appendPath(parentPath: string, property: string): string {\n const propertyPath = this.propertyToPath(property);\n\n if (parentPath === '') {\n return propertyPath;\n }\n\n if (propertyPath.startsWith('[')) {\n return `${parentPath}${propertyPath}`;\n }\n\n return `${parentPath}.${propertyPath}`;\n }\n\n private static propertyToPath(property: string): string {\n /**\n * Preserve the old path format for keys that lodash can safely\n * interpret in dot notation.\n *\n * Only keys containing dots or brackets need quoted bracket syntax,\n * because those characters change the lodash path meaning.\n */\n if (\n property !== '' &&\n !property.includes('.') &&\n !property.includes('[') &&\n !property.includes(']')\n ) {\n return property;\n }\n\n return `[${JSON.stringify(property)}]`;\n }\n\n private static shouldSkipPath(\n include: string[] = [],\n exclude: string[] = [],\n lodashPath: string,\n ): boolean {\n const normalizedPath = this.normalizeRootArrayPath(lodashPath);\n\n if (normalizedPath === '') {\n return false;\n }\n\n const excluded = exclude.some(excludedPath =>\n this.isSamePathOrDescendant(normalizedPath, excludedPath),\n );\n\n if (excluded) {\n return true;\n }\n\n if (include.length === 0) {\n return false;\n }\n\n const includedOrRequiredParent = include.some(includedPath => {\n return (\n this.isSamePathOrDescendant(normalizedPath, includedPath) ||\n this.isAncestorPath(normalizedPath, includedPath)\n );\n });\n\n return !includedOrRequiredParent;\n }\n\n private static normalizeRootArrayPath(path: string): string {\n return path.replace(/^\\[(?:'|\")?\\d+(?:'|\")?\\]\\.?/, '').trim();\n }\n\n private static isSamePathOrDescendant(\n path: string,\n parentPath: string,\n ): boolean {\n return (\n path === parentPath ||\n path.startsWith(`${parentPath}.`) ||\n path.startsWith(`${parentPath}[`)\n );\n }\n\n private static isAncestorPath(\n possibleAncestor: string,\n path: string,\n ): boolean {\n return (\n path.startsWith(`${possibleAncestor}.`) ||\n path.startsWith(`${possibleAncestor}[`)\n );\n }\n\n private static _changeValue(\n json: object,\n lodashPath: string,\n simpleChange = false,\n options?: Models.InternalValues,\n ): (newValue: unknown) => void {\n const { contextPath, property } = this._prepareParams(lodashPath);\n\n return (newValue: unknown): void => {\n if (contextPath === '') {\n simpleChange = true;\n }\n\n if (simpleChange) {\n Reflect.set(json, property, newValue);\n } else {\n const context = _.get(json, contextPath);\n\n if (this.isObjectLike(context)) {\n Reflect.set(context, property, newValue);\n }\n }\n\n if (options) {\n options._valueChanged = true;\n }\n };\n }\n\n private static _prepareParams(lodashPath: string): PreparedPath {\n const contextPath = this._Helpers.Path.getContextPath(lodashPath);\n\n const rawProperty = this._Helpers.Path.getPropertyPath(\n lodashPath,\n contextPath,\n );\n\n const property =\n rawProperty.trim() !== '' && !Number.isNaN(Number(rawProperty))\n ? Number(rawProperty)\n : rawProperty;\n\n return {\n contextPath,\n property,\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private static get _Helpers() {\n return {\n get Path() {\n return {\n getPropertyPath(lodashPath: string, contextPath: string): string {\n return lodashPath\n .replace(contextPath, '')\n .replace(/^\\./, '')\n .replace(/^\\[/, '')\n .replace(/\\]$/, '')\n .replace(/^[\"']|[\"']$/g, '');\n },\n\n getContextPath(path: string): string {\n let result: string;\n\n if (path.endsWith(']')) {\n result = path.replace(/\\[(?:\"|')?.+?(?:\"|')?\\]$/, '');\n } else {\n result = path.replace(/\\.([a-zA-Z0-9_$@\\-/:]+)$/, '');\n }\n\n return result === path ? '' : result;\n },\n };\n },\n };\n }\n\n private static isObjectLike(value: unknown): value is object {\n return (\n value !== null &&\n (typeof value === 'object' || typeof value === 'function')\n );\n }\n}\n\nexport const walk = {\n Object: Helpers.Walk.Object,\n ObjectBy: Helpers.Walk.ObjectBy,\n};","export * from './lodash-walk-object';\nexport * from './models';\n// export * from './start-cli'; // @backend","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}