json-rest-api 1.0.20 → 1.0.22

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 (173) hide show
  1. package/audit/00-charter.md +103 -0
  2. package/audit/01-scope-map.md +84 -0
  3. package/audit/02-coverage-matrix.csv +174 -0
  4. package/audit/03-invariants.md +123 -0
  5. package/audit/04-standards-rubric.md +56 -0
  6. package/audit/05-competitor-rubric.md +77 -0
  7. package/audit/06-findings.md +160 -0
  8. package/audit/07-risk-register.csv +10 -0
  9. package/audit/08-remediation-roadmap.md +177 -0
  10. package/audit/09-signoff-check.md +23 -0
  11. package/audit/10-final-synthesis.md +29 -0
  12. package/audit/evidence/code/all-files-json-rest-api.txt +168 -0
  13. package/audit/evidence/code/all-files-json-rest-schema.txt +12 -0
  14. package/audit/evidence/code/boundary-leak-checks.txt +72 -0
  15. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__bulk-operations-plugin.js.txt +480 -0
  16. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__express-plugin.js.txt +532 -0
  17. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__busboy-detector.js.txt +175 -0
  18. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__formidable-detector.js.txt +138 -0
  19. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__request-helpers.js.txt +222 -0
  20. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__file-handling-plugin.js.txt +342 -0
  21. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__dbTablesOperations.js.txt +304 -0
  22. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__fractional-positioning.js.txt +188 -0
  23. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__compile-schemas.js.txt +336 -0
  24. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__connectors-query-parser.js.txt +165 -0
  25. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-capabilities.js.txt +265 -0
  26. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-value-normalizers.js.txt +369 -0
  27. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__default-data-helpers.js.txt +72 -0
  28. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__field-utils.js.txt +139 -0
  29. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-constants.js.txt +45 -0
  30. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-field-helpers.js.txt +396 -0
  31. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-json-api-transformers.js.txt +162 -0
  32. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__payload-validators.js.txt +1314 -0
  33. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__schema-helpers.js.txt +488 -0
  34. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__scope-validations.js.txt +484 -0
  35. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__simplified-helpers.js.txt +857 -0
  36. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-cross-table-search.js.txt +565 -0
  37. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-json-api-transformers-querying.js.txt +485 -0
  38. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-pagination-helpers.js.txt +560 -0
  39. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-process-includes.js.txt +167 -0
  40. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers-base.js.txt +109 -0
  41. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers.js.txt +1064 -0
  42. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-relationship-includes.js.txt +1983 -0
  43. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-window-queries.js.txt +328 -0
  44. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__url-helpers.js.txt +119 -0
  45. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__storage__storage-adapter.js.txt +160 -0
  46. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__many-to-many-manipulations.js.txt +300 -0
  47. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__relationship-processor.js.txt +245 -0
  48. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-access.js.txt +459 -0
  49. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-cors-plugin.js.txt +237 -0
  50. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-knex-plugin.js.txt +1135 -0
  51. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-multihome-plugin.js.txt +314 -0
  52. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__compile-resource-schemas.js.txt +7 -0
  53. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-relationship-routes.js.txt +71 -0
  54. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-scope-routes.js.txt +102 -0
  55. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__turn-scope-init-into-vars.js.txt +49 -0
  56. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__validate-include-configurations.js.txt +39 -0
  57. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__add-route.js.txt +23 -0
  58. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__check-permissions.js.txt +13 -0
  59. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__common.js.txt +639 -0
  60. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete-relationship.js.txt +117 -0
  61. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete.js.txt +104 -0
  62. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__enrich-attributes.js.txt +199 -0
  63. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-related.js.txt +353 -0
  64. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-relationship.js.txt +61 -0
  65. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get.js.txt +184 -0
  66. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch-relationship.js.txt +55 -0
  67. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch.js.txt +191 -0
  68. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post-relationship.js.txt +110 -0
  69. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post.js.txt +168 -0
  70. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__put.js.txt +253 -0
  71. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__query.js.txt +207 -0
  72. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__release.js.txt +12 -0
  73. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin.js.txt +165 -0
  74. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-positioning-plugin.js.txt +668 -0
  75. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__socketio-plugin.js.txt +621 -0
  76. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__local-storage.js.txt +218 -0
  77. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__s3-storage.js.txt +124 -0
  78. package/audit/evidence/code/critical-pass1/json-rest-schema__src__CorePlugin.js.txt +269 -0
  79. package/audit/evidence/code/critical-pass1/json-rest-schema__src__Schema.js.txt +242 -0
  80. package/audit/evidence/code/critical-pass1/json-rest-schema__src__index.js.txt +77 -0
  81. package/audit/evidence/code/critical-pass1-risk-keywords.txt +238 -0
  82. package/audit/evidence/code/critical-pass1-summary.csv +67 -0
  83. package/audit/evidence/code/critical-pass2-summary.csv +67 -0
  84. package/audit/evidence/code/early-silent-zones-no-test-token.txt +57 -0
  85. package/audit/evidence/code/error-model-signals.txt +98 -0
  86. package/audit/evidence/code/git-files-json-rest-api.txt +171 -0
  87. package/audit/evidence/code/git-files-json-rest-schema.txt +27 -0
  88. package/audit/evidence/code/hook-flow-signals.txt +282 -0
  89. package/audit/evidence/code/idproperty-signals.txt +157 -0
  90. package/audit/evidence/code/import-cycles-non-anyapi.txt +3 -0
  91. package/audit/evidence/code/import-hotspots-non-anyapi.txt +96 -0
  92. package/audit/evidence/code/imports-json-rest-api.txt +354 -0
  93. package/audit/evidence/code/imports-json-rest-schema.txt +15 -0
  94. package/audit/evidence/code/in-scope-files-json-rest-api.txt +160 -0
  95. package/audit/evidence/code/in-scope-files-json-rest-schema.txt +13 -0
  96. package/audit/evidence/code/non-anyapi-core-files.txt +101 -0
  97. package/audit/evidence/code/permission-signals.txt +193 -0
  98. package/audit/evidence/code/query-include-signals.txt +687 -0
  99. package/audit/evidence/code/transaction-signals.txt +28 -0
  100. package/audit/evidence/code/validation-signals.txt +650 -0
  101. package/audit/evidence/code/write-path-signals.txt +61 -0
  102. package/audit/evidence/docs/docs-claims-signals.txt +1075 -0
  103. package/audit/evidence/docs/schema-docs-claims-signals.txt +179 -0
  104. package/audit/evidence/external/corpus-freeze.md +21 -0
  105. package/audit/evidence/external/npm-competitor-metadata.txt +70 -0
  106. package/audit/evidence/external/npm-download-signals.txt +23 -0
  107. package/audit/evidence/external/npm-jsonapi-server.txt +8 -0
  108. package/audit/evidence/external/npm-modern-jsonapi-metadata.txt +38 -0
  109. package/audit/evidence/external/readme-fortune-signals.txt +26 -0
  110. package/audit/evidence/external/readme-fortune.md +165 -0
  111. package/audit/evidence/external/readme-json-api-serializer-signals.txt +80 -0
  112. package/audit/evidence/external/readme-json-api-serializer.md +690 -0
  113. package/audit/evidence/external/readme-jsonapi-serde-server-signals.txt +0 -0
  114. package/audit/evidence/external/readme-jsonapi-serde-server.md +22 -0
  115. package/audit/evidence/external/readme-jsonapi-serializer-signals.txt +63 -0
  116. package/audit/evidence/external/readme-jsonapi-serializer.md +315 -0
  117. package/audit/evidence/external/readme-jsonapi-server-signals.txt +19 -0
  118. package/audit/evidence/external/readme-jsonapi-server.md +104 -0
  119. package/audit/evidence/external/readme-nestjs-json-api-signals.txt +4 -0
  120. package/audit/evidence/external/readme-nestjs-json-api.md +94 -0
  121. package/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt +47 -0
  122. package/audit/evidence/external/readme-yaser-json-api-nestjs.md +447 -0
  123. package/audit/evidence/external/standard-jsonapi-snippets.txt +84 -0
  124. package/audit/evidence/external/standard-rfc-snippets.txt +168 -0
  125. package/audit/evidence/external/standards-sources.txt +6 -0
  126. package/audit/evidence/runtime/baseline-commits.txt +2 -0
  127. package/audit/evidence/runtime/db-adapter-assumptions.txt +3 -0
  128. package/audit/evidence/runtime/environment.txt +4 -0
  129. package/audit/evidence/runtime/invariant-runtime-mapping.md +38 -0
  130. package/audit/evidence/runtime/probe-patch-relationship-error.exitcode +1 -0
  131. package/audit/evidence/runtime/probe-patch-relationship-error.log +76 -0
  132. package/audit/evidence/runtime/probe-patch-relationship-error.mjs +67 -0
  133. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.exitcode +1 -0
  134. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.log +62 -0
  135. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.mjs +47 -0
  136. package/audit/evidence/runtime/test-exitcodes.txt +4 -0
  137. package/audit/evidence/runtime/test-summary.md +107 -0
  138. package/audit/evidence/runtime/trace-anchors.txt +61 -0
  139. package/audit/evidence/tests/access-multitenancy-test-signals.txt +125 -0
  140. package/audit/evidence/tests/failing-tests-summary.txt +25 -0
  141. package/audit/evidence/tests/npm-test-json-rest-api.exitcode +1 -0
  142. package/audit/evidence/tests/npm-test-json-rest-api.log +5885 -0
  143. package/audit/evidence/tests/npm-test-json-rest-schema.exitcode +1 -0
  144. package/audit/evidence/tests/npm-test-json-rest-schema.log +356 -0
  145. package/audit/evidence/tests/query-include-test-signals.txt +948 -0
  146. package/audit/evidence/tests/relationship-test-signals.txt +223 -0
  147. package/audit/evidence/tests/skipped-tests.txt +10 -0
  148. package/audit/evidence/tests/test-suite-list-non-anyapi.txt +30 -0
  149. package/audit/evidence/tests/test-suite-list.txt +32 -0
  150. package/audit/subsystems/docs-drift.md +49 -0
  151. package/audit/subsystems/pass2-cross-review.md +131 -0
  152. package/audit/subsystems/plugins-access.md +51 -0
  153. package/audit/subsystems/plugins-bulk.md +50 -0
  154. package/audit/subsystems/plugins-cors.md +48 -0
  155. package/audit/subsystems/plugins-file.md +53 -0
  156. package/audit/subsystems/plugins-multihome.md +50 -0
  157. package/audit/subsystems/plugins-positioning.md +54 -0
  158. package/audit/subsystems/plugins-socketio.md +50 -0
  159. package/audit/subsystems/query-engine.md +61 -0
  160. package/audit/subsystems/relationships.md +55 -0
  161. package/audit/subsystems/rest-orchestration.md +66 -0
  162. package/audit/subsystems/schema-core.md +64 -0
  163. package/audit/subsystems/storage-knex.md +57 -0
  164. package/audit/subsystems/tests.md +48 -0
  165. package/audit/subsystems/transport-express.md +55 -0
  166. package/audit/traces/trace-read-get.md +22 -0
  167. package/audit/traces/trace-read-query.md +25 -0
  168. package/audit/traces/trace-relationship-endpoints.md +31 -0
  169. package/audit/traces/trace-write-delete.md +17 -0
  170. package/audit/traces/trace-write-patch.md +26 -0
  171. package/audit/traces/trace-write-post.md +22 -0
  172. package/audit/traces/trace-write-put.md +23 -0
  173. package/package.json +5 -5
@@ -0,0 +1,356 @@
1
+
2
+ > json-rest-schema@1.0.12 test
3
+ > node --test tests.js test-knex-table-real.js
4
+
5
+ TAP version 13
6
+ # file:///home/merc/Development/current/json-rest-schema/test-knex-table-real.js:8
7
+ # import { createSchema, createKnexTable, generateKnexMigration } from './src/index.js'
8
+ # ^^^^^^^^^^^^^^^
9
+ # SyntaxError: The requested module './src/index.js' does not provide an export named 'createKnexTable'
10
+ # at ModuleJob._instantiate (node:internal/modules/esm/module_job:175:21)
11
+ # at async ModuleJob.run (node:internal/modules/esm/module_job:258:5)
12
+ # at async ModuleLoader.import (node:internal/modules/esm/loader:540:24)
13
+ # at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)
14
+ # Node.js v20.19.0
15
+ # Subtest: /home/merc/Development/current/json-rest-schema/test-knex-table-real.js
16
+ not ok 1 - /home/merc/Development/current/json-rest-schema/test-knex-table-real.js
17
+ ---
18
+ duration_ms: 62.657109
19
+ location: '/home/merc/Development/current/json-rest-schema/test-knex-table-real.js:1:1'
20
+ failureType: 'testCodeFailure'
21
+ exitCode: 1
22
+ signal: ~
23
+ error: 'test failed'
24
+ code: 'ERR_TEST_FAILURE'
25
+ ...
26
+ # Subtest: 1. Core API (`createSchema`)
27
+ # Subtest: should export a function `createSchema`
28
+ ok 1 - should export a function `createSchema`
29
+ ---
30
+ duration_ms: 1.188615
31
+ ...
32
+ # Subtest: should have `use`, `addType`, and `addValidator` methods on the factory
33
+ ok 2 - should have `use`, `addType`, and `addValidator` methods on the factory
34
+ ---
35
+ duration_ms: 0.154363
36
+ ...
37
+ # Subtest: `createSchema(structure)` should return an instance of Schema
38
+ ok 3 - `createSchema(structure)` should return an instance of Schema
39
+ ---
40
+ duration_ms: 0.203725
41
+ ...
42
+ # Subtest: should allow adding a type handler and using it
43
+ ok 4 - should allow adding a type handler and using it
44
+ ---
45
+ duration_ms: 0.557529
46
+ ...
47
+ # Subtest: should allow adding a validator and using it
48
+ ok 5 - should allow adding a validator and using it
49
+ ---
50
+ duration_ms: 0.42148
51
+ ...
52
+ # Subtest: should throw when adding a non-function type handler
53
+ ok 6 - should throw when adding a non-function type handler
54
+ ---
55
+ duration_ms: 0.45361
56
+ ...
57
+ # Subtest: should throw when adding a non-function validator handler
58
+ ok 7 - should throw when adding a non-function validator handler
59
+ ---
60
+ duration_ms: 0.187978
61
+ ...
62
+ # Subtest: should throw when using a plugin without an `install` method
63
+ ok 8 - should throw when using a plugin without an `install` method
64
+ ---
65
+ duration_ms: 0.177465
66
+ ...
67
+ 1..8
68
+ ok 2 - 1. Core API (`createSchema`)
69
+ ---
70
+ duration_ms: 5.199871
71
+ type: 'suite'
72
+ ...
73
+ # Subtest: 2. Core Validation Logic (`Schema.js`)
74
+ # Subtest: should return no errors for a valid object
75
+ ok 1 - should return no errors for a valid object
76
+ ---
77
+ duration_ms: 0.431981
78
+ ...
79
+ # Subtest: should return a `FIELD_NOT_ALLOWED` error for spurious fields
80
+ ok 2 - should return a `FIELD_NOT_ALLOWED` error for spurious fields
81
+ ---
82
+ duration_ms: 0.28245
83
+ ...
84
+ # Subtest: should correctly handle the `required` validator
85
+ ok 3 - should correctly handle the `required` validator
86
+ ---
87
+ duration_ms: 0.213408
88
+ ...
89
+ # Subtest: should return a `NOT_NULLABLE` error if a field is null but not allowed to be
90
+ ok 4 - should return a `NOT_NULLABLE` error if a field is null but not allowed to be
91
+ ---
92
+ duration_ms: 0.246146
93
+ ...
94
+ # Subtest: should allow null if `nullable` is true
95
+ ok 5 - should allow null if `nullable` is true
96
+ ---
97
+ duration_ms: 0.218771
98
+ ...
99
+ # Subtest: should cast empty string to null if `nullOnEmpty` is true
100
+ ok 6 - should cast empty string to null if `nullOnEmpty` is true
101
+ ---
102
+ duration_ms: 0.290184
103
+ ...
104
+ # Subtest: should apply defaultTo values even when the object has validation errors
105
+ ok 7 - should apply defaultTo values even when the object has validation errors
106
+ ---
107
+ duration_ms: 0.295443
108
+ ...
109
+ # Subtest: Validation Options
110
+ # Subtest: `onlyObjectValues`: should only validate fields present in the input object
111
+ ok 1 - `onlyObjectValues`: should only validate fields present in the input object
112
+ ---
113
+ duration_ms: 0.3571
114
+ ...
115
+ # Subtest: `skipFields`: should completely ignore specified fields
116
+ ok 2 - `skipFields`: should completely ignore specified fields
117
+ ---
118
+ duration_ms: 0.298076
119
+ ...
120
+ # Subtest: `skipParams`: should skip specific validators on a field
121
+ ok 3 - `skipParams`: should skip specific validators on a field
122
+ ---
123
+ duration_ms: 0.427076
124
+ ...
125
+ 1..3
126
+ ok 8 - Validation Options
127
+ ---
128
+ duration_ms: 1.326774
129
+ type: 'suite'
130
+ ...
131
+ # Subtest: `cleanup` method should work correctly
132
+ ok 9 - `cleanup` method should work correctly
133
+ ---
134
+ duration_ms: 1.514896
135
+ ...
136
+ 1..9
137
+ ok 3 - 2. Core Validation Logic (`Schema.js`)
138
+ ---
139
+ duration_ms: 5.311977
140
+ type: 'suite'
141
+ ...
142
+ # Subtest: 3. Core Plugin: Type Handlers
143
+ # Subtest: type:'none' should process input 123 to 123
144
+ ok 1 - type:'none' should process input 123 to 123
145
+ ---
146
+ duration_ms: 0.503625
147
+ ...
148
+ # Subtest: type:'none' should process input {"a":1} to {"a":1}
149
+ ok 2 - type:'none' should process input {"a":1} to {"a":1}
150
+ ---
151
+ duration_ms: 0.1565
152
+ ...
153
+ # Subtest: type:'string' should process input " test " to "test"
154
+ ok 3 - type:'string' should process input " test " to "test"
155
+ ---
156
+ duration_ms: 0.127482
157
+ ...
158
+ # Subtest: type:'string' should process input " test " to " test "
159
+ ok 4 - type:'string' should process input " test " to " test "
160
+ ---
161
+ duration_ms: 0.121573
162
+ ...
163
+ # Subtest: type:'string' should process input 123 to "123"
164
+ ok 5 - type:'string' should process input 123 to "123"
165
+ ---
166
+ duration_ms: 0.429618
167
+ ...
168
+ # Subtest: type:'string' should fail for input: null
169
+ ok 6 - type:'string' should fail for input: null
170
+ ---
171
+ duration_ms: 0.123805
172
+ ...
173
+ # Subtest: type:'string' should process input undefined to undefined
174
+ ok 7 - type:'string' should process input undefined to undefined
175
+ ---
176
+ duration_ms: 0.142269
177
+ ...
178
+ # Subtest: type:'string' should fail for input: {}
179
+ ok 8 - type:'string' should fail for input: {}
180
+ ---
181
+ duration_ms: 0.203089
182
+ ...
183
+ # Subtest: type:'number' should process input "42.5" to 42.5
184
+ ok 9 - type:'number' should process input "42.5" to 42.5
185
+ ---
186
+ duration_ms: 0.239855
187
+ ...
188
+ # Subtest: type:'number' should process input "" to 0
189
+ ok 10 - type:'number' should process input "" to 0
190
+ ---
191
+ duration_ms: 0.11886
192
+ ...
193
+ # Subtest: type:'number' should fail for input: null
194
+ ok 11 - type:'number' should fail for input: null
195
+ ---
196
+ duration_ms: 0.107555
197
+ ...
198
+ # Subtest: type:'number' should fail for input: "abc"
199
+ ok 12 - type:'number' should fail for input: "abc"
200
+ ---
201
+ duration_ms: 0.222444
202
+ ...
203
+ # Subtest: type:'timestamp' should process input 1672531200000 to 1672531200000
204
+ ok 13 - type:'timestamp' should process input 1672531200000 to 1672531200000
205
+ ---
206
+ duration_ms: 0.509408
207
+ ...
208
+ # Subtest: type:'timestamp' should process input "0" to null
209
+ ok 14 - type:'timestamp' should process input "0" to null
210
+ ---
211
+ duration_ms: 0.371079
212
+ ...
213
+ # Subtest: type:'timestamp' should fail for input: "abc"
214
+ ok 15 - type:'timestamp' should fail for input: "abc"
215
+ ---
216
+ duration_ms: 0.177614
217
+ ...
218
+ # Subtest: type:'dateTime' should process input "2025-01-01T12:30:00Z" to "2025-01-01T12:30:00.000Z"
219
+ ok 16 - type:'dateTime' should process input "2025-01-01T12:30:00Z" to "2025-01-01T12:30:00.000Z"
220
+ ---
221
+ duration_ms: 0.509069
222
+ ...
223
+ # Subtest: type:'dateTime' should process input "invalid" to null
224
+ ok 17 - type:'dateTime' should process input "invalid" to null
225
+ ---
226
+ duration_ms: 0.372726
227
+ ...
228
+ # Subtest: type:'date' should process input "2025-01-01T12:30:00Z" to "2025-01-01T00:00:00.000Z"
229
+ ok 18 - type:'date' should process input "2025-01-01T12:30:00Z" to "2025-01-01T00:00:00.000Z"
230
+ ---
231
+ duration_ms: 0.644094
232
+ ...
233
+ # Subtest: type:'date' should process input "2025-01-01" to "2025-01-01T00:00:00.000Z"
234
+ ok 19 - type:'date' should process input "2025-01-01" to "2025-01-01T00:00:00.000Z"
235
+ ---
236
+ duration_ms: 0.345422
237
+ ...
238
+ # Subtest: type:'array' should process input "one" to ["one"]
239
+ ok 20 - type:'array' should process input "one" to ["one"]
240
+ ---
241
+ duration_ms: 0.319356
242
+ ...
243
+ # Subtest: type:'array' should process input ["one","two"] to ["one","two"]
244
+ ok 21 - type:'array' should process input ["one","two"] to ["one","two"]
245
+ ---
246
+ duration_ms: 0.227224
247
+ ...
248
+ # Subtest: type:'boolean' should process input "true" to true
249
+ ok 22 - type:'boolean' should process input "true" to true
250
+ ---
251
+ duration_ms: 0.337235
252
+ ...
253
+ # Subtest: type:'boolean' should process input "on" to true
254
+ ok 23 - type:'boolean' should process input "on" to true
255
+ ---
256
+ duration_ms: 0.38783
257
+ ...
258
+ # Subtest: type:'boolean' should process input "false" to false
259
+ ok 24 - type:'boolean' should process input "false" to false
260
+ ---
261
+ duration_ms: 0.151125
262
+ ...
263
+ # Subtest: type:'boolean' should process input 1 to true
264
+ ok 25 - type:'boolean' should process input 1 to true
265
+ ---
266
+ duration_ms: 0.206207
267
+ ...
268
+ # Subtest: type:'boolean' should process input 0 to false
269
+ ok 26 - type:'boolean' should process input 0 to false
270
+ ---
271
+ duration_ms: 0.125641
272
+ ...
273
+ # Subtest: type:'boolean' should process input "no" to false
274
+ ok 27 - type:'boolean' should process input "no" to false
275
+ ---
276
+ duration_ms: 0.210439
277
+ ...
278
+ # Subtest: type:'id' should process input "123" to 123
279
+ ok 28 - type:'id' should process input "123" to 123
280
+ ---
281
+ duration_ms: 0.348163
282
+ ...
283
+ # Subtest: type:'id' should fail for input: "id-123"
284
+ ok 29 - type:'id' should fail for input: "id-123"
285
+ ---
286
+ duration_ms: 0.308776
287
+ ...
288
+ # Subtest: type:'serialize' should process an object to a string
289
+ ok 30 - type:'serialize' should process an object to a string
290
+ ---
291
+ duration_ms: 0.534748
292
+ ...
293
+ # Subtest: type:`serialize` should handle circular references
294
+ ok 31 - type:`serialize` should handle circular references
295
+ ---
296
+ duration_ms: 1.331675
297
+ ...
298
+ 1..31
299
+ ok 4 - 3. Core Plugin: Type Handlers
300
+ ---
301
+ duration_ms: 11.36291
302
+ type: 'suite'
303
+ ...
304
+ # Subtest: 4. Core Plugin: Validator Handlers
305
+ # Subtest: `min`/`max` validators should work for numbers, `minLength`/`maxLength` for strings
306
+ ok 1 - `min`/`max` validators should work for numbers, `minLength`/`maxLength` for strings
307
+ ---
308
+ duration_ms: 1.125145
309
+ ...
310
+ # Subtest: `validator` should work with a custom function (sync and async)
311
+ ok 2 - `validator` should work with a custom function (sync and async)
312
+ ---
313
+ duration_ms: 46.715326
314
+ ...
315
+ # Subtest: `uppercase`/`lowercase` should transform strings
316
+ ok 3 - `uppercase`/`lowercase` should transform strings
317
+ ---
318
+ duration_ms: 0.547645
319
+ ...
320
+ # Subtest: `length` should truncate strings and error on long numbers
321
+ ok 4 - `length` should truncate strings and error on long numbers
322
+ ---
323
+ duration_ms: 0.409615
324
+ ...
325
+ # Subtest: `notEmpty` should fail on empty strings
326
+ ok 5 - `notEmpty` should fail on empty strings
327
+ ---
328
+ duration_ms: 0.339048
329
+ ...
330
+ 1..5
331
+ ok 5 - 4. Core Plugin: Validator Handlers
332
+ ---
333
+ duration_ms: 49.558661
334
+ type: 'suite'
335
+ ...
336
+ # Subtest: 5. Extensibility: Custom Plugins
337
+ # Subtest: should allow defining and using a custom plugin
338
+ ok 1 - should allow defining and using a custom plugin
339
+ ---
340
+ duration_ms: 0.770699
341
+ ...
342
+ 1..1
343
+ ok 6 - 5. Extensibility: Custom Plugins
344
+ ---
345
+ duration_ms: 0.913155
346
+ type: 'suite'
347
+ ...
348
+ 1..6
349
+ # tests 57
350
+ # suites 6
351
+ # pass 56
352
+ # fail 1
353
+ # cancelled 0
354
+ # skipped 0
355
+ # todo 0
356
+ # duration_ms 163.644013