json-rest-api 1.0.21 → 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 +3 -3
|
@@ -0,0 +1,650 @@
|
|
|
1
|
+
plugins/core/rest-api-plugin-methods/patch.js:2:import { validatePatchPayload } from '../lib/querying-writing/payload-validators.js'
|
|
2
|
+
plugins/core/rest-api-plugin-methods/patch.js:8: validateResourceAttributesBeforeWrite,
|
|
3
|
+
plugins/core/rest-api-plugin-methods/patch.js:9: validateRelationshipAccess,
|
|
4
|
+
plugins/core/rest-api-plugin-methods/patch.js:11: validatePivotResource,
|
|
5
|
+
plugins/core/rest-api-plugin-methods/patch.js:42: const { schema, schemaStructure, schemaRelationships } = await setupCommonRequest({
|
|
6
|
+
plugins/core/rest-api-plugin-methods/patch.js:58: // Validate PATCH payload to ensure the partial update actually contains changes.
|
|
7
|
+
plugins/core/rest-api-plugin-methods/patch.js:64: validatePatchPayload(context.inputRecord, scopes)
|
|
8
|
+
plugins/core/rest-api-plugin-methods/patch.js:66: // Validate that user has read access to all related resources
|
|
9
|
+
plugins/core/rest-api-plugin-methods/patch.js:68: await validateRelationshipAccess(context, context.inputRecord, helpers, runHooks, api)
|
|
10
|
+
plugins/core/rest-api-plugin-methods/patch.js:78: await validateResourceAttributesBeforeWrite({
|
|
11
|
+
plugins/core/rest-api-plugin-methods/patch.js:80: schema,
|
|
12
|
+
plugins/core/rest-api-plugin-methods/patch.js:123: context.schemaInfo,
|
|
13
|
+
plugins/core/rest-api-plugin-methods/patch.js:154: validatePivotResource(scopes, relDef, relName)
|
|
14
|
+
plugins/core/rest-api-plugin-methods/patch.js:172: schemaStructure,
|
|
15
|
+
plugins/core/rest-api-plugin-methods/patch.js:173: schemaRelationships,
|
|
16
|
+
plugins/core/rest-api-plugin-methods/put.js:2:import { validatePutPayload } from '../lib/querying-writing/payload-validators.js'
|
|
17
|
+
plugins/core/rest-api-plugin-methods/put.js:8: validateResourceAttributesBeforeWrite,
|
|
18
|
+
plugins/core/rest-api-plugin-methods/put.js:9: validateRelationshipAccess,
|
|
19
|
+
plugins/core/rest-api-plugin-methods/put.js:11: validatePivotResource,
|
|
20
|
+
plugins/core/rest-api-plugin-methods/put.js:41: const { schema, schemaStructure, schemaRelationships } = await setupCommonRequest({
|
|
21
|
+
plugins/core/rest-api-plugin-methods/put.js:57: // Validate PUT payload to ensure it's a complete resource replacement operation.
|
|
22
|
+
plugins/core/rest-api-plugin-methods/put.js:59: // It validates that data.id matches the URL parameter, prevents 'included' array (which is
|
|
23
|
+
plugins/core/rest-api-plugin-methods/put.js:60: // read-only), and ensures the payload represents a complete replacement. Any fields not
|
|
24
|
+
plugins/core/rest-api-plugin-methods/put.js:63: validatePutPayload(context.inputRecord, scopes)
|
|
25
|
+
plugins/core/rest-api-plugin-methods/put.js:65: // Validate that user has read access to all related resources
|
|
26
|
+
plugins/core/rest-api-plugin-methods/put.js:67: await validateRelationshipAccess(context, context.inputRecord, helpers, runHooks, api)
|
|
27
|
+
plugins/core/rest-api-plugin-methods/put.js:77: await validateResourceAttributesBeforeWrite({
|
|
28
|
+
plugins/core/rest-api-plugin-methods/put.js:79: schema,
|
|
29
|
+
plugins/core/rest-api-plugin-methods/put.js:116: for (const [relName, relDef] of Object.entries(schemaRelationships || {})) {
|
|
30
|
+
plugins/core/rest-api-plugin-methods/put.js:129: // Also check schema fields for belongsTo relationships
|
|
31
|
+
plugins/core/rest-api-plugin-methods/put.js:130: for (const [fieldName, fieldDef] of Object.entries(schemaStructure)) {
|
|
32
|
+
plugins/core/rest-api-plugin-methods/put.js:183: context.schemaInfo,
|
|
33
|
+
plugins/core/rest-api-plugin-methods/put.js:212: await validatePivotResource(scopes, relDef, relName)
|
|
34
|
+
plugins/core/rest-api-plugin-methods/put.js:234: schemaStructure,
|
|
35
|
+
plugins/core/rest-api-plugin-methods/put.js:235: schemaRelationships,
|
|
36
|
+
plugins/core/rest-api-plugin-methods/post.js:1:import { validatePostPayload } from '../lib/querying-writing/payload-validators.js'
|
|
37
|
+
plugins/core/rest-api-plugin-methods/post.js:6: validateResourceAttributesBeforeWrite,
|
|
38
|
+
plugins/core/rest-api-plugin-methods/post.js:7: validateRelationshipAccess,
|
|
39
|
+
plugins/core/rest-api-plugin-methods/post.js:9: validatePivotResource,
|
|
40
|
+
plugins/core/rest-api-plugin-methods/post.js:38: const { schema, schemaStructure, schemaRelationships } = await setupCommonRequest({
|
|
41
|
+
plugins/core/rest-api-plugin-methods/post.js:53: // Validate POST payload to ensure it follows JSON:API format and references valid resources.
|
|
42
|
+
plugins/core/rest-api-plugin-methods/post.js:54: // This checks the payload has required 'data' object with 'type' and 'attributes', validates
|
|
43
|
+
plugins/core/rest-api-plugin-methods/post.js:58: validatePostPayload(context.inputRecord, scopes)
|
|
44
|
+
plugins/core/rest-api-plugin-methods/post.js:60: // Validate that user has read access to all related resources
|
|
45
|
+
plugins/core/rest-api-plugin-methods/post.js:62: await validateRelationshipAccess(context, context.inputRecord, helpers, runHooks, api)
|
|
46
|
+
plugins/core/rest-api-plugin-methods/post.js:80: await validateResourceAttributesBeforeWrite({
|
|
47
|
+
plugins/core/rest-api-plugin-methods/post.js:82: schema,
|
|
48
|
+
plugins/core/rest-api-plugin-methods/post.js:110: context.schemaInfo,
|
|
49
|
+
plugins/core/rest-api-plugin-methods/post.js:139: // Validate pivot resource exists
|
|
50
|
+
plugins/core/rest-api-plugin-methods/post.js:140: validatePivotResource(scopes, relDef, relName)
|
|
51
|
+
plugins/core/rest-api-plugin-methods/post.js:149: schemaStructure,
|
|
52
|
+
plugins/core/rest-api-plugin-methods/post.js:150: schemaRelationships,
|
|
53
|
+
plugins/core/lib/querying-writing/payload-validators.js:1:import { RestApiValidationError, RestApiPayloadError } from '../../../../lib/rest-api-errors.js'
|
|
54
|
+
plugins/core/lib/querying-writing/payload-validators.js:4: * Validates that include paths don't exceed maximum depth
|
|
55
|
+
plugins/core/lib/querying-writing/payload-validators.js:6: * @param {string[]} includes - Array of include paths to validate
|
|
56
|
+
plugins/core/lib/querying-writing/payload-validators.js:13: * validateIncludeDepth(['author', 'comments.author'], 3);
|
|
57
|
+
plugins/core/lib/querying-writing/payload-validators.js:18: * validateIncludeDepth(['author.company.employees.manager'], 3);
|
|
58
|
+
plugins/core/lib/querying-writing/payload-validators.js:24:function validateIncludeDepth (includes, maxDepth) {
|
|
59
|
+
plugins/core/lib/querying-writing/payload-validators.js:31: continue // Let other validators handle type errors
|
|
60
|
+
plugins/core/lib/querying-writing/payload-validators.js:52: * Validates a JSON:API resource identifier object
|
|
61
|
+
plugins/core/lib/querying-writing/payload-validators.js:54: * @param {Object} identifier - Resource identifier to validate
|
|
62
|
+
plugins/core/lib/querying-writing/payload-validators.js:58: * @throws {RestApiPayloadError|RestApiValidationError} If validation fails
|
|
63
|
+
plugins/core/lib/querying-writing/payload-validators.js:62: * validateResourceIdentifier(
|
|
64
|
+
plugins/core/lib/querying-writing/payload-validators.js:71: * validateResourceIdentifier(
|
|
65
|
+
plugins/core/lib/querying-writing/payload-validators.js:76: * // Throws: RestApiPayloadError
|
|
66
|
+
plugins/core/lib/querying-writing/payload-validators.js:81: * validateResourceIdentifier(
|
|
67
|
+
plugins/core/lib/querying-writing/payload-validators.js:91: * - validateRelationship to check relationship data
|
|
68
|
+
plugins/core/lib/querying-writing/payload-validators.js:92: * - validatePostPayload to validate included resources
|
|
69
|
+
plugins/core/lib/querying-writing/payload-validators.js:97: * - Validates resource types exist in the system
|
|
70
|
+
plugins/core/lib/querying-writing/payload-validators.js:102:function validateResourceIdentifier (identifier, context, scopes = null) {
|
|
71
|
+
plugins/core/lib/querying-writing/payload-validators.js:104: throw new RestApiPayloadError(
|
|
72
|
+
plugins/core/lib/querying-writing/payload-validators.js:111: throw new RestApiPayloadError(
|
|
73
|
+
plugins/core/lib/querying-writing/payload-validators.js:129: throw new RestApiPayloadError(
|
|
74
|
+
plugins/core/lib/querying-writing/payload-validators.js:136: throw new RestApiPayloadError(
|
|
75
|
+
plugins/core/lib/querying-writing/payload-validators.js:144: * Validates a relationship object in JSON:API format
|
|
76
|
+
plugins/core/lib/querying-writing/payload-validators.js:146: * @param {Object} relationship - Relationship object to validate
|
|
77
|
+
plugins/core/lib/querying-writing/payload-validators.js:150: * @throws {RestApiPayloadError} If validation fails
|
|
78
|
+
plugins/core/lib/querying-writing/payload-validators.js:154: * validateRelationship(
|
|
79
|
+
plugins/core/lib/querying-writing/payload-validators.js:163: * validateRelationship(
|
|
80
|
+
plugins/core/lib/querying-writing/payload-validators.js:177: * validateRelationship(
|
|
81
|
+
plugins/core/lib/querying-writing/payload-validators.js:186: * validateRelationship(
|
|
82
|
+
plugins/core/lib/querying-writing/payload-validators.js:191: * // Throws: RestApiPayloadError
|
|
83
|
+
plugins/core/lib/querying-writing/payload-validators.js:196: * - validatePostPayload for new resource relationships
|
|
84
|
+
plugins/core/lib/querying-writing/payload-validators.js:197: * - validatePutPayload for relationship replacement
|
|
85
|
+
plugins/core/lib/querying-writing/payload-validators.js:198: * - validatePatchPayload for relationship updates
|
|
86
|
+
plugins/core/lib/querying-writing/payload-validators.js:202: * - Validates both to-one and to-many relationships
|
|
87
|
+
plugins/core/lib/querying-writing/payload-validators.js:204: * - Validates each resource identifier in arrays
|
|
88
|
+
plugins/core/lib/querying-writing/payload-validators.js:208:function validateRelationship (relationship, relationshipName, scopes = null) {
|
|
89
|
+
plugins/core/lib/querying-writing/payload-validators.js:210: throw new RestApiPayloadError(
|
|
90
|
+
plugins/core/lib/querying-writing/payload-validators.js:217: throw new RestApiPayloadError(
|
|
91
|
+
plugins/core/lib/querying-writing/payload-validators.js:232: validateResourceIdentifier(data, `Relationship '${relationshipName}'`, scopes)
|
|
92
|
+
plugins/core/lib/querying-writing/payload-validators.js:242: validateResourceIdentifier(identifier, `Relationship '${relationshipName}[${index}]'`, scopes)
|
|
93
|
+
plugins/core/lib/querying-writing/payload-validators.js:247: * Validates query parameters for GET requests (single resource retrieval)
|
|
94
|
+
plugins/core/lib/querying-writing/payload-validators.js:253: * @param {Object} [params.queryParams.fields] - Sparse fieldsets by resource type
|
|
95
|
+
plugins/core/lib/querying-writing/payload-validators.js:256: * @throws {RestApiValidationError|RestApiPayloadError} If validation fails
|
|
96
|
+
plugins/core/lib/querying-writing/payload-validators.js:260: * validateGetPayload({
|
|
97
|
+
plugins/core/lib/querying-writing/payload-validators.js:267: * validateGetPayload({
|
|
98
|
+
plugins/core/lib/querying-writing/payload-validators.js:276: * // Input: GET with sparse fieldsets
|
|
99
|
+
plugins/core/lib/querying-writing/payload-validators.js:277: * validateGetPayload({
|
|
100
|
+
plugins/core/lib/querying-writing/payload-validators.js:291: * validateGetPayload({
|
|
101
|
+
plugins/core/lib/querying-writing/payload-validators.js:299: * validateGetPayload({
|
|
102
|
+
plugins/core/lib/querying-writing/payload-validators.js:307: * // Throws: RestApiPayloadError
|
|
103
|
+
plugins/core/lib/querying-writing/payload-validators.js:313: * - Validates parameters before passing to storage layer
|
|
104
|
+
plugins/core/lib/querying-writing/payload-validators.js:317: * - Validates JSON:API query parameter structure
|
|
105
|
+
plugins/core/lib/querying-writing/payload-validators.js:324: * 2. Validates required ID parameter
|
|
106
|
+
plugins/core/lib/querying-writing/payload-validators.js:325: * 3. If queryParams exist, validates each type
|
|
107
|
+
plugins/core/lib/querying-writing/payload-validators.js:326: * 4. Validates include paths don't exceed depth limit
|
|
108
|
+
plugins/core/lib/querying-writing/payload-validators.js:329:export function validateGetPayload (params, maxIncludeDepth = 3) {
|
|
109
|
+
plugins/core/lib/querying-writing/payload-validators.js:331: throw new RestApiPayloadError(
|
|
110
|
+
plugins/core/lib/querying-writing/payload-validators.js:337: // Validate ID
|
|
111
|
+
plugins/core/lib/querying-writing/payload-validators.js:352: // Validate queryParams if present
|
|
112
|
+
plugins/core/lib/querying-writing/payload-validators.js:355: throw new RestApiPayloadError(
|
|
113
|
+
plugins/core/lib/querying-writing/payload-validators.js:363: // Validate include
|
|
114
|
+
plugins/core/lib/querying-writing/payload-validators.js:366: throw new RestApiPayloadError(
|
|
115
|
+
plugins/core/lib/querying-writing/payload-validators.js:374: throw new RestApiPayloadError(
|
|
116
|
+
plugins/core/lib/querying-writing/payload-validators.js:381: // Validate include depth
|
|
117
|
+
plugins/core/lib/querying-writing/payload-validators.js:382: validateIncludeDepth(include, maxIncludeDepth)
|
|
118
|
+
plugins/core/lib/querying-writing/payload-validators.js:385: // Validate fields
|
|
119
|
+
plugins/core/lib/querying-writing/payload-validators.js:388: throw new RestApiPayloadError(
|
|
120
|
+
plugins/core/lib/querying-writing/payload-validators.js:396: throw new RestApiPayloadError(
|
|
121
|
+
plugins/core/lib/querying-writing/payload-validators.js:409: * Validates query parameters for collection requests (query/list operations)
|
|
122
|
+
plugins/core/lib/querying-writing/payload-validators.js:414: * @param {Object} [params.queryParams.fields] - Sparse fieldsets by resource type
|
|
123
|
+
plugins/core/lib/querying-writing/payload-validators.js:421: * @throws {RestApiValidationError|RestApiPayloadError} If validation fails
|
|
124
|
+
plugins/core/lib/querying-writing/payload-validators.js:425: * validateQueryPayload({}, ['title', 'createdAt']);
|
|
125
|
+
plugins/core/lib/querying-writing/payload-validators.js:430: * validateQueryPayload({
|
|
126
|
+
plugins/core/lib/querying-writing/payload-validators.js:444: * validateQueryPayload({
|
|
127
|
+
plugins/core/lib/querying-writing/payload-validators.js:452: * validateQueryPayload({
|
|
128
|
+
plugins/core/lib/querying-writing/payload-validators.js:461: * validateQueryPayload({
|
|
129
|
+
plugins/core/lib/querying-writing/payload-validators.js:481: * validateQueryPayload({
|
|
130
|
+
plugins/core/lib/querying-writing/payload-validators.js:492: * - Validates collection request parameters
|
|
131
|
+
plugins/core/lib/querying-writing/payload-validators.js:495: * - Validates all JSON:API query parameters for collections
|
|
132
|
+
plugins/core/lib/querying-writing/payload-validators.js:499: * - Validates include depth limits
|
|
133
|
+
plugins/core/lib/querying-writing/payload-validators.js:502: * 1. Validates params object structure
|
|
134
|
+
plugins/core/lib/querying-writing/payload-validators.js:503: * 2. For each query parameter type, validates format
|
|
135
|
+
plugins/core/lib/querying-writing/payload-validators.js:505: * 4. Validates pagination parameters are numbers/strings
|
|
136
|
+
plugins/core/lib/querying-writing/payload-validators.js:508:export function validateQueryPayload (params, sortableFields = [], maxIncludeDepth = 3) {
|
|
137
|
+
plugins/core/lib/querying-writing/payload-validators.js:510: throw new RestApiPayloadError(
|
|
138
|
+
plugins/core/lib/querying-writing/payload-validators.js:519: throw new RestApiPayloadError(
|
|
139
|
+
plugins/core/lib/querying-writing/payload-validators.js:527: // Validate include
|
|
140
|
+
plugins/core/lib/querying-writing/payload-validators.js:530: throw new RestApiPayloadError(
|
|
141
|
+
plugins/core/lib/querying-writing/payload-validators.js:538: throw new RestApiPayloadError(
|
|
142
|
+
plugins/core/lib/querying-writing/payload-validators.js:545: // Validate include depth
|
|
143
|
+
plugins/core/lib/querying-writing/payload-validators.js:546: validateIncludeDepth(include, maxIncludeDepth)
|
|
144
|
+
plugins/core/lib/querying-writing/payload-validators.js:549: // Validate fields
|
|
145
|
+
plugins/core/lib/querying-writing/payload-validators.js:552: throw new RestApiPayloadError(
|
|
146
|
+
plugins/core/lib/querying-writing/payload-validators.js:560: throw new RestApiPayloadError(
|
|
147
|
+
plugins/core/lib/querying-writing/payload-validators.js:568: // Validate filters
|
|
148
|
+
plugins/core/lib/querying-writing/payload-validators.js:571: throw new RestApiPayloadError(
|
|
149
|
+
plugins/core/lib/querying-writing/payload-validators.js:578: // Validate sort
|
|
150
|
+
plugins/core/lib/querying-writing/payload-validators.js:581: throw new RestApiPayloadError(
|
|
151
|
+
plugins/core/lib/querying-writing/payload-validators.js:589: throw new RestApiPayloadError(
|
|
152
|
+
plugins/core/lib/querying-writing/payload-validators.js:606: // Validate page
|
|
153
|
+
plugins/core/lib/querying-writing/payload-validators.js:609: throw new RestApiPayloadError(
|
|
154
|
+
plugins/core/lib/querying-writing/payload-validators.js:617: throw new RestApiPayloadError(
|
|
155
|
+
plugins/core/lib/querying-writing/payload-validators.js:624: throw new RestApiPayloadError(
|
|
156
|
+
plugins/core/lib/querying-writing/payload-validators.js:631: throw new RestApiPayloadError(
|
|
157
|
+
plugins/core/lib/querying-writing/payload-validators.js:638: throw new RestApiPayloadError(
|
|
158
|
+
plugins/core/lib/querying-writing/payload-validators.js:650: * Validates a JSON:API document for POST requests (resource creation)
|
|
159
|
+
plugins/core/lib/querying-writing/payload-validators.js:652: * @param {Object} inputRecord - JSON:API document to validate
|
|
160
|
+
plugins/core/lib/querying-writing/payload-validators.js:661: * @throws {RestApiValidationError|RestApiPayloadError} If validation fails
|
|
161
|
+
plugins/core/lib/querying-writing/payload-validators.js:665: * validatePostPayload({
|
|
162
|
+
plugins/core/lib/querying-writing/payload-validators.js:678: * validatePostPayload({
|
|
163
|
+
plugins/core/lib/querying-writing/payload-validators.js:697: * // Output: true (validates each relationship)
|
|
164
|
+
plugins/core/lib/querying-writing/payload-validators.js:701: * validatePostPayload({
|
|
165
|
+
plugins/core/lib/querying-writing/payload-validators.js:714: * validatePostPayload({
|
|
166
|
+
plugins/core/lib/querying-writing/payload-validators.js:735: * // Output: true (included resources validated)
|
|
167
|
+
plugins/core/lib/querying-writing/payload-validators.js:739: * validatePostPayload({
|
|
168
|
+
plugins/core/lib/querying-writing/payload-validators.js:744: * // Throws: RestApiPayloadError
|
|
169
|
+
plugins/core/lib/querying-writing/payload-validators.js:750: * - Validates complete document structure
|
|
170
|
+
plugins/core/lib/querying-writing/payload-validators.js:754: * - Validates resource types exist in system
|
|
171
|
+
plugins/core/lib/querying-writing/payload-validators.js:756: * - Validates included resources have required fields
|
|
172
|
+
plugins/core/lib/querying-writing/payload-validators.js:760: * 1. Validates document has required 'data' property
|
|
173
|
+
plugins/core/lib/querying-writing/payload-validators.js:762: * 3. Validates attributes object if present
|
|
174
|
+
plugins/core/lib/querying-writing/payload-validators.js:763: * 4. Validates each relationship if present
|
|
175
|
+
plugins/core/lib/querying-writing/payload-validators.js:764: * 5. Validates included resources array if present
|
|
176
|
+
plugins/core/lib/querying-writing/payload-validators.js:767:export function validatePostPayload (inputRecord, scopes = null) {
|
|
177
|
+
plugins/core/lib/querying-writing/payload-validators.js:769: throw new RestApiPayloadError(
|
|
178
|
+
plugins/core/lib/querying-writing/payload-validators.js:775: // Validate required 'data' property
|
|
179
|
+
plugins/core/lib/querying-writing/payload-validators.js:777: throw new RestApiPayloadError(
|
|
180
|
+
plugins/core/lib/querying-writing/payload-validators.js:785: // Validate primary data
|
|
181
|
+
plugins/core/lib/querying-writing/payload-validators.js:787: throw new RestApiPayloadError(
|
|
182
|
+
plugins/core/lib/querying-writing/payload-validators.js:794: throw new RestApiPayloadError(
|
|
183
|
+
plugins/core/lib/querying-writing/payload-validators.js:810: throw new RestApiPayloadError(
|
|
184
|
+
plugins/core/lib/querying-writing/payload-validators.js:816: // Validate attributes if present
|
|
185
|
+
plugins/core/lib/querying-writing/payload-validators.js:819: throw new RestApiPayloadError(
|
|
186
|
+
plugins/core/lib/querying-writing/payload-validators.js:826: // Validate relationships if present
|
|
187
|
+
plugins/core/lib/querying-writing/payload-validators.js:829: throw new RestApiPayloadError(
|
|
188
|
+
plugins/core/lib/querying-writing/payload-validators.js:836: validateRelationship(relationship, relName, scopes)
|
|
189
|
+
plugins/core/lib/querying-writing/payload-validators.js:840: // Validate included resources if present
|
|
190
|
+
plugins/core/lib/querying-writing/payload-validators.js:843: throw new RestApiPayloadError(
|
|
191
|
+
plugins/core/lib/querying-writing/payload-validators.js:851: throw new RestApiPayloadError(
|
|
192
|
+
plugins/core/lib/querying-writing/payload-validators.js:858: throw new RestApiPayloadError(
|
|
193
|
+
plugins/core/lib/querying-writing/payload-validators.js:873: throw new RestApiPayloadError(
|
|
194
|
+
plugins/core/lib/querying-writing/payload-validators.js:880: throw new RestApiPayloadError(
|
|
195
|
+
plugins/core/lib/querying-writing/payload-validators.js:888: throw new RestApiPayloadError(
|
|
196
|
+
plugins/core/lib/querying-writing/payload-validators.js:901: * Validates a JSON:API document for PUT requests (full resource replacement)
|
|
197
|
+
plugins/core/lib/querying-writing/payload-validators.js:903: * @param {Object} inputRecord - JSON:API document to validate
|
|
198
|
+
plugins/core/lib/querying-writing/payload-validators.js:911: * @throws {RestApiValidationError|RestApiPayloadError} If validation fails
|
|
199
|
+
plugins/core/lib/querying-writing/payload-validators.js:915: * validatePutPayload({
|
|
200
|
+
plugins/core/lib/querying-writing/payload-validators.js:930: * validatePutPayload({
|
|
201
|
+
plugins/core/lib/querying-writing/payload-validators.js:959: * validatePutPayload({
|
|
202
|
+
plugins/core/lib/querying-writing/payload-validators.js:965: * // Throws: RestApiPayloadError
|
|
203
|
+
plugins/core/lib/querying-writing/payload-validators.js:970: * validatePutPayload({
|
|
204
|
+
plugins/core/lib/querying-writing/payload-validators.js:980: * // Throws: RestApiPayloadError
|
|
205
|
+
plugins/core/lib/querying-writing/payload-validators.js:996: * 1. Validates document structure with data property
|
|
206
|
+
plugins/core/lib/querying-writing/payload-validators.js:998: * 3. Validates resource type exists in scopes
|
|
207
|
+
plugins/core/lib/querying-writing/payload-validators.js:1000: * 5. Validates attributes and relationships if present
|
|
208
|
+
plugins/core/lib/querying-writing/payload-validators.js:1003:export function validatePutPayload (inputRecord, scopes = null) {
|
|
209
|
+
plugins/core/lib/querying-writing/payload-validators.js:1005: throw new RestApiPayloadError(
|
|
210
|
+
plugins/core/lib/querying-writing/payload-validators.js:1011: // Validate required 'data' property
|
|
211
|
+
plugins/core/lib/querying-writing/payload-validators.js:1013: throw new RestApiPayloadError(
|
|
212
|
+
plugins/core/lib/querying-writing/payload-validators.js:1023: throw new RestApiPayloadError(
|
|
213
|
+
plugins/core/lib/querying-writing/payload-validators.js:1029: // Validate primary data
|
|
214
|
+
plugins/core/lib/querying-writing/payload-validators.js:1031: throw new RestApiPayloadError(
|
|
215
|
+
plugins/core/lib/querying-writing/payload-validators.js:1038: throw new RestApiPayloadError(
|
|
216
|
+
plugins/core/lib/querying-writing/payload-validators.js:1054: throw new RestApiPayloadError(
|
|
217
|
+
plugins/core/lib/querying-writing/payload-validators.js:1068: throw new RestApiPayloadError(
|
|
218
|
+
plugins/core/lib/querying-writing/payload-validators.js:1074: // Validate attributes if present
|
|
219
|
+
plugins/core/lib/querying-writing/payload-validators.js:1077: throw new RestApiPayloadError(
|
|
220
|
+
plugins/core/lib/querying-writing/payload-validators.js:1084: // Validate relationships if present
|
|
221
|
+
plugins/core/lib/querying-writing/payload-validators.js:1087: throw new RestApiPayloadError(
|
|
222
|
+
plugins/core/lib/querying-writing/payload-validators.js:1094: validateRelationship(relationship, relName, scopes)
|
|
223
|
+
plugins/core/lib/querying-writing/payload-validators.js:1102: * Validates a JSON:API document for PATCH requests (partial resource updates)
|
|
224
|
+
plugins/core/lib/querying-writing/payload-validators.js:1104: * @param {Object} inputRecord - JSON:API document to validate
|
|
225
|
+
plugins/core/lib/querying-writing/payload-validators.js:1112: * @throws {RestApiValidationError|RestApiPayloadError} If validation fails
|
|
226
|
+
plugins/core/lib/querying-writing/payload-validators.js:1116: * validatePatchPayload({
|
|
227
|
+
plugins/core/lib/querying-writing/payload-validators.js:1130: * validatePatchPayload({
|
|
228
|
+
plugins/core/lib/querying-writing/payload-validators.js:1145: * validatePatchPayload({
|
|
229
|
+
plugins/core/lib/querying-writing/payload-validators.js:1161: * validatePatchPayload({
|
|
230
|
+
plugins/core/lib/querying-writing/payload-validators.js:1179: * validatePatchPayload({
|
|
231
|
+
plugins/core/lib/querying-writing/payload-validators.js:1202: * 1. Validates document structure with data property
|
|
232
|
+
plugins/core/lib/querying-writing/payload-validators.js:1204: * 3. Validates resource type exists in scopes
|
|
233
|
+
plugins/core/lib/querying-writing/payload-validators.js:1207: * 6. Validates each if present
|
|
234
|
+
plugins/core/lib/querying-writing/payload-validators.js:1210:export function validatePatchPayload (inputRecord, scopes = null) {
|
|
235
|
+
plugins/core/lib/querying-writing/payload-validators.js:1212: throw new RestApiPayloadError(
|
|
236
|
+
plugins/core/lib/querying-writing/payload-validators.js:1218: // Validate required 'data' property
|
|
237
|
+
plugins/core/lib/querying-writing/payload-validators.js:1220: throw new RestApiPayloadError(
|
|
238
|
+
plugins/core/lib/querying-writing/payload-validators.js:1230: throw new RestApiPayloadError(
|
|
239
|
+
plugins/core/lib/querying-writing/payload-validators.js:1236: // Validate primary data
|
|
240
|
+
plugins/core/lib/querying-writing/payload-validators.js:1238: throw new RestApiPayloadError(
|
|
241
|
+
plugins/core/lib/querying-writing/payload-validators.js:1245: throw new RestApiPayloadError(
|
|
242
|
+
plugins/core/lib/querying-writing/payload-validators.js:1261: throw new RestApiPayloadError(
|
|
243
|
+
plugins/core/lib/querying-writing/payload-validators.js:1275: throw new RestApiPayloadError(
|
|
244
|
+
plugins/core/lib/querying-writing/payload-validators.js:1289: // Validate attributes if present
|
|
245
|
+
plugins/core/lib/querying-writing/payload-validators.js:1292: throw new RestApiPayloadError(
|
|
246
|
+
plugins/core/lib/querying-writing/payload-validators.js:1299: // Validate relationships if present
|
|
247
|
+
plugins/core/lib/querying-writing/payload-validators.js:1302: throw new RestApiPayloadError(
|
|
248
|
+
plugins/core/lib/querying-writing/payload-validators.js:1309: validateRelationship(relationship, relName, scopes)
|
|
249
|
+
plugins/core/lib/querying-writing/field-utils.js:2: * Extracts all foreign key fields from a schema definition
|
|
250
|
+
plugins/core/lib/querying-writing/field-utils.js:4: * @param {Object} schema - The schema definition (Schema object or plain object)
|
|
251
|
+
plugins/core/lib/querying-writing/field-utils.js:8: * // Input: Schema with belongsTo relationships
|
|
252
|
+
plugins/core/lib/querying-writing/field-utils.js:9: * const schema = {
|
|
253
|
+
plugins/core/lib/querying-writing/field-utils.js:17: * const foreignKeys = getForeignKeyFields(schema);
|
|
254
|
+
plugins/core/lib/querying-writing/field-utils.js:23: * // Input: Works with compiled Schema objects too
|
|
255
|
+
plugins/core/lib/querying-writing/field-utils.js:24: * const schemaObject = {
|
|
256
|
+
plugins/core/lib/querying-writing/field-utils.js:31: * const foreignKeys = getForeignKeyFields(schemaObject);
|
|
257
|
+
plugins/core/lib/querying-writing/field-utils.js:49: * 1. Accepts schema in either format (plain or with structure property)
|
|
258
|
+
plugins/core/lib/querying-writing/field-utils.js:54:export const getForeignKeyFields = (schema) => {
|
|
259
|
+
plugins/core/lib/querying-writing/field-utils.js:56: if (!schema) return foreignKeys
|
|
260
|
+
plugins/core/lib/querying-writing/field-utils.js:58: // Handle both Schema objects and plain objects
|
|
261
|
+
plugins/core/lib/querying-writing/field-utils.js:59: const schemaStructure = schema.structure || schema
|
|
262
|
+
plugins/core/lib/querying-writing/field-utils.js:61: Object.entries(schemaStructure).forEach(([field, def]) => {
|
|
263
|
+
plugins/core/lib/querying-writing/field-utils.js:70: * Filters hidden fields from attributes based on schema rules.
|
|
264
|
+
plugins/core/lib/querying-writing/field-utils.js:73: * based on the schema definition and requested fields. It ensures that
|
|
265
|
+
plugins/core/lib/querying-writing/field-utils.js:77: * @param {Object} schema - The schema object with structure property
|
|
266
|
+
plugins/core/lib/querying-writing/field-utils.js:88: * const schema = {
|
|
267
|
+
plugins/core/lib/querying-writing/field-utils.js:96: * const filtered = filterHiddenFields(attributes, schema, null);
|
|
268
|
+
plugins/core/lib/querying-writing/field-utils.js:101: * const filtered = filterHiddenFields(attributes, schema, 'name,internal_id');
|
|
269
|
+
plugins/core/lib/querying-writing/field-utils.js:106:export const filterHiddenFields = (attributes, schema, requestedFields) => {
|
|
270
|
+
plugins/core/lib/querying-writing/field-utils.js:109: // Parse requested fields if it's a string (from query params)
|
|
271
|
+
plugins/core/lib/querying-writing/field-utils.js:120: const fieldDef = schema.structure?.[field]
|
|
272
|
+
plugins/core/lib/querying-writing/field-utils.js:128: // via sparse fieldsets like ?fields[products]=name,cost
|
|
273
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:2: * Normalizes a date value to appropriate format based on field type
|
|
274
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:10: * normalizeDateValue(new Date('2024-01-15T10:30:00Z'), 'dateTime');
|
|
275
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:15: * normalizeDateValue('2024-01-15 10:30:00', 'dateTime');
|
|
276
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:16: * // Output: Date object parsed as UTC (2024-01-15T10:30:00Z)
|
|
277
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:20: * normalizeDateValue('2024-01-15', 'date');
|
|
278
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:25: * normalizeDateValue('14:30:45', 'time');
|
|
279
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:30: * normalizeDateValue(new Date('2024-01-15T14:30:45Z'), 'time');
|
|
280
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:35: * - normalizeAttributes to process individual field values
|
|
281
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:51:function normalizeDateValue (value, type) {
|
|
282
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:67: // Try to parse and extract time
|
|
283
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:111: // Try to parse any other format
|
|
284
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:124: * Normalizes database values in an attributes object
|
|
285
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:126: * @param {Object} attributes - The attributes object to normalize
|
|
286
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:127: * @param {Object} schemaStructure - The schema structure defining field types
|
|
287
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:128: * @returns {Object} The normalized attributes object
|
|
288
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:140: * const schema = {
|
|
289
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:147: * const normalized = normalizeAttributes(attributes, schema);
|
|
290
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:167: * const normalized = normalizeAttributes(attributes, {
|
|
291
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:184: * - normalizeRecordAttributes for each record's attributes
|
|
292
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:189: * - Normalizes date formats from different databases
|
|
293
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:195: * 2. Iterates through each field with schema definition
|
|
294
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:196: * 3. Normalizes booleans: 1/0 or '1'/'0' to true/false
|
|
295
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:197: * 4. Normalizes dates using normalizeDateValue
|
|
296
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:198: * 5. Returns new object with normalized values
|
|
297
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:200:export function normalizeAttributes (attributes, schemaStructure) {
|
|
298
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:201: if (!attributes || !schemaStructure) {
|
|
299
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:205: const normalized = { ...attributes }
|
|
300
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:209: const fieldDef = schemaStructure[fieldName]
|
|
301
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:214: // Normalize boolean values
|
|
302
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:217: normalized[fieldName] = true
|
|
303
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:219: normalized[fieldName] = false
|
|
304
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:224: // Normalize date/dateTime/time values
|
|
305
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:226: normalized[fieldName] = normalizeDateValue(value, fieldDef.type)
|
|
306
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:230: return normalized
|
|
307
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:234: * Normalizes all records in a JSON:API response
|
|
308
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:237: * @param {Object} scopes - All available scopes for schema lookup
|
|
309
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:238: * @returns {Object} The response with normalized values
|
|
310
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:263: * const normalized = normalizeRecordAttributes(response, scopes);
|
|
311
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:265: * // Output: All booleans and dates normalized
|
|
312
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:304: * // Each record in the array is normalized
|
|
313
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:315: * - Uses schema definitions to determine field types
|
|
314
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:319: * 2. For each record, looks up its schema by type
|
|
315
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:320: * 3. Calls normalizeAttributes with schema structure
|
|
316
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:322: * 5. Returns complete response with normalized values
|
|
317
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:324:export function normalizeRecordAttributes (record, scopes) {
|
|
318
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:329: // Normalize main data records
|
|
319
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:335: if (scope?.vars?.schemaInfo?.schemaStructure && entry.attributes) {
|
|
320
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:336: entry.attributes = normalizeAttributes(
|
|
321
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:338: scope.vars.schemaInfo.schemaStructure
|
|
322
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:346: if (scope?.vars?.schemaInfo?.schemaStructure && entry.attributes) {
|
|
323
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:347: entry.attributes = normalizeAttributes(
|
|
324
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:349: scope.vars.schemaInfo.schemaStructure
|
|
325
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:355: // Normalize included records
|
|
326
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:359: if (scope?.vars?.schemaInfo?.schemaStructure && entry.attributes) {
|
|
327
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:360: entry.attributes = normalizeAttributes(
|
|
328
|
+
plugins/core/lib/querying-writing/database-value-normalizers.js:362: scope.vars.schemaInfo.schemaStructure
|
|
329
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:5: * @param {Object} schemaInfo - Schema info with computed fields and structure
|
|
330
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:10: * const schemaInfo = {
|
|
331
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:12: * schemaStructure: { price: { type: 'number' } }
|
|
332
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:14: * isNonDatabaseField('profit_margin', schemaInfo);
|
|
333
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:19: * const schemaInfo = {
|
|
334
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:21: * schemaStructure: {
|
|
335
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:25: * isNonDatabaseField('temp_password', schemaInfo);
|
|
336
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:39:export const isNonDatabaseField = (fieldName, schemaInfo) => {
|
|
337
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:40: const { computed = {}, schemaStructure = {} } = schemaInfo
|
|
338
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:42: const fieldDef = schemaStructure[fieldName]
|
|
339
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:47: * Builds the field selection list for database queries with sparse fieldset support
|
|
340
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:49: * @param {Object} scope - Resource scope with schema information
|
|
341
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:51: * @param {Object} deps.context - Request context with queryParams and schemaInfo
|
|
342
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:55: * // Input: Basic sparse fieldset request
|
|
343
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:60: * schemaInfo: { idProperty: 'id', ... }
|
|
344
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:76: * const schemaInfo = {
|
|
345
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:83: * schemaStructure: {
|
|
346
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:104: * // Input: No sparse fieldsets (returns all visible fields)
|
|
347
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:108: * schemaInfo: { ... }
|
|
348
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:127: * - Implements JSON:API sparse fieldsets specification
|
|
349
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:135: * 2. Parses requested fields from query string
|
|
350
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:136: * 3. Validates requested fields exist in schema
|
|
351
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:148: schemaInfo: { schemaInstance, computed: computedFields = {}, schemaStructure }
|
|
352
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:156: const idProperty = context.schemaInfo.idProperty
|
|
353
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:166: // Handle both Schema objects and plain objects
|
|
354
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:167: if (!schemaStructure) {
|
|
355
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:168: schemaStructure = schemaInstance?.structure || schemaInstance || {}
|
|
356
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:171: // Get computed fields and virtual fields from schema
|
|
357
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:174: // Find fields marked as virtual in the schema
|
|
358
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:176: Object.entries(schemaStructure).forEach(([fieldName, fieldDef]) => {
|
|
359
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:184: // Parse requested fields
|
|
360
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:194: // Sparse fieldsets requested - only select specified fields
|
|
361
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:202: const fieldDef = schemaStructure[field]
|
|
362
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:203: if (!fieldDef) throw new Error(`Unknown sparse field '${field}' requested for '${scopeName}'`)
|
|
363
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:224: const depFieldDef = schemaStructure[dep]
|
|
364
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:240: Object.entries(schemaStructure).forEach(([field, fieldDef]) => {
|
|
365
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:253: // No sparse fieldsets - return all visible fields
|
|
366
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:255: Object.entries(schemaStructure).forEach(([field, fieldDef]) => {
|
|
367
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:273: // When no sparse fieldsets, we compute all computed fields
|
|
368
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:280: const depFieldDef = schemaStructure[dep]
|
|
369
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:295: Object.entries(schemaStructure).forEach(([field, fieldDef]) => {
|
|
370
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:303: const relationships = scope.vars.schemaInfo.schemaRelationships
|
|
371
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:328: * Determines which computed fields to calculate based on sparse fieldsets
|
|
372
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:332: * @param {Object} computedFields - Computed field definitions from schema
|
|
373
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:336: * // Input: No sparse fieldsets (calculate all computed fields)
|
|
374
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:345: * // Input: Sparse fieldsets with some computed fields
|
|
375
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:355: * // Input: Sparse fieldsets with no computed fields
|
|
376
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:370: * - Supports JSON:API sparse fieldsets for computed fields
|
|
377
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:374: * 1. Checks if sparse fieldsets are specified
|
|
378
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:377: * 4. Normalizes string input to array format
|
|
379
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:385: // No sparse fieldsets - return all computed fields
|
|
380
|
+
plugins/core/lib/querying-writing/knex-field-helpers.js:389: // Parse requested fields if it's a string
|
|
381
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:2: * Parses URL query strings into JSON:API compliant parameter objects
|
|
382
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:5: * @returns {object} Parsed query parameters in JSON:API format
|
|
383
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:9: * const query = parseJsonApiQuery('include=author&sort=-created_at');
|
|
384
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:11: * // Output: Parsed into arrays
|
|
385
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:22: * const query = parseJsonApiQuery('filter[status]=published&filter[author_id]=123');
|
|
386
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:37: * // Input: Sparse fieldsets
|
|
387
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:38: * const query = parseJsonApiQuery('fields[articles]=title,body&fields[users]=name');
|
|
388
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:54: * const query = parseJsonApiQuery('page[size]=20&page[number]=3&page[cursor]=abc123');
|
|
389
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:71: * const query = parseJsonApiQuery(
|
|
390
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:94: * - express-plugin parses req.query with this
|
|
391
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:95: * - http-plugin parses URL query strings with this
|
|
392
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:96: * - websocket-plugin parses message query parameters with this
|
|
393
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:111: * 6. Returns normalized structure for REST API
|
|
394
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:113:export function parseJsonApiQuery (queryString) {
|
|
395
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:135: // Parse include (comma-separated string to array)
|
|
396
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:138: // Parse sort (comma-separated string to array)
|
|
397
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:141: // Parse filter[key] = value into filters: { key: value }
|
|
398
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:147: // Parse fields[type] = fields into fields: { type: "field1,field2" }
|
|
399
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:154: // Parse page[size] = 10 into page: { size: 10 }
|
|
400
|
+
plugins/core/lib/querying-writing/connectors-query-parser.js:158: result.page[pageKey] = isNaN(value) ? value : parseInt(value, 10)
|
|
401
|
+
plugins/core/lib/querying-writing/schema-helpers.js:2: * Schema processing utilities for search and field dependencies
|
|
402
|
+
plugins/core/lib/querying-writing/schema-helpers.js:7: * - Generating search schemas from various configuration sources
|
|
403
|
+
plugins/core/lib/querying-writing/schema-helpers.js:15: * Marks all fields in a searchSchema as indexed for database optimization
|
|
404
|
+
plugins/core/lib/querying-writing/schema-helpers.js:17: * @param {Object} searchSchema - Search schema object to process
|
|
405
|
+
plugins/core/lib/querying-writing/schema-helpers.js:18: * @returns {void} Modifies the searchSchema in-place
|
|
406
|
+
plugins/core/lib/querying-writing/schema-helpers.js:22: * const searchSchema = {
|
|
407
|
+
plugins/core/lib/querying-writing/schema-helpers.js:27: * ensureSearchFieldsAreIndexed(searchSchema);
|
|
408
|
+
plugins/core/lib/querying-writing/schema-helpers.js:38: * const searchSchema = {
|
|
409
|
+
plugins/core/lib/querying-writing/schema-helpers.js:50: * ensureSearchFieldsAreIndexed(searchSchema);
|
|
410
|
+
plugins/core/lib/querying-writing/schema-helpers.js:60: * const searchSchema = {
|
|
411
|
+
plugins/core/lib/querying-writing/schema-helpers.js:64: * ensureSearchFieldsAreIndexed(searchSchema);
|
|
412
|
+
plugins/core/lib/querying-writing/schema-helpers.js:75: * - Applied to all searchSchema fields before storage setup
|
|
413
|
+
plugins/core/lib/querying-writing/schema-helpers.js:84: * 1. Receives searchSchema object (or null)
|
|
414
|
+
plugins/core/lib/querying-writing/schema-helpers.js:89:export function ensureSearchFieldsAreIndexed (searchSchema) {
|
|
415
|
+
plugins/core/lib/querying-writing/schema-helpers.js:90: if (!searchSchema) return
|
|
416
|
+
plugins/core/lib/querying-writing/schema-helpers.js:92: Object.keys(searchSchema).forEach(fieldName => {
|
|
417
|
+
plugins/core/lib/querying-writing/schema-helpers.js:93: const fieldDef = searchSchema[fieldName]
|
|
418
|
+
plugins/core/lib/querying-writing/schema-helpers.js:102: * Generates complete searchSchema by merging schema search definitions with explicit searchSchema
|
|
419
|
+
plugins/core/lib/querying-writing/schema-helpers.js:104: * @param {Object} schema - Main resource schema with optional 'search' properties
|
|
420
|
+
plugins/core/lib/querying-writing/schema-helpers.js:105: * @param {Object} explicitSearchSchema - Optional explicit searchSchema to merge
|
|
421
|
+
plugins/core/lib/querying-writing/schema-helpers.js:106: * @returns {Object|null} Merged searchSchema or null if no search fields
|
|
422
|
+
plugins/core/lib/querying-writing/schema-helpers.js:110: * // Input: Simple search fields in schema
|
|
423
|
+
plugins/core/lib/querying-writing/schema-helpers.js:111: * const schema = {
|
|
424
|
+
plugins/core/lib/querying-writing/schema-helpers.js:116: * const result = generateSearchSchemaFromSchema(schema, null);
|
|
425
|
+
plugins/core/lib/querying-writing/schema-helpers.js:118: * // Output: Generated search schema
|
|
426
|
+
plugins/core/lib/querying-writing/schema-helpers.js:126: * const schema = {
|
|
427
|
+
plugins/core/lib/querying-writing/schema-helpers.js:135: * const result = generateSearchSchemaFromSchema(schema, null);
|
|
428
|
+
plugins/core/lib/querying-writing/schema-helpers.js:152: * // Input: Merging with explicit searchSchema
|
|
429
|
+
plugins/core/lib/querying-writing/schema-helpers.js:153: * const schema = {
|
|
430
|
+
plugins/core/lib/querying-writing/schema-helpers.js:156: * const explicitSearchSchema = {
|
|
431
|
+
plugins/core/lib/querying-writing/schema-helpers.js:160: * const result = generateSearchSchemaFromSchema(schema, explicitSearchSchema);
|
|
432
|
+
plugins/core/lib/querying-writing/schema-helpers.js:166: * // name: { type: 'string' } // From schema (no operator set)
|
|
433
|
+
plugins/core/lib/querying-writing/schema-helpers.js:170: * // Input: Explicit searchSchema takes precedence
|
|
434
|
+
plugins/core/lib/querying-writing/schema-helpers.js:171: * const schema = {
|
|
435
|
+
plugins/core/lib/querying-writing/schema-helpers.js:174: * const explicitSearchSchema = {
|
|
436
|
+
plugins/core/lib/querying-writing/schema-helpers.js:177: * const result = generateSearchSchemaFromSchema(schema, explicitSearchSchema);
|
|
437
|
+
plugins/core/lib/querying-writing/schema-helpers.js:178: * // Output: Explicit searchSchema wins
|
|
438
|
+
plugins/core/lib/querying-writing/schema-helpers.js:185: * const schema = {
|
|
439
|
+
plugins/core/lib/querying-writing/schema-helpers.js:214: * - Generates searchSchema from various sources
|
|
440
|
+
plugins/core/lib/querying-writing/schema-helpers.js:220: * - Merges search:true fields with explicit searchSchema
|
|
441
|
+
plugins/core/lib/querying-writing/schema-helpers.js:221: * - Explicit searchSchema always takes precedence
|
|
442
|
+
plugins/core/lib/querying-writing/schema-helpers.js:225: * 1. Starts with explicit searchSchema (if any)
|
|
443
|
+
plugins/core/lib/querying-writing/schema-helpers.js:226: * 2. Processes schema fields with 'search' property
|
|
444
|
+
plugins/core/lib/querying-writing/schema-helpers.js:227: * 3. Skips fields already in explicit searchSchema (no conflicts)
|
|
445
|
+
plugins/core/lib/querying-writing/schema-helpers.js:230: * 6. Returns merged searchSchema or null
|
|
446
|
+
plugins/core/lib/querying-writing/schema-helpers.js:232:export const generateSearchSchemaFromSchema = (schema, explicitSearchSchema) => {
|
|
447
|
+
plugins/core/lib/querying-writing/schema-helpers.js:233: // Start with explicit searchSchema or empty object
|
|
448
|
+
plugins/core/lib/querying-writing/schema-helpers.js:234: const searchSchema = explicitSearchSchema ? { ...explicitSearchSchema } : {}
|
|
449
|
+
plugins/core/lib/querying-writing/schema-helpers.js:236: if (!schema) {
|
|
450
|
+
plugins/core/lib/querying-writing/schema-helpers.js:237: return Object.keys(searchSchema).length > 0 ? searchSchema : null
|
|
451
|
+
plugins/core/lib/querying-writing/schema-helpers.js:240: // Process schema fields with 'search' property
|
|
452
|
+
plugins/core/lib/querying-writing/schema-helpers.js:241: Object.entries(schema).forEach(([fieldName, fieldDef]) => {
|
|
453
|
+
plugins/core/lib/querying-writing/schema-helpers.js:249: // Check if field already exists in explicit searchSchema
|
|
454
|
+
plugins/core/lib/querying-writing/schema-helpers.js:250: if (searchSchema[searchFieldName]) {
|
|
455
|
+
plugins/core/lib/querying-writing/schema-helpers.js:251: // Skip - explicit searchSchema takes precedence
|
|
456
|
+
plugins/core/lib/querying-writing/schema-helpers.js:252: // This allows searchSchema to override fields marked with search:true
|
|
457
|
+
plugins/core/lib/querying-writing/schema-helpers.js:270: searchSchema[searchFieldName] = searchEntry
|
|
458
|
+
plugins/core/lib/querying-writing/schema-helpers.js:280: // Check if filter already exists in explicit searchSchema
|
|
459
|
+
plugins/core/lib/querying-writing/schema-helpers.js:281: if (searchSchema[filterName]) {
|
|
460
|
+
plugins/core/lib/querying-writing/schema-helpers.js:282: // Skip - explicit searchSchema takes precedence
|
|
461
|
+
plugins/core/lib/querying-writing/schema-helpers.js:286: searchSchema[filterName] = {
|
|
462
|
+
plugins/core/lib/querying-writing/schema-helpers.js:296: // Check if field already exists in explicit searchSchema
|
|
463
|
+
plugins/core/lib/querying-writing/schema-helpers.js:297: if (searchSchema[searchFieldName]) {
|
|
464
|
+
plugins/core/lib/querying-writing/schema-helpers.js:298: // Skip - explicit searchSchema takes precedence
|
|
465
|
+
plugins/core/lib/querying-writing/schema-helpers.js:315: searchSchema[searchFieldName] = searchEntry
|
|
466
|
+
plugins/core/lib/querying-writing/schema-helpers.js:322: if (schema._virtual?.search) {
|
|
467
|
+
plugins/core/lib/querying-writing/schema-helpers.js:323: Object.entries(schema._virtual.search).forEach(([filterName, filterDef]) => {
|
|
468
|
+
plugins/core/lib/querying-writing/schema-helpers.js:324: // Check if filter already exists in explicit searchSchema
|
|
469
|
+
plugins/core/lib/querying-writing/schema-helpers.js:325: if (searchSchema[filterName]) {
|
|
470
|
+
plugins/core/lib/querying-writing/schema-helpers.js:326: // Skip - explicit searchSchema takes precedence
|
|
471
|
+
plugins/core/lib/querying-writing/schema-helpers.js:330: searchSchema[filterName] = filterDef
|
|
472
|
+
plugins/core/lib/querying-writing/schema-helpers.js:334: return Object.keys(searchSchema).length > 0 ? searchSchema : null
|
|
473
|
+
plugins/core/lib/querying-writing/schema-helpers.js:375: * - Validates all dependencies exist
|
|
474
|
+
plugins/core/lib/querying-writing/schema-helpers.js:457: * - Schema processing for getter/setter ordering
|
|
475
|
+
plugins/core/lib/querying-writing/schema-helpers.js:463: * - Validates dependency graph is acyclic
|
|
476
|
+
plugins/core/lib/querying-writing/knex-constants.js:21:// Schema handling helpers
|
|
477
|
+
plugins/core/lib/querying-writing/knex-constants.js:22:export const getSchemaStructure = (schema) => schema?.structure || schema || {}
|
|
478
|
+
plugins/core/lib/querying-writing/knex-constants.js:23:export const getIdProperty = (schemaInfo) => schemaInfo?.idProperty || 'id'
|
|
479
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:2:import { getSchemaStructure } from './knex-constants.js'
|
|
480
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:7: * @param {Object} scope - Resource scope with schema and relationship info
|
|
481
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:52: * // With schema defining polymorphic relationship:
|
|
482
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:87: * 2. Scans schema for belongsTo field definitions
|
|
483
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:98: // Extract schema info from scope
|
|
484
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:101: schemaInfo: { schemaInstance, schemaRelationships: relationships, idProperty }
|
|
485
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:107: // Get schema structure
|
|
486
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:108: const schemaStructure = getSchemaStructure(schemaInstance)
|
|
487
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:113: // Process regular belongsTo relationships from schema
|
|
488
|
+
plugins/core/lib/querying-writing/knex-json-api-transformers.js:114: for (const [fieldName, fieldDef] of Object.entries(schemaStructure)) {
|
|
489
|
+
plugins/core/lib/querying-writing/scope-validations.js:2: * Scope configuration validators for relationship definitions
|
|
490
|
+
plugins/core/lib/querying-writing/scope-validations.js:5: * These validators run at scope registration time to ensure:
|
|
491
|
+
plugins/core/lib/querying-writing/scope-validations.js:13: * Validates all relationships in a scope configuration
|
|
492
|
+
plugins/core/lib/querying-writing/scope-validations.js:22: * validateRelationships({
|
|
493
|
+
plugins/core/lib/querying-writing/scope-validations.js:26: * schema: {
|
|
494
|
+
plugins/core/lib/querying-writing/scope-validations.js:47: * validateRelaationships({
|
|
495
|
+
plugins/core/lib/querying-writing/scope-validations.js:70: * validateRelationships({
|
|
496
|
+
plugins/core/lib/querying-writing/scope-validations.js:91: * validateRelationships({
|
|
497
|
+
plugins/core/lib/querying-writing/scope-validations.js:95: * schema: {
|
|
498
|
+
plugins/core/lib/querying-writing/scope-validations.js:130: * - Validates polymorphic relationship structure
|
|
499
|
+
plugins/core/lib/querying-writing/scope-validations.js:132: * - Validates hasMany/manyToMany foreign keys
|
|
500
|
+
plugins/core/lib/querying-writing/scope-validations.js:138: * 3. Validates polymorphic: types, typeField, idField
|
|
501
|
+
plugins/core/lib/querying-writing/scope-validations.js:139: * 4. Validates hasMany: foreignKey (unless via)
|
|
502
|
+
plugins/core/lib/querying-writing/scope-validations.js:140: * 5. Validates manyToMany: through, foreignKey, otherKey
|
|
503
|
+
plugins/core/lib/querying-writing/scope-validations.js:143:export function validateRelationships ({ context, scopes }) {
|
|
504
|
+
plugins/core/lib/querying-writing/scope-validations.js:149: const validation = validatePolymorphicRelationship(relDef, scopeName, scopes)
|
|
505
|
+
plugins/core/lib/querying-writing/scope-validations.js:157: // Validate based on relationship type
|
|
506
|
+
plugins/core/lib/querying-writing/scope-validations.js:159: const validation = validateHasManyRelationship(relDef, relName, scopeName)
|
|
507
|
+
plugins/core/lib/querying-writing/scope-validations.js:168: const validation = validateHasOneRelationship(relDef, relName, scopeName)
|
|
508
|
+
plugins/core/lib/querying-writing/scope-validations.js:177: const validation = validateManyToManyRelationship(relDef, relName, scopeName)
|
|
509
|
+
plugins/core/lib/querying-writing/scope-validations.js:188: * Validates a polymorphic relationship definition
|
|
510
|
+
plugins/core/lib/querying-writing/scope-validations.js:204: * validatePolymorphicRelationship(relDef, 'comments', scopes);
|
|
511
|
+
plugins/core/lib/querying-writing/scope-validations.js:216: * validatePolymorphicRelationship(relDef, 'comments', scopes);
|
|
512
|
+
plugins/core/lib/querying-writing/scope-validations.js:231: * validatePolymorphicRelationship(relDef, 'attachments', scopes);
|
|
513
|
+
plugins/core/lib/querying-writing/scope-validations.js:239:const validatePolymorphicRelationship = (relDef, scopeName, scopes) => {
|
|
514
|
+
plugins/core/lib/querying-writing/scope-validations.js:242: // 2. Validate required properties: types, typeField, idField
|
|
515
|
+
plugins/core/lib/querying-writing/scope-validations.js:245: // 5. Check that typeField and idField exist in the schema
|
|
516
|
+
plugins/core/lib/querying-writing/scope-validations.js:290: * Validates a hasMany relationship definition
|
|
517
|
+
plugins/core/lib/querying-writing/scope-validations.js:304: * validateHasManyRelationship(relDef, 'posts', 'users');
|
|
518
|
+
plugins/core/lib/querying-writing/scope-validations.js:314: * validateHasManyRelationship(relDef, 'posts', 'users');
|
|
519
|
+
plugins/core/lib/querying-writing/scope-validations.js:327: * validateHasManyRelationship(relDef, 'comments', 'posts');
|
|
520
|
+
plugins/core/lib/querying-writing/scope-validations.js:332:const validateHasManyRelationship = (relDef, relName, scopeName) => {
|
|
521
|
+
plugins/core/lib/querying-writing/scope-validations.js:333: // Validate target is specified
|
|
522
|
+
plugins/core/lib/querying-writing/scope-validations.js:365: * Validates a hasOne relationship definition
|
|
523
|
+
plugins/core/lib/querying-writing/scope-validations.js:379: * validateHasOneRelationship(relDef, 'profile', 'users');
|
|
524
|
+
plugins/core/lib/querying-writing/scope-validations.js:384:const validateHasOneRelationship = (relDef, relName, scopeName) => {
|
|
525
|
+
plugins/core/lib/querying-writing/scope-validations.js:385: // Validate target is specified
|
|
526
|
+
plugins/core/lib/querying-writing/scope-validations.js:411: * Validates a manyToMany relationship definition
|
|
527
|
+
plugins/core/lib/querying-writing/scope-validations.js:426: * validateManyToManyRelationship(relDef, 'tags', 'articles');
|
|
528
|
+
plugins/core/lib/querying-writing/scope-validations.js:437: * validateManyToManyRelationship(relDef, 'tags', 'articles');
|
|
529
|
+
plugins/core/lib/querying-writing/scope-validations.js:445:const validateManyToManyRelationship = (relDef, relName, scopeName) => {
|
|
530
|
+
plugins/core/lib/querying-writing/compile-schemas.js:1:import { createSchema } from 'json-rest-schema'
|
|
531
|
+
plugins/core/lib/querying-writing/compile-schemas.js:2:import { ensureSearchFieldsAreIndexed, generateSearchSchemaFromSchema, sortFieldsByDependencies } from './schema-helpers.js'
|
|
532
|
+
plugins/core/lib/querying-writing/compile-schemas.js:5: * Compiles and enriches schemas for a resource scope
|
|
533
|
+
plugins/core/lib/querying-writing/compile-schemas.js:7: * @param {Object} scope - Scope containing raw schema options
|
|
534
|
+
plugins/core/lib/querying-writing/compile-schemas.js:12: * // Input: Raw schema with computed field
|
|
535
|
+
plugins/core/lib/querying-writing/compile-schemas.js:24: * await compileSchemas(scope, deps);
|
|
536
|
+
plugins/core/lib/querying-writing/compile-schemas.js:26: * // Output in scope.vars.schemaInfo:
|
|
537
|
+
plugins/core/lib/querying-writing/compile-schemas.js:28: * // schema: Schema {}, // json-rest-schema instance
|
|
538
|
+
plugins/core/lib/querying-writing/compile-schemas.js:29: * // schemaStructure: {
|
|
539
|
+
plugins/core/lib/querying-writing/compile-schemas.js:41: * // Input: Schema with search fields
|
|
540
|
+
plugins/core/lib/querying-writing/compile-schemas.js:48: * // Output: Auto-generated searchSchema
|
|
541
|
+
plugins/core/lib/querying-writing/compile-schemas.js:49: * // searchSchemaObject contains:
|
|
542
|
+
plugins/core/lib/querying-writing/compile-schemas.js:60: * const pivotSchema = {
|
|
543
|
+
plugins/core/lib/querying-writing/compile-schemas.js:67: * // schemaStructure will have:
|
|
544
|
+
plugins/core/lib/querying-writing/compile-schemas.js:76: * // Input: Schema with dependent getters
|
|
545
|
+
plugins/core/lib/querying-writing/compile-schemas.js:77: * const schema = {
|
|
546
|
+
plugins/core/lib/querying-writing/compile-schemas.js:108: * - Generates search schemas from field markers
|
|
547
|
+
plugins/core/lib/querying-writing/compile-schemas.js:109: * - Validates getter/setter dependencies
|
|
548
|
+
plugins/core/lib/querying-writing/compile-schemas.js:110: * - Provides hooks for schema enrichment
|
|
549
|
+
plugins/core/lib/querying-writing/compile-schemas.js:117: * 4. Runs schema:enrich hook for plugins
|
|
550
|
+
plugins/core/lib/querying-writing/compile-schemas.js:118: * 5. Creates json-rest-schema validation instance
|
|
551
|
+
plugins/core/lib/querying-writing/compile-schemas.js:119: * 6. Generates searchSchema from search:true fields
|
|
552
|
+
plugins/core/lib/querying-writing/compile-schemas.js:120: * 7. Runs searchSchema:enrich hook
|
|
553
|
+
plugins/core/lib/querying-writing/compile-schemas.js:122: * 9. Caches all results in scope.vars.schemaInfo
|
|
554
|
+
plugins/core/lib/querying-writing/compile-schemas.js:124:export async function compileSchemas (scope, deps) {
|
|
555
|
+
plugins/core/lib/querying-writing/compile-schemas.js:129: // Get raw schema
|
|
556
|
+
plugins/core/lib/querying-writing/compile-schemas.js:130: const rawFields = scope.scopeOptions?.schema || {}
|
|
557
|
+
plugins/core/lib/querying-writing/compile-schemas.js:132: // Extract computed fields from schema and build enriched schema
|
|
558
|
+
plugins/core/lib/querying-writing/compile-schemas.js:141: // Validate computed field
|
|
559
|
+
plugins/core/lib/querying-writing/compile-schemas.js:150: // Don't include computed fields in the validation schema
|
|
560
|
+
plugins/core/lib/querying-writing/compile-schemas.js:183: // Hook: schema:enrich
|
|
561
|
+
plugins/core/lib/querying-writing/compile-schemas.js:184: const schemaContext = {
|
|
562
|
+
plugins/core/lib/querying-writing/compile-schemas.js:190: await runHooks('schema:enrich', schemaContext)
|
|
563
|
+
plugins/core/lib/querying-writing/compile-schemas.js:192: // Create schema object
|
|
564
|
+
plugins/core/lib/querying-writing/compile-schemas.js:193: const schemaObject = createSchema(schemaContext.fields)
|
|
565
|
+
plugins/core/lib/querying-writing/compile-schemas.js:195: // Generate searchSchema by merging explicit searchSchema with fields marked search:true.
|
|
566
|
+
plugins/core/lib/querying-writing/compile-schemas.js:197: // in the main schema, or provide an explicit searchSchema with more control over filtering.
|
|
567
|
+
plugins/core/lib/querying-writing/compile-schemas.js:198: // The explicit searchSchema takes precedence when there are conflicts - it can override
|
|
568
|
+
plugins/core/lib/querying-writing/compile-schemas.js:200: // searchSchema will be added automatically.
|
|
569
|
+
plugins/core/lib/querying-writing/compile-schemas.js:202: // while searchSchema can specify filterOperator: 'contains' or complex join configurations.
|
|
570
|
+
plugins/core/lib/querying-writing/compile-schemas.js:203: const rawSearchFields = generateSearchSchemaFromSchema(
|
|
571
|
+
plugins/core/lib/querying-writing/compile-schemas.js:204: schemaContext.fields,
|
|
572
|
+
plugins/core/lib/querying-writing/compile-schemas.js:205: scope.scopeOptions.searchSchema
|
|
573
|
+
plugins/core/lib/querying-writing/compile-schemas.js:217: // Hook: searchSchema:enrich
|
|
574
|
+
plugins/core/lib/querying-writing/compile-schemas.js:218: const searchSchemaContext = {
|
|
575
|
+
plugins/core/lib/querying-writing/compile-schemas.js:219: fields: schemaContext.fields, // Mutable
|
|
576
|
+
plugins/core/lib/querying-writing/compile-schemas.js:220: originalFields: rawSearchFields, // Read-only enriched schema
|
|
577
|
+
plugins/core/lib/querying-writing/compile-schemas.js:223: await runHooks('searchSchema:enrich', searchSchemaContext)
|
|
578
|
+
plugins/core/lib/querying-writing/compile-schemas.js:225: // Create searchSchema object
|
|
579
|
+
plugins/core/lib/querying-writing/compile-schemas.js:226: var searchSchemaObject = createSchema(rawSearchFields)
|
|
580
|
+
plugins/core/lib/querying-writing/compile-schemas.js:228: var searchSchemaObject = createSchema({})
|
|
581
|
+
plugins/core/lib/querying-writing/compile-schemas.js:231: // Build schemaRelationships including polymorphic fields from schema
|
|
582
|
+
plugins/core/lib/querying-writing/compile-schemas.js:232: const schemaRelationships = { ...(scope.scopeOptions.relationships || {}) }
|
|
583
|
+
plugins/core/lib/querying-writing/compile-schemas.js:234: // Validate belongsTo fields
|
|
584
|
+
plugins/core/lib/querying-writing/compile-schemas.js:235: for (const [fieldName, fieldDef] of Object.entries(schemaContext.fields)) {
|
|
585
|
+
plugins/core/lib/querying-writing/compile-schemas.js:236: // Validate that belongsTo fields have 'as' property
|
|
586
|
+
plugins/core/lib/querying-writing/compile-schemas.js:240: 'The \'as\' property defines the relationship name used in JSON:API payloads. ' +
|
|
587
|
+
plugins/core/lib/querying-writing/compile-schemas.js:246: // Extract and validate getter definitions
|
|
588
|
+
plugins/core/lib/querying-writing/compile-schemas.js:250: for (const [fieldName, fieldDef] of Object.entries(schemaContext.fields)) {
|
|
589
|
+
plugins/core/lib/querying-writing/compile-schemas.js:259: // Validate dependencies exist
|
|
590
|
+
plugins/core/lib/querying-writing/compile-schemas.js:262: if (!schemaContext.fields[dep]) {
|
|
591
|
+
plugins/core/lib/querying-writing/compile-schemas.js:264: `Field '${fieldName}' in resource '${scopeName}' has getter dependency '${dep}' that does not exist in schema`
|
|
592
|
+
plugins/core/lib/querying-writing/compile-schemas.js:282: // Extract and validate setter definitions
|
|
593
|
+
plugins/core/lib/querying-writing/compile-schemas.js:286: for (const [fieldName, fieldDef] of Object.entries(schemaContext.fields)) {
|
|
594
|
+
plugins/core/lib/querying-writing/compile-schemas.js:295: // Validate dependencies exist
|
|
595
|
+
plugins/core/lib/querying-writing/compile-schemas.js:298: if (!schemaContext.fields[dep]) {
|
|
596
|
+
plugins/core/lib/querying-writing/compile-schemas.js:300: `Field '${fieldName}' in resource '${scopeName}' has setter dependency '${dep}' that does not exist in schema`
|
|
597
|
+
plugins/core/lib/querying-writing/compile-schemas.js:319: scope.vars.schemaInfo = {
|
|
598
|
+
plugins/core/lib/querying-writing/compile-schemas.js:321: schemaInstance: schemaObject,
|
|
599
|
+
plugins/core/lib/querying-writing/compile-schemas.js:322: schemaStructure: schemaObject.structure,
|
|
600
|
+
plugins/core/lib/querying-writing/compile-schemas.js:324: searchSchemaInstance: searchSchemaObject,
|
|
601
|
+
plugins/core/lib/querying-writing/compile-schemas.js:325: searchSchemaStructure: searchSchemaObject.structure,
|
|
602
|
+
plugins/core/lib/querying-writing/compile-schemas.js:328: schemaRelationships,
|
|
603
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:22: * @param {Object} deps.context.schemaStructure - Schema with field definitions
|
|
604
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:23: * @param {Object} deps.context.schemaRelationships - Relationship configurations
|
|
605
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:35: * { context: { scopeName: 'articles', schemaStructure: schema } }
|
|
606
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:52: * const schema = {
|
|
607
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:204: * 3. Processes belongsTo relationships from schema
|
|
608
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:214: const schema = deps.context.schemaStructure
|
|
609
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:215: const relationships = deps.context.schemaRelationships
|
|
610
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:229: // 1. Process belongsTo relationships (from schema fields)
|
|
611
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:230: // Iterate through the schema structure to find belongsTo fields
|
|
612
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:231: for (const [fieldName, fieldDef] of Object.entries(schema)) {
|
|
613
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:291: // (though typically they are defined in schema.belongsTo)
|
|
614
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:341: * @param {Object} deps.context.schemaStructure - Schema for mapping relationships
|
|
615
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:342: * @param {Object} deps.context.schemaRelationships - Relationship configurations
|
|
616
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:360: * { context: { schemaStructure: schema } }
|
|
617
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:372: * const schema = {
|
|
618
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:500: const schema = deps.context.schemaStructure
|
|
619
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:501: const relationships = deps.context.schemaRelationships
|
|
620
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:511: { context: { schemaStructure: schema, schemaRelationships: relationships, scopes } }
|
|
621
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:534: { context: { schemaStructure: schema, schemaRelationships: relationships, scopes } }
|
|
622
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:545: * @param {Object} deps.context.schemaStructure - Resource schema
|
|
623
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:546: * @param {Object} deps.context.schemaRelationships - Relationship configs
|
|
624
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:568: * const schema = {
|
|
625
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:576: * { context: { schemaStructure: schema } }
|
|
626
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:762: const schema = deps.context.schemaStructure
|
|
627
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:763: const relationships = deps.context.schemaRelationships
|
|
628
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:779: // Find schema field for this belongsTo relationship
|
|
629
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:780: const schemaEntry = Object.entries(schema).find(([_, def]) => def.as === relName)
|
|
630
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:782: if (schemaEntry) {
|
|
631
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:783: const [fieldName, fieldDef] = schemaEntry
|
|
632
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:818: schemaStructure: scopes?.[item.type]?.vars?.schemaInfo?.schema || {},
|
|
633
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:819: schemaRelationships: scopes?.[item.type]?.vars?.schemaInfo?.schemaRelationships || {},
|
|
634
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:839: schemaStructure: scopes?.[nestedData.type]?.vars?.schemaInfo?.schema || {},
|
|
635
|
+
plugins/core/lib/querying-writing/simplified-helpers.js:840: schemaRelationships: scopes?.[nestedData.type]?.vars?.schemaInfo?.schemaRelationships || {},
|
|
636
|
+
plugins/core/lib/querying-writing/database-capabilities.js:2: * Parses database version string to comparable format
|
|
637
|
+
plugins/core/lib/querying-writing/database-capabilities.js:5: * @returns {Object|null} Parsed version with major, minor, patch
|
|
638
|
+
plugins/core/lib/querying-writing/database-capabilities.js:9: * parseVersion("8.0.33");
|
|
639
|
+
plugins/core/lib/querying-writing/database-capabilities.js:14: * parseVersion("14.5 (Ubuntu 14.5-1.pgdg20.04+1)");
|
|
640
|
+
plugins/core/lib/querying-writing/database-capabilities.js:19: * parseVersion("10.6.12-MariaDB");
|
|
641
|
+
plugins/core/lib/querying-writing/database-capabilities.js:22:const parseVersion = (versionString) => {
|
|
642
|
+
plugins/core/lib/querying-writing/database-capabilities.js:32: major: parseInt(match[1]),
|
|
643
|
+
plugins/core/lib/querying-writing/database-capabilities.js:33: minor: parseInt(match[2]),
|
|
644
|
+
plugins/core/lib/querying-writing/database-capabilities.js:34: patch: match[3] ? parseInt(match[3]) : 0
|
|
645
|
+
plugins/core/lib/querying-writing/database-capabilities.js:66: * - buildWindowedIncludeQuery to validate before using window functions
|
|
646
|
+
plugins/core/lib/querying-writing/database-capabilities.js:77: * 3. Parses version and compares against known thresholds
|
|
647
|
+
plugins/core/lib/querying-writing/database-capabilities.js:105: const mysqlVersion = parseVersion(row.version)
|
|
648
|
+
plugins/core/lib/querying-writing/database-capabilities.js:119: const parsed = parseVersion(sqliteVersion)
|
|
649
|
+
plugins/core/lib/querying-writing/database-capabilities.js:120: return parsed && (parsed.major > 3 || (parsed.major === 3 && parsed.minor >= 25))
|
|
650
|
+
plugins/core/lib/querying-writing/database-capabilities.js:141: const mariaVersion = parseVersion(version)
|