diff options
author | Minteck <contact@minteck.org> | 2022-04-09 16:39:03 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-04-09 16:40:02 +0200 |
commit | 0f8967b9113d698cdeb2d05ca85d2d9a80461c24 (patch) | |
tree | 00664ddd9c55a2c33631fd1bd33e556cea9c67e5 /node_modules/dot-prop | |
parent | dac03ac82bc0f8044a4b339c27b5390e4dcecf2f (diff) | |
download | voicer-0f8967b9113d698cdeb2d05ca85d2d9a80461c24.tar.gz voicer-0f8967b9113d698cdeb2d05ca85d2d9a80461c24.tar.bz2 voicer-0f8967b9113d698cdeb2d05ca85d2d9a80461c24.zip |
Diffstat (limited to 'node_modules/dot-prop')
-rw-r--r-- | node_modules/dot-prop/index.js | 141 | ||||
-rw-r--r-- | node_modules/dot-prop/license | 21 | ||||
-rw-r--r-- | node_modules/dot-prop/package.json | 48 | ||||
-rw-r--r-- | node_modules/dot-prop/readme.md | 105 |
4 files changed, 315 insertions, 0 deletions
diff --git a/node_modules/dot-prop/index.js b/node_modules/dot-prop/index.js new file mode 100644 index 0000000..189831c --- /dev/null +++ b/node_modules/dot-prop/index.js @@ -0,0 +1,141 @@ +'use strict'; +const isObj = require('is-obj'); + +const disallowedKeys = [ + '__proto__', + 'prototype', + 'constructor' +]; + +const isValidPath = pathSegments => !pathSegments.some(segment => disallowedKeys.includes(segment)); + +function getPathSegments(path) { + const pathArr = path.split('.'); + const parts = []; + + for (let i = 0; i < pathArr.length; i++) { + let p = pathArr[i]; + + while (p[p.length - 1] === '\\' && pathArr[i + 1] !== undefined) { + p = p.slice(0, -1) + '.'; + p += pathArr[++i]; + } + + parts.push(p); + } + + if (!isValidPath(parts)) { + return []; + } + + return parts; +} + +module.exports = { + get(obj, path, value) { + if (!isObj(obj) || typeof path !== 'string') { + return value === undefined ? obj : value; + } + + const pathArr = getPathSegments(path); + if (pathArr.length === 0) { + return; + } + + for (let i = 0; i < pathArr.length; i++) { + if (!Object.prototype.propertyIsEnumerable.call(obj, pathArr[i])) { + return value; + } + + obj = obj[pathArr[i]]; + + if (obj === undefined || obj === null) { + // `obj` is either `undefined` or `null` so we want to stop the loop, and + // if this is not the last bit of the path, and + // if it did't return `undefined` + // it would return `null` if `obj` is `null` + // but we want `get({foo: null}, 'foo.bar')` to equal `undefined`, or the supplied value, not `null` + if (i !== pathArr.length - 1) { + return value; + } + + break; + } + } + + return obj; + }, + + set(obj, path, value) { + if (!isObj(obj) || typeof path !== 'string') { + return obj; + } + + const root = obj; + const pathArr = getPathSegments(path); + if (pathArr.length === 0) { + return; + } + + for (let i = 0; i < pathArr.length; i++) { + const p = pathArr[i]; + + if (!isObj(obj[p])) { + obj[p] = {}; + } + + if (i === pathArr.length - 1) { + obj[p] = value; + } + + obj = obj[p]; + } + + return root; + }, + + delete(obj, path) { + if (!isObj(obj) || typeof path !== 'string') { + return; + } + + const pathArr = getPathSegments(path); + + for (let i = 0; i < pathArr.length; i++) { + const p = pathArr[i]; + + if (i === pathArr.length - 1) { + delete obj[p]; + return; + } + + obj = obj[p]; + + if (!isObj(obj)) { + return; + } + } + }, + + has(obj, path) { + if (!isObj(obj) || typeof path !== 'string') { + return false; + } + + const pathArr = getPathSegments(path); + + for (let i = 0; i < pathArr.length; i++) { + if (isObj(obj)) { + if (!(pathArr[i] in obj)) { + return false; + } + + obj = obj[pathArr[i]]; + } else { + return false; + } + } + + return true; + } +}; diff --git a/node_modules/dot-prop/license b/node_modules/dot-prop/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/dot-prop/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/dot-prop/package.json b/node_modules/dot-prop/package.json new file mode 100644 index 0000000..c9b0f58 --- /dev/null +++ b/node_modules/dot-prop/package.json @@ -0,0 +1,48 @@ +{ + "name": "dot-prop", + "version": "4.2.1", + "description": "Get, set, or delete a property from a nested object using a dot path", + "license": "MIT", + "repository": "sindresorhus/dot-prop", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=4" + }, + "scripts": { + "test": "xo && ava", + "bench": "matcha bench.js" + }, + "files": [ + "index.js" + ], + "keywords": [ + "obj", + "object", + "prop", + "property", + "dot", + "path", + "get", + "set", + "delete", + "del", + "access", + "notation", + "dotty" + ], + "dependencies": { + "is-obj": "^1.0.0" + }, + "devDependencies": { + "ava": "1.4.1", + "matcha": "^0.7.0", + "xo": "0.24.0" + }, + "xo": { + "esnext": true + } +} diff --git a/node_modules/dot-prop/readme.md b/node_modules/dot-prop/readme.md new file mode 100644 index 0000000..0e18f78 --- /dev/null +++ b/node_modules/dot-prop/readme.md @@ -0,0 +1,105 @@ +# dot-prop [![Build Status](https://travis-ci.org/sindresorhus/dot-prop.svg?branch=master)](https://travis-ci.org/sindresorhus/dot-prop) + +> Get, set, or delete a property from a nested object using a dot path + + +## Install + +``` +$ npm install --save dot-prop +``` + + +## Usage + +```js +const dotProp = require('dot-prop'); + +// getter +dotProp.get({foo: {bar: 'unicorn'}}, 'foo.bar'); +//=> 'unicorn' + +dotProp.get({foo: {bar: 'a'}}, 'foo.notDefined.deep'); +//=> undefined + +dotProp.get({foo: {bar: 'a'}}, 'foo.notDefined.deep', 'default value'); +//=> 'default value' + +dotProp.get({foo: {'dot.dot': 'unicorn'}}, 'foo.dot\\.dot'); +//=> 'unicorn' + +// setter +const obj = {foo: {bar: 'a'}}; +dotProp.set(obj, 'foo.bar', 'b'); +console.log(obj); +//=> {foo: {bar: 'b'}} + +const foo = dotProp.set({}, 'foo.bar', 'c'); +console.log(foo); +//=> {foo: {bar: 'c'}} + +dotProp.set(obj, 'foo.baz', 'x'); +console.log(obj); +//=> {foo: {bar: 'b', baz: 'x'}} + +// has +dotProp.has({foo: {bar: 'unicorn'}}, 'foo.bar'); +//=> true + +// deleter +const obj = {foo: {bar: 'a'}}; +dotProp.delete(obj, 'foo.bar'); +console.log(obj); +//=> {foo: {}} + +obj.foo.bar = {x: 'y', y: 'x'}; +dotProp.delete(obj, 'foo.bar.x'); +console.log(obj); +//=> {foo: {bar: {y: 'x'}}} +``` + + +## API + +### get(obj, path, [defaultValue]) + +### set(obj, path, value) + +Returns the object. + +### has(obj, path) + +### delete(obj, path) + +#### obj + +Type: `Object` + +Object to get, set, or delete the `path` value. + +#### path + +Type: `string` + +Path of the property in the object, using `.` to separate each nested key. + +Use `\\.` if you have a `.` in the key. + +The following path components are invalid and results in `undefined` being returned: `__proto__`, `prototype`, `constructor`. + +#### value + +Type: `any` + +Value to set at `path`. + +#### defaultValue + +Type: `any` + +Default value. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) |