UNPKG

@bespunky/angular-zen

Version:

The Angular tools you always wished were there.

1 lines 4.44 kB
{"version":3,"file":"bespunky-angular-zen-utils.mjs","sources":["../../../../libs/angular-zen/utils/src/access-object.ts","../../../../libs/angular-zen/utils/src/bespunky-angular-zen-utils.ts"],"sourcesContent":["function isArrayIndexer(path: string): boolean\n{\n const numericIndexerRegex = /^\\w+\\[\\d+\\]$/;\n\n return numericIndexerRegex.test(path);\n}\n\nfunction accessArrayProperty<T>(value: unknown, arrayPath: string)\n{\n if (!value) throw new Error(`Cannot access ${ arrayPath }. 'value' is ${ value }`);\n\n if (typeof value !== 'object') throw new Error(`Cannot access ${ arrayPath }. ${ value } is not an object.`);\n\n const pathRegex = /^(?<property>(\\w+))\\[(?<index>(\\d+))\\]$/;\n\n const lookup = pathRegex.exec(arrayPath)?.groups;\n \n if (!(lookup && lookup['property'] && lookup['index']))\n throw new Error(`\n Tried to access array on at '${ arrayPath }', but the path is invalid.\n Expected a path of the shape 'propertyName[index].'\n `);\n \n const { property, index } = lookup;\n\n const array = (value as Record<string, unknown>)[property];\n\n if (!Array.isArray(array)) throw new TypeError(`Array property access failed. Value at '${ property }' is not an array.`);\n\n return {\n get: (): T => array[+index],\n set: (newValue: T) => array[+index] = newValue\n };\n}\n\nexport function access<T>(value: Record<string, unknown>, path: string)\n{\n if (!path) return { get: (): T => value as T, set: () => void 0 };\n\n const parts = path.split('.').filter(part => part !== '');\n\n while (parts.length > 1)\n {\n const nextPath = parts.shift() as string;\n\n if (typeof value !== 'object') throw new Error(``);\n\n value = (isArrayIndexer(nextPath) ? accessArrayProperty(value, nextPath).get() : value[nextPath]) as Record<string, unknown>;\n }\n\n const lastPath = parts.shift() as string;\n\n return {\n get: isArrayIndexer(lastPath)\n ? (): T => accessArrayProperty(value, lastPath).get() as T\n : (): T => value[lastPath] as T,\n set: isArrayIndexer(lastPath)\n ? (newValue: T) => accessArrayProperty<T>(value, lastPath).set(newValue)\n : (newValue: T) => value[lastPath] = newValue\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}