Socket
Socket
Sign inDemoInstall

@sanity/mutator

Package Overview
Dependencies
Maintainers
7
Versions
1321
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@sanity/mutator - npm Package Compare versions

Comparing version 0.0.4 to 0.0.5

lib/jsonpath/extractAccessors.js

6

lib/index.js

@@ -27,2 +27,8 @@ 'use strict';

});
Object.defineProperty(exports, 'extractWithPath', {
enumerable: true,
get: function get() {
return _jsonpath.extractWithPath;
}
});

@@ -29,0 +35,0 @@ var _patch = require('./patch');

57

lib/jsonpath/extract.js

@@ -6,62 +6,15 @@ 'use strict';

});
var _compact2 = require('lodash/compact');
var _compact3 = _interopRequireDefault(_compact2);
exports.default = extract;
var _PlainProbe = require('./PlainProbe');
var _extractAccessors = require('./extractAccessors');
var _PlainProbe2 = _interopRequireDefault(_PlainProbe);
var _extractAccessors2 = _interopRequireDefault(_extractAccessors);
var _jsonpath = require('../jsonpath');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function extract(path, value) {
var result = [];
var appendResult = function appendResult(values) {
result.push.apply(result, _toConsumableArray(values));
};
var matcher = _jsonpath.Matcher.fromPath(path).setPayload(appendResult);
var accessor = new _PlainProbe2.default(value);
descend(matcher, accessor);
return result;
}
function descend(matcher, accessor) {
var _matcher$match = matcher.match(accessor),
leads = _matcher$match.leads,
delivery = _matcher$match.delivery;
leads.forEach(function (lead) {
accessorsFromTarget(lead.target, accessor).forEach(function (childAccessor) {
descend(lead.matcher, childAccessor);
});
var accessors = (0, _extractAccessors2.default)(path, value);
return accessors.map(function (acc) {
return acc._value;
});
if (delivery) {
delivery.targets.forEach(function (target) {
var values = accessorsFromTarget(target, accessor).map(function (acc) {
return acc._value;
});
delivery.payload(values);
});
}
}
function accessorsFromTarget(target, accessor) {
var result = [];
if (target.isIndexReference()) {
target.toIndicies(accessor).forEach(function (i) {
result.push(accessor.getIndex(i));
});
} else if (target.isAttributeReference()) {
result.push(accessor.getField(target.name()));
} else {
throw new Error('Unable to derive accessor for target ' + target.toString());
}
return (0, _compact3.default)(result);
}

@@ -6,3 +6,3 @@ 'use strict';

});
exports.extract = exports.Expression = exports.Matcher = undefined;
exports.extractWithPath = exports.extract = exports.Expression = exports.Matcher = undefined;

@@ -21,2 +21,6 @@ var _Matcher = require('./Matcher');

var _extractWithPath = require('./extractWithPath');
var _extractWithPath2 = _interopRequireDefault(_extractWithPath);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -26,2 +30,3 @@

exports.Expression = _Expression2.default;
exports.extract = _extract2.default;
exports.extract = _extract2.default;
exports.extractWithPath = _extractWithPath2.default;

@@ -198,2 +198,9 @@ 'use strict';

}
var literalBoolean = this.match({ type: 'boolean' });
if (literalBoolean) {
return {
type: 'boolean',
value: literalBoolean.symbol == 'true'
};
}
return this.parseNumber();

@@ -200,0 +207,0 @@ }

@@ -15,6 +15,7 @@ "use strict";

var PlainProbe = function () {
function PlainProbe(_value) {
function PlainProbe(_value, path) {
_classCallCheck(this, PlainProbe);
this._value = _value;
this.path = path || [];
}

@@ -81,3 +82,3 @@

}
return new PlainProbe(this._value[key]);
return new PlainProbe(this._value[key], this.path.concat(key));
}

@@ -93,3 +94,3 @@ }, {

}
return new PlainProbe(this._value[i]);
return new PlainProbe(this._value[i], this.path.concat(i));
}

@@ -96,0 +97,0 @@ }, {

@@ -26,2 +26,3 @@ 'use strict';

keyword: ['$', '@'],
boolean: ['true', 'false'],
paren: ['[', ']']

@@ -39,3 +40,3 @@ };

this.i = 0;
this.tokenizers = [this.tokenizeIdentifier, this.tokenizeNumber, this.tokenizeQuoted, this.tokenizeSymbol].map(function (fn) {
this.tokenizers = [this.tokenizeSymbol, this.tokenizeIdentifier, this.tokenizeNumber, this.tokenizeQuoted].map(function (fn) {
return fn.bind(_this);

@@ -42,0 +43,0 @@ });

{
"name": "@sanity/mutator",
"version": "0.0.4",
"version": "0.0.5",
"description": "A set of models to make it easier to utilize the powerful real time collaborative features of Sanity",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

@@ -1,4 +0,4 @@

export {Matcher, Expression, extract} from './jsonpath'
export {Matcher, Expression, extract, extractWithPath} from './jsonpath'
export {Patcher, ImmutableAccessor} from './patch'
export {Document, Mutation, BufferedDocument} from './document'
// @flow
import PlainProbe from './PlainProbe'
import {Expression, Matcher} from '../jsonpath'
import {compact} from 'lodash'
import extractAccessors from './extractAccessors'
export default function extract(path : string, value : Object) : Array<any> {
const result = []
const appendResult = values => {
result.push(...values)
}
const matcher = Matcher.fromPath(path).setPayload(appendResult)
const accessor = new PlainProbe(value)
descend(matcher, accessor)
return result
const accessors = extractAccessors(path, value)
return accessors.map(acc => acc._value)
}
function descend(matcher, accessor) {
const {leads, delivery} = matcher.match(accessor)
leads.forEach(lead => {
accessorsFromTarget(lead.target, accessor).forEach(childAccessor => {
descend(lead.matcher, childAccessor)
})
})
if (delivery) {
delivery.targets.forEach(target => {
const values = accessorsFromTarget(target, accessor).map(acc => acc._value)
delivery.payload(values)
})
}
}
function accessorsFromTarget(target : Expression, accessor : PlainProbe) {
const result = []
if (target.isIndexReference()) {
target.toIndicies(accessor).forEach(i => {
result.push(accessor.getIndex(i))
})
} else if (target.isAttributeReference()) {
result.push(accessor.getField(target.name()))
} else {
throw new Error(`Unable to derive accessor for target ${target.toString()}`)
}
return compact(result)
}
import Matcher from './Matcher'
import Expression from './Expression'
import extract from './extract'
import extractWithPath from './extractWithPath'
export {Matcher, Expression, extract}
export {Matcher, Expression, extract, extractWithPath}

@@ -162,2 +162,9 @@ // Converts a string into an abstract syntax tree representation

}
const literalBoolean = this.match({type: 'boolean'})
if (literalBoolean) {
return {
type: 'boolean',
value: literalBoolean.symbol == 'true'
}
}
return this.parseNumber()

@@ -164,0 +171,0 @@ }

@@ -6,4 +6,6 @@ // @flow

_value : any
constructor(_value : any) {
path : Array<any>
constructor(_value : any, path : Array<any>) {
this._value = _value
this.path = path || []
}

@@ -53,3 +55,3 @@ isIndexable() : bool {

}
return new PlainProbe(this._value[key])
return new PlainProbe(this._value[key], this.path.concat(key))
}

@@ -63,3 +65,3 @@ getIndex(i : number) : any {

}
return new PlainProbe(this._value[i])
return new PlainProbe(this._value[i], this.path.concat(i))
}

@@ -66,0 +68,0 @@ value() : any {

@@ -27,2 +27,5 @@ // Tokenizes a jsonpath2 expression

],
boolean: [
'true', 'false'
],
paren: [

@@ -42,6 +45,6 @@ '[', ']'

this.tokenizers = [
this.tokenizeSymbol,
this.tokenizeIdentifier,
this.tokenizeNumber,
this.tokenizeQuoted,
this.tokenizeSymbol
this.tokenizeQuoted
].map(fn => fn.bind(this))

@@ -48,0 +51,0 @@ }

@@ -106,3 +106,25 @@ import { test } from 'tap'

quote: 'double'
}]
}],
'[true, false]': [
{
'symbol': '[',
'type': "paren"
},
{
'symbol': 'true',
'type': 'boolean'
},
{
'symbol': ',',
'type': 'operator'
},
{
'symbol': 'false',
'type': 'boolean'
},
{
'symbol': ']',
'type': 'paren'
}
]
}

@@ -109,0 +131,0 @@

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