Socket
Socket
Sign inDemoInstall

object-fields

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

object-fields - npm Package Compare versions

Comparing version 3.0.1 to 4.0.0

69

lib/index.js

@@ -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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc