From 280ffdcc1f5a1a41b1936cc1603873fd1b7757ca Mon Sep 17 00:00:00 2001 From: Jeffrey Patterson Date: Mon, 17 Apr 2017 13:19:59 -0400 Subject: [PATCH] deal with recursive data types in the model binder config compiler and query builder --- src/Types/QueryBuilder.js | 5 ++++- src/Types/StorageProviders/modelBinderConfigCompiler.js | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Types/QueryBuilder.js b/src/Types/QueryBuilder.js index 1d25b200..868ece62 100644 --- a/src/Types/QueryBuilder.js +++ b/src/Types/QueryBuilder.js @@ -46,7 +46,10 @@ $C('$data.queryBuilder', null, null, { this.modelBinderConfig['$keys'] = new Array(); } this.modelBinderConfig['$keys'].push(name); - } + }, + stackContainsType: function(elementType) { + return this._binderConfigPropertyStack.map(p => p.$type).indexOf(elementType) >= 0; + }, }); export default $data diff --git a/src/Types/StorageProviders/modelBinderConfigCompiler.js b/src/Types/StorageProviders/modelBinderConfigCompiler.js index 3ffe9fe2..f6ae95a0 100644 --- a/src/Types/StorageProviders/modelBinderConfigCompiler.js +++ b/src/Types/StorageProviders/modelBinderConfigCompiler.js @@ -183,6 +183,9 @@ $C('$data.modelBinder.ModelBinderConfigCompiler', $data.Expressions.EntityExpres _addPropertyToModelBinderConfig: function (elementType, builder) { var storageModel = this._query.context._storageModel.getStorageModel(elementType); if (elementType.memberDefinitions) { + if (builder.stackContainsType(elementType)) { + return; + } var memberDefinitions = this._inheritanceMemberDefinitions(elementType, elementType.memberDefinitions.getPublicMappedProperties()); memberDefinitions.forEach(function (prop) { if ((!storageModel) || (storageModel && !storageModel.Associations[prop.name] && !storageModel.ComplexTypes[prop.name])) {