database-proxy
Version:
Through a set of access control rules configuration database access to realize the client directly access the database via HTTP.
182 lines (181 loc) • 5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QUERY_COMMANDS = exports.LOGIC_COMMANDS = exports.UPDATE_COMMANDS = exports.getAction = exports.JoinType = exports.Direction = exports.ActionType = void 0;
var ActionType;
(function (ActionType) {
ActionType["READ"] = "database.queryDocument";
ActionType["UPDATE"] = "database.updateDocument";
ActionType["ADD"] = "database.addDocument";
ActionType["REMOVE"] = "database.deleteDocument";
ActionType["COUNT"] = "database.countDocument";
ActionType["WATCH"] = "database.watchDocument";
ActionType["AGGREGATE"] = "database.aggregateDocuments";
ActionType["CREATE_INDEX"] = "database.createIndex";
ActionType["CREATE_INDEXES"] = "database.createIndexes";
ActionType["DROP_INDEX"] = "database.dropIndex";
ActionType["DROP_INDEXES"] = "database.dropIndexes";
ActionType["LIST_INDEXES"] = "database.listIndexes";
})(ActionType || (exports.ActionType = ActionType = {}));
// params types
var Direction;
(function (Direction) {
Direction["DESC"] = "desc";
Direction["ASC"] = "asc";
})(Direction || (exports.Direction = Direction = {}));
// left, right, inner, full
var JoinType;
(function (JoinType) {
JoinType["INNER"] = "inner";
JoinType["LEFT"] = "left";
JoinType["RIGHT"] = "right";
JoinType["FULL"] = "full";
})(JoinType || (exports.JoinType = JoinType = {}));
const ReadAcceptParams = [
'query',
'order',
'offset',
'limit',
'projection',
'multi',
'count',
'joins',
'nested',
];
const UpdateAcceptParams = [
'query',
'data',
'multi',
'upsert',
'merge',
'joins',
];
const AddAcceptParams = ['data', 'multi'];
const RemoveAcceptParams = ['query', 'multi', 'joins'];
const CountAcceptParams = ['query', 'joins'];
const AggregateAcceptParams = ['stages'];
const CreateIndexParams = ['data'];
const DropIndexParams = ['data'];
const DropIndexesParams = ['data'];
const ListIndexesParams = ['data'];
const ReadAction = { type: ActionType.READ, fields: ReadAcceptParams };
const UpdateAction = {
type: ActionType.UPDATE,
fields: UpdateAcceptParams,
};
const RemoveAction = {
type: ActionType.REMOVE,
fields: RemoveAcceptParams,
};
const AddAction = { type: ActionType.ADD, fields: AddAcceptParams };
const CountAction = {
type: ActionType.COUNT,
fields: CountAcceptParams,
};
const WatchAction = { type: ActionType.WATCH, fields: ReadAcceptParams };
const AggregateAction = {
type: ActionType.AGGREGATE,
fields: AggregateAcceptParams,
};
const CreateIndexAction = {
type: ActionType.CREATE_INDEX,
fields: CreateIndexParams,
};
const DropIndexAction = {
type: ActionType.DROP_INDEX,
fields: DropIndexParams,
};
const DropIndexesAction = {
type: ActionType.DROP_INDEXES,
fields: DropIndexesParams,
};
const ListIndexesAction = {
type: ActionType.LIST_INDEXES,
fields: ListIndexesParams,
};
function getAction(actionName) {
let action;
switch (actionName) {
case ActionType.READ:
action = ReadAction;
break;
case ActionType.UPDATE:
action = UpdateAction;
break;
case ActionType.ADD:
action = AddAction;
break;
case ActionType.REMOVE:
action = RemoveAction;
break;
case ActionType.COUNT:
action = CountAction;
break;
case ActionType.WATCH:
action = WatchAction;
break;
case ActionType.AGGREGATE:
action = AggregateAction;
break;
case ActionType.CREATE_INDEX:
action = CreateIndexAction;
break;
case ActionType.DROP_INDEX:
action = DropIndexAction;
break;
case ActionType.DROP_INDEXES:
action = DropIndexesAction;
break;
case ActionType.LIST_INDEXES:
action = ListIndexesAction;
break;
default:
action = null;
}
return action;
}
exports.getAction = getAction;
exports.UPDATE_COMMANDS = {
SET: '$set',
REMOVE: '$unset',
INC: '$inc',
MUL: '$mul',
PUSH: '$push',
PULL: '$pull',
PULL_ALL: '$pullAll',
POP: '$pop',
SHIFT: '$shift',
UNSHIFT: '$unshift',
BIT: '$bit',
ADD_TO_SET: '$addToSet',
RENAME: '$rename',
MAX: '$max',
MIN: '$min',
};
exports.LOGIC_COMMANDS = {
AND: '$and',
OR: '$or',
NOT: '$not',
NOR: '$nor',
};
exports.QUERY_COMMANDS = {
EQ: '$eq',
NEQ: '$ne',
GT: '$gt',
GTE: '$gte',
LT: '$lt',
LTE: '$lte',
IN: '$in',
NIN: '$nin',
ALL: '$all',
EXISTS: '$exists',
SIZE: '$size',
MOD: '$mod',
ELE_MATCH: '$elemMatch',
GEO_NEAR: '$geoNear',
GEO_WITHIN: '$geoWithin',
GEO_INTERSECTS: '$geoIntersects',
LIKE: '$like', // only for SQL query
EXPR: '$expr',
TEXT: '$text',
SEARCH: '$search',
};