@jskit-ai/kernel 0.1.55 → 0.1.56

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 (55) hide show
  1. package/package.json +3 -2
  2. package/server/actions/ActionRuntimeServiceProvider.test.js +23 -15
  3. package/server/http/lib/kernel.test.js +447 -0
  4. package/server/http/lib/routeRegistration.js +236 -15
  5. package/server/http/lib/routeTransport.js +126 -0
  6. package/server/http/lib/routeValidator.js +133 -198
  7. package/server/http/lib/routeValidator.test.js +385 -278
  8. package/server/http/lib/router.js +17 -2
  9. package/server/platform/providerRuntime.test.js +7 -7
  10. package/server/runtime/bootBootstrapRoutes.js +2 -18
  11. package/server/runtime/bootBootstrapRoutes.test.js +5 -14
  12. package/server/runtime/fastifyBootstrap.js +119 -0
  13. package/server/runtime/fastifyBootstrap.test.js +119 -1
  14. package/server/runtime/moduleConfig.js +32 -62
  15. package/server/runtime/moduleConfig.test.js +48 -24
  16. package/server/support/pageTargets.js +15 -9
  17. package/server/support/pageTargets.test.js +1 -1
  18. package/shared/actions/actionContributorHelpers.js +5 -11
  19. package/shared/actions/actionDefinitions.js +37 -150
  20. package/shared/actions/actionDefinitions.test.js +117 -136
  21. package/shared/actions/policies.js +25 -169
  22. package/shared/actions/policies.test.js +76 -87
  23. package/shared/actions/registry.test.js +24 -50
  24. package/shared/support/crudFieldContract.js +322 -0
  25. package/shared/support/crudFieldContract.test.js +67 -0
  26. package/shared/support/crudListFilters.js +582 -38
  27. package/shared/support/crudListFilters.test.js +178 -8
  28. package/shared/support/crudLookup.js +14 -7
  29. package/shared/support/crudLookup.test.js +91 -66
  30. package/shared/support/shellLayoutTargets.test.js +1 -1
  31. package/shared/validators/composeSchemaDefinitions.js +53 -0
  32. package/shared/validators/composeSchemaDefinitions.test.js +156 -0
  33. package/shared/validators/createCursorListValidator.js +22 -35
  34. package/shared/validators/createCursorListValidator.test.js +22 -23
  35. package/shared/validators/cursorPaginationQueryValidator.js +14 -24
  36. package/shared/validators/cursorPaginationQueryValidator.test.js +18 -8
  37. package/shared/validators/htmlTimeSchemas.js +6 -4
  38. package/shared/validators/index.js +15 -7
  39. package/shared/validators/jsonRestSchemaSupport.js +139 -0
  40. package/shared/validators/mergeObjectSchemas.js +44 -6
  41. package/shared/validators/mergeObjectSchemas.test.js +60 -35
  42. package/shared/validators/recordIdParamsValidator.js +19 -52
  43. package/shared/validators/recordIdParamsValidator.test.js +13 -8
  44. package/shared/validators/resourceRequiredMetadata.js +3 -3
  45. package/shared/validators/resourceRequiredMetadata.test.js +29 -16
  46. package/shared/validators/schemaDefinitions.js +126 -0
  47. package/shared/validators/schemaDefinitions.test.js +51 -0
  48. package/shared/validators/schemaPayloadValidation.js +65 -0
  49. package/test/barrelExposure.test.js +30 -0
  50. package/test/routeInputContractGuard.test.js +10 -6
  51. package/shared/validators/mergeValidators.js +0 -89
  52. package/shared/validators/mergeValidators.test.js +0 -116
  53. package/shared/validators/nestValidator.js +0 -53
  54. package/shared/validators/nestValidator.test.js +0 -60
  55. package/shared/validators/settingsFieldNormalization.js +0 -40
@@ -0,0 +1,67 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { buildCrudOperationSchemaFields } from "./crudFieldContract.js";
5
+
6
+ test("buildCrudOperationSchemaFields projects operation-aware field definitions without losing metadata", () => {
7
+ const serializer = () => "serialized";
8
+ const fields = Object.freeze({
9
+ name: Object.freeze({
10
+ type: "string",
11
+ maxLength: 190,
12
+ search: true,
13
+ ui: Object.freeze({
14
+ label: "Name"
15
+ }),
16
+ operations: Object.freeze({
17
+ output: Object.freeze({
18
+ required: true
19
+ }),
20
+ create: Object.freeze({
21
+ required: true
22
+ }),
23
+ patch: Object.freeze({
24
+ required: false
25
+ })
26
+ })
27
+ }),
28
+ createdAt: Object.freeze({
29
+ type: "dateTime",
30
+ storage: Object.freeze({
31
+ column: "created_at",
32
+ writeSerializer: "datetime-utc",
33
+ serialize: serializer
34
+ }),
35
+ operations: Object.freeze({
36
+ output: Object.freeze({
37
+ required: true
38
+ })
39
+ })
40
+ }),
41
+ workspaceId: Object.freeze({
42
+ type: "id",
43
+ required: true,
44
+ operations: Object.freeze({})
45
+ })
46
+ });
47
+
48
+ const outputFields = buildCrudOperationSchemaFields(fields, "output");
49
+ const createFields = buildCrudOperationSchemaFields(fields, "create");
50
+
51
+ assert.deepEqual(Object.keys(outputFields).sort(), ["createdAt", "name"]);
52
+ assert.deepEqual(Object.keys(createFields).sort(), ["name"]);
53
+
54
+ assert.equal(outputFields.name.required, true);
55
+ assert.equal(outputFields.name.maxLength, 190);
56
+ assert.equal(outputFields.name.search, true);
57
+ assert.equal(outputFields.name.ui.label, "Name");
58
+ assert.equal(Object.hasOwn(outputFields.name, "operations"), false);
59
+
60
+ assert.equal(outputFields.createdAt.storage.column, "created_at");
61
+ assert.equal(outputFields.createdAt.storage.writeSerializer, "datetime-utc");
62
+ assert.equal(outputFields.createdAt.storage.serialize, serializer);
63
+
64
+ assert.equal(createFields.name.required, true);
65
+ assert.equal(fields.name.operations.output.required, true);
66
+ assert.equal(Object.hasOwn(fields.name, "operations"), true);
67
+ });