json-rest-api 1.0.22 → 1.0.24

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 (290) hide show
  1. package/CLAUDE.md +1 -2
  2. package/JSKIT_BACKEND_MIGRATION_TRACKER.txt +180 -0
  3. package/README.md +22 -1
  4. package/SINGLE_VALIDATION_CONTRACT_TODO.txt +172 -0
  5. package/docs/API.md +196 -38
  6. package/docs/COMPARISON.md +2 -2
  7. package/docs/GUIDE/GUIDE_1_Initial_Setup.md +111 -5
  8. package/docs/GUIDE/GUIDE_2_2_Manipulating_And_Searching_Tables.md +5 -1
  9. package/docs/GUIDE/GUIDE_2_7_Pagination_And_Ordering.md +3 -1
  10. package/docs/GUIDE/GUIDE_2_8_Effects_of_PUT_and_PATCH.md +12 -60
  11. package/docs/GUIDE/GUIDE_2_Data_And_Relations.md +2 -2
  12. package/docs/GUIDE/GUIDE_3_Field_Transformations.md +5 -1
  13. package/docs/GUIDE/GUIDE_7_Hooks_Data_Management_And_Plugins.md +2 -0
  14. package/docs/GUIDE/GUIDE_X_Autofiltering.md +355 -0
  15. package/docs/GUIDE/GUIDE_X_Fastify.md +78 -0
  16. package/docs/GUIDE/GUIDE_X_Knex_Schema_And_Migrations.md +370 -0
  17. package/docs/GUIDE/GUIDE_X_Query_Projections.md +159 -0
  18. package/docs/GUIDE/GUIDE_X_Writing_Plugins.md +199 -0
  19. package/docs/GUIDE/index.md +18 -9
  20. package/docs/QUICKSTART.md +5 -1
  21. package/docs/index.md +1 -1
  22. package/index.js +3 -2
  23. package/lib/enhanced-logger.js +1 -1
  24. package/package.json +6 -2
  25. package/plugins/core/bulk-operations-plugin.js +26 -34
  26. package/plugins/core/connectors/express-plugin.js +97 -190
  27. package/plugins/core/connectors/fastify-plugin.js +206 -0
  28. package/plugins/core/connectors/lib/busboy-detector.js +4 -4
  29. package/plugins/core/connectors/lib/connector-core.js +195 -0
  30. package/plugins/core/connectors/lib/transport-http-helpers.js +122 -0
  31. package/plugins/core/connectors/lib/transport-route-schemas.js +92 -0
  32. package/plugins/core/lib/anyapi/schema-utils.js +43 -4
  33. package/plugins/core/lib/anyapi/utils/descriptor-helpers.js +4 -1
  34. package/plugins/core/lib/dbIntrospection.js +1078 -0
  35. package/plugins/core/lib/dbTablesOperations.js +1111 -160
  36. package/plugins/core/lib/querying/knex-cross-table-search.js +0 -7
  37. package/plugins/core/lib/querying/knex-json-api-transformers-querying.js +5 -3
  38. package/plugins/core/lib/querying/knex-process-includes.js +3 -4
  39. package/plugins/core/lib/querying/knex-query-helpers.js +21 -76
  40. package/plugins/core/lib/querying/knex-relationship-includes.js +468 -215
  41. package/plugins/core/lib/querying/query-builder-utils.js +19 -0
  42. package/plugins/core/lib/querying/query-field-sort-helpers.js +135 -0
  43. package/plugins/core/lib/querying/sort-helpers.js +33 -0
  44. package/plugins/core/lib/querying/storage-adapter-utils.js +51 -0
  45. package/plugins/core/lib/querying/url-helpers.js +8 -2
  46. package/plugins/core/lib/querying-writing/compile-schemas.js +20 -5
  47. package/plugins/core/lib/querying-writing/knex-field-helpers.js +83 -14
  48. package/plugins/core/lib/querying-writing/knex-json-api-transformers.js +13 -12
  49. package/plugins/core/lib/querying-writing/query-field-helpers.js +88 -0
  50. package/plugins/core/lib/querying-writing/request-contracts.js +590 -0
  51. package/plugins/core/lib/querying-writing/resource-id-normalization.js +131 -0
  52. package/plugins/core/lib/querying-writing/schema-helpers.js +0 -2
  53. package/plugins/core/lib/querying-writing/simplified-helpers.js +4 -11
  54. package/plugins/core/lib/storage/canonical-storage-mapping.js +133 -0
  55. package/plugins/core/lib/storage/storage-adapter.js +82 -4
  56. package/plugins/core/lib/storage/storage-mapping.js +274 -0
  57. package/plugins/core/lib/writing/many-to-many-manipulations.js +4 -2
  58. package/plugins/core/rest-api-anyapi-knex-plugin.js +531 -312
  59. package/plugins/core/rest-api-autofilter-plugin.js +414 -0
  60. package/plugins/core/rest-api-knex-plugin.js +271 -226
  61. package/plugins/core/rest-api-plugin-hooks/register-relationship-routes.js +10 -5
  62. package/plugins/core/rest-api-plugin-hooks/register-scope-routes.js +12 -6
  63. package/plugins/core/rest-api-plugin-hooks/turn-scope-init-into-vars.js +1 -0
  64. package/plugins/core/rest-api-plugin-methods/apply-query-filters.js +41 -0
  65. package/plugins/core/rest-api-plugin-methods/common.js +148 -92
  66. package/plugins/core/rest-api-plugin-methods/delete-relationship.js +11 -2
  67. package/plugins/core/rest-api-plugin-methods/delete.js +6 -1
  68. package/plugins/core/rest-api-plugin-methods/enrich-attributes.js +6 -1
  69. package/plugins/core/rest-api-plugin-methods/get-related.js +7 -2
  70. package/plugins/core/rest-api-plugin-methods/get-relationship.js +7 -2
  71. package/plugins/core/rest-api-plugin-methods/get.js +29 -14
  72. package/plugins/core/rest-api-plugin-methods/patch-relationship.js +10 -3
  73. package/plugins/core/rest-api-plugin-methods/patch.js +56 -12
  74. package/plugins/core/rest-api-plugin-methods/post-relationship.js +11 -2
  75. package/plugins/core/rest-api-plugin-methods/post.js +21 -8
  76. package/plugins/core/rest-api-plugin-methods/put.js +73 -21
  77. package/plugins/core/rest-api-plugin-methods/query.js +15 -53
  78. package/plugins/core/rest-api-plugin-methods/release.js +0 -2
  79. package/plugins/core/rest-api-plugin.js +6 -0
  80. package/plugins/core/rest-api-positioning-plugin.js +2 -5
  81. package/plugins/core/rest-api-query-projections-plugin.js +130 -0
  82. package/plugins/core/socketio-plugin.js +1 -4
  83. package/plugins/storage/local-storage.js +1 -1
  84. package/plugins/storage/s3-storage.js +5 -2
  85. package/quickTest.js +1 -0
  86. package/scripts/run-docs.js +80 -84
  87. package/test-debug.js +1 -1
  88. package/tests/README.md +7 -0
  89. package/tests/anyapi-basic.test.js +3 -0
  90. package/tests/autofilter.test.js +463 -0
  91. package/tests/custom-id-mysql-returning-fallback.test.js +128 -0
  92. package/tests/custom-id-simplified-post.test.js +75 -0
  93. package/tests/custom-idproperty-relationships.test.js +33 -0
  94. package/tests/db-introspection.test.js +521 -0
  95. package/tests/db-table-operations.test.js +786 -0
  96. package/tests/fastify-plugin.test.js +156 -0
  97. package/tests/field-getters.test.js +1 -2
  98. package/tests/field-setters.test.js +0 -4
  99. package/tests/fixtures/api-configs.js +278 -176
  100. package/tests/helpers/fake-fastify.js +99 -0
  101. package/tests/http-connectors-parity.test.js +235 -0
  102. package/tests/id-normalization.test.js +444 -0
  103. package/tests/logical-id-write-validation.test.js +151 -0
  104. package/tests/pagination-cursor-multifield.test.js +11 -11
  105. package/tests/projected-fields.test.js +319 -0
  106. package/tests/relationships.test.js +3 -3
  107. package/tests/searchschema-knex-behavior.test.js +187 -0
  108. package/tests/searchschema-merge.test.js +21 -69
  109. package/tests/storage-mapping.test.js +259 -0
  110. package/audit/00-charter.md +0 -103
  111. package/audit/01-scope-map.md +0 -84
  112. package/audit/02-coverage-matrix.csv +0 -174
  113. package/audit/03-invariants.md +0 -123
  114. package/audit/04-standards-rubric.md +0 -56
  115. package/audit/05-competitor-rubric.md +0 -77
  116. package/audit/06-findings.md +0 -160
  117. package/audit/07-risk-register.csv +0 -10
  118. package/audit/08-remediation-roadmap.md +0 -177
  119. package/audit/09-signoff-check.md +0 -23
  120. package/audit/10-final-synthesis.md +0 -29
  121. package/audit/evidence/code/all-files-json-rest-api.txt +0 -168
  122. package/audit/evidence/code/all-files-json-rest-schema.txt +0 -12
  123. package/audit/evidence/code/boundary-leak-checks.txt +0 -72
  124. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__bulk-operations-plugin.js.txt +0 -480
  125. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__express-plugin.js.txt +0 -532
  126. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__busboy-detector.js.txt +0 -175
  127. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__formidable-detector.js.txt +0 -138
  128. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__request-helpers.js.txt +0 -222
  129. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__file-handling-plugin.js.txt +0 -342
  130. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__dbTablesOperations.js.txt +0 -304
  131. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__fractional-positioning.js.txt +0 -188
  132. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__compile-schemas.js.txt +0 -336
  133. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__connectors-query-parser.js.txt +0 -165
  134. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-capabilities.js.txt +0 -265
  135. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-value-normalizers.js.txt +0 -369
  136. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__default-data-helpers.js.txt +0 -72
  137. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__field-utils.js.txt +0 -139
  138. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-constants.js.txt +0 -45
  139. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-field-helpers.js.txt +0 -396
  140. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-json-api-transformers.js.txt +0 -162
  141. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__payload-validators.js.txt +0 -1314
  142. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__schema-helpers.js.txt +0 -488
  143. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__scope-validations.js.txt +0 -484
  144. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__simplified-helpers.js.txt +0 -857
  145. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-cross-table-search.js.txt +0 -565
  146. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-json-api-transformers-querying.js.txt +0 -485
  147. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-pagination-helpers.js.txt +0 -560
  148. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-process-includes.js.txt +0 -167
  149. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers-base.js.txt +0 -109
  150. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers.js.txt +0 -1064
  151. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-relationship-includes.js.txt +0 -1983
  152. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-window-queries.js.txt +0 -328
  153. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__url-helpers.js.txt +0 -119
  154. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__storage__storage-adapter.js.txt +0 -160
  155. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__many-to-many-manipulations.js.txt +0 -300
  156. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__relationship-processor.js.txt +0 -245
  157. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-access.js.txt +0 -459
  158. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-cors-plugin.js.txt +0 -237
  159. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-knex-plugin.js.txt +0 -1135
  160. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-multihome-plugin.js.txt +0 -314
  161. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__compile-resource-schemas.js.txt +0 -7
  162. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-relationship-routes.js.txt +0 -71
  163. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-scope-routes.js.txt +0 -102
  164. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__turn-scope-init-into-vars.js.txt +0 -49
  165. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__validate-include-configurations.js.txt +0 -39
  166. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__add-route.js.txt +0 -23
  167. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__check-permissions.js.txt +0 -13
  168. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__common.js.txt +0 -639
  169. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete-relationship.js.txt +0 -117
  170. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete.js.txt +0 -104
  171. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__enrich-attributes.js.txt +0 -199
  172. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-related.js.txt +0 -353
  173. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-relationship.js.txt +0 -61
  174. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get.js.txt +0 -184
  175. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch-relationship.js.txt +0 -55
  176. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch.js.txt +0 -191
  177. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post-relationship.js.txt +0 -110
  178. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post.js.txt +0 -168
  179. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__put.js.txt +0 -253
  180. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__query.js.txt +0 -207
  181. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__release.js.txt +0 -12
  182. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin.js.txt +0 -165
  183. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-positioning-plugin.js.txt +0 -668
  184. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__socketio-plugin.js.txt +0 -621
  185. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__local-storage.js.txt +0 -218
  186. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__s3-storage.js.txt +0 -124
  187. package/audit/evidence/code/critical-pass1/json-rest-schema__src__CorePlugin.js.txt +0 -269
  188. package/audit/evidence/code/critical-pass1/json-rest-schema__src__Schema.js.txt +0 -242
  189. package/audit/evidence/code/critical-pass1/json-rest-schema__src__index.js.txt +0 -77
  190. package/audit/evidence/code/critical-pass1-risk-keywords.txt +0 -238
  191. package/audit/evidence/code/critical-pass1-summary.csv +0 -67
  192. package/audit/evidence/code/critical-pass2-summary.csv +0 -67
  193. package/audit/evidence/code/early-silent-zones-no-test-token.txt +0 -57
  194. package/audit/evidence/code/error-model-signals.txt +0 -98
  195. package/audit/evidence/code/git-files-json-rest-api.txt +0 -171
  196. package/audit/evidence/code/git-files-json-rest-schema.txt +0 -27
  197. package/audit/evidence/code/hook-flow-signals.txt +0 -282
  198. package/audit/evidence/code/idproperty-signals.txt +0 -157
  199. package/audit/evidence/code/import-cycles-non-anyapi.txt +0 -3
  200. package/audit/evidence/code/import-hotspots-non-anyapi.txt +0 -96
  201. package/audit/evidence/code/imports-json-rest-api.txt +0 -354
  202. package/audit/evidence/code/imports-json-rest-schema.txt +0 -15
  203. package/audit/evidence/code/in-scope-files-json-rest-api.txt +0 -160
  204. package/audit/evidence/code/in-scope-files-json-rest-schema.txt +0 -13
  205. package/audit/evidence/code/non-anyapi-core-files.txt +0 -101
  206. package/audit/evidence/code/permission-signals.txt +0 -193
  207. package/audit/evidence/code/query-include-signals.txt +0 -687
  208. package/audit/evidence/code/transaction-signals.txt +0 -28
  209. package/audit/evidence/code/validation-signals.txt +0 -650
  210. package/audit/evidence/code/write-path-signals.txt +0 -61
  211. package/audit/evidence/docs/docs-claims-signals.txt +0 -1075
  212. package/audit/evidence/docs/schema-docs-claims-signals.txt +0 -179
  213. package/audit/evidence/external/corpus-freeze.md +0 -21
  214. package/audit/evidence/external/npm-competitor-metadata.txt +0 -70
  215. package/audit/evidence/external/npm-download-signals.txt +0 -23
  216. package/audit/evidence/external/npm-jsonapi-server.txt +0 -8
  217. package/audit/evidence/external/npm-modern-jsonapi-metadata.txt +0 -38
  218. package/audit/evidence/external/readme-fortune-signals.txt +0 -26
  219. package/audit/evidence/external/readme-fortune.md +0 -165
  220. package/audit/evidence/external/readme-json-api-serializer-signals.txt +0 -80
  221. package/audit/evidence/external/readme-json-api-serializer.md +0 -690
  222. package/audit/evidence/external/readme-jsonapi-serde-server-signals.txt +0 -0
  223. package/audit/evidence/external/readme-jsonapi-serde-server.md +0 -22
  224. package/audit/evidence/external/readme-jsonapi-serializer-signals.txt +0 -63
  225. package/audit/evidence/external/readme-jsonapi-serializer.md +0 -315
  226. package/audit/evidence/external/readme-jsonapi-server-signals.txt +0 -19
  227. package/audit/evidence/external/readme-jsonapi-server.md +0 -104
  228. package/audit/evidence/external/readme-nestjs-json-api-signals.txt +0 -4
  229. package/audit/evidence/external/readme-nestjs-json-api.md +0 -94
  230. package/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt +0 -47
  231. package/audit/evidence/external/readme-yaser-json-api-nestjs.md +0 -447
  232. package/audit/evidence/external/standard-jsonapi-snippets.txt +0 -84
  233. package/audit/evidence/external/standard-rfc-snippets.txt +0 -168
  234. package/audit/evidence/external/standards-sources.txt +0 -6
  235. package/audit/evidence/runtime/baseline-commits.txt +0 -2
  236. package/audit/evidence/runtime/db-adapter-assumptions.txt +0 -3
  237. package/audit/evidence/runtime/environment.txt +0 -4
  238. package/audit/evidence/runtime/invariant-runtime-mapping.md +0 -38
  239. package/audit/evidence/runtime/probe-patch-relationship-error.exitcode +0 -1
  240. package/audit/evidence/runtime/probe-patch-relationship-error.log +0 -76
  241. package/audit/evidence/runtime/probe-patch-relationship-error.mjs +0 -67
  242. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.exitcode +0 -1
  243. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.log +0 -62
  244. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.mjs +0 -47
  245. package/audit/evidence/runtime/test-exitcodes.txt +0 -4
  246. package/audit/evidence/runtime/test-summary.md +0 -107
  247. package/audit/evidence/runtime/trace-anchors.txt +0 -61
  248. package/audit/evidence/tests/access-multitenancy-test-signals.txt +0 -125
  249. package/audit/evidence/tests/failing-tests-summary.txt +0 -25
  250. package/audit/evidence/tests/npm-test-json-rest-api.exitcode +0 -1
  251. package/audit/evidence/tests/npm-test-json-rest-api.log +0 -5885
  252. package/audit/evidence/tests/npm-test-json-rest-schema.exitcode +0 -1
  253. package/audit/evidence/tests/npm-test-json-rest-schema.log +0 -356
  254. package/audit/evidence/tests/query-include-test-signals.txt +0 -948
  255. package/audit/evidence/tests/relationship-test-signals.txt +0 -223
  256. package/audit/evidence/tests/skipped-tests.txt +0 -10
  257. package/audit/evidence/tests/test-suite-list-non-anyapi.txt +0 -30
  258. package/audit/evidence/tests/test-suite-list.txt +0 -32
  259. package/audit/subsystems/docs-drift.md +0 -49
  260. package/audit/subsystems/pass2-cross-review.md +0 -131
  261. package/audit/subsystems/plugins-access.md +0 -51
  262. package/audit/subsystems/plugins-bulk.md +0 -50
  263. package/audit/subsystems/plugins-cors.md +0 -48
  264. package/audit/subsystems/plugins-file.md +0 -53
  265. package/audit/subsystems/plugins-multihome.md +0 -50
  266. package/audit/subsystems/plugins-positioning.md +0 -54
  267. package/audit/subsystems/plugins-socketio.md +0 -50
  268. package/audit/subsystems/query-engine.md +0 -61
  269. package/audit/subsystems/relationships.md +0 -55
  270. package/audit/subsystems/rest-orchestration.md +0 -66
  271. package/audit/subsystems/schema-core.md +0 -64
  272. package/audit/subsystems/storage-knex.md +0 -57
  273. package/audit/subsystems/tests.md +0 -48
  274. package/audit/subsystems/transport-express.md +0 -55
  275. package/audit/traces/trace-read-get.md +0 -22
  276. package/audit/traces/trace-read-query.md +0 -25
  277. package/audit/traces/trace-relationship-endpoints.md +0 -31
  278. package/audit/traces/trace-write-delete.md +0 -17
  279. package/audit/traces/trace-write-patch.md +0 -26
  280. package/audit/traces/trace-write-post.md +0 -22
  281. package/audit/traces/trace-write-put.md +0 -23
  282. package/docs/GUIDE/GUIDE_4_Authentication_And_Permissions.md +0 -707
  283. package/docs/GUIDE/GUIDE_X_Multihome.md +0 -666
  284. package/plugins/core/lib/querying-writing/payload-validators.js +0 -1314
  285. package/plugins/core/rest-api-access.js +0 -459
  286. package/plugins/core/rest-api-multihome-plugin.js +0 -314
  287. package/tests/multihome.test.js +0 -553
  288. package/tests/multihome.test.js.bak +0 -550
  289. package/tests/ownership-optout.test.js +0 -76
  290. package/tests/rest-api-access.test.js +0 -206
@@ -1,63 +0,0 @@
1
- 4:# JSON API Serializer
2
- 7: <img src="https://github.com/SeyZ/jsonapi-serializer/blob/master/logo.jpg?raw=true" alt="JSONAPI Serializer Logo">
3
- 10:[![Build Status](https://travis-ci.org/SeyZ/jsonapi-serializer.svg?branch=master)](https://travis-ci.org/SeyZ/jsonapi-serializer)
4
- 11:[![npm version](https://img.shields.io/npm/v/jsonapi-serializer.svg)](https://yarnpkg.com/en/package/jsonapi-serializer)
5
- 12:[![download](https://img.shields.io/npm/dm/jsonapi-serializer.svg)](https://yarnpkg.com/en/package/jsonapi-serializer)
6
- 14:A Node.js framework agnostic library for (de)serializing your data to [JSON
7
- 17:psst: If you need an off-the-shelf admin panel for your app, check out what I build in my day job at [forestadmin.com](https://www.forestadmin.com) - it uses jsonapi-serializer to de/serialize data data coming from/to the APIs.
8
- 19:- [Migrate from 2.0 to 3.0](https://github.com/SeyZ/jsonapi-serializer/wiki/Migrate-from-2.0-to-3.0)
9
- 20:- [Migrate from 1.x to 2.0](https://github.com/SeyZ/jsonapi-serializer/wiki/Migrate-from-1.x-to-2.0)
10
- 23:`$ npm install jsonapi-serializer`
11
- 29: var JSONAPISerializer = require('jsonapi-serializer').Serializer;
12
- 30: new JSONAPISerializer(type, opts).serialize(data);
13
- 37:Calling the `serialize` method on the returned object will serialize your `data` (object or array) to a compliant JSONAPI document.
14
- 42:- **attributes**: An array of attributes to show. You can define an attribute as an option if you want to define some relationships (included or not).
15
- 43: - **ref**: If present, it's considered as a relationships.
16
- 44: - **included**: Consider the relationships as [compound document](http://jsonapi.org/format/#document-compound-documents). Default: true.
17
- 50: - **relationshipLinks**: An object that describes the links inside relationships. Values can be *string* or a *function*
18
- 51: - **relationshipMeta**: An object that describes the meta inside relationships. Values can be a plain value or a *function*
19
- 52: - **ignoreRelationshipData**: Do not include the `data` key inside the relationship. Default: false.
20
- 62:- [Express example](https://github.com/SeyZ/jsonapi-serializer/tree/master/examples/express)
21
- 63:- [Simple usage](#simple-usage-serializer)
22
- 64:- [More examples in tests](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/serializer.js)
23
- 66:<a name="simple-usage-serializer"></a>
24
- 77:var JSONAPISerializer = require('jsonapi-serializer').Serializer;
25
- 83:var users = UserSerializer.serialize(data);
26
- 85:// `users` here are JSON API compliant.
27
- 112: var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
28
- 113: new JSONAPIDeserializer(opts).deserialize(data);
29
- 115:The function `JSONAPIDeserializer` takes one argument:
30
- 117:- `opts`: The deserializer options.
31
- 119:Calling the `deserialize` method on the returned object will deserialize your `data` (JSONAPI document) to a plain javascript object.
32
- 124:- **AN\_ATTRIBUTE\_TYPE**: this option name corresponds to the type of a relationship from your JSONAPI document.
33
- 125: - **valueForRelationship**: A function that returns whatever you want for a relationship (see examples below) ***can return a Promise (see tests)***
34
- 130:- [Simple usage](#simple-usage-deserializer)
35
- 131:- [Relationship](#relationship-deserializer)
36
- 132:- [More examples in tests](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/deserializer.js)
37
- 134:<a name="simple-usage-deserializer"></a>
38
- 158:var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
39
- 160:new JSONAPIDeserializer().deserialize(jsonapi, function (err, users) {
40
- 171:<a name="relationship-deserializer"></a>
41
- 183: relationships: {
42
- 195: relationships: {
43
- 205:var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
44
- 207:new JSONAPIDeserializer({
45
- 209: valueForRelationship: function (relationship) {
46
- 211: id: relationship.id,
47
- 218:}).deserialize(jsonapi, function (err, users) {
48
- 256: var JSONAPIError = require('jsonapi-serializer').Error;
49
- 257: var error = new JSONAPIError(opts);
50
- 261:- `opts`: The error options. All options are optional.
51
- 263:#### Available error option (`opts` argument)
52
- 267:- **code**: an application-specific error code, expressed as a string value.
53
- 270:- **source**: an object containing references to the source of the error, optionally including any of the following members:
54
- 272: - **parameter**: a string indicating which URI query parameter caused the error.
55
- 275:- **meta**: a meta object containing non-standard meta-information about the error.
56
- 279:- [Simple usage](#simple-usage-error)
57
- 280:- [More example](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/error.js)
58
- 282:<a name="simple-usage-error"></a>
59
- 286:var JSONAPIError = require('jsonapi-serializer').Error;
60
- 288:var errors = new JSONAPIError({
61
- 295:// `errors` here are JSON API compliant.
62
- 302: "errors": [
63
- 315:[MIT](https://github.com/SeyZ/jsonapi-serializer/blob/master/LICENSE)
@@ -1,315 +0,0 @@
1
- # I am looking for new maintainers
2
- If you are interested, send me an email: sandro@munda.me
3
-
4
- # JSON API Serializer
5
-
6
- <p align="center">
7
- <img src="https://github.com/SeyZ/jsonapi-serializer/blob/master/logo.jpg?raw=true" alt="JSONAPI Serializer Logo">
8
- </p>
9
-
10
- [![Build Status](https://travis-ci.org/SeyZ/jsonapi-serializer.svg?branch=master)](https://travis-ci.org/SeyZ/jsonapi-serializer)
11
- [![npm version](https://img.shields.io/npm/v/jsonapi-serializer.svg)](https://yarnpkg.com/en/package/jsonapi-serializer)
12
- [![download](https://img.shields.io/npm/dm/jsonapi-serializer.svg)](https://yarnpkg.com/en/package/jsonapi-serializer)
13
-
14
- A Node.js framework agnostic library for (de)serializing your data to [JSON
15
- API](http://jsonapi.org) (1.0 compliant).
16
-
17
- psst: If you need an off-the-shelf admin panel for your app, check out what I build in my day job at [forestadmin.com](https://www.forestadmin.com) - it uses jsonapi-serializer to de/serialize data data coming from/to the APIs.
18
-
19
- - [Migrate from 2.0 to 3.0](https://github.com/SeyZ/jsonapi-serializer/wiki/Migrate-from-2.0-to-3.0)
20
- - [Migrate from 1.x to 2.0](https://github.com/SeyZ/jsonapi-serializer/wiki/Migrate-from-1.x-to-2.0)
21
-
22
- ## Installation
23
- `$ npm install jsonapi-serializer`
24
-
25
- ## Documentation
26
-
27
- ### Serialization
28
-
29
- var JSONAPISerializer = require('jsonapi-serializer').Serializer;
30
- new JSONAPISerializer(type, opts).serialize(data);
31
-
32
- The function `JSONAPISerializer` takes two arguments:
33
-
34
- - `type`: The resource type.
35
- - `opts`: The serialization options.
36
-
37
- Calling the `serialize` method on the returned object will serialize your `data` (object or array) to a compliant JSONAPI document.
38
-
39
-
40
- #### Available serialization option (`opts` argument)
41
-
42
- - **attributes**: An array of attributes to show. You can define an attribute as an option if you want to define some relationships (included or not).
43
- - **ref**: If present, it's considered as a relationships.
44
- - **included**: Consider the relationships as [compound document](http://jsonapi.org/format/#document-compound-documents). Default: true.
45
- - **id**: Configurable identifier field for the resource. Default: `id`.
46
- - **attributes**: An array of attributes to show.
47
- - **topLevelLinks**: An object that describes the top-level links. Values can be *string* or a *function*
48
- - **dataLinks**: An object that describes the links inside data. Values can be *string* or a *function* (see examples below)
49
- - **dataMeta**: An object that describes the meta inside data. Values can be a plain value or a *function* (see examples below)
50
- - **relationshipLinks**: An object that describes the links inside relationships. Values can be *string* or a *function*
51
- - **relationshipMeta**: An object that describes the meta inside relationships. Values can be a plain value or a *function*
52
- - **ignoreRelationshipData**: Do not include the `data` key inside the relationship. Default: false.
53
- - **keyForAttribute**: A function or string to customize attributes. Functions are passed the attribute as a single argument and expect a string to be returned. Strings are aliases for inbuilt functions for common case conversions. Options include: `dash-case` (default), `lisp-case`, `spinal-case`, `kebab-case`, `underscore_case`, `snake_case`, `camelCase`, `CamelCase`.
54
- - **nullIfMissing**: Set the attribute to null if missing from your data input. Default: false.
55
- - **pluralizeType**: A boolean to indicate if the type must be pluralized or not. Default: true.
56
- - **typeForAttribute**: A function that maps the attribute (passed as an argument) to the type you want to override. If it returns `undefined`, ignores the flag for that attribute. Option *pluralizeType* ignored if set.
57
- - **meta**: An object to include non-standard meta-information. Values can be a plain value or a *function*
58
- - **transform**: A function to transform each record before the serialization.
59
-
60
- **Examples**
61
-
62
- - [Express example](https://github.com/SeyZ/jsonapi-serializer/tree/master/examples/express)
63
- - [Simple usage](#simple-usage-serializer)
64
- - [More examples in tests](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/serializer.js)
65
-
66
- <a name="simple-usage-serializer"></a>
67
- Simple usage:
68
-
69
- ```javascript
70
- var data = [
71
- { id: 1, firstName: 'Sandro', lastName: 'Munda' },
72
- { id: 2, firstName: 'John', lastName: 'Doe' }
73
- ];
74
- ```
75
-
76
- ```javascript
77
- var JSONAPISerializer = require('jsonapi-serializer').Serializer;
78
-
79
- var UserSerializer = new JSONAPISerializer('users', {
80
- attributes: ['firstName', 'lastName']
81
- });
82
-
83
- var users = UserSerializer.serialize(data);
84
-
85
- // `users` here are JSON API compliant.
86
- ```
87
-
88
- The result will be something like:
89
-
90
- ```javascript
91
- {
92
- "data": [{
93
- "type": "users",
94
- "id": "1",
95
- "attributes": {
96
- "first-name": "Sandro",
97
- "last-name": "Munda"
98
- }
99
- }, {
100
- "type": "users",
101
- "id": "2",
102
- "attributes": {
103
- "first-name": "John",
104
- "last-name": "Doe"
105
- }
106
- }]
107
- }
108
- ```
109
-
110
- ### Deserialization
111
-
112
- var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
113
- new JSONAPIDeserializer(opts).deserialize(data);
114
-
115
- The function `JSONAPIDeserializer` takes one argument:
116
-
117
- - `opts`: The deserializer options.
118
-
119
- Calling the `deserialize` method on the returned object will deserialize your `data` (JSONAPI document) to a plain javascript object.
120
-
121
- #### Available deserialization option (`opts` argument)
122
-
123
- - **keyForAttribute**: A function or string to customize attributes. Functions are passed the attribute as a single argument and expect a string to be returned. Strings are aliases for inbuilt functions for common case conversions. Options include: `dash-case` (default), `lisp-case`, `spinal-case`, `kebab-case`, `underscore_case`, `snake_case`, `camelCase`, `CamelCase`.
124
- - **AN\_ATTRIBUTE\_TYPE**: this option name corresponds to the type of a relationship from your JSONAPI document.
125
- - **valueForRelationship**: A function that returns whatever you want for a relationship (see examples below) ***can return a Promise (see tests)***
126
- - **transform**: A function to transform each record after the deserialization.
127
-
128
- **Examples**
129
-
130
- - [Simple usage](#simple-usage-deserializer)
131
- - [Relationship](#relationship-deserializer)
132
- - [More examples in tests](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/deserializer.js)
133
-
134
- <a name="simple-usage-deserializer"></a>
135
- Simple usage:
136
-
137
- ```
138
- {
139
- data: [{
140
- type: 'users',
141
- id: '1',
142
- attributes: {
143
- 'first-name': Sandro,
144
- 'last-name': Munda
145
- }
146
- }, {
147
- type: 'users',
148
- id: '2',
149
- attributes: {
150
- 'first-name': 'John',
151
- 'last-name': 'Doe'
152
- }
153
- }]
154
- }
155
- ```
156
-
157
- ```javascript
158
- var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
159
-
160
- new JSONAPIDeserializer().deserialize(jsonapi, function (err, users) {
161
- // `users` is...
162
- });
163
- ```
164
-
165
- ```javascript
166
- [
167
- { id: 1, firstName: 'Sandro', lastName: 'Munda' },
168
- { id: 2, firstName: 'John', lastName: 'Doe' }
169
- ];
170
- ```
171
- <a name="relationship-deserializer"></a>
172
- Relationship:
173
-
174
- ```
175
- {
176
- data: [{
177
- type: 'users',
178
- id: '54735750e16638ba1eee59cb',
179
- attributes: {
180
- 'first-name': 'Sandro',
181
- 'last-name': 'Munda'
182
- },
183
- relationships: {
184
- address: {
185
- data: { type: 'addresses', id: '54735722e16620ba1eee36af' }
186
- }
187
- }
188
- }, {
189
- type: 'users',
190
- id: '5490143e69e49d0c8f9fc6bc',
191
- attributes: {
192
- 'first-name': 'Lawrence',
193
- 'last-name': 'Bennett'
194
- },
195
- relationships: {
196
- address: {
197
- data: { type: 'addresses', id: '54735697e16624ba1eee36bf' }
198
- }
199
- }
200
- }]
201
- }
202
- ```
203
-
204
- ```javascript
205
- var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
206
-
207
- new JSONAPIDeserializer({
208
- addresses: {
209
- valueForRelationship: function (relationship) {
210
- return {
211
- id: relationship.id,
212
- 'address-line1': '406 Madison Court',
213
- 'zip-code': '49426',
214
- country: 'USA'
215
- };
216
- }
217
- }
218
- }).deserialize(jsonapi, function (err, users) {
219
- // `users` is...
220
- });
221
- ```
222
-
223
- ```
224
- [{
225
- id: '54735750e16638ba1eee59cb',
226
- 'first-name': 'Sandro',
227
- 'last-name': 'Munda',
228
- address: {
229
- id: '54735722e16620ba1eee36af',
230
- 'address-line1': '406 Madison Court',
231
- 'zip-code': '49426',
232
- country: 'USA'
233
- }
234
- }, {
235
- id: '5490143e69e49d0c8f9fc6bc',
236
- 'first-name': 'Lawrence',
237
- 'last-name': 'Bennett',
238
- address: {
239
- id: '54735697e16624ba1eee36bf',
240
- 'address-line1': '406 Madison Court',
241
- 'zip-code': '49426',
242
- country: 'USA'
243
- }
244
- }]
245
- ```
246
-
247
- #### Notes on Promises
248
- The deserialization option `valueForRelationship` supports returning a `Promise` and so this library uses `Promises` under the hood. `bluebird` was previously used as a dependency, but due to bundle size concerns on both node and the web it was replaced with native promises.
249
-
250
- `bluebird` is definitely [more performant](http://bluebirdjs.com/docs/benchmarks.html) than native Promises. If performance is a major concern `Promise` can be globally polyfilled
251
- - node - via `global.Promise = require('bluebird')`
252
- - web - global `Promise` automatically gets assigned when using the [script tag](http://bluebirdjs.com/docs/getting-started.html) to load `bluebird`
253
-
254
- ## Error serialization
255
-
256
- var JSONAPIError = require('jsonapi-serializer').Error;
257
- var error = new JSONAPIError(opts);
258
-
259
- The function JSONAPIError takes one argument:
260
-
261
- - `opts`: The error options. All options are optional.
262
-
263
- #### Available error option (`opts` argument)
264
-
265
- - **id**: a unique identifier for this particular occurrence of the problem.
266
- - **status**: the HTTP status code applicable to this problem, expressed as a string value.
267
- - **code**: an application-specific error code, expressed as a string value.
268
- - **title**: a short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization.
269
- - **detail**: a human-readable explanation specific to this occurrence of the problem. Like title, this field’s value can be localized.
270
- - **source**: an object containing references to the source of the error, optionally including any of the following members:
271
- - **pointer**: a JSON Pointer [RFC6901] to the associated entity in the request document [e.g. "/data" for a primary data object, or "/data/attributes/title" for a specific attribute].
272
- - **parameter**: a string indicating which URI query parameter caused the error.
273
- - **links**: a links object containing the following members:
274
- - **about**: a link that leads to further details about this particular occurrence of the problem.
275
- - **meta**: a meta object containing non-standard meta-information about the error.
276
-
277
- **Examples**
278
-
279
- - [Simple usage](#simple-usage-error)
280
- - [More example](https://github.com/SeyZ/jsonapi-serializer/blob/master/test/error.js)
281
-
282
- <a name="simple-usage-error"></a>
283
- Simple usage:
284
-
285
- ```javascript
286
- var JSONAPIError = require('jsonapi-serializer').Error;
287
-
288
- var errors = new JSONAPIError({
289
- code: '123',
290
- source: { 'pointer': '/data/attributes/first-name' },
291
- title: 'Value is too short',
292
- detail: 'First name must contain at least three characters.'
293
- });
294
-
295
- // `errors` here are JSON API compliant.
296
- ```
297
-
298
- The result will be something like:
299
-
300
- ```javascript
301
- {
302
- "errors": [
303
- {
304
- "code": "123",
305
- "source": { "pointer": "/data/attributes/first-name" },
306
- "title": "Value is too short",
307
- "detail": "First name must contain at least three characters."
308
- }
309
- ]
310
- }
311
- ```
312
-
313
- # License
314
-
315
- [MIT](https://github.com/SeyZ/jsonapi-serializer/blob/master/LICENSE)
@@ -1,19 +0,0 @@
1
- 10:A config driven NodeJS framework implementing [`json:api`](http://jsonapi.org/) and [`GraphQL`](http://graphql.org/). You define the resources, it provides the api.
2
- 16:A config driven approach to building an API enables:
3
- 24: * Automatic handling of relationships
4
- 27: * What are my resources called
5
- 28: * What properties do my resources have
6
- 29: * For each resource, implement a `handler` for:
7
- 30: * `create`ing a resource
8
- 31: * `delete`ing a resource
9
- 32: * `search`ing for many resources
10
- 33: * `find`ing a specific resource
11
- 34: * `update`ing a specific resource
12
- 36:We've created `handler`s to automatically map our config over to database solutions help people get off the ground:
13
- 51:- [Configuring jsonapi-server](documentation/configuring.md)
14
- 53:- [Defining Resources](documentation/resources.md)
15
- 59:- [Migrating from an existing express server](documentation/api-migration.md)
16
- 64:You can have a complete json:api server providing a `photos` resource with just this:
17
- 74: resource: "photos",
18
- 86:Your new API will be alive at `http://localhost:16006/` and your `photos` resources will be at `http://localhost:16006/photos`. The GraphiQL interface will be available at `http://localhost:16006/`.
19
- 90:Fire up an example `json:api` server using the resources mentioned in the official spec via:
@@ -1,104 +0,0 @@
1
- [![Build Status](https://travis-ci.org/holidayextras/jsonapi-server.svg?branch=master)](https://travis-ci.org/holidayextras/jsonapi-server)
2
- [![Coverage Status](https://coveralls.io/repos/github/holidayextras/jsonapi-server/badge.svg?branch=master)](https://coveralls.io/github/holidayextras/jsonapi-server?branch=master)
3
- [![npm version](https://badge.fury.io/js/jsonapi-server.svg)](http://badge.fury.io/js/jsonapi-server)
4
- [![Dependencies Status](https://david-dm.org/holidayextras/jsonapi-server.svg)](https://david-dm.org/holidayextras/jsonapi-server)
5
-
6
- # jsonapi-server
7
-
8
- [![Greenkeeper badge](https://badges.greenkeeper.io/holidayextras/jsonapi-server.svg)](https://greenkeeper.io/)
9
-
10
- A config driven NodeJS framework implementing [`json:api`](http://jsonapi.org/) and [`GraphQL`](http://graphql.org/). You define the resources, it provides the api.
11
-
12
- ### Motivation / Justification / Rationale
13
-
14
- This framework solves the challenges of json:api and GraphQL without coupling us to any one ORM solution. Every other module out there is either tightly coupled to a database implementation, tracking an old version of the json:api spec, or is merely a helper library for a small feature. If you're building an API and your use case only involves reading and writing to a data store... well count yourself lucky. For everyone else, this framework provides the flexibility to provide a complex API without being confined to any one technology.
15
-
16
- A config driven approach to building an API enables:
17
- * Enforced json:api responses
18
- * Automatic GraphQL schema generation
19
- * Request validation
20
- * Payload validation
21
- * Automatic documentation generation
22
- * Automatic inclusions
23
- * Automatic routing
24
- * Automatic handling of relationships
25
-
26
- Ultimately, the only things you as a user of this framework need to care about are:
27
- * What are my resources called
28
- * What properties do my resources have
29
- * For each resource, implement a `handler` for:
30
- * `create`ing a resource
31
- * `delete`ing a resource
32
- * `search`ing for many resources
33
- * `find`ing a specific resource
34
- * `update`ing a specific resource
35
-
36
- We've created `handler`s to automatically map our config over to database solutions help people get off the ground:
37
- * [jsonapi-store-memoryhandler](https://github.com/holidayextras/jsonapi-server/blob/master/lib/MemoryHandler.js) - an in-memory data store to enable rapid prototyping. This ships as a part of `jsonapi-server` and powers the core test suite.
38
- * [jsonapi-handler-chain](https://github.com/holidayextras/jsonapi-server/blob/master/lib/ChainHandler.js) - a handler to chain custom behaviour around an existing handler. This ships as a part of `jsonapi-server`. More info can be found [here](https://github.com/holidayextras/jsonapi-server/blob/master/documentation/chain-handler.md)
39
- * [jsonapi-store-relationaldb](https://github.com/holidayextras/jsonapi-store-relationaldb) - using `sequelize` to support PostgreSQL, MySQL, MSSQL, MariaDB and SQLite.
40
- * [jsonapi-store-mongodb](https://github.com/holidayextras/jsonapi-store-mongodb) - for MongoDB.
41
- * [jsonapi-store-elasticsearch](https://github.com/holidayextras/jsonapi-store-elasticsearch) - for Elasticsearch.
42
- * [jsonapi-store-dynamodb](https://github.com/holidayextras/jsonapi-server/compare/dynamodb?expand=1) - *!SIGNIFICANT WIP!* for AWS DynamoDB.
43
-
44
- We've also written a library to ease the consumption of a json:api compliant service, if GraphQL isn't your thing:
45
- * [jsonapi-client](https://github.com/holidayextras/jsonapi-client) - for NodeJS and Browsers
46
-
47
-
48
- ### Full documentation
49
-
50
- - [Suggested Project Structure](documentation/suggested-project-structure.md)
51
- - [Configuring jsonapi-server](documentation/configuring.md)
52
- - [Automatic Swagger Generation](documentation/swagger.md)
53
- - [Defining Resources](documentation/resources.md)
54
- - [Debugging](documentation/debugging.md)
55
- - [Foreign Key Relations](documentation/foreign-relations.md)
56
- - [Chaining handlers together](documentation/chain-handler.md)
57
- - [Custom Handlers](documentation/handlers.md)
58
- - [Post Processing Examples](documentation/post-processing.md)
59
- - [Migrating from an existing express server](documentation/api-migration.md)
60
- - [Application metrics](documentation/metrics.md)
61
-
62
- ### The tl;dr
63
-
64
- You can have a complete json:api server providing a `photos` resource with just this:
65
- ```javascript
66
- var jsonApi = require("jsonapi-server");
67
-
68
- jsonApi.setConfig({
69
- port: 16006,
70
- graphiql: true
71
- });
72
-
73
- jsonApi.define({
74
- resource: "photos",
75
- handlers: new jsonApi.MemoryHandler(),
76
- attributes: {
77
- title: jsonApi.Joi.string(),
78
- url: jsonApi.Joi.string().uri(),
79
- height: jsonApi.Joi.number().min(1).max(10000).precision(0),
80
- width: jsonApi.Joi.number().min(1).max(10000).precision(0)
81
- }
82
- });
83
-
84
- jsonApi.start();
85
- ```
86
- Your new API will be alive at `http://localhost:16006/` and your `photos` resources will be at `http://localhost:16006/photos`. The GraphiQL interface will be available at `http://localhost:16006/`.
87
-
88
- ### Show me a full example!
89
-
90
- Fire up an example `json:api` server using the resources mentioned in the official spec via:
91
- ```
92
- $ git clone https://github.com/holidayextras/jsonapi-server.git
93
- $ npm install
94
- $ npm start
95
- ```
96
- then browse to the JSON:API endpoints:
97
- ```
98
- http://localhost:16006/rest/photos
99
- ```
100
- or, for GraphQL:
101
- ```
102
- http://localhost:16006/rest/
103
- ```
104
- the example implementation can be found [here](example)
@@ -1,4 +0,0 @@
1
- 10:npm install nestjs-json-api
2
- 15:yarn add nestjs-json-api
3
- 40:Example with a user controller:
4
- 81:If you want to quickly get it working, you can use the `JsonApiController` decorator on your controller. The downside is that you won't have control over the endpoints.
@@ -1,94 +0,0 @@
1
- # NESTJS JSON API
2
-
3
- A library to easily implement a JSON API in your NestJs application.
4
-
5
- This library contains a set of decorators and a service to make everything easier.
6
-
7
- ## Installation
8
-
9
- ```
10
- npm install nestjs-json-api
11
- ```
12
-
13
- Or
14
- ```
15
- yarn add nestjs-json-api
16
- ```
17
-
18
- ## Usage
19
-
20
- First, import the `JsonApiModule` in your root module. You'll have to setup the database connection independently.
21
-
22
- Example with Mongoose:
23
-
24
- ```
25
- @Module({
26
- ...
27
- imports: [
28
- MongooseModule.forRoot('mongodb://localhost:27017/dbname'),
29
- JsonApiModule.forRoot({
30
- adapter: JsonApiMongooseAdapter,
31
- }),
32
- ],
33
- ...
34
- })
35
- export class AppModule {}
36
- ```
37
-
38
- Now you can use the decorators. The recommended way is to use the method decorators
39
-
40
- Example with a user controller:
41
-
42
- ```
43
- @Controller('user')
44
- class UserController {
45
- @Get(':id')
46
- @JsonApiFindById('UserModel')
47
- findById(@JsonApiDoc doc: JsonApiTopLevelObject<User>) {
48
- // Do stuff with the doc
49
- return doc;
50
- }
51
-
52
- @Get()
53
- @JsonApiFind('UserModel')
54
- find(@JsonApiDoc doc: JsonApiTopLevelObject<User[]>) {
55
- // Do stuff with the doc
56
- return doc;
57
- }
58
-
59
- @Post()
60
- @JsonApiCreate('UserModel')
61
- create(@JsonApiDoc doc: JsonApiTopLevelObject<User>) {
62
- // Do stuff with the doc
63
- return doc;
64
- }
65
-
66
- @Patch(':id')
67
- @JsonApiUpdate('UserModel')
68
- update(@JsonApiDoc doc: JsonApiTopLevelObject<User>) {
69
- // Do stuff with the doc
70
- return doc;
71
- }
72
-
73
- @Delete(idParamKey)
74
- @JsonApiDelete('UserModel')
75
- delete() {
76
- return;
77
- }
78
- }
79
- ```
80
-
81
- If you want to quickly get it working, you can use the `JsonApiController` decorator on your controller. The downside is that you won't have control over the endpoints.
82
-
83
- Example:
84
-
85
- ```
86
- @Controller('categories')
87
- @JsonApiController('CategoryModel')
88
- export class CategoriesController {}
89
- ```
90
-
91
-
92
- ## TODO
93
-
94
- * Improve docs
@@ -1,47 +0,0 @@
1
- 2: <a href="https://www.npmjs.com/package/json-api-nestjs" target="_blank"><img src="https://img.shields.io/npm/v/json-api-nestjs.svg" alt="NPM Version" /></a>
2
- 3: <a href="https://www.npmjs.com/package/json-api-nestjs" target="_blank"><img src="https://img.shields.io/npm/l/json-api-nestjs.svg" alt="Package License" /></a>
3
- 4: <a href="https://www.npmjs.com/package/json-api-nestjs" target="_blank"><img src="https://img.shields.io/npm/dm/json-api-nestjs.svg" alt="NPM Downloads" /></a>
4
- 6: <img src="https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/klerick/02a4c98cf7008fea2af70dc2d50f4cb7/raw/json-api-nestjs.json" alt="Coverage Badge" />
5
- 9:# json-api-nestjs
6
- 11:This plugin works upon **TypeOrm** or **MicroOrm** library, which is used as the main database abstraction layer tool. The module
7
- 13:supports features such as requests validation based on database fields types, request filtering, endpoints extending,
8
- 14:data relations control and much more. Our module significantly reduces the development time of REST services by removing
9
- 21:$ npm install @yaser2us/json-api-nestjs
10
- 29:import {Module} from '@nestjs/common';
11
- 30:import {JsonApiModule} from '@yaser2us/json-api-nestjs';
12
- 31:import {TypeOrmJsonApiModule} from '@yaser2us/json-api-nestjs-typeorm';
13
- 47:import {Module} from '@nestjs/common';
14
- 48:import {JsonApiModule} from '@yaser2us/json-api-nestjs';
15
- 49:import {MicroOrmJsonApiModule} from '@yaser2us/json-api-nestjs-microorm';
16
- 70:- GET /users/{id}/relationships/{relName}
17
- 71:- POST /users/{id}/relationships/{relName}
18
- 72:- PATCH /users/{id}/relationships/{relName}
19
- 73:- DELETE /users/{id}/relationships/{relName}
20
- 85: imports?: NestImport[]; // List of addition module for useing in custom controller
21
- 88: debug?: boolean; // Debug info in result object, like error message
22
- 90: operationUrl?: string // Url for atomic operation https://jsonapi.org/ext/atomic/
23
- 99:import {Get, Param, Inject, BadRequestException} from '@nestjs/common';
24
- 109:} from '@yaser2us/json-api-nestjs';
25
- 112:} from '@yaser2us/json-api-nestjs-shared';
26
- 146:You can overwrite the default config for the current controller using options in the decorator **JsonAPi**.
27
- 153:import { Query } from '@nestjs/common';
28
- 161:} from 'json-api-nestjs';
29
- 181:import { ArgumentMetadata, PipeTransform } from '@nestjs/common';
30
- 183:import { Query } from 'json-api-nestjs';
31
- 195:For using swagger, you should only add [@nestjs/swagger](https://docs.nestjs.com/openapi/introduction) and configure it
32
- 227:- **include** - you can extend result with relations (aka join)
33
- 229: GET /users?include=roles
34
- 242:- **sort** - you can sort result of the request
35
- 245: GET /users?sort=target.name,-roles.key
36
- 249: So, result of the request will be sorted by field *name* of **Users** by *ASC* and field *key* of **Roles** entity
37
- 251:- **page** - pagination for you request
38
- 256:- **filter** - filter for query
39
- 259: GET /users?filter[name][eq]=1&filter[roles.name][ne]=test&filter[roles.status][eq]=true
40
- 263: The "eq", "ne" is *[Filter operand](#filter-operand)*
41
- 293:- **include** - you can extend result with relations (aka join)
42
- 295: GET /users?include=roles
43
- 329: "relationships": {
44
- 359: "relationships": {
45
- 375:You can more information find [here](https://jsonapi.org/ext/atomic/)
46
- 382:but [Atomic operation](https://jsonapi.org/ext/atomic/) allow for one request.
47
- 411: "relationships":{