From 3b4ee6e35fe4f770b81469224d12a3a3b0367563 Mon Sep 17 00:00:00 2001 From: Aidan Cunniffe Date: Sun, 4 Mar 2018 13:42:07 -0500 Subject: [PATCH] Release 0.1.0 -Parsers load at runtime within a few seconds of the first content query on a project -SDK / Description structure updated to match optic-markdown 0.1.0 spec -Tests updated --- .gitignore | 1 - .../arrow/changes/ChangesEvaluationSpec.scala | 4 -- .../arrow/changes/ExampleChanges.scala | 12 ++-- config.yaml | 2 +- .../com/opticdev/core/cli/Installer.scala | 67 ------------------ .../core/sourcegear/SGConstructor.scala | 12 +++- .../opticdev/core/sourcegear/SourceGear.scala | 18 ++++- .../sourcegear/project/OpticProject.scala | 15 ---- .../core/sourcegear/project/Project.scala | 5 +- .../project/config/ProjectFile.scala | 17 +++++ .../core/sourcegear/SGConfigSpec.scala | 2 +- .../core/sourcegear/SGConstructorSpec.scala | 2 +- .../accumulators/FileAccumulatorSpec.scala | 2 +- .../com/opticdev/opm/PackageManager.scala | 16 ++--- .../com/opticdev/opm/packages/package.scala | 13 ++-- .../opm/providers/LocalProvider.scala | 38 ++++++++-- .../com/opticdev/opm/providers/package.scala | 4 +- .../com/opticdev/opm/PackageManagerSpec.scala | 5 +- .../com/opticdev/opm/TestProvider.scala | 18 ++--- .../opm/context/PackageContextSpec.scala | 4 ++ .../opm/providers/LocalProviderSpec.scala | 2 +- server/src/main/resources/es7_2.12-0.1.0.jar | Bin 0 -> 135984 bytes .../com/opticdev/server/http/Lifecycle.scala | 17 ++++- .../http/controllers/ContextQuery.scala | 3 +- .../com/opticdev/server/Scratch.scala | 12 +++- .../express/optic:express-js@0.1.0.json | 4 +- .../optic:FlatExpress@0.1.0.json | 4 +- ...c:FlatExpress_container_mapping@0.1.0.json | 4 +- ...FlatExpress_non_distinct_params@0.1.0.json | 4 +- .../optic:ShowConfirmAlert@0.1.0.json | 4 +- .../optic:mongoose@0.1.0.json | 4 +- 31 files changed, 154 insertions(+), 161 deletions(-) delete mode 100644 core/src/main/scala-2.12/com/opticdev/core/cli/Installer.scala create mode 100644 server/src/main/resources/es7_2.12-0.1.0.jar diff --git a/.gitignore b/.gitignore index 1fa814019e..fda1310d78 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ .idea/ target/ project/target/ -config.yaml arrow/target/ common/target/ diff --git a/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ChangesEvaluationSpec.scala b/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ChangesEvaluationSpec.scala index b9e8ccc04e..12e0832ae1 100644 --- a/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ChangesEvaluationSpec.scala +++ b/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ChangesEvaluationSpec.scala @@ -21,8 +21,6 @@ class ChangesEvaluationSpec extends TestBase with TestPackageProviders { assert(results.isSuccess) - println(results.stagedFiles.head._2.text) - assert(results.stagedFiles.head._2.text === expectedChange) } @@ -38,8 +36,6 @@ class ChangesEvaluationSpec extends TestBase with TestPackageProviders { val (changeGroup, sourcegear, expectedChange) = transformModelToRoute val results = changeGroup.evaluateAndWrite(sourcegear) - println(results.get.stagedFiles.head._2.text) - assert(results.get.stagedFiles.head._2.text == expectedChange) } diff --git a/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ExampleChanges.scala b/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ExampleChanges.scala index d073744fbc..849da292a1 100644 --- a/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ExampleChanges.scala +++ b/arrow/src/test/scala-2.12/com/opticdev/arrow/changes/ExampleChanges.scala @@ -63,7 +63,7 @@ object ExampleChanges extends TestBase with TestPackageProviders { | "url": "path/to/resource" | }, | "atLocation": { - | "file": "/Users/aidancunniffe/Developer/knack/optic-core/test-examples/resources/tmp/test_project/app.js", + | "file": "test-examples/resources/tmp/test_project/app.js", | "position": 93, | "_type":"com.opticdev.arrow.changes.location.AsChildOf" | }, @@ -133,7 +133,7 @@ object ExampleChanges extends TestBase with TestPackageProviders { | }, | "gearId": "aacee631", | "atLocation": { - | "file": "/Users/aidancunniffe/Developer/knack/optic-core/test-examples/resources/tmp/test_project/app.js", + | "file": "test-examples/resources/tmp/test_project/app.js", | "position": 38, | "_type":"com.opticdev.arrow.changes.location.AsChildOf" | }, @@ -192,16 +192,16 @@ object ExampleChanges extends TestBase with TestPackageProviders { | }], | "gearId": "aacee631", | "locationOptions": [{ - | "file": "/Users/aidancunniffe/Developer/knack/optic-core/test-examples/resources/tmp/test_project/nested/model.js", + | "file": "test-examples/resources/tmp/test_project/nested/model.js", | "position": 173, | "_type": "com.opticdev.arrow.changes.location.AsChildOf" | }], | "location": { - | "file": "/Users/aidancunniffe/Developer/knack/optic-core/test-examples/resources/tmp/test_project/nested/model.js", + | "file": "test-examples/resources/tmp/test_project/nested/model.js", | "position": 173, | "_type": "com.opticdev.arrow.changes.location.AsChildOf" | }, - | "inputValue": {"name": "user", "schema": { "firstName": { "type": "string"} }}, + | "inputValue": {"name": "user", "schema": { "firstName": { "type": "string"}, "lastName": { "type": "string"}, "email": { "type": "string"} }}, | "_type":"com.opticdev.arrow.changes.RunTransformation" | }] """.stripMargin @@ -214,7 +214,7 @@ object ExampleChanges extends TestBase with TestPackageProviders { val changeGroup = Json.fromJson[ChangeGroup](Json.parse(changesJSON)).get - (changeGroup, sourcegear, "import mongoose from 'mongoose'\n\nconst user = mongoose.model('user', new mongoose.Schema({\n 'firstName': 'string',\n 'lastName': 'string',\n 'email': 'string',\n}))\n\napp.post('/user', function (req, res) {\n req.body.firstName\n})") + (changeGroup, sourcegear, "import mongoose from 'mongoose'\n\nconst model = mongoose.model('user', new mongoose.Schema({\n 'firstName': 'string',\n 'lastName': 'string',\n 'email': 'string',\n}))\n\napp.post('/user', function (req, res) {\n req.body.firstName\n req.body.lastName\n req.body.email\n})") } diff --git a/config.yaml b/config.yaml index 5e3f3cc7de..3916f0aa79 100644 --- a/config.yaml +++ b/config.yaml @@ -1 +1 @@ -testParser: "/Users/aidancunniffe/Developer/knack/parsers/javascript-lang/target/scala-2.12/es7_2.12-0.1.0.jar" \ No newline at end of file +testParser: "server/src/main/resources/es7_2.12-0.1.0.jar" \ No newline at end of file diff --git a/core/src/main/scala-2.12/com/opticdev/core/cli/Installer.scala b/core/src/main/scala-2.12/com/opticdev/core/cli/Installer.scala deleted file mode 100644 index 4d552194d0..0000000000 --- a/core/src/main/scala-2.12/com/opticdev/core/cli/Installer.scala +++ /dev/null @@ -1,67 +0,0 @@ -//package com.opticdev.core.cli -// -//import java.io.FileNotFoundException -// -//import better.files.File -//import com.opticdev.core.compiler.Compiler -//import com.opticdev.core.sdk.SdkDescription -//import com.opticdev.core.sourcegear.gears.parsing.ParseAsModel -//import com.opticdev.common.storage.DataDirectory -//import com.opticdev.core.storage.stores.{ParserStorage} -//import com.opticdev.parsers.{ParserBase, SourceParserManager} -//import play.api.libs.json.Json -// -//import scala.util.{Failure, Success, Try} -// -//object Installer extends { -// -// SourceParserManager.installParser(System.getProperty("user.home")+"/Developer/knack/parsers/javascript-lang/out/artifacts/javascript_lang_jar/javascript-lang.jar") -// -// def installDescription(file: File) (implicit logToCli: Boolean = false) = Try { -// -// println("Starting...") -// val asDescription = Try { -// val contents = file.contentAsString -// SdkDescription.fromJson(Json.parse(contents)) -// } -// -// if (asDescription.isSuccess) { -// val compiler = Compiler.setup(asDescription.get) -// val output = compiler.execute -// if (logToCli) { -// Thread.sleep(80) -// println("Installed") -// println("Lenses:") -// output.gears.foreach(i => println(i.identifier)) -// println("Schemas:") -// output.schemas.foreach(i=> println(i.identifier)) -// } -// -// //write to disk -//// output.schemas.foreach(SchemaStorage.writeToStorage) -// -// } else { -// throw asDescription.failed.get -// } -// -// } -// -// def installParser(value: File)(implicit logToCli: Boolean = false): Try[ParserBase] = Try { -// val verifyTry = SourceParserManager.verifyParser(value.pathAsString) -// -// val writeToStorageTry = Try(ParserStorage.writeToStorage(value)) -// -// if (logToCli) { -// if (verifyTry.isSuccess && writeToStorageTry.isSuccess) println("Installed parser "+ verifyTry.get.languageName) -// else println("Unable to install parser from jar "+value.name) -// } -// -// if (verifyTry.isSuccess && writeToStorageTry.isSuccess) { -// verifyTry.get -// } else { -// throw new Error("Unable to install parser from jar "+value.name) -// } -// -// } -// -//} diff --git a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SGConstructor.scala b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SGConstructor.scala index 62f23f3044..a7ee312ae1 100644 --- a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SGConstructor.scala +++ b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SGConstructor.scala @@ -14,7 +14,10 @@ import scala.util.{Failure, Try} object SGConstructor { - def fromProjectFile(projectFile: ProjectFile) (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths()) : Future[SGConfig] = Future { + def fromProjectFile(projectFile: ProjectFile) : Future[SGConfig] = Future { + + implicit val projectKnowledgeSearchPaths = projectFile.projectKnowledgeSearchPaths + val dependencies = dependenciesForProjectFile(projectFile).get val compiled = compileDependencyTree(dependencies).get @@ -28,8 +31,11 @@ object SGConstructor { SGConfig(dependencies.hash, parsersRefs.get, gears, schemaSet, transformationSet) } - def dependenciesForProjectFile(projectFile: ProjectFile) : Try[DependencyTree] = { - val dependencies = projectFile.dependencies.getOrElse(Vector()) + def dependenciesForProjectFile(projectFile: ProjectFile): Try[DependencyTree] = { + + implicit val projectKnowledgeSearchPaths = projectFile.projectKnowledgeSearchPaths + + val dependencies: Seq[PackageRef] = projectFile.dependencies.getOrElse(Vector()) PackageManager.collectPackages(dependencies) } diff --git a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SourceGear.scala b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SourceGear.scala index 2cc850683e..2fee5627c7 100644 --- a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SourceGear.scala +++ b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/SourceGear.scala @@ -42,18 +42,28 @@ abstract class SourceGear { val parsed = parsedOption.get val astGraph = parsed.graph - //@todo clean this up and have the parser return in the parse result. - val parser = parsers.find(_.languageName == parsed.language).get - implicit val sourceGearContext = SGContext(gearSet.fileAccumulator, astGraph, parser, fileContents) + //@todo clean this up and have the parser return in the parse result. right now it only supports the test one +// val parser = parsers.find(_.languageName == parsed.language).get + implicit val sourceGearContext = SGContext(gearSet.fileAccumulator, astGraph, SourceParserManager.installedParsers.head, fileContents) gearSet.parseFromGraph(fileContents, astGraph, sourceGearContext, project) } else { throw parsedOption.failed.get } } + def isLoaded : Boolean = true } +case object UnloadedSourceGear extends SourceGear { + override val parsers = Set() + override val gearSet = new GearSet() + override val schemas = Set() + override val transformations = Set() + + override def isLoaded = false +} + object SourceGear { def default: SourceGear = new SourceGear { override val parsers: Set[ParserBase] = Set() @@ -61,4 +71,6 @@ object SourceGear { override val schemas = Set() override val transformations = Set() } + + def unloaded = UnloadedSourceGear } \ No newline at end of file diff --git a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/OpticProject.scala b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/OpticProject.scala index 72214348b9..4cf55c2225 100644 --- a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/OpticProject.scala +++ b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/OpticProject.scala @@ -139,19 +139,4 @@ abstract class OpticProject(val name: String, val baseDirectory: File)(implicit } def filesToWatch : Set[File] = baseDirectory.listRecursively.toVector.filter(shouldWatchFile).toSet - - /* Output the search paths for MD in project */ - - def projectSearchPaths : ProjectKnowledgeSearchPaths = { - val searchPaths = projectFile.interface - .map(_.knowledgePaths.value.toVector) - .getOrElse(Vector()) - .collect { - case s: YamlString => File(s.value) - } - .filter(f=> f.exists && f.isDirectory) - - ProjectKnowledgeSearchPaths(searchPaths:_*) - } - } diff --git a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/Project.scala b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/Project.scala index d9a098adf5..645cce50c9 100644 --- a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/Project.scala +++ b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/Project.scala @@ -15,7 +15,7 @@ class Project(name: String, baseDirectory: File)(implicit logToCli: Boolean = fa private var sourceGear: SourceGear = { projectFileChanged(projectFile) - SourceGear.default + SourceGear.unloaded } //do this after sourcegear is initialized @@ -23,7 +23,7 @@ class Project(name: String, baseDirectory: File)(implicit logToCli: Boolean = fa override def projectFileChanged(newPf: ProjectFile): Unit = { super.projectFileChanged(newPf) if (newPf.interface.isSuccess) { - SGConstructor.fromProjectFile(newPf)(projectSearchPaths).onComplete(i => { + SGConstructor.fromProjectFile(newPf).onComplete(i => { if (i.isSuccess) { sourceGear = i.get.inflate //run all callbacks @@ -31,6 +31,7 @@ class Project(name: String, baseDirectory: File)(implicit logToCli: Boolean = fa projectStatusInstance.sourceGearStatus = Valid if (projectStatus.monitoringStatus == Watching) rereadAll } else { + println(i.failed.get.printStackTrace()) projectStatusInstance.sourceGearStatus = Invalid(i.failed.get.getMessage) } }) diff --git a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/config/ProjectFile.scala b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/config/ProjectFile.scala index 6c10b12986..e76be93703 100644 --- a/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/config/ProjectFile.scala +++ b/core/src/main/scala-2.12/com/opticdev/core/sourcegear/project/config/ProjectFile.scala @@ -5,6 +5,7 @@ import java.nio.file.NoSuchFileException import better.files.File import com.opticdev.common.PackageRef import com.opticdev.core.sourcegear.InvalidProjectFileException +import com.opticdev.opm.providers.ProjectKnowledgeSearchPaths import com.opticdev.parsers.utils.Crypto import org.yaml.snakeyaml.parser.ParserException @@ -109,4 +110,20 @@ class ProjectFile(val file: File, createIfDoesNotExist : Boolean = true, onChang } + def projectKnowledgeSearchPaths : ProjectKnowledgeSearchPaths = { + val searchPaths = interface + .map(_.knowledgePaths.value.toVector) + .getOrElse(Vector()) + .collect { + case s: YamlString => { + val b = new java.io.File(file.parent.pathAsString, s.value) + val absolute = b.getCanonicalPath + File(absolute) + } + } + .filter(f=> f.exists && f.isDirectory) + + ProjectKnowledgeSearchPaths(searchPaths:_*) + } + } \ No newline at end of file diff --git a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConfigSpec.scala b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConfigSpec.scala index d55b28bc59..121d995b72 100644 --- a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConfigSpec.scala +++ b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConfigSpec.scala @@ -35,7 +35,7 @@ class SGConfigSpec extends TestBase with TestPackageProviders { } it("can generate a hexadecimal from hash") { - assert(sgConfig.hashString == "74af44cb") + assert(sgConfig.hashString == "55ea873") } it("can inflate to a sourcegear instance") { diff --git a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConstructorSpec.scala b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConstructorSpec.scala index bcc6c48d66..a26c2d7104 100644 --- a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConstructorSpec.scala +++ b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/SGConstructorSpec.scala @@ -15,7 +15,7 @@ class SGConstructorSpec extends TestBase with TestPackageProviders { lazy val projectFile = new ProjectFile(File("test-examples/resources/example_packages/express/optic.yaml")) it("can resolve all dependencies in a project file") { - assert(SGConstructor.dependenciesForProjectFile(projectFile).get.toString == """Tree(Vector(Leaf(OpticMDPackage({"metadata":{"name":"express-js","author":"optic","version":"0.1.0"},"dependencies":{"optic:rest":"0.1.0"},"lenses":[{"name":"Parameter","scope":"internal","schema":"optic:rest/parameter","snippet":{"name":"Parameter","language":"es7","version":"es6","block":"req.query.name"},"rules":[],"variables":[],"subcontainers":[],"components":[{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"query","occurrence":0},"propertyPath":["in"]},{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"name","occurrence":0},"propertyPath":["name"]}]},{"name":"Example Route","scope":"public","schema":"optic:rest/route","snippet":{"name":"Example Route","language":"es7","block":"app.get('url', function (req, res) {\n //:callback \n})"},"rules":[{"type":"children","finder":{"type":"stringFinder","rule":"starting","string":"{","occurrence":0},"ruleType":"any"}],"variables":[],"subcontainers":[{"name":"callback","subcontainer":true,"pulls":[],"childrenRule":"any","schemaComponents":[{"type":"schema","schema":"optic:rest/parameter","propertyPath":["parameters"],"mapUnique":true}]}],"components":[{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"get","occurrence":0},"propertyPath":["method"]},{"type":"code","finder":{"type":"stringFinder","rule":"containing","string":"url","occurrence":0},"propertyPath":["url"]},{"type":"schema","schema":"parameter","mapUnique":true,"propertyPath":["parameters"],"location":{"type":"InParent","finder":null},"options":{"lookupTable":null,"invariant":false,"parser":null,"mutator":null}}]}]},Map(PackageRef(optic:rest,0.1.0) -> PackageRef(optic:rest,0.1.0))),Tree(Vector(Leaf(OpticMDPackage({"metadata":{"name":"rest","author":"optic","version":"0.1.0"},"schemas":[{"id":"route","definition":{"title":"Route","version":"1.0.0","type":"object","required":["method","url"],"properties":{"method":{"type":"string"},"url":{"type":"string"},"parameters":{"type":"array","items":{"$ref":"#/definitions/parameter"}}},"definitions":{"parameter":{"title":"Parameter","version":"1.0.0","slug":"js-example-route-parameter","type":"object","required":["in","name"],"properties":{"in":{"type":"string"},"name":{"type":"string"}}}}}},{"id":"parameter","definition":{"title":"Parameter","version":"1.0.0","type":"object","required":["in","name"],"properties":{"in":{"type":"string"},"name":{"type":"string"}}}}]},Map()),Tree(Vector())))))))""") + assert(SGConstructor.dependenciesForProjectFile(projectFile).get.toString == """Tree(Vector(Leaf(OpticMDPackage({"metadata":{"name":"express-js","author":"optic","version":"0.1.0"},"dependencies":["optic:rest@0.1.0"],"lenses":[{"name":"Parameter","scope":"internal","schema":"optic:rest/parameter","snippet":{"name":"Parameter","language":"es7","version":"es6","block":"req.query.name"},"rules":[],"variables":[],"subcontainers":[],"components":[{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"query","occurrence":0},"propertyPath":["in"]},{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"name","occurrence":0},"propertyPath":["name"]}]},{"name":"Example Route","scope":"public","schema":"optic:rest/route","snippet":{"name":"Example Route","language":"es7","block":"app.get('url', function (req, res) {\n //:callback \n})"},"rules":[{"type":"children","finder":{"type":"stringFinder","rule":"starting","string":"{","occurrence":0},"ruleType":"any"}],"variables":[],"subcontainers":[{"name":"callback","subcontainer":true,"pulls":[],"childrenRule":"any","schemaComponents":[{"type":"schema","schema":"optic:rest/parameter","propertyPath":["parameters"],"mapUnique":true}]}],"components":[{"type":"code","finder":{"type":"stringFinder","rule":"entire","string":"get","occurrence":0},"propertyPath":["method"]},{"type":"code","finder":{"type":"stringFinder","rule":"containing","string":"url","occurrence":0},"propertyPath":["url"]},{"type":"schema","schema":"parameter","mapUnique":true,"propertyPath":["parameters"],"location":{"type":"InParent","finder":null},"options":{"lookupTable":null,"invariant":false,"parser":null,"mutator":null}}]}]},Map(PackageRef(optic:rest,0.1.0) -> PackageRef(optic:rest,0.1.0))),Tree(Vector(Leaf(OpticMDPackage({"metadata":{"name":"rest","author":"optic","version":"0.1.0"},"schemas":[{"id":"route","definition":{"title":"Route","version":"1.0.0","type":"object","required":["method","url"],"properties":{"method":{"type":"string"},"url":{"type":"string"},"parameters":{"type":"array","items":{"$ref":"#/definitions/parameter"}}},"definitions":{"parameter":{"title":"Parameter","version":"1.0.0","slug":"js-example-route-parameter","type":"object","required":["in","name"],"properties":{"in":{"type":"string"},"name":{"type":"string"}}}}}},{"id":"parameter","definition":{"title":"Parameter","version":"1.0.0","type":"object","required":["in","name"],"properties":{"in":{"type":"string"},"name":{"type":"string"}}}}]},Map()),Tree(Vector())))))))""") } it("can compile dependencies") { diff --git a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/accumulators/FileAccumulatorSpec.scala b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/accumulators/FileAccumulatorSpec.scala index 7e77c22d93..24dd7bde40 100644 --- a/core/src/test/scala-2.12/com/opticdev/core/sourcegear/accumulators/FileAccumulatorSpec.scala +++ b/core/src/test/scala-2.12/com/opticdev/core/sourcegear/accumulators/FileAccumulatorSpec.scala @@ -53,7 +53,7 @@ class FileAccumulatorSpec extends AkkaTestFixture("FileAccumulatorTest") with Ge it("map unique schemas finds valid + distinct instances") { - val sourceGear = sourceGearFromDescription("/Users/aidancunniffe/Developer/knack/optic-core/test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json") + val sourceGear = sourceGearFromDescription("test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json") val result = sourceGear.parseFile(File("test-examples/resources/example_source/ExampleExpress.js")) implicit val sourceGearContext = SGContext(sourceGear.fileAccumulator, result.get.astGraph, SourceParserManager.installedParsers.head, null) diff --git a/opm/src/main/scala-2.12/com/opticdev/opm/PackageManager.scala b/opm/src/main/scala-2.12/com/opticdev/opm/PackageManager.scala index 4eac310846..a0d3d7239c 100644 --- a/opm/src/main/scala-2.12/com/opticdev/opm/PackageManager.scala +++ b/opm/src/main/scala-2.12/com/opticdev/opm/PackageManager.scala @@ -3,12 +3,13 @@ package com.opticdev.opm import com.opticdev.common.PackageRef import com.opticdev.opm.context.{Leaf, Tree} import com.opticdev.opm.packages.StagedPackage -import com.opticdev.opm.providers.Provider +import com.opticdev.opm.providers.{ProjectKnowledgeSearchPaths, Provider} import com.opticdev.opm.storage.PackageStorage import com.opticdev.parsers.ParserRef import com.vdurmont.semver4j.Semver import com.vdurmont.semver4j.Semver.SemverType import com.opticdev.opm.packages.OpticPackage + import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{Await, Future} import scala.util.Try @@ -21,11 +22,11 @@ object PackageManager { // def defaultProviders = - def installPackage(packageRef: PackageRef) : Try[Vector[String]] = { + def installPackage(packageRef: PackageRef)(implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Try[Vector[String]] = { installPackages(packageRef) } - def installPackages(packages: PackageRef*) = Try { + def installPackages(packages: PackageRef*)(implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) = Try { //name -> satisfied val flattenedDependencyTree = collection.mutable.Map[PackageRef, Boolean]() @@ -66,8 +67,7 @@ object PackageManager { foundPackages.map(_.packageRef.full).toVector.sorted } - def collectPackages(packages: Seq[PackageRef]) : Try[DependencyTree] = Try { - + def collectPackages(packages: Seq[PackageRef])(implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Try[DependencyTree] = Try { var loaded = packages.map(p=> (p, PackageStorage.loadFromStorage(p))) val tryInstall = { @@ -104,7 +104,7 @@ object PackageManager { } //provider query - def resultsForRefs(packageRefs: PackageRef*) : BatchPackageResult= { + def resultsForRefs(packageRefs: PackageRef*)(implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : BatchPackageResult= { val lookupResults = providerStore.foldLeft(Seq(): Seq[BatchPackageResult]) { case (results, provider)=> { if (results.nonEmpty && results.last.foundAll) { @@ -113,7 +113,7 @@ object PackageManager { results } else { val future = provider.resolvePackages(packageRefs:_*) - val result = Await.result(future, 7 seconds) + val result = Await.result(future, 20 seconds) results :+ result } } @@ -132,7 +132,7 @@ object PackageManager { val future = Future.sequence(futures) - val result = Await.result(future, 7 seconds) + val result = Await.result(future, 20 seconds) import com.opticdev.opm.utils.FlattenBatchResultsImplicits._ diff --git a/opm/src/main/scala-2.12/com/opticdev/opm/packages/package.scala b/opm/src/main/scala-2.12/com/opticdev/opm/packages/package.scala index 0d71112e03..1f7a5da860 100644 --- a/opm/src/main/scala-2.12/com/opticdev/opm/packages/package.scala +++ b/opm/src/main/scala-2.12/com/opticdev/opm/packages/package.scala @@ -3,9 +3,9 @@ package com.opticdev.opm.packages import better.files.File import com.opticdev.common.PackageRef import com.opticdev.sdk.MarkdownParser -import play.api.libs.json.{JsObject, JsString, JsValue} +import play.api.libs.json.{JsArray, JsObject, JsString, JsValue} -import scala.util.Try +import scala.util.{Success, Try} trait OpticPackage { val description: JsObject @@ -19,10 +19,11 @@ trait OpticPackage { def packageRef: PackageRef = PackageRef(packageId, version) lazy val dependencies: Vector[PackageRef] = { - val asJsObject: JsObject = description.value.getOrElse("dependencies", JsObject.empty).as[JsObject] - asJsObject.value.map(i=> { - PackageRef(i._1, i._2.as[JsString].value) - }).toVector + val asJsObject: JsArray = description.value.getOrElse("dependencies", JsArray.empty).as[JsArray] + asJsObject.value + .collect { case s: JsString => PackageRef.fromString(s.value)} + .collect { case Success(i) => i } + .toVector } def resolved(map: Map[PackageRef, PackageRef] = Map()) = OpticMDPackage(description, map) diff --git a/opm/src/main/scala-2.12/com/opticdev/opm/providers/LocalProvider.scala b/opm/src/main/scala-2.12/com/opticdev/opm/providers/LocalProvider.scala index 2be2d95a21..31af9d9a59 100644 --- a/opm/src/main/scala-2.12/com/opticdev/opm/providers/LocalProvider.scala +++ b/opm/src/main/scala-2.12/com/opticdev/opm/providers/LocalProvider.scala @@ -3,7 +3,7 @@ import better.files.File import com.opticdev.common.PackageRef import com.opticdev.opm.packages.OpticPackage import com.opticdev.opm.{BatchPackageResult, BatchParserResult} -import com.opticdev.parsers.{ParserBase, ParserRef} +import com.opticdev.parsers.{ParserBase, ParserRef, SourceParserManager} import com.vdurmont.semver4j.Semver import com.vdurmont.semver4j.Semver.SemverType @@ -13,7 +13,7 @@ import scala.util.{Failure, Success, Try} class LocalProvider extends Provider { - override def resolvePackages(packageRefs: PackageRef*) (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths()) : Future[BatchPackageResult] = Future { + override def resolvePackages(packageRefs: PackageRef*) (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Future[BatchPackageResult] = Future { val foundPackages = listInstalledPackages.filter(i=> packageRefs.exists(_.packageId == i.packageId)) @@ -36,21 +36,47 @@ class LocalProvider extends Provider { BatchPackageResult(found.toSet, notFound.toSet) } - override def listInstalledPackages (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths()) : Vector[OpticPackage] = { + override def listInstalledPackages (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Vector[OpticPackage] = { val allFiles = projectKnowledgeSearchPaths.dirs.flatMap(_.listRecursively) - allFiles.filter(_.extension.orNull == ".md") + val allPackages = allFiles.filter(_.extension.orNull == ".md") .map(i => OpticPackage.fromMarkdown(i)) .toVector .collect { case Success(i) => i } + + allPackages } + override def resolveParsers(parsers: ParserRef*) : Future[BatchParserResult] = Future { - BatchParserResult(Set(), Set()) + + val installedParsers = listInstalledParsers + + val parserOptions = parsers.map(ref=> { + (ref, installedParsers + .get(ref.languageName).flatMap(versions => { + + val semversions = versions.map(i=> (new Semver(i.parserVersion, SemverType.NPM), i)) + .filter(sV=> sV._1.satisfies(ref.version) || ref.version == "latest") + + semversions.sortWith((a, b)=> { + a._1.isGreaterThan(b._1) + }).headOption.map(_._2) + })) + }) + + val found = parserOptions.filter(_._2.isDefined).map(_._2.get) + val notFound = parserOptions.filter(_._2.isEmpty).map(_._1) + + BatchParserResult(found.toSet, notFound.toSet) } - override def listInstalledParsers : Map[String, Vector[ParserBase]] = Map() + override def listInstalledParsers = { + import net.jcazevedo.moultingyaml._ + val installedParsers = SourceParserManager.installedParsers.map(i=> (i.languageName, Vector(i))).toMap + installedParsers + } } diff --git a/opm/src/main/scala-2.12/com/opticdev/opm/providers/package.scala b/opm/src/main/scala-2.12/com/opticdev/opm/providers/package.scala index 6ac90bacf5..c0741e4650 100644 --- a/opm/src/main/scala-2.12/com/opticdev/opm/providers/package.scala +++ b/opm/src/main/scala-2.12/com/opticdev/opm/providers/package.scala @@ -14,8 +14,8 @@ package object providers { case class ProjectKnowledgeSearchPaths(dirs: File*) trait Provider { - def resolvePackages(packageRefs: PackageRef*) (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths()) : Future[BatchPackageResult] - def listInstalledPackages (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths()) : Vector[OpticPackage] + def resolvePackages(packageRefs: PackageRef*) (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Future[BatchPackageResult] + def listInstalledPackages (implicit projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths) : Vector[OpticPackage] def resolveParsers(parsers: ParserRef*) : Future[BatchParserResult] def listInstalledParsers : Map[String, Vector[ParserBase]] diff --git a/opm/src/test/scala-2.12/com/opticdev/opm/PackageManagerSpec.scala b/opm/src/test/scala-2.12/com/opticdev/opm/PackageManagerSpec.scala index f544aa1daa..d1eb6952c7 100644 --- a/opm/src/test/scala-2.12/com/opticdev/opm/PackageManagerSpec.scala +++ b/opm/src/test/scala-2.12/com/opticdev/opm/PackageManagerSpec.scala @@ -3,6 +3,7 @@ package com.opticdev.opm import better.files.File import com.opticdev.common.PackageRef import com.opticdev.opm.context.{Leaf, Tree} +import com.opticdev.opm.providers.ProjectKnowledgeSearchPaths import com.opticdev.opm.storage.{PackageStorage, ParserStorage} import com.opticdev.parsers.ParserRef import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSpec} @@ -13,6 +14,8 @@ import scala.concurrent.duration._ class PackageManagerSpec extends FunSpec with TestPackageProviders { + implicit val projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths() + describe("Package Manager") { it("can change providers") { @@ -94,7 +97,7 @@ class PackageManagerSpec extends FunSpec with TestPackageProviders { )) ) - assert(expectedTree.toString == "Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"a\",\"version\":\"1.1.1\",\"author\":\"optic\"},\"dependencies\":{\"optic:b\":\"1.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"b\",\"version\":\"1.0.0\",\"author\":\"optic\"},\"dependencies\":{\"optic:c\":\"3.5.2\",\"optic:d\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"3.5.2\",\"author\":\"optic\"},\"dependencies\":{\"optic:d\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"d\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{\"optic:e\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"e\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{\"optic:c\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{}},Map()),Tree(List()))))))))))), Leaf(OpticMDPackage({\"metadata\":{\"name\":\"d\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{\"optic:e\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"e\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{\"optic:c\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{}},Map()),Tree(List())))))))))))))), Leaf(OpticMDPackage({\"metadata\":{\"name\":\"b\",\"version\":\"1.1.1\",\"author\":\"optic\"},\"dependencies\":{\"optic:c\":\"2.0.0\"}},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":{}},Map()),Tree(List())))))))") + assert(expectedTree.toString == "Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"a\",\"version\":\"1.1.1\",\"author\":\"optic\"},\"dependencies\":[\"optic:b@1.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"b\",\"version\":\"1.0.0\",\"author\":\"optic\"},\"dependencies\":[\"optic:c@3.5.2\",\"optic:d@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"3.5.2\",\"author\":\"optic\"},\"dependencies\":[\"optic:d@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"d\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[\"optic:e@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"e\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[\"optic:c@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[]},Map()),Tree(List()))))))))))), Leaf(OpticMDPackage({\"metadata\":{\"name\":\"d\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[\"optic:e@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"e\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[\"optic:c@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[]},Map()),Tree(List())))))))))))))), Leaf(OpticMDPackage({\"metadata\":{\"name\":\"b\",\"version\":\"1.1.1\",\"author\":\"optic\"},\"dependencies\":[\"optic:c@2.0.0\"]},Map()),Tree(WrappedArray(Leaf(OpticMDPackage({\"metadata\":{\"name\":\"c\",\"version\":\"2.0.0\",\"author\":\"optic\"},\"dependencies\":[]},Map()),Tree(List())))))))") } it("fails if any can not be resolved") { diff --git a/opm/src/test/scala-2.12/com/opticdev/opm/TestProvider.scala b/opm/src/test/scala-2.12/com/opticdev/opm/TestProvider.scala index ba29e26cf6..b684e271c6 100644 --- a/opm/src/test/scala-2.12/com/opticdev/opm/TestProvider.scala +++ b/opm/src/test/scala-2.12/com/opticdev/opm/TestProvider.scala @@ -9,7 +9,7 @@ import com.opticdev.parsers.{ParserRef, SourceParserManager} import com.vdurmont.semver4j.Semver import com.vdurmont.semver4j.Semver.SemverType import net.jcazevedo.moultingyaml.YamlString -import play.api.libs.json.{JsObject, JsString, Json} +import play.api.libs.json.{JsArray, JsObject, JsString, Json} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future @@ -17,7 +17,7 @@ import scala.util.Try class TestProvider extends Provider { - def mockPackage(name: String, author: String, version: String, dependencies: Seq[(String, String)]) = { + def mockPackage(name: String, author: String, version: String, dependencies: Seq[String]) = { StagedPackage(JsObject( Seq( "metadata" -> JsObject( @@ -26,22 +26,22 @@ class TestProvider extends Provider { "version"-> JsString(version), "author"-> JsString(author), )), - "dependencies" -> JsObject(dependencies.map(i=> i._1 -> JsString(i._2))) + "dependencies" -> JsArray(dependencies.map(JsString)) ) )) } - val a = mockPackage("a", "optic", "1.1.1", Seq("optic:b"-> "1.0.0")) + val a = mockPackage("a", "optic", "1.1.1", Seq("optic:b@1.0.0")) - val b = mockPackage("b", "optic", "1.0.0", Seq("optic:c"-> "3.5.2", "optic:d"-> "2.0.0")) - val b1 = mockPackage("b", "optic", "1.1.1", Seq("optic:c"-> "2.0.0")) + val b = mockPackage("b", "optic", "1.0.0", Seq("optic:c@3.5.2", "optic:d@2.0.0")) + val b1 = mockPackage("b", "optic", "1.1.1", Seq("optic:c@2.0.0")) - val c = mockPackage("c", "optic", "3.5.2", Seq("optic:d"-> "2.0.0")) + val c = mockPackage("c", "optic", "3.5.2", Seq("optic:d@2.0.0")) val c1 = mockPackage("c", "optic", "2.0.0", Seq()) - val d = mockPackage("d", "optic", "2.0.0", Seq("optic:e"-> "2.0.0")) + val d = mockPackage("d", "optic", "2.0.0", Seq("optic:e@2.0.0")) - val e = mockPackage("e", "optic", "2.0.0", Seq("optic:c"-> "2.0.0")) + val e = mockPackage("e", "optic", "2.0.0", Seq("optic:c@2.0.0")) val opticImport = OpticPackage.fromJson(Json.parse(File( diff --git a/opm/src/test/scala-2.12/com/opticdev/opm/context/PackageContextSpec.scala b/opm/src/test/scala-2.12/com/opticdev/opm/context/PackageContextSpec.scala index c73ab31f40..6029d6620c 100644 --- a/opm/src/test/scala-2.12/com/opticdev/opm/context/PackageContextSpec.scala +++ b/opm/src/test/scala-2.12/com/opticdev/opm/context/PackageContextSpec.scala @@ -1,6 +1,7 @@ package com.opticdev.opm.context import com.opticdev.common.PackageRef +import com.opticdev.opm.providers.ProjectKnowledgeSearchPaths import com.opticdev.opm.{PackageManager, TestPackageProviders, TestProvider} import com.opticdev.sdk.descriptions import com.opticdev.sdk.descriptions.Schema @@ -8,6 +9,9 @@ import org.scalatest.{BeforeAndAfter, FunSpec} class PackageContextSpec extends FunSpec with TestPackageProviders { + implicit val projectKnowledgeSearchPaths: ProjectKnowledgeSearchPaths = ProjectKnowledgeSearchPaths() + + describe("Package Context") { describe("within dependencies trees") { diff --git a/opm/src/test/scala-2.12/com/opticdev/opm/providers/LocalProviderSpec.scala b/opm/src/test/scala-2.12/com/opticdev/opm/providers/LocalProviderSpec.scala index c99af1f2f7..85c5f8ff6f 100644 --- a/opm/src/test/scala-2.12/com/opticdev/opm/providers/LocalProviderSpec.scala +++ b/opm/src/test/scala-2.12/com/opticdev/opm/providers/LocalProviderSpec.scala @@ -29,7 +29,7 @@ class LocalProviderSpec extends FunSpec { } it("does not work for parsers") { - assert(localProvider.listInstalledParsers.isEmpty) + assert(localProvider.listInstalledParsers.size == 1) } } diff --git a/server/src/main/resources/es7_2.12-0.1.0.jar b/server/src/main/resources/es7_2.12-0.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..a002344a112d8324177e7177e6f3b431cba7d626 GIT binary patch literal 135984 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∨Rx&HtJj^OTdT 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

n`PWcPdB;|Q{_~S`?yS&6z`?)>A^w}%lK7v| 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 W25fR}S4{Z;A>akTl%EjbU;huYt$JGk literal 0 HcmV?d00001 diff --git a/server/src/main/scala-2.12/com/opticdev/server/http/Lifecycle.scala b/server/src/main/scala-2.12/com/opticdev/server/http/Lifecycle.scala index 7b76dab273..c2e6700bfd 100644 --- a/server/src/main/scala-2.12/com/opticdev/server/http/Lifecycle.scala +++ b/server/src/main/scala-2.12/com/opticdev/server/http/Lifecycle.scala @@ -3,17 +3,28 @@ package com.opticdev.server.http import better.files.File import com.opticdev.core.sourcegear.project.Project import com.opticdev.core.sourcegear.project.config.ProjectFile +import com.opticdev.opm.PackageManager +import com.opticdev.opm.providers.LocalProvider +import com.opticdev.opm.storage.{PackageStorage, ParserStorage} import com.opticdev.parsers.SourceParserManager import com.opticdev.server.state.ProjectsManager object Lifecycle extends App { - SourceParserManager.installParser(System.getProperty("user.home")+"/Developer/knack/parsers/javascript-lang/target/scala-2.12/javascript-lang_2.12-1.0.jar") + PackageStorage.clearLocalPackages + + //set the local providers for the OPM + PackageManager.setProviders(new LocalProvider) + + //@todo load parsers dynamically. + val jar = this.getClass.getClassLoader.getResource("es7_2.12-0.1.0.jar").getPath + val defaultParserTry = SourceParserManager.installParser(jar) + ParserStorage.writeToStorage(File(jar)) implicit val projectsManager: ProjectsManager = new ProjectsManager() implicit val actorCluster = projectsManager.actorCluster //manually adding projects for testing - val project = Project.fromProjectFile(new ProjectFile(File("test-examples/resources/tmp/test_project/optic.yaml"))).get - projectsManager.loadProject(project) +// val project = Project.fromProjectFile(new ProjectFile(File("test-examples/resources/tmp/test_project/optic.yaml"))).get +// projectsManager.loadProject(project) startup def startup = { diff --git a/server/src/main/scala-2.12/com/opticdev/server/http/controllers/ContextQuery.scala b/server/src/main/scala-2.12/com/opticdev/server/http/controllers/ContextQuery.scala index 4899ea3b7b..c3542c44fc 100644 --- a/server/src/main/scala-2.12/com/opticdev/server/http/controllers/ContextQuery.scala +++ b/server/src/main/scala-2.12/com/opticdev/server/http/controllers/ContextQuery.scala @@ -43,7 +43,8 @@ class ContextQuery(file: File, range: Range, contentsOption: Option[String])(imp resolved.filter(node => (node.root.range intersect range.inclusive).nonEmpty) } else { - if (projectOption.get.shouldWatchFile(file)) { + val project = projectOption.get + if (project.projectSourcegear.isLoaded && project.shouldWatchFile(file)) { //wait for it to be processed Vector() } else { diff --git a/server/src/test/scala-2.12/com/opticdev/server/Scratch.scala b/server/src/test/scala-2.12/com/opticdev/server/Scratch.scala index 0414cfd334..708965a9d9 100644 --- a/server/src/test/scala-2.12/com/opticdev/server/Scratch.scala +++ b/server/src/test/scala-2.12/com/opticdev/server/Scratch.scala @@ -8,13 +8,23 @@ import com.opticdev.opm.{TestPackageProviders, TestProvider} import com.opticdev.parsers.SourceParserManager import com.opticdev.server.http.Server import com.opticdev.server.state.ProjectsManager +import net.jcazevedo.moultingyaml.YamlString +import net.jcazevedo.moultingyaml._ + +import scala.util.Try object Scratch extends TestBase with TestPackageProviders { installProviders super.beforeAll() - SourceParserManager.installParser(System.getProperty("user.home")+"/Developer/knack/parsers/javascript-lang/target/scala-2.12/javascript-lang_2.12-1.0.jar") + val parserPath = Try({ + val contents = File("config.yaml").contentAsString + contents.parseYaml.asYamlObject.fields(YamlString("testParser")).asInstanceOf[YamlString].value + }).getOrElse(throw new Error("No testParser found in config.yaml")) + + + SourceParserManager.installParser("parserPath") implicit val projectsManager: ProjectsManager = new ProjectsManager() implicit val actorCluster = projectsManager.actorCluster diff --git a/test-examples/resources/example_packages/express/optic:express-js@0.1.0.json b/test-examples/resources/example_packages/express/optic:express-js@0.1.0.json index 6761b1d406..3df18005ee 100644 --- a/test-examples/resources/example_packages/express/optic:express-js@0.1.0.json +++ b/test-examples/resources/example_packages/express/optic:express-js@0.1.0.json @@ -4,9 +4,7 @@ "author": "optic", "version": "0.1.0" }, - "dependencies": { - "optic:rest":"0.1.0" - }, + "dependencies": ["optic:rest@0.1.0"], "lenses": [ { "name": "Parameter", diff --git a/test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json b/test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json index 50e785059b..98adf914d5 100644 --- a/test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json +++ b/test-examples/resources/example_packages/optic:FlatExpress@0.1.0.json @@ -4,9 +4,7 @@ "author": "optic", "version": "0.1.0" }, - "dependencies": { - "optic:rest":"0.1.0" - }, + "dependencies": ["optic:rest@0.1.0"], "lenses": [ { "name": "Parameter", diff --git a/test-examples/resources/example_packages/optic:FlatExpress_container_mapping@0.1.0.json b/test-examples/resources/example_packages/optic:FlatExpress_container_mapping@0.1.0.json index b8564924b9..5a57e29f1f 100644 --- a/test-examples/resources/example_packages/optic:FlatExpress_container_mapping@0.1.0.json +++ b/test-examples/resources/example_packages/optic:FlatExpress_container_mapping@0.1.0.json @@ -4,9 +4,7 @@ "author": "optic", "version": "0.1.0" }, - "dependencies": { - "optic:rest": "0.1.0" - }, + "dependencies": ["optic:rest@0.1.0"], "lenses": [ { "name": "Parameter", diff --git a/test-examples/resources/example_packages/optic:FlatExpress_non_distinct_params@0.1.0.json b/test-examples/resources/example_packages/optic:FlatExpress_non_distinct_params@0.1.0.json index 56b0d0cf80..5743373130 100644 --- a/test-examples/resources/example_packages/optic:FlatExpress_non_distinct_params@0.1.0.json +++ b/test-examples/resources/example_packages/optic:FlatExpress_non_distinct_params@0.1.0.json @@ -4,9 +4,7 @@ "author": "optic", "version": "0.1.0" }, - "dependencies": { - "optic:rest":"0.1.0" - }, + "dependencies": ["optic:rest@0.1.0"], "lenses": [ { "name": "Parameter", diff --git a/test-examples/resources/example_packages/optic:ShowConfirmAlert@0.1.0.json b/test-examples/resources/example_packages/optic:ShowConfirmAlert@0.1.0.json index ad9a927320..4f4214b5c3 100644 --- a/test-examples/resources/example_packages/optic:ShowConfirmAlert@0.1.0.json +++ b/test-examples/resources/example_packages/optic:ShowConfirmAlert@0.1.0.json @@ -4,9 +4,7 @@ "author": "optic", "version": "0.1.0" }, - "dependencies": { - "dependencySet": {} - }, + "dependencies": [], "schemas": [ { "id": "confirmAlert", diff --git a/test-examples/resources/example_packages/optic:mongoose@0.1.0.json b/test-examples/resources/example_packages/optic:mongoose@0.1.0.json index a4a2cfd1c1..c83944b3aa 100644 --- a/test-examples/resources/example_packages/optic:mongoose@0.1.0.json +++ b/test-examples/resources/example_packages/optic:mongoose@0.1.0.json @@ -4,9 +4,7 @@ "name": "mongoose", "version": "0.1.0" }, - "dependencies": { - "optic:rest":"0.1.0" - }, + "dependencies": ["optic:rest@0.1.0"], "schemas": [{ "id": "mongoose-schema", "definition": {