@tablecraft/engine 0.1.0-beta.1 → 0.1.0-beta.2

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 (307) hide show
  1. package/README.md +78 -0
  2. package/dist/core/aggregationBuilder.d.ts.map +1 -0
  3. package/dist/core/aggregationBuilder.js.map +1 -0
  4. package/dist/core/cursorPagination.d.ts.map +1 -0
  5. package/dist/core/cursorPagination.js.map +1 -0
  6. package/dist/core/datePresets.d.ts.map +1 -0
  7. package/dist/core/datePresets.js.map +1 -0
  8. package/dist/core/dialect.d.ts.map +1 -0
  9. package/dist/core/dialect.js.map +1 -0
  10. package/dist/core/fieldSelector.d.ts.map +1 -0
  11. package/dist/core/fieldSelector.js.map +1 -0
  12. package/dist/core/filterBuilder.d.ts.map +1 -0
  13. package/dist/core/filterBuilder.js.map +1 -0
  14. package/dist/core/filterGroupBuilder.d.ts.map +1 -0
  15. package/dist/core/filterGroupBuilder.js.map +1 -0
  16. package/dist/core/groupByBuilder.d.ts.map +1 -0
  17. package/dist/core/groupByBuilder.js.map +1 -0
  18. package/dist/core/inputValidator.d.ts.map +1 -0
  19. package/dist/core/inputValidator.js.map +1 -0
  20. package/dist/core/metadataBuilder.d.ts.map +1 -0
  21. package/dist/core/metadataBuilder.js.map +1 -0
  22. package/dist/core/paginationBuilder.d.ts.map +1 -0
  23. package/dist/core/paginationBuilder.js.map +1 -0
  24. package/dist/core/queryBuilder.d.ts.map +1 -0
  25. package/dist/core/queryBuilder.js.map +1 -0
  26. package/dist/core/recursiveBuilder.d.ts.map +1 -0
  27. package/dist/core/recursiveBuilder.js.map +1 -0
  28. package/dist/core/relationBuilder.d.ts.map +1 -0
  29. package/dist/core/relationBuilder.js.map +1 -0
  30. package/dist/core/roleFilter.d.ts.map +1 -0
  31. package/dist/core/roleFilter.js.map +1 -0
  32. package/dist/core/searchBuilder.d.ts.map +1 -0
  33. package/dist/core/searchBuilder.js.map +1 -0
  34. package/dist/core/softDelete.d.ts.map +1 -0
  35. package/dist/core/softDelete.js.map +1 -0
  36. package/dist/core/sortBuilder.d.ts.map +1 -0
  37. package/dist/core/sortBuilder.js.map +1 -0
  38. package/dist/core/subqueryBuilder.d.ts.map +1 -0
  39. package/dist/core/subqueryBuilder.js.map +1 -0
  40. package/dist/core/validator.d.ts.map +1 -0
  41. package/dist/core/validator.js.map +1 -0
  42. package/dist/define.d.ts.map +1 -0
  43. package/dist/define.js.map +1 -0
  44. package/dist/engine.d.ts.map +1 -0
  45. package/dist/engine.js.map +1 -0
  46. package/dist/errors.d.ts.map +1 -0
  47. package/dist/errors.js.map +1 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/types/engine.d.ts.map +1 -0
  51. package/dist/{src/types → types}/engine.js.map +1 -1
  52. package/dist/types/table.d.ts.map +1 -0
  53. package/dist/types/table.js.map +1 -0
  54. package/dist/utils/adapterUtils.d.ts.map +1 -0
  55. package/dist/utils/adapterUtils.js.map +1 -0
  56. package/dist/utils/codegen.d.ts.map +1 -0
  57. package/dist/utils/codegen.js.map +1 -0
  58. package/dist/utils/export.d.ts.map +1 -0
  59. package/dist/utils/export.js.map +1 -0
  60. package/dist/utils/introspect.d.ts.map +1 -0
  61. package/dist/utils/introspect.js.map +1 -0
  62. package/dist/utils/openapi.d.ts.map +1 -0
  63. package/dist/utils/openapi.js.map +1 -0
  64. package/dist/utils/operators.d.ts.map +1 -0
  65. package/dist/utils/operators.js.map +1 -0
  66. package/dist/utils/requestParser.d.ts.map +1 -0
  67. package/dist/utils/requestParser.js.map +1 -0
  68. package/dist/utils/responseFormatter.d.ts.map +1 -0
  69. package/dist/utils/responseFormatter.js.map +1 -0
  70. package/dist/utils/typedSql.d.ts.map +1 -0
  71. package/dist/utils/typedSql.js.map +1 -0
  72. package/package.json +8 -7
  73. package/dist/src/__tests__/inputValidator.test.d.ts +0 -2
  74. package/dist/src/__tests__/inputValidator.test.d.ts.map +0 -1
  75. package/dist/src/__tests__/inputValidator.test.js +0 -205
  76. package/dist/src/__tests__/inputValidator.test.js.map +0 -1
  77. package/dist/src/__tests__/metadataBuilder.test.d.ts +0 -2
  78. package/dist/src/__tests__/metadataBuilder.test.d.ts.map +0 -1
  79. package/dist/src/__tests__/metadataBuilder.test.js +0 -221
  80. package/dist/src/__tests__/metadataBuilder.test.js.map +0 -1
  81. package/dist/src/core/aggregationBuilder.d.ts.map +0 -1
  82. package/dist/src/core/aggregationBuilder.js.map +0 -1
  83. package/dist/src/core/cursorPagination.d.ts.map +0 -1
  84. package/dist/src/core/cursorPagination.js.map +0 -1
  85. package/dist/src/core/datePresets.d.ts.map +0 -1
  86. package/dist/src/core/datePresets.js.map +0 -1
  87. package/dist/src/core/dialect.d.ts.map +0 -1
  88. package/dist/src/core/dialect.js.map +0 -1
  89. package/dist/src/core/fieldSelector.d.ts.map +0 -1
  90. package/dist/src/core/fieldSelector.js.map +0 -1
  91. package/dist/src/core/filterBuilder.d.ts.map +0 -1
  92. package/dist/src/core/filterBuilder.js.map +0 -1
  93. package/dist/src/core/filterGroupBuilder.d.ts.map +0 -1
  94. package/dist/src/core/filterGroupBuilder.js.map +0 -1
  95. package/dist/src/core/groupByBuilder.d.ts.map +0 -1
  96. package/dist/src/core/groupByBuilder.js.map +0 -1
  97. package/dist/src/core/inputValidator.d.ts.map +0 -1
  98. package/dist/src/core/inputValidator.js.map +0 -1
  99. package/dist/src/core/metadataBuilder.d.ts.map +0 -1
  100. package/dist/src/core/metadataBuilder.js.map +0 -1
  101. package/dist/src/core/paginationBuilder.d.ts.map +0 -1
  102. package/dist/src/core/paginationBuilder.js.map +0 -1
  103. package/dist/src/core/queryBuilder.d.ts.map +0 -1
  104. package/dist/src/core/queryBuilder.js.map +0 -1
  105. package/dist/src/core/recursiveBuilder.d.ts.map +0 -1
  106. package/dist/src/core/recursiveBuilder.js.map +0 -1
  107. package/dist/src/core/relationBuilder.d.ts.map +0 -1
  108. package/dist/src/core/relationBuilder.js.map +0 -1
  109. package/dist/src/core/roleFilter.d.ts.map +0 -1
  110. package/dist/src/core/roleFilter.js.map +0 -1
  111. package/dist/src/core/searchBuilder.d.ts.map +0 -1
  112. package/dist/src/core/searchBuilder.js.map +0 -1
  113. package/dist/src/core/softDelete.d.ts.map +0 -1
  114. package/dist/src/core/softDelete.js.map +0 -1
  115. package/dist/src/core/sortBuilder.d.ts.map +0 -1
  116. package/dist/src/core/sortBuilder.js.map +0 -1
  117. package/dist/src/core/subqueryBuilder.d.ts.map +0 -1
  118. package/dist/src/core/subqueryBuilder.js.map +0 -1
  119. package/dist/src/core/validator.d.ts.map +0 -1
  120. package/dist/src/core/validator.js.map +0 -1
  121. package/dist/src/define.d.ts.map +0 -1
  122. package/dist/src/define.js.map +0 -1
  123. package/dist/src/engine.d.ts.map +0 -1
  124. package/dist/src/engine.js.map +0 -1
  125. package/dist/src/errors.d.ts.map +0 -1
  126. package/dist/src/errors.js.map +0 -1
  127. package/dist/src/index.d.ts.map +0 -1
  128. package/dist/src/index.js.map +0 -1
  129. package/dist/src/types/engine.d.ts.map +0 -1
  130. package/dist/src/types/table.d.ts.map +0 -1
  131. package/dist/src/types/table.js.map +0 -1
  132. package/dist/src/utils/adapterUtils.d.ts.map +0 -1
  133. package/dist/src/utils/adapterUtils.js.map +0 -1
  134. package/dist/src/utils/codegen.d.ts.map +0 -1
  135. package/dist/src/utils/codegen.js.map +0 -1
  136. package/dist/src/utils/export.d.ts.map +0 -1
  137. package/dist/src/utils/export.js.map +0 -1
  138. package/dist/src/utils/introspect.d.ts.map +0 -1
  139. package/dist/src/utils/introspect.js.map +0 -1
  140. package/dist/src/utils/openapi.d.ts.map +0 -1
  141. package/dist/src/utils/openapi.js.map +0 -1
  142. package/dist/src/utils/operators.d.ts.map +0 -1
  143. package/dist/src/utils/operators.js.map +0 -1
  144. package/dist/src/utils/requestParser.d.ts.map +0 -1
  145. package/dist/src/utils/requestParser.js.map +0 -1
  146. package/dist/src/utils/responseFormatter.d.ts.map +0 -1
  147. package/dist/src/utils/responseFormatter.js.map +0 -1
  148. package/dist/src/utils/typedSql.d.ts.map +0 -1
  149. package/dist/src/utils/typedSql.js.map +0 -1
  150. package/dist/test/columnMeta.test.d.ts +0 -2
  151. package/dist/test/columnMeta.test.d.ts.map +0 -1
  152. package/dist/test/columnMeta.test.js +0 -92
  153. package/dist/test/columnMeta.test.js.map +0 -1
  154. package/dist/test/core/aggregationBuilder.test.d.ts +0 -2
  155. package/dist/test/core/aggregationBuilder.test.d.ts.map +0 -1
  156. package/dist/test/core/aggregationBuilder.test.js +0 -64
  157. package/dist/test/core/aggregationBuilder.test.js.map +0 -1
  158. package/dist/test/core/filterBuilder.test.d.ts +0 -2
  159. package/dist/test/core/filterBuilder.test.d.ts.map +0 -1
  160. package/dist/test/core/filterBuilder.test.js +0 -80
  161. package/dist/test/core/filterBuilder.test.js.map +0 -1
  162. package/dist/test/core/paginationBuilder.test.d.ts +0 -2
  163. package/dist/test/core/paginationBuilder.test.d.ts.map +0 -1
  164. package/dist/test/core/paginationBuilder.test.js +0 -63
  165. package/dist/test/core/paginationBuilder.test.js.map +0 -1
  166. package/dist/test/core/queryBuilder.test.d.ts +0 -2
  167. package/dist/test/core/queryBuilder.test.d.ts.map +0 -1
  168. package/dist/test/core/queryBuilder.test.js +0 -92
  169. package/dist/test/core/queryBuilder.test.js.map +0 -1
  170. package/dist/test/core/searchBuilder.test.d.ts +0 -2
  171. package/dist/test/core/searchBuilder.test.d.ts.map +0 -1
  172. package/dist/test/core/searchBuilder.test.js +0 -68
  173. package/dist/test/core/searchBuilder.test.js.map +0 -1
  174. package/dist/test/core/softDelete.test.d.ts +0 -2
  175. package/dist/test/core/softDelete.test.d.ts.map +0 -1
  176. package/dist/test/core/softDelete.test.js +0 -60
  177. package/dist/test/core/softDelete.test.js.map +0 -1
  178. package/dist/test/core/sortBuilder.test.d.ts +0 -2
  179. package/dist/test/core/sortBuilder.test.d.ts.map +0 -1
  180. package/dist/test/core/sortBuilder.test.js +0 -59
  181. package/dist/test/core/sortBuilder.test.js.map +0 -1
  182. package/dist/test/core/subqueryBuilder.test.d.ts +0 -2
  183. package/dist/test/core/subqueryBuilder.test.d.ts.map +0 -1
  184. package/dist/test/core/subqueryBuilder.test.js +0 -48
  185. package/dist/test/core/subqueryBuilder.test.js.map +0 -1
  186. package/dist/test/core/validator.test.d.ts +0 -2
  187. package/dist/test/core/validator.test.d.ts.map +0 -1
  188. package/dist/test/core/validator.test.js +0 -81
  189. package/dist/test/core/validator.test.js.map +0 -1
  190. package/dist/test/datePresets.test.d.ts +0 -2
  191. package/dist/test/datePresets.test.d.ts.map +0 -1
  192. package/dist/test/datePresets.test.js +0 -57
  193. package/dist/test/datePresets.test.js.map +0 -1
  194. package/dist/test/errors.test.d.ts +0 -2
  195. package/dist/test/errors.test.d.ts.map +0 -1
  196. package/dist/test/errors.test.js +0 -62
  197. package/dist/test/errors.test.js.map +0 -1
  198. package/dist/test/inputValidator.test.d.ts +0 -2
  199. package/dist/test/inputValidator.test.d.ts.map +0 -1
  200. package/dist/test/inputValidator.test.js +0 -60
  201. package/dist/test/inputValidator.test.js.map +0 -1
  202. package/dist/test/metadata.test.d.ts +0 -2
  203. package/dist/test/metadata.test.d.ts.map +0 -1
  204. package/dist/test/metadata.test.js +0 -285
  205. package/dist/test/metadata.test.js.map +0 -1
  206. package/dist/test/metadataComplete.test.d.ts +0 -2
  207. package/dist/test/metadataComplete.test.d.ts.map +0 -1
  208. package/dist/test/metadataComplete.test.js +0 -113
  209. package/dist/test/metadataComplete.test.js.map +0 -1
  210. package/dist/test/roleFilter.test.d.ts +0 -2
  211. package/dist/test/roleFilter.test.d.ts.map +0 -1
  212. package/dist/test/roleFilter.test.js +0 -53
  213. package/dist/test/roleFilter.test.js.map +0 -1
  214. package/dist/test/typedSql.test.d.ts +0 -2
  215. package/dist/test/typedSql.test.d.ts.map +0 -1
  216. package/dist/test/typedSql.test.js +0 -63
  217. package/dist/test/typedSql.test.js.map +0 -1
  218. package/dist/test/utils/codegen.test.d.ts +0 -2
  219. package/dist/test/utils/codegen.test.d.ts.map +0 -1
  220. package/dist/test/utils/codegen.test.js +0 -65
  221. package/dist/test/utils/codegen.test.js.map +0 -1
  222. package/dist/test/utils/export.test.d.ts +0 -2
  223. package/dist/test/utils/export.test.d.ts.map +0 -1
  224. package/dist/test/utils/export.test.js +0 -54
  225. package/dist/test/utils/export.test.js.map +0 -1
  226. package/dist/test/utils/openapi.test.d.ts +0 -2
  227. package/dist/test/utils/openapi.test.d.ts.map +0 -1
  228. package/dist/test/utils/openapi.test.js +0 -65
  229. package/dist/test/utils/openapi.test.js.map +0 -1
  230. package/dist/test/utils/requestParser.test.d.ts +0 -2
  231. package/dist/test/utils/requestParser.test.d.ts.map +0 -1
  232. package/dist/test/utils/requestParser.test.js +0 -89
  233. package/dist/test/utils/requestParser.test.js.map +0 -1
  234. package/dist/test/utils/responseFormatter.test.d.ts +0 -2
  235. package/dist/test/utils/responseFormatter.test.d.ts.map +0 -1
  236. package/dist/test/utils/responseFormatter.test.js +0 -79
  237. package/dist/test/utils/responseFormatter.test.js.map +0 -1
  238. /package/dist/{src/core → core}/aggregationBuilder.d.ts +0 -0
  239. /package/dist/{src/core → core}/aggregationBuilder.js +0 -0
  240. /package/dist/{src/core → core}/cursorPagination.d.ts +0 -0
  241. /package/dist/{src/core → core}/cursorPagination.js +0 -0
  242. /package/dist/{src/core → core}/datePresets.d.ts +0 -0
  243. /package/dist/{src/core → core}/datePresets.js +0 -0
  244. /package/dist/{src/core → core}/dialect.d.ts +0 -0
  245. /package/dist/{src/core → core}/dialect.js +0 -0
  246. /package/dist/{src/core → core}/fieldSelector.d.ts +0 -0
  247. /package/dist/{src/core → core}/fieldSelector.js +0 -0
  248. /package/dist/{src/core → core}/filterBuilder.d.ts +0 -0
  249. /package/dist/{src/core → core}/filterBuilder.js +0 -0
  250. /package/dist/{src/core → core}/filterGroupBuilder.d.ts +0 -0
  251. /package/dist/{src/core → core}/filterGroupBuilder.js +0 -0
  252. /package/dist/{src/core → core}/groupByBuilder.d.ts +0 -0
  253. /package/dist/{src/core → core}/groupByBuilder.js +0 -0
  254. /package/dist/{src/core → core}/inputValidator.d.ts +0 -0
  255. /package/dist/{src/core → core}/inputValidator.js +0 -0
  256. /package/dist/{src/core → core}/metadataBuilder.d.ts +0 -0
  257. /package/dist/{src/core → core}/metadataBuilder.js +0 -0
  258. /package/dist/{src/core → core}/paginationBuilder.d.ts +0 -0
  259. /package/dist/{src/core → core}/paginationBuilder.js +0 -0
  260. /package/dist/{src/core → core}/queryBuilder.d.ts +0 -0
  261. /package/dist/{src/core → core}/queryBuilder.js +0 -0
  262. /package/dist/{src/core → core}/recursiveBuilder.d.ts +0 -0
  263. /package/dist/{src/core → core}/recursiveBuilder.js +0 -0
  264. /package/dist/{src/core → core}/relationBuilder.d.ts +0 -0
  265. /package/dist/{src/core → core}/relationBuilder.js +0 -0
  266. /package/dist/{src/core → core}/roleFilter.d.ts +0 -0
  267. /package/dist/{src/core → core}/roleFilter.js +0 -0
  268. /package/dist/{src/core → core}/searchBuilder.d.ts +0 -0
  269. /package/dist/{src/core → core}/searchBuilder.js +0 -0
  270. /package/dist/{src/core → core}/softDelete.d.ts +0 -0
  271. /package/dist/{src/core → core}/softDelete.js +0 -0
  272. /package/dist/{src/core → core}/sortBuilder.d.ts +0 -0
  273. /package/dist/{src/core → core}/sortBuilder.js +0 -0
  274. /package/dist/{src/core → core}/subqueryBuilder.d.ts +0 -0
  275. /package/dist/{src/core → core}/subqueryBuilder.js +0 -0
  276. /package/dist/{src/core → core}/validator.d.ts +0 -0
  277. /package/dist/{src/core → core}/validator.js +0 -0
  278. /package/dist/{src/define.d.ts → define.d.ts} +0 -0
  279. /package/dist/{src/define.js → define.js} +0 -0
  280. /package/dist/{src/engine.d.ts → engine.d.ts} +0 -0
  281. /package/dist/{src/engine.js → engine.js} +0 -0
  282. /package/dist/{src/errors.d.ts → errors.d.ts} +0 -0
  283. /package/dist/{src/errors.js → errors.js} +0 -0
  284. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  285. /package/dist/{src/index.js → index.js} +0 -0
  286. /package/dist/{src/types → types}/engine.d.ts +0 -0
  287. /package/dist/{src/types → types}/engine.js +0 -0
  288. /package/dist/{src/types → types}/table.d.ts +0 -0
  289. /package/dist/{src/types → types}/table.js +0 -0
  290. /package/dist/{src/utils → utils}/adapterUtils.d.ts +0 -0
  291. /package/dist/{src/utils → utils}/adapterUtils.js +0 -0
  292. /package/dist/{src/utils → utils}/codegen.d.ts +0 -0
  293. /package/dist/{src/utils → utils}/codegen.js +0 -0
  294. /package/dist/{src/utils → utils}/export.d.ts +0 -0
  295. /package/dist/{src/utils → utils}/export.js +0 -0
  296. /package/dist/{src/utils → utils}/introspect.d.ts +0 -0
  297. /package/dist/{src/utils → utils}/introspect.js +0 -0
  298. /package/dist/{src/utils → utils}/openapi.d.ts +0 -0
  299. /package/dist/{src/utils → utils}/openapi.js +0 -0
  300. /package/dist/{src/utils → utils}/operators.d.ts +0 -0
  301. /package/dist/{src/utils → utils}/operators.js +0 -0
  302. /package/dist/{src/utils → utils}/requestParser.d.ts +0 -0
  303. /package/dist/{src/utils → utils}/requestParser.js +0 -0
  304. /package/dist/{src/utils → utils}/responseFormatter.d.ts +0 -0
  305. /package/dist/{src/utils → utils}/responseFormatter.js +0 -0
  306. /package/dist/{src/utils → utils}/typedSql.d.ts +0 -0
  307. /package/dist/{src/utils → utils}/typedSql.js +0 -0
@@ -1,65 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { generateDrizzleCode } from '../../src/utils/codegen';
3
- describe('generateDrizzleCode', () => {
4
- it('should generate valid-looking TypeScript code', () => {
5
- const config = {
6
- name: 'users',
7
- base: 'users',
8
- columns: [
9
- { name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true },
10
- { name: 'email', type: 'string', hidden: false, sortable: true, filterable: true, dbTransform: ['lower'] },
11
- { name: 'name', type: 'string', hidden: false, sortable: true, filterable: true },
12
- ],
13
- defaultSort: [{ field: 'name', order: 'asc' }],
14
- pagination: { defaultPageSize: 20, maxPageSize: 50, enabled: true },
15
- };
16
- const code = generateDrizzleCode(config);
17
- expect(code).toContain('import { eq, and, or, asc, desc');
18
- expect(code).toContain('import { users }');
19
- expect(code).toContain('export async function queryUsers');
20
- expect(code).toContain('.select(');
21
- expect(code).toContain('.from(users)');
22
- expect(code).toContain('email: sql`lower(users.email)`');
23
- expect(code).toContain('.orderBy(asc(users.name))');
24
- expect(code).toContain('.limit(');
25
- expect(code).toContain('return {');
26
- });
27
- it('should include join tables in imports', () => {
28
- const config = {
29
- name: 'orders',
30
- base: 'orders',
31
- columns: [
32
- { name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true },
33
- ],
34
- joins: [
35
- { table: 'customers', type: 'left', on: 'orders.customerId = customers.id' },
36
- ],
37
- };
38
- const code = generateDrizzleCode(config);
39
- expect(code).toContain('orders, customers');
40
- expect(code).toContain('.leftJoin(customers');
41
- });
42
- it('should include backend conditions', () => {
43
- const config = {
44
- name: 'items',
45
- base: 'items',
46
- columns: [{ name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true }],
47
- backendConditions: [
48
- { field: 'active', operator: 'eq', value: true },
49
- ],
50
- };
51
- const code = generateDrizzleCode(config);
52
- expect(code).toContain('eq(items.active, true)');
53
- });
54
- it('should include soft delete condition', () => {
55
- const config = {
56
- name: 'posts',
57
- base: 'posts',
58
- columns: [{ name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true }],
59
- softDelete: { field: 'deletedAt', enabled: true },
60
- };
61
- const code = generateDrizzleCode(config);
62
- expect(code).toContain('deletedAt IS NULL');
63
- });
64
- });
65
- //# sourceMappingURL=codegen.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codegen.test.js","sourceRoot":"","sources":["../../../test/utils/codegen.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=export.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.test.d.ts","sourceRoot":"","sources":["../../../test/utils/export.test.ts"],"names":[],"mappings":""}
@@ -1,54 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { toCSV, toJSON, exportData } from '../../src/utils/export';
3
- const config = {
4
- name: 'orders',
5
- base: 'orders',
6
- columns: [
7
- { name: 'id', type: 'uuid', label: 'ID', hidden: false, sortable: true, filterable: true },
8
- { name: 'total', type: 'number', label: 'Total Amount', hidden: false, sortable: true, filterable: true },
9
- { name: 'status', type: 'string', hidden: false, sortable: true, filterable: true },
10
- { name: 'secret', type: 'string', hidden: true, sortable: false, filterable: false },
11
- ],
12
- };
13
- const data = [
14
- { id: '1', total: 100, status: 'active', secret: 'x' },
15
- { id: '2', total: 200, status: 'pending', secret: 'y' },
16
- ];
17
- describe('toCSV', () => {
18
- it('should generate CSV with headers from visible columns', () => {
19
- const csv = toCSV(data, config);
20
- const lines = csv.split('\n');
21
- expect(lines[0]).toBe('ID,Total Amount,status');
22
- expect(lines[1]).toBe('1,100,active');
23
- expect(lines[2]).toBe('2,200,pending');
24
- // hidden column should not appear
25
- expect(csv).not.toContain('secret');
26
- });
27
- it('should escape fields with commas', () => {
28
- const d = [{ id: '1', total: 100, status: 'active, pending', secret: '' }];
29
- const csv = toCSV(d, config);
30
- expect(csv).toContain('"active, pending"');
31
- });
32
- it('should return empty string for empty data', () => {
33
- expect(toCSV([], config)).toBe('');
34
- });
35
- });
36
- describe('toJSON', () => {
37
- it('should return pretty-printed JSON', () => {
38
- const json = toJSON(data, config);
39
- const parsed = JSON.parse(json);
40
- expect(parsed).toHaveLength(2);
41
- expect(parsed[0].id).toBe('1');
42
- });
43
- });
44
- describe('exportData', () => {
45
- it('should select csv exporter', () => {
46
- const result = exportData(data, 'csv', config);
47
- expect(result).toContain('ID,Total Amount');
48
- });
49
- it('should select json exporter', () => {
50
- const result = exportData(data, 'json', config);
51
- expect(JSON.parse(result)).toHaveLength(2);
52
- });
53
- });
54
- //# sourceMappingURL=export.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"export.test.js","sourceRoot":"","sources":["../../../test/utils/export.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=openapi.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.test.d.ts","sourceRoot":"","sources":["../../../test/utils/openapi.test.ts"],"names":[],"mappings":""}
@@ -1,65 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { generateOpenApiSpec } from '../../src/utils/openapi';
3
- describe('generateOpenApiSpec', () => {
4
- it('should generate a valid OpenAPI 3 spec', () => {
5
- const config = {
6
- name: 'orders',
7
- base: 'orders',
8
- columns: [
9
- { name: 'id', type: 'uuid', label: 'Order ID', hidden: false, sortable: true, filterable: true },
10
- { name: 'total', type: 'number', label: 'Total', hidden: false, sortable: true, filterable: true },
11
- { name: 'status', type: 'string', hidden: false, sortable: true, filterable: true },
12
- { name: 'secret', type: 'string', hidden: true, sortable: false, filterable: false },
13
- ],
14
- filters: [
15
- { field: 'status', operator: 'eq', type: 'dynamic', label: 'Status' },
16
- { field: 'archived', operator: 'eq', value: false, type: 'static' },
17
- ],
18
- search: { fields: ['status'], enabled: true },
19
- pagination: { defaultPageSize: 25, maxPageSize: 100, enabled: true },
20
- aggregations: [
21
- { alias: 'totalRevenue', type: 'sum', field: 'total' },
22
- ],
23
- export: { formats: ['csv', 'json'], enabled: true },
24
- };
25
- const spec = generateOpenApiSpec(config);
26
- expect(spec.openapi).toBe('3.0.3');
27
- expect(spec.info.title).toContain('orders');
28
- const path = spec.paths['/api/orders'];
29
- expect(path).toBeDefined();
30
- expect(path.get).toBeDefined();
31
- // Check parameters
32
- const paramNames = path.get.parameters.map((p) => p.name);
33
- expect(paramNames).toContain('page');
34
- expect(paramNames).toContain('pageSize');
35
- expect(paramNames).toContain('sort');
36
- expect(paramNames).toContain('search');
37
- expect(paramNames).toContain('export');
38
- expect(paramNames).toContain('filter[status]');
39
- // Static filters should not be in params
40
- expect(paramNames).not.toContain('filter[archived]');
41
- // Check response schema
42
- const responseProps = path.get.responses['200'].content['application/json'].schema.properties;
43
- expect(responseProps.data).toBeDefined();
44
- expect(responseProps.meta).toBeDefined();
45
- expect(responseProps.aggregations).toBeDefined();
46
- // Hidden columns should not be in schema
47
- const dataProps = responseProps.data.items.properties;
48
- expect(dataProps.id).toBeDefined();
49
- expect(dataProps.total).toBeDefined();
50
- expect(dataProps.secret).toBeUndefined();
51
- });
52
- it('should include security when access is configured', () => {
53
- const config = {
54
- name: 'admin',
55
- base: 'admin',
56
- columns: [{ name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true }],
57
- access: { roles: ['admin'] },
58
- };
59
- const spec = generateOpenApiSpec(config);
60
- const getSec = spec.paths['/api/admin'].get;
61
- expect(getSec.security).toBeDefined();
62
- expect(spec.components.securitySchemes.bearerAuth).toBeDefined();
63
- });
64
- });
65
- //# sourceMappingURL=openapi.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.test.js","sourceRoot":"","sources":["../../../test/utils/openapi.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=requestParser.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requestParser.test.d.ts","sourceRoot":"","sources":["../../../test/utils/requestParser.test.ts"],"names":[],"mappings":""}
@@ -1,89 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { parseRequest } from '../../src/utils/requestParser';
3
- describe('parseRequest', () => {
4
- it('should parse page and pageSize', () => {
5
- const result = parseRequest({ page: '2', pageSize: '25' });
6
- expect(result.page).toBe(2);
7
- expect(result.pageSize).toBe(25);
8
- });
9
- it('should parse sort with desc prefix', () => {
10
- const result = parseRequest({ sort: '-createdAt,name' });
11
- expect(result.sort).toEqual([
12
- { field: 'createdAt', order: 'desc' },
13
- { field: 'name', order: 'asc' },
14
- ]);
15
- });
16
- it('should parse sort with asc prefix', () => {
17
- const result = parseRequest({ sort: '+name' });
18
- expect(result.sort).toEqual([{ field: 'name', order: 'asc' }]);
19
- });
20
- it('should parse simple filter[field]=value as eq', () => {
21
- const result = parseRequest({ 'filter[status]': 'active' });
22
- expect(result.filters).toEqual({
23
- status: { operator: 'eq', value: 'active' },
24
- });
25
- });
26
- it('should parse filter[field][operator]=value', () => {
27
- const result = parseRequest({ 'filter[amount][gte]': '100' });
28
- expect(result.filters).toEqual({
29
- amount: { operator: 'gte', value: 100 },
30
- });
31
- });
32
- it('should coerce numeric values', () => {
33
- const result = parseRequest({ 'filter[price]': '42.5' });
34
- expect(result.filters.price.value).toBe(42.5);
35
- });
36
- it('should coerce boolean values', () => {
37
- const result = parseRequest({ 'filter[active]': 'true' });
38
- expect(result.filters.active.value).toBe(true);
39
- });
40
- it('should coerce null values', () => {
41
- const result = parseRequest({ 'filter[deleted]': 'null' });
42
- expect(result.filters.deleted.value).toBeNull();
43
- });
44
- it('should coerce comma-separated to array', () => {
45
- const result = parseRequest({ 'filter[status][in]': 'active,pending,done' });
46
- expect(result.filters.status.value).toEqual(['active', 'pending', 'done']);
47
- });
48
- it('should parse search', () => {
49
- const result = parseRequest({ search: 'hello world' });
50
- expect(result.search).toBe('hello world');
51
- });
52
- it('should parse export format', () => {
53
- const result = parseRequest({ export: 'csv' });
54
- expect(result.export).toBe('csv');
55
- });
56
- it('should ignore invalid export format', () => {
57
- const result = parseRequest({ export: 'xml' });
58
- expect(result.export).toBeUndefined();
59
- });
60
- it('should parse includeDeleted', () => {
61
- const result = parseRequest({ includeDeleted: 'true' });
62
- expect(result.includeDeleted).toBe(true);
63
- });
64
- it('should reject invalid operators in filters', () => {
65
- const result = parseRequest({ 'filter[x][INVALID]': '1' });
66
- expect(result.filters).toBeUndefined();
67
- });
68
- it('should handle URLSearchParams', () => {
69
- const sp = new URLSearchParams();
70
- sp.set('page', '3');
71
- sp.set('filter[name]', 'test');
72
- sp.set('sort', '-id');
73
- const result = parseRequest(sp);
74
- expect(result.page).toBe(3);
75
- expect(result.filters.name).toEqual({ operator: 'eq', value: 'test' });
76
- expect(result.sort).toEqual([{ field: 'id', order: 'desc' }]);
77
- });
78
- it('should return empty for no params', () => {
79
- const result = parseRequest({});
80
- expect(result.page).toBeUndefined();
81
- expect(result.pageSize).toBeUndefined();
82
- expect(result.sort).toBeUndefined();
83
- expect(result.filters).toBeUndefined();
84
- expect(result.search).toBeUndefined();
85
- expect(result.export).toBeUndefined();
86
- expect(result.includeDeleted).toBe(false);
87
- });
88
- });
89
- //# sourceMappingURL=requestParser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"requestParser.test.js","sourceRoot":"","sources":["../../../test/utils/requestParser.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=responseFormatter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"responseFormatter.test.d.ts","sourceRoot":"","sources":["../../../test/utils/responseFormatter.test.ts"],"names":[],"mappings":""}
@@ -1,79 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { applyJsTransforms, formatResponse, registerTransform, } from '../../src/utils/responseFormatter';
3
- const baseConfig = {
4
- name: 'test',
5
- base: 'test',
6
- columns: [
7
- { name: 'id', type: 'uuid', hidden: false, sortable: true, filterable: true },
8
- { name: 'name', type: 'string', hidden: false, sortable: true, filterable: true, jsTransform: ['uppercase'] },
9
- { name: 'email', type: 'string', hidden: false, sortable: true, filterable: true, jsTransform: ['lowercase', 'trim'] },
10
- { name: 'secret', type: 'string', hidden: true, sortable: false, filterable: false },
11
- { name: 'code', type: 'string', hidden: false, sortable: true, filterable: true, jsTransform: ['slice(0,3)'] },
12
- { name: 'createdAt', type: 'date', hidden: false, sortable: true, filterable: true, jsTransform: ['formatDate'] },
13
- ],
14
- };
15
- describe('applyJsTransforms', () => {
16
- it('should apply uppercase transform', () => {
17
- const data = [{ id: '1', name: 'alice', email: 'test@test.com', code: 'ABCDEF', createdAt: '2024-01-01' }];
18
- const result = applyJsTransforms(data, baseConfig);
19
- expect(result[0].name).toBe('ALICE');
20
- });
21
- it('should chain lowercase + trim', () => {
22
- const data = [{ id: '1', name: 'Bob', email: ' TEST@TEST.COM ', code: 'XYZ', createdAt: '2024-01-01' }];
23
- const result = applyJsTransforms(data, baseConfig);
24
- expect(result[0].email).toBe('test@test.com');
25
- });
26
- it('should apply slice(0,3)', () => {
27
- const data = [{ id: '1', name: 'x', email: 'x', code: 'ABCDEF', createdAt: '2024-01-01' }];
28
- const result = applyJsTransforms(data, baseConfig);
29
- expect(result[0].code).toBe('ABC');
30
- });
31
- it('should apply formatDate', () => {
32
- const d = new Date('2024-06-15T12:00:00Z');
33
- const data = [{ id: '1', name: 'x', email: 'x', code: 'x', createdAt: d }];
34
- const result = applyJsTransforms(data, baseConfig);
35
- expect(result[0].createdAt).toBe('2024-06-15T12:00:00.000Z');
36
- });
37
- it('should not mutate original data', () => {
38
- const original = [{ id: '1', name: 'alice', email: 'x', code: 'x', createdAt: 'x' }];
39
- const result = applyJsTransforms(original, baseConfig);
40
- expect(original[0].name).toBe('alice');
41
- expect(result[0].name).toBe('ALICE');
42
- });
43
- });
44
- describe('registerTransform', () => {
45
- it('should allow custom transforms', () => {
46
- registerTransform('reverse', (v) => typeof v === 'string' ? v.split('').reverse().join('') : v);
47
- const cfg = {
48
- name: 'test',
49
- base: 'test',
50
- columns: [
51
- { name: 'val', type: 'string', hidden: false, sortable: true, filterable: true, jsTransform: ['reverse'] },
52
- ],
53
- };
54
- const data = [{ val: 'hello' }];
55
- const result = applyJsTransforms(data, cfg);
56
- expect(result[0].val).toBe('olleh');
57
- });
58
- });
59
- describe('formatResponse', () => {
60
- it('should strip hidden columns and apply transforms', () => {
61
- const data = [
62
- { id: '1', name: 'alice', email: ' BOB@X.COM ', secret: 'hide_me', code: 'ABCDEF', createdAt: '2024-01-01' },
63
- ];
64
- const meta = { total: 1, page: 1, pageSize: 10, totalPages: 1 };
65
- const result = formatResponse(data, meta, baseConfig);
66
- expect(result.data[0].secret).toBeUndefined();
67
- expect(result.data[0].name).toBe('ALICE');
68
- expect(result.data[0].email).toBe('bob@x.com');
69
- expect(result.meta.total).toBe(1);
70
- });
71
- it('should include aggregations when provided', () => {
72
- const data = [];
73
- const meta = { total: 0, page: 1, pageSize: 10, totalPages: 0 };
74
- const aggs = { totalRevenue: 5000 };
75
- const result = formatResponse(data, meta, baseConfig, aggs);
76
- expect(result.aggregations).toEqual({ totalRevenue: 5000 });
77
- });
78
- });
79
- //# sourceMappingURL=responseFormatter.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"responseFormatter.test.js","sourceRoot":"","sources":["../../../test/utils/responseFormatter.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes