Socket
Socket
Sign inDemoInstall

json-sql

Package Overview
Dependencies
1
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.3.5 to 0.3.6

lib/dialects/postgresql/templates.js

3

lib/dialects/base/index.js
'use strict';
var _ = require('underscore');
var ValuesStore = require('../../valuesStore');
var ValuesStore = require('../../utils/valuesStore');

@@ -344,2 +344,3 @@ var templatesInit = require('./templates');

} else {
if (self.blocks.has(type + ':' + block)) block = type + ':' + block;
return self.buildBlock(block, params) + space;

@@ -346,0 +347,0 @@ }

'use strict';
var _ = require('underscore');
var templateChecks = require('../../utils/templateChecks');

@@ -14,4 +15,4 @@ module.exports = function(dialect) {

validate: function(type, params) {
checkRequiredProp(type, params, 'queryBody');
checkPropType(type, params, 'queryBody', 'object');
templateChecks.requiredProp(type, params, 'queryBody');
templateChecks.propType(type, params, 'queryBody', 'object');
}

@@ -24,4 +25,4 @@ });

validate: function(type, params) {
checkRequiredProp(type, params, 'queryBody');
checkPropType(type, params, 'queryBody', 'object');
templateChecks.requiredProp(type, params, 'queryBody');
templateChecks.propType(type, params, 'queryBody', 'object');
}

@@ -34,15 +35,15 @@ });

validate: function(type, params) {
checkOnlyOneOfProps(type, params, ['with', 'withRecursive']);
checkPropType(type, params, 'with', 'object');
checkPropType(type, params, 'withRecursive', 'object');
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
templateChecks.propType(type, params, 'with', 'object');
templateChecks.propType(type, params, 'withRecursive', 'object');
checkRequiredProp(type, params, 'queries');
checkPropType(type, params, 'queries', 'array');
checkMinPropLength(type, params, 'queries', 2);
templateChecks.requiredProp(type, params, 'queries');
templateChecks.propType(type, params, 'queries', 'array');
templateChecks.minPropLength(type, params, 'queries', 2);
checkPropType(type, params, 'sort', ['string', 'array', 'object']);
templateChecks.propType(type, params, 'sort', ['string', 'array', 'object']);
checkPropType(type, params, 'limit', ['number', 'string']);
templateChecks.propType(type, params, 'limit', ['number', 'string']);
checkPropType(type, params, 'offset', ['number', 'string']);
templateChecks.propType(type, params, 'offset', ['number', 'string']);
}

@@ -55,9 +56,9 @@ });

validate: function(type, params) {
checkRequiredProp('values', params, 'fields');
checkPropType('values', params, 'fields', 'array');
checkMinPropLength('values', params, 'fields', 1);
templateChecks.requiredProp('values', params, 'fields');
templateChecks.propType('values', params, 'fields', 'array');
templateChecks.minPropLength('values', params, 'fields', 1);
checkRequiredProp('values', params, 'fieldValues');
checkPropType('values', params, 'fieldValues', 'array');
checkMinPropLength('values', params, 'fieldValues', 1);
templateChecks.requiredProp('values', params, 'fieldValues');
templateChecks.propType('values', params, 'fieldValues', 'array');
templateChecks.minPropLength('values', params, 'fieldValues', 1);
}

@@ -70,4 +71,4 @@ });

validate: function(type, params) {
checkPropType('join', params, 'type', 'string');
checkCustomProp('join', params, 'type', function(value) {
templateChecks.propType('join', params, 'type', 'string');
templateChecks.customProp('join', params, 'type', function(value) {
var splitType = _(value.toLowerCase().split(' ')).compact();

@@ -77,13 +78,13 @@ return !_.difference(splitType, availableJoinTypes).length;

checkAtLeastOneOfProps('join', params, ['table', 'query', 'select', 'expression']);
checkOnlyOneOfProps('join', params, ['table', 'query', 'select', 'expression']);
templateChecks.atLeastOneOfProps('join', params, ['table', 'query', 'select', 'expression']);
templateChecks.onlyOneOfProps('join', params, ['table', 'query', 'select', 'expression']);
checkPropType('join', params, 'table', 'string');
checkPropType('join', params, 'query', 'object');
checkPropType('join', params, 'select', 'object');
checkPropType('join', params, 'expression', ['string', 'object']);
templateChecks.propType('join', params, 'table', 'string');
templateChecks.propType('join', params, 'query', 'object');
templateChecks.propType('join', params, 'select', 'object');
templateChecks.propType('join', params, 'expression', ['string', 'object']);
checkPropType('join', params, 'alias', ['string', 'object']);
templateChecks.propType('join', params, 'alias', ['string', 'object']);
checkPropType('join', params, 'on', ['array', 'object']);
templateChecks.propType('join', params, 'on', ['array', 'object']);
}

@@ -96,13 +97,13 @@ });

validate: function(type, params) {
checkRequiredProp('with', params, 'name');
checkPropType('with', params, 'name', 'string');
templateChecks.requiredProp('with', params, 'name');
templateChecks.propType('with', params, 'name', 'string');
checkPropType(type, params, 'fields', ['array', 'object']);
templateChecks.propType(type, params, 'fields', ['array', 'object']);
checkAtLeastOneOfProps('with', params, ['query', 'select', 'expression']);
checkOnlyOneOfProps('with', params, ['query', 'select', 'expression']);
templateChecks.atLeastOneOfProps('with', params, ['query', 'select', 'expression']);
templateChecks.onlyOneOfProps('with', params, ['query', 'select', 'expression']);
checkPropType('with', params, 'query', 'object');
checkPropType('with', params, 'select', 'object');
checkPropType('with', params, 'expression', ['string', 'object']);
templateChecks.propType('with', params, 'query', 'object');
templateChecks.propType('with', params, 'select', 'object');
templateChecks.propType('with', params, 'expression', ['string', 'object']);
}

@@ -115,11 +116,11 @@ });

validate: function(type, params) {
checkAtLeastOneOfProps('from', params, ['table', 'query', 'select', 'expression']);
checkOnlyOneOfProps('from', params, ['table', 'query', 'select', 'expression']);
templateChecks.atLeastOneOfProps('from', params, ['table', 'query', 'select', 'expression']);
templateChecks.onlyOneOfProps('from', params, ['table', 'query', 'select', 'expression']);
checkPropType('from', params, 'table', 'string');
checkPropType('from', params, 'query', 'object');
checkPropType('from', params, 'select', 'object');
checkPropType('from', params, 'expression', ['string', 'object']);
templateChecks.propType('from', params, 'table', 'string');
templateChecks.propType('from', params, 'query', 'object');
templateChecks.propType('from', params, 'select', 'object');
templateChecks.propType('from', params, 'expression', ['string', 'object']);
checkPropType('from', params, 'alias', ['string', 'object']);
templateChecks.propType('from', params, 'alias', ['string', 'object']);
}

@@ -139,33 +140,33 @@ });

validate: function(type, params) {
checkOnlyOneOfProps(type, params, ['with', 'withRecursive']);
checkPropType(type, params, 'with', 'object');
checkPropType(type, params, 'withRecursive', 'object');
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
templateChecks.propType(type, params, 'with', 'object');
templateChecks.propType(type, params, 'withRecursive', 'object');
checkPropType(type, params, 'distinct', 'boolean');
templateChecks.propType(type, params, 'distinct', 'boolean');
checkPropType(type, params, 'fields', ['array', 'object']);
templateChecks.propType(type, params, 'fields', ['array', 'object']);
checkPropType(type, params, 'from', ['string', 'array', 'object']);
templateChecks.propType(type, params, 'from', ['string', 'array', 'object']);
checkAtLeastOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
checkOnlyOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
templateChecks.atLeastOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
templateChecks.onlyOneOfProps(type, params, ['table', 'query', 'select', 'expression']);
checkPropType(type, params, 'table', 'string');
checkPropType(type, params, 'query', 'object');
checkPropType(type, params, 'select', 'object');
checkPropType(type, params, 'expression', ['string', 'object']);
templateChecks.propType(type, params, 'table', 'string');
templateChecks.propType(type, params, 'query', 'object');
templateChecks.propType(type, params, 'select', 'object');
templateChecks.propType(type, params, 'expression', ['string', 'object']);
checkPropType(type, params, 'alias', ['string', 'object']);
templateChecks.propType(type, params, 'alias', ['string', 'object']);
checkPropType(type, params, 'join', ['array', 'object']);
templateChecks.propType(type, params, 'join', ['array', 'object']);
checkPropType(type, params, 'condition', ['array', 'object']);
templateChecks.propType(type, params, 'condition', ['array', 'object']);
checkPropType(type, params, 'group', ['string', 'array']);
templateChecks.propType(type, params, 'group', ['string', 'array']);
checkPropType(type, params, 'sort', ['string', 'array', 'object']);
templateChecks.propType(type, params, 'sort', ['string', 'array', 'object']);
checkPropType(type, params, 'limit', ['number', 'string']);
templateChecks.propType(type, params, 'limit', ['number', 'string']);
checkPropType(type, params, 'offset', ['number', 'string']);
templateChecks.propType(type, params, 'offset', ['number', 'string']);
}

@@ -178,18 +179,18 @@ });

validate: function(type, params) {
checkOnlyOneOfProps(type, params, ['with', 'withRecursive']);
checkPropType(type, params, 'with', 'object');
checkPropType(type, params, 'withRecursive', 'object');
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
templateChecks.propType(type, params, 'with', 'object');
templateChecks.propType(type, params, 'withRecursive', 'object');
checkPropType(type, params, 'or', 'string');
checkPropMatch(type, params, 'or', orRegExp);
templateChecks.propType(type, params, 'or', 'string');
templateChecks.propMatch(type, params, 'or', orRegExp);
checkRequiredProp(type, params, 'table');
checkPropType(type, params, 'table', 'string');
templateChecks.requiredProp(type, params, 'table');
templateChecks.propType(type, params, 'table', 'string');
checkRequiredProp(type, params, 'values');
checkPropType(type, params, 'values', ['array', 'object']);
templateChecks.requiredProp(type, params, 'values');
templateChecks.propType(type, params, 'values', ['array', 'object']);
checkPropType(type, params, 'condition', ['array', 'object']);
templateChecks.propType(type, params, 'condition', ['array', 'object']);
checkPropType(type, params, 'returning', ['array', 'object']);
templateChecks.propType(type, params, 'returning', ['array', 'object']);
}

@@ -202,18 +203,18 @@ });

validate: function(type, params) {
checkOnlyOneOfProps(type, params, ['with', 'withRecursive']);
checkPropType(type, params, 'with', 'object');
checkPropType(type, params, 'withRecursive', 'object');
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
templateChecks.propType(type, params, 'with', 'object');
templateChecks.propType(type, params, 'withRecursive', 'object');
checkPropType(type, params, 'or', 'string');
checkPropMatch(type, params, 'or', orRegExp);
templateChecks.propType(type, params, 'or', 'string');
templateChecks.propMatch(type, params, 'or', orRegExp);
checkRequiredProp(type, params, 'table');
checkPropType(type, params, 'table', 'string');
templateChecks.requiredProp(type, params, 'table');
templateChecks.propType(type, params, 'table', 'string');
checkRequiredProp(type, params, 'modifier');
checkPropType(type, params, 'modifier', 'object');
templateChecks.requiredProp(type, params, 'modifier');
templateChecks.propType(type, params, 'modifier', 'object');
checkPropType(type, params, 'condition', ['array', 'object']);
templateChecks.propType(type, params, 'condition', ['array', 'object']);
checkPropType(type, params, 'returning', ['array', 'object']);
templateChecks.propType(type, params, 'returning', ['array', 'object']);
}

@@ -226,12 +227,12 @@ });

validate: function(type, params) {
checkOnlyOneOfProps(type, params, ['with', 'withRecursive']);
checkPropType(type, params, 'with', 'object');
checkPropType(type, params, 'withRecursive', 'object');
templateChecks.onlyOneOfProps(type, params, ['with', 'withRecursive']);
templateChecks.propType(type, params, 'with', 'object');
templateChecks.propType(type, params, 'withRecursive', 'object');
checkRequiredProp(type, params, 'table');
checkPropType(type, params, 'table', 'string');
templateChecks.requiredProp(type, params, 'table');
templateChecks.propType(type, params, 'table', 'string');
checkPropType(type, params, 'condition', ['array', 'object']);
templateChecks.propType(type, params, 'condition', ['array', 'object']);
checkPropType(type, params, 'returning', ['array', 'object']);
templateChecks.propType(type, params, 'returning', ['array', 'object']);
}

@@ -248,74 +249,2 @@ });

dialect.templates.add('except', dialect.templates.get('queriesCombination'));
// validation helpers
function checkRequiredProp(type, params, propName) {
if (_.isUndefined(params[propName])) {
throw new Error('`' + propName + '` property is not set in `' + type + '` clause');
}
}
function checkAtLeastOneOfProps(type, params, expectedPropNames) {
var propNames = _(params).chain().keys().intersection(expectedPropNames).value();
if (!propNames.length) {
throw new Error('Neither `' + expectedPropNames.join('`, `') +
'` properties are not set in `' + type + '` clause');
}
}
function checkOnlyOneOfProps(type, params, expectedPropNames) {
var propNames = _(params).chain().keys().intersection(expectedPropNames).value();
if (propNames.length > 1) {
throw new Error('Wrong using `' + propNames.join('`, `') + '` properties together in `' +
type + '` clause');
}
}
function checkPropType(type, params, propName, expectedTypes) {
if (_.isUndefined(params[propName])) return;
var propValue = params[propName];
if (!_.isArray(expectedTypes)) expectedTypes = [expectedTypes];
var hasSomeType = _(expectedTypes).some(function(expectedType) {
return _['is' + expectedType.charAt(0).toUpperCase() + expectedType.slice(1)](propValue);
});
if (!hasSomeType) {
throw new Error('`' + propName + '` property should have ' +
(expectedTypes.length > 1 ? 'one of expected types:' : 'type') +
' "' + expectedTypes.join('", "') + '" in `' + type + '` clause');
}
}
function checkMinPropLength(type, params, propName, length) {
if (_.isUndefined(params[propName])) return;
if (params[propName].length < length) {
throw new Error('`' + propName + '` property should not have length less than ' + length +
' in `' + type + '` clause');
}
}
function checkPropMatch(type, params, propName, regExp) {
if (_.isUndefined(params[propName])) return;
if (!params[propName].match(regExp)) {
throw new Error('Invalid `' + propName + '` property value "' + params[propName] + '" in `' +
type + '` clause');
}
}
function checkCustomProp(type, params, propName, fn) {
if (_.isUndefined(params[propName])) return;
if (!fn(params[propName])) {
throw new Error('Invalid `' + propName + '` property value "' + params[propName] + '" in `' +
type + '` clause');
}
}
};

@@ -23,2 +23,23 @@ 'use strict';

});
dialect.blocks.add('explain:options', function(params) {
return '(' +
_(params.options)
.chain()
.pick(['analyze', 'verbose', 'costs', 'buffers', 'timing', 'format'])
.map(function(value, key) {
return key + ' ' + value;
})
.value()
.join(', ') +
')';
});
dialect.blocks.add('explain:analyze', function() {
return 'analyze';
});
dialect.blocks.add('explain:verbose', function() {
return 'verbose';
});
};

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

var templatesInit = require('./templates');
var blocksInit = require('./blocks');

@@ -14,2 +15,5 @@ var operatorsInit = require('./operators');

// init templates
templatesInit(this);
// init blocks

@@ -16,0 +20,0 @@ blocksInit(this);

{
"name": "json-sql",
"description": "node.js json to sql queries mapper",
"version": "0.3.5",
"version": "0.3.6",
"author": "Artem Zhukov <artzhuchka@gmail.com>",

@@ -6,0 +6,0 @@ "repository": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc