Skip to content

Commit

Permalink
Merge pull request #1903 from aml-org/publish-5.4.5
Browse files Browse the repository at this point in the history
W-13925191 Publish 5.4.5
  • Loading branch information
damianpedra authored Nov 15, 2023
2 parents 130f497 + d4a9696 commit 099c0f7
Show file tree
Hide file tree
Showing 52 changed files with 2,716 additions and 238 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -286,12 +286,8 @@ case class OasParametersEmitter(
}

def emitters(): Seq[EntryEmitter] = {
val results = ListBuffer[EntryEmitter]()
val (oasParameters, ramlParameters) =
parameters.partition(p =>
Option(p.schema).isEmpty || p.schema.isInstanceOf[ScalarShape] || p.schema
.isInstanceOf[ArrayShape] || p.schema.isInstanceOf[FileShape]
)
val results = ListBuffer[EntryEmitter]()
val (oasParameters, ramlParameters) = parameters.partition(isValidOasParam)

if (oasParameters.nonEmpty || payloads.nonEmpty)
results += OasParameterEmitter(oasParameters, references)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import amf.apicontract.internal.spec.common.parser.{WebApiContext, WebApiRegiste
import amf.core.client.scala.model.document.BaseUnit
import amf.core.client.scala.model.document.Module
import amf.core.client.scala.model.domain.{DomainElement, NamedDomainElement, Shape}
import amf.core.internal.annotations.DeclaredHeader
import amf.core.internal.remote.Spec
import amf.shapes.client.scala.model.domain.Example

Expand All @@ -26,16 +27,18 @@ class Oas3ApiRegister()(implicit ctx: WebApiContext) extends WebApiRegister {
private def isOas3Component(module: Module) = module.processingData.sourceSpec.option().contains(Spec.OAS30.id)

private def componentMapping(element: DomainElement) = element match {
case shape: Shape => Some(withComponentPrefix("schemas", shape))
case scheme: SecurityScheme => Some(withComponentPrefix("securitySchemes", scheme))
case request: Request => Some(withComponentPrefix("requestBodies", request))
case parameter: Parameter if !isHeader(parameter) => Some(withComponentPrefix("parameters", parameter))
case link: TemplatedLink => Some(withComponentPrefix("links", link))
case header: Parameter => Some(withComponentPrefix("headers", header))
case example: Example => Some(withComponentPrefix("examples", example))
case callback: Callback => Some(withComponentPrefix("callbacks", callback))
case response: Response => Some(withComponentPrefix("responses", response))
case _ => None
case shape: Shape => Some(withComponentPrefix("schemas", shape))
case scheme: SecurityScheme => Some(withComponentPrefix("securitySchemes", scheme))
case request: Request => Some(withComponentPrefix("requestBodies", request))
case header: Parameter if header.annotations.contains(classOf[DeclaredHeader]) =>
Some(withComponentPrefix("headers", header))
case parameter: Parameter =>
Some(withComponentPrefix("parameters", parameter))
case link: TemplatedLink => Some(withComponentPrefix("links", link))
case example: Example => Some(withComponentPrefix("examples", example))
case callback: Callback => Some(withComponentPrefix("callbacks", callback))
case response: Response => Some(withComponentPrefix("responses", response))
case _ => None
}

private def withComponentPrefix(component: String, element: NamedDomainElement) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,12 @@ package amf.apicontract.internal.spec.oas.parser.document

import amf.apicontract.client.scala.model.document.{APIContractProcessingData, ComponentModule}
import amf.apicontract.internal.metamodel.document.ComponentModuleModel
import amf.apicontract.internal.metamodel.domain.api.WebApiModel
import amf.apicontract.internal.spec.common.parser.{WebApiContext, WebApiLikeReferencesParser}
import amf.apicontract.internal.spec.common.parser.WebApiContext
import amf.apicontract.internal.spec.oas.parser.Oas3ReferencesParser
import amf.apicontract.internal.spec.oas.parser.context.OasWebApiContext
import amf.apicontract.internal.validation.definitions.ParserSideValidations.{
MandatoryEmptyPaths,
MandatoryPathsProperty,
MandatoryProperty
}
import amf.core.client.scala.model.domain.{AmfObject, AmfScalar}
import amf.apicontract.internal.validation.definitions.ParserSideValidations.{MandatoryEmptyPaths, MandatoryProperty}
import amf.core.client.scala.model.domain.AmfObject
import amf.core.client.scala.parse.document.SyamlParsedDocument
import amf.core.internal.metamodel.Field
import amf.core.internal.metamodel.document.BaseUnitModel
import amf.core.internal.parser.domain.Annotations
import amf.core.internal.parser.{Root, YMapOps, YNodeLikeOps}
Expand All @@ -31,7 +26,7 @@ case class Oas3ComponentParser(root: Root)(implicit val ctx: OasWebApiContext) e

root.parsed.asInstanceOf[SyamlParsedDocument].document.toOption[YMap].foreach { rootMap =>
val references =
WebApiLikeReferencesParser(module, root.location, "uses".asOasExtension, rootMap, root.references).parse()
Oas3ReferencesParser(module, root.location, "uses".asOasExtension, rootMap, root.references).parse()

Oas3DocumentParser(root).parseDeclarations(root, rootMap, module)
addDeclarationsToModel(module)
Expand All @@ -42,7 +37,6 @@ case class Oas3ComponentParser(root: Root)(implicit val ctx: OasWebApiContext) e
ctx.closedShape(module, rootMap, "root")
}
module

}

private def parseRootFields(map: YMap, module: ComponentModule): Unit = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,6 @@ abstract class OasDocumentParser(root: Root, val spec: Spec)(implicit val ctx: O
parameter
}
ctx.declarations.registerOasParameter(oasParameter)

})
}
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package amf.apicontract.internal.transformation

import amf.apicontract.internal.transformation.BaseUnitSourceLocationIndex.resolveUri
import amf.core.client.scala.model.document.BaseUnit
import amf.core.internal.annotations.SourceLocation

import scala.collection.mutable.ArrayBuffer

/** Indexes Base Units by their SourceLocation
*/
sealed case class BaseUnitSourceLocationIndex(index: Map[String, BaseUnit]) {
def get(sourceLocation: String): Option[BaseUnit] = index.get(sourceLocation)
def get(sourceLocation: String): Option[BaseUnit] = index.get(resolveUri(sourceLocation))
}

object BaseUnitSourceLocationIndex {
Expand All @@ -15,7 +18,7 @@ object BaseUnitSourceLocationIndex {
.flatMap(bu =>
bu.annotations
.find(classOf[SourceLocation])
.map(annotation => annotation.location -> bu)
.map(annotation => resolveUri(annotation.location) -> bu)
)
.toMap
BaseUnitSourceLocationIndex(index)
Expand All @@ -24,4 +27,24 @@ object BaseUnitSourceLocationIndex {
private def flattenReferencesTree(root: BaseUnit): Seq[BaseUnit] =
root +: (root.references ++ root.references.flatMap(_.references))

private def resolveUri(uri: String): String = {
val protocolRegex = "\\w+://".r
val protocol = protocolRegex.findPrefixOf(uri).getOrElse("")
val path = uri.stripPrefix(protocol)
val segments = path.split("/")

val resolvedSegments = ArrayBuffer.empty[String]

segments.foreach {
case "." => // do nothing
case ".." if resolvedSegments.nonEmpty =>
val lastIndex = resolvedSegments.length - 1
resolvedSegments.remove(lastIndex)
case segment => resolvedSegments.append(segment)
}

val r = s"$protocol${resolvedSegments.mkString("/")}"
r
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package amf.apicontract.internal.transformation.compatibility

import amf.apicontract.internal.transformation.Oas30TransformationPipeline
import amf.apicontract.internal.transformation.compatibility.common.SemanticFlattenFilter
import amf.apicontract.internal.transformation.compatibility.oas.CleanNullSecurity
import amf.apicontract.internal.transformation.compatibility.oas3._
import amf.core.client.common.transform._
import amf.core.client.scala.transform.{TransformationPipeline, TransformationStep}
Expand Down

This file was deleted.

4 changes: 2 additions & 2 deletions amf-apicontract.versions
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
amf.apicontract=5.4.4
amf.aml=6.4.4
amf.apicontract=5.4.5
amf.aml=6.4.5
amf.model=3.8.2
antlr4Version=0.7.25
amf.validation.profile.dialect=1.6.0
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"openapi": "3.0.0",
"info": {
"title": "API",
"version": "1.0.0"
},
"paths": {
"/customers": {
"get": {
"parameters": [
{
"in": "query",
"name": "enterpriseCustomerNumber",
"schema": {
"nullable": true,
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
openapi: 3.0.3
info:
title: API
version: 1.0.0

paths:
/customers:
get:
parameters:
- in: query
name: enterpriseCustomerNumber
schema:
nullable: true
type: string
responses:
'200':
description: OK
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
openapi: 3.0.0
info:
version: "1"
title: Some APi
paths:
/v1/events:
post:
responses:
default:
description: Something
requestBody:
content:
application/json:
schema:
type: object
allOf:
- $ref: "#/components/schemas/PublishPayload"

components:
schemas:
PublishPayload:
type: object
properties:
payload:
description: Payload can be a Program, a Course, a Class or a ProgramRules
type: object
properties:
components:
type: array
items:
$ref: "#/components/schemas/Comportent"
Comportent:
oneOf:
- $ref: "#/components/schemas/CSingleLineText"

CSingleLineText:
description: Supports a single line of free-form text being entered.
14 changes: 14 additions & 0 deletions amf-cli/shared/src/test/resources/components/oas3/header-api.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
openapi: '3.0.0'

info:
title: test component ref invalid
version: "1.0"

paths:
/something:
post:
parameters:
- $ref: "header-component.yaml#/components/parameters/someParam"
responses:
'200':
description: OK
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
openapi: '3.0.0'

info:
title: test component ref invalid
version: "1.0"

paths: {}

components:
parameters:
someParam:
name: header-param
in: header
required: false
schema:
type: string
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
openapi: '3.0.0'

info:
title: test component ref invalid
version: "1.0"

paths: {}

components:
responses:
400:
$ref: "response-component.yaml#/components/responses/400"
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
openapi: '3.0.0'

info:
title: test component ref invalid
version: "1.0"

paths: {}

components:
responses:
400:
description: 400 Bad Request
Loading

0 comments on commit 099c0f7

Please sign in to comment.