object-fields
Advanced tools
Comparing version 3.0.1 to 4.0.0
@@ -1,14 +0,10 @@ | ||
"use strict"; | ||
import objectScan from 'object-scan'; | ||
const objectScan = require('object-scan'); | ||
const expander = /([^,()]*?)\(([^()]*?)\)/; | ||
module.exports.split = fields => { | ||
export const split = (fields) => { | ||
let result = fields; | ||
while (result.match(expander)) { | ||
result = result.replace(expander, (m, p1, p2) => p2.split(',').map(e => `${p1}.${e}`).join(',')); | ||
result = result.replace(expander, (m, p1, p2) => p2.split(',').map((e) => `${p1}.${e}`).join(',')); | ||
} | ||
result = result.split(','); | ||
@@ -18,26 +14,32 @@ return [...new Set(result)]; | ||
const joinRec = input => Object.entries(input).map(([key, value]) => { | ||
switch (Object.keys(value).length) { | ||
case 0: | ||
return key; | ||
const joinRec = (input) => Object.entries(input) | ||
.map(([key, value]) => { | ||
switch (Object.keys(value).length) { | ||
case 0: | ||
return key; | ||
case 1: | ||
return `${key}.${joinRec(value)}`; | ||
default: | ||
return `${key}(${joinRec(value)})`; | ||
} | ||
}) | ||
.join(','); | ||
case 1: | ||
return `${key}.${joinRec(value)}`; | ||
default: | ||
return `${key}(${joinRec(value)})`; | ||
} | ||
}).join(','); | ||
module.exports.join = fields => { | ||
export const join = (fields) => { | ||
const result = {}; | ||
fields.forEach(path => path.split('.').reduce((cur, key) => Object.assign(cur, { | ||
[key]: cur[key] || {} | ||
})[key], result)); | ||
fields.forEach((path) => path.split('.') | ||
.reduce((cur, key) => Object.assign(cur, { | ||
[key]: cur[key] || {} | ||
})[key], result)); | ||
return joinRec(result); | ||
}; | ||
module.exports.getParents = fields => [...fields.reduce((prev, cur) => cur.split('').map((e, idx) => e === '.' ? idx : -1).filter(pos => pos !== -1).reduce((p, c) => p.add(cur.slice(0, c)), prev), new Set())]; | ||
export const getParents = (fields) => [...fields | ||
.reduce((prev, cur) => cur | ||
.split('') | ||
.map((e, idx) => (e === '.' ? idx : -1)) | ||
.filter((pos) => pos !== -1) | ||
.reduce((p, c) => p.add(cur.slice(0, c)), prev), new Set())]; | ||
module.exports.Retainer = fields => { | ||
export const Retainer = (fields) => { | ||
const retainer = objectScan(['**'].concat(fields), { | ||
@@ -47,6 +49,3 @@ rtn: 'count', | ||
breakFn: ({ | ||
parent, | ||
property, | ||
getMatchedBy, | ||
getTraversedBy | ||
parent, property, getMatchedBy, getTraversedBy | ||
}) => { | ||
@@ -56,3 +55,2 @@ if (parent === undefined) { | ||
} | ||
if (getMatchedBy().length > 1) { | ||
@@ -62,3 +60,2 @@ // matched by '**' and another needle => keep and break | ||
} | ||
if (getTraversedBy().length === 1) { | ||
@@ -72,13 +69,11 @@ // traversed by only '**' => delete and break | ||
} | ||
return true; | ||
} // look further | ||
} | ||
// look further | ||
return false; | ||
} | ||
}); | ||
return obj => { | ||
return (obj) => { | ||
retainer(obj); | ||
}; | ||
}; | ||
}; |
{ | ||
"name": "object-fields", | ||
"version": "3.0.1", | ||
"type": "module", | ||
"version": "4.0.0", | ||
"description": "Utility functions around nested object fields", | ||
"main": "lib/index.js", | ||
"dependencies": { | ||
"object-scan": "17.0.0" | ||
"object-scan": "19.0.0" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "7.14.8", | ||
"@babel/core": "7.15.0", | ||
"@babel/register": "7.15.3", | ||
"@blackflux/eslint-plugin-rules": "2.0.3", | ||
"@blackflux/robo-config-plugin": "5.3.0", | ||
"babel-eslint": "10.1.0", | ||
"babel-preset-latest-node": "5.5.1", | ||
"chai": "4.3.4", | ||
"coveralls": "3.1.1", | ||
"eslint": "7.32.0", | ||
"eslint-config-airbnb-base": "14.2.1", | ||
"eslint-plugin-import": "2.24.2", | ||
"@babel/core": "7.22.9", | ||
"@babel/eslint-parser": "7.22.9", | ||
"@babel/register": "7.22.5", | ||
"@blackflux/eslint-plugin-rules": "3.0.0", | ||
"@blackflux/robo-config-plugin": "9.1.9", | ||
"c8": "8.0.1", | ||
"chai": "4.3.7", | ||
"eslint": "8.46.0", | ||
"eslint-config-airbnb-base": "15.0.0", | ||
"eslint-plugin-import": "2.28.0", | ||
"eslint-plugin-json": "3.1.0", | ||
"eslint-plugin-markdown": "2.2.0", | ||
"eslint-plugin-mocha": "9.0.0", | ||
"js-gardener": "3.0.3", | ||
"nyc": "15.1.0", | ||
"semantic-release": "17.4.7" | ||
"eslint-plugin-markdown": "3.0.1", | ||
"eslint-plugin-mocha": "10.1.0", | ||
"js-gardener": "5.0.1" | ||
}, | ||
"scripts": { | ||
"clean": "rm -rf lib", | ||
"build": "npx babel src --out-dir lib --copy-files --include-dotfiles --config-file ./.babelrc", | ||
"build": "cp -rf ./src ./lib", | ||
"build-clean": "yarn run clean && yarn run build", | ||
"test-simple": "nyc mocha \"./test/**/*.spec.js\"", | ||
"test-simple": "c8 mocha --experimental-loader=./test/hot.js \"./test/**/*.spec.js\"", | ||
"test": "yarn run clean && yarn run gardener && yarn run test-simple", | ||
"coveralls": "node ./node_modules/coveralls/bin/coveralls.js < ./coverage/lcov.info", | ||
"semantic-release": "yarn run build-clean && npx semantic-release", | ||
"gardener": "node gardener", | ||
"gardener": "node gardener.js", | ||
"docker": "docker run --net host -u`id -u`:`id -g` -v $(pwd):/user/project -v ~/.aws:/user/.aws -v ~/.npmrc:/user/.npmrc -w /user/project -it --entrypoint /bin/bash", | ||
@@ -59,32 +55,2 @@ "t": "yarn test", | ||
"homepage": "https://github.com/blackflux/object-fields#readme", | ||
"nyc": { | ||
"tempDir": "./coverage/.nyc_output", | ||
"report-dir": "./coverage", | ||
"check-coverage": true, | ||
"per-file": false, | ||
"lines": 100, | ||
"statements": 100, | ||
"functions": 100, | ||
"branches": 100, | ||
"include": [ | ||
"**/*.js" | ||
], | ||
"reporter": [ | ||
"lcov", | ||
"text-summary" | ||
], | ||
"require": [ | ||
"@babel/register" | ||
], | ||
"extension": [], | ||
"cache": true, | ||
"all": true, | ||
"babel": true, | ||
"exclude": [ | ||
"gardener.js", | ||
"node_modules/*", | ||
"coverage/*", | ||
"lib/*" | ||
] | ||
}, | ||
"licenses": [ | ||
@@ -97,3 +63,3 @@ { | ||
"engines": { | ||
"node": ">= 12" | ||
"node": ">= 16" | ||
}, | ||
@@ -100,0 +66,0 @@ "files": [ |
@@ -22,15 +22,17 @@ # object-fields | ||
```js | ||
const objectFields = require('object-fields'); | ||
import { | ||
split, join, getParents, Retainer | ||
} from 'object-fields'; | ||
objectFields.split('data(file1,file2)'); | ||
split('data(file1,file2)'); | ||
// => ["data.file1", "data.file2"] | ||
objectFields.join(['data', 'data']); | ||
join(['data', 'data']); | ||
// => "data" | ||
objectFields.join(['path.to.thing', 'path.to.other.thing']); | ||
join(['path.to.thing', 'path.to.other.thing']); | ||
// => "path.to(thing,other.thing)" | ||
objectFields.getParents(['child', 'parent.child', 'grandparent.parent.child']); | ||
getParents(['child', 'parent.child', 'grandparent.parent.child']); | ||
// => ['parent', 'grandparent', 'grandparent.parent'] | ||
const data = [{ id: 1, name: 'one' }, { id: 2, name: 'two' }]; | ||
const retain = objectFields.Retainer(['name']); | ||
const retain = Retainer(['name']); | ||
retain(data); // updates data in place | ||
@@ -37,0 +39,0 @@ // data => [{ name: 'one' }, { name: 'two' }] |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
14
68
62
Yes
7323
+ Addedobject-scan@19.0.0(transitive)
- Removedobject-scan@17.0.0(transitive)
Updatedobject-scan@19.0.0