command.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const query_1 = require("./commands/query");
  4. const logic_1 = require("./commands/logic");
  5. const update_1 = require("./commands/update");
  6. const type_1 = require("./utils/type");
  7. const aggregate_1 = require("./aggregate");
  8. exports.Command = {
  9. eq(val) {
  10. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.EQ, [val]);
  11. },
  12. neq(val) {
  13. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.NEQ, [val]);
  14. },
  15. lt(val) {
  16. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.LT, [val]);
  17. },
  18. lte(val) {
  19. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.LTE, [val]);
  20. },
  21. gt(val) {
  22. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.GT, [val]);
  23. },
  24. gte(val) {
  25. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.GTE, [val]);
  26. },
  27. in(val) {
  28. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.IN, val);
  29. },
  30. nin(val) {
  31. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.NIN, val);
  32. },
  33. all(val) {
  34. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.ALL, val);
  35. },
  36. elemMatch(val) {
  37. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.ELEM_MATCH, [val]);
  38. },
  39. exists(val) {
  40. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.EXISTS, [val]);
  41. },
  42. size(val) {
  43. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.SIZE, [val]);
  44. },
  45. mod(val) {
  46. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.MOD, [val]);
  47. },
  48. geoNear(val) {
  49. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.GEO_NEAR, [val]);
  50. },
  51. geoWithin(val) {
  52. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.GEO_WITHIN, [val]);
  53. },
  54. geoIntersects(val) {
  55. return new query_1.QueryCommand(query_1.QUERY_COMMANDS_LITERAL.GEO_INTERSECTS, [val]);
  56. },
  57. and(...__expressions__) {
  58. const expressions = type_1.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  59. return new logic_1.LogicCommand(logic_1.LOGIC_COMMANDS_LITERAL.AND, expressions);
  60. },
  61. nor(...__expressions__) {
  62. const expressions = type_1.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  63. return new logic_1.LogicCommand(logic_1.LOGIC_COMMANDS_LITERAL.NOR, expressions);
  64. },
  65. or(...__expressions__) {
  66. const expressions = type_1.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  67. return new logic_1.LogicCommand(logic_1.LOGIC_COMMANDS_LITERAL.OR, expressions);
  68. },
  69. not(...__expressions__) {
  70. const expressions = type_1.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  71. return new logic_1.LogicCommand(logic_1.LOGIC_COMMANDS_LITERAL.NOT, expressions);
  72. },
  73. set(val) {
  74. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.SET, [val]);
  75. },
  76. remove() {
  77. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.REMOVE, []);
  78. },
  79. inc(val) {
  80. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.INC, [val]);
  81. },
  82. mul(val) {
  83. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.MUL, [val]);
  84. },
  85. push(...args) {
  86. let values;
  87. if (type_1.isObject(args[0]) && args[0].hasOwnProperty('each')) {
  88. values = {};
  89. const options = args[0];
  90. if (options.each !== undefined) {
  91. values['$each'] = options.each;
  92. }
  93. if (options.position !== undefined) {
  94. values['$position'] = options.position;
  95. }
  96. if (options.sort !== undefined) {
  97. values['$sort'] = options.sort;
  98. }
  99. if (options.slice !== undefined) {
  100. values['$slice'] = options.slice;
  101. }
  102. }
  103. else if (type_1.isArray(args[0])) {
  104. values = args[0];
  105. }
  106. else {
  107. values = Array.from(args);
  108. }
  109. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.PUSH, values);
  110. },
  111. pull(values) {
  112. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.PULL, values);
  113. },
  114. pullAll(values) {
  115. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.PULL_ALL, values);
  116. },
  117. pop() {
  118. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.POP, []);
  119. },
  120. shift() {
  121. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.SHIFT, []);
  122. },
  123. unshift(...__values__) {
  124. const values = type_1.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  125. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.UNSHIFT, values);
  126. },
  127. addToSet(values) {
  128. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.ADD_TO_SET, values);
  129. },
  130. rename(values) {
  131. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.RENAME, [values]);
  132. },
  133. bit(values) {
  134. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.BIT, [values]);
  135. },
  136. max(values) {
  137. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.MAX, [values]);
  138. },
  139. min(values) {
  140. return new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.MIN, [values]);
  141. },
  142. expr(values) {
  143. return {
  144. $expr: values
  145. };
  146. },
  147. jsonSchema(schema) {
  148. return {
  149. $jsonSchema: schema
  150. };
  151. },
  152. text(values) {
  153. if (type_1.isString(values)) {
  154. return {
  155. $search: values.search
  156. };
  157. }
  158. else {
  159. return {
  160. $search: values.search,
  161. $language: values.language,
  162. $caseSensitive: values.caseSensitive,
  163. $diacriticSensitive: values.diacriticSensitive
  164. };
  165. }
  166. },
  167. aggregate: {
  168. pipeline() {
  169. return new aggregate_1.default();
  170. },
  171. abs: param => new AggregationOperator('abs', param),
  172. add: param => new AggregationOperator('add', param),
  173. ceil: param => new AggregationOperator('ceil', param),
  174. divide: param => new AggregationOperator('divide', param),
  175. exp: param => new AggregationOperator('exp', param),
  176. floor: param => new AggregationOperator('floor', param),
  177. ln: param => new AggregationOperator('ln', param),
  178. log: param => new AggregationOperator('log', param),
  179. log10: param => new AggregationOperator('log10', param),
  180. mod: param => new AggregationOperator('mod', param),
  181. multiply: param => new AggregationOperator('multiply', param),
  182. pow: param => new AggregationOperator('pow', param),
  183. sqrt: param => new AggregationOperator('sqrt', param),
  184. subtract: param => new AggregationOperator('subtract', param),
  185. trunc: param => new AggregationOperator('trunc', param),
  186. arrayElemAt: param => new AggregationOperator('arrayElemAt', param),
  187. arrayToObject: param => new AggregationOperator('arrayToObject', param),
  188. concatArrays: param => new AggregationOperator('concatArrays', param),
  189. filter: param => new AggregationOperator('filter', param),
  190. in: param => new AggregationOperator('in', param),
  191. indexOfArray: param => new AggregationOperator('indexOfArray', param),
  192. isArray: param => new AggregationOperator('isArray', param),
  193. map: param => new AggregationOperator('map', param),
  194. range: param => new AggregationOperator('range', param),
  195. reduce: param => new AggregationOperator('reduce', param),
  196. reverseArray: param => new AggregationOperator('reverseArray', param),
  197. size: param => new AggregationOperator('size', param),
  198. slice: param => new AggregationOperator('slice', param),
  199. zip: param => new AggregationOperator('zip', param),
  200. and: param => new AggregationOperator('and', param),
  201. not: param => new AggregationOperator('not', param),
  202. or: param => new AggregationOperator('or', param),
  203. cmp: param => new AggregationOperator('cmp', param),
  204. eq: param => new AggregationOperator('eq', param),
  205. gt: param => new AggregationOperator('gt', param),
  206. gte: param => new AggregationOperator('gte', param),
  207. lt: param => new AggregationOperator('lt', param),
  208. lte: param => new AggregationOperator('lte', param),
  209. neq: param => new AggregationOperator('ne', param),
  210. cond: param => new AggregationOperator('cond', param),
  211. ifNull: param => new AggregationOperator('ifNull', param),
  212. switch: param => new AggregationOperator('switch', param),
  213. dateFromParts: param => new AggregationOperator('dateFromParts', param),
  214. dateFromString: param => new AggregationOperator('dateFromString', param),
  215. dayOfMonth: param => new AggregationOperator('dayOfMonth', param),
  216. dayOfWeek: param => new AggregationOperator('dayOfWeek', param),
  217. dayOfYear: param => new AggregationOperator('dayOfYear', param),
  218. isoDayOfWeek: param => new AggregationOperator('isoDayOfWeek', param),
  219. isoWeek: param => new AggregationOperator('isoWeek', param),
  220. isoWeekYear: param => new AggregationOperator('isoWeekYear', param),
  221. millisecond: param => new AggregationOperator('millisecond', param),
  222. minute: param => new AggregationOperator('minute', param),
  223. month: param => new AggregationOperator('month', param),
  224. second: param => new AggregationOperator('second', param),
  225. hour: param => new AggregationOperator('hour', param),
  226. week: param => new AggregationOperator('week', param),
  227. year: param => new AggregationOperator('year', param),
  228. literal: param => new AggregationOperator('literal', param),
  229. mergeObjects: param => new AggregationOperator('mergeObjects', param),
  230. objectToArray: param => new AggregationOperator('objectToArray', param),
  231. allElementsTrue: param => new AggregationOperator('allElementsTrue', param),
  232. anyElementTrue: param => new AggregationOperator('anyElementTrue', param),
  233. setDifference: param => new AggregationOperator('setDifference', param),
  234. setEquals: param => new AggregationOperator('setEquals', param),
  235. setIntersection: param => new AggregationOperator('setIntersection', param),
  236. setIsSubset: param => new AggregationOperator('setIsSubset', param),
  237. setUnion: param => new AggregationOperator('setUnion', param),
  238. concat: param => new AggregationOperator('concat', param),
  239. dateToString: param => new AggregationOperator('dateToString', param),
  240. indexOfBytes: param => new AggregationOperator('indexOfBytes', param),
  241. indexOfCP: param => new AggregationOperator('indexOfCP', param),
  242. split: param => new AggregationOperator('split', param),
  243. strLenBytes: param => new AggregationOperator('strLenBytes', param),
  244. strLenCP: param => new AggregationOperator('strLenCP', param),
  245. strcasecmp: param => new AggregationOperator('strcasecmp', param),
  246. substr: param => new AggregationOperator('substr', param),
  247. substrBytes: param => new AggregationOperator('substrBytes', param),
  248. substrCP: param => new AggregationOperator('substrCP', param),
  249. toLower: param => new AggregationOperator('toLower', param),
  250. toUpper: param => new AggregationOperator('toUpper', param),
  251. meta: param => new AggregationOperator('meta', param),
  252. addToSet: param => new AggregationOperator('addToSet', param),
  253. avg: param => new AggregationOperator('avg', param),
  254. first: param => new AggregationOperator('first', param),
  255. last: param => new AggregationOperator('last', param),
  256. max: param => new AggregationOperator('max', param),
  257. min: param => new AggregationOperator('min', param),
  258. push: param => new AggregationOperator('push', param),
  259. stdDevPop: param => new AggregationOperator('stdDevPop', param),
  260. stdDevSamp: param => new AggregationOperator('stdDevSamp', param),
  261. sum: param => new AggregationOperator('sum', param),
  262. let: param => new AggregationOperator('let', param)
  263. },
  264. project: {
  265. slice: param => new ProjectionOperator('slice', param),
  266. elemMatch: param => new ProjectionOperator('elemMatch', param)
  267. }
  268. };
  269. class AggregationOperator {
  270. constructor(name, param) {
  271. this['$' + name] = param;
  272. }
  273. }
  274. exports.AggregationOperator = AggregationOperator;
  275. class ProjectionOperator {
  276. constructor(name, param) {
  277. this['$' + name] = param;
  278. }
  279. }
  280. exports.ProjectionOperator = ProjectionOperator;
  281. exports.default = exports.Command;