UNPKG

@aws-amplify/graphql-api-construct

Version:

AppSync GraphQL Api Construct using Amplify GraphQL Transformer.

37 lines 6.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.constructDataSourceStrategies = exports.getModelTypeNames = void 0; const graphql_1 = require("graphql"); const MODEL_DIRECTIVE_NAME = 'model'; const MANY_TO_MANY_DIRECTIVE_NAME = 'manyToMany'; /** * Get the type names with model directives in the GraphQL schema in SDL * @param schema graphql schema in SDL * @returns type names which model diretives are attached */ const getModelTypeNames = (schema) => { const parsedSchema = (0, graphql_1.parse)(schema); const nodesWithModelDirective = parsedSchema.definitions.filter((obj) => obj.kind === graphql_1.Kind.OBJECT_TYPE_DEFINITION && obj.directives?.some((dir) => dir.name.value === MODEL_DIRECTIVE_NAME)); const modelKeys = nodesWithModelDirective.map((type) => type.name.value); nodesWithModelDirective.forEach((obj) => { const { fields } = obj; fields?.forEach((field) => { field.directives?.forEach((dir) => { if (dir.name.value === MANY_TO_MANY_DIRECTIVE_NAME) { const relationArg = dir.arguments?.find((arg) => arg.name.value === 'relationName'); if (relationArg) { modelKeys.push(relationArg.value.value); } } }); }); }); return modelKeys.filter((key, idx) => modelKeys.indexOf(key) === idx); }; exports.getModelTypeNames = getModelTypeNames; const constructDataSourceStrategies = (schema, dataSourceStrategy) => { const modelKeys = (0, exports.getModelTypeNames)(schema); return modelKeys.reduce((acc, cur) => ({ ...acc, [cur]: dataSourceStrategy }), {}); }; exports.constructDataSourceStrategies = constructDataSourceStrategies; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdHlwZS1uYW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVybmFsL21vZGVsLXR5cGUtbmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBaUY7QUFHakYsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSwyQkFBMkIsR0FBRyxZQUFZLENBQUM7QUFFakQ7Ozs7R0FJRztBQUNJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFjLEVBQVksRUFBRTtJQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFBLGVBQUssRUFBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUM3RCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxjQUFJLENBQUMsc0JBQXNCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLG9CQUFvQixDQUFDLENBQzVILENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWlDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUErQixDQUFDO1FBQ25ELE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4QixLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLDJCQUEyQixFQUFFLENBQUM7b0JBQ25ELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxjQUFjLENBQUMsQ0FBQztvQkFDcEYsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDaEIsU0FBUyxDQUFDLElBQUksQ0FBRSxXQUFXLENBQUMsS0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFwQlcsUUFBQSxpQkFBaUIscUJBb0I1QjtBQUVLLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsTUFBYyxFQUNkLGtCQUEyQyxFQUNGLEVBQUU7SUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBQSx5QkFBaUIsRUFBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckYsQ0FBQyxDQUFDO0FBTlcsUUFBQSw2QkFBNkIsaUNBTXhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2luZCwgT2JqZWN0VHlwZURlZmluaXRpb25Ob2RlLCBTdHJpbmdWYWx1ZU5vZGUsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBNb2RlbERhdGFTb3VyY2VTdHJhdGVneSB9IGZyb20gJy4uL21vZGVsLWRhdGFzb3VyY2Utc3RyYXRlZ3ktdHlwZXMnO1xuXG5jb25zdCBNT0RFTF9ESVJFQ1RJVkVfTkFNRSA9ICdtb2RlbCc7XG5jb25zdCBNQU5ZX1RPX01BTllfRElSRUNUSVZFX05BTUUgPSAnbWFueVRvTWFueSc7XG5cbi8qKlxuICogR2V0IHRoZSB0eXBlIG5hbWVzIHdpdGggbW9kZWwgZGlyZWN0aXZlcyBpbiB0aGUgR3JhcGhRTCBzY2hlbWEgaW4gU0RMXG4gKiBAcGFyYW0gc2NoZW1hIGdyYXBocWwgc2NoZW1hIGluIFNETFxuICogQHJldHVybnMgdHlwZSBuYW1lcyB3aGljaCBtb2RlbCBkaXJldGl2ZXMgYXJlIGF0dGFjaGVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNb2RlbFR5cGVOYW1lcyA9IChzY2hlbWE6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkU2NoZW1hID0gcGFyc2Uoc2NoZW1hKTtcbiAgY29uc3Qgbm9kZXNXaXRoTW9kZWxEaXJlY3RpdmUgPSBwYXJzZWRTY2hlbWEuZGVmaW5pdGlvbnMuZmlsdGVyKFxuICAgIChvYmopID0+IG9iai5raW5kID09PSBLaW5kLk9CSkVDVF9UWVBFX0RFRklOSVRJT04gJiYgb2JqLmRpcmVjdGl2ZXM/LnNvbWUoKGRpcikgPT4gZGlyLm5hbWUudmFsdWUgPT09IE1PREVMX0RJUkVDVElWRV9OQU1FKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxLZXlzID0gbm9kZXNXaXRoTW9kZWxEaXJlY3RpdmUubWFwKCh0eXBlKSA9PiAodHlwZSBhcyBPYmplY3RUeXBlRGVmaW5pdGlvbk5vZGUpLm5hbWUudmFsdWUpO1xuICBub2Rlc1dpdGhNb2RlbERpcmVjdGl2ZS5mb3JFYWNoKChvYmopID0+IHtcbiAgICBjb25zdCB7IGZpZWxkcyB9ID0gb2JqIGFzIE9iamVjdFR5cGVEZWZpbml0aW9uTm9kZTtcbiAgICBmaWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBmaWVsZC5kaXJlY3RpdmVzPy5mb3JFYWNoKChkaXIpID0+IHtcbiAgICAgICAgaWYgKGRpci5uYW1lLnZhbHVlID09PSBNQU5ZX1RPX01BTllfRElSRUNUSVZFX05BTUUpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGlvbkFyZyA9IGRpci5hcmd1bWVudHM/LmZpbmQoKGFyZykgPT4gYXJnLm5hbWUudmFsdWUgPT09ICdyZWxhdGlvbk5hbWUnKTtcbiAgICAgICAgICBpZiAocmVsYXRpb25BcmcpIHtcbiAgICAgICAgICAgIG1vZGVsS2V5cy5wdXNoKChyZWxhdGlvbkFyZy52YWx1ZSBhcyBTdHJpbmdWYWx1ZU5vZGUpLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG1vZGVsS2V5cy5maWx0ZXIoKGtleSwgaWR4KSA9PiBtb2RlbEtleXMuaW5kZXhPZihrZXkpID09PSBpZHgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnN0cnVjdERhdGFTb3VyY2VTdHJhdGVnaWVzID0gKFxuICBzY2hlbWE6IHN0cmluZyxcbiAgZGF0YVNvdXJjZVN0cmF0ZWd5OiBNb2RlbERhdGFTb3VyY2VTdHJhdGVneSxcbik6IFJlY29yZDxzdHJpbmcsIE1vZGVsRGF0YVNvdXJjZVN0cmF0ZWd5PiA9PiB7XG4gIGNvbnN0IG1vZGVsS2V5cyA9IGdldE1vZGVsVHlwZU5hbWVzKHNjaGVtYSk7XG4gIHJldHVybiBtb2RlbEtleXMucmVkdWNlKChhY2MsIGN1cikgPT4gKHsgLi4uYWNjLCBbY3VyXTogZGF0YVNvdXJjZVN0cmF0ZWd5IH0pLCB7fSk7XG59O1xuIl19