Smithy build projections and plugins
{
"version": "2.0",
"sources": [{
"path": "module.zip",
"root": "models",
"paths": [{"path": "service.smithy", "name": "public/service.smithy"}],
"globs": ["shared/**/*.json"]
}]
}{"url":"https://example.org/models.zip","format":"zip","root":"models","paths":["service.smithy"]}{
"github": {
"repository": "owner/models",
"tag": "v1.2.3",
"asset": "models.tar.gz"
},
"format": "tgz",
"root": "package/models",
"globs": ["**/*.smithy"]
}{
"npm": { "package": "@scope/models", "version": "1.2.3" },
"root": "package/models",
"globs": ["**/*.smithy"]
}{
"maven": {
"repository": "https://repo.maven.apache.org/maven2",
"group": "software.amazon.smithy",
"artifact": "smithy-aws-traits",
"version": "1.72.0",
"checksum": "sha1"
}
}pub(all) struct BuildConfig {
version : String
sources : Array[BuildInput]
imports : Array[BuildInput]
cache_directory : CacheDirectory
credentials : Array[CredentialBinding]
offline : Bool
output_directory : String
projections : Array[ProjectionConfig]
plugins : Map[String, Json]
ignore_missing_plugins : Bool
} derive(Eq, Debug)fn BuildConfig::parse(source : String, environment? : Map[String, String]) -> BuildConfig raise BuildErrorfn BuildConfig::resolve_credentials(self : BuildConfig, environment : Map[String, String]) -> Credentials raise BuildErrorpub(all) enum BuildInput {
Npm(NpmArchive, Selection)
Maven(MavenArchive, Selection?)
GitHub(GitHubArchive, Selection, HttpUrl)
Remote(PublicArchive, Selection)
Local(RepositoryLocation)
Selected(RepositoryLocation, Selection)
} derive(Eq, Debug)fn BuildInput::with_location(self : BuildInput, location : RepositoryLocation) -> BuildInput raise BuildErrorpub struct BuildRunner {
config : BuildConfig
plugins : Map[String, (Model, Json) -> Map[String, String] raise BuildError]
sources : Map[String, String]
source_conflicts : Array[String]
source_origins : Set[String]
source_metadata : Set[String]
projection_imports : Map[String, Array[ModelInput]]
}fn BuildRunner::add_projection_import(self : BuildRunner, projection : String, input : ModelInput) -> BuildRunnerfn BuildRunner::add_source(self : BuildRunner, name : String, content : String, source_file? : String?) -> BuildRunnerfn BuildRunner::register_plugin(self : BuildRunner, name : String, execute : (Model, Json) -> Map[String, String] raise BuildError) -> BuildRunnerpub(all) struct CredentialBinding {
origin : HttpOrigin
source : CredentialSource
} derive(Eq, Debug)pub(all) enum CredentialSource {
BearerEnvironment(CredentialVariable)
BasicEnvironment(CredentialVariable, CredentialVariable)
} derive(Eq, Debug)pub(all) struct ProjectionConfig {
name : String
is_abstract : Bool
imports : Array[BuildInput]
transforms : Array[TransformConfig]
plugins : Map[String, Json]
} derive(Eq, Debug)