From 87954a024af1fdb20ee8ed185b048b768683b520 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 08:06:04 -0700 Subject: [PATCH 01/11] [Codegen] update customType to embedded and embeddedCollection --- .../visitors/appsync-swift-visitor.test.ts | 56 ++++++++++++++----- .../src/visitors/appsync-swift-visitor.ts | 4 +- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index 36bb7e67927..843de13ca1a 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -696,19 +696,19 @@ describe('AppSyncSwiftVisitor', () => { model.fields( .id(), - .field(objectWithNativeTypes.intArr, is: .optional, ofType: .customType([Int].self)), - .field(objectWithNativeTypes.strArr, is: .optional, ofType: .customType([String].self)), - .field(objectWithNativeTypes.floatArr, is: .optional, ofType: .customType([Double].self)), - .field(objectWithNativeTypes.boolArr, is: .optional, ofType: .customType([Bool].self)), - .field(objectWithNativeTypes.dateArr, is: .optional, ofType: .customType([Temporal.Date].self)), - .field(objectWithNativeTypes.enumArr, is: .optional, ofType: .customType([EnumType].self)) + .field(objectWithNativeTypes.intArr, is: .optional, ofType: .embeddedCollection(of: Int.self)), + .field(objectWithNativeTypes.strArr, is: .optional, ofType: .embeddedCollection(of: String.self)), + .field(objectWithNativeTypes.floatArr, is: .optional, ofType: .embeddedCollection(of: Double.self)), + .field(objectWithNativeTypes.boolArr, is: .optional, ofType: .embeddedCollection(of: Bool.self)), + .field(objectWithNativeTypes.dateArr, is: .optional, ofType: .embeddedCollection(of: Temporal.Date.self)), + .field(objectWithNativeTypes.enumArr, is: .optional, ofType: .embeddedCollection(of: EnumType.self)) ) } }" `); }); - it('should support using non model types in models', () => { + it('should support using embedded types in models', () => { const schema = /* GraphQL */ ` type Attraction @model { id: ID! @@ -792,11 +792,11 @@ describe('AppSyncSwiftVisitor', () => { model.fields( .id(), .field(attraction.name, is: .required, ofType: .string), - .field(attraction.location, is: .required, ofType: .customType(Location.self)), - .field(attraction.nearByLocations, is: .optional, ofType: .customType([Location].self)), + .field(attraction.location, is: .required, ofType: .embedded(type: Location.self)), + .field(attraction.nearByLocations, is: .optional, ofType: .embeddedCollection(of: Location.self)), .field(attraction.status, is: .required, ofType: .enum(type: Status.self)), - .field(attraction.statusHistory, is: .optional, ofType: .customType([Status].self)), - .field(attraction.tags, is: .optional, ofType: .customType([String].self)) + .field(attraction.statusHistory, is: .optional, ofType: .embeddedCollection(of: Status.self)), + .field(attraction.tags, is: .optional, ofType: .embeddedCollection(of: String.self)) ) } }" @@ -820,13 +820,43 @@ describe('AppSyncSwiftVisitor', () => { import Amplify import Foundation - public struct Location: Codable { + public struct Location: Embedded { var lat: String var lang: String var tags: [String]? }" `); + const visitorLocationSchema = getVisitor(schema, 'Location', CodeGenGenerateEnum.metadata); + expect(visitorLocationSchema.generate()).toMatchInlineSnapshot(` + "// swiftlint:disable all + import Amplify + import Foundation + + extension Location { + // MARK: - CodingKeys + public enum CodingKeys: String, ModelKey { + case lat + case lang + case tags + } + + public static let keys = CodingKeys.self + // MARK: - ModelSchema + + public static let schema = defineSchema { model in + let location = Location.keys + + model.fields( + .id(), + .field(location.lat, is: .required, ofType: .string), + .field(location.lang, is: .required, ofType: .string), + .field(location.tags, is: .optional, ofType: .embeddedCollection(of: String.self)) + ) + } + }" + `); + const visitorClassLoader = getVisitor(schema, undefined, CodeGenGenerateEnum.loader); expect(visitorClassLoader.generate()).toMatchInlineSnapshot(` "// swiftlint:disable all @@ -1213,7 +1243,7 @@ describe('AppSyncSwiftVisitor', () => { model.fields( .id(), .field(post.title, is: .required, ofType: .string), - .field(post.groups, is: .required, ofType: .customType([String].self)) + .field(post.groups, is: .required, ofType: .embeddedCollectioon(of: String.self)) ) } }" diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index fa75440f235..62b6cc5b75c 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -249,7 +249,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { if (isModelType) { ofType = `.collection(of: ${this.getSwiftModelTypeName(field)})`; } else { - ofType = `.customType(${this.getSwiftModelTypeName(field)})`; + ofType = `.embeddedCollection(of: ${this.getSwiftModelTypeName(field)})`; } } else { if (isEnumType) { @@ -257,7 +257,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { } else if (isModelType) { ofType = `.model(${typeName})`; } else if (isNonModelType) { - ofType = `.customType(${typeName})`; + ofType = `.embedded(type: ${typeName})`; } else { ofType = typeName; } From 43ba2e87b12bcc6799e09f1feb1f4c0eacab8377 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 08:46:46 -0700 Subject: [PATCH 02/11] embedded types no longer return encased in square bracket --- .../__tests__/visitors/appsync-swift-visitor.test.ts | 2 +- .../src/visitors/appsync-swift-visitor.ts | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index 843de13ca1a..88c1db58e82 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -1243,7 +1243,7 @@ describe('AppSyncSwiftVisitor', () => { model.fields( .id(), .field(post.title, is: .required, ofType: .string), - .field(post.groups, is: .required, ofType: .embeddedCollectioon(of: String.self)) + .field(post.groups, is: .required, ofType: .embeddedCollection(of: String.self)) ) } }" diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index 62b6cc5b75c..43e45958dcb 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -95,7 +95,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { const structBlock: SwiftDeclarationBlock = new SwiftDeclarationBlock() .withName(this.getModelName(obj)) .access('public') - .withProtocols(['Codable']); + .withProtocols(['Embedded']); Object.values(obj.fields).forEach(field => { const fieldType = this.getNativeType(field); structBlock.addProperty(this.getFieldName(field), fieldType, undefined, 'DEFAULT', { @@ -269,19 +269,17 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { private getSwiftModelTypeName(field: CodeGenField) { if (this.isEnumType(field)) { - const name = this.getEnumName(field.type); - return field.isList ? `[${name}].self` : `${name}.self`; + return `${this.getEnumName(field.type)}.self`; } if (this.isModelType(field)) { return `${this.getModelName(this.modelMap[field.type])}.self`; } if (this.isNonModelType(field)) { - const name = this.getNonModelName(this.nonModelMap[field.type]); - return field.isList ? `[${name}].self` : `${name}.self`; + return `${this.getNonModelName(this.nonModelMap[field.type])}.self`; } if (field.type in schemaTypeMap) { if (field.isList) { - return `[${this.getNativeType(field)}].self`; + return `${this.getNativeType(field)}.self`; } return schemaTypeMap[field.type]; } From 0b54844b4b565348b8f4af899da9fc79a8522a01 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 09:44:46 -0700 Subject: [PATCH 03/11] generate schemas for non models --- .../__tests__/visitors/appsync-swift-visitor.test.ts | 7 +++++-- .../src/visitors/appsync-swift-visitor.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index 88c1db58e82..3a2ab2861b7 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -828,7 +828,9 @@ describe('AppSyncSwiftVisitor', () => { `); const visitorLocationSchema = getVisitor(schema, 'Location', CodeGenGenerateEnum.metadata); - expect(visitorLocationSchema.generate()).toMatchInlineSnapshot(` + const generatedCode = visitorLocationSchema.generate() + console.log(generatedCode) + expect(generatedCode).toMatchInlineSnapshot(` "// swiftlint:disable all import Amplify import Foundation @@ -847,8 +849,9 @@ describe('AppSyncSwiftVisitor', () => { public static let schema = defineSchema { model in let location = Location.keys + model.pluralName = "Locations" + model.fields( - .id(), .field(location.lat, is: .required, ofType: .string), .field(location.lang, is: .required, ofType: .string), .field(location.tags, is: .optional, ofType: .embeddedCollection(of: String.self)) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index 43e45958dcb..e858ff66332 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -124,6 +124,16 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { result.push(schemaDeclarations.string); }); + + Object.values(this.getSelectedNonModels()) + .forEach(model => { + const schemaDeclarations = new SwiftDeclarationBlock().asKind('extension').withName(this.getModelName(model)); + + this.generateCodingKeys(this.getModelName(model), model, schemaDeclarations), + this.generateModelSchema(this.getModelName(model), model, schemaDeclarations); + + result.push(schemaDeclarations.string); + }); return result.join('\n'); } From d8a1f56be719a49ca60a8cbda87f12ef3e8dd03a Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 11:13:33 -0700 Subject: [PATCH 04/11] fix Location Schema test --- .../src/__tests__/visitors/appsync-swift-visitor.test.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index 3a2ab2861b7..aca3b02d227 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -828,9 +828,7 @@ describe('AppSyncSwiftVisitor', () => { `); const visitorLocationSchema = getVisitor(schema, 'Location', CodeGenGenerateEnum.metadata); - const generatedCode = visitorLocationSchema.generate() - console.log(generatedCode) - expect(generatedCode).toMatchInlineSnapshot(` + expect(visitorLocationSchema.generate()).toMatchInlineSnapshot(` "// swiftlint:disable all import Amplify import Foundation @@ -849,7 +847,7 @@ describe('AppSyncSwiftVisitor', () => { public static let schema = defineSchema { model in let location = Location.keys - model.pluralName = "Locations" + model.pluralName = \\"Locations\\" model.fields( .field(location.lat, is: .required, ofType: .string), From b9be43b091c3bbc6c69150e6c71948a70f7849b8 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 11:49:14 -0700 Subject: [PATCH 05/11] updated swift presets to generate for all models, including the embedded non-models --- packages/amplify-codegen-appsync-model-plugin/src/preset.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts index 3d661c3cff8..d4729435e40 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts @@ -83,7 +83,8 @@ const generateSwiftPreset = ( selectedType: modelName, }, }); - if (model.kind !== Kind.ENUM_TYPE_DEFINITION && hasDirective('model')(model)) { + // TODO: need to generate metadata for non models here + if (model.kind !== Kind.ENUM_TYPE_DEFINITION) { config.push({ ...options, filename: join(options.baseOutputDir, `${modelName}+Schema.swift`), From da1150fd5cf95aee1cb262d429acea85d9c470bf Mon Sep 17 00:00:00 2001 From: Michael Law <1365977+lawmicha@users.noreply.github.com> Date: Fri, 12 Jun 2020 13:43:20 -0700 Subject: [PATCH 06/11] Update packages/amplify-codegen-appsync-model-plugin/src/preset.ts --- packages/amplify-codegen-appsync-model-plugin/src/preset.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts index d4729435e40..a1d30d1d26c 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts @@ -83,7 +83,6 @@ const generateSwiftPreset = ( selectedType: modelName, }, }); - // TODO: need to generate metadata for non models here if (model.kind !== Kind.ENUM_TYPE_DEFINITION) { config.push({ ...options, From 873bb6c56773d8fd0cd6ced36c0e5ab3828f1542 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Mon, 15 Jun 2020 12:14:46 -0700 Subject: [PATCH 07/11] remove unsured hasDirective --- .../amplify-codegen-appsync-model-plugin/src/preset.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts index a1d30d1d26c..492fa49dbdf 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/preset.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/preset.ts @@ -26,13 +26,6 @@ export type AppSyncModelCodeGenPresetConfig = { target: 'java' | 'android' | 'ios' | 'swift' | 'javascript' | 'typescript'; }; -const hasDirective = (directiveName: string) => (typeObj: TypeDefinitionNode): boolean => { - if (typeObj && typeObj.directives && typeObj.directives.length) { - return typeObj.directives.find(d => d.name.value === directiveName) !== undefined; - } - return false; -}; - const generateJavaPreset = ( options: Types.PresetFnArgs, models: TypeDefinitionNode[], From 33c2cec8d208b68a87bc5ec91f8033bb29b15831 Mon Sep 17 00:00:00 2001 From: Michael law <1365977+lawmicha@users.noreply.github.com> Date: Mon, 15 Jun 2020 13:45:51 -0700 Subject: [PATCH 08/11] rename to Embeddable --- .../src/__tests__/visitors/appsync-swift-visitor.test.ts | 2 +- .../src/visitors/appsync-swift-visitor.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts index aca3b02d227..eaa3ced26fd 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/__tests__/visitors/appsync-swift-visitor.test.ts @@ -820,7 +820,7 @@ describe('AppSyncSwiftVisitor', () => { import Amplify import Foundation - public struct Location: Embedded { + public struct Location: Embeddable { var lat: String var lang: String var tags: [String]? diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index e858ff66332..1ef63dea44e 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -95,7 +95,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { const structBlock: SwiftDeclarationBlock = new SwiftDeclarationBlock() .withName(this.getModelName(obj)) .access('public') - .withProtocols(['Embedded']); + .withProtocols(['Embeddable']); Object.values(obj.fields).forEach(field => { const fieldType = this.getNativeType(field); structBlock.addProperty(this.getFieldName(field), fieldType, undefined, 'DEFAULT', { From 7641294ae32e52d8ec39fc77d8b3e3f6b8be40cd Mon Sep 17 00:00:00 2001 From: Michael Law <1365977+lawmicha@users.noreply.github.com> Date: Mon, 15 Jun 2020 21:33:19 -0700 Subject: [PATCH 09/11] Update packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts Co-authored-by: Yathi <511386+yuth@users.noreply.github.com> --- .../src/visitors/appsync-swift-visitor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index 1ef63dea44e..3161acbb6e9 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -129,7 +129,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { .forEach(model => { const schemaDeclarations = new SwiftDeclarationBlock().asKind('extension').withName(this.getModelName(model)); - this.generateCodingKeys(this.getModelName(model), model, schemaDeclarations), + this.generateCodingKeys(this.getNonModelName(model), model, schemaDeclarations), this.generateModelSchema(this.getModelName(model), model, schemaDeclarations); result.push(schemaDeclarations.string); From a141d3411cfeabda53d26d0ac40317beb5533092 Mon Sep 17 00:00:00 2001 From: Michael Law <1365977+lawmicha@users.noreply.github.com> Date: Mon, 15 Jun 2020 21:33:25 -0700 Subject: [PATCH 10/11] Update packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts Co-authored-by: Yathi <511386+yuth@users.noreply.github.com> --- .../src/visitors/appsync-swift-visitor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index 3161acbb6e9..11bee1f4afc 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -130,7 +130,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { const schemaDeclarations = new SwiftDeclarationBlock().asKind('extension').withName(this.getModelName(model)); this.generateCodingKeys(this.getNonModelName(model), model, schemaDeclarations), - this.generateModelSchema(this.getModelName(model), model, schemaDeclarations); + this.generateModelSchema(this.getNonModelName(model), model, schemaDeclarations); result.push(schemaDeclarations.string); }); From 33fcfe20ab120b3819879dddd94e74be9a1d12ad Mon Sep 17 00:00:00 2001 From: Yathi <511386+yuth@users.noreply.github.com> Date: Tue, 16 Jun 2020 08:53:49 -0700 Subject: [PATCH 11/11] Update packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts --- .../src/visitors/appsync-swift-visitor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts index 11bee1f4afc..df7b5c67a66 100644 --- a/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts +++ b/packages/amplify-codegen-appsync-model-plugin/src/visitors/appsync-swift-visitor.ts @@ -127,7 +127,7 @@ export class AppSyncSwiftVisitor extends AppSyncModelVisitor { Object.values(this.getSelectedNonModels()) .forEach(model => { - const schemaDeclarations = new SwiftDeclarationBlock().asKind('extension').withName(this.getModelName(model)); + const schemaDeclarations = new SwiftDeclarationBlock().asKind('extension').withName(this.getNonModelName(model)); this.generateCodingKeys(this.getNonModelName(model), model, schemaDeclarations), this.generateModelSchema(this.getNonModelName(model), model, schemaDeclarations);