@sanity/mutator
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -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'); |
@@ -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 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
309519
93
6482