The name: I wanted it to be "honest", but it was occupied, so I removed a letter, and it became "honst".
Data Integrity fixer for an object matrix.
- On editing a joined matrix data needs the data integrity to be kept.
- Keeping your local state correct.
You can play with honst on CodeSandbox:
const data = [
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe", name: "John", surname: "Doe", age: "25" },
{ username: "johndoe2", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe2", name: "John", surname: "Doez", age: "22" },
]According to username field, there are many integrity issues around the array. So let honst fix these:
[
{ username: "johndoe", name: "John", surname: "Doe", age: 22 },
- { username: "johndoe", name: "John", surname: "Doe", age: 25 },
+ { username: "johndoe", name: "John", surname: "Doe", age: 22 },
{ username: "johnapple", name: "John", surname: "Apple", age: 29 },
- { username: "johnapple", name: "John", surname: "Orange", age: 22 },
+ { username: "johnapple", name: "John", surname: "Apple", age: 29 },
]- Referencing to
data[0].username,name,surname, andageshould beJohn,Doeand22. - But
data[1].ageis25and it should be fixed. - Referencing to
data[3].username,name,surname, andageshould beJohn,Appleand29. - But
data[1].ageis25,data[1].surnameisOrangeand these should be fixed as well.
honst simply fixes these integrity issues.
Install using npm or yarn:
npm install honst
# or
yarn add honst
Now you can start:
import { honst } from 'honst';
const { data, delta } = honst({
data: [
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe", name: "John", surname: "Doe", age: "25" }
],
pivot: 0, // an index number, "scan" or "reverse-scan"
delta: true, // boolean
rules: {
// the ruleset of integrity
// e.g. we want all names, surnames and ages to be same according to "username"
name: ["username"],
surname: ["username"],
age: ["username"],
}
})This will generate following data:
const fixedData = {
data: [
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
],
delta: [
{
candidatePath: "age", // the path of the field
falseValue: "25", // the wrong value
candidateValue: "22", // the candidate value
pivot: 0, // the pivot row index
candidateIndex: 1, // the false row index
}
]
}Just pass pivot value scan or reverse-scan.
If you want to fix all the rows from top-down or bottom-up, this will scan the data and fix'em all.
const { data, delta } = honst({
data: [
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe", name: "John", surname: "Doe", age: "25" },
{ username: "johndoe2", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe2", name: "John", surname: "Doez", age: "22" },
],
pivot: "scan",
delta: true,
rules: {
name: ["username"],
surname: ["username"],
age: ["username"],
}
})This will generate the following:
const fixedData = [
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe", name: "John", surname: "Doe", age: "22" },
{ username: "johndoe2", name: "John", surname: "Appleseed", age: "22" },
{ username: "johndoe2", name: "John", surname: "Appleseed", age: "22" },
]If you select scan the upper rows will be fixed first, and matching
rows below will be updated accordingly. If you select reverse-scan it'll start fixing from bottom
and scan to the top, so the bottom rows will be assumed correct.
Yes it supports nested objects as well.
const { data, delta } = honst({
data: [
// ... some nested data
],
rules: {
'user.name': ["account.username"],
'user.surname': ["account.username"],
'profile.age': ["account.username"],
}
})| Name | What's? | Type | Value |
|---|---|---|---|
| data | list to check | Array | object[] |
| rules | determines which area the areas will be controlled according to. | Array | object |
| pivot | the index of the data considered correct in the list. | Number or String | `number |
| delta | Used to get information about data corrected as a result of the operations | Boolean | boolean (Optional) |
Result in delta :
| candidatePath | modified path |
| falseValue | modified incorrect value |
| candidateValue | new value |
| pivot | correct value index in data |
| candidateIndex | modified value index in data |
- Clone and edit the source as you wish.
- Please do not forget to add tests.
- Write a descriptive PR.
This project uses MIT license.
