From d2a1db7fc7149af53d4609b23a3ad7c0d0be342e Mon Sep 17 00:00:00 2001 From: martyall Date: Tue, 26 Sep 2023 23:27:51 -0700 Subject: [PATCH] remove ill defined dependency type, support generic remappings --- example/chanterelle.json | 2 +- packages.dhall | 3 ++- src/Chanterelle/Compile.purs | 8 +++++--- src/Chanterelle/Types/Project.purs | 22 +++++----------------- 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/example/chanterelle.json b/example/chanterelle.json index 416b989..43a2e78 100644 --- a/example/chanterelle.json +++ b/example/chanterelle.json @@ -6,7 +6,7 @@ "modules": [ "Token" , "SimplePaidStorage" ], - "dependencies": [ "openzeppelin-contracts" ], + "remappings": [ "openzeppelin-contracts=node_modules/openzeppelin-contracts" ], "solc-output-selection": [], "purescript-generator": { "output-path": "src", diff --git a/packages.dhall b/packages.dhall index fc7d6ce..db9c928 100644 --- a/packages.dhall +++ b/packages.dhall @@ -1,6 +1,7 @@ let upstream = https://raw.githubusercontent.com/f-o-a-m/package-sets/921ac217454768ec3f614a9571c109b2ad542c07/purs-0.15.7-web3.dhall sha256:818d12df6f7ce455657ff559798e50ec14e098f8d6acc655f674f26c7a007e3d + with solc = ../purescript-solc/spago.dhall as Location let additions = { solc = @@ -27,7 +28,7 @@ let additions = , "tuples" ] , repo = "https://github.com/f-o-a-m/purescript-solc.git" - , version = "v4.1.0" + , version = "cb1fcd29b2e5ccd35a78bf13165e78fcdfeb349a" } , web3-generator = { dependencies = diff --git a/src/Chanterelle/Compile.purs b/src/Chanterelle/Compile.purs index 7296fce..bf2ddbc 100644 --- a/src/Chanterelle/Compile.purs +++ b/src/Chanterelle/Compile.purs @@ -9,7 +9,7 @@ import Chanterelle.Logging (LogLevel(..), log, logSolcError) import Chanterelle.Types.Artifact (Artifact(..)) import Chanterelle.Types.Bytecode (Bytecode(..), flattenLinkReferences) import Chanterelle.Types.Compile (CompileError(..)) -import Chanterelle.Types.Project (ChanterelleModule(..), ChanterelleProject(..), ChanterelleProjectSpec(..), Dependency(..), getSolc, partitionSelectionSpecs) +import Chanterelle.Types.Project (ChanterelleModule(..), ChanterelleProject(..), ChanterelleProjectSpec(..), getSolc, partitionSelectionSpecs) import Chanterelle.Utils (assertDirectory', fileIsDirty) import Chanterelle.Utils.Error (withExceptT') import Control.Error.Util (note) @@ -169,9 +169,11 @@ makeSolcInput moduleName sourcePath = do { cls: requestedContractSelections, fls: requestedFileSelections } = partitionSelectionSpecs spec.solcOutputSelection contractLevelSelections = [ ST.ABI, ST.EvmOutputSelection (Just $ ST.BytecodeSelection Nothing), ST.EvmOutputSelection (Just $ ST.DeployedBytecodeSelection Nothing) ] <> requestedContractSelections outputSelection = Just $ ST.OutputSelections (M.singleton "*" (ST.OutputSelection { file: requestedFileSelections, contract: M.singleton "*" contractLevelSelections })) - depMappings = (\(Dependency dep) -> ST.Remapping { from: dep, to: (project.root <> "/node_modules/" <> dep) }) <$> spec.dependencies sourceDirMapping = [ ST.GlobalRemapping { to: (Path.concat [ project.root, spec.sourceDir ]) } ] - remappings = sourceDirMapping <> depMappings + f remapping = case remapping of + ST.Remapping { from, to } -> ST.Remapping { from, to: Path.concat [ project.root, to ] } + g -> g + remappings = sourceDirMapping <> map f spec.remappings optimizer = spec.solcOptimizerSettings evmVersion = spec.solcEvmVersion metadata = Nothing diff --git a/src/Chanterelle/Types/Project.purs b/src/Chanterelle/Types/Project.purs index c2f26bf..47083c9 100644 --- a/src/Chanterelle/Types/Project.purs +++ b/src/Chanterelle/Types/Project.purs @@ -26,18 +26,6 @@ import Node.Path as Path -- | Chanterelle Project Types -------------------------------------------------------------------------------- -newtype Dependency = Dependency String - -derive instance eqDependency :: Eq Dependency - -instance encodeJsonDependency :: EncodeJson Dependency where - encodeJson (Dependency d) = encodeJson d - -instance decodeJsonDependency :: DecodeJson Dependency where - decodeJson d = Dependency <$> decodeJson d - ---------------------------------------------------------------------- - newtype Library = Library { name :: String, sourceRoot :: Maybe FilePath, sourceFile :: FilePath } derive instance newtypeLibrary :: Newtype Library _ @@ -274,7 +262,7 @@ newtype ChanterelleProjectSpec = , artifactsDir :: FilePath , libArtifactsDir :: FilePath , modules :: Array String - , dependencies :: Array Dependency + , remappings :: Array ST.Remapping , extraAbis :: Maybe FilePath , libraries :: Libraries , networks :: Networks @@ -298,8 +286,8 @@ instance EncodeJson ChanterelleProjectSpec where ~> "source-dir" := project.sourceDir ~> "artifacts-dir" := project.artifactsDir ~> "modules" := project.modules - ~> "dependencies" := project.dependencies - ~> "extra-abis" := project.dependencies + ~> "remappings" := project.remappings + ~> "extra-abis" := project.extraAbis ~> "libraries" := project.libraries ~> "networks" := project.networks ~> "purescript-generator" := psGenEncode @@ -328,7 +316,7 @@ instance DecodeJson ChanterelleProjectSpec where artifactsDir <- obj .:! "artifacts-dir" .!= "build" libArtifactsDir <- obj .:! "library-artifacts-dir" .!= (Path.concat [ artifactsDir, "libraries" ]) modules <- obj .: "modules" - dependencies <- obj .:! "dependencies" .!= mempty + remappings <- obj .:! "remappings" .!= mempty extraAbis <- obj .:! "extra-abis" libraries <- obj .:! "libraries" .!= mempty networks <- obj .:! "networks" .!= mempty @@ -337,7 +325,7 @@ instance DecodeJson ChanterelleProjectSpec where solcOutputSelection <- obj .:! "solc-output-selection" .!= mempty solcEvmVersion <- obj .:! "solc-evm-version" psGen <- psGenDecode =<< obj .: "purescript-generator" - pure $ ChanterelleProjectSpec { name, version, sourceDir, artifactsDir, libArtifactsDir, modules, dependencies, extraAbis, libraries, networks, psGen, solcVersion, solcEvmVersion, solcOptimizerSettings, solcOutputSelection } + pure $ ChanterelleProjectSpec { name, version, sourceDir, artifactsDir, libArtifactsDir, modules, remappings, extraAbis, libraries, networks, psGen, solcVersion, solcEvmVersion, solcOptimizerSettings, solcOutputSelection } where psGenDecode psj = do