json-rest-api 1.0.22 → 1.0.23

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 (260) hide show
  1. package/CLAUDE.md +1 -2
  2. package/JSKIT_BACKEND_MIGRATION_TRACKER.txt +180 -0
  3. package/SINGLE_VALIDATION_CONTRACT_TODO.txt +172 -0
  4. package/docs/API.md +51 -14
  5. package/docs/COMPARISON.md +2 -2
  6. package/docs/GUIDE/GUIDE_1_Initial_Setup.md +28 -1
  7. package/docs/GUIDE/GUIDE_2_2_Manipulating_And_Searching_Tables.md +5 -1
  8. package/docs/GUIDE/GUIDE_2_7_Pagination_And_Ordering.md +3 -1
  9. package/docs/GUIDE/GUIDE_2_8_Effects_of_PUT_and_PATCH.md +12 -60
  10. package/docs/GUIDE/GUIDE_2_Data_And_Relations.md +2 -2
  11. package/docs/GUIDE/GUIDE_3_Field_Transformations.md +5 -1
  12. package/docs/GUIDE/GUIDE_7_Hooks_Data_Management_And_Plugins.md +2 -0
  13. package/docs/GUIDE/GUIDE_X_Autofiltering.md +355 -0
  14. package/docs/GUIDE/GUIDE_X_Fastify.md +78 -0
  15. package/docs/GUIDE/GUIDE_X_Knex_Schema_And_Migrations.md +250 -0
  16. package/docs/GUIDE/GUIDE_X_Query_Projections.md +159 -0
  17. package/docs/GUIDE/GUIDE_X_Writing_Plugins.md +199 -0
  18. package/docs/GUIDE/index.md +18 -9
  19. package/docs/QUICKSTART.md +5 -1
  20. package/docs/index.md +1 -1
  21. package/index.js +3 -2
  22. package/package.json +2 -2
  23. package/plugins/core/connectors/express-plugin.js +97 -184
  24. package/plugins/core/connectors/fastify-plugin.js +206 -0
  25. package/plugins/core/connectors/lib/connector-core.js +195 -0
  26. package/plugins/core/connectors/lib/transport-http-helpers.js +122 -0
  27. package/plugins/core/connectors/lib/transport-route-schemas.js +92 -0
  28. package/plugins/core/lib/dbIntrospection.js +1078 -0
  29. package/plugins/core/lib/dbTablesOperations.js +1104 -160
  30. package/plugins/core/lib/querying/knex-json-api-transformers-querying.js +5 -2
  31. package/plugins/core/lib/querying/knex-process-includes.js +3 -4
  32. package/plugins/core/lib/querying/knex-query-helpers.js +17 -71
  33. package/plugins/core/lib/querying/knex-relationship-includes.js +466 -206
  34. package/plugins/core/lib/querying/query-builder-utils.js +19 -0
  35. package/plugins/core/lib/querying/query-field-sort-helpers.js +135 -0
  36. package/plugins/core/lib/querying/sort-helpers.js +33 -0
  37. package/plugins/core/lib/querying/storage-adapter-utils.js +51 -0
  38. package/plugins/core/lib/querying/url-helpers.js +8 -2
  39. package/plugins/core/lib/querying-writing/compile-schemas.js +12 -1
  40. package/plugins/core/lib/querying-writing/knex-field-helpers.js +83 -13
  41. package/plugins/core/lib/querying-writing/knex-json-api-transformers.js +13 -12
  42. package/plugins/core/lib/querying-writing/query-field-helpers.js +88 -0
  43. package/plugins/core/lib/querying-writing/request-contracts.js +590 -0
  44. package/plugins/core/lib/storage/canonical-storage-mapping.js +113 -0
  45. package/plugins/core/lib/storage/storage-adapter.js +79 -2
  46. package/plugins/core/lib/storage/storage-mapping.js +204 -0
  47. package/plugins/core/rest-api-anyapi-knex-plugin.js +355 -228
  48. package/plugins/core/rest-api-autofilter-plugin.js +414 -0
  49. package/plugins/core/rest-api-knex-plugin.js +249 -211
  50. package/plugins/core/rest-api-plugin-hooks/register-relationship-routes.js +10 -5
  51. package/plugins/core/rest-api-plugin-hooks/register-scope-routes.js +12 -6
  52. package/plugins/core/rest-api-plugin-methods/apply-query-filters.js +41 -0
  53. package/plugins/core/rest-api-plugin-methods/common.js +121 -83
  54. package/plugins/core/rest-api-plugin-methods/enrich-attributes.js +6 -1
  55. package/plugins/core/rest-api-plugin-methods/get.js +23 -14
  56. package/plugins/core/rest-api-plugin-methods/patch.js +28 -12
  57. package/plugins/core/rest-api-plugin-methods/post.js +13 -8
  58. package/plugins/core/rest-api-plugin-methods/put.js +45 -21
  59. package/plugins/core/rest-api-plugin-methods/query.js +15 -53
  60. package/plugins/core/rest-api-plugin.js +2 -0
  61. package/plugins/core/rest-api-positioning-plugin.js +1 -1
  62. package/plugins/core/rest-api-query-projections-plugin.js +130 -0
  63. package/plugins/core/socketio-plugin.js +1 -3
  64. package/tests/autofilter.test.js +463 -0
  65. package/tests/custom-id-simplified-post.test.js +75 -0
  66. package/tests/custom-idproperty-relationships.test.js +33 -0
  67. package/tests/db-introspection.test.js +518 -0
  68. package/tests/db-table-operations.test.js +781 -0
  69. package/tests/fastify-plugin.test.js +141 -0
  70. package/tests/field-getters.test.js +1 -2
  71. package/tests/field-setters.test.js +0 -4
  72. package/tests/fixtures/api-configs.js +188 -219
  73. package/tests/helpers/fake-fastify.js +99 -0
  74. package/tests/http-connectors-parity.test.js +235 -0
  75. package/tests/projected-fields.test.js +319 -0
  76. package/tests/relationships.test.js +3 -3
  77. package/tests/searchschema-knex-behavior.test.js +187 -0
  78. package/tests/searchschema-merge.test.js +21 -69
  79. package/tests/storage-mapping.test.js +210 -0
  80. package/audit/00-charter.md +0 -103
  81. package/audit/01-scope-map.md +0 -84
  82. package/audit/02-coverage-matrix.csv +0 -174
  83. package/audit/03-invariants.md +0 -123
  84. package/audit/04-standards-rubric.md +0 -56
  85. package/audit/05-competitor-rubric.md +0 -77
  86. package/audit/06-findings.md +0 -160
  87. package/audit/07-risk-register.csv +0 -10
  88. package/audit/08-remediation-roadmap.md +0 -177
  89. package/audit/09-signoff-check.md +0 -23
  90. package/audit/10-final-synthesis.md +0 -29
  91. package/audit/evidence/code/all-files-json-rest-api.txt +0 -168
  92. package/audit/evidence/code/all-files-json-rest-schema.txt +0 -12
  93. package/audit/evidence/code/boundary-leak-checks.txt +0 -72
  94. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__bulk-operations-plugin.js.txt +0 -480
  95. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__express-plugin.js.txt +0 -532
  96. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__busboy-detector.js.txt +0 -175
  97. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__formidable-detector.js.txt +0 -138
  98. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__request-helpers.js.txt +0 -222
  99. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__file-handling-plugin.js.txt +0 -342
  100. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__dbTablesOperations.js.txt +0 -304
  101. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__fractional-positioning.js.txt +0 -188
  102. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__compile-schemas.js.txt +0 -336
  103. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__connectors-query-parser.js.txt +0 -165
  104. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-capabilities.js.txt +0 -265
  105. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-value-normalizers.js.txt +0 -369
  106. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__default-data-helpers.js.txt +0 -72
  107. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__field-utils.js.txt +0 -139
  108. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-constants.js.txt +0 -45
  109. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-field-helpers.js.txt +0 -396
  110. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-json-api-transformers.js.txt +0 -162
  111. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__payload-validators.js.txt +0 -1314
  112. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__schema-helpers.js.txt +0 -488
  113. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__scope-validations.js.txt +0 -484
  114. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__simplified-helpers.js.txt +0 -857
  115. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-cross-table-search.js.txt +0 -565
  116. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-json-api-transformers-querying.js.txt +0 -485
  117. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-pagination-helpers.js.txt +0 -560
  118. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-process-includes.js.txt +0 -167
  119. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers-base.js.txt +0 -109
  120. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers.js.txt +0 -1064
  121. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-relationship-includes.js.txt +0 -1983
  122. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-window-queries.js.txt +0 -328
  123. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__url-helpers.js.txt +0 -119
  124. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__storage__storage-adapter.js.txt +0 -160
  125. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__many-to-many-manipulations.js.txt +0 -300
  126. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__relationship-processor.js.txt +0 -245
  127. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-access.js.txt +0 -459
  128. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-cors-plugin.js.txt +0 -237
  129. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-knex-plugin.js.txt +0 -1135
  130. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-multihome-plugin.js.txt +0 -314
  131. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__compile-resource-schemas.js.txt +0 -7
  132. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-relationship-routes.js.txt +0 -71
  133. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-scope-routes.js.txt +0 -102
  134. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__turn-scope-init-into-vars.js.txt +0 -49
  135. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__validate-include-configurations.js.txt +0 -39
  136. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__add-route.js.txt +0 -23
  137. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__check-permissions.js.txt +0 -13
  138. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__common.js.txt +0 -639
  139. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete-relationship.js.txt +0 -117
  140. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete.js.txt +0 -104
  141. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__enrich-attributes.js.txt +0 -199
  142. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-related.js.txt +0 -353
  143. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-relationship.js.txt +0 -61
  144. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get.js.txt +0 -184
  145. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch-relationship.js.txt +0 -55
  146. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch.js.txt +0 -191
  147. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post-relationship.js.txt +0 -110
  148. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post.js.txt +0 -168
  149. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__put.js.txt +0 -253
  150. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__query.js.txt +0 -207
  151. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__release.js.txt +0 -12
  152. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin.js.txt +0 -165
  153. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-positioning-plugin.js.txt +0 -668
  154. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__socketio-plugin.js.txt +0 -621
  155. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__local-storage.js.txt +0 -218
  156. package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__s3-storage.js.txt +0 -124
  157. package/audit/evidence/code/critical-pass1/json-rest-schema__src__CorePlugin.js.txt +0 -269
  158. package/audit/evidence/code/critical-pass1/json-rest-schema__src__Schema.js.txt +0 -242
  159. package/audit/evidence/code/critical-pass1/json-rest-schema__src__index.js.txt +0 -77
  160. package/audit/evidence/code/critical-pass1-risk-keywords.txt +0 -238
  161. package/audit/evidence/code/critical-pass1-summary.csv +0 -67
  162. package/audit/evidence/code/critical-pass2-summary.csv +0 -67
  163. package/audit/evidence/code/early-silent-zones-no-test-token.txt +0 -57
  164. package/audit/evidence/code/error-model-signals.txt +0 -98
  165. package/audit/evidence/code/git-files-json-rest-api.txt +0 -171
  166. package/audit/evidence/code/git-files-json-rest-schema.txt +0 -27
  167. package/audit/evidence/code/hook-flow-signals.txt +0 -282
  168. package/audit/evidence/code/idproperty-signals.txt +0 -157
  169. package/audit/evidence/code/import-cycles-non-anyapi.txt +0 -3
  170. package/audit/evidence/code/import-hotspots-non-anyapi.txt +0 -96
  171. package/audit/evidence/code/imports-json-rest-api.txt +0 -354
  172. package/audit/evidence/code/imports-json-rest-schema.txt +0 -15
  173. package/audit/evidence/code/in-scope-files-json-rest-api.txt +0 -160
  174. package/audit/evidence/code/in-scope-files-json-rest-schema.txt +0 -13
  175. package/audit/evidence/code/non-anyapi-core-files.txt +0 -101
  176. package/audit/evidence/code/permission-signals.txt +0 -193
  177. package/audit/evidence/code/query-include-signals.txt +0 -687
  178. package/audit/evidence/code/transaction-signals.txt +0 -28
  179. package/audit/evidence/code/validation-signals.txt +0 -650
  180. package/audit/evidence/code/write-path-signals.txt +0 -61
  181. package/audit/evidence/docs/docs-claims-signals.txt +0 -1075
  182. package/audit/evidence/docs/schema-docs-claims-signals.txt +0 -179
  183. package/audit/evidence/external/corpus-freeze.md +0 -21
  184. package/audit/evidence/external/npm-competitor-metadata.txt +0 -70
  185. package/audit/evidence/external/npm-download-signals.txt +0 -23
  186. package/audit/evidence/external/npm-jsonapi-server.txt +0 -8
  187. package/audit/evidence/external/npm-modern-jsonapi-metadata.txt +0 -38
  188. package/audit/evidence/external/readme-fortune-signals.txt +0 -26
  189. package/audit/evidence/external/readme-fortune.md +0 -165
  190. package/audit/evidence/external/readme-json-api-serializer-signals.txt +0 -80
  191. package/audit/evidence/external/readme-json-api-serializer.md +0 -690
  192. package/audit/evidence/external/readme-jsonapi-serde-server-signals.txt +0 -0
  193. package/audit/evidence/external/readme-jsonapi-serde-server.md +0 -22
  194. package/audit/evidence/external/readme-jsonapi-serializer-signals.txt +0 -63
  195. package/audit/evidence/external/readme-jsonapi-serializer.md +0 -315
  196. package/audit/evidence/external/readme-jsonapi-server-signals.txt +0 -19
  197. package/audit/evidence/external/readme-jsonapi-server.md +0 -104
  198. package/audit/evidence/external/readme-nestjs-json-api-signals.txt +0 -4
  199. package/audit/evidence/external/readme-nestjs-json-api.md +0 -94
  200. package/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt +0 -47
  201. package/audit/evidence/external/readme-yaser-json-api-nestjs.md +0 -447
  202. package/audit/evidence/external/standard-jsonapi-snippets.txt +0 -84
  203. package/audit/evidence/external/standard-rfc-snippets.txt +0 -168
  204. package/audit/evidence/external/standards-sources.txt +0 -6
  205. package/audit/evidence/runtime/baseline-commits.txt +0 -2
  206. package/audit/evidence/runtime/db-adapter-assumptions.txt +0 -3
  207. package/audit/evidence/runtime/environment.txt +0 -4
  208. package/audit/evidence/runtime/invariant-runtime-mapping.md +0 -38
  209. package/audit/evidence/runtime/probe-patch-relationship-error.exitcode +0 -1
  210. package/audit/evidence/runtime/probe-patch-relationship-error.log +0 -76
  211. package/audit/evidence/runtime/probe-patch-relationship-error.mjs +0 -67
  212. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.exitcode +0 -1
  213. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.log +0 -62
  214. package/audit/evidence/runtime/probe-patch-relationship-referenceerror.mjs +0 -47
  215. package/audit/evidence/runtime/test-exitcodes.txt +0 -4
  216. package/audit/evidence/runtime/test-summary.md +0 -107
  217. package/audit/evidence/runtime/trace-anchors.txt +0 -61
  218. package/audit/evidence/tests/access-multitenancy-test-signals.txt +0 -125
  219. package/audit/evidence/tests/failing-tests-summary.txt +0 -25
  220. package/audit/evidence/tests/npm-test-json-rest-api.exitcode +0 -1
  221. package/audit/evidence/tests/npm-test-json-rest-api.log +0 -5885
  222. package/audit/evidence/tests/npm-test-json-rest-schema.exitcode +0 -1
  223. package/audit/evidence/tests/npm-test-json-rest-schema.log +0 -356
  224. package/audit/evidence/tests/query-include-test-signals.txt +0 -948
  225. package/audit/evidence/tests/relationship-test-signals.txt +0 -223
  226. package/audit/evidence/tests/skipped-tests.txt +0 -10
  227. package/audit/evidence/tests/test-suite-list-non-anyapi.txt +0 -30
  228. package/audit/evidence/tests/test-suite-list.txt +0 -32
  229. package/audit/subsystems/docs-drift.md +0 -49
  230. package/audit/subsystems/pass2-cross-review.md +0 -131
  231. package/audit/subsystems/plugins-access.md +0 -51
  232. package/audit/subsystems/plugins-bulk.md +0 -50
  233. package/audit/subsystems/plugins-cors.md +0 -48
  234. package/audit/subsystems/plugins-file.md +0 -53
  235. package/audit/subsystems/plugins-multihome.md +0 -50
  236. package/audit/subsystems/plugins-positioning.md +0 -54
  237. package/audit/subsystems/plugins-socketio.md +0 -50
  238. package/audit/subsystems/query-engine.md +0 -61
  239. package/audit/subsystems/relationships.md +0 -55
  240. package/audit/subsystems/rest-orchestration.md +0 -66
  241. package/audit/subsystems/schema-core.md +0 -64
  242. package/audit/subsystems/storage-knex.md +0 -57
  243. package/audit/subsystems/tests.md +0 -48
  244. package/audit/subsystems/transport-express.md +0 -55
  245. package/audit/traces/trace-read-get.md +0 -22
  246. package/audit/traces/trace-read-query.md +0 -25
  247. package/audit/traces/trace-relationship-endpoints.md +0 -31
  248. package/audit/traces/trace-write-delete.md +0 -17
  249. package/audit/traces/trace-write-patch.md +0 -26
  250. package/audit/traces/trace-write-post.md +0 -22
  251. package/audit/traces/trace-write-put.md +0 -23
  252. package/docs/GUIDE/GUIDE_4_Authentication_And_Permissions.md +0 -707
  253. package/docs/GUIDE/GUIDE_X_Multihome.md +0 -666
  254. package/plugins/core/lib/querying-writing/payload-validators.js +0 -1314
  255. package/plugins/core/rest-api-access.js +0 -459
  256. package/plugins/core/rest-api-multihome-plugin.js +0 -314
  257. package/tests/multihome.test.js +0 -553
  258. package/tests/multihome.test.js.bak +0 -550
  259. package/tests/ownership-optout.test.js +0 -76
  260. 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":{