Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2021-06-13 13:31:56 +03:00
parent 2ec8480604
commit 356f0702c0

View File

@ -244,6 +244,11 @@ module.HANDLERS = {
//false: { match: false }, //false: { match: false },
} }
//
// handle(obj[,options])
// handle(obj, path[,options])
// -> generator
//
// //
// Format: // Format:
// [ // [
@ -274,6 +279,7 @@ function*(obj, path=[], options={}){
: typeof(path) == 'string' ? : typeof(path) == 'string' ?
str2path(path) str2path(path)
: [] : []
// handle object loops... // handle object loops...
var seen = options.seen = var seen = options.seen =
options.seen || new Map() options.seen || new Map()
@ -283,9 +289,9 @@ function*(obj, path=[], options={}){
typeof(obj) == 'object' typeof(obj) == 'object'
&& seen.set(obj, path) && seen.set(obj, path)
var __next = [] var _next = []
var next = function(...values){ var next = function(...values){
__next.splice(__next.length, 0, ...values) _next.splice(_next.length, 0, ...values)
return true } return true }
var stop = function(p, v){ var stop = function(p, v){
throw module.STOP(arguments.length == 1 ? throw module.STOP(arguments.length == 1 ?
@ -311,10 +317,11 @@ function*(obj, path=[], options={}){
res = h.handle.call(handler, obj, res, next, stop, options) res = h.handle.call(handler, obj, res, next, stop, options)
yield res yield res
&& [path, res] }) && [path, res] })
// clean out remains of handlers that rejected the obj...
.filter(function(e){ .filter(function(e){
return !!e }) return !!e })
// handle the next stuff... // handle the next stuff...
yield* __next.splice(0, __next.length) yield* _next
.iter() .iter()
.map(function*([k, v]){ .map(function*([k, v]){
yield* handle(v, path.concat(k), options) }) } yield* handle(v, path.concat(k), options) }) }
@ -407,7 +414,7 @@ types.generator.iter
: [path2str(p), v] }) : [path2str(p), v] })
// remove attributes from object metadata... // Remove attributes from object metadata...
// //
// stripAttr(attr, ...) // stripAttr(attr, ...)
// -> <chainable> // -> <chainable>
@ -447,6 +454,15 @@ function(...attrs){
// NOTE: to set this needs the full basepath to exist... // NOTE: to set this needs the full basepath to exist...
// //
// XXX need to write a map key to an item that does not exist... // XXX need to write a map key to an item that does not exist...
// XXX for arrays ans sets need a way to insert values after a specific
// index, this would require:
// - indicated this in spec:
// a) AFTER/BEFORE symbol(s) in path (???)
// b) context (a-la diff)
// - insert to array:
// .splice(i, 0, <value>)
// - insert into set:
// ???
// XXX str2path and passing in a list path produce different results... // XXX str2path and passing in a list path produce different results...
var atPath = var atPath =
module.atPath = module.atPath =