@stamhoofd/sql 2.119.0 → 2.120.1

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 (272) hide show
  1. package/dist/{src/ModelCache.d.ts → ModelCache.d.ts} +1 -1
  2. package/dist/ModelCache.d.ts.map +1 -0
  3. package/{src/ModelCache.ts → dist/ModelCache.js} +8 -16
  4. package/dist/ModelCache.js.map +1 -0
  5. package/dist/{src/QueryableModel.d.ts → QueryableModel.d.ts} +7 -6
  6. package/dist/QueryableModel.d.ts.map +1 -0
  7. package/dist/{src/QueryableModel.js → QueryableModel.js} +9 -13
  8. package/dist/QueryableModel.js.map +1 -0
  9. package/dist/{src/SQL.d.ts → SQL.d.ts} +7 -5
  10. package/dist/SQL.d.ts.map +1 -0
  11. package/dist/SQL.js +100 -0
  12. package/dist/SQL.js.map +1 -0
  13. package/dist/{src/SQLDelete.d.ts → SQLDelete.d.ts} +2 -2
  14. package/dist/SQLDelete.d.ts.map +1 -0
  15. package/dist/{src/SQLDelete.js → SQLDelete.js} +8 -12
  16. package/dist/SQLDelete.js.map +1 -0
  17. package/dist/SQLExpression.d.ts.map +1 -0
  18. package/dist/{src/SQLExpression.js → SQLExpression.js} +3 -8
  19. package/dist/SQLExpression.js.map +1 -0
  20. package/dist/{src/SQLExpressions.d.ts → SQLExpressions.d.ts} +2 -2
  21. package/dist/SQLExpressions.d.ts.map +1 -0
  22. package/dist/{src/SQLExpressions.js → SQLExpressions.js} +78 -115
  23. package/dist/SQLExpressions.js.map +1 -0
  24. package/dist/{src/SQLInsert.d.ts → SQLInsert.d.ts} +3 -2
  25. package/dist/SQLInsert.d.ts.map +1 -0
  26. package/dist/{src/SQLInsert.js → SQLInsert.js} +17 -21
  27. package/dist/SQLInsert.js.map +1 -0
  28. package/dist/{src/SQLJoin.d.ts → SQLJoin.d.ts} +1 -1
  29. package/dist/SQLJoin.d.ts.map +1 -0
  30. package/{src/SQLJoin.ts → dist/SQLJoin.js} +15 -18
  31. package/dist/SQLJoin.js.map +1 -0
  32. package/dist/{src/SQLJsonExpressions.d.ts → SQLJsonExpressions.d.ts} +2 -2
  33. package/dist/SQLJsonExpressions.d.ts.map +1 -0
  34. package/dist/{src/SQLJsonExpressions.js → SQLJsonExpressions.js} +31 -44
  35. package/dist/SQLJsonExpressions.js.map +1 -0
  36. package/dist/SQLLogger.d.ts.map +1 -0
  37. package/dist/{src/SQLLogger.js → SQLLogger.js} +5 -8
  38. package/dist/SQLLogger.js.map +1 -0
  39. package/dist/{src/SQLOrderBy.d.ts → SQLOrderBy.d.ts} +1 -1
  40. package/dist/SQLOrderBy.d.ts.map +1 -0
  41. package/dist/{src/SQLOrderBy.js → SQLOrderBy.js} +8 -13
  42. package/dist/SQLOrderBy.js.map +1 -0
  43. package/dist/{src/SQLSelect.d.ts → SQLSelect.d.ts} +3 -3
  44. package/dist/SQLSelect.d.ts.map +1 -0
  45. package/dist/{src/SQLSelect.js → SQLSelect.js} +24 -29
  46. package/dist/SQLSelect.js.map +1 -0
  47. package/dist/{src/SQLTranslatedStringHelper.d.ts → SQLTranslatedStringHelper.d.ts} +3 -2
  48. package/dist/SQLTranslatedStringHelper.d.ts.map +1 -0
  49. package/dist/SQLTranslatedStringHelper.js +33 -0
  50. package/dist/SQLTranslatedStringHelper.js.map +1 -0
  51. package/dist/{src/SQLUpdate.d.ts → SQLUpdate.d.ts} +3 -2
  52. package/dist/SQLUpdate.d.ts.map +1 -0
  53. package/{src/SQLUpdate.ts → dist/SQLUpdate.js} +18 -35
  54. package/dist/SQLUpdate.js.map +1 -0
  55. package/dist/{src/SQLWhere.d.ts → SQLWhere.d.ts} +3 -3
  56. package/dist/SQLWhere.d.ts.map +1 -0
  57. package/dist/{src/SQLWhere.js → SQLWhere.js} +42 -56
  58. package/dist/SQLWhere.js.map +1 -0
  59. package/dist/{src/filters → filters}/SQLFilter.d.ts +5 -5
  60. package/dist/filters/SQLFilter.d.ts.map +1 -0
  61. package/{src/filters/SQLFilter.ts → dist/filters/SQLFilter.js} +55 -121
  62. package/dist/filters/SQLFilter.js.map +1 -0
  63. package/dist/{src/filters → filters}/SQLSorter.d.ts +6 -6
  64. package/dist/filters/SQLSorter.d.ts.map +1 -0
  65. package/dist/{src/filters → filters}/SQLSorter.js +4 -7
  66. package/dist/filters/SQLSorter.js.map +1 -0
  67. package/dist/filters/compilers/contains.d.ts +4 -0
  68. package/dist/filters/compilers/contains.d.ts.map +1 -0
  69. package/{src/filters/compilers/contains.ts → dist/filters/compilers/contains.js} +7 -25
  70. package/dist/filters/compilers/contains.js.map +1 -0
  71. package/dist/filters/compilers/equals.d.ts +4 -0
  72. package/dist/filters/compilers/equals.d.ts.map +1 -0
  73. package/dist/filters/compilers/equals.js +44 -0
  74. package/dist/filters/compilers/equals.js.map +1 -0
  75. package/dist/filters/compilers/greater.d.ts +4 -0
  76. package/dist/filters/compilers/greater.d.ts.map +1 -0
  77. package/dist/filters/compilers/greater.js +15 -0
  78. package/dist/filters/compilers/greater.js.map +1 -0
  79. package/dist/filters/compilers/in.d.ts +4 -0
  80. package/dist/filters/compilers/in.d.ts.map +1 -0
  81. package/{src/filters/compilers/in.ts → dist/filters/compilers/in.js} +7 -21
  82. package/dist/filters/compilers/in.js.map +1 -0
  83. package/dist/filters/compilers/index.d.ts.map +1 -0
  84. package/{src/filters/compilers/index.ts → dist/filters/compilers/index.js} +1 -0
  85. package/dist/filters/compilers/index.js.map +1 -0
  86. package/dist/filters/compilers/less.d.ts +4 -0
  87. package/dist/filters/compilers/less.d.ts.map +1 -0
  88. package/dist/filters/compilers/less.js +15 -0
  89. package/dist/filters/compilers/less.js.map +1 -0
  90. package/dist/filters/helpers/isJSONColumn.d.ts +5 -0
  91. package/dist/filters/helpers/isJSONColumn.d.ts.map +1 -0
  92. package/{src/filters/helpers/isJSONColumn.ts → dist/filters/helpers/isJSONColumn.js} +4 -5
  93. package/dist/filters/helpers/isJSONColumn.js.map +1 -0
  94. package/dist/{src/filters → filters}/helpers/normalizeCompareValue.d.ts +1 -1
  95. package/dist/filters/helpers/normalizeCompareValue.d.ts.map +1 -0
  96. package/{src/filters/helpers/normalizeCompareValue.ts → dist/filters/helpers/normalizeCompareValue.js} +2 -20
  97. package/dist/filters/helpers/normalizeCompareValue.js.map +1 -0
  98. package/dist/index.d.ts +14 -14
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +14 -25
  101. package/dist/index.js.map +1 -1
  102. package/package.json +6 -6
  103. package/dist/src/ModelCache.d.ts.map +0 -1
  104. package/dist/src/ModelCache.js +0 -57
  105. package/dist/src/ModelCache.js.map +0 -1
  106. package/dist/src/QueryableModel.d.ts.map +0 -1
  107. package/dist/src/QueryableModel.js.map +0 -1
  108. package/dist/src/SQL.d.ts.map +0 -1
  109. package/dist/src/SQL.js +0 -103
  110. package/dist/src/SQL.js.map +0 -1
  111. package/dist/src/SQLDelete.d.ts.map +0 -1
  112. package/dist/src/SQLDelete.js.map +0 -1
  113. package/dist/src/SQLExpression.d.ts.map +0 -1
  114. package/dist/src/SQLExpression.js.map +0 -1
  115. package/dist/src/SQLExpressions.d.ts.map +0 -1
  116. package/dist/src/SQLExpressions.js.map +0 -1
  117. package/dist/src/SQLInsert.d.ts.map +0 -1
  118. package/dist/src/SQLInsert.js.map +0 -1
  119. package/dist/src/SQLJoin.d.ts.map +0 -1
  120. package/dist/src/SQLJoin.js +0 -61
  121. package/dist/src/SQLJoin.js.map +0 -1
  122. package/dist/src/SQLJsonExpressions.d.ts.map +0 -1
  123. package/dist/src/SQLJsonExpressions.js.map +0 -1
  124. package/dist/src/SQLLogger.d.ts.map +0 -1
  125. package/dist/src/SQLLogger.js.map +0 -1
  126. package/dist/src/SQLOrderBy.d.ts.map +0 -1
  127. package/dist/src/SQLOrderBy.js.map +0 -1
  128. package/dist/src/SQLSelect.d.ts.map +0 -1
  129. package/dist/src/SQLSelect.js.map +0 -1
  130. package/dist/src/SQLTranslatedStringHelper.d.ts.map +0 -1
  131. package/dist/src/SQLTranslatedStringHelper.js +0 -37
  132. package/dist/src/SQLTranslatedStringHelper.js.map +0 -1
  133. package/dist/src/SQLUpdate.d.ts.map +0 -1
  134. package/dist/src/SQLUpdate.js +0 -60
  135. package/dist/src/SQLUpdate.js.map +0 -1
  136. package/dist/src/SQLWhere.d.ts.map +0 -1
  137. package/dist/src/SQLWhere.js.map +0 -1
  138. package/dist/src/filters/SQLFilter.d.ts.map +0 -1
  139. package/dist/src/filters/SQLFilter.js +0 -220
  140. package/dist/src/filters/SQLFilter.js.map +0 -1
  141. package/dist/src/filters/SQLSorter.d.ts.map +0 -1
  142. package/dist/src/filters/SQLSorter.js.map +0 -1
  143. package/dist/src/filters/compilers/contains.d.ts +0 -4
  144. package/dist/src/filters/compilers/contains.d.ts.map +0 -1
  145. package/dist/src/filters/compilers/contains.js +0 -29
  146. package/dist/src/filters/compilers/contains.js.map +0 -1
  147. package/dist/src/filters/compilers/equals.d.ts +0 -4
  148. package/dist/src/filters/compilers/equals.d.ts.map +0 -1
  149. package/dist/src/filters/compilers/equals.js +0 -47
  150. package/dist/src/filters/compilers/equals.js.map +0 -1
  151. package/dist/src/filters/compilers/greater.d.ts +0 -4
  152. package/dist/src/filters/compilers/greater.d.ts.map +0 -1
  153. package/dist/src/filters/compilers/greater.js +0 -18
  154. package/dist/src/filters/compilers/greater.js.map +0 -1
  155. package/dist/src/filters/compilers/in.d.ts +0 -4
  156. package/dist/src/filters/compilers/in.d.ts.map +0 -1
  157. package/dist/src/filters/compilers/in.js +0 -51
  158. package/dist/src/filters/compilers/in.js.map +0 -1
  159. package/dist/src/filters/compilers/index.d.ts.map +0 -1
  160. package/dist/src/filters/compilers/index.js +0 -8
  161. package/dist/src/filters/compilers/index.js.map +0 -1
  162. package/dist/src/filters/compilers/less.d.ts +0 -4
  163. package/dist/src/filters/compilers/less.d.ts.map +0 -1
  164. package/dist/src/filters/compilers/less.js +0 -18
  165. package/dist/src/filters/compilers/less.js.map +0 -1
  166. package/dist/src/filters/helpers/isJSONColumn.d.ts +0 -4
  167. package/dist/src/filters/helpers/isJSONColumn.d.ts.map +0 -1
  168. package/dist/src/filters/helpers/isJSONColumn.js +0 -17
  169. package/dist/src/filters/helpers/isJSONColumn.js.map +0 -1
  170. package/dist/src/filters/helpers/normalizeCompareValue.d.ts.map +0 -1
  171. package/dist/src/filters/helpers/normalizeCompareValue.js +0 -87
  172. package/dist/src/filters/helpers/normalizeCompareValue.js.map +0 -1
  173. package/dist/tests/filters/$and.test.d.ts +0 -2
  174. package/dist/tests/filters/$and.test.d.ts.map +0 -1
  175. package/dist/tests/filters/$and.test.js +0 -216
  176. package/dist/tests/filters/$and.test.js.map +0 -1
  177. package/dist/tests/filters/$contains.test.d.ts +0 -2
  178. package/dist/tests/filters/$contains.test.d.ts.map +0 -1
  179. package/dist/tests/filters/$contains.test.js +0 -917
  180. package/dist/tests/filters/$contains.test.js.map +0 -1
  181. package/dist/tests/filters/$eq.test.d.ts +0 -2
  182. package/dist/tests/filters/$eq.test.d.ts.map +0 -1
  183. package/dist/tests/filters/$eq.test.js +0 -1464
  184. package/dist/tests/filters/$eq.test.js.map +0 -1
  185. package/dist/tests/filters/$gt.test.d.ts +0 -2
  186. package/dist/tests/filters/$gt.test.d.ts.map +0 -1
  187. package/dist/tests/filters/$gt.test.js +0 -641
  188. package/dist/tests/filters/$gt.test.js.map +0 -1
  189. package/dist/tests/filters/$gte.test.d.ts +0 -2
  190. package/dist/tests/filters/$gte.test.d.ts.map +0 -1
  191. package/dist/tests/filters/$gte.test.js +0 -433
  192. package/dist/tests/filters/$gte.test.js.map +0 -1
  193. package/dist/tests/filters/$in.test.d.ts +0 -2
  194. package/dist/tests/filters/$in.test.d.ts.map +0 -1
  195. package/dist/tests/filters/$in.test.js +0 -773
  196. package/dist/tests/filters/$in.test.js.map +0 -1
  197. package/dist/tests/filters/$lt.test.d.ts +0 -2
  198. package/dist/tests/filters/$lt.test.d.ts.map +0 -1
  199. package/dist/tests/filters/$lt.test.js +0 -433
  200. package/dist/tests/filters/$lt.test.js.map +0 -1
  201. package/dist/tests/filters/$lte.test.d.ts +0 -2
  202. package/dist/tests/filters/$lte.test.d.ts.map +0 -1
  203. package/dist/tests/filters/$lte.test.js +0 -472
  204. package/dist/tests/filters/$lte.test.js.map +0 -1
  205. package/dist/tests/filters/$neq.test.d.ts +0 -2
  206. package/dist/tests/filters/$neq.test.d.ts.map +0 -1
  207. package/dist/tests/filters/$neq.test.js +0 -32
  208. package/dist/tests/filters/$neq.test.js.map +0 -1
  209. package/dist/tests/filters/$not.test.d.ts +0 -2
  210. package/dist/tests/filters/$not.test.d.ts.map +0 -1
  211. package/dist/tests/filters/$not.test.js +0 -50
  212. package/dist/tests/filters/$not.test.js.map +0 -1
  213. package/dist/tests/filters/$or.test.d.ts +0 -2
  214. package/dist/tests/filters/$or.test.d.ts.map +0 -1
  215. package/dist/tests/filters/$or.test.js +0 -185
  216. package/dist/tests/filters/$or.test.js.map +0 -1
  217. package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts +0 -2
  218. package/dist/tests/filters/SQLTranslatedStringHelper.test.d.ts.map +0 -1
  219. package/dist/tests/filters/SQLTranslatedStringHelper.test.js +0 -491
  220. package/dist/tests/filters/SQLTranslatedStringHelper.test.js.map +0 -1
  221. package/dist/tests/filters/dot-syntax.test.d.ts +0 -2
  222. package/dist/tests/filters/dot-syntax.test.d.ts.map +0 -1
  223. package/dist/tests/filters/dot-syntax.test.js +0 -210
  224. package/dist/tests/filters/dot-syntax.test.js.map +0 -1
  225. package/dist/tests/filters/exists.test.d.ts +0 -2
  226. package/dist/tests/filters/exists.test.d.ts.map +0 -1
  227. package/dist/tests/filters/exists.test.js +0 -96
  228. package/dist/tests/filters/exists.test.js.map +0 -1
  229. package/dist/tests/filters/joined-relations.test.d.ts +0 -2
  230. package/dist/tests/filters/joined-relations.test.d.ts.map +0 -1
  231. package/dist/tests/filters/joined-relations.test.js +0 -167
  232. package/dist/tests/filters/joined-relations.test.js.map +0 -1
  233. package/dist/tests/filters/special-cases.test.d.ts +0 -2
  234. package/dist/tests/filters/special-cases.test.d.ts.map +0 -1
  235. package/dist/tests/filters/special-cases.test.js +0 -114
  236. package/dist/tests/filters/special-cases.test.js.map +0 -1
  237. package/dist/tests/filters/wildcard.test.d.ts +0 -2
  238. package/dist/tests/filters/wildcard.test.d.ts.map +0 -1
  239. package/dist/tests/filters/wildcard.test.js +0 -67
  240. package/dist/tests/filters/wildcard.test.js.map +0 -1
  241. package/dist/tests/jest.global.setup.d.ts +0 -3
  242. package/dist/tests/jest.global.setup.d.ts.map +0 -1
  243. package/dist/tests/jest.global.setup.js +0 -7
  244. package/dist/tests/jest.global.setup.js.map +0 -1
  245. package/dist/tests/jest.setup.d.ts +0 -2
  246. package/dist/tests/jest.setup.d.ts.map +0 -1
  247. package/dist/tests/jest.setup.js +0 -5
  248. package/dist/tests/jest.setup.js.map +0 -1
  249. package/dist/tests/utils/index.d.ts +0 -57
  250. package/dist/tests/utils/index.d.ts.map +0 -1
  251. package/dist/tests/utils/index.js +0 -206
  252. package/dist/tests/utils/index.js.map +0 -1
  253. package/dist/tsconfig.tsbuildinfo +0 -1
  254. package/src/QueryableModel.ts +0 -134
  255. package/src/SQL.ts +0 -128
  256. package/src/SQLDelete.ts +0 -73
  257. package/src/SQLExpression.ts +0 -34
  258. package/src/SQLExpressions.ts +0 -587
  259. package/src/SQLInsert.ts +0 -113
  260. package/src/SQLJsonExpressions.ts +0 -283
  261. package/src/SQLLogger.ts +0 -82
  262. package/src/SQLOrderBy.ts +0 -69
  263. package/src/SQLSelect.ts +0 -520
  264. package/src/SQLTranslatedStringHelper.ts +0 -40
  265. package/src/SQLWhere.ts +0 -744
  266. package/src/filters/SQLSorter.ts +0 -60
  267. package/src/filters/compilers/equals.ts +0 -73
  268. package/src/filters/compilers/greater.ts +0 -21
  269. package/src/filters/compilers/less.ts +0 -20
  270. /package/dist/{src/SQLExpression.d.ts → SQLExpression.d.ts} +0 -0
  271. /package/dist/{src/SQLLogger.d.ts → SQLLogger.d.ts} +0 -0
  272. /package/dist/{src/filters → filters}/compilers/index.d.ts +0 -0
@@ -1,185 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const SQLFilter_js_1 = require("../../src/filters/SQLFilter.js");
4
- const SQL_js_1 = require("../../src/SQL.js");
5
- const index_js_1 = require("../utils/index.js");
6
- describe('$or', () => {
7
- /**
8
- * Tests that should be repeated for all filter types
9
- */
10
- describe('Common checks', () => {
11
- // todo
12
- });
13
- it('If one child is always true, the whole $or is always true', async () => {
14
- const filters = {
15
- ...SQLFilter_js_1.baseSQLFilterCompilers,
16
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
17
- };
18
- await (0, index_js_1.test)({
19
- filter: {
20
- name: {
21
- $or: {
22
- $eq: 'John Doe',
23
- $gte: null, // This will always be true
24
- },
25
- },
26
- },
27
- filters,
28
- query: {
29
- query: 'true',
30
- params: [],
31
- },
32
- });
33
- });
34
- it('An empty $or is always false', async () => {
35
- const filters = {
36
- ...SQLFilter_js_1.baseSQLFilterCompilers,
37
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
38
- };
39
- await (0, index_js_1.test)({
40
- filter: {
41
- $or: {},
42
- },
43
- filters,
44
- query: {
45
- query: '',
46
- params: [],
47
- },
48
- });
49
- });
50
- it('If all children are always false, the whole $or is always false', async () => {
51
- const filters = {
52
- ...SQLFilter_js_1.baseSQLFilterCompilers,
53
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: true }),
54
- };
55
- await (0, index_js_1.test)({
56
- filter: {
57
- name: {
58
- $or: [
59
- {
60
- $lt: null, // This will always be false
61
- },
62
- {
63
- $in: [],
64
- },
65
- ],
66
- },
67
- },
68
- filters,
69
- query: {
70
- query: '',
71
- params: [],
72
- },
73
- });
74
- });
75
- it('Children that are always false are removed from the $or', async () => {
76
- const filters = {
77
- ...SQLFilter_js_1.baseSQLFilterCompilers,
78
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
79
- };
80
- await (0, index_js_1.test)({
81
- filter: {
82
- name: {
83
- $or: [
84
- { $eq: 'John Doe' },
85
- { $lt: null },
86
- { $in: [] },
87
- { $neq: 'test' },
88
- ],
89
- },
90
- },
91
- filters,
92
- query: {
93
- query: '`default`.`name` = ? OR `default`.`name` != ?',
94
- params: ['john doe', 'test'],
95
- },
96
- });
97
- });
98
- it('$or object children are $and together', async () => {
99
- const filters = {
100
- ...SQLFilter_js_1.baseSQLFilterCompilers,
101
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
102
- age: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('age'), type: SQLFilter_js_1.SQLValueType.Number, nullable: false }),
103
- };
104
- await (0, index_js_1.test)({
105
- filter: [
106
- {
107
- $or: [
108
- {
109
- name: 'John Doe',
110
- age: 11,
111
- },
112
- {
113
- name: 'Jane Doe',
114
- age: 12,
115
- },
116
- ],
117
- },
118
- ],
119
- filters,
120
- query: {
121
- query: '(`default`.`name` = ? AND `default`.`age` = ?) OR (`default`.`name` = ? AND `default`.`age` = ?)',
122
- params: [
123
- 'john doe',
124
- 11,
125
- 'jane doe',
126
- 12,
127
- ],
128
- },
129
- });
130
- });
131
- it('empty $or branches are removed', async () => {
132
- const filters = {
133
- ...SQLFilter_js_1.baseSQLFilterCompilers,
134
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
135
- };
136
- await (0, index_js_1.test)({
137
- filter: {
138
- name: 'John Doe',
139
- $or: [
140
- {
141
- $or: [],
142
- },
143
- {
144
- $not: {
145
- $or: [],
146
- },
147
- },
148
- ],
149
- },
150
- filters,
151
- query: {
152
- query: '`default`.`name` = ?',
153
- params: ['john doe'],
154
- },
155
- });
156
- });
157
- it('deep $or branches are cleaned up', async () => {
158
- const filters = {
159
- ...SQLFilter_js_1.baseSQLFilterCompilers,
160
- name: (0, SQLFilter_js_1.createColumnFilter)({ expression: SQL_js_1.SQL.column('name'), type: SQLFilter_js_1.SQLValueType.String, nullable: false }),
161
- };
162
- await (0, index_js_1.test)({
163
- filter: {
164
- $or: {
165
- name: 'John Doe',
166
- $or: [
167
- {
168
- $or: [
169
- {
170
- name: 'Jane Doe',
171
- },
172
- ],
173
- },
174
- ],
175
- },
176
- },
177
- filters,
178
- query: {
179
- query: '`default`.`name` = ? OR `default`.`name` = ?',
180
- params: ['john doe', 'jane doe'],
181
- },
182
- });
183
- });
184
- });
185
- //# sourceMappingURL=$or.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"$or.test.js","sourceRoot":"","sources":["../../../tests/filters/$or.test.ts"],"names":[],"mappings":";;AAAA,iEAA0G;AAC1G,6CAAuC;AACvC,gDAAyC;AAEzC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACjB;;OAEG;IACH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC3B,OAAO;IACX,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC1G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,GAAG,EAAE;wBACD,GAAG,EAAE,UAAU;wBACf,IAAI,EAAE,IAAI,EAAE,2BAA2B;qBAC1C;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,EAAE;aACb;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC1G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,GAAG,EAAE,EAAE;aACV;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;aACb;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC1G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,GAAG,EAAE;wBACD;4BACI,GAAG,EAAE,IAAI,EAAE,4BAA4B;yBAC1C;wBACD;4BACI,GAAG,EAAE,EAAE;yBACV;qBACJ;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;aACb;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC3G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,IAAI,EAAE;oBACF,GAAG,EAAE;wBACD,EAAE,GAAG,EAAE,UAAU,EAAE;wBACnB,EAAE,GAAG,EAAE,IAAI,EAAE;wBACb,EAAE,GAAG,EAAE,EAAE,EAAE;wBACX,EAAE,IAAI,EAAE,MAAM,EAAE;qBACnB;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,+CAA+C;gBACtD,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;aAC/B;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACxG,GAAG,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SACzG,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ;oBACI,GAAG,EAAE;wBACD;4BACI,IAAI,EAAE,UAAU;4BAChB,GAAG,EAAE,EAAE;yBACV;wBACD;4BACI,IAAI,EAAE,UAAU;4BAChB,GAAG,EAAE,EAAE;yBACV;qBACJ;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,kGAAkG;gBACzG,MAAM,EAAE;oBACJ,UAAU;oBACV,EAAE;oBACF,UAAU;oBACV,EAAE;iBACL;aACJ;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC3G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE;oBACD;wBACI,GAAG,EAAE,EAAE;qBACV;oBACD;wBACI,IAAI,EAAE;4BACF,GAAG,EAAE,EAAE;yBACV;qBACJ;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,CAAC,UAAU,CAAC;aACvB;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG;YACZ,GAAG,qCAAsB;YACzB,IAAI,EAAE,IAAA,iCAAkB,EAAC,EAAE,UAAU,EAAE,YAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,2BAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;SAC3G,CAAC;QAEF,MAAM,IAAA,eAAI,EAAC;YACP,MAAM,EAAE;gBACJ,GAAG,EAAE;oBACD,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE;wBACD;4BACI,GAAG,EAAE;gCACD;oCACI,IAAI,EAAE,UAAU;iCACnB;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;YACD,OAAO;YACP,KAAK,EAAE;gBACH,KAAK,EAAE,8CAA8C;gBACrD,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;aACnC;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SQLTranslatedStringHelper.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SQLTranslatedStringHelper.test.d.ts","sourceRoot":"","sources":["../../../tests/filters/SQLTranslatedStringHelper.test.ts"],"names":[],"mappings":""}
@@ -1,491 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const structures_1 = require("@stamhoofd/structures");
4
- const SQLFilter_js_1 = require("../../src/filters/SQLFilter.js");
5
- const SQL_js_1 = require("../../src/SQL.js");
6
- const SQLTranslatedStringHelper_js_1 = require("../../src/SQLTranslatedStringHelper.js");
7
- const index_js_1 = require("../utils/index.js");
8
- describe('SQLTranslatedStringHelper', () => {
9
- describe('MySQL behaviour', () => {
10
- const tableDefinition = {
11
- settings: {
12
- type: 'json',
13
- nullable: true,
14
- },
15
- };
16
- const filters = {
17
- ...SQLFilter_js_1.baseSQLFilterCompilers,
18
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
19
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.Dutch),
20
- type: SQLFilter_js_1.SQLValueType.String,
21
- nullable: true,
22
- }),
23
- };
24
- it('Comparing string values is case insensitive', async () => {
25
- const rows = [
26
- {
27
- settings: {
28
- name: { nl: 'alice', en: 'alice', fr: 'alice' },
29
- },
30
- },
31
- {
32
- settings: {
33
- name: { nl: 'Alice', en: 'Alice', fr: 'Alice' },
34
- },
35
- },
36
- {
37
- settings: {
38
- name: { nl: 'ALICE', en: 'ALICE', fr: 'ALICE' },
39
- },
40
- },
41
- ];
42
- await (0, index_js_1.testMatch)({
43
- tableDefinition,
44
- filters,
45
- rows,
46
- doMatch: [
47
- {
48
- 'settings:name': 'alice',
49
- },
50
- {
51
- 'settings:name': 'Alice',
52
- },
53
- {
54
- 'settings:name': 'ALICE',
55
- },
56
- {
57
- 'settings:name': 'alICe',
58
- },
59
- ],
60
- doNotMatch: [
61
- {
62
- 'settings:name': 'b',
63
- },
64
- {
65
- 'settings:name': 'alic',
66
- },
67
- ],
68
- });
69
- });
70
- it('Filter matches both string and TranslatedString value', async () => {
71
- const rows = [
72
- {
73
- settings: {
74
- name: { nl: 'alice', en: 'alice', fr: 'alice' },
75
- },
76
- },
77
- {
78
- settings: {
79
- name: 'alice',
80
- },
81
- },
82
- {
83
- settings: {
84
- name: 'ALICE',
85
- },
86
- },
87
- {
88
- settings: {
89
- name: 'aliCE',
90
- },
91
- },
92
- ];
93
- await (0, index_js_1.testMatch)({
94
- tableDefinition,
95
- filters,
96
- rows,
97
- doMatch: [
98
- {
99
- 'settings:name': 'alice',
100
- },
101
- {
102
- 'settings:name': 'Alice',
103
- },
104
- {
105
- 'settings:name': 'ALICE',
106
- },
107
- {
108
- 'settings:name': 'alICe',
109
- },
110
- ],
111
- doNotMatch: [
112
- {
113
- 'settings:name': 'b',
114
- },
115
- {
116
- 'settings:name': 'alic',
117
- },
118
- ],
119
- });
120
- });
121
- it('Filter on gt, gte, lt and lte works', async () => {
122
- const filters = {
123
- ...SQLFilter_js_1.baseSQLFilterCompilers,
124
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
125
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.Dutch),
126
- type: SQLFilter_js_1.SQLValueType.String,
127
- nullable: true,
128
- }),
129
- };
130
- const rows = [
131
- {
132
- settings: {
133
- name: { nl: 'test b', en: 'test c', fr: 'test a' },
134
- },
135
- },
136
- {
137
- settings: {
138
- name: 'test b',
139
- },
140
- },
141
- ];
142
- await (0, index_js_1.testMatch)({
143
- tableDefinition,
144
- filters,
145
- rows,
146
- doMatch: [
147
- {
148
- 'settings:name': {
149
- $lt: 'test c',
150
- },
151
- },
152
- {
153
- 'settings:name': {
154
- $gt: 'test a',
155
- },
156
- },
157
- {
158
- 'settings:name': {
159
- $gte: 'test b',
160
- },
161
- },
162
- {
163
- 'settings:name': {
164
- $lte: 'test b',
165
- },
166
- },
167
- ],
168
- doNotMatch: [
169
- {
170
- 'settings:name': {
171
- $gt: 'test b',
172
- },
173
- },
174
- {
175
- 'settings:name': {
176
- $gt: 'test c',
177
- },
178
- },
179
- {
180
- 'settings:name': {
181
- $gte: 'test c',
182
- },
183
- },
184
- {
185
- 'settings:name': {
186
- $lt: 'test b',
187
- },
188
- },
189
- {
190
- 'settings:name': {
191
- $lt: 'test b',
192
- },
193
- },
194
- {
195
- 'settings:name': {
196
- $lt: 'test a',
197
- },
198
- },
199
- {
200
- 'settings:name': {
201
- $lte: 'test a',
202
- },
203
- },
204
- ],
205
- });
206
- });
207
- });
208
- describe('Different languages should select the correct value for comparison', () => {
209
- const tableDefinition = {
210
- settings: {
211
- type: 'json',
212
- nullable: true,
213
- },
214
- };
215
- it('NL', async () => {
216
- const filters = {
217
- ...SQLFilter_js_1.baseSQLFilterCompilers,
218
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
219
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.Dutch),
220
- type: SQLFilter_js_1.SQLValueType.String,
221
- nullable: true,
222
- }),
223
- };
224
- const rows = [
225
- {
226
- settings: {
227
- name: { nl: 'juist', en: 'fout', fr: 'fout' },
228
- },
229
- },
230
- {
231
- settings: {
232
- name: 'juist',
233
- },
234
- },
235
- ];
236
- await (0, index_js_1.testMatch)({
237
- tableDefinition,
238
- filters,
239
- rows,
240
- doMatch: [
241
- {
242
- 'settings:name': 'juist',
243
- },
244
- ],
245
- doNotMatch: [
246
- {
247
- 'settings:name': 'fout',
248
- },
249
- ],
250
- });
251
- });
252
- it('EN', async () => {
253
- const filters = {
254
- ...SQLFilter_js_1.baseSQLFilterCompilers,
255
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
256
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.English),
257
- type: SQLFilter_js_1.SQLValueType.String,
258
- nullable: true,
259
- }),
260
- };
261
- const rows = [
262
- {
263
- settings: {
264
- name: { nl: 'fout', en: 'juist', fr: 'fout' },
265
- },
266
- },
267
- {
268
- settings: {
269
- name: 'juist',
270
- },
271
- },
272
- ];
273
- await (0, index_js_1.testMatch)({
274
- tableDefinition,
275
- filters,
276
- rows,
277
- doMatch: [
278
- {
279
- 'settings:name': 'juist',
280
- },
281
- ],
282
- doNotMatch: [
283
- {
284
- 'settings:name': 'fout',
285
- },
286
- ],
287
- });
288
- });
289
- it('FR', async () => {
290
- const filters = {
291
- ...SQLFilter_js_1.baseSQLFilterCompilers,
292
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
293
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.French),
294
- type: SQLFilter_js_1.SQLValueType.String,
295
- nullable: true,
296
- }),
297
- };
298
- const rows = [
299
- {
300
- settings: {
301
- name: { nl: 'fout', en: 'fout', fr: 'juist' },
302
- },
303
- },
304
- {
305
- settings: {
306
- name: 'juist',
307
- },
308
- },
309
- ];
310
- await (0, index_js_1.testMatch)({
311
- tableDefinition,
312
- filters,
313
- rows,
314
- doMatch: [
315
- {
316
- 'settings:name': 'juist',
317
- },
318
- ],
319
- doNotMatch: [
320
- {
321
- 'settings:name': 'fout',
322
- },
323
- ],
324
- });
325
- });
326
- });
327
- describe('Missing language value should select the next language value in order for comparison', () => {
328
- const tableDefinition = {
329
- settings: {
330
- type: 'json',
331
- nullable: true,
332
- },
333
- };
334
- it('NL', async () => {
335
- const filters = {
336
- ...SQLFilter_js_1.baseSQLFilterCompilers,
337
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
338
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.Dutch),
339
- type: SQLFilter_js_1.SQLValueType.String,
340
- nullable: true,
341
- }),
342
- };
343
- const rows = [
344
- // first match english
345
- {
346
- settings: {
347
- name: { en: 'juist', fr: 'fout' },
348
- },
349
- },
350
- // next match french
351
- {
352
- settings: {
353
- name: { fr: 'juist' },
354
- },
355
- },
356
- ];
357
- await (0, index_js_1.testMatch)({
358
- tableDefinition,
359
- filters,
360
- rows,
361
- doMatch: [
362
- {
363
- 'settings:name': 'juist',
364
- },
365
- ],
366
- doNotMatch: [
367
- {
368
- 'settings:name': 'fout',
369
- },
370
- ],
371
- });
372
- });
373
- it('EN', async () => {
374
- const filters = {
375
- ...SQLFilter_js_1.baseSQLFilterCompilers,
376
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
377
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.English),
378
- type: SQLFilter_js_1.SQLValueType.String,
379
- nullable: true,
380
- }),
381
- };
382
- const rows = [
383
- // first match dutch
384
- {
385
- settings: {
386
- name: { fr: 'fout', nl: 'juist' },
387
- },
388
- },
389
- // next match french
390
- {
391
- settings: {
392
- name: { fr: 'juist' },
393
- },
394
- },
395
- ];
396
- await (0, index_js_1.testMatch)({
397
- tableDefinition,
398
- filters,
399
- rows,
400
- doMatch: [
401
- {
402
- 'settings:name': 'juist',
403
- },
404
- ],
405
- doNotMatch: [
406
- {
407
- 'settings:name': 'fout',
408
- },
409
- ],
410
- });
411
- });
412
- it('FR', async () => {
413
- const filters = {
414
- ...SQLFilter_js_1.baseSQLFilterCompilers,
415
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
416
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.French),
417
- type: SQLFilter_js_1.SQLValueType.String,
418
- nullable: true,
419
- }),
420
- };
421
- const rows = [
422
- // first match english
423
- {
424
- settings: {
425
- name: { nl: 'fout', en: 'juist' },
426
- },
427
- },
428
- // next match dutch
429
- {
430
- settings: {
431
- name: { nl: 'juist' },
432
- },
433
- },
434
- ];
435
- await (0, index_js_1.testMatch)({
436
- tableDefinition,
437
- filters,
438
- rows,
439
- doMatch: [
440
- {
441
- 'settings:name': 'juist',
442
- },
443
- ],
444
- doNotMatch: [
445
- {
446
- 'settings:name': 'fout',
447
- },
448
- ],
449
- });
450
- });
451
- });
452
- it('Empty json value should not match filter', async () => {
453
- const tableDefinition = {
454
- settings: {
455
- type: 'json',
456
- nullable: true,
457
- },
458
- };
459
- const filters = {
460
- ...SQLFilter_js_1.baseSQLFilterCompilers,
461
- 'settings:name': (0, SQLFilter_js_1.createColumnFilter)({
462
- expression: new SQLTranslatedStringHelper_js_1.SQLTranslatedStringHelper(SQL_js_1.SQL.column('settings'), '$.name', () => structures_1.Language.Dutch),
463
- type: SQLFilter_js_1.SQLValueType.String,
464
- nullable: true,
465
- }),
466
- };
467
- const rows = [
468
- // json value
469
- {
470
- settings: {
471
- name: {},
472
- },
473
- },
474
- ];
475
- await (0, index_js_1.testMatch)({
476
- tableDefinition,
477
- filters,
478
- rows,
479
- doMatch: [],
480
- doNotMatch: [
481
- {
482
- 'settings:name': '',
483
- },
484
- {
485
- 'settings:name': 'test',
486
- },
487
- ],
488
- });
489
- });
490
- });
491
- //# sourceMappingURL=SQLTranslatedStringHelper.test.js.map