@antelopejs/interface-data-api 0.4.0 → 0.6.0

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 (165) hide show
  1. package/README.md +26 -22
  2. package/dist/antelope.test.js +1 -5
  3. package/dist/antelope.test.js.map +1 -1
  4. package/dist/components.d.ts +67 -39
  5. package/dist/components.js +106 -685
  6. package/dist/components.js.map +1 -1
  7. package/dist/index.d.ts +57 -68
  8. package/dist/index.js +114 -100
  9. package/dist/index.js.map +1 -1
  10. package/dist/internal/computed.d.ts +6 -0
  11. package/dist/internal/computed.js +51 -0
  12. package/dist/internal/computed.js.map +1 -0
  13. package/dist/internal/controller-types.d.ts +34 -0
  14. package/dist/internal/controller-types.js +4 -0
  15. package/dist/internal/controller-types.js.map +1 -0
  16. package/dist/internal/default-filter.d.ts +4 -0
  17. package/dist/internal/default-filter.js +29 -0
  18. package/dist/internal/default-filter.js.map +1 -0
  19. package/dist/internal/deferred-joined-stream.d.ts +11 -0
  20. package/dist/internal/deferred-joined-stream.js +125 -0
  21. package/dist/internal/deferred-joined-stream.js.map +1 -0
  22. package/dist/internal/extractors.d.ts +25 -0
  23. package/dist/internal/extractors.js +31 -0
  24. package/dist/internal/extractors.js.map +1 -0
  25. package/dist/internal/field-types.d.ts +199 -0
  26. package/dist/internal/field-types.js +4 -0
  27. package/dist/internal/field-types.js.map +1 -0
  28. package/dist/internal/filters.d.ts +6 -0
  29. package/dist/internal/filters.js +22 -0
  30. package/dist/internal/filters.js.map +1 -0
  31. package/dist/internal/foreign.d.ts +6 -0
  32. package/dist/internal/foreign.js +116 -0
  33. package/dist/internal/foreign.js.map +1 -0
  34. package/dist/internal/guards.d.ts +39 -0
  35. package/dist/internal/guards.js +116 -0
  36. package/dist/internal/guards.js.map +1 -0
  37. package/dist/internal/joined.d.ts +28 -0
  38. package/dist/internal/joined.js +127 -0
  39. package/dist/internal/joined.js.map +1 -0
  40. package/dist/internal/list.d.ts +16 -0
  41. package/dist/internal/list.js +182 -0
  42. package/dist/internal/list.js.map +1 -0
  43. package/dist/internal/meta-records.d.ts +19 -0
  44. package/dist/internal/meta-records.js +78 -0
  45. package/dist/internal/meta-records.js.map +1 -0
  46. package/dist/internal/properties.d.ts +4 -0
  47. package/dist/internal/properties.js +45 -0
  48. package/dist/internal/properties.js.map +1 -0
  49. package/dist/internal/prototypes.d.ts +14 -0
  50. package/dist/internal/prototypes.js +38 -0
  51. package/dist/internal/prototypes.js.map +1 -0
  52. package/dist/internal/read-properties.d.ts +3 -0
  53. package/dist/internal/read-properties.js +29 -0
  54. package/dist/internal/read-properties.js.map +1 -0
  55. package/dist/internal/table-reference.d.ts +11 -0
  56. package/dist/internal/table-reference.js +46 -0
  57. package/dist/internal/table-reference.js.map +1 -0
  58. package/dist/internal/tables.d.ts +28 -0
  59. package/dist/internal/tables.js +48 -0
  60. package/dist/internal/tables.js.map +1 -0
  61. package/dist/internal/validation.d.ts +12 -0
  62. package/dist/internal/validation.js +100 -0
  63. package/dist/internal/validation.js.map +1 -0
  64. package/dist/metadata.d.ts +27 -228
  65. package/dist/metadata.js +84 -213
  66. package/dist/metadata.js.map +1 -1
  67. package/dist/tests/components/access_control.test.js +28 -20
  68. package/dist/tests/components/access_control.test.js.map +1 -1
  69. package/dist/tests/components/computed.test.js +36 -27
  70. package/dist/tests/components/computed.test.js.map +1 -1
  71. package/dist/tests/components/cross_instance.test.js +8 -6
  72. package/dist/tests/components/cross_instance.test.js.map +1 -1
  73. package/dist/tests/components/deferred_joined.test.js +57 -54
  74. package/dist/tests/components/deferred_joined.test.js.map +1 -1
  75. package/dist/tests/components/extract_generic.test.d.ts +1 -0
  76. package/dist/tests/components/extract_generic.test.js +64 -0
  77. package/dist/tests/components/extract_generic.test.js.map +1 -0
  78. package/dist/tests/components/filter_comparisons.test.d.ts +1 -0
  79. package/dist/tests/components/filter_comparisons.test.js +34 -0
  80. package/dist/tests/components/filter_comparisons.test.js.map +1 -0
  81. package/dist/tests/components/filter_list_route.test.d.ts +1 -0
  82. package/dist/tests/components/filter_list_route.test.js +182 -0
  83. package/dist/tests/components/filter_list_route.test.js.map +1 -0
  84. package/dist/tests/components/filter_options.test.js +11 -10
  85. package/dist/tests/components/filter_options.test.js.map +1 -1
  86. package/dist/tests/components/foreign_computed.test.js +23 -14
  87. package/dist/tests/components/foreign_computed.test.js.map +1 -1
  88. package/dist/tests/components/foreign_joined.test.js +31 -27
  89. package/dist/tests/components/foreign_joined.test.js.map +1 -1
  90. package/dist/tests/components/joined.test.js +59 -45
  91. package/dist/tests/components/joined.test.js.map +1 -1
  92. package/dist/tests/components/listable.test.js +78 -58
  93. package/dist/tests/components/listable.test.js.map +1 -1
  94. package/dist/tests/components/localized_sort.test.js +14 -11
  95. package/dist/tests/components/localized_sort.test.js.map +1 -1
  96. package/dist/tests/components/mandatory.test.js +25 -25
  97. package/dist/tests/components/mandatory.test.js.map +1 -1
  98. package/dist/tests/components/modifier_key.test.js +27 -18
  99. package/dist/tests/components/modifier_key.test.js.map +1 -1
  100. package/dist/tests/components/parse_body.test.d.ts +1 -0
  101. package/dist/tests/components/parse_body.test.js +76 -0
  102. package/dist/tests/components/parse_body.test.js.map +1 -0
  103. package/dist/tests/components/parsed_value.test.js +23 -21
  104. package/dist/tests/components/parsed_value.test.js.map +1 -1
  105. package/dist/tests/components/partial_edit.test.js +38 -32
  106. package/dist/tests/components/partial_edit.test.js.map +1 -1
  107. package/dist/tests/components/per_action_access.test.js +20 -12
  108. package/dist/tests/components/per_action_access.test.js.map +1 -1
  109. package/dist/tests/components/prototype_named_filter.test.d.ts +1 -0
  110. package/dist/tests/components/prototype_named_filter.test.js +87 -0
  111. package/dist/tests/components/prototype_named_filter.test.js.map +1 -0
  112. package/dist/tests/components/validator.test.js +45 -37
  113. package/dist/tests/components/validator.test.js.map +1 -1
  114. package/dist/tests/components/written_row.test.d.ts +1 -0
  115. package/dist/tests/components/written_row.test.js +99 -0
  116. package/dist/tests/components/written_row.test.js.map +1 -0
  117. package/dist/tests/helpers/other-instance.d.ts +11 -1
  118. package/dist/tests/helpers/other-instance.js +35 -9
  119. package/dist/tests/helpers/other-instance.js.map +1 -1
  120. package/dist/tests/index/field_decorator_target.test.d.ts +1 -0
  121. package/dist/tests/index/field_decorator_target.test.js +20 -0
  122. package/dist/tests/index/field_decorator_target.test.js.map +1 -0
  123. package/dist/tests/index/get_guard.test.js +6 -6
  124. package/dist/tests/index/get_guard.test.js.map +1 -1
  125. package/dist/tests/index/inheritance.test.js +14 -9
  126. package/dist/tests/index/inheritance.test.js.map +1 -1
  127. package/dist/tests/index/metadata_names.test.d.ts +1 -0
  128. package/dist/tests/index/metadata_names.test.js +91 -0
  129. package/dist/tests/index/metadata_names.test.js.map +1 -0
  130. package/dist/tests/index/routes.test.js +49 -44
  131. package/dist/tests/index/routes.test.js.map +1 -1
  132. package/dist/tests/integration.test.d.ts +1 -1
  133. package/dist/tests/integration.test.js +66 -729
  134. package/dist/tests/integration.test.js.map +1 -1
  135. package/dist/tests/internal/controller-fields.test.d.ts +1 -0
  136. package/dist/tests/internal/controller-fields.test.js +25 -0
  137. package/dist/tests/internal/controller-fields.test.js.map +1 -0
  138. package/dist/tests/internal/http.d.ts +35 -0
  139. package/dist/tests/internal/http.js +56 -0
  140. package/dist/tests/internal/http.js.map +1 -0
  141. package/dist/tests/internal/shop-api.d.ts +1 -0
  142. package/dist/tests/internal/shop-api.js +331 -0
  143. package/dist/tests/internal/shop-api.js.map +1 -0
  144. package/dist/tests/internal/shop-schema.d.ts +162 -0
  145. package/dist/tests/internal/shop-schema.js +387 -0
  146. package/dist/tests/internal/shop-schema.js.map +1 -0
  147. package/dist/tests/utils.d.ts +8 -10
  148. package/dist/tests/utils.js +1 -3
  149. package/dist/tests/utils.js.map +1 -1
  150. package/dist/tests/utils.test.js +10 -11
  151. package/dist/tests/utils.test.js.map +1 -1
  152. package/docs/1.introduction.md +38 -35
  153. package/docs/10.joined.md +51 -40
  154. package/docs/11.computed.md +91 -47
  155. package/docs/2.data-controllers.md +50 -42
  156. package/docs/3.routes.md +156 -134
  157. package/docs/4.access-rights.md +48 -44
  158. package/docs/5.validators.md +65 -47
  159. package/docs/6.listable.md +53 -49
  160. package/docs/7.foreign-keys.md +55 -48
  161. package/docs/8.filters.md +65 -54
  162. package/docs/9.modifiers.md +29 -25
  163. package/package.json +34 -13
  164. package/skills/data-api-interface/SKILL.md +13 -3
  165. package/skills/data-api-interface/cases.json +99 -0
@@ -14,11 +14,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const node_path_1 = __importDefault(require("node:path"));
16
16
  const chai_1 = require("chai");
17
+ const zod_1 = require("zod");
17
18
  const interface_api_1 = require("@antelopejs/interface-api");
18
19
  const interface_database_1 = require("@antelopejs/interface-database");
19
- const interface_data_api_1 = require("@antelopejs/interface-data-api");
20
+ const index_1 = require("../../index");
20
21
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
21
- const metadata_1 = require("@antelopejs/interface-data-api/metadata");
22
+ const metadata_1 = require("../../metadata");
23
+ const http_1 = require("../internal/http");
22
24
  const utils_1 = require("../utils");
23
25
  const currentTestName = node_path_1.default
24
26
  .basename(__filename)
@@ -61,6 +63,23 @@ Book = __decorate([
61
63
  ], Book);
62
64
  class BookModel extends (0, interface_database_decorators_1.BasicDataModel)(Book, bookTableName) {
63
65
  }
66
+ const bookListedSchema = zod_1.z.looseObject({
67
+ _id: zod_1.z.string(),
68
+ authorId: zod_1.z.string(),
69
+ title: zod_1.z.string(),
70
+ price: zod_1.z.number(),
71
+ name: zod_1.z.string().nullable(),
72
+ email: zod_1.z.string().nullable(),
73
+ });
74
+ const bookListSchema = zod_1.z.looseObject({
75
+ results: zod_1.z.array(bookListedSchema),
76
+ total: zod_1.z.number(),
77
+ });
78
+ const bookDisplayedSchema = zod_1.z.looseObject({
79
+ title: zod_1.z.string(),
80
+ display: zod_1.z.string().nullable(),
81
+ name: zod_1.z.string().optional(),
82
+ });
64
83
  const authorsDataset = [
65
84
  { name: "Alice Carter", email: "alice@example.com" },
66
85
  { name: "Bob Stone", email: "bob@example.com" },
@@ -68,21 +87,21 @@ const authorsDataset = [
68
87
  ];
69
88
  const orphanAuthorId = "orphan-author-id";
70
89
  describe("Field Joined", () => {
71
- it("lists rows with joined fields flattened", async () => await listsRowsWithJoinedFieldsFlattened());
72
- it("gets row with joined fields flattened", async () => await getsRowWithJoinedFieldsFlattened());
73
- it("sorts by joined field ascending", async () => await sortsByJoinedFieldAscending());
74
- it("sorts by joined field descending", async () => await sortsByJoinedFieldDescending());
75
- it("filters by joined field", async () => await filtersByJoinedField());
76
- it("keeps joined fields on paginated rows when unused by sort and filter", async () => await keepsJoinedFieldsOnPaginatedRows());
77
- it("resolves computed fields reading a non-plucked joined field", async () => await resolvesComputedFieldReadingNonPluckedJoinedField());
78
- it("returns null for orphan foreign key", async () => await returnsNullForOrphanForeignKey());
79
- it("ignores joined field on edit body", async () => await ignoresJoinedFieldOnEdit());
90
+ it("lists rows with joined fields flattened", async () => await expectListsRowsWithJoinedFieldsFlattened());
91
+ it("gets row with joined fields flattened", async () => await expectGetsRowWithJoinedFieldsFlattened());
92
+ it("sorts by joined field ascending", async () => await expectSortsByJoinedFieldAscending());
93
+ it("sorts by joined field descending", async () => await expectSortsByJoinedFieldDescending());
94
+ it("filters by joined field", async () => await expectFiltersByJoinedField());
95
+ it("keeps joined fields on paginated rows when unused by sort and filter", async () => await expectKeepsJoinedFieldsOnPaginatedRows());
96
+ it("resolves computed fields reading a non-plucked joined field", async () => await expectResolvesComputedFieldReadingNonPluckedJoinedField());
97
+ it("returns null for orphan foreign key", async () => await expectReturnsNullForOrphanForeignKey());
98
+ it("ignores joined field on edit body", async () => await expectIgnoresJoinedFieldOnEdit());
80
99
  });
81
100
  async function _createDataController(testName) {
82
- let _JoinedTestAPI = class _JoinedTestAPI extends (0, interface_data_api_1.DataController)(Book, {
83
- list: interface_data_api_1.DefaultRoutes.List,
84
- get: interface_data_api_1.DefaultRoutes.Get,
85
- edit: interface_data_api_1.DefaultRoutes.Edit,
101
+ let _JoinedTestAPI = class _JoinedTestAPI extends (0, index_1.DataController)(Book, {
102
+ list: index_1.DefaultRoutes.List,
103
+ get: index_1.DefaultRoutes.Get,
104
+ edit: index_1.DefaultRoutes.Edit,
86
105
  }, (0, interface_api_1.Controller)(`/${testName}`)) {
87
106
  };
88
107
  __decorate([
@@ -133,17 +152,13 @@ async function _createDataController(testName) {
133
152
  __metadata("design:type", String)
134
153
  ], _JoinedTestAPI.prototype, "email", void 0);
135
154
  _JoinedTestAPI = __decorate([
136
- (0, interface_data_api_1.RegisterDataController)()
155
+ (0, index_1.RegisterDataController)()
137
156
  ], _JoinedTestAPI);
138
157
  return _seedTables();
139
158
  }
140
- // Regression fixture for the lazy joined-field split: `name` is a joined
141
- // field that is neither listable, filtered, nor sorted, while `display` is a
142
- // listable computed field whose expression reads it. The deferred joined
143
- // lookup must still run before the computed expression on the paginated rows.
144
159
  async function _createComputedJoinedController(testName) {
145
- let _JoinedComputedTestAPI = class _JoinedComputedTestAPI extends (0, interface_data_api_1.DataController)(Book, {
146
- list: interface_data_api_1.DefaultRoutes.List,
160
+ let _JoinedComputedTestAPI = class _JoinedComputedTestAPI extends (0, index_1.DataController)(Book, {
161
+ list: index_1.DefaultRoutes.List,
147
162
  }, (0, interface_api_1.Controller)(`/${testName}`)) {
148
163
  };
149
164
  __decorate([
@@ -175,7 +190,7 @@ async function _createComputedJoinedController(testName) {
175
190
  __metadata("design:type", String)
176
191
  ], _JoinedComputedTestAPI.prototype, "display", void 0);
177
192
  _JoinedComputedTestAPI = __decorate([
178
- (0, interface_data_api_1.RegisterDataController)()
193
+ (0, index_1.RegisterDataController)()
179
194
  ], _JoinedComputedTestAPI);
180
195
  return _seedTables();
181
196
  }
@@ -205,63 +220,63 @@ async function _dropTables() {
205
220
  await schema.instance().table(authorTableName).delete();
206
221
  }
207
222
  }
208
- async function listsRowsWithJoinedFieldsFlattened() {
223
+ async function expectListsRowsWithJoinedFieldsFlattened() {
209
224
  await _createDataController((0, utils_1.getFunctionName)());
210
225
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {});
211
226
  (0, chai_1.expect)(response.status).to.equal(200);
212
- const data = (await response.json());
227
+ const data = await (0, http_1.readJson)(bookListSchema, response);
213
228
  (0, chai_1.expect)(data.results).to.have.lengthOf(5);
214
229
  const alphaRising = data.results.find((b) => b.title === "Alpha Rising");
215
230
  (0, chai_1.expect)(alphaRising).to.not.equal(undefined);
216
231
  (0, chai_1.expect)(alphaRising?.name).to.equal("Alice Carter");
217
232
  (0, chai_1.expect)(alphaRising?.email).to.equal("alice@example.com");
218
- (0, chai_1.expect)(typeof alphaRising?.authorId).to.equal("string");
233
+ (0, chai_1.expect)(alphaRising?.authorId).to.be.a("string");
219
234
  const betaStories = data.results.find((b) => b.title === "Beta Stories");
220
235
  (0, chai_1.expect)(betaStories?.name).to.equal("Bob Stone");
221
236
  (0, chai_1.expect)(betaStories?.email).to.equal("bob@example.com");
222
237
  }
223
- async function getsRowWithJoinedFieldsFlattened() {
238
+ async function expectGetsRowWithJoinedFieldsFlattened() {
224
239
  const { bookIds } = await _createDataController((0, utils_1.getFunctionName)());
225
240
  const response = await (0, utils_1.getRequest)((0, utils_1.getFunctionName)(), { id: bookIds[0] });
226
241
  if (response.status !== 200) {
227
242
  const text = await response.text();
228
243
  throw new Error(`get failed (${response.status}): ${text}`);
229
244
  }
230
- const book = (await response.json());
245
+ const book = await (0, http_1.readJson)(bookListedSchema, response);
231
246
  (0, chai_1.expect)(book.title).to.equal("Alpha Rising");
232
247
  (0, chai_1.expect)(book.name).to.equal("Alice Carter");
233
248
  (0, chai_1.expect)(book.email).to.equal("alice@example.com");
234
- (0, chai_1.expect)(typeof book.authorId).to.equal("string");
249
+ (0, chai_1.expect)(book.authorId).to.be.a("string");
235
250
  }
236
- async function sortsByJoinedFieldAscending() {
251
+ async function expectSortsByJoinedFieldAscending() {
237
252
  await _createDataController((0, utils_1.getFunctionName)());
238
253
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
239
254
  sortKey: "name",
240
255
  sortDirection: "asc",
241
256
  });
242
257
  (0, chai_1.expect)(response.status).to.equal(200);
243
- const data = (await response.json());
258
+ const data = await (0, http_1.readJson)(bookListSchema, response);
244
259
  const namesInOrder = data.results
245
260
  .map((b) => b.name)
246
- .filter((n) => typeof n === "string");
261
+ .filter((n) => n !== null);
247
262
  const sorted = [...namesInOrder].sort((a, b) => a.localeCompare(b));
248
263
  (0, chai_1.expect)(namesInOrder).to.deep.equal(sorted);
249
264
  }
250
- async function sortsByJoinedFieldDescending() {
265
+ async function expectSortsByJoinedFieldDescending() {
251
266
  await _createDataController((0, utils_1.getFunctionName)());
252
267
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
253
268
  sortKey: "name",
254
269
  sortDirection: "desc",
255
270
  });
256
271
  (0, chai_1.expect)(response.status).to.equal(200);
257
- const data = (await response.json());
272
+ const data = await (0, http_1.readJson)(bookListSchema, response);
258
273
  const namesInOrder = data.results
259
274
  .map((b) => b.name)
260
- .filter((n) => typeof n === "string");
275
+ .filter((n) => n !== null);
261
276
  const sorted = [...namesInOrder].sort((a, b) => b.localeCompare(a));
262
277
  (0, chai_1.expect)(namesInOrder).to.deep.equal(sorted);
263
278
  }
264
- async function filtersByJoinedField() {
279
+ async function expectFiltersByJoinedField() {
265
280
  await _createDataController((0, utils_1.getFunctionName)());
266
281
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
267
282
  filter_name: "eq:Alice Carter",
@@ -270,13 +285,13 @@ async function filtersByJoinedField() {
270
285
  const text = await response.text();
271
286
  throw new Error(`filter failed (${response.status}): ${text}`);
272
287
  }
273
- const data = (await response.json());
288
+ const data = await (0, http_1.readJson)(bookListSchema, response);
274
289
  (0, chai_1.expect)(data.results.length).to.equal(2);
275
290
  for (const book of data.results) {
276
291
  (0, chai_1.expect)(book.name).to.equal("Alice Carter");
277
292
  }
278
293
  }
279
- async function keepsJoinedFieldsOnPaginatedRows() {
294
+ async function expectKeepsJoinedFieldsOnPaginatedRows() {
280
295
  await _createDataController((0, utils_1.getFunctionName)());
281
296
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
282
297
  sortKey: "title",
@@ -285,7 +300,7 @@ async function keepsJoinedFieldsOnPaginatedRows() {
285
300
  limit: "2",
286
301
  });
287
302
  (0, chai_1.expect)(response.status).to.equal(200);
288
- const data = (await response.json());
303
+ const data = await (0, http_1.readJson)(bookListSchema, response);
289
304
  (0, chai_1.expect)(data.total).to.equal(5);
290
305
  (0, chai_1.expect)(data.results.map((b) => b.title)).to.deep.equal([
291
306
  "Alpha Rising",
@@ -300,31 +315,30 @@ async function keepsJoinedFieldsOnPaginatedRows() {
300
315
  "bob@example.com",
301
316
  ]);
302
317
  }
303
- async function resolvesComputedFieldReadingNonPluckedJoinedField() {
318
+ async function expectResolvesComputedFieldReadingNonPluckedJoinedField() {
304
319
  await _createComputedJoinedController((0, utils_1.getFunctionName)());
305
320
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {});
306
321
  (0, chai_1.expect)(response.status).to.equal(200);
307
- const data = (await response.json());
322
+ const data = await (0, http_1.readJson)((0, http_1.listResponseSchema)(bookDisplayedSchema), response);
308
323
  (0, chai_1.expect)(data.total).to.equal(5);
309
324
  (0, chai_1.expect)(data.results).to.have.lengthOf(5);
310
325
  const alphaRising = data.results.find((b) => b.title === "Alpha Rising");
311
326
  (0, chai_1.expect)(alphaRising).to.not.equal(undefined);
312
327
  (0, chai_1.expect)(alphaRising?.display).to.equal("Alice Carter (author)");
313
- // the joined field itself is not listable, so it must stay out of the response
314
328
  (0, chai_1.expect)(alphaRising?.name).to.equal(undefined);
315
329
  }
316
- async function returnsNullForOrphanForeignKey() {
330
+ async function expectReturnsNullForOrphanForeignKey() {
317
331
  await _createDataController((0, utils_1.getFunctionName)());
318
332
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {});
319
333
  (0, chai_1.expect)(response.status).to.equal(200);
320
- const data = (await response.json());
334
+ const data = await (0, http_1.readJson)(bookListSchema, response);
321
335
  const orphan = data.results.find((b) => b.title === "Lost Chapter");
322
336
  (0, chai_1.expect)(orphan).to.not.equal(undefined);
323
337
  (0, chai_1.expect)(orphan?.name).to.equal(null);
324
338
  (0, chai_1.expect)(orphan?.email).to.equal(null);
325
339
  (0, chai_1.expect)(orphan?.authorId).to.equal(orphanAuthorId);
326
340
  }
327
- async function ignoresJoinedFieldOnEdit() {
341
+ async function expectIgnoresJoinedFieldOnEdit() {
328
342
  const { bookIds, bookModel, authorIds, authorModel } = await _createDataController((0, utils_1.getFunctionName)());
329
343
  const editPayload = {
330
344
  title: "Alpha Rising (revised)",
@@ -1 +1 @@
1
- {"version":3,"file":"joined.test.js","sourceRoot":"","sources":["../../../src/tests/components/joined.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"joined.test.js","sourceRoot":"","sources":["../../../src/tests/components/joined.test.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const node_path_1 = __importDefault(require("node:path"));
16
16
  const chai_1 = require("chai");
17
+ const zod_1 = require("zod");
17
18
  const interface_api_1 = require("@antelopejs/interface-api");
18
19
  const interface_database_1 = require("@antelopejs/interface-database");
19
- const interface_data_api_1 = require("@antelopejs/interface-data-api");
20
- const metadata_1 = require("@antelopejs/interface-data-api/metadata");
20
+ const index_1 = require("../../index");
21
+ const metadata_1 = require("../../metadata");
21
22
  const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
23
+ const http_1 = require("../internal/http");
22
24
  const utils_1 = require("../utils");
25
+ const guards_1 = require("../../internal/guards");
23
26
  const currentTestName = node_path_1.default
24
27
  .basename(__filename)
25
28
  .replace(/\.test\.(ts|js)$/, "");
@@ -61,6 +64,24 @@ Product = __decorate([
61
64
  ], Product);
62
65
  class ProductModel extends (0, interface_database_decorators_1.BasicDataModel)(Product, productTableName) {
63
66
  }
67
+ const productRowSchema = zod_1.z.looseObject({
68
+ _id: zod_1.z.string(),
69
+ reference: zod_1.z.string().optional(),
70
+ name: zod_1.z.string().optional(),
71
+ description: zod_1.z.string().optional(),
72
+ price: zod_1.z.number().optional(),
73
+ addedAt: zod_1.z.string().optional(),
74
+ internalNotes: zod_1.z.string().optional(),
75
+ metadata: zod_1.z.string().optional(),
76
+ });
77
+ const productListedSchema = zod_1.z.looseObject({
78
+ _id: zod_1.z.string(),
79
+ name: zod_1.z.string(),
80
+ price: zod_1.z.number(),
81
+ addedAt: zod_1.z.string(),
82
+ });
83
+ const productRowListSchema = (0, http_1.listResponseSchema)(productRowSchema);
84
+ const productListedListSchema = (0, http_1.listResponseSchema)(productListedSchema);
64
85
  const defaultProductDataset = [
65
86
  {
66
87
  name: "OneSung X",
@@ -91,23 +112,22 @@ const defaultProductDataset = [
91
112
  },
92
113
  ];
93
114
  describe("Field Listable", () => {
94
- it("default listing", async () => await defaultListing());
95
- it("list only detailed fields", async () => await listDetailedFields());
96
- it("list nonexistant pluck mode", async () => await listNonexistantPluckMode());
97
- it("list only 2 rows per page", async () => await listOnly2RowsPerPage());
98
- it("list from 2nd page", async () => await listFrom2ndPage());
99
- it("list only 2 first pages", async () => await listOnly2FirstPages());
100
- it("list only 2nd page", async () => await listOnly2ndPage());
101
- it("sorting by string (name), ascending", async () => await sortByNameAscending());
102
- it("sorting by string (name), descending", async () => await sortByNameDescending());
103
- it("sorting by number (price), ascending", async () => await sortByPriceAscending());
104
- it("sorting by number (price), descending", async () => await sortByPriceDescending());
105
- it("sorting by date (addedAt), ascending", async () => await sortByAddedAtAscending());
106
- it("sorting by date (addedAt), descending", async () => await sortByAddedAtDescending());
107
- after(async () => { });
115
+ it("default listing", async () => await expectDefaultList());
116
+ it("list only detailed fields", async () => await expectDetailedList());
117
+ it("list nonexistant pluck mode", async () => await expectUnknownPluckMode());
118
+ it("list only 2 rows per page", async () => await expectTwoRowPage());
119
+ it("list from 2nd page", async () => await expectFromPageTwo());
120
+ it("list only 2 first pages", async () => await expectTwoFirstPages());
121
+ it("list only 2nd page", async () => await expectPageTwoOnly());
122
+ it("sorting by string (name), ascending", async () => await expectNameAscending());
123
+ it("sorting by string (name), descending", async () => await expectNameDescending());
124
+ it("sorting by number (price), ascending", async () => await expectPriceAscending());
125
+ it("sorting by number (price), descending", async () => await expectPriceDescending());
126
+ it("sorting by date (addedAt), ascending", async () => await expectAddedAtAscending());
127
+ it("sorting by date (addedAt), descending", async () => await expectAddedAtDescending());
108
128
  });
109
129
  async function _createDataController(testName, route, product) {
110
- let _ListableTestAPI = class _ListableTestAPI extends (0, interface_data_api_1.DataController)(Product, route, (0, interface_api_1.Controller)(`/${testName}`)) {
130
+ let _ListableTestAPI = class _ListableTestAPI extends (0, index_1.DataController)(Product, route, (0, interface_api_1.Controller)(`/${testName}`)) {
111
131
  };
112
132
  __decorate([
113
133
  (0, metadata_1.ModelReference)(),
@@ -159,7 +179,7 @@ async function _createDataController(testName, route, product) {
159
179
  __metadata("design:type", String)
160
180
  ], _ListableTestAPI.prototype, "description", void 0);
161
181
  _ListableTestAPI = __decorate([
162
- (0, interface_data_api_1.RegisterDataController)()
182
+ (0, index_1.RegisterDataController)()
163
183
  ], _ListableTestAPI);
164
184
  await (0, interface_database_decorators_1.RegisterSchema)(schemaName);
165
185
  await _dropProductTable();
@@ -184,11 +204,11 @@ async function _getDatabaseProducts(ids, productModel) {
184
204
  }
185
205
  return database_products;
186
206
  }
187
- async function defaultListing() {
188
- const { ids, productModel } = await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
207
+ async function expectDefaultList() {
208
+ const { ids, productModel } = await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
189
209
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {});
190
210
  (0, chai_1.expect)(response.status).to.equal(200);
191
- const data = (await response.json());
211
+ const data = await (0, http_1.readJson)(productRowListSchema, response);
192
212
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
193
213
  const listed_products = data.results;
194
214
  const database_products = await _getDatabaseProducts(Object.values(ids), productModel);
@@ -204,15 +224,15 @@ async function defaultListing() {
204
224
  (0, chai_1.expect)(product.metadata).to.equal(undefined);
205
225
  }
206
226
  }
207
- async function listDetailedFields() {
227
+ async function expectDetailedList() {
208
228
  const { ids, productModel } = await _createDataController((0, utils_1.getFunctionName)(), {
209
- detailed: interface_data_api_1.DefaultRoutes.WithOptions(interface_data_api_1.DefaultRoutes.List, {
229
+ detailed: index_1.DefaultRoutes.WithOptions(index_1.DefaultRoutes.List, {
210
230
  pluckMode: "detailed",
211
231
  }),
212
232
  }, defaultProductDataset);
213
233
  const response = await (0, utils_1.request)((0, utils_1.getFunctionName)(), "detailed", "GET", undefined, {});
214
234
  (0, chai_1.expect)(response.status).to.equal(200);
215
- const data = (await response.json());
235
+ const data = await (0, http_1.readJson)(productRowListSchema, response);
216
236
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
217
237
  const listed_products = data.results;
218
238
  const database_products = await _getDatabaseProducts(Object.values(ids), productModel);
@@ -228,20 +248,20 @@ async function listDetailedFields() {
228
248
  (0, chai_1.expect)(product.reference).to.equal(undefined);
229
249
  }
230
250
  }
231
- async function listNonexistantPluckMode() {
251
+ async function expectUnknownPluckMode() {
232
252
  await _createDataController((0, utils_1.getFunctionName)(), {
233
- detailed: interface_data_api_1.DefaultRoutes.WithOptions(interface_data_api_1.DefaultRoutes.List, {
253
+ detailed: index_1.DefaultRoutes.WithOptions(index_1.DefaultRoutes.List, {
234
254
  pluckMode: "detailed",
235
255
  }),
236
256
  }, defaultProductDataset);
237
257
  const response = await (0, utils_1.request)((0, utils_1.getFunctionName)(), "nonexistent", "GET", undefined, {});
238
258
  (0, chai_1.expect)(response.status).to.equal(404);
239
259
  }
240
- async function listOnly2RowsPerPage() {
241
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
260
+ async function expectTwoRowPage() {
261
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
242
262
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), { limit: "2" });
243
263
  (0, chai_1.expect)(response.status).to.equal(200);
244
- const data = (await response.json());
264
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
245
265
  (0, chai_1.expect)(data.results).to.have.length(2);
246
266
  (0, chai_1.expect)(data.total).to.equal(defaultProductDataset.length);
247
267
  (0, chai_1.expect)(data.limit).to.equal(2);
@@ -249,33 +269,33 @@ async function listOnly2RowsPerPage() {
249
269
  (0, chai_1.expect)(data.results[0]._id).to.not.equal(undefined);
250
270
  (0, chai_1.expect)(data.results[1]._id).to.not.equal(undefined);
251
271
  }
252
- async function listFrom2ndPage() {
253
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
272
+ async function expectFromPageTwo() {
273
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
254
274
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), { offset: "2" });
255
275
  (0, chai_1.expect)(response.status).to.equal(200);
256
- const data = (await response.json());
276
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
257
277
  (0, chai_1.expect)(data.results).to.have.length(1);
258
278
  (0, chai_1.expect)(data.total).to.equal(defaultProductDataset.length);
259
279
  (0, chai_1.expect)(data.offset).to.equal(2);
260
280
  (0, chai_1.expect)(data.results[0]._id).to.not.equal(undefined);
261
281
  }
262
- async function listOnly2FirstPages() {
263
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
282
+ async function expectTwoFirstPages() {
283
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
264
284
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), { maxPage: "2" });
265
285
  (0, chai_1.expect)(response.status).to.equal(200);
266
- const data = (await response.json());
286
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
267
287
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
268
288
  (0, chai_1.expect)(data.total).to.equal(defaultProductDataset.length);
269
289
  (0, chai_1.expect)(data.results[0]._id).to.not.equal(undefined);
270
290
  }
271
- async function listOnly2ndPage() {
272
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
291
+ async function expectPageTwoOnly() {
292
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
273
293
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
274
294
  offset: "2",
275
295
  limit: "1",
276
296
  });
277
297
  (0, chai_1.expect)(response.status).to.equal(200);
278
- const data = (await response.json());
298
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
279
299
  (0, chai_1.expect)(data.results).to.have.length(1);
280
300
  (0, chai_1.expect)(data.total).to.equal(defaultProductDataset.length);
281
301
  (0, chai_1.expect)(data.offset).to.equal(2);
@@ -291,76 +311,76 @@ function _getSortedField(dataset, field, direction) {
291
311
  ? a.getTime() - b.getTime()
292
312
  : b.getTime() - a.getTime();
293
313
  }
294
- if (typeof a === "number" && typeof b === "number") {
314
+ if ((0, guards_1.isNumber)(a) && (0, guards_1.isNumber)(b)) {
295
315
  return direction === "asc" ? a - b : b - a;
296
316
  }
297
- if (typeof a === "string" && typeof b === "string") {
317
+ if ((0, guards_1.isString)(a) && (0, guards_1.isString)(b)) {
298
318
  return direction === "asc" ? a.localeCompare(b) : b.localeCompare(a);
299
319
  }
300
320
  return 0;
301
321
  });
302
322
  return filteredField;
303
323
  }
304
- async function sortByNameAscending() {
305
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
324
+ async function expectNameAscending() {
325
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
306
326
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
307
327
  sortKey: "name",
308
328
  sortDirection: "asc",
309
329
  });
310
330
  (0, chai_1.expect)(response.status).to.equal(200);
311
- const data = (await response.json());
331
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
312
332
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
313
333
  const sortedNames = data.results.map((product) => product.name);
314
334
  const expectedNames = _getSortedField(defaultProductDataset, "name", "asc");
315
335
  (0, chai_1.expect)(sortedNames).to.deep.equal(expectedNames);
316
336
  }
317
- async function sortByNameDescending() {
318
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
337
+ async function expectNameDescending() {
338
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
319
339
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
320
340
  sortKey: "name",
321
341
  sortDirection: "desc",
322
342
  });
323
343
  (0, chai_1.expect)(response.status).to.equal(200);
324
- const data = (await response.json());
344
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
325
345
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
326
346
  const sortedNames = data.results.map((product) => product.name);
327
347
  const expectedNames = _getSortedField(defaultProductDataset, "name", "desc");
328
348
  (0, chai_1.expect)(sortedNames).to.deep.equal(expectedNames);
329
349
  }
330
- async function sortByPriceAscending() {
331
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
350
+ async function expectPriceAscending() {
351
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
332
352
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
333
353
  sortKey: "price",
334
354
  sortDirection: "asc",
335
355
  });
336
356
  (0, chai_1.expect)(response.status).to.equal(200);
337
- const data = (await response.json());
357
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
338
358
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
339
359
  const sortedPrices = data.results.map((product) => product.price);
340
360
  const expectedPrices = _getSortedField(defaultProductDataset, "price", "asc");
341
361
  (0, chai_1.expect)(sortedPrices).to.deep.equal(expectedPrices);
342
362
  }
343
- async function sortByPriceDescending() {
344
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
363
+ async function expectPriceDescending() {
364
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
345
365
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
346
366
  sortKey: "price",
347
367
  sortDirection: "desc",
348
368
  });
349
369
  (0, chai_1.expect)(response.status).to.equal(200);
350
- const data = (await response.json());
370
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
351
371
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
352
372
  const sortedPrices = data.results.map((product) => product.price);
353
373
  const expectedPrices = _getSortedField(defaultProductDataset, "price", "desc");
354
374
  (0, chai_1.expect)(sortedPrices).to.deep.equal(expectedPrices);
355
375
  }
356
- async function sortByAddedAtAscending() {
357
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
376
+ async function expectAddedAtAscending() {
377
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
358
378
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
359
379
  sortKey: "addedAt",
360
380
  sortDirection: "asc",
361
381
  });
362
382
  (0, chai_1.expect)(response.status).to.equal(200);
363
- const data = (await response.json());
383
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
364
384
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
365
385
  const sortedDates = data.results.map((product) => new Date(product.addedAt).getTime());
366
386
  const expectedDates = _getSortedField(defaultProductDataset, "addedAt", "asc")
@@ -368,14 +388,14 @@ async function sortByAddedAtAscending() {
368
388
  .map((date) => date.getTime());
369
389
  (0, chai_1.expect)(sortedDates).to.deep.equal(expectedDates);
370
390
  }
371
- async function sortByAddedAtDescending() {
372
- await _createDataController((0, utils_1.getFunctionName)(), { list: interface_data_api_1.DefaultRoutes.List }, defaultProductDataset);
391
+ async function expectAddedAtDescending() {
392
+ await _createDataController((0, utils_1.getFunctionName)(), { list: index_1.DefaultRoutes.List }, defaultProductDataset);
373
393
  const response = await (0, utils_1.listRequest)((0, utils_1.getFunctionName)(), {
374
394
  sortKey: "addedAt",
375
395
  sortDirection: "desc",
376
396
  });
377
397
  (0, chai_1.expect)(response.status).to.equal(200);
378
- const data = (await response.json());
398
+ const data = await (0, http_1.readJson)(productListedListSchema, response);
379
399
  (0, chai_1.expect)(data.results).to.have.length(defaultProductDataset.length);
380
400
  const sortedDates = data.results.map((product) => new Date(product.addedAt).getTime());
381
401
  const expectedDates = _getSortedField(defaultProductDataset, "addedAt", "desc")