UNPKG

2.27 kBJavaScriptView Raw
1"use strict";
2// Copyright IBM Corp. and LoopBack contributors 2018,2019. All Rights Reserved.
3// Node module: @loopback/repository
4// This file is licensed under the MIT License.
5// License text available at https://opensource.org/licenses/MIT
6Object.defineProperty(exports, "__esModule", { value: true });
7exports.createReferencesManyAccessor = void 0;
8const tslib_1 = require("tslib");
9const debug_1 = tslib_1.__importDefault(require("debug"));
10const references_many_helpers_1 = require("./references-many.helpers");
11const references_many_inclusion_resolver_1 = require("./references-many.inclusion-resolver");
12const references_many_repository_1 = require("./references-many.repository");
13const debug = (0, debug_1.default)('loopback:repository:relations:references-many:accessor');
14/**
15 * Enforces a ReferencesMany constraint on a repository
16 */
17function createReferencesManyAccessor(referencesManyMetadata, targetRepoGetter, sourceRepository) {
18 const meta = (0, references_many_helpers_1.resolveReferencesManyMetadata)(referencesManyMetadata);
19 debug('Resolved ReferencesMany relation metadata: %o', meta);
20 const result = async function getTargetInstancesOfReferencesMany(sourceId) {
21 const foreignKey = meta.keyFrom;
22 const primaryKey = meta.keyTo;
23 const sourceModel = await sourceRepository.findById(sourceId);
24 const foreignKeyValue = sourceModel[foreignKey];
25 // workaround to check referential integrity.
26 // should be removed once the memory connector ref integrity is done
27 // GH issue: https://github.com/loopbackio/loopback-next/issues/2333
28 if (!foreignKeyValue) {
29 return undefined;
30 }
31 // eslint-disable-next-line @typescript-eslint/no-explicit-any
32 const constraint = { [primaryKey]: foreignKeyValue };
33 const constrainedRepo = new references_many_repository_1.DefaultReferencesManyRepository(targetRepoGetter, constraint);
34 return constrainedRepo.get();
35 };
36 result.inclusionResolver = (0, references_many_inclusion_resolver_1.createReferencesManyInclusionResolver)(meta, targetRepoGetter);
37 return result;
38}
39exports.createReferencesManyAccessor = createReferencesManyAccessor;
40//# sourceMappingURL=references-many.accessor.js.map
\No newline at end of file