Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
decypher is a node.js library packing a handful of utilities to deal with cypher queries.
It includes the following:
You can install decypher from npm likewise:
npm install decypher
or from github if you need the latest development version:
npm install git+https://github.com/Yomguithereal/decypher.git
Write one or more cypher queries per file:
File containing a single query
// Any comments...
MATCH (n)-[r]-(t)
RETURN n,r,t LIMIT 100;
File containing multiple named queries
// name: first
// Retrieve book nodes
MATCH (b:Book)
RETURN b;
// name: second
// Retrieve vocabulary nodes
MATCH (v:Vocabulary)
RETURN v;
Just require decypher and use it to load your queries:
var decypher = require('decypher');
// Loading a single query
decypher('./single-query.cypher');
>>> 'MATCH (n)-[r]-(t)\nRETURN n,r,t LIMIT 100;'
// Loading multiple named queries
decypher('./multiple-queries.cypher');
>>> {
first: 'MATCH (b:Book)\nRETURN b;',
second: 'MATCH (v:Vocabulary)\nRETURN v;'
}
// Loading a batch of files at once
decypher({
single: './single-query.cypher',
multiple: './multiple-queries.cypher'
});
>>> {
single: 'MATCH (n)-[r]-(t)\nRETURN n,r,t LIMIT 100;',
multiple: {
first: 'MATCH (b:Book)\nRETURN b;',
second: 'MATCH (v:Vocabulary)\nRETURN v;'
}
}
// Loading the content of a folder
// folder/
// - single.cypher
// - multiple.cypher
decypher('./folder');
>>> {
single: 'MATCH (n)-[r]-(t)\nRETURN n,r,t LIMIT 100;',
multiple: {
first: 'MATCH (b:Book)\nRETURN b;',
second: 'MATCH (v:Vocabulary)\nRETURN v;'
}
}
// Choosing a different extension when loading a folder
decypher('./path-to-queries-folder', 'cql');
Note that this query builder is widely inspired by the query-builder package by @shesek but fixed and updated to support cypher's latest evolutions.
var Query = require('decypher').Query;
// Creating a query
var cypher = new Query()
.match('MATCH (n:Node)')
.where('n.title = {title}', {title: 'The best title'})
.return('n');
// Compiling to string
cypher.compile();
// or
cypher.toString();
// MATCH (n:Node)
// WHERE n.title = {title}
// RETURN n;
// Retrieving the query's parameters
cypher.params();
>>> {
title: 'The best title'
}
// Retrieving the query's statements as an array
cypher.statements();
>>> [
'MATCH (n:Node)',
'WHERE n.title = {title}',
'RETURN n'
]
// Retrieving all of the above at once
var {query, params, statements} = cypher.build();
// Note that multi words statements like `ORDER BY`
// have to be written in camel-case:
cypher.orderBy('n.title');
// You can also set a bunch of params at once
cypher.params({whatever: 'is needed'});
// If you need to pass multiple query parts at once & separated by a comma
// just pass an array of strings instead of a single string.
cypher.create(['(a:Actor)', '(m:Movie)']);
>>> 'CREATE (a:Actor), (m:Movie)'
// Finally, you can add arbitrary parts to the query if required
cypher.add('anything you want');
cypher.add('with {param}', {param: 'heart'});
Escaping identifiers
var helpers = require('decypher').helpers;
helpers.escapeIdentifier('Complex `Identifier`');
>>> '`Complex ``Identifier```'
Escaping literal maps
var helpers = require('decypher').helpers;
helpers.escapeLiteralMap({
hello: 'world',
'complex key': 3
});
>>> '{hello: "world", `complex key`: 3}'
// Indicating parameter keys
helpers.escapeLiteralMap({
name: 'name',
number: 2
}, ['name']);
>>> '{name: {name}, number: 2}'
Building node patterns
var helpers = require('decypher').helpers;
// Possible options are:
// * `identifier`: a string
// * `label`: a string
// * `data`:
// - if string, will produce a single parameter
// - if object, will stringify it
// * `paramKeys`: will be passed to escapeLiteralMap when stringifying data
helpers.nodePattern();
>>> '()'
helpers.nodePattern({
identifier: 'n',
label: 'Node'
});
>>> '(n:Node)'
helpers.nodePattern({
label: 'Node',
data: {title: 'Hello'}
});
>>> '(n:Node {title: "Hello"})'
helpers.nodePattern({
identifier: 'n',
data: 'paramName'
});
>>> '(n {paramName})'
helpers.nodePattern({
label: 'Chapter',
data: {title: 'title'},
paramKeys: ['title']
});
>>> '(:Chapter {title: {title}})'
Building relationship patterns
var helpers = require('decypher').helpers;
// Possible options are:
// * `direction`: "in" or "out"
// * `identifier`: a string
// * `predicate`: a string or an array of strings
// * `data`:
// - if string, will produce a single parameter
// - if object, will stringify it
// * `paramKeys`: will be passed to escapeLiteralMap when stringifying data
helpers.relationshipPattern();
>>> '--'
helpers.relationshipPattern({
direction: 'out',
identifier: 'r',
predicate: 'KNOWS'
});
>>> '-[r:KNOWS]->'
helpers.relationshipPattern({
direction: 'in',
predicate: ['PLAYS_IN', 'KNOWS']
});
>>> '<-[:PLAYS_IN|:KNOWS]-'
helpers.relationshipPattern({
direction: 'in',
identifier: 'r',
data: 'paramName'
});
>>> '<-[r {paramName}]-'
helpers.relationshipPattern({
predicate: 'KNOWS',
data: {since: 1975}
});
>>> '-[:KNOWS {since: 1975}]-'
Contributions are of course more than welcome. Be sure to add and pass any relevant unit tests before submitting any code.
git clone git@github.com:Yomguithereal/decypher.git
cd decypher
# Installing dependencies
npm install
# Running unit tests
npm test
FAQs
A handful of cypher utilities for Node.js
We found that decypher demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.