Socket
Socket
Sign inDemoInstall

@aws-amplify/graphql-relational-transformer

Package Overview
Dependencies
Maintainers
10
Versions
413
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@aws-amplify/graphql-relational-transformer - npm Package Compare versions

Comparing version 2.2.0-construct-publish-test.0 to 2.2.0-nov-14-cut.0

lib/resolver/ddb-generator.d.ts

6

CHANGELOG.md

@@ -6,3 +6,3 @@ # Change Log

# [2.2.0-construct-publish-test.0](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-relational-transformer@2.1.8...@aws-amplify/graphql-relational-transformer@2.2.0-construct-publish-test.0) (2023-11-08)
# [2.2.0-nov-14-cut.0](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-relational-transformer@2.1.8...@aws-amplify/graphql-relational-transformer@2.2.0-nov-14-cut.0) (2023-11-14)

@@ -12,2 +12,6 @@ ### Features

- add managed table support in API construct ([#2024](https://github.com/aws-amplify/amplify-category-api/issues/2024)) ([96a0d94](https://github.com/aws-amplify/amplify-category-api/commit/96a0d94fa872a5329da120f53be139833449b815)), closes [#1849](https://github.com/aws-amplify/amplify-category-api/issues/1849) [#1903](https://github.com/aws-amplify/amplify-category-api/issues/1903) [#1940](https://github.com/aws-amplify/amplify-category-api/issues/1940) [#1971](https://github.com/aws-amplify/amplify-category-api/issues/1971) [#1973](https://github.com/aws-amplify/amplify-category-api/issues/1973)
- add postgres engine and update types as needed ([#1979](https://github.com/aws-amplify/amplify-category-api/issues/1979)) ([5257d53](https://github.com/aws-amplify/amplify-category-api/commit/5257d53f1d4d02be71b34ddf6757f22dd5d74aff))
- add refersTo directive transformer for model renaming ([#1830](https://github.com/aws-amplify/amplify-category-api/issues/1830)) ([afbd6f2](https://github.com/aws-amplify/amplify-category-api/commit/afbd6f282bc411313ce098a53a87bb8c6481aa48))
- **api:** rds has many support ([42b4c9f](https://github.com/aws-amplify/amplify-category-api/commit/42b4c9f770dec01f02b397ad2a231232395d577d))
- refersTo supports field name mappings on RDS models ([#1865](https://github.com/aws-amplify/amplify-category-api/issues/1865)) ([ee60011](https://github.com/aws-amplify/amplify-category-api/commit/ee60011f5c41d0442e1096dd16d80e94b900745a))

@@ -14,0 +18,0 @@ ## [2.1.8](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-relational-transformer@2.1.7...@aws-amplify/graphql-relational-transformer@2.1.8) (2023-11-02)

@@ -10,8 +10,9 @@ "use strict";

const immer_1 = __importDefault(require("immer"));
const resolvers_1 = require("./resolvers");
const schema_1 = require("./schema");
const utils_1 = require("./utils");
const generator_factory_1 = require("./resolver/generator-factory");
const resolvers_1 = require("./resolvers");
const directiveName = 'belongsTo';
const directiveDefinition = `
directive @${directiveName}(fields: [String!]) on FIELD_DEFINITION
directive @${directiveName}(fields: [String!], references: [String!]) on FIELD_DEFINITION
`;

@@ -67,6 +68,10 @@ class BelongsToTransformer extends graphql_transformer_core_1.TransformerPluginBase {

.forEach((config) => {
const modelName = config.object.name.value;
if ((0, graphql_transformer_core_1.isRDSModel)(context, modelName)) {
return;
}
(0, utils_1.registerHasOneForeignKeyMappings)({
transformParameters: context.transformParameters,
resourceHelper: context.resourceHelper,
thisTypeName: config.object.name.value,
thisTypeName: modelName,
thisFieldName: config.field.name.value,

@@ -76,2 +81,3 @@ relatedType: config.relatedType,

});
setFieldMappingReferences(context, this.directiveList);
};

@@ -81,3 +87,9 @@ this.transformSchema = (ctx) => {

for (const config of this.directiveList) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context);
}
else if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.validateChildReferencesFields)(config, context);
}
(0, schema_1.ensureBelongsToConnectionField)(config, context);

@@ -89,3 +101,5 @@ }

for (const config of this.directiveList) {
(0, resolvers_1.makeGetItemConnectionWithKeyResolver)(config, context);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
const generator = (0, generator_factory_1.getGenerator)(dbType);
generator.makeBelongsToGetItemConnectionWithKeyResolver(config, context);
}

@@ -98,3 +112,12 @@ };

const { field, object } = config;
(0, utils_1.ensureFieldsArray)(config);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(field.type, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
(0, utils_1.ensureFieldsArray)(config);
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
}
if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.ensureReferencesArray)(config);
(0, utils_1.getBelongsToReferencesNodes)(config, ctx);
}
(0, utils_1.validateModelDirective)(config);

@@ -104,4 +127,2 @@ if ((0, graphql_transformer_common_1.isListType)(field.type)) {

}
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
config.connectionFields = [];

@@ -122,6 +143,17 @@ (0, utils_1.validateRelatedModelDirective)(config);

});
if (!isBiRelation) {
if (!isBiRelation && dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`${config.relatedType.name.value} must have a relationship with ${object.name.value} in order to use @${directiveName}.`);
}
};
const setFieldMappingReferences = (context, directiveList) => {
directiveList.forEach((config) => {
var _a, _b;
const modelName = config.object.name.value;
const areFieldMappingsSupported = (0, graphql_transformer_core_1.isRDSModel)(context, modelName);
if (!areFieldMappingsSupported) {
return;
}
(0, resolvers_1.setFieldMappingResolverReference)(context, (_b = (_a = config.relatedType) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value, modelName, config.field.name.value);
});
};
//# sourceMappingURL=graphql-belongs-to-transformer.js.map

@@ -13,6 +13,7 @@ "use strict";

const utils_1 = require("./utils");
const generator_factory_1 = require("./resolver/generator-factory");
const directiveName = 'hasMany';
const defaultLimit = 100;
const directiveDefinition = `
directive @${directiveName}(indexName: String, fields: [String!], limit: Int = ${defaultLimit}) on FIELD_DEFINITION
directive @${directiveName}(indexName: String, fields: [String!], references: [String!], limit: Int = ${defaultLimit}) on FIELD_DEFINITION
`;

@@ -64,6 +65,12 @@ class HasManyTransformer extends graphql_transformer_core_1.TransformerPluginBase {

this.directiveList.forEach((config) => {
var _a, _b;
const modelName = config.object.name.value;
if ((0, graphql_transformer_core_1.isRDSModel)(context, modelName)) {
(0, resolvers_1.setFieldMappingResolverReference)(context, (_b = (_a = config.relatedType) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value, modelName, config.field.name.value, true);
return;
}
(0, utils_1.registerHasManyForeignKeyMappings)({
transformParameters: context.transformParameters,
resourceHelper: context.resourceHelper,
thisTypeName: config.object.name.value,
thisTypeName: modelName,
thisFieldName: config.field.name.value,

@@ -77,3 +84,9 @@ relatedType: config.relatedType,

for (const config of this.directiveList) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context, config.indexName);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context, config.indexName);
}
else if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.validateParentReferencesFields)(config, context);
}
(0, schema_1.ensureHasManyConnectionField)(config, context);

@@ -86,4 +99,7 @@ (0, schema_1.extendTypeWithConnection)(config, context);

for (const config of this.directiveList) {
(0, resolvers_1.updateTableForConnection)(config, context);
(0, resolvers_1.makeQueryConnectionWithKeyResolver)(config, context);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
(0, resolvers_1.updateTableForConnection)(config, context);
}
makeQueryResolver(config, context, dbType);
}

@@ -94,5 +110,18 @@ };

exports.HasManyTransformer = HasManyTransformer;
const makeQueryResolver = (config, ctx, dbType) => {
const generator = (0, generator_factory_1.getGenerator)(dbType);
generator.makeHasManyGetItemsConnectionWithKeyResolver(config, ctx);
};
const validate = (config, ctx) => {
const { field } = config;
(0, utils_1.ensureFieldsArray)(config);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(field.type, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
(0, utils_1.ensureFieldsArray)(config);
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
}
if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.ensureReferencesArray)(config);
(0, utils_1.getReferencesNodes)(config, ctx);
}
(0, utils_1.validateModelDirective)(config);

@@ -102,4 +131,2 @@ if (!(0, graphql_transformer_common_1.isListType)(field.type)) {

}
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
config.connectionFields = [];

@@ -106,0 +133,0 @@ (0, utils_1.validateRelatedModelDirective)(config);

38

lib/graphql-has-one-transformer.js

@@ -7,8 +7,9 @@ "use strict";

const immer_1 = require("immer");
const resolvers_1 = require("./resolvers");
const schema_1 = require("./schema");
const utils_1 = require("./utils");
const generator_factory_1 = require("./resolver/generator-factory");
const resolvers_1 = require("./resolvers");
const directiveName = 'hasOne';
const directiveDefinition = `
directive @${directiveName}(fields: [String!]) on FIELD_DEFINITION
directive @${directiveName}(fields: [String!], references: [String!]) on FIELD_DEFINITION
`;

@@ -76,6 +77,12 @@ class HasOneTransformer extends graphql_transformer_core_1.TransformerPluginBase {

this.directiveList.forEach((config) => {
var _a, _b;
const modelName = config.object.name.value;
if ((0, graphql_transformer_core_1.isRDSModel)(context, modelName)) {
(0, resolvers_1.setFieldMappingResolverReference)(context, (_b = (_a = config.relatedType) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.value, modelName, config.field.name.value);
return;
}
(0, utils_1.registerHasOneForeignKeyMappings)({
transformParameters: context.transformParameters,
resourceHelper: context.resourceHelper,
thisTypeName: config.object.name.value,
thisTypeName: modelName,
thisFieldName: config.field.name.value,

@@ -89,3 +96,9 @@ relatedType: config.relatedType,

for (const config of this.directiveList) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
config.relatedTypeIndex = (0, utils_1.getRelatedTypeIndex)(config, context);
}
else if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.validateParentReferencesFields)(config, context);
}
(0, schema_1.ensureHasOneConnectionField)(config, context);

@@ -97,3 +110,5 @@ }

for (const config of this.directiveList) {
(0, resolvers_1.makeGetItemConnectionWithKeyResolver)(config, context);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(config.field.type, context);
const generator = (0, generator_factory_1.getGenerator)(dbType);
generator.makeHasOneGetItemConnectionWithKeyResolver(config, context);
}

@@ -106,3 +121,12 @@ };

const { field } = config;
(0, utils_1.ensureFieldsArray)(config);
const dbType = (0, graphql_transformer_core_1.getDataSourceType)(field.type, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
if (dbType === graphql_transformer_core_1.DDB_DB_TYPE) {
(0, utils_1.ensureFieldsArray)(config);
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
}
if ((0, graphql_transformer_core_1.isRDSDBType)(dbType)) {
(0, utils_1.ensureReferencesArray)(config);
(0, utils_1.getReferencesNodes)(config, ctx);
}
(0, utils_1.validateModelDirective)(config);

@@ -112,4 +136,2 @@ if ((0, graphql_transformer_common_1.isListType)(field.type)) {

}
config.fieldNodes = (0, utils_1.getFieldsNodes)(config, ctx);
config.relatedType = (0, utils_1.getRelatedType)(config, ctx);
config.connectionFields = [];

@@ -116,0 +138,0 @@ (0, utils_1.validateRelatedModelDirective)(config);

@@ -14,2 +14,3 @@ "use strict";

const schema_1 = require("./schema");
const ddb_generator_1 = require("./resolver/ddb-generator");
const directiveName = 'manyToMany';

@@ -301,3 +302,3 @@ const defaultLimit = 100;

}
if (renamedFields.length) {
if (renamedFields.length && !(0, graphql_transformer_core_1.isRDSModel)(context, name)) {
(0, utils_1.registerManyToManyForeignKeyMappings)({

@@ -327,3 +328,3 @@ resourceHelper: ctx.resourceHelper,

(0, resolvers_1.updateTableForConnection)(config, context);
(0, resolvers_1.makeQueryConnectionWithKeyResolver)(config, context);
new ddb_generator_1.DDBRelationalResolverGenerator().makeHasManyGetItemsConnectionWithKeyResolver(config, context);
}

@@ -330,0 +331,0 @@ };

@@ -1,6 +0,6 @@

import { TransformerContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
import { HasManyDirectiveConfiguration, HasOneDirectiveConfiguration } from './types';
export declare function makeGetItemConnectionWithKeyResolver(config: HasOneDirectiveConfiguration, ctx: TransformerContextProvider): void;
export declare function makeQueryConnectionWithKeyResolver(config: HasManyDirectiveConfiguration, ctx: TransformerContextProvider): void;
export declare function updateTableForConnection(config: HasManyDirectiveConfiguration, ctx: TransformerContextProvider): void;
import { TransformerContextProvider, TransformerPrepareStepContextProvider } from '@aws-amplify/graphql-transformer-interfaces';
import { HasManyDirectiveConfiguration } from './types';
export declare const updateTableForConnection: (config: HasManyDirectiveConfiguration, ctx: TransformerContextProvider) => void;
export declare const condenseRangeKey: (fields: string[]) => string;
export declare const setFieldMappingResolverReference: (context: TransformerPrepareStepContextProvider, mappedModelName: string, typeName: string, fieldName: string, isList?: boolean) => void;
//# sourceMappingURL=resolvers.d.ts.map

@@ -26,171 +26,12 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.updateTableForConnection = exports.makeQueryConnectionWithKeyResolver = exports.makeGetItemConnectionWithKeyResolver = void 0;
exports.setFieldMappingResolverReference = exports.condenseRangeKey = exports.updateTableForConnection = void 0;
const graphql_index_transformer_1 = require("@aws-amplify/graphql-index-transformer");
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
const cdk = __importStar(require("aws-cdk-lib"));
const graphql_mapping_template_1 = require("graphql-mapping-template");
const graphql_transformer_common_1 = require("graphql-transformer-common");
const schema_1 = require("./schema");
const utils_1 = require("./utils");
const CONNECTION_STACK = 'ConnectionStack';
const authFilter = (0, graphql_mapping_template_1.ref)('ctx.stash.authFilter');
const PARTITION_KEY_VALUE = 'partitionKeyValue';
const SORT_KEY_VALUE = 'sortKeyValue';
function buildKeyValueExpression(fieldName, object, isPartitionKey = false) {
var _a;
const field = (_a = object.fields) === null || _a === void 0 ? void 0 : _a.find((it) => it.name.value === fieldName);
const attributeType = field ? (0, graphql_transformer_common_1.attributeTypeFromScalar)(field.type) : 'S';
return (0, graphql_mapping_template_1.ref)(`util.parseJson($util.dynamodb.toDynamoDBJson($util.${attributeType === 'S' ? 'defaultIfNullOrBlank' : 'defaultIfNull'}(${isPartitionKey ? `$${PARTITION_KEY_VALUE}` : `$ctx.source.${fieldName}`}, "${graphql_transformer_common_1.NONE_VALUE}")))`);
}
function makeGetItemConnectionWithKeyResolver(config, ctx) {
const { connectionFields, field, fields, object, relatedType, relatedTypeIndex } = config;
if (relatedTypeIndex.length === 0) {
throw new Error('Expected relatedType index fields to be set for connection.');
}
const localFields = fields.length > 0 ? fields : connectionFields;
const table = (0, graphql_transformer_core_1.getTable)(ctx, relatedType);
const { keySchema } = table;
const dataSource = ctx.api.host.getDataSource(`${relatedType.name.value}Table`);
const partitionKeyName = keySchema[0].attributeName;
const totalExpressions = ['#partitionKey = :partitionValue'];
const totalExpressionNames = {
'#partitionKey': (0, graphql_mapping_template_1.str)(partitionKeyName),
};
const totalExpressionValues = {
':partitionValue': buildKeyValueExpression(localFields[0], ctx.output.getObject(object.name.value), true),
};
if (relatedTypeIndex.length > 2) {
const rangeKeyFields = localFields.slice(1);
const sortKeyName = keySchema[1].attributeName;
const condensedSortKeyValue = condenseRangeKey(rangeKeyFields.map((keyField) => `\${ctx.source.${keyField}}`));
totalExpressions.push('#sortKeyName = :sortKeyName');
totalExpressionNames['#sortKeyName'] = (0, graphql_mapping_template_1.str)(sortKeyName);
totalExpressionValues[':sortKeyName'] = (0, graphql_mapping_template_1.ref)(`util.parseJson($util.dynamodb.toDynamoDBJson($util.defaultIfNullOrBlank("${condensedSortKeyValue}", "${graphql_transformer_common_1.NONE_VALUE}")))`);
}
else if (relatedTypeIndex.length === 2) {
const sortKeyName = keySchema[1].attributeName;
totalExpressions.push('#sortKeyName = :sortKeyName');
totalExpressionNames['#sortKeyName'] = (0, graphql_mapping_template_1.str)(sortKeyName);
totalExpressionValues[':sortKeyName'] = buildKeyValueExpression(localFields[1], ctx.output.getObject(object.name.value));
}
const resolverResourceId = graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID(object.name.value, field.name.value);
const resolver = ctx.resolvers.generateQueryResolver(object.name.value, field.name.value, resolverResourceId, dataSource, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, graphql_mapping_template_1.print)((0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.ref)('ctx.stash.deniedField'), (0, graphql_mapping_template_1.raw)('#return($util.toJson(null))')),
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(PARTITION_KEY_VALUE), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)(`util.defaultIfNull`), (0, graphql_mapping_template_1.ref)(`ctx.stash.connectionAttibutes.get("${localFields[0]}")`), (0, graphql_mapping_template_1.ref)(`ctx.source.${localFields[0]}`))),
(0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.or)([
(0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.isNull'), (0, graphql_mapping_template_1.ref)(PARTITION_KEY_VALUE)),
...localFields.slice(1).map((f) => (0, graphql_mapping_template_1.raw)(`$util.isNull($ctx.source.${f})`)),
]), (0, graphql_mapping_template_1.raw)('#return'), (0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('GetRequest'), (0, graphql_mapping_template_1.obj)({ version: (0, graphql_mapping_template_1.str)('2018-05-29'), operation: (0, graphql_mapping_template_1.str)('Query') })),
(0, graphql_mapping_template_1.qref)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('GetRequest.put'), (0, graphql_mapping_template_1.str)('query'), (0, graphql_mapping_template_1.obj)({
expression: (0, graphql_mapping_template_1.str)(totalExpressions.join(' AND ')),
expressionNames: (0, graphql_mapping_template_1.obj)(totalExpressionNames),
expressionValues: (0, graphql_mapping_template_1.obj)(totalExpressionValues),
}))),
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)(authFilter)), (0, graphql_mapping_template_1.qref)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('GetRequest.put'), (0, graphql_mapping_template_1.str)('filter'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.parseJson'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.transform.toDynamoDBFilterExpression'), authFilter))))),
(0, graphql_mapping_template_1.toJson)((0, graphql_mapping_template_1.ref)('GetRequest')),
])),
])), `${object.name.value}.${field.name.value}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, graphql_mapping_template_1.print)(graphql_mapping_template_1.DynamoDBMappingTemplate.dynamoDBResponse(false, (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.and)([(0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.ref)('ctx.result.items.isEmpty()')), (0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.ref)('ctx.result.scannedCount'), (0, graphql_mapping_template_1.int)(1))]), (0, graphql_mapping_template_1.toJson)((0, graphql_mapping_template_1.ref)('ctx.result.items[0]')), (0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.and)([(0, graphql_mapping_template_1.ref)('ctx.result.items.isEmpty()'), (0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.ref)('ctx.result.scannedCount'), (0, graphql_mapping_template_1.int)(1))]), (0, graphql_mapping_template_1.ref)('util.unauthorized()')),
(0, graphql_mapping_template_1.toJson)((0, graphql_mapping_template_1.nul)()),
])))), `${object.name.value}.${field.name.value}.res.vtl`));
resolver.setScope(ctx.stackManager.getScopeFor(resolverResourceId, CONNECTION_STACK));
ctx.resolvers.addResolver(object.name.value, field.name.value, resolver);
}
exports.makeGetItemConnectionWithKeyResolver = makeGetItemConnectionWithKeyResolver;
function makeQueryConnectionWithKeyResolver(config, ctx) {
const { connectionFields, field, fields, indexName, limit, object, relatedType } = config;
const connectionAttributes = fields.length > 0 ? fields : connectionFields;
if (connectionAttributes.length === 0) {
throw new Error('Either connection fields or local fields should be populated.');
}
const table = (0, graphql_transformer_core_1.getTable)(ctx, relatedType);
const dataSource = ctx.api.host.getDataSource(`${relatedType.name.value}Table`);
const keySchema = (0, graphql_transformer_core_1.getKeySchema)(table, indexName);
const setup = [
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('limit'), (0, graphql_mapping_template_1.ref)(`util.defaultIfNull($context.args.limit, ${limit})`)),
...connectionAttributes
.slice(1)
.map((ca, idx) => (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(`${SORT_KEY_VALUE}${idx}`), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)(`util.defaultIfNull`), (0, graphql_mapping_template_1.ref)(`ctx.stash.connectionAttibutes.get("${ca}")`), (0, graphql_mapping_template_1.ref)(`ctx.source.${ca}`)))),
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('query'), makeExpression(keySchema, connectionAttributes)),
];
if (keySchema[1] && !connectionAttributes[1]) {
const sortKeyFieldName = keySchema[1].attributeName;
const sortKeyField = relatedType.fields.find((f) => f.name.value === sortKeyFieldName);
if (sortKeyField) {
setup.push((0, graphql_transformer_common_1.applyKeyConditionExpression)(sortKeyFieldName, (0, graphql_transformer_common_1.attributeTypeFromScalar)(sortKeyField.type), 'query'));
}
else {
const sortKeyFieldNames = sortKeyFieldName.split(graphql_transformer_common_1.ModelResourceIDs.ModelCompositeKeySeparator());
setup.push((0, graphql_transformer_common_1.applyCompositeKeyConditionExpression)(sortKeyFieldNames, 'query', (0, graphql_transformer_common_1.toCamelCase)(sortKeyFieldNames), sortKeyFieldName));
}
}
setup.push(graphql_transformer_common_1.setArgs, (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)(authFilter)), (0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), authFilter),
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.obj)({ and: (0, graphql_mapping_template_1.list)([(0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')]) }))),
]), (0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')))), (0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('filter'))), (0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filterExpression'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.parseJson'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.transform.toDynamoDBFilterExpression'), (0, graphql_mapping_template_1.ref)('filter')))),
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.isNullOrBlank'), (0, graphql_mapping_template_1.ref)('filterExpression.expression'))), (0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.expressionValues.size')), (0, graphql_mapping_template_1.int)(0)), (0, graphql_mapping_template_1.qref)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.remove'), (0, graphql_mapping_template_1.str)('expressionValues')))),
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('filterExpression')),
])),
])));
const queryArguments = {
query: (0, graphql_mapping_template_1.raw)('$util.toJson($query)'),
scanIndexForward: (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.ref)('context.args.sortDirection'), (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.ref)('context.args.sortDirection'), (0, graphql_mapping_template_1.str)('ASC')), (0, graphql_mapping_template_1.bool)(true), (0, graphql_mapping_template_1.bool)(false)), (0, graphql_mapping_template_1.bool)(true)),
filter: (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('util.toJson($filter)'), (0, graphql_mapping_template_1.nul)()),
limit: (0, graphql_mapping_template_1.ref)('limit'),
nextToken: (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.ref)('context.args.nextToken'), (0, graphql_mapping_template_1.ref)('util.toJson($context.args.nextToken)'), (0, graphql_mapping_template_1.nul)()),
};
if (indexName) {
queryArguments.index = (0, graphql_mapping_template_1.str)(indexName);
}
const queryObj = graphql_mapping_template_1.DynamoDBMappingTemplate.query(queryArguments);
const resolverResourceId = graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID(object.name.value, field.name.value);
const resolver = ctx.resolvers.generateQueryResolver(object.name.value, field.name.value, resolverResourceId, dataSource, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, graphql_mapping_template_1.print)((0, graphql_mapping_template_1.compoundExpression)([
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.ref)('ctx.stash.deniedField'), (0, graphql_mapping_template_1.raw)('#return($util.toJson(null))')),
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(PARTITION_KEY_VALUE), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)(`util.defaultIfNull`), (0, graphql_mapping_template_1.ref)(`ctx.stash.connectionAttributes.get("${connectionAttributes[0]}")`), (0, graphql_mapping_template_1.ref)(`ctx.source.${connectionAttributes[0]}`))),
(0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.isNull'), (0, graphql_mapping_template_1.ref)(PARTITION_KEY_VALUE)), (0, graphql_mapping_template_1.compoundExpression)([(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('result'), (0, graphql_mapping_template_1.obj)({ items: (0, graphql_mapping_template_1.list)([]) })), (0, graphql_mapping_template_1.raw)('#return($result)')]), (0, graphql_mapping_template_1.compoundExpression)([...setup, queryObj])),
])), `${object.name.value}.${field.name.value}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, graphql_mapping_template_1.print)(graphql_mapping_template_1.DynamoDBMappingTemplate.dynamoDBResponse(false, (0, graphql_mapping_template_1.compoundExpression)([(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.raw)('!$result'), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('result'), (0, graphql_mapping_template_1.ref)('ctx.result'))), (0, graphql_mapping_template_1.raw)('$util.toJson($result)')]))), `${object.name.value}.${field.name.value}.res.vtl`));
resolver.setScope(ctx.stackManager.getScopeFor(resolverResourceId, CONNECTION_STACK));
ctx.resolvers.addResolver(object.name.value, field.name.value, resolver);
}
exports.makeQueryConnectionWithKeyResolver = makeQueryConnectionWithKeyResolver;
function makeExpression(keySchema, connectionAttributes) {
if (keySchema[1] && connectionAttributes[1]) {
let condensedSortKeyValue;
if (connectionAttributes.length > 2) {
const rangeKeyFields = connectionAttributes.slice(1);
condensedSortKeyValue = rangeKeyFields
.map((keyField, idx) => `\${${SORT_KEY_VALUE}${idx}}`)
.join(graphql_transformer_common_1.ModelResourceIDs.ModelCompositeKeySeparator());
}
return (0, graphql_mapping_template_1.obj)({
expression: (0, graphql_mapping_template_1.str)('#partitionKey = :partitionKey AND #sortKey = :sortKey'),
expressionNames: (0, graphql_mapping_template_1.obj)({
'#partitionKey': (0, graphql_mapping_template_1.str)(keySchema[0].attributeName),
'#sortKey': (0, graphql_mapping_template_1.str)(keySchema[1].attributeName),
}),
expressionValues: (0, graphql_mapping_template_1.obj)({
':partitionKey': (0, graphql_mapping_template_1.ref)(`util.dynamodb.toDynamoDB($${PARTITION_KEY_VALUE})`),
':sortKey': (0, graphql_mapping_template_1.ref)(`util.dynamodb.toDynamoDB(${condensedSortKeyValue ? `"${condensedSortKeyValue}"` : `$${SORT_KEY_VALUE}0`})`),
}),
});
}
return (0, graphql_mapping_template_1.obj)({
expression: (0, graphql_mapping_template_1.str)('#partitionKey = :partitionKey'),
expressionNames: (0, graphql_mapping_template_1.obj)({
'#partitionKey': (0, graphql_mapping_template_1.str)(keySchema[0].attributeName),
}),
expressionValues: (0, graphql_mapping_template_1.obj)({
':partitionKey': (0, graphql_mapping_template_1.ref)(`util.dynamodb.toDynamoDB($${PARTITION_KEY_VALUE})`),
}),
});
}
function condenseRangeKey(fields) {
return fields.join(graphql_transformer_common_1.ModelResourceIDs.ModelCompositeKeySeparator());
}
function updateTableForConnection(config, ctx) {
let { fields, indexName } = config;
if (indexName || fields.length > 0) {
const updateTableForConnection = (config, ctx) => {
const { fields, indexName: incomingIndexName } = config;
if (incomingIndexName || fields.length > 0) {
return;

@@ -202,3 +43,3 @@ }

const gsis = table.globalSecondaryIndexes;
indexName = `gsi-${mappedObjectName}.${field.name.value}`;
const indexName = `gsi-${mappedObjectName}.${field.name.value}`;
config.indexName = indexName;

@@ -232,3 +73,3 @@ if (gsis.some((gsi) => gsi.indexName === indexName)) {

});
const gsi = gsis.find((gsi) => gsi.indexName === indexName);
const gsi = gsis.find((g) => g.indexName === indexName);
const newIndex = {

@@ -244,5 +85,5 @@ indexName,

(0, graphql_index_transformer_1.overrideIndexAtCfnLevel)(ctx, relatedType.name.value, table, newIndex);
}
};
exports.updateTableForConnection = updateTableForConnection;
function getConnectedSortKeyAttributeDefinitionsForImplicitHasManyObject(ctx, object, hasManyField) {
const getConnectedSortKeyAttributeDefinitionsForImplicitHasManyObject = (ctx, object, hasManyField) => {
const sortKeyFields = (0, schema_1.getSortKeyFields)(ctx, object);

@@ -262,7 +103,20 @@ if (!sortKeyFields.length) {

return {
sortKeyName: condenseRangeKey(connectedSortKeyFieldNames),
sortKeyName: (0, exports.condenseRangeKey)(connectedSortKeyFieldNames),
sortKeyType: 'S',
};
}
}
return undefined;
};
const condenseRangeKey = (fields) => {
return fields.join(graphql_transformer_common_1.ModelResourceIDs.ModelCompositeKeySeparator());
};
exports.condenseRangeKey = condenseRangeKey;
const setFieldMappingResolverReference = (context, mappedModelName, typeName, fieldName, isList = false) => {
const modelFieldMap = context.resourceHelper.getModelFieldMap(mappedModelName);
if (!modelFieldMap.getMappedFields().length) {
return;
}
modelFieldMap.addResolverReference({ typeName: typeName, fieldName: fieldName, isList: isList });
};
exports.setFieldMappingResolverReference = setFieldMappingResolverReference;
//# sourceMappingURL=resolvers.js.map

@@ -52,3 +52,3 @@ "use strict";

}
if (relatedTypeIndex.length === 2) {
if (relatedTypeIndex && relatedTypeIndex.length === 2) {
const sortKeyType = relatedTypeIndex[1].type;

@@ -70,6 +70,9 @@ const baseType = (0, graphql_transformer_common_1.getBaseType)(sortKeyType);

const ensureHasOneConnectionField = (config, ctx) => {
const { field, fieldNodes, object, relatedType } = config;
if (fieldNodes.length > 0) {
const { field, fieldNodes, references, object, relatedType } = config;
if ((fieldNodes === null || fieldNodes === void 0 ? void 0 : fieldNodes.length) > 0) {
return;
}
if (references && references.length > 0) {
return;
}
const primaryKeyField = (0, utils_1.getObjectPrimaryKey)(relatedType);

@@ -109,4 +112,4 @@ const connectionAttributeName = (0, utils_1.getConnectionAttributeName)(ctx.transformParameters, object.name.value, field.name.value, primaryKeyField.name.value);

const ensureBelongsToConnectionField = (config, ctx) => {
const { relationType, relatedType, relatedField } = config;
if (relationType === 'hasOne') {
const { relationType, relatedType, references, relatedField } = config;
if (relationType === 'hasOne' || (references && references.length > 0)) {
(0, exports.ensureHasOneConnectionField)(config, ctx);

@@ -122,6 +125,9 @@ }

const ensureHasManyConnectionField = (config, ctx) => {
const { field, fieldNodes, object, relatedType } = config;
if (fieldNodes.length > 0) {
const { field, fieldNodes, object, relatedType, references } = config;
if ((fieldNodes === null || fieldNodes === void 0 ? void 0 : fieldNodes.length) > 0) {
return;
}
if (references && references.length > 0) {
return;
}
const sortKeyFields = (0, exports.getSortKeyFields)(ctx, object);

@@ -189,3 +195,3 @@ const primaryKeyField = (0, utils_1.getObjectPrimaryKey)(object);

];
if (fields.length < 2 && relatedTypeIndex.length > 1) {
if (fields && fields.length < 2 && relatedTypeIndex.length > 1) {
let fieldName;

@@ -192,0 +198,0 @@ let namedType;

@@ -9,2 +9,3 @@ import { DirectiveNode, FieldDefinitionNode, ObjectTypeDefinitionNode, ObjectTypeExtensionNode } from 'graphql';

fields: string[];
references: string[];
fieldNodes: FieldDefinitionNode[];

@@ -22,2 +23,3 @@ relatedType: ObjectTypeDefinitionNode;

fields: string[];
references: string[];
fieldNodes: FieldDefinitionNode[];

@@ -35,2 +37,3 @@ relatedType: ObjectTypeDefinitionNode;

fields: string[];
references: string[];
fieldNodes: FieldDefinitionNode[];

@@ -51,2 +54,3 @@ relatedType: ObjectTypeDefinitionNode;

fields: string[];
references: string[];
fieldNodes: FieldDefinitionNode[];

@@ -53,0 +57,0 @@ relatedType: ObjectTypeDefinitionNode;

@@ -5,4 +5,7 @@ import { FieldMapEntry, ResolverReferenceEntry, TransformerContextProvider, TransformerResourceHelperProvider } from '@aws-amplify/graphql-transformer-interfaces';

import { BelongsToDirectiveConfiguration, HasManyDirectiveConfiguration, HasOneDirectiveConfiguration, ManyToManyDirectiveConfiguration } from './types';
export declare const validateParentReferencesFields: (config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration, ctx: TransformerContextProvider) => void;
export declare const validateChildReferencesFields: (config: BelongsToDirectiveConfiguration, ctx: TransformerContextProvider) => void;
export declare function getRelatedTypeIndex(config: HasOneDirectiveConfiguration, ctx: TransformerContextProvider, indexName?: string): FieldDefinitionNode[];
export declare function ensureFieldsArray(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration | BelongsToDirectiveConfiguration): void;
export declare function ensureReferencesArray(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration | BelongsToDirectiveConfiguration): void;
export declare function getModelDirective(objectType: ObjectTypeDefinitionNode): DirectiveNode | undefined;

@@ -12,2 +15,4 @@ export declare function validateModelDirective(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration | BelongsToDirectiveConfiguration | ManyToManyDirectiveConfiguration): void;

export declare function getFieldsNodes(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration | BelongsToDirectiveConfiguration, ctx: TransformerContextProvider): FieldDefinitionNode[];
export declare function getReferencesNodes(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration, ctx: TransformerContextProvider): FieldDefinitionNode[];
export declare function getBelongsToReferencesNodes(config: BelongsToDirectiveConfiguration, ctx: TransformerContextProvider): FieldDefinitionNode[];
export declare function validateRelatedModelDirective(config: HasManyDirectiveConfiguration | HasOneDirectiveConfiguration | BelongsToDirectiveConfiguration): void;

@@ -14,0 +19,0 @@ export declare function getConnectionAttributeName(transformParameters: TransformParameters, type: string, field: string, relatedTypeField: string): string;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getObjectPrimaryKey = exports.registerManyToManyForeignKeyMappings = exports.registerHasManyForeignKeyMappings = exports.registerHasOneForeignKeyMappings = exports.validateDisallowedDataStoreRelationships = exports.getBackendConnectionAttributeName = exports.getSortKeyConnectionAttributeName = exports.getManyToManyConnectionAttributeName = exports.getConnectionAttributeName = exports.validateRelatedModelDirective = exports.getFieldsNodes = exports.getRelatedType = exports.validateModelDirective = exports.getModelDirective = exports.ensureFieldsArray = exports.getRelatedTypeIndex = void 0;
exports.getObjectPrimaryKey = exports.registerManyToManyForeignKeyMappings = exports.registerHasManyForeignKeyMappings = exports.registerHasOneForeignKeyMappings = exports.validateDisallowedDataStoreRelationships = exports.getBackendConnectionAttributeName = exports.getSortKeyConnectionAttributeName = exports.getManyToManyConnectionAttributeName = exports.getConnectionAttributeName = exports.validateRelatedModelDirective = exports.getBelongsToReferencesNodes = exports.getReferencesNodes = exports.getFieldsNodes = exports.getRelatedType = exports.validateModelDirective = exports.getModelDirective = exports.ensureReferencesArray = exports.ensureFieldsArray = exports.getRelatedTypeIndex = exports.validateChildReferencesFields = exports.validateParentReferencesFields = void 0;
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
const graphql_1 = require("graphql");
const graphql_transformer_common_1 = require("graphql-transformer-common");
const validateParentReferencesFields = (config, ctx) => {
const { directiveName, object, references, relatedType } = config;
const enums = ctx.output.getTypeDefinitionsOfKind(graphql_1.Kind.ENUM_TYPE_DEFINITION);
const primaryKeys = (0, graphql_transformer_core_1.getPrimaryKeyFields)(object);
if (primaryKeys.length !== references.length) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`The number of references provided to @${directiveName} must match the number of primary keys on ${object.name.value}.`);
}
for (const reference of references) {
const fieldNode = relatedType.fields.find((field) => field.name.value === reference);
if (!fieldNode) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`${reference} is not a field in ${relatedType.name.value}`);
}
if (!(0, graphql_transformer_common_1.isScalarOrEnum)(fieldNode.type, enums)) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`All reference fields provided to @${directiveName} must be scalar or enum fields.`);
}
}
};
exports.validateParentReferencesFields = validateParentReferencesFields;
const validateChildReferencesFields = (config, ctx) => {
const { directiveName, object, references, relatedType } = config;
const enums = ctx.output.getTypeDefinitionsOfKind(graphql_1.Kind.ENUM_TYPE_DEFINITION);
const primaryKeys = (0, graphql_transformer_core_1.getPrimaryKeyFields)(relatedType);
if (primaryKeys.length !== references.length) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`The number of references provided to @${directiveName} must match the number of primary keys on ${relatedType.name.value}.`);
}
for (const reference of references) {
const fieldNode = object.fields.find((field) => field.name.value === reference);
if (!fieldNode) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`${reference} is not a field in ${object.name.value}`);
}
if (!(0, graphql_transformer_common_1.isScalarOrEnum)(fieldNode.type, enums)) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`All reference fields provided to @${directiveName} must be scalar or enum fields.`);
}
}
};
exports.validateChildReferencesFields = validateChildReferencesFields;
function getRelatedTypeIndex(config, ctx, indexName) {

@@ -76,2 +112,5 @@ const { directiveName, field, fieldNodes } = config;

function ensureFieldsArray(config) {
if (config.references) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`DynamoDB models do not support 'references' on @${config.directiveName} directive.`);
}
if (!config.fields) {

@@ -88,2 +127,17 @@ config.fields = [];

exports.ensureFieldsArray = ensureFieldsArray;
function ensureReferencesArray(config) {
if (config.fields) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`Relational database models do not support 'fields' on @${config.directiveName} directive.`);
}
if (!config.references) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`Reference fields must be passed to @${config.directiveName} directive for RDS models.`);
}
else if (!Array.isArray(config.references)) {
config.references = [config.references];
}
else if (config.references.length === 0) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`No reference fields passed to @${config.directiveName} directive.`);
}
}
exports.ensureReferencesArray = ensureReferencesArray;
function getModelDirective(objectType) {

@@ -124,2 +178,32 @@ return objectType.directives.find((directive) => directive.name.value === 'model');

exports.getFieldsNodes = getFieldsNodes;
function getReferencesNodes(config, ctx) {
const { directiveName, references, relatedType } = config;
const enums = ctx.output.getTypeDefinitionsOfKind(graphql_1.Kind.ENUM_TYPE_DEFINITION);
return references.map((fieldName) => {
const fieldNode = relatedType.fields.find((field) => field.name.value === fieldName);
if (!fieldNode) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`${fieldName} is not a field in ${relatedType.name.value}`);
}
if (!(0, graphql_transformer_common_1.isScalarOrEnum)(fieldNode.type, enums)) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`All references provided to @${directiveName} must be scalar or enum fields.`);
}
return fieldNode;
});
}
exports.getReferencesNodes = getReferencesNodes;
function getBelongsToReferencesNodes(config, ctx) {
const { directiveName, references, object } = config;
const enums = ctx.output.getTypeDefinitionsOfKind(graphql_1.Kind.ENUM_TYPE_DEFINITION);
return references.map((fieldName) => {
const fieldNode = object.fields.find((field) => field.name.value === fieldName);
if (!fieldNode) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`${fieldName} is not a field in ${object.name.value}`);
}
if (!(0, graphql_transformer_common_1.isScalarOrEnum)(fieldNode.type, enums)) {
throw new graphql_transformer_core_1.InvalidDirectiveError(`All references provided to @${directiveName} must be scalar or enum fields.`);
}
return fieldNode;
});
}
exports.getBelongsToReferencesNodes = getBelongsToReferencesNodes;
function validateRelatedModelDirective(config) {

@@ -126,0 +210,0 @@ if (!getModelDirective(config.relatedType)) {

{
"name": "@aws-amplify/graphql-relational-transformer",
"version": "2.2.0-construct-publish-test.0",
"version": "2.2.0-nov-14-cut.0",
"description": "Amplify GraphQL relational modeling transformers",

@@ -31,13 +31,13 @@ "repository": {

"dependencies": {
"@aws-amplify/graphql-index-transformer": "2.2.0-construct-publish-test.0",
"@aws-amplify/graphql-model-transformer": "2.3.0-construct-publish-test.0",
"@aws-amplify/graphql-transformer-core": "2.3.0-construct-publish-test.0",
"@aws-amplify/graphql-transformer-interfaces": "3.3.0-construct-publish-test.0",
"@aws-amplify/graphql-index-transformer": "2.2.0-nov-14-cut.0",
"@aws-amplify/graphql-model-transformer": "2.3.0-nov-14-cut.0",
"@aws-amplify/graphql-transformer-core": "2.3.0-nov-14-cut.0",
"@aws-amplify/graphql-transformer-interfaces": "3.3.0-nov-14-cut.0",
"graphql": "^15.5.0",
"graphql-mapping-template": "4.20.12",
"graphql-transformer-common": "4.26.0-construct-publish-test.0",
"graphql-transformer-common": "4.26.0-nov-14-cut.0",
"immer": "^9.0.12"
},
"devDependencies": {
"@aws-amplify/graphql-transformer-test-utils": "0.3.0-construct-publish-test.0"
"@aws-amplify/graphql-transformer-test-utils": "0.3.0-nov-14-cut.0"
},

@@ -64,3 +64,3 @@ "peerDependencies": {

"global": {
"branches": 39,
"branches": 38,
"functions": 50,

@@ -71,3 +71,3 @@ "lines": 55

},
"gitHead": "834040d5d4ac7290aed664176ffbd4559cbbf8d2"
"gitHead": "fc9a8439add9d01a28f308ebf3b07b73b8d23923"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc