diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,20 @@
+Copyright (c) 2016 David Reaver
+Copyright (c) 2022 Markus Schirp
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/gen/Stratosphere/CodeArtifact/Domain.hs b/gen/Stratosphere/CodeArtifact/Domain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/Domain.hs
@@ -0,0 +1,67 @@
+module Stratosphere.CodeArtifact.Domain (
+        Domain(..), mkDomain
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Domain
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html>
+    Domain {haddock_workaround_ :: (),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html#cfn-codeartifact-domain-domainname>
+            domainName :: (Value Prelude.Text),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html#cfn-codeartifact-domain-encryptionkey>
+            encryptionKey :: (Prelude.Maybe (Value Prelude.Text)),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html#cfn-codeartifact-domain-permissionspolicydocument>
+            permissionsPolicyDocument :: (Prelude.Maybe JSON.Object),
+            -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-domain.html#cfn-codeartifact-domain-tags>
+            tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkDomain :: Value Prelude.Text -> Domain
+mkDomain domainName
+  = Domain
+      {haddock_workaround_ = (), domainName = domainName,
+       encryptionKey = Prelude.Nothing,
+       permissionsPolicyDocument = Prelude.Nothing,
+       tags = Prelude.Nothing}
+instance ToResourceProperties Domain where
+  toResourceProperties Domain {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::Domain",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainName" JSON..= domainName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "EncryptionKey" Prelude.<$> encryptionKey,
+                               (JSON..=) "PermissionsPolicyDocument"
+                                 Prelude.<$> permissionsPolicyDocument,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON Domain where
+  toJSON Domain {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainName" JSON..= domainName]
+              (Prelude.catMaybes
+                 [(JSON..=) "EncryptionKey" Prelude.<$> encryptionKey,
+                  (JSON..=) "PermissionsPolicyDocument"
+                    Prelude.<$> permissionsPolicyDocument,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "DomainName" Domain where
+  type PropertyType "DomainName" Domain = Value Prelude.Text
+  set newValue Domain {..} = Domain {domainName = newValue, ..}
+instance Property "EncryptionKey" Domain where
+  type PropertyType "EncryptionKey" Domain = Value Prelude.Text
+  set newValue Domain {..}
+    = Domain {encryptionKey = Prelude.pure newValue, ..}
+instance Property "PermissionsPolicyDocument" Domain where
+  type PropertyType "PermissionsPolicyDocument" Domain = JSON.Object
+  set newValue Domain {..}
+    = Domain {permissionsPolicyDocument = Prelude.pure newValue, ..}
+instance Property "Tags" Domain where
+  type PropertyType "Tags" Domain = [Tag]
+  set newValue Domain {..}
+    = Domain {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup.hs b/gen/Stratosphere/CodeArtifact/PackageGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup.hs
@@ -0,0 +1,90 @@
+module Stratosphere.CodeArtifact.PackageGroup (
+        module Exports, PackageGroup(..), mkPackageGroup
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CodeArtifact.PackageGroup.OriginConfigurationProperty as Exports
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data PackageGroup
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html>
+    PackageGroup {haddock_workaround_ :: (),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-contactinfo>
+                  contactInfo :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-description>
+                  description :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-domainname>
+                  domainName :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-domainowner>
+                  domainOwner :: (Prelude.Maybe (Value Prelude.Text)),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-originconfiguration>
+                  originConfiguration :: (Prelude.Maybe OriginConfigurationProperty),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-pattern>
+                  pattern :: (Value Prelude.Text),
+                  -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-packagegroup.html#cfn-codeartifact-packagegroup-tags>
+                  tags :: (Prelude.Maybe [Tag])}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkPackageGroup ::
+  Value Prelude.Text -> Value Prelude.Text -> PackageGroup
+mkPackageGroup domainName pattern
+  = PackageGroup
+      {haddock_workaround_ = (), domainName = domainName,
+       pattern = pattern, contactInfo = Prelude.Nothing,
+       description = Prelude.Nothing, domainOwner = Prelude.Nothing,
+       originConfiguration = Prelude.Nothing, tags = Prelude.Nothing}
+instance ToResourceProperties PackageGroup where
+  toResourceProperties PackageGroup {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::PackageGroup",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainName" JSON..= domainName, "Pattern" JSON..= pattern]
+                           (Prelude.catMaybes
+                              [(JSON..=) "ContactInfo" Prelude.<$> contactInfo,
+                               (JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DomainOwner" Prelude.<$> domainOwner,
+                               (JSON..=) "OriginConfiguration" Prelude.<$> originConfiguration,
+                               (JSON..=) "Tags" Prelude.<$> tags]))}
+instance JSON.ToJSON PackageGroup where
+  toJSON PackageGroup {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainName" JSON..= domainName, "Pattern" JSON..= pattern]
+              (Prelude.catMaybes
+                 [(JSON..=) "ContactInfo" Prelude.<$> contactInfo,
+                  (JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DomainOwner" Prelude.<$> domainOwner,
+                  (JSON..=) "OriginConfiguration" Prelude.<$> originConfiguration,
+                  (JSON..=) "Tags" Prelude.<$> tags])))
+instance Property "ContactInfo" PackageGroup where
+  type PropertyType "ContactInfo" PackageGroup = Value Prelude.Text
+  set newValue PackageGroup {..}
+    = PackageGroup {contactInfo = Prelude.pure newValue, ..}
+instance Property "Description" PackageGroup where
+  type PropertyType "Description" PackageGroup = Value Prelude.Text
+  set newValue PackageGroup {..}
+    = PackageGroup {description = Prelude.pure newValue, ..}
+instance Property "DomainName" PackageGroup where
+  type PropertyType "DomainName" PackageGroup = Value Prelude.Text
+  set newValue PackageGroup {..}
+    = PackageGroup {domainName = newValue, ..}
+instance Property "DomainOwner" PackageGroup where
+  type PropertyType "DomainOwner" PackageGroup = Value Prelude.Text
+  set newValue PackageGroup {..}
+    = PackageGroup {domainOwner = Prelude.pure newValue, ..}
+instance Property "OriginConfiguration" PackageGroup where
+  type PropertyType "OriginConfiguration" PackageGroup = OriginConfigurationProperty
+  set newValue PackageGroup {..}
+    = PackageGroup {originConfiguration = Prelude.pure newValue, ..}
+instance Property "Pattern" PackageGroup where
+  type PropertyType "Pattern" PackageGroup = Value Prelude.Text
+  set newValue PackageGroup {..}
+    = PackageGroup {pattern = newValue, ..}
+instance Property "Tags" PackageGroup where
+  type PropertyType "Tags" PackageGroup = [Tag]
+  set newValue PackageGroup {..}
+    = PackageGroup {tags = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs b/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs
@@ -0,0 +1,33 @@
+module Stratosphere.CodeArtifact.PackageGroup.OriginConfigurationProperty (
+        module Exports, OriginConfigurationProperty(..),
+        mkOriginConfigurationProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CodeArtifact.PackageGroup.RestrictionsProperty as Exports
+import Stratosphere.ResourceProperties
+data OriginConfigurationProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-originconfiguration.html>
+    OriginConfigurationProperty {haddock_workaround_ :: (),
+                                 -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-originconfiguration.html#cfn-codeartifact-packagegroup-originconfiguration-restrictions>
+                                 restrictions :: RestrictionsProperty}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkOriginConfigurationProperty ::
+  RestrictionsProperty -> OriginConfigurationProperty
+mkOriginConfigurationProperty restrictions
+  = OriginConfigurationProperty
+      {haddock_workaround_ = (), restrictions = restrictions}
+instance ToResourceProperties OriginConfigurationProperty where
+  toResourceProperties OriginConfigurationProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::PackageGroup.OriginConfiguration",
+         supportsTags = Prelude.False,
+         properties = ["Restrictions" JSON..= restrictions]}
+instance JSON.ToJSON OriginConfigurationProperty where
+  toJSON OriginConfigurationProperty {..}
+    = JSON.object ["Restrictions" JSON..= restrictions]
+instance Property "Restrictions" OriginConfigurationProperty where
+  type PropertyType "Restrictions" OriginConfigurationProperty = RestrictionsProperty
+  set newValue OriginConfigurationProperty {..}
+    = OriginConfigurationProperty {restrictions = newValue, ..}
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs-boot b/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/OriginConfigurationProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CodeArtifact.PackageGroup.OriginConfigurationProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data OriginConfigurationProperty :: Prelude.Type
+instance ToResourceProperties OriginConfigurationProperty
+instance Prelude.Eq OriginConfigurationProperty
+instance Prelude.Show OriginConfigurationProperty
+instance JSON.ToJSON OriginConfigurationProperty
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs
@@ -0,0 +1,49 @@
+module Stratosphere.CodeArtifact.PackageGroup.RestrictionTypeProperty (
+        RestrictionTypeProperty(..), mkRestrictionTypeProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Value
+data RestrictionTypeProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictiontype.html>
+    RestrictionTypeProperty {haddock_workaround_ :: (),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictiontype.html#cfn-codeartifact-packagegroup-restrictiontype-repositories>
+                             repositories :: (Prelude.Maybe (ValueList Prelude.Text)),
+                             -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictiontype.html#cfn-codeartifact-packagegroup-restrictiontype-restrictionmode>
+                             restrictionMode :: (Value Prelude.Text)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestrictionTypeProperty ::
+  Value Prelude.Text -> RestrictionTypeProperty
+mkRestrictionTypeProperty restrictionMode
+  = RestrictionTypeProperty
+      {haddock_workaround_ = (), restrictionMode = restrictionMode,
+       repositories = Prelude.Nothing}
+instance ToResourceProperties RestrictionTypeProperty where
+  toResourceProperties RestrictionTypeProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::PackageGroup.RestrictionType",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["RestrictionMode" JSON..= restrictionMode]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Repositories" Prelude.<$> repositories]))}
+instance JSON.ToJSON RestrictionTypeProperty where
+  toJSON RestrictionTypeProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["RestrictionMode" JSON..= restrictionMode]
+              (Prelude.catMaybes
+                 [(JSON..=) "Repositories" Prelude.<$> repositories])))
+instance Property "Repositories" RestrictionTypeProperty where
+  type PropertyType "Repositories" RestrictionTypeProperty = ValueList Prelude.Text
+  set newValue RestrictionTypeProperty {..}
+    = RestrictionTypeProperty
+        {repositories = Prelude.pure newValue, ..}
+instance Property "RestrictionMode" RestrictionTypeProperty where
+  type PropertyType "RestrictionMode" RestrictionTypeProperty = Value Prelude.Text
+  set newValue RestrictionTypeProperty {..}
+    = RestrictionTypeProperty {restrictionMode = newValue, ..}
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs-boot b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionTypeProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CodeArtifact.PackageGroup.RestrictionTypeProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestrictionTypeProperty :: Prelude.Type
+instance ToResourceProperties RestrictionTypeProperty
+instance Prelude.Eq RestrictionTypeProperty
+instance Prelude.Show RestrictionTypeProperty
+instance JSON.ToJSON RestrictionTypeProperty
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs
@@ -0,0 +1,55 @@
+module Stratosphere.CodeArtifact.PackageGroup.RestrictionsProperty (
+        module Exports, RestrictionsProperty(..), mkRestrictionsProperty
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import {-# SOURCE #-} Stratosphere.CodeArtifact.PackageGroup.RestrictionTypeProperty as Exports
+import Stratosphere.ResourceProperties
+data RestrictionsProperty
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictions.html>
+    RestrictionsProperty {haddock_workaround_ :: (),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictions.html#cfn-codeartifact-packagegroup-restrictions-externalupstream>
+                          externalUpstream :: (Prelude.Maybe RestrictionTypeProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictions.html#cfn-codeartifact-packagegroup-restrictions-internalupstream>
+                          internalUpstream :: (Prelude.Maybe RestrictionTypeProperty),
+                          -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codeartifact-packagegroup-restrictions.html#cfn-codeartifact-packagegroup-restrictions-publish>
+                          publish :: (Prelude.Maybe RestrictionTypeProperty)}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRestrictionsProperty :: RestrictionsProperty
+mkRestrictionsProperty
+  = RestrictionsProperty
+      {haddock_workaround_ = (), externalUpstream = Prelude.Nothing,
+       internalUpstream = Prelude.Nothing, publish = Prelude.Nothing}
+instance ToResourceProperties RestrictionsProperty where
+  toResourceProperties RestrictionsProperty {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::PackageGroup.Restrictions",
+         supportsTags = Prelude.False,
+         properties = Prelude.fromList
+                        (Prelude.catMaybes
+                           [(JSON..=) "ExternalUpstream" Prelude.<$> externalUpstream,
+                            (JSON..=) "InternalUpstream" Prelude.<$> internalUpstream,
+                            (JSON..=) "Publish" Prelude.<$> publish])}
+instance JSON.ToJSON RestrictionsProperty where
+  toJSON RestrictionsProperty {..}
+    = JSON.object
+        (Prelude.fromList
+           (Prelude.catMaybes
+              [(JSON..=) "ExternalUpstream" Prelude.<$> externalUpstream,
+               (JSON..=) "InternalUpstream" Prelude.<$> internalUpstream,
+               (JSON..=) "Publish" Prelude.<$> publish]))
+instance Property "ExternalUpstream" RestrictionsProperty where
+  type PropertyType "ExternalUpstream" RestrictionsProperty = RestrictionTypeProperty
+  set newValue RestrictionsProperty {..}
+    = RestrictionsProperty
+        {externalUpstream = Prelude.pure newValue, ..}
+instance Property "InternalUpstream" RestrictionsProperty where
+  type PropertyType "InternalUpstream" RestrictionsProperty = RestrictionTypeProperty
+  set newValue RestrictionsProperty {..}
+    = RestrictionsProperty
+        {internalUpstream = Prelude.pure newValue, ..}
+instance Property "Publish" RestrictionsProperty where
+  type PropertyType "Publish" RestrictionsProperty = RestrictionTypeProperty
+  set newValue RestrictionsProperty {..}
+    = RestrictionsProperty {publish = Prelude.pure newValue, ..}
diff --git a/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs-boot b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/PackageGroup/RestrictionsProperty.hs-boot
@@ -0,0 +1,9 @@
+module Stratosphere.CodeArtifact.PackageGroup.RestrictionsProperty where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.ResourceProperties
+data RestrictionsProperty :: Prelude.Type
+instance ToResourceProperties RestrictionsProperty
+instance Prelude.Eq RestrictionsProperty
+instance Prelude.Show RestrictionsProperty
+instance JSON.ToJSON RestrictionsProperty
diff --git a/gen/Stratosphere/CodeArtifact/Repository.hs b/gen/Stratosphere/CodeArtifact/Repository.hs
new file mode 100644
--- /dev/null
+++ b/gen/Stratosphere/CodeArtifact/Repository.hs
@@ -0,0 +1,104 @@
+module Stratosphere.CodeArtifact.Repository (
+        Repository(..), mkRepository
+    ) where
+import qualified Data.Aeson as JSON
+import qualified Stratosphere.Prelude as Prelude
+import Stratosphere.Property
+import Stratosphere.ResourceProperties
+import Stratosphere.Tag
+import Stratosphere.Value
+data Repository
+  = -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html>
+    Repository {haddock_workaround_ :: (),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-description>
+                description :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-domainname>
+                domainName :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-domainowner>
+                domainOwner :: (Prelude.Maybe (Value Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-externalconnections>
+                externalConnections :: (Prelude.Maybe (ValueList Prelude.Text)),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-permissionspolicydocument>
+                permissionsPolicyDocument :: (Prelude.Maybe JSON.Object),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-repositoryname>
+                repositoryName :: (Value Prelude.Text),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-tags>
+                tags :: (Prelude.Maybe [Tag]),
+                -- | See: <http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codeartifact-repository.html#cfn-codeartifact-repository-upstreams>
+                upstreams :: (Prelude.Maybe (ValueList Prelude.Text))}
+  deriving stock (Prelude.Eq, Prelude.Show)
+mkRepository ::
+  Value Prelude.Text -> Value Prelude.Text -> Repository
+mkRepository domainName repositoryName
+  = Repository
+      {haddock_workaround_ = (), domainName = domainName,
+       repositoryName = repositoryName, description = Prelude.Nothing,
+       domainOwner = Prelude.Nothing,
+       externalConnections = Prelude.Nothing,
+       permissionsPolicyDocument = Prelude.Nothing,
+       tags = Prelude.Nothing, upstreams = Prelude.Nothing}
+instance ToResourceProperties Repository where
+  toResourceProperties Repository {..}
+    = ResourceProperties
+        {awsType = "AWS::CodeArtifact::Repository",
+         supportsTags = Prelude.True,
+         properties = Prelude.fromList
+                        ((Prelude.<>)
+                           ["DomainName" JSON..= domainName,
+                            "RepositoryName" JSON..= repositoryName]
+                           (Prelude.catMaybes
+                              [(JSON..=) "Description" Prelude.<$> description,
+                               (JSON..=) "DomainOwner" Prelude.<$> domainOwner,
+                               (JSON..=) "ExternalConnections" Prelude.<$> externalConnections,
+                               (JSON..=) "PermissionsPolicyDocument"
+                                 Prelude.<$> permissionsPolicyDocument,
+                               (JSON..=) "Tags" Prelude.<$> tags,
+                               (JSON..=) "Upstreams" Prelude.<$> upstreams]))}
+instance JSON.ToJSON Repository where
+  toJSON Repository {..}
+    = JSON.object
+        (Prelude.fromList
+           ((Prelude.<>)
+              ["DomainName" JSON..= domainName,
+               "RepositoryName" JSON..= repositoryName]
+              (Prelude.catMaybes
+                 [(JSON..=) "Description" Prelude.<$> description,
+                  (JSON..=) "DomainOwner" Prelude.<$> domainOwner,
+                  (JSON..=) "ExternalConnections" Prelude.<$> externalConnections,
+                  (JSON..=) "PermissionsPolicyDocument"
+                    Prelude.<$> permissionsPolicyDocument,
+                  (JSON..=) "Tags" Prelude.<$> tags,
+                  (JSON..=) "Upstreams" Prelude.<$> upstreams])))
+instance Property "Description" Repository where
+  type PropertyType "Description" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {description = Prelude.pure newValue, ..}
+instance Property "DomainName" Repository where
+  type PropertyType "DomainName" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {domainName = newValue, ..}
+instance Property "DomainOwner" Repository where
+  type PropertyType "DomainOwner" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {domainOwner = Prelude.pure newValue, ..}
+instance Property "ExternalConnections" Repository where
+  type PropertyType "ExternalConnections" Repository = ValueList Prelude.Text
+  set newValue Repository {..}
+    = Repository {externalConnections = Prelude.pure newValue, ..}
+instance Property "PermissionsPolicyDocument" Repository where
+  type PropertyType "PermissionsPolicyDocument" Repository = JSON.Object
+  set newValue Repository {..}
+    = Repository
+        {permissionsPolicyDocument = Prelude.pure newValue, ..}
+instance Property "RepositoryName" Repository where
+  type PropertyType "RepositoryName" Repository = Value Prelude.Text
+  set newValue Repository {..}
+    = Repository {repositoryName = newValue, ..}
+instance Property "Tags" Repository where
+  type PropertyType "Tags" Repository = [Tag]
+  set newValue Repository {..}
+    = Repository {tags = Prelude.pure newValue, ..}
+instance Property "Upstreams" Repository where
+  type PropertyType "Upstreams" Repository = ValueList Prelude.Text
+  set newValue Repository {..}
+    = Repository {upstreams = Prelude.pure newValue, ..}
diff --git a/stratosphere-codeartifact.cabal b/stratosphere-codeartifact.cabal
new file mode 100644
--- /dev/null
+++ b/stratosphere-codeartifact.cabal
@@ -0,0 +1,78 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.38.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           stratosphere-codeartifact
+version:        1.0.0
+synopsis:       Stratosphere integration for AWS CodeArtifact.
+description:    Integration into stratosphere to generate resources and properties for AWS CodeArtifact
+category:       AWS, Cloud, CodeArtifact
+stability:      experimental
+homepage:       https://github.com/mbj/stratosphere#readme
+bug-reports:    https://github.com/mbj/stratosphere/issues
+maintainer:     Markus Schirp
+license:        MIT
+license-file:   LICENSE.md
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/mbj/stratosphere
+
+flag development
+  description: Run GHC with development flags
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      Stratosphere.CodeArtifact.Domain
+      Stratosphere.CodeArtifact.PackageGroup
+      Stratosphere.CodeArtifact.PackageGroup.OriginConfigurationProperty
+      Stratosphere.CodeArtifact.PackageGroup.RestrictionsProperty
+      Stratosphere.CodeArtifact.PackageGroup.RestrictionTypeProperty
+      Stratosphere.CodeArtifact.Repository
+  other-modules:
+      Paths_stratosphere_codeartifact
+  hs-source-dirs:
+      gen
+  default-extensions:
+      DataKinds
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      FlexibleInstances
+      GADTs
+      GeneralizedNewtypeDeriving
+      InstanceSigs
+      LambdaCase
+      MultiParamTypeClasses
+      NoFieldSelectors
+      NoImplicitPrelude
+      NumericUnderscores
+      OverloadedLists
+      OverloadedRecordDot
+      OverloadedStrings
+      PolyKinds
+      RecordWildCards
+      ScopedTypeVariables
+      StandaloneDeriving
+      Strict
+      TemplateHaskell
+      TupleSections
+      TypeApplications
+      TypeFamilies
+  ghc-options: -Wall -Wcompat -Widentities -Wimplicit-prelude -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-local-signatures -Wmissing-signatures -Wmonomorphism-restriction -Wredundant-constraints -fhide-source-paths -funbox-strict-fields -optP-Wno-nonportable-include-path -Wno-unused-imports
+  build-depends:
+      aeson ==2.*
+    , base >=4.8 && <4.22
+    , stratosphere ==1.0.0
+  default-language: Haskell2010
+  if flag(development)
+    ghc-options: -Werror
+  else
+    ghc-options: -Wwarn
