grasp icon indicating copy to clipboard operation
grasp copied to clipboard

deleting property

Open ainthek opened this issue 8 years ago • 3 comments

echo "var x={a:10,b:20}" | grasp -s "prop[key=#b]" -R '' var x={a:10,}

leaves unexpected ,

any ideas ?

ainthek avatar May 16 '16 14:05 ainthek

It's being very literal. The text for property "b" does not include the comma in between, so it does not replace the comma.

gkz avatar May 17 '16 03:05 gkz

solved somehow: getting object and reconstructing from properties except deleted ones:

// sample: echo "var x={id:10,b:20,c:30}" | node _tools/delete-properties.js "b,id"
// parse original args
var args = require('grasp/lib/options.js').parse(process.argv);
// store for replacer
var toDelete = args._[0].split(",");
// transform to s-query for object search (narrow the query)
args._[0] = 'obj!>prop[key=(' + toDelete.map(function(p) {
    return "#" + p;
}).join(",") + ')]';
// set custom replacer (using toDelete)
args.replaceFunc = function(getRaw, node, query, named) {
    var ps = query(".properties");
    var raw = ps.filter(function(p) {
        return !~toDelete.indexOf(p.key.name);
    }).map(function(p) {
        return getRaw(p);
    }).join(",\n");
    return "{" + raw + "}";
}

//
require('grasp')({
    args: args,
    exit: process.exit,
    stdin: process.stdin,
    callback: console.log,
    error: console.error
});

ainthek avatar May 18 '16 06:05 ainthek

What are you doing here? I'd like to be able to delete a certain named function from an ES6 class. Does grasp/acorn support classes and other such ES6 contstructs??

kristianmandrup avatar Nov 22 '16 13:11 kristianmandrup