json-rest-api 1.0.20 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/audit/00-charter.md +103 -0
- package/audit/01-scope-map.md +84 -0
- package/audit/02-coverage-matrix.csv +174 -0
- package/audit/03-invariants.md +123 -0
- package/audit/04-standards-rubric.md +56 -0
- package/audit/05-competitor-rubric.md +77 -0
- package/audit/06-findings.md +160 -0
- package/audit/07-risk-register.csv +10 -0
- package/audit/08-remediation-roadmap.md +177 -0
- package/audit/09-signoff-check.md +23 -0
- package/audit/10-final-synthesis.md +29 -0
- package/audit/evidence/code/all-files-json-rest-api.txt +168 -0
- package/audit/evidence/code/all-files-json-rest-schema.txt +12 -0
- package/audit/evidence/code/boundary-leak-checks.txt +72 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__bulk-operations-plugin.js.txt +480 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__express-plugin.js.txt +532 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__busboy-detector.js.txt +175 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__formidable-detector.js.txt +138 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__connectors__lib__request-helpers.js.txt +222 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__file-handling-plugin.js.txt +342 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__dbTablesOperations.js.txt +304 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__fractional-positioning.js.txt +188 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__compile-schemas.js.txt +336 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__connectors-query-parser.js.txt +165 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-capabilities.js.txt +265 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__database-value-normalizers.js.txt +369 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__default-data-helpers.js.txt +72 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__field-utils.js.txt +139 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-constants.js.txt +45 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-field-helpers.js.txt +396 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__knex-json-api-transformers.js.txt +162 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__payload-validators.js.txt +1314 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__schema-helpers.js.txt +488 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__scope-validations.js.txt +484 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying-writing__simplified-helpers.js.txt +857 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-cross-table-search.js.txt +565 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-json-api-transformers-querying.js.txt +485 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-pagination-helpers.js.txt +560 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-process-includes.js.txt +167 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers-base.js.txt +109 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-query-helpers.js.txt +1064 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-relationship-includes.js.txt +1983 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__knex-window-queries.js.txt +328 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__querying__url-helpers.js.txt +119 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__storage__storage-adapter.js.txt +160 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__many-to-many-manipulations.js.txt +300 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__lib__writing__relationship-processor.js.txt +245 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-access.js.txt +459 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-cors-plugin.js.txt +237 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-knex-plugin.js.txt +1135 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-multihome-plugin.js.txt +314 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__compile-resource-schemas.js.txt +7 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-relationship-routes.js.txt +71 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__register-scope-routes.js.txt +102 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__turn-scope-init-into-vars.js.txt +49 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-hooks__validate-include-configurations.js.txt +39 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__add-route.js.txt +23 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__check-permissions.js.txt +13 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__common.js.txt +639 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete-relationship.js.txt +117 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__delete.js.txt +104 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__enrich-attributes.js.txt +199 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-related.js.txt +353 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get-relationship.js.txt +61 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__get.js.txt +184 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch-relationship.js.txt +55 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__patch.js.txt +191 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post-relationship.js.txt +110 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__post.js.txt +168 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__put.js.txt +253 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__query.js.txt +207 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin-methods__release.js.txt +12 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-plugin.js.txt +165 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__rest-api-positioning-plugin.js.txt +668 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__core__socketio-plugin.js.txt +621 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__local-storage.js.txt +218 -0
- package/audit/evidence/code/critical-pass1/json-rest-api__plugins__storage__s3-storage.js.txt +124 -0
- package/audit/evidence/code/critical-pass1/json-rest-schema__src__CorePlugin.js.txt +269 -0
- package/audit/evidence/code/critical-pass1/json-rest-schema__src__Schema.js.txt +242 -0
- package/audit/evidence/code/critical-pass1/json-rest-schema__src__index.js.txt +77 -0
- package/audit/evidence/code/critical-pass1-risk-keywords.txt +238 -0
- package/audit/evidence/code/critical-pass1-summary.csv +67 -0
- package/audit/evidence/code/critical-pass2-summary.csv +67 -0
- package/audit/evidence/code/early-silent-zones-no-test-token.txt +57 -0
- package/audit/evidence/code/error-model-signals.txt +98 -0
- package/audit/evidence/code/git-files-json-rest-api.txt +171 -0
- package/audit/evidence/code/git-files-json-rest-schema.txt +27 -0
- package/audit/evidence/code/hook-flow-signals.txt +282 -0
- package/audit/evidence/code/idproperty-signals.txt +157 -0
- package/audit/evidence/code/import-cycles-non-anyapi.txt +3 -0
- package/audit/evidence/code/import-hotspots-non-anyapi.txt +96 -0
- package/audit/evidence/code/imports-json-rest-api.txt +354 -0
- package/audit/evidence/code/imports-json-rest-schema.txt +15 -0
- package/audit/evidence/code/in-scope-files-json-rest-api.txt +160 -0
- package/audit/evidence/code/in-scope-files-json-rest-schema.txt +13 -0
- package/audit/evidence/code/non-anyapi-core-files.txt +101 -0
- package/audit/evidence/code/permission-signals.txt +193 -0
- package/audit/evidence/code/query-include-signals.txt +687 -0
- package/audit/evidence/code/transaction-signals.txt +28 -0
- package/audit/evidence/code/validation-signals.txt +650 -0
- package/audit/evidence/code/write-path-signals.txt +61 -0
- package/audit/evidence/docs/docs-claims-signals.txt +1075 -0
- package/audit/evidence/docs/schema-docs-claims-signals.txt +179 -0
- package/audit/evidence/external/corpus-freeze.md +21 -0
- package/audit/evidence/external/npm-competitor-metadata.txt +70 -0
- package/audit/evidence/external/npm-download-signals.txt +23 -0
- package/audit/evidence/external/npm-jsonapi-server.txt +8 -0
- package/audit/evidence/external/npm-modern-jsonapi-metadata.txt +38 -0
- package/audit/evidence/external/readme-fortune-signals.txt +26 -0
- package/audit/evidence/external/readme-fortune.md +165 -0
- package/audit/evidence/external/readme-json-api-serializer-signals.txt +80 -0
- package/audit/evidence/external/readme-json-api-serializer.md +690 -0
- package/audit/evidence/external/readme-jsonapi-serde-server-signals.txt +0 -0
- package/audit/evidence/external/readme-jsonapi-serde-server.md +22 -0
- package/audit/evidence/external/readme-jsonapi-serializer-signals.txt +63 -0
- package/audit/evidence/external/readme-jsonapi-serializer.md +315 -0
- package/audit/evidence/external/readme-jsonapi-server-signals.txt +19 -0
- package/audit/evidence/external/readme-jsonapi-server.md +104 -0
- package/audit/evidence/external/readme-nestjs-json-api-signals.txt +4 -0
- package/audit/evidence/external/readme-nestjs-json-api.md +94 -0
- package/audit/evidence/external/readme-yaser-json-api-nestjs-signals.txt +47 -0
- package/audit/evidence/external/readme-yaser-json-api-nestjs.md +447 -0
- package/audit/evidence/external/standard-jsonapi-snippets.txt +84 -0
- package/audit/evidence/external/standard-rfc-snippets.txt +168 -0
- package/audit/evidence/external/standards-sources.txt +6 -0
- package/audit/evidence/runtime/baseline-commits.txt +2 -0
- package/audit/evidence/runtime/db-adapter-assumptions.txt +3 -0
- package/audit/evidence/runtime/environment.txt +4 -0
- package/audit/evidence/runtime/invariant-runtime-mapping.md +38 -0
- package/audit/evidence/runtime/probe-patch-relationship-error.exitcode +1 -0
- package/audit/evidence/runtime/probe-patch-relationship-error.log +76 -0
- package/audit/evidence/runtime/probe-patch-relationship-error.mjs +67 -0
- package/audit/evidence/runtime/probe-patch-relationship-referenceerror.exitcode +1 -0
- package/audit/evidence/runtime/probe-patch-relationship-referenceerror.log +62 -0
- package/audit/evidence/runtime/probe-patch-relationship-referenceerror.mjs +47 -0
- package/audit/evidence/runtime/test-exitcodes.txt +4 -0
- package/audit/evidence/runtime/test-summary.md +107 -0
- package/audit/evidence/runtime/trace-anchors.txt +61 -0
- package/audit/evidence/tests/access-multitenancy-test-signals.txt +125 -0
- package/audit/evidence/tests/failing-tests-summary.txt +25 -0
- package/audit/evidence/tests/npm-test-json-rest-api.exitcode +1 -0
- package/audit/evidence/tests/npm-test-json-rest-api.log +5885 -0
- package/audit/evidence/tests/npm-test-json-rest-schema.exitcode +1 -0
- package/audit/evidence/tests/npm-test-json-rest-schema.log +356 -0
- package/audit/evidence/tests/query-include-test-signals.txt +948 -0
- package/audit/evidence/tests/relationship-test-signals.txt +223 -0
- package/audit/evidence/tests/skipped-tests.txt +10 -0
- package/audit/evidence/tests/test-suite-list-non-anyapi.txt +30 -0
- package/audit/evidence/tests/test-suite-list.txt +32 -0
- package/audit/subsystems/docs-drift.md +49 -0
- package/audit/subsystems/pass2-cross-review.md +131 -0
- package/audit/subsystems/plugins-access.md +51 -0
- package/audit/subsystems/plugins-bulk.md +50 -0
- package/audit/subsystems/plugins-cors.md +48 -0
- package/audit/subsystems/plugins-file.md +53 -0
- package/audit/subsystems/plugins-multihome.md +50 -0
- package/audit/subsystems/plugins-positioning.md +54 -0
- package/audit/subsystems/plugins-socketio.md +50 -0
- package/audit/subsystems/query-engine.md +61 -0
- package/audit/subsystems/relationships.md +55 -0
- package/audit/subsystems/rest-orchestration.md +66 -0
- package/audit/subsystems/schema-core.md +64 -0
- package/audit/subsystems/storage-knex.md +57 -0
- package/audit/subsystems/tests.md +48 -0
- package/audit/subsystems/transport-express.md +55 -0
- package/audit/traces/trace-read-get.md +22 -0
- package/audit/traces/trace-read-query.md +25 -0
- package/audit/traces/trace-relationship-endpoints.md +31 -0
- package/audit/traces/trace-write-delete.md +17 -0
- package/audit/traces/trace-write-patch.md +26 -0
- package/audit/traces/trace-write-post.md +22 -0
- package/audit/traces/trace-write-put.md +23 -0
- package/package.json +5 -5
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
1 import { toJsonApiRecord } from '../querying/knex-json-api-transformers-querying.js'
|
|
2
|
+
2 import { getSchemaStructure } from './knex-constants.js'
|
|
3
|
+
3
|
|
4
|
+
4 /**
|
|
5
|
+
5 * Converts database record to JSON:API format with belongsTo relationships
|
|
6
|
+
6 *
|
|
7
|
+
7 * @param {Object} scope - Resource scope with schema and relationship info
|
|
8
|
+
8 * @param {Object} record - Raw database record
|
|
9
|
+
9 * @param {string} scopeName - Resource type name
|
|
10
|
+
10 * @returns {Object} JSON:API resource with belongsTo relationships
|
|
11
|
+
11 *
|
|
12
|
+
12 * @example
|
|
13
|
+
13 * // Input: Database record with foreign keys
|
|
14
|
+
14 * const dbRecord = {
|
|
15
|
+
15 * id: 1,
|
|
16
|
+
16 * title: 'Hello World',
|
|
17
|
+
17 * author_id: 2,
|
|
18
|
+
18 * publisher_id: 3,
|
|
19
|
+
19 * category_id: null
|
|
20
|
+
20 * };
|
|
21
|
+
21 * const result = toJsonApiRecordWithBelongsTo(scope, dbRecord, 'articles');
|
|
22
|
+
22 *
|
|
23
|
+
23 * // Output: JSON:API with relationship objects
|
|
24
|
+
24 * // {
|
|
25
|
+
25 * // type: 'articles',
|
|
26
|
+
26 * // id: '1',
|
|
27
|
+
27 * // attributes: {
|
|
28
|
+
28 * // title: 'Hello World'
|
|
29
|
+
29 * // // Note: author_id, publisher_id, category_id removed
|
|
30
|
+
30 * // },
|
|
31
|
+
31 * // relationships: {
|
|
32
|
+
32 * // author: {
|
|
33
|
+
33 * // data: { type: 'authors', id: '2' }
|
|
34
|
+
34 * // },
|
|
35
|
+
35 * // publisher: {
|
|
36
|
+
36 * // data: { type: 'publishers', id: '3' }
|
|
37
|
+
37 * // },
|
|
38
|
+
38 * // category: {
|
|
39
|
+
39 * // data: null // Explicit null for empty relationship
|
|
40
|
+
40 * // }
|
|
41
|
+
41 * // }
|
|
42
|
+
42 * // }
|
|
43
|
+
43 *
|
|
44
|
+
44 * @example
|
|
45
|
+
45 * // Input: Polymorphic relationships
|
|
46
|
+
46 * const dbRecord = {
|
|
47
|
+
47 * id: 5,
|
|
48
|
+
48 * content: 'Great post!',
|
|
49
|
+
49 * commentable_type: 'articles',
|
|
50
|
+
50 * commentable_id: 10
|
|
51
|
+
51 * };
|
|
52
|
+
52 * // With schema defining polymorphic relationship:
|
|
53
|
+
53 * // relationships: {
|
|
54
|
+
54 * // commentable: {
|
|
55
|
+
55 * // belongsToPolymorphic: true,
|
|
56
|
+
56 * // typeField: 'commentable_type',
|
|
57
|
+
57 * // idField: 'commentable_id'
|
|
58
|
+
58 * // }
|
|
59
|
+
59 * // }
|
|
60
|
+
60 *
|
|
61
|
+
61 * // Output: Polymorphic relationship in JSON:API
|
|
62
|
+
62 * // {
|
|
63
|
+
63 * // type: 'comments',
|
|
64
|
+
64 * // id: '5',
|
|
65
|
+
65 * // attributes: { content: 'Great post!' },
|
|
66
|
+
66 * // relationships: {
|
|
67
|
+
67 * // commentable: {
|
|
68
|
+
68 * // data: { type: 'articles', id: '10' }
|
|
69
|
+
69 * // }
|
|
70
|
+
70 * // }
|
|
71
|
+
71 * // }
|
|
72
|
+
72 *
|
|
73
|
+
73 * @description
|
|
74
|
+
74 * Used by:
|
|
75
|
+
75 * - dataGetMinimal for lightweight single record fetches
|
|
76
|
+
76 * - dataDelete to return deleted record structure
|
|
77
|
+
77 * - Internal operations needing quick JSON:API conversion
|
|
78
|
+
78 *
|
|
79
|
+
79 * Purpose:
|
|
80
|
+
80 * - Provides JSON:API structure without loading related data
|
|
81
|
+
81 * - Transforms foreign keys into relationship objects
|
|
82
|
+
82 * - Handles both regular and polymorphic belongsTo
|
|
83
|
+
83 * - Maintains explicit nulls for empty relationships
|
|
84
|
+
84 *
|
|
85
|
+
85 * Data flow:
|
|
86
|
+
86 * 1. Calls toJsonApiRecord for basic transformation
|
|
87
|
+
87 * 2. Scans schema for belongsTo field definitions
|
|
88
|
+
88 * 3. Converts foreign key values to relationship objects
|
|
89
|
+
89 * 4. Processes polymorphic relationships separately
|
|
90
|
+
90 * 5. Returns complete JSON:API resource object
|
|
91
|
+
91 */
|
|
92
|
+
92 export const toJsonApiRecordWithBelongsTo = (scope, record, scopeName) => {
|
|
93
|
+
93 if (!record) return null
|
|
94
|
+
94
|
|
95
|
+
95 // Get the basic JSON:API structure (without relationships)
|
|
96
|
+
96 const jsonApiRecord = toJsonApiRecord(scope, record, scopeName)
|
|
97
|
+
97
|
|
98
|
+
98 // Extract schema info from scope
|
|
99
|
+
99 const {
|
|
100
|
+
100 vars: {
|
|
101
|
+
101 schemaInfo: { schemaInstance, schemaRelationships: relationships, idProperty }
|
|
102
|
+
102 }
|
|
103
|
+
103 } = scope
|
|
104
|
+
104
|
|
105
|
+
105 const idField = idProperty || 'id'
|
|
106
|
+
106
|
|
107
|
+
107 // Get schema structure
|
|
108
|
+
108 const schemaStructure = getSchemaStructure(schemaInstance)
|
|
109
|
+
109
|
|
110
|
+
110 // Initialize relationships object
|
|
111
|
+
111 jsonApiRecord.relationships = {}
|
|
112
|
+
112
|
|
113
|
+
113 // Process regular belongsTo relationships from schema
|
|
114
|
+
114 for (const [fieldName, fieldDef] of Object.entries(schemaStructure)) {
|
|
115
|
+
115 if (fieldDef.belongsTo && fieldDef.as) {
|
|
116
|
+
116 const foreignKeyValue = record[fieldName]
|
|
117
|
+
117
|
|
118
|
+
118 if (foreignKeyValue !== null && foreignKeyValue !== undefined) {
|
|
119
|
+
119 jsonApiRecord.relationships[fieldDef.as] = {
|
|
120
|
+
120 data: {
|
|
121
|
+
121 type: fieldDef.belongsTo,
|
|
122
|
+
122 id: String(foreignKeyValue)
|
|
123
|
+
123 }
|
|
124
|
+
124 }
|
|
125
|
+
125 } else {
|
|
126
|
+
126 // Explicitly null relationship
|
|
127
|
+
127 jsonApiRecord.relationships[fieldDef.as] = {
|
|
128
|
+
128 data: null
|
|
129
|
+
129 }
|
|
130
|
+
130 }
|
|
131
|
+
131 }
|
|
132
|
+
132 }
|
|
133
|
+
133
|
|
134
|
+
134 // Process polymorphic belongsTo relationships
|
|
135
|
+
135 Object.entries(relationships || {}).forEach(([relName, relDef]) => {
|
|
136
|
+
136 if (relDef.belongsToPolymorphic) {
|
|
137
|
+
137 const typeValue = record[relDef.typeField]
|
|
138
|
+
138 const idValue = record[relDef.idField]
|
|
139
|
+
139
|
|
140
|
+
140 if (typeValue && idValue) {
|
|
141
|
+
141 jsonApiRecord.relationships[relName] = {
|
|
142
|
+
142 data: {
|
|
143
|
+
143 type: typeValue,
|
|
144
|
+
144 id: String(idValue)
|
|
145
|
+
145 }
|
|
146
|
+
146 }
|
|
147
|
+
147 } else {
|
|
148
|
+
148 // Explicitly null relationship
|
|
149
|
+
149 jsonApiRecord.relationships[relName] = {
|
|
150
|
+
150 data: null
|
|
151
|
+
151 }
|
|
152
|
+
152 }
|
|
153
|
+
153 }
|
|
154
|
+
154 })
|
|
155
|
+
155
|
|
156
|
+
156 // Remove relationships object if empty
|
|
157
|
+
157 if (Object.keys(jsonApiRecord.relationships).length === 0) {
|
|
158
|
+
158 delete jsonApiRecord.relationships
|
|
159
|
+
159 }
|
|
160
|
+
160
|
|
161
|
+
161 return jsonApiRecord
|
|
162
|
+
162 }
|