circular-reference-remover
Version:
Removes the inner circular references from objects
145 lines (123 loc) • 2.96 kB
Markdown
Removes the inner circular references from objects
- [GITHUB](https://github.com/joaopmi/circular-reference-remover)
- [NPM](https://www.npmjs.com/package/circular-reference-remover)
```
npm i circular-reference-remover
```
```typescript
import {remove} from "./circular-remover";
let a:any = {name:'circular a'};
let b:any = {name:'circular b'};
let c:any = {name:'circular c'};
let d:any = {name:'not circular'};
a.a = a;
a.b = b;
a.c = c;
a.d = d;
b.b = b;
b.a = a;
b.c = c;
b.d = d;
c.c = c;
c.a = a;
c.b = b;
c.d = d;
remove(a).then((result:any)=>{
console.log(
JSON.stringify(result,null,2)
);
})
console.log('\n------------------\n');
//WITH setUndefined TRUE
remove(a,{setUndefined:true}).then((result:any)=>{
console.log(
JSON.stringify(result,null,2)
);
})
```
Result:
```json
{
"name": "circular a",
"a": null,
"b": {
"name": "circular b",
"b": null,
"a": null,
"c": {
"name": "circular c",
"c": null,
"a": null,
"b": null,
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
},
"c": {
"name": "circular c",
"c": null,
"a": null,
"b": {
"name": "circular b",
"b": null,
"a": null,
"c": null,
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
}
------------------
{
"name": "circular a",
"b": {
"name": "circular b",
"c": {
"name": "circular c",
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
},
"c": {
"name": "circular c",
"b": {
"name": "circular b",
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
},
"d": {
"name": "not circular"
}
}
```
- Function ```remove(src:any,options?:remover.Options):Promise<any>``` - Returns a Promise that resolves a copy of the ```src``` object with its inner circular references setted to ```null``` or ```undefined```. If the ```src``` is ```null``` or ```undefined``` return a Promise with the respective value.
- Function ```removeSync(src:any,options?:remover.Options):any``` - Returns a copy of the ```src``` object with its inner circular references setted to ```null``` or ```undefined```. If the ```src``` is ```null``` or ```undefined``` return the respective value.
- ```RemoverOptions``` -
- - ```setUndefined?:boolean``` - If true set references as ```undefined``` instead of ```null```
Pull requests are welcome, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.