@nocobase/database 0.7.0-alpha.9 → 0.7.1-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/lib/collection-importer.js +85 -68
  2. package/lib/collection.d.ts +6 -2
  3. package/lib/collection.js +371 -210
  4. package/lib/database.d.ts +23 -4
  5. package/lib/database.js +599 -273
  6. package/lib/fields/array-field.js +45 -25
  7. package/lib/fields/belongs-to-field.js +101 -54
  8. package/lib/fields/belongs-to-many-field.js +98 -53
  9. package/lib/fields/boolean-field.js +24 -9
  10. package/lib/fields/context-field.js +77 -45
  11. package/lib/fields/date-field.js +24 -9
  12. package/lib/fields/field.d.ts +4 -1
  13. package/lib/fields/field.js +231 -75
  14. package/lib/fields/formula-field.d.ts +19 -0
  15. package/lib/fields/formula-field.js +184 -0
  16. package/lib/fields/has-inverse-field.js +4 -2
  17. package/lib/fields/has-many-field.js +105 -56
  18. package/lib/fields/has-one-field.js +105 -54
  19. package/lib/fields/index.d.ts +5 -1
  20. package/lib/fields/index.js +290 -32
  21. package/lib/fields/json-field.js +36 -16
  22. package/lib/fields/number-field.js +53 -26
  23. package/lib/fields/password-field.js +120 -73
  24. package/lib/fields/radio-field.js +75 -47
  25. package/lib/fields/relation-field.js +41 -28
  26. package/lib/fields/sort-field.js +165 -89
  27. package/lib/fields/string-field.js +24 -9
  28. package/lib/fields/text-field.js +24 -9
  29. package/lib/fields/time-field.js +24 -9
  30. package/lib/fields/uid-field.js +57 -28
  31. package/lib/fields/uuid-field.d.ts +9 -0
  32. package/lib/fields/uuid-field.js +39 -0
  33. package/lib/fields/virtual-field.js +24 -9
  34. package/lib/filter-parser.js +288 -179
  35. package/lib/index.d.ts +1 -0
  36. package/lib/index.js +224 -29
  37. package/lib/magic-attribute-model.js +123 -71
  38. package/lib/migration.d.ts +35 -0
  39. package/lib/migration.js +90 -0
  40. package/lib/mock-database.d.ts +1 -0
  41. package/lib/mock-database.js +69 -34
  42. package/lib/model-hook.d.ts +5 -5
  43. package/lib/model-hook.js +109 -60
  44. package/lib/model.js +116 -81
  45. package/lib/operators/array.js +136 -96
  46. package/lib/operators/association.js +30 -14
  47. package/lib/operators/boolean.d.ts +13 -0
  48. package/lib/operators/boolean.js +35 -0
  49. package/lib/operators/date.js +78 -34
  50. package/lib/operators/empty.js +113 -75
  51. package/lib/operators/index.js +15 -3
  52. package/lib/operators/ne.js +27 -12
  53. package/{esm/operators/ne.d.ts → lib/operators/notIn.d.ts} +2 -2
  54. package/lib/operators/notIn.js +29 -0
  55. package/lib/operators/string.js +56 -35
  56. package/lib/operators/utils.js +18 -10
  57. package/lib/options-parser.js +345 -215
  58. package/lib/playground.js +66 -53
  59. package/lib/relation-repository/belongs-to-many-repository.js +281 -198
  60. package/lib/relation-repository/belongs-to-repository.js +10 -6
  61. package/lib/relation-repository/hasmany-repository.js +168 -121
  62. package/lib/relation-repository/hasone-repository.js +10 -6
  63. package/lib/relation-repository/multiple-relation-repository.d.ts +3 -3
  64. package/lib/relation-repository/multiple-relation-repository.js +263 -148
  65. package/lib/relation-repository/relation-repository.d.ts +1 -1
  66. package/lib/relation-repository/relation-repository.js +163 -93
  67. package/lib/relation-repository/single-relation-repository.d.ts +6 -6
  68. package/lib/relation-repository/single-relation-repository.js +145 -99
  69. package/lib/relation-repository/types.js +4 -2
  70. package/lib/repository.d.ts +4 -7
  71. package/lib/repository.js +473 -291
  72. package/lib/transaction-decorator.js +80 -67
  73. package/lib/update-associations.d.ts +1 -2
  74. package/lib/update-associations.js +525 -321
  75. package/lib/update-guard.js +160 -117
  76. package/package.json +9 -9
  77. package/src/__tests__/collection.test.ts +27 -0
  78. package/src/__tests__/database.test.ts +47 -0
  79. package/src/__tests__/fields/formula-field.test.ts +69 -0
  80. package/src/__tests__/fields/uuid-field.test.ts +30 -0
  81. package/src/__tests__/fixtures/migrations/m1.ts +7 -0
  82. package/src/__tests__/fixtures/migrations/m2.ts +7 -0
  83. package/src/__tests__/hooks/afterCreateWithAssociations.test.ts +33 -0
  84. package/src/__tests__/migrator.test.ts +70 -0
  85. package/src/__tests__/model-hook.test.ts +54 -0
  86. package/src/__tests__/operator/notIn.test.ts +33 -0
  87. package/src/__tests__/option-parser.test.ts +30 -6
  88. package/src/__tests__/relation-repository/belongs-to-many-repository.test.ts +1 -1
  89. package/src/__tests__/sequelize-hooks.test.ts +69 -0
  90. package/src/__tests__/sort.test.ts +51 -0
  91. package/src/__tests__/update-associations.test.ts +3 -3
  92. package/src/collection-importer.ts +12 -20
  93. package/src/collection.ts +26 -2
  94. package/src/database.ts +144 -14
  95. package/src/fields/field.ts +88 -1
  96. package/src/fields/formula-field.ts +106 -0
  97. package/src/fields/index.ts +6 -0
  98. package/src/fields/password-field.ts +2 -0
  99. package/src/fields/uuid-field.ts +21 -0
  100. package/src/index.ts +1 -0
  101. package/src/migration.ts +76 -0
  102. package/src/mock-database.ts +2 -1
  103. package/src/model-hook.ts +26 -22
  104. package/src/operators/boolean.ts +18 -0
  105. package/src/operators/index.ts +2 -0
  106. package/src/operators/notIn.ts +12 -0
  107. package/src/options-parser.ts +14 -10
  108. package/src/relation-repository/multiple-relation-repository.ts +14 -6
  109. package/src/relation-repository/relation-repository.ts +12 -6
  110. package/src/relation-repository/single-relation-repository.ts +11 -7
  111. package/src/repository.ts +20 -10
  112. package/src/update-associations.ts +2 -3
  113. package/esm/collection-importer.d.ts +0 -7
  114. package/esm/collection-importer.js +0 -49
  115. package/esm/collection-importer.js.map +0 -1
  116. package/esm/collection.d.ts +0 -73
  117. package/esm/collection.js +0 -224
  118. package/esm/collection.js.map +0 -1
  119. package/esm/database.d.ts +0 -101
  120. package/esm/database.js +0 -275
  121. package/esm/database.js.map +0 -1
  122. package/esm/fields/array-field.d.ts +0 -11
  123. package/esm/fields/array-field.js +0 -26
  124. package/esm/fields/array-field.js.map +0 -1
  125. package/esm/fields/belongs-to-field.d.ts +0 -12
  126. package/esm/fields/belongs-to-field.js +0 -57
  127. package/esm/fields/belongs-to-field.js.map +0 -1
  128. package/esm/fields/belongs-to-many-field.d.ts +0 -11
  129. package/esm/fields/belongs-to-many-field.js +0 -55
  130. package/esm/fields/belongs-to-many-field.js.map +0 -1
  131. package/esm/fields/boolean-field.d.ts +0 -8
  132. package/esm/fields/boolean-field.js +0 -8
  133. package/esm/fields/boolean-field.js.map +0 -1
  134. package/esm/fields/context-field.d.ts +0 -13
  135. package/esm/fields/context-field.js +0 -43
  136. package/esm/fields/context-field.js.map +0 -1
  137. package/esm/fields/date-field.d.ts +0 -8
  138. package/esm/fields/date-field.js +0 -8
  139. package/esm/fields/date-field.js.map +0 -1
  140. package/esm/fields/field.d.ts +0 -37
  141. package/esm/fields/field.js +0 -74
  142. package/esm/fields/field.js.map +0 -1
  143. package/esm/fields/has-inverse-field.d.ts +0 -4
  144. package/esm/fields/has-inverse-field.js +0 -2
  145. package/esm/fields/has-inverse-field.js.map +0 -1
  146. package/esm/fields/has-many-field.d.ts +0 -64
  147. package/esm/fields/has-many-field.js +0 -58
  148. package/esm/fields/has-many-field.js.map +0 -1
  149. package/esm/fields/has-one-field.d.ts +0 -64
  150. package/esm/fields/has-one-field.js +0 -57
  151. package/esm/fields/has-one-field.js.map +0 -1
  152. package/esm/fields/index.d.ts +0 -40
  153. package/esm/fields/index.js +0 -21
  154. package/esm/fields/index.js.map +0 -1
  155. package/esm/fields/json-field.d.ts +0 -14
  156. package/esm/fields/json-field.js +0 -17
  157. package/esm/fields/json-field.js.map +0 -1
  158. package/esm/fields/number-field.d.ts +0 -32
  159. package/esm/fields/number-field.js +0 -28
  160. package/esm/fields/number-field.js.map +0 -1
  161. package/esm/fields/password-field.d.ts +0 -21
  162. package/esm/fields/password-field.js +0 -71
  163. package/esm/fields/password-field.js.map +0 -1
  164. package/esm/fields/radio-field.d.ts +0 -14
  165. package/esm/fields/radio-field.js +0 -49
  166. package/esm/fields/radio-field.js.map +0 -1
  167. package/esm/fields/relation-field.d.ts +0 -20
  168. package/esm/fields/relation-field.js +0 -27
  169. package/esm/fields/relation-field.js.map +0 -1
  170. package/esm/fields/sort-field.d.ts +0 -16
  171. package/esm/fields/sort-field.js +0 -90
  172. package/esm/fields/sort-field.js.map +0 -1
  173. package/esm/fields/string-field.d.ts +0 -8
  174. package/esm/fields/string-field.js +0 -8
  175. package/esm/fields/string-field.js.map +0 -1
  176. package/esm/fields/text-field.d.ts +0 -8
  177. package/esm/fields/text-field.js +0 -8
  178. package/esm/fields/text-field.js.map +0 -1
  179. package/esm/fields/time-field.d.ts +0 -8
  180. package/esm/fields/time-field.js +0 -8
  181. package/esm/fields/time-field.js.map +0 -1
  182. package/esm/fields/uid-field.d.ts +0 -10
  183. package/esm/fields/uid-field.js +0 -27
  184. package/esm/fields/uid-field.js.map +0 -1
  185. package/esm/fields/virtual-field.d.ts +0 -8
  186. package/esm/fields/virtual-field.js +0 -8
  187. package/esm/fields/virtual-field.js.map +0 -1
  188. package/esm/filter-parser.d.ts +0 -27
  189. package/esm/filter-parser.js +0 -185
  190. package/esm/filter-parser.js.map +0 -1
  191. package/esm/index.d.ts +0 -15
  192. package/esm/index.js +0 -16
  193. package/esm/index.js.map +0 -1
  194. package/esm/magic-attribute-model.d.ts +0 -7
  195. package/esm/magic-attribute-model.js +0 -70
  196. package/esm/magic-attribute-model.js.map +0 -1
  197. package/esm/mock-database.d.ts +0 -22
  198. package/esm/mock-database.js +0 -34
  199. package/esm/mock-database.js.map +0 -1
  200. package/esm/model-hook.d.ts +0 -12
  201. package/esm/model-hook.js +0 -61
  202. package/esm/model-hook.js.map +0 -1
  203. package/esm/model.d.ts +0 -15
  204. package/esm/model.js +0 -80
  205. package/esm/model.js.map +0 -1
  206. package/esm/operators/array.d.ts +0 -26
  207. package/esm/operators/array.js +0 -105
  208. package/esm/operators/array.js.map +0 -1
  209. package/esm/operators/association.d.ts +0 -10
  210. package/esm/operators/association.js +0 -14
  211. package/esm/operators/association.js.map +0 -1
  212. package/esm/operators/date.d.ts +0 -34
  213. package/esm/operators/date.js +0 -35
  214. package/esm/operators/date.js.map +0 -1
  215. package/esm/operators/empty.d.ts +0 -28
  216. package/esm/operators/empty.js +0 -58
  217. package/esm/operators/empty.js.map +0 -1
  218. package/esm/operators/index.d.ts +0 -2
  219. package/esm/operators/index.js +0 -2
  220. package/esm/operators/index.js.map +0 -1
  221. package/esm/operators/ne.js +0 -12
  222. package/esm/operators/ne.js.map +0 -1
  223. package/esm/operators/string.d.ts +0 -21
  224. package/esm/operators/string.js +0 -35
  225. package/esm/operators/string.js.map +0 -1
  226. package/esm/operators/utils.d.ts +0 -4
  227. package/esm/operators/utils.js +0 -11
  228. package/esm/operators/utils.js.map +0 -1
  229. package/esm/options-parser.d.ts +0 -31
  230. package/esm/options-parser.js +0 -225
  231. package/esm/options-parser.js.map +0 -1
  232. package/esm/playground.d.ts +0 -1
  233. package/esm/playground.js +0 -53
  234. package/esm/playground.js.map +0 -1
  235. package/esm/relation-repository/belongs-to-many-repository.d.ts +0 -36
  236. package/esm/relation-repository/belongs-to-many-repository.js +0 -199
  237. package/esm/relation-repository/belongs-to-many-repository.js.map +0 -1
  238. package/esm/relation-repository/belongs-to-repository.d.ts +0 -17
  239. package/esm/relation-repository/belongs-to-repository.js +0 -4
  240. package/esm/relation-repository/belongs-to-repository.js.map +0 -1
  241. package/esm/relation-repository/hasmany-repository.d.ts +0 -23
  242. package/esm/relation-repository/hasmany-repository.js +0 -125
  243. package/esm/relation-repository/hasmany-repository.js.map +0 -1
  244. package/esm/relation-repository/hasone-repository.d.ts +0 -17
  245. package/esm/relation-repository/hasone-repository.js +0 -4
  246. package/esm/relation-repository/hasone-repository.js.map +0 -1
  247. package/esm/relation-repository/multiple-relation-repository.d.ts +0 -23
  248. package/esm/relation-repository/multiple-relation-repository.js +0 -149
  249. package/esm/relation-repository/multiple-relation-repository.js.map +0 -1
  250. package/esm/relation-repository/relation-repository.d.ts +0 -32
  251. package/esm/relation-repository/relation-repository.js +0 -93
  252. package/esm/relation-repository/relation-repository.js.map +0 -1
  253. package/esm/relation-repository/single-relation-repository.d.ts +0 -23
  254. package/esm/relation-repository/single-relation-repository.js +0 -96
  255. package/esm/relation-repository/single-relation-repository.js.map +0 -1
  256. package/esm/relation-repository/types.d.ts +0 -7
  257. package/esm/relation-repository/types.js +0 -2
  258. package/esm/relation-repository/types.js.map +0 -1
  259. package/esm/repository.d.ts +0 -165
  260. package/esm/repository.js +0 -276
  261. package/esm/repository.js.map +0 -1
  262. package/esm/transaction-decorator.d.ts +0 -1
  263. package/esm/transaction-decorator.js +0 -63
  264. package/esm/transaction-decorator.js.map +0 -1
  265. package/esm/update-associations.d.ts +0 -60
  266. package/esm/update-associations.js +0 -362
  267. package/esm/update-associations.js.map +0 -1
  268. package/esm/update-guard.d.ts +0 -26
  269. package/esm/update-guard.js +0 -122
  270. package/esm/update-guard.js.map +0 -1
  271. package/lib/collection-importer.js.map +0 -1
  272. package/lib/collection.js.map +0 -1
  273. package/lib/database.js.map +0 -1
  274. package/lib/fields/array-field.js.map +0 -1
  275. package/lib/fields/belongs-to-field.js.map +0 -1
  276. package/lib/fields/belongs-to-many-field.js.map +0 -1
  277. package/lib/fields/boolean-field.js.map +0 -1
  278. package/lib/fields/context-field.js.map +0 -1
  279. package/lib/fields/date-field.js.map +0 -1
  280. package/lib/fields/field.js.map +0 -1
  281. package/lib/fields/has-inverse-field.js.map +0 -1
  282. package/lib/fields/has-many-field.js.map +0 -1
  283. package/lib/fields/has-one-field.js.map +0 -1
  284. package/lib/fields/index.js.map +0 -1
  285. package/lib/fields/json-field.js.map +0 -1
  286. package/lib/fields/number-field.js.map +0 -1
  287. package/lib/fields/password-field.js.map +0 -1
  288. package/lib/fields/radio-field.js.map +0 -1
  289. package/lib/fields/relation-field.js.map +0 -1
  290. package/lib/fields/sort-field.js.map +0 -1
  291. package/lib/fields/string-field.js.map +0 -1
  292. package/lib/fields/text-field.js.map +0 -1
  293. package/lib/fields/time-field.js.map +0 -1
  294. package/lib/fields/uid-field.js.map +0 -1
  295. package/lib/fields/virtual-field.js.map +0 -1
  296. package/lib/filter-parser.js.map +0 -1
  297. package/lib/index.js.map +0 -1
  298. package/lib/magic-attribute-model.js.map +0 -1
  299. package/lib/mock-database.js.map +0 -1
  300. package/lib/model-hook.js.map +0 -1
  301. package/lib/model.js.map +0 -1
  302. package/lib/operators/array.js.map +0 -1
  303. package/lib/operators/association.js.map +0 -1
  304. package/lib/operators/date.js.map +0 -1
  305. package/lib/operators/empty.js.map +0 -1
  306. package/lib/operators/index.js.map +0 -1
  307. package/lib/operators/ne.js.map +0 -1
  308. package/lib/operators/string.js.map +0 -1
  309. package/lib/operators/utils.js.map +0 -1
  310. package/lib/options-parser.js.map +0 -1
  311. package/lib/playground.js.map +0 -1
  312. package/lib/relation-repository/belongs-to-many-repository.js.map +0 -1
  313. package/lib/relation-repository/belongs-to-repository.js.map +0 -1
  314. package/lib/relation-repository/hasmany-repository.js.map +0 -1
  315. package/lib/relation-repository/hasone-repository.js.map +0 -1
  316. package/lib/relation-repository/multiple-relation-repository.js.map +0 -1
  317. package/lib/relation-repository/relation-repository.js.map +0 -1
  318. package/lib/relation-repository/single-relation-repository.js.map +0 -1
  319. package/lib/relation-repository/types.js.map +0 -1
  320. package/lib/repository.js.map +0 -1
  321. package/lib/transaction-decorator.js.map +0 -1
  322. package/lib/update-associations.js.map +0 -1
  323. package/lib/update-guard.js.map +0 -1
  324. package/tsconfig.build.json +0 -9
  325. package/tsconfig.json +0 -5
@@ -1,105 +0,0 @@
1
- import { Op, Sequelize } from 'sequelize';
2
- import { isPg, isMySQL } from './utils';
3
- const getFieldName = (ctx) => {
4
- const fieldName = ctx.fieldName;
5
- return fieldName;
6
- };
7
- const escape = (value, ctx) => {
8
- const sequelize = ctx.db.sequelize;
9
- return sequelize.escape(value);
10
- };
11
- const sqliteExistQuery = (value, ctx) => {
12
- const fieldName = getFieldName(ctx);
13
- const sqlArray = `(${value.map((v) => `'${v}'`).join(', ')})`;
14
- const subQuery = `exists (select * from json_each(${fieldName}) where json_each.value in ${sqlArray})`;
15
- return subQuery;
16
- };
17
- const emptyQuery = (ctx, operator) => {
18
- const fieldName = getFieldName(ctx);
19
- let funcName = 'json_array_length';
20
- let ifNull = 'IFNULL';
21
- if (isPg(ctx)) {
22
- funcName = 'jsonb_array_length';
23
- ifNull = 'coalesce';
24
- }
25
- if (isMySQL(ctx)) {
26
- funcName = 'json_length';
27
- }
28
- return `(select ${ifNull}(${funcName}(${fieldName}), 0) ${operator} 0)`;
29
- };
30
- export default {
31
- $match(value, ctx) {
32
- const fieldName = getFieldName(ctx);
33
- if (isPg(ctx)) {
34
- return {
35
- [Op.contained]: value,
36
- [Op.contains]: value,
37
- };
38
- }
39
- value = escape(JSON.stringify(value.sort()), ctx);
40
- if (isMySQL(ctx)) {
41
- return Sequelize.literal(`JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName})`);
42
- }
43
- return {
44
- [Op.eq]: Sequelize.literal(`json(${value})`),
45
- };
46
- },
47
- $notMatch(value, ctx) {
48
- const fieldName = getFieldName(ctx);
49
- value = escape(JSON.stringify(value), ctx);
50
- if (isPg(ctx)) {
51
- return Sequelize.literal(`not (${fieldName} <@ ${value}::JSONB and ${fieldName} @> ${value}::JSONB)`);
52
- }
53
- if (isMySQL(ctx)) {
54
- return Sequelize.literal(`not (JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName}))`);
55
- }
56
- return {
57
- [Op.ne]: Sequelize.literal(`json(${value})`),
58
- };
59
- },
60
- $anyOf(value, ctx) {
61
- const fieldName = getFieldName(ctx);
62
- if (isPg(ctx)) {
63
- return Sequelize.literal(`${fieldName} ?| ${escape(value.map((i) => `${i}`), ctx)}`);
64
- }
65
- if (isMySQL(ctx)) {
66
- value = escape(JSON.stringify(value), ctx);
67
- return Sequelize.literal(`JSON_OVERLAPS(${fieldName}, ${value})`);
68
- }
69
- const subQuery = sqliteExistQuery(value, ctx);
70
- return Sequelize.literal(subQuery);
71
- },
72
- $noneOf(value, ctx) {
73
- let where;
74
- if (isPg(ctx)) {
75
- const fieldName = getFieldName(ctx);
76
- // pg single quote
77
- where = Sequelize.literal(`not (${fieldName} ?| ${escape(value.map((i) => `${i}`), ctx)})`);
78
- }
79
- else if (isMySQL(ctx)) {
80
- const fieldName = getFieldName(ctx);
81
- value = escape(JSON.stringify(value), ctx);
82
- where = Sequelize.literal(`NOT JSON_OVERLAPS(${fieldName}, ${value})`);
83
- }
84
- else {
85
- const subQuery = sqliteExistQuery(value, ctx);
86
- where = Sequelize.literal(`not ${subQuery}`);
87
- }
88
- return {
89
- [Op.or]: [where, { [Op.is]: null }],
90
- };
91
- },
92
- $arrayEmpty(value, ctx) {
93
- const subQuery = emptyQuery(ctx, '=');
94
- return {
95
- [Op.and]: [Sequelize.literal(`${subQuery}`)],
96
- };
97
- },
98
- $arrayNotEmpty(value, ctx) {
99
- const subQuery = emptyQuery(ctx, '>');
100
- return {
101
- [Op.and]: [Sequelize.literal(`${subQuery}`)],
102
- };
103
- },
104
- };
105
- //# sourceMappingURL=array.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/operators/array.ts"],"names":[],"mappings":"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","sourcesContent":["import { Op, Sequelize } from 'sequelize';\nimport { isPg, isMySQL } from './utils';\n\nconst getFieldName = (ctx) => {\n const fieldName = ctx.fieldName;\n return fieldName;\n};\n\nconst escape = (value, ctx) => {\n const sequelize: Sequelize = ctx.db.sequelize;\n return sequelize.escape(value);\n};\n\nconst sqliteExistQuery = (value, ctx) => {\n const fieldName = getFieldName(ctx);\n\n const sqlArray = `(${value.map((v) => `'${v}'`).join(', ')})`;\n\n const subQuery = `exists (select * from json_each(${fieldName}) where json_each.value in ${sqlArray})`;\n\n return subQuery;\n};\n\nconst emptyQuery = (ctx, operator: '=' | '>') => {\n const fieldName = getFieldName(ctx);\n\n let funcName = 'json_array_length';\n let ifNull = 'IFNULL';\n\n if (isPg(ctx)) {\n funcName = 'jsonb_array_length';\n ifNull = 'coalesce';\n }\n\n if (isMySQL(ctx)) {\n funcName = 'json_length';\n }\n\n return `(select ${ifNull}(${funcName}(${fieldName}), 0) ${operator} 0)`;\n};\n\nexport default {\n $match(value, ctx) {\n const fieldName = getFieldName(ctx);\n\n if (isPg(ctx)) {\n return {\n [Op.contained]: value,\n [Op.contains]: value,\n };\n }\n\n value = escape(JSON.stringify(value.sort()), ctx);\n\n if (isMySQL(ctx)) {\n return Sequelize.literal(`JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName})`);\n }\n\n return {\n [Op.eq]: Sequelize.literal(`json(${value})`),\n };\n },\n\n $notMatch(value, ctx) {\n const fieldName = getFieldName(ctx);\n value = escape(JSON.stringify(value), ctx);\n\n if (isPg(ctx)) {\n return Sequelize.literal(`not (${fieldName} <@ ${value}::JSONB and ${fieldName} @> ${value}::JSONB)`);\n }\n\n if (isMySQL(ctx)) {\n return Sequelize.literal(`not (JSON_CONTAINS(${fieldName}, ${value}) AND JSON_CONTAINS(${value}, ${fieldName}))`);\n }\n return {\n [Op.ne]: Sequelize.literal(`json(${value})`),\n };\n },\n\n $anyOf(value, ctx) {\n const fieldName = getFieldName(ctx);\n\n if (isPg(ctx)) {\n return Sequelize.literal(\n `${fieldName} ?| ${escape(\n value.map((i) => `${i}`),\n ctx,\n )}`,\n );\n }\n\n if (isMySQL(ctx)) {\n value = escape(JSON.stringify(value), ctx);\n\n return Sequelize.literal(`JSON_OVERLAPS(${fieldName}, ${value})`);\n }\n\n const subQuery = sqliteExistQuery(value, ctx);\n\n return Sequelize.literal(subQuery);\n },\n\n $noneOf(value, ctx) {\n let where;\n\n if (isPg(ctx)) {\n const fieldName = getFieldName(ctx);\n // pg single quote\n where = Sequelize.literal(\n `not (${fieldName} ?| ${escape(\n value.map((i) => `${i}`),\n ctx,\n )})`,\n );\n } else if (isMySQL(ctx)) {\n const fieldName = getFieldName(ctx);\n value = escape(JSON.stringify(value), ctx);\n where = Sequelize.literal(`NOT JSON_OVERLAPS(${fieldName}, ${value})`);\n } else {\n const subQuery = sqliteExistQuery(value, ctx);\n\n where = Sequelize.literal(`not ${subQuery}`);\n }\n\n return {\n [Op.or]: [where, { [Op.is]: null }],\n };\n },\n\n $arrayEmpty(value, ctx) {\n const subQuery = emptyQuery(ctx, '=');\n\n return {\n [Op.and]: [Sequelize.literal(`${subQuery}`)],\n };\n },\n\n $arrayNotEmpty(value, ctx) {\n const subQuery = emptyQuery(ctx, '>');\n\n return {\n [Op.and]: [Sequelize.literal(`${subQuery}`)],\n };\n },\n};\n"]}
@@ -1,10 +0,0 @@
1
- import { Op } from 'sequelize';
2
- declare const _default: {
3
- $exists(value: any, ctx: any): {
4
- [Op.not]: any;
5
- };
6
- $notExists(value: any, ctx: any): {
7
- [Op.is]: any;
8
- };
9
- };
10
- export default _default;
@@ -1,14 +0,0 @@
1
- import { Op } from 'sequelize';
2
- export default {
3
- $exists(value, ctx) {
4
- return {
5
- [Op.not]: null,
6
- };
7
- },
8
- $notExists(value, ctx) {
9
- return {
10
- [Op.is]: null,
11
- };
12
- },
13
- };
14
- //# sourceMappingURL=association.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"association.js","sourceRoot":"","sources":["../../src/operators/association.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAa,MAAM,WAAW,CAAC;AAE1C,eAAe;IACb,OAAO,CAAC,KAAK,EAAE,GAAG;QAChB,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IACD,UAAU,CAAC,KAAK,EAAE,GAAG;QACnB,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { Op, Sequelize } from 'sequelize';\n\nexport default {\n $exists(value, ctx) {\n return {\n [Op.not]: null,\n };\n },\n $notExists(value, ctx) {\n return {\n [Op.is]: null,\n };\n },\n};\n"]}
@@ -1,34 +0,0 @@
1
- import { Op } from 'sequelize';
2
- declare const _default: {
3
- $dateOn(value: any): {
4
- [Op.and]: ({
5
- [Op.gte]: Date;
6
- [Op.lt]?: undefined;
7
- } | {
8
- [Op.lt]: Date;
9
- [Op.gte]?: undefined;
10
- })[];
11
- };
12
- $dateNotOn(value: any): {
13
- [Op.or]: ({
14
- [Op.lt]: Date;
15
- [Op.gte]?: undefined;
16
- } | {
17
- [Op.gte]: Date;
18
- [Op.lt]?: undefined;
19
- })[];
20
- };
21
- $dateBefore(value: any): {
22
- [Op.lt]: Date;
23
- };
24
- $dateNotBefore(value: any): {
25
- [Op.gte]: Date;
26
- };
27
- $dateAfter(value: any): {
28
- [Op.gte]: Date;
29
- };
30
- $dateNotAfter(value: any): {
31
- [Op.lt]: Date;
32
- };
33
- };
34
- export default _default;
@@ -1,35 +0,0 @@
1
- import { Op } from 'sequelize';
2
- import moment from 'moment';
3
- function stringToDate(value) {
4
- return moment(value).toDate();
5
- }
6
- function getNextDay(value) {
7
- return moment(value).add(1, 'd').toDate();
8
- }
9
- export default {
10
- $dateOn(value) {
11
- return {
12
- [Op.and]: [{ [Op.gte]: stringToDate(value) }, { [Op.lt]: getNextDay(value) }],
13
- };
14
- },
15
- $dateNotOn(value) {
16
- return {
17
- [Op.or]: [{ [Op.lt]: stringToDate(value) }, { [Op.gte]: getNextDay(value) }],
18
- };
19
- },
20
- $dateBefore(value) {
21
- return { [Op.lt]: stringToDate(value) };
22
- },
23
- $dateNotBefore(value) {
24
- return {
25
- [Op.gte]: stringToDate(value),
26
- };
27
- },
28
- $dateAfter(value) {
29
- return { [Op.gte]: getNextDay(value) };
30
- },
31
- $dateNotAfter(value) {
32
- return { [Op.lt]: getNextDay(value) };
33
- },
34
- };
35
- //# sourceMappingURL=date.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/operators/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,MAAuB,MAAM,QAAQ,CAAC;AAC7C,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED,eAAe;IACb,OAAO,CAAC,KAAK;QACX,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;SAC9E,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAK;QACd,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK;QACf,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,KAAK;QAClB,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,KAAK;QACjB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACxC,CAAC;CACF,CAAC","sourcesContent":["import { Op } from 'sequelize';\nimport moment, { MomentInput } from 'moment';\nfunction stringToDate(value: string): Date {\n return moment(value).toDate();\n}\n\nfunction getNextDay(value: MomentInput): Date {\n return moment(value).add(1, 'd').toDate();\n}\n\nexport default {\n $dateOn(value) {\n return {\n [Op.and]: [{ [Op.gte]: stringToDate(value) }, { [Op.lt]: getNextDay(value) }],\n };\n },\n\n $dateNotOn(value) {\n return {\n [Op.or]: [{ [Op.lt]: stringToDate(value) }, { [Op.gte]: getNextDay(value) }],\n };\n },\n\n $dateBefore(value) {\n return { [Op.lt]: stringToDate(value) };\n },\n\n $dateNotBefore(value) {\n return {\n [Op.gte]: stringToDate(value),\n };\n },\n\n $dateAfter(value) {\n return { [Op.gte]: getNextDay(value) };\n },\n\n $dateNotAfter(value) {\n return { [Op.lt]: getNextDay(value) };\n },\n};\n"]}
@@ -1,28 +0,0 @@
1
- import { Op } from 'sequelize';
2
- declare const _default: {
3
- $empty(_: any, ctx: any): {
4
- [Op.and]: import("sequelize/types/lib/utils").Literal[];
5
- } | {
6
- [Op.or]: {
7
- [Op.is]: any;
8
- [Op.eq]: string;
9
- };
10
- [Op.is]?: undefined;
11
- } | {
12
- [Op.is]: any;
13
- [Op.or]?: undefined;
14
- };
15
- $notEmpty(_: any, ctx: any): {
16
- [Op.and]: import("sequelize/types/lib/utils").Literal[];
17
- } | {
18
- [Op.and]: {
19
- [Op.not]: any;
20
- [Op.ne]: string;
21
- };
22
- [Op.not]?: undefined;
23
- } | {
24
- [Op.not]: any;
25
- [Op.and]?: undefined;
26
- };
27
- };
28
- export default _default;
@@ -1,58 +0,0 @@
1
- import { Op } from 'sequelize';
2
- import { ArrayField, StringField } from '../fields';
3
- import arrayOperators from './array';
4
- import lodash, { parseInt } from 'lodash';
5
- const findFilterFieldType = (ctx) => {
6
- const db = ctx.db;
7
- let path = ctx.path.split('.');
8
- // remove operators
9
- path.pop();
10
- const fieldName = path.pop();
11
- let model = ctx.model;
12
- const associationPath = path;
13
- for (const association of associationPath) {
14
- if (lodash.isNumber(parseInt(association)) || association.startsWith('$')) {
15
- continue;
16
- }
17
- model = model.associations[association].target;
18
- }
19
- const collection = db.modelCollection.get(model);
20
- return collection.getField(fieldName);
21
- };
22
- export default {
23
- $empty(_, ctx) {
24
- const field = findFilterFieldType(ctx);
25
- if (field instanceof StringField) {
26
- return {
27
- [Op.or]: {
28
- [Op.is]: null,
29
- [Op.eq]: '',
30
- },
31
- };
32
- }
33
- if (field instanceof ArrayField) {
34
- return arrayOperators.$arrayEmpty(_, ctx);
35
- }
36
- return {
37
- [Op.is]: null,
38
- };
39
- },
40
- $notEmpty(_, ctx) {
41
- const field = findFilterFieldType(ctx);
42
- if (field instanceof StringField) {
43
- return {
44
- [Op.and]: {
45
- [Op.not]: null,
46
- [Op.ne]: '',
47
- },
48
- };
49
- }
50
- if (field instanceof ArrayField) {
51
- return arrayOperators.$arrayNotEmpty(_, ctx);
52
- }
53
- return {
54
- [Op.not]: null,
55
- };
56
- },
57
- };
58
- //# sourceMappingURL=empty.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"empty.js","sourceRoot":"","sources":["../../src/operators/empty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,EAAE,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,cAAc,MAAM,SAAS,CAAC;AACrC,OAAO,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAE1C,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,EAAE;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAElB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/B,mBAAmB;IACnB,IAAI,CAAC,GAAG,EAAE,CAAC;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IAEtB,MAAM,eAAe,GAAG,IAAI,CAAC;IAE7B,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE;QACzC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACzE,SAAS;SACV;QAED,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;KAChD;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEjD,OAAO,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,eAAe;IACb,MAAM,CAAC,CAAC,EAAE,GAAG;QACX,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,KAAK,YAAY,WAAW,EAAE;YAChC,OAAO;gBACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBACP,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;oBACb,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;iBACZ;aACF,CAAC;SACH;QAED,IAAI,KAAK,YAAY,UAAU,EAAE;YAC/B,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C;QAED,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,CAAC,EAAE,GAAG;QACd,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,KAAK,YAAY,WAAW,EAAE;YAChC,OAAO;gBACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;oBACR,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI;oBACd,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;iBACZ;aACF,CAAC;SACH;QAED,IAAI,KAAK,YAAY,UAAU,EAAE;YAC/B,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC9C;QAED,OAAO;YACL,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { DataTypes, Op } from 'sequelize';\nimport { ArrayField, StringField } from '../fields';\nimport arrayOperators from './array';\nimport lodash, { parseInt } from 'lodash';\n\nconst findFilterFieldType = (ctx) => {\n const db = ctx.db;\n\n let path = ctx.path.split('.');\n\n // remove operators\n path.pop();\n\n const fieldName = path.pop();\n\n let model = ctx.model;\n\n const associationPath = path;\n\n for (const association of associationPath) {\n if (lodash.isNumber(parseInt(association)) || association.startsWith('$')) {\n continue;\n }\n\n model = model.associations[association].target;\n }\n\n const collection = db.modelCollection.get(model);\n\n return collection.getField(fieldName);\n};\n\nexport default {\n $empty(_, ctx) {\n const field = findFilterFieldType(ctx);\n\n if (field instanceof StringField) {\n return {\n [Op.or]: {\n [Op.is]: null,\n [Op.eq]: '',\n },\n };\n }\n\n if (field instanceof ArrayField) {\n return arrayOperators.$arrayEmpty(_, ctx);\n }\n\n return {\n [Op.is]: null,\n };\n },\n\n $notEmpty(_, ctx) {\n const field = findFilterFieldType(ctx);\n\n if (field instanceof StringField) {\n return {\n [Op.and]: {\n [Op.not]: null,\n [Op.ne]: '',\n },\n };\n }\n\n if (field instanceof ArrayField) {\n return arrayOperators.$arrayNotEmpty(_, ctx);\n }\n\n return {\n [Op.not]: null,\n };\n },\n};\n"]}
@@ -1,2 +0,0 @@
1
- declare const _default: any;
2
- export default _default;
@@ -1,2 +0,0 @@
1
- export default Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, require('./association').default), require('./date').default), require('./array').default), require('./empty').default), require('./string').default), require('./ne').default);
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operators/index.ts"],"names":[],"mappings":"AAAA,uGACK,OAAO,CAAC,eAAe,CAAC,CAAC,OAAO,GAChC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,GACzB,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAC1B,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,GAC1B,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,GAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAC1B","sourcesContent":["export default {\n ...require('./association').default,\n ...require('./date').default,\n ...require('./array').default,\n ...require('./empty').default,\n ...require('./string').default,\n ...require('./ne').default,\n};\n"]}
@@ -1,12 +0,0 @@
1
- import { Op } from 'sequelize';
2
- export default {
3
- $ne(val, ctx) {
4
- return {
5
- [Op.or]: {
6
- [Op.ne]: val,
7
- [Op.is]: null,
8
- },
9
- };
10
- },
11
- };
12
- //# sourceMappingURL=ne.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ne.js","sourceRoot":"","sources":["../../src/operators/ne.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,eAAe;IACb,GAAG,CAAC,GAAG,EAAE,GAAG;QACV,OAAO;YACL,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;gBACP,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;gBACZ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI;aACd;SACF,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { Op } from 'sequelize';\n\nexport default {\n $ne(val, ctx) {\n return {\n [Op.or]: {\n [Op.ne]: val,\n [Op.is]: null,\n },\n };\n },\n};\n"]}
@@ -1,21 +0,0 @@
1
- declare const _default: {
2
- $includes(value: any, ctx: any): {
3
- [x: symbol]: string;
4
- };
5
- $notIncludes(value: any, ctx: any): {
6
- [x: symbol]: string;
7
- };
8
- $startsWith(value: any, ctx: any): {
9
- [x: symbol]: string;
10
- };
11
- $notStartsWith(value: any, ctx: any): {
12
- [x: symbol]: string;
13
- };
14
- $endWith(value: any, ctx: any): {
15
- [x: symbol]: string;
16
- };
17
- $notEndWith(value: any, ctx: any): {
18
- [x: symbol]: string;
19
- };
20
- };
21
- export default _default;
@@ -1,35 +0,0 @@
1
- import { isPg } from './utils';
2
- import { Op } from 'sequelize';
3
- export default {
4
- $includes(value, ctx) {
5
- return {
6
- [isPg(ctx) ? Op.iLike : Op.like]: `%${value}%`,
7
- };
8
- },
9
- $notIncludes(value, ctx) {
10
- return {
11
- [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}%`,
12
- };
13
- },
14
- $startsWith(value, ctx) {
15
- return {
16
- [isPg(ctx) ? Op.iLike : Op.like]: `${value}%`,
17
- };
18
- },
19
- $notStartsWith(value, ctx) {
20
- return {
21
- [isPg(ctx) ? Op.notILike : Op.notLike]: `${value}%`,
22
- };
23
- },
24
- $endWith(value, ctx) {
25
- return {
26
- [isPg(ctx) ? Op.iLike : Op.like]: `%${value}`,
27
- };
28
- },
29
- $notEndWith(value, ctx) {
30
- return {
31
- [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}`,
32
- };
33
- },
34
- };
35
- //# sourceMappingURL=string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/operators/string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAE/B,eAAe;IACb,SAAS,CAAC,KAAK,EAAE,GAAG;QAClB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,GAAG;SAC/C,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAAK,EAAE,GAAG;QACrB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,GAAG;SACrD,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,GAAG;QACpB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG;SAC9C,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,KAAK,EAAE,GAAG;QACvB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG;SACpD,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,KAAK,EAAE,GAAG;QACjB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAK,EAAE,GAAG;QACpB,OAAO;YACL,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,EAAE;SACpD,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["import { isPg } from './utils';\nimport { Op } from 'sequelize';\n\nexport default {\n $includes(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `%${value}%`,\n };\n },\n\n $notIncludes(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}%`,\n };\n },\n\n $startsWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `${value}%`,\n };\n },\n\n $notStartsWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `${value}%`,\n };\n },\n\n $endWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.iLike : Op.like]: `%${value}`,\n };\n },\n\n $notEndWith(value, ctx) {\n return {\n [isPg(ctx) ? Op.notILike : Op.notLike]: `%${value}`,\n };\n },\n};\n"]}
@@ -1,4 +0,0 @@
1
- declare const getDialect: (ctx: any) => any;
2
- declare const isPg: (ctx: any) => boolean;
3
- declare const isMySQL: (ctx: any) => boolean;
4
- export { getDialect, isPg, isMySQL };
@@ -1,11 +0,0 @@
1
- const getDialect = (ctx) => {
2
- return ctx.db.sequelize.getDialect();
3
- };
4
- const isPg = (ctx) => {
5
- return getDialect(ctx) === 'postgres';
6
- };
7
- const isMySQL = (ctx) => {
8
- return getDialect(ctx) === 'mysql';
9
- };
10
- export { getDialect, isPg, isMySQL };
11
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/operators/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,EAAE;IACzB,OAAO,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;IACtB,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC;AACrC,CAAC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC","sourcesContent":["const getDialect = (ctx) => {\n return ctx.db.sequelize.getDialect();\n};\n\nconst isPg = (ctx) => {\n return getDialect(ctx) === 'postgres';\n};\n\nconst isMySQL = (ctx) => {\n return getDialect(ctx) === 'mysql';\n};\n\nexport { getDialect, isPg, isMySQL };\n"]}
@@ -1,31 +0,0 @@
1
- import { ModelCtor } from 'sequelize';
2
- import { Collection } from './collection';
3
- import { Database } from './database';
4
- import FilterParser from './filter-parser';
5
- import { Appends, Except, FindOptions } from './repository';
6
- interface OptionsParserContext {
7
- collection: Collection;
8
- targetKey?: string;
9
- }
10
- export declare class OptionsParser {
11
- options: FindOptions;
12
- database: Database;
13
- collection: Collection;
14
- model: ModelCtor<any>;
15
- filterParser: FilterParser;
16
- context: OptionsParserContext;
17
- constructor(options: FindOptions, context: OptionsParserContext);
18
- isAssociation(key: string): boolean;
19
- isAssociationPath(path: string): boolean;
20
- toSequelizeParams(): any;
21
- /**
22
- * parser sort options
23
- * @param filterParams
24
- * @protected
25
- */
26
- protected parseSort(filterParams: any): any;
27
- protected parseFields(filterParams: any): any;
28
- protected parseExcept(except: Except, filterParams: any): any;
29
- protected parseAppends(appends: Appends, filterParams: any): any;
30
- }
31
- export {};