From b329ec6336601595c2a83d5668d74f78388ba0e0 Mon Sep 17 00:00:00 2001 From: Loose Date: Wed, 3 Jul 2024 16:08:34 -0300 Subject: [PATCH 1/3] W-16124325 - Adding AvroConfiguration to platform interface --- .../client/platform/AMFConfiguration.scala | 16 +++++++++++----- .../client/scala/AMFConfiguration.scala | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/AMFConfiguration.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/AMFConfiguration.scala index 0b0ac2e88f..9f136bdf17 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/AMFConfiguration.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/AMFConfiguration.scala @@ -1,14 +1,14 @@ package amf.apicontract.client.platform -import amf.aml.client.platform.model.document.Dialect -import amf.aml.client.platform.model.document.DialectInstance +import amf.aml.client.platform.model.document.{Dialect, DialectInstance} import amf.aml.internal.convert.VocabulariesClientConverter.DialectConverter import amf.apicontract.client.scala.{ APIConfiguration => InternalAPIConfiguration, AsyncAPIConfiguration => InternalAsyncAPIConfiguration, OASConfiguration => InternalOASConfiguration, RAMLConfiguration => InternalRAMLConfiguration, - WebAPIConfiguration => InternalWebAPIConfiguration + WebAPIConfiguration => InternalWebAPIConfiguration, + AvroConfiguration => InternalAvroConfiguration } import amf.apicontract.internal.convert.ApiClientConverters._ import amf.core.client.platform.config.{AMFEventListener, ParsingOptions, RenderOptions} @@ -21,8 +21,7 @@ import amf.core.internal.convert.TransformationPipelineConverter._ import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel} import amf.apicontract.client.scala -import amf.core.client.platform.AMFGraphConfiguration -import amf.core.client.platform.adoption.{IdAdopter, IdAdopterProvider} +import amf.core.client.platform.adoption.IdAdopterProvider import amf.core.client.platform.execution.BaseExecutionEnvironment import amf.core.client.platform.validation.payload.AMFShapePayloadValidationPlugin import amf.core.internal.convert.PayloadValidationPluginConverter.PayloadValidationPluginMatcher @@ -220,3 +219,10 @@ object APIConfiguration { def API(): AMFConfiguration = InternalAPIConfiguration.API() def fromSpec(spec: Spec): AMFConfiguration = InternalAPIConfiguration.fromSpec(spec) } + +// AVRO is in alpha support mode +@JSExportAll +@JSExportTopLevel("AvroConfiguration") +object AvroConfiguration { + def Avro(): AMFConfiguration = InternalAvroConfiguration.Avro() +} diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/AMFConfiguration.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/AMFConfiguration.scala index 78d398ab20..c57440fab4 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/AMFConfiguration.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/AMFConfiguration.scala @@ -157,6 +157,7 @@ object RAMLConfiguration extends APIConfigurationBuilder { } } +// AVRO is in alpha support mode object AvroConfiguration extends APIConfigurationBuilder { def Avro(): AMFConfiguration = common().withPlugins(List(AvroParsePlugin)) // TODO: add validation profiles and serialization From 0cb702097cac31ba3f05593628971bd5987fb1c5 Mon Sep 17 00:00:00 2001 From: Loose Date: Wed, 3 Jul 2024 16:22:33 -0300 Subject: [PATCH 2/3] W-16124325 - Adding AnyShape Avro interfaces --- .../platform/model/domain/AnyShape.scala | 26 ++++++++++++++++++- .../client/scala/model/domain/AnyShape.scala | 3 ++- .../scala/model/domain/AvroShapeFields.scala | 17 ++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AvroShapeFields.scala diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/model/domain/AnyShape.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/model/domain/AnyShape.scala index c5db2797ba..b98dbeca56 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/model/domain/AnyShape.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/platform/model/domain/AnyShape.scala @@ -1,7 +1,7 @@ package amf.shapes.client.platform.model.domain import amf.core.client.platform.model.domain.Shape -import amf.core.client.platform.model.StrField +import amf.core.client.platform.model.{IntField, StrField} import amf.core.internal.unsafe.PlatformSecrets import scala.scalajs.js.annotation.{JSExport, JSExportTopLevel} @@ -21,6 +21,12 @@ class AnyShape(override private[amf] val _internal: InternalAnyShape) extends Sh def examples: ClientList[Example] = _internal.examples.asClient @JSExport def comment: StrField = _internal.comment + @JSExport + def namespace: StrField = _internal.namespace + @JSExport + def aliases: ClientList[StrField] = _internal.aliases.asClient + @JSExport + def size: IntField = _internal.size @JSExport def withDocumentation(documentation: CreativeWork): this.type = { @@ -70,4 +76,22 @@ class AnyShape(override private[amf] val _internal: InternalAnyShape) extends Sh // Aux method to know if the shape has the annotation of [[InlineDefinition]] @JSExport def inlined(): Boolean = _internal.inlined + + @JSExport + def withNamespace(namespace: String): this.type = { + _internal.withNamespace(namespace) + this + } + + @JSExport + def withAliases(aliases: Seq[String]): this.type = { + _internal.withAliases(aliases) + this + } + + @JSExport + def withSize(size: Int): this.type = { + _internal.withSize(size) + this + } } diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AnyShape.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AnyShape.scala index 5ff3917441..cd9210bd51 100644 --- a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AnyShape.scala +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AnyShape.scala @@ -15,7 +15,8 @@ class AnyShape private[amf] (val fields: Fields, val annotations: Annotations = with ExternalSourceElement with InheritanceChain with DocumentedElement - with ExemplifiedDomainElement { + with ExemplifiedDomainElement + with AvroShapeFields { // This is used in ShapeNormalization to know if a Shape should go through the AnyShapeAdjuster private[amf] val isConcreteShape: Boolean = false diff --git a/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AvroShapeFields.scala b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AvroShapeFields.scala new file mode 100644 index 0000000000..f5babaca75 --- /dev/null +++ b/amf-shapes/shared/src/main/scala/amf/shapes/client/scala/model/domain/AvroShapeFields.scala @@ -0,0 +1,17 @@ +package amf.shapes.client.scala.model.domain + +import amf.core.client.scala.model.domain.Shape +import amf.core.client.scala.model.{IntField, StrField} +import amf.shapes.internal.domain.metamodel.AnyShapeModel._ + +protected[amf] trait AvroShapeFields { self: Shape => + + def namespace: StrField = fields.field(AvroNamespace) + def aliases: Seq[StrField] = fields.field(Aliases) + def size: IntField = fields.field(Size) + + def withNamespace(namespace: String): this.type = set(AvroNamespace, namespace) + def withAliases(aliases: Seq[String]): this.type = set(Aliases, aliases) + def withSize(size: Int): this.type = set(Size, size) + +} From f6b8d9f2c19c4f57c977cd3624f5409a9293437b Mon Sep 17 00:00:00 2001 From: Loose Date: Wed, 3 Jul 2024 16:30:05 -0300 Subject: [PATCH 3/3] W-16124325 - Adding Avro typings --- amf-cli/js/typings/amf-client-js.d.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/amf-cli/js/typings/amf-client-js.d.ts b/amf-cli/js/typings/amf-client-js.d.ts index e519d2c0a0..3d4c130fb8 100644 --- a/amf-cli/js/typings/amf-client-js.d.ts +++ b/amf-cli/js/typings/amf-client-js.d.ts @@ -1443,6 +1443,9 @@ declare module "amf-client-js" { writeOnly: BoolField; xmlSerialization: XMLSerializer; xone: Array; + namespace: StrField; + aliases: Array; + size: IntField; constructor(); @@ -1531,6 +1534,12 @@ declare module "amf-client-js" { withXMLSerialization(xmlSerialization: XMLSerializer): this; withXone(subShapes: Array): this; + + withNamespace(namespace: string): this; + + withAliases(aliases: Array): this; + + withSize(size: number): this; } export class Api implements DomainElement { accepts: Array; @@ -1716,6 +1725,9 @@ declare module "amf-client-js" { withVersion(version: string): this; } + export class AvroConfiguration { + static Avro(): AMFConfiguration; + } export class BaseAMLBaseUnitClient extends AMFGraphBaseUnitClient { parseDialect(url: string): Promise;