dot-object 2.1.3 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -1
- package/README.md +27 -0
- package/bower.json +1 -1
- package/dist/dot-object.js +1 -1
- package/dist/dot-object.min.js +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/src/dot-object.js +1 -1
- package/test/dot-json.js +22 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# ChangeLog
|
|
2
2
|
|
|
3
|
-
## 2020-
|
|
3
|
+
## 2020-09-10 Version 2.1.4
|
|
4
|
+
* [[`94b9eb8a2d`](https://github.com/rhalff/dot-object/commit/94b9eb8a2d)] - Fix parsing of array paths for non standard separators (Fixed by boidolr #58)
|
|
5
|
+
|
|
6
|
+
## 2020-02-16 Version 2.1.3
|
|
4
7
|
* fix possible pollution of prototype for paths containing __proto__
|
|
5
8
|
|
|
6
9
|
## 2019-11-02 Version 2.1.1
|
package/README.md
CHANGED
|
@@ -359,6 +359,33 @@ Result:
|
|
|
359
359
|
}
|
|
360
360
|
```
|
|
361
361
|
|
|
362
|
+
### Keep array
|
|
363
|
+
|
|
364
|
+
Set keepArray to true.
|
|
365
|
+
|
|
366
|
+
```javascript
|
|
367
|
+
var dot = require('dot-object');
|
|
368
|
+
|
|
369
|
+
var obj = {
|
|
370
|
+
id: 'my-id',
|
|
371
|
+
other: [1, 2, 3],
|
|
372
|
+
some: { array: ['A', 'B'] }
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
dot.keepArray = true;
|
|
376
|
+
var tgt = dot.dot(obj);
|
|
377
|
+
|
|
378
|
+
console.log(tgt);
|
|
379
|
+
```
|
|
380
|
+
Result:
|
|
381
|
+
```json
|
|
382
|
+
{
|
|
383
|
+
"id": "my-id",
|
|
384
|
+
"other": [1, 2, 3],
|
|
385
|
+
"some.array": ["A", "B"]
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
362
389
|
## Using a different separator
|
|
363
390
|
|
|
364
391
|
If you do not like dot notation, you are free to specify a different separator.
|
package/bower.json
CHANGED
package/dist/dot-object.js
CHANGED
package/dist/dot-object.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(t){"use strict";function s(t,r){var e,i;if("function"==typeof r)void 0!==(i=r(t))&&(t=i);else if(Array.isArray(r))for(e=0;e<r.length;e++)void 0!==(i=r[e](t))&&(t=i);return t}function p(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return Object(t)===t}function c(t){return 0===Object.keys(t).length}function i(t){return-1===r.indexOf(t)}var r=["__proto__","prototype","constructor"];function u(t,r){0<=t.indexOf("[")&&(t=t.replace(/\[/g,
|
|
1
|
+
!function(t){"use strict";function s(t,r){var e,i;if("function"==typeof r)void 0!==(i=r(t))&&(t=i);else if(Array.isArray(r))for(e=0;e<r.length;e++)void 0!==(i=r[e](t))&&(t=i);return t}function p(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return Object(t)===t}function c(t){return 0===Object.keys(t).length}function i(t){return-1===r.indexOf(t)}var r=["__proto__","prototype","constructor"];function u(t,r){0<=t.indexOf("[")&&(t=t.replace(/\[/g,r).replace(/]/g,""));var e=t.split(r);if(e.filter(i).length!==e.length)throw Error("Refusing to update blacklisted property "+t);return e}var f=Object.prototype.hasOwnProperty;function n(t,r,e,i){if(!(this instanceof n))return new n(t,r,e,i);void 0===r&&(r=!1),void 0===e&&(e=!0),void 0===i&&(i=!0),this.separator=t||".",this.override=r,this.useArray=e,this.useBrackets=i,this.keepArray=!1,this.cleanup=[]}var e=new n(".",!1,!0,!0);function o(t){return function(){return e[t].apply(e,arguments)}}n.prototype._fill=function(t,r,e,i){var n=t.shift();if(0<t.length){if(r[n]=r[n]||(this.useArray&&function(t){return/^\d+$/.test(t)}(t[0])?[]:{}),!a(r[n])){if(!this.override){if(!a(e)||!c(e))throw new Error("Trying to redefine `"+n+"` which is a "+typeof r[n]);return}r[n]={}}this._fill(t,r[n],e,i)}else{if(!this.override&&a(r[n])&&!c(r[n])){if(!a(e)||!c(e))throw new Error("Trying to redefine non-empty obj['"+n+"']");return}r[n]=s(e,i)}},n.prototype.object=function(i,n){var o=this;return Object.keys(i).forEach(function(t){var r=void 0===n?null:n[t],e=u(t,o.separator).join(o.separator);-1!==e.indexOf(o.separator)?(o._fill(e.split(o.separator),i,i[t],r),delete i[t]):i[t]=s(i[t],r)}),i},n.prototype.str=function(t,r,e,i){var n=u(t,this.separator).join(this.separator);return-1!==t.indexOf(this.separator)?this._fill(n.split(this.separator),e,r,i):e[t]=s(r,i),e},n.prototype.pick=function(t,r,e,i){var n,o,s,a,c,p,f;for(o=u(t,this.separator),n=0;n<o.length;n++){if(p=o[n],f=r,a="-"===p[0]&&Array.isArray(f)&&/^-\d+$/.test(p)?f.length+parseInt(p,10):p,!(r&&"object"==typeof r&&a in r))return;if(n===o.length-1)return e?(s=r[a],i&&Array.isArray(r)?r.splice(a,1):delete r[a],Array.isArray(r)&&(c=o.slice(0,-1).join("."),-1===this.cleanup.indexOf(c)&&this.cleanup.push(c)),s):r[a];r=r[a]}return e&&Array.isArray(r)&&(r=r.filter(function(t){return void 0!==t})),r},n.prototype.delete=function(t,r){return this.remove(t,r,!0)},n.prototype.remove=function(t,r,e){var i;if(this.cleanup=[],Array.isArray(t)){for(i=0;i<t.length;i++)this.pick(t[i],r,!0,e);return e||this._cleanup(r),r}return this.pick(t,r,!0,e)},n.prototype._cleanup=function(t){var r,e,i,n;if(this.cleanup.length){for(e=0;e<this.cleanup.length;e++)r=(r=(n=(i=this.cleanup[e].split(".")).splice(0,-1).join("."))?this.pick(n,t):t)[i[0]].filter(function(t){return void 0!==t}),this.set(this.cleanup[e],r,t);this.cleanup=[]}},n.prototype.del=n.prototype.remove,n.prototype.move=function(t,r,e,i,n){return"function"==typeof i||Array.isArray(i)?this.set(r,s(this.pick(t,e,!0),i),e,n):(n=i,this.set(r,this.pick(t,e,!0),e,n)),e},n.prototype.transfer=function(t,r,e,i,n,o){return"function"==typeof n||Array.isArray(n)?this.set(r,s(this.pick(t,e,!0),n),i,o):(o=n,this.set(r,this.pick(t,e,!0),i,o)),i},n.prototype.copy=function(t,r,e,i,n,o){return"function"==typeof n||Array.isArray(n)?this.set(r,s(JSON.parse(JSON.stringify(this.pick(t,e,!1))),n),i,o):(o=n,this.set(r,this.pick(t,e,!1),i,o)),i},n.prototype.set=function(t,r,e,i){var n,o,s,a;if(void 0===r)return e;for(s=u(t,this.separator),n=0;n<s.length;n++){if(a=s[n],n===s.length-1)if(i&&p(r)&&p(e[a]))for(o in r)f.call(r,o)&&(e[a][o]=r[o]);else if(i&&Array.isArray(e[a])&&Array.isArray(r))for(var c=0;c<r.length;c++)e[s[n]].push(r[c]);else e[a]=r;else f.call(e,a)&&(p(e[a])||Array.isArray(e[a]))||(/^\d+$/.test(s[n+1])?e[a]=[]:e[a]={});e=e[a]}return e},n.prototype.transform=function(r,e,i){return e=e||{},i=i||{},Object.keys(r).forEach(function(t){this.set(r[t],this.pick(t,e),i)}.bind(this)),i},n.prototype.dot=function(i,n,o){n=n||{},o=o||[];var s=Array.isArray(i);return Object.keys(i).forEach(function(t){var r=s&&this.useBrackets?"["+t+"]":t;if(a(i[t])&&(p(i[t])&&!c(i[t])||Array.isArray(i[t])&&!this.keepArray&&0!==i[t].length)){if(s&&this.useBrackets){var e=o[o.length-1]||"";return this.dot(i[t],n,o.slice(0,-1).concat(e+r))}return this.dot(i[t],n,o.concat(r))}s&&this.useBrackets?n[o.join(this.separator).concat("["+t+"]")]=i[t]:n[o.concat(r).join(this.separator)]=i[t]}.bind(this)),n},n.pick=o("pick"),n.move=o("move"),n.transfer=o("transfer"),n.transform=o("transform"),n.copy=o("copy"),n.object=o("object"),n.str=o("str"),n.set=o("set"),n.delete=o("delete"),n.del=n.remove=o("remove"),n.dot=o("dot"),["override","overwrite"].forEach(function(t){Object.defineProperty(n,t,{get:function(){return e.override},set:function(t){e.override=!!t}})}),["useArray","keepArray","useBrackets"].forEach(function(r){Object.defineProperty(n,r,{get:function(){return e[r]},set:function(t){e[r]=t}})}),n._process=s,"function"==typeof define&&define.amd?define(function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:t.DotObject=n}(this);
|
package/index.js
CHANGED
|
@@ -50,7 +50,7 @@ var blacklistFilter = function (part) { return blacklist.indexOf(part) === -1 }
|
|
|
50
50
|
|
|
51
51
|
function parsePath (path, sep) {
|
|
52
52
|
if (path.indexOf('[') >= 0) {
|
|
53
|
-
path = path.replace(/\[/g,
|
|
53
|
+
path = path.replace(/\[/g, sep).replace(/]/g, '')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
var parts = path.split(sep)
|
package/package.json
CHANGED
package/src/dot-object.js
CHANGED
|
@@ -50,7 +50,7 @@ var blacklistFilter = function (part) { return blacklist.indexOf(part) === -1 }
|
|
|
50
50
|
|
|
51
51
|
function parsePath (path, sep) {
|
|
52
52
|
if (path.indexOf('[') >= 0) {
|
|
53
|
-
path = path.replace(/\[/g,
|
|
53
|
+
path = path.replace(/\[/g, sep).replace(/]/g, '')
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
var parts = path.split(sep)
|
package/test/dot-json.js
CHANGED
|
@@ -55,6 +55,28 @@ describe('Object test:', function () {
|
|
|
55
55
|
})
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
+
it('Should expand dotted keys with array notation with different separator', function () {
|
|
59
|
+
var row = {
|
|
60
|
+
id: 2,
|
|
61
|
+
my_arr_0: 'one',
|
|
62
|
+
my_arr_1: 'two',
|
|
63
|
+
my_arr_2: 'three',
|
|
64
|
+
'my_arr2[0]': 'one',
|
|
65
|
+
'my_arr2[1]': 'two',
|
|
66
|
+
'my_arr2[2]': 'three'
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
new Dot('_').object(row)
|
|
70
|
+
|
|
71
|
+
row.should.eql({
|
|
72
|
+
id: 2,
|
|
73
|
+
my: {
|
|
74
|
+
arr: ['one', 'two', 'three'],
|
|
75
|
+
arr2: ['one', 'two', 'three']
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
|
|
58
80
|
it('Should allow keys with numbers', function () {
|
|
59
81
|
var row = {
|
|
60
82
|
id: 2,
|