firefly-compiler 0.5.79 → 0.5.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compiler/Builder.ff +31 -39
- package/compiler/Compiler.ff +14 -4
- package/compiler/DevelopMode.ff +406 -0
- package/compiler/Main.ff +73 -53
- package/compiler/ModuleCache.ff +5 -5
- package/core/.firefly/include/package.json +1 -1
- package/core/BuildSystem.ff +82 -11
- package/core/NodeSystem.ff +47 -30
- package/core/Path.ff +7 -2
- package/experimental/proxy/Main.ff +60 -0
- package/experimental/proxy/Runner.ff +11 -0
- package/experimental/proxy/Tcp.ff +162 -0
- package/experimental/random/Superdigit.ff +18 -0
- package/experimental/terrain/Main.ff +40 -0
- package/experimental/terrain/Terrain.ff +97 -0
- package/experimental/terrain/Terrain2.ff +109 -0
- package/fireflysite/Main.ff +0 -1
- package/fireflysite/assets/markdown/reference/statements-and-expressions.md +1 -1
- package/lsp/CompletionHandler.ff +2 -2
- package/output/js/ff/compiler/Builder.mjs +24 -48
- package/output/js/ff/compiler/Builder.mjs.map +7 -11
- package/output/js/ff/compiler/Compiler.mjs +66 -12
- package/output/js/ff/compiler/Compiler.mjs.map +18 -14
- package/output/js/ff/compiler/Dependencies.mjs.map +2 -2
- package/output/js/ff/compiler/DependencyLock.mjs.map +1 -1
- package/output/js/ff/compiler/Deriver.mjs.map +1 -1
- package/output/js/ff/compiler/DevelopMode.mjs +1049 -0
- package/output/js/ff/compiler/DevelopMode.mjs.map +183 -0
- package/output/js/ff/compiler/Dictionaries.mjs.map +1 -1
- package/output/js/ff/compiler/Environment.mjs.map +1 -1
- package/output/js/ff/compiler/Inference.mjs.map +1 -1
- package/output/js/ff/compiler/JsEmitter.mjs.map +1 -1
- package/output/js/ff/compiler/JsImporter.mjs.map +1 -1
- package/output/js/ff/compiler/LspHook.mjs.map +1 -1
- package/output/js/ff/compiler/Main.mjs +256 -105
- package/output/js/ff/compiler/Main.mjs.map +43 -38
- package/output/js/ff/compiler/ModuleCache.mjs +12 -8
- package/output/js/ff/compiler/ModuleCache.mjs.map +4 -3
- package/output/js/ff/compiler/Parser.mjs.map +1 -1
- package/output/js/ff/compiler/Patterns.mjs.map +1 -1
- package/output/js/ff/compiler/Resolver.mjs.map +1 -1
- package/output/js/ff/compiler/SourceMap.mjs.map +1 -1
- package/output/js/ff/compiler/Substitution.mjs.map +1 -1
- package/output/js/ff/compiler/Syntax.mjs.map +1 -1
- package/output/js/ff/compiler/Token.mjs.map +1 -1
- package/output/js/ff/compiler/Tokenizer.mjs.map +1 -1
- package/output/js/ff/compiler/Unification.mjs.map +1 -1
- package/output/js/ff/compiler/Wildcards.mjs.map +1 -1
- package/output/js/ff/compiler/Workspace.mjs.map +1 -1
- package/output/js/ff/core/Any.mjs.map +1 -1
- package/output/js/ff/core/Array.mjs.map +1 -1
- package/output/js/ff/core/AssetSystem.mjs.map +1 -1
- package/output/js/ff/core/Atomic.mjs.map +1 -1
- package/output/js/ff/core/Bool.mjs.map +1 -1
- package/output/js/ff/core/BrowserSystem.mjs.map +1 -1
- package/output/js/ff/core/Buffer.mjs.map +1 -1
- package/output/js/ff/core/BuildSystem.mjs +116 -12
- package/output/js/ff/core/BuildSystem.mjs.map +35 -6
- package/output/js/ff/core/Channel.mjs.map +1 -1
- package/output/js/ff/core/Char.mjs.map +1 -1
- package/output/js/ff/core/Core.mjs.map +1 -1
- package/output/js/ff/core/Crypto.mjs.map +1 -1
- package/output/js/ff/core/Date.mjs.map +1 -1
- package/output/js/ff/core/Duration.mjs.map +1 -1
- package/output/js/ff/core/Equal.mjs.map +1 -1
- package/output/js/ff/core/Error.mjs.map +1 -1
- package/output/js/ff/core/FileHandle.mjs.map +1 -1
- package/output/js/ff/core/Float.mjs.map +1 -1
- package/output/js/ff/core/HttpClient.mjs.map +1 -1
- package/output/js/ff/core/Int.mjs.map +1 -1
- package/output/js/ff/core/IntMap.mjs.map +1 -1
- package/output/js/ff/core/Js.mjs.map +1 -1
- package/output/js/ff/core/JsSystem.mjs.map +1 -1
- package/output/js/ff/core/JsValue.mjs.map +1 -1
- package/output/js/ff/core/Json.mjs.map +1 -1
- package/output/js/ff/core/List.mjs.map +1 -1
- package/output/js/ff/core/Lock.mjs.map +1 -1
- package/output/js/ff/core/Log.mjs.map +1 -1
- package/output/js/ff/core/Map.mjs.map +1 -1
- package/output/js/ff/core/NodeSystem.mjs +54 -20
- package/output/js/ff/core/NodeSystem.mjs.map +14 -6
- package/output/js/ff/core/Nothing.mjs.map +1 -1
- package/output/js/ff/core/Option.mjs.map +1 -1
- package/output/js/ff/core/Ordering.mjs.map +1 -1
- package/output/js/ff/core/Pair.mjs.map +1 -1
- package/output/js/ff/core/Path.mjs +30 -4
- package/output/js/ff/core/Path.mjs.map +8 -6
- package/output/js/ff/core/Queue.mjs.map +1 -1
- package/output/js/ff/core/Random.mjs.map +1 -1
- package/output/js/ff/core/RbMap.mjs.map +1 -1
- package/output/js/ff/core/Serializable.mjs.map +1 -1
- package/output/js/ff/core/Set.mjs.map +1 -1
- package/output/js/ff/core/Show.mjs.map +1 -1
- package/output/js/ff/core/SourceLocation.mjs.map +1 -1
- package/output/js/ff/core/Stream.mjs.map +1 -1
- package/output/js/ff/core/String.mjs.map +1 -1
- package/output/js/ff/core/StringMap.mjs.map +1 -1
- package/output/js/ff/core/Task.mjs.map +1 -1
- package/output/js/ff/core/Try.mjs.map +1 -1
- package/output/js/ff/core/Unit.mjs.map +1 -1
- package/output/js/ff/core/node_modules +1 -0
- package/package.json +1 -1
- package/vscode/package.json +1 -1
- package/webserver/.firefly/include/package.json +1 -1
- package/webserver/WebServer.ff +6 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../compiler/Wildcards.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"import Syntax\r\n\r\nclass Wildcards(mutable seenWildcards : Int)\r\n\r\nnew(): Wildcards {\r\n Wildcards(0)\r\n}\r\n\r\nfail[T](at: Location, message: String): T {\r\n panic(message + \" \" + at.show())\r\n}\r\n\r\nextend self: Wildcards {\r\n\r\n fixWildcards(term: Term): Term {\r\n | ELet e => e.ELet(value = self.fixWildcards(e.value), body = self.fixWildcards(e.body))\r\n | ESequential e => e.ESequential(before = self.fixWildcards(e.before), after = self.fixWildcards(e.after))\r\n | EAssign e => e.EAssign(value = self.fixWildcards(e.value))\r\n | EAssignField e => e.EAssignField(record = self.fixWildcards(e.record), value = self.fixWildcards(e.value))\r\n | EPipe e => e.EPipe(value = self.fixWildcards(e.value), function = self.fixWildcards(e.function))\r\n | ECall e =>\r\n e.ECall(\r\n target = e.target.{\r\n | DynamicCall call => call.DynamicCall(function = self.fixWildcards(call.function))\r\n | _ => fail(e.at, \"Internal error: Static calls not expected in the Wildcards phase\")\r\n },\r\n arguments = e.arguments.map { a => a.Argument(value = self.fixWildcards(a.value)) }\r\n )\r\n | EList e =>\r\n e.EList(items = e.items.map { | Pair(item, spread) =>\r\n Pair(self.fixWildcards(item), spread)\r\n })\r\n | ECopy e =>\r\n e.ECopy(\r\n record = self.fixWildcards(e.record),\r\n arguments = e.arguments.map { a => a.Field(value = self.fixWildcards(a.value)) }\r\n )\r\n | EVariant e =>\r\n e.EVariant(arguments = e.arguments.map { _.map { a =>\r\n a.Argument(value = self.fixWildcards(a.value))\r\n }})\r\n | ERecord e => e.ERecord(fields = e.fields.map { a => a.Field(value = self.fixWildcards(a.value)) })\r\n | EField e => e.EField(record = self.fixWildcards(e.record))\r\n | EWildcard e =>\r\n self.seenWildcards += 1\r\n e.EWildcard(index = self.seenWildcards)\r\n | _ => term\r\n }\r\n\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../compiler/Workspace.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"import Syntax\r\n\r\ndata Workspace(\r\n rules: List[WorkspaceRule]\r\n defaultLocation: String\r\n packageDirectory: String\r\n)\r\n\r\ndata WorkspaceRule(\r\n packageGroup: String\r\n packageName: Option[String]\r\n location: String\r\n)\r\n\r\ncentralLocation = \"https://www.firefly-lang.org/packages/\"\r\n\r\nloadWorkspace(path: Path): Workspace {\r\n let packageDirectory = if(path.extension() == \".ff\") {path.parent().grab()} else {path}\r\n let workspaceFile = packageDirectory.slash(\".firefly-workspace\")\r\n if(workspaceFile.exists()) {\r\n parseWorkspaceFile(workspaceFile, packageDirectory)\r\n } elseIf {!packageDirectory.parent().isEmpty()} {\r\n loadWorkspace(packageDirectory.parent().grab())\r\n } else {\r\n Workspace([], centralLocation, \".\")\r\n }\r\n}\r\n\r\nparseWorkspaceFile(path: Path, packageDirectory: Path): Workspace {\r\n let text = path.readText()\r\n mutable defaultLocation = None\r\n let lines = text.split('\\n').map {_.replace(\"\\r\", \"\").takeWhile {_ != '#'}}.filter {_.size() != 0}\r\n let rules = lines.collect {line =>\r\n let columns = line.replace(\"\\t\", \" \").split(' ').filter {_.size() != 0}\r\n defaultLocation.each {_ =>\r\n panic(\"Unexpected rule after the * rule: \" + line)\r\n }\r\n if(columns.size() != 2) {\r\n panic(\"Could not parse workspace rule: \" + line)\r\n }\r\n let package = columns.grab(0)\r\n let location = columns.grab(1)\r\n let fixedLocation = if(location.endsWith(\"/\")) {location} else {location + \"/\"}\r\n if(package == \"*\") {\r\n defaultLocation = Some(fixedLocation)\r\n None\r\n } else {\r\n let packageParts = package.split(':')\r\n if(packageParts.size() != 2) {\r\n panic(\"Could not parse workspace package: \" + package)\r\n }\r\n if(packageParts.grab(0) == \"*\") {\r\n panic(\"Unexpected wildcard: \" + package)\r\n }\r\n Some(WorkspaceRule(\r\n packageGroup = packageParts.grab(0)\r\n packageName = if(packageParts.grab(1) != \"*\") {packageParts.grab(1)}\r\n location = fixedLocation\r\n ))\r\n }\r\n }\r\n Workspace(rules, defaultLocation.else {centralLocation}, packageDirectory.absolute())\r\n}\r\n\r\nextend self: Workspace {\r\n\r\n findPackageLocation(packagePair: PackagePair, version: Version): String {\r\n self.rules.find {rule =>\r\n rule.packageGroup == packagePair.group && rule.packageName.all {_ == packagePair.name}\r\n }.map {rule =>\r\n let prefix = if(rule.packageName == None) {packagePair.name + \"/\"} else {\"\"}\r\n if(rule.location.contains(\":\")) {\r\n rule.location + prefix + tarGzName(packagePair, version)\r\n } else {\r\n self.packageDirectory + \"/\" + rule.location + prefix\r\n }\r\n }.else {\r\n self.defaultLocation + packagePair.group + \"/\" + packagePair.name + \"/\" +\r\n tarGzName(packagePair, version)\r\n }\r\n }\r\n\r\n}\r\n\r\ntarGzName(packagePair: PackagePair, version: Version): String {\r\n packagePair.group + \"_\" + packagePair.name + \"_\" +\r\n version.major + \"_\" + version.minor + \"_\" + version.patch + \".tar.gz\"\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Any.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"data Any {}\r\ndata AnyTag[T] {}\r\n\r\ntrait T: HasAnyTag {\r\n anyTag(): AnyTag[T]\r\n}\r\n\r\ntoAny[T: HasAnyTag](value: T): Any {\r\n let anyTag: AnyTag[T] = anyTag()\r\n Js->(anyTag = anyTag!, value = value!)?\r\n}\r\n\r\nfromAny[T: HasAnyTag](any: Any): Option[T] {\r\n let anyTag: AnyTag[T] = anyTag()\r\n if(any!->anyTag.equals(anyTag!)) {any!->value?}\r\n}\r\n\r\nextend self[T]: AnyTag[T] {\r\n show(): String {\r\n self!?\r\n }\r\n}\r\n\r\ninternalAnyTag[T](tag: String): AnyTag[T] {\r\n tag!?\r\n}"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Array.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"class Array[T] {}\r\n\r\nnew[T](): Array[T] {\r\n Js->(array = [])?\r\n}\r\n \r\nfill[T](size: Int, value: T): List[T] {\r\n Js->(array = List.fill(size, value)!)?\r\n}\r\n\r\nfillBy[T](size: Int, body: Int => T): List[T] {\r\n Js->(array = List.fillBy(size, body)!)?\r\n}\r\n\r\nrange(size: Int): List[Int] {\r\n Js->(array = List.range(size)!)?\r\n}\r\n\r\nextend self[T]: Array[T] {\r\n\r\n isEmpty(): Bool {\r\n self.size() == 0\r\n }\r\n\r\n size(): Int {\r\n self!->array->length?\r\n }\r\n\r\n get(index: Int): Option[T] {\r\n if(index >= 0 && index < self.size()) {\r\n Some(self!->array.get(index)?)\r\n } else {\r\n None\r\n }\r\n }\r\n\r\n grab(index: Int): T {\r\n if(index < 0 || index >= self.size()) {\r\n throw(GrabException())\r\n }\r\n self!->array.get(index)?\r\n }\r\n\r\n first(): Option[T] {self.get(0)}\r\n\r\n last(): Option[T] {self.get(self.size() - 1)}\r\n\r\n grabFirst(): T {self.grab(0)}\r\n\r\n grabLast(): T {self.grab(self.size() - 1)}\r\n\r\n push(value: T): Unit {\r\n self!->array->push(value!)?\r\n }\r\n\r\n pushArray(value: Array[T]): Unit {\r\n self.pushList(value!->array?)\r\n }\r\n\r\n pushList(list: List[T]): Unit {\r\n let originalLength = self.size()\r\n self!->array->length += list.size()\r\n 0.until(list.size()).each {i =>\r\n self!->array.set(originalLength + i, list!.get(i))\r\n }\r\n } \r\n\r\n pop(): Option[T] {\r\n if(self.size() > 0) {\r\n self!->array->pop()?\r\n }\r\n }\r\n\r\n set(index: Int, value: T): Unit {\r\n if(index < 0 || index >= self.size()) {\r\n throw(GrabException())\r\n }\r\n self!->array.set(index, value!)\r\n }\r\n\r\n modify(index: Int, body: T => T): Unit {\r\n if(index < 0 || index >= self.size()) {\r\n throw(GrabException())\r\n }\r\n self!->array.set(index, body(self!->array.get(index)?)!)\r\n }\r\n\r\n fill(value: T, start: Int = 0, end: Int = 9007199254740991): Unit {\r\n self!->array->fill(value!, start, end)\r\n }\r\n\r\n copy(target: Int, start: Int, end: Int): Unit {\r\n self!->array->copyWithin(target, start, end)\r\n }\r\n\r\n delete(start: Int, deleteCount: Int): Unit {\r\n self!->array->splice(start, deleteCount)\r\n }\r\n\r\n insert(start: Int, value: T, deleteCount: Int = 0): Unit {\r\n self!->array->splice(start, deleteCount, value!)\r\n }\r\n\r\n insertArray(start: Int, array: Array[T], deleteCount: Int = 0): Unit {\r\n self.insertList(start, array!->array?, deleteCount)\r\n }\r\n\r\n insertList(start: Int, list: List[T], deleteCount: Int = 0): Unit {\r\n if(start < 0 || start > self.size()) {\r\n throw(GrabException())\r\n }\r\n\r\n let deleteEnd = start + deleteCount\r\n\r\n if(deleteEnd < 0 || deleteEnd > self.size()) {\r\n throw(GrabException())\r\n }\r\n\r\n let insertCount = list.size()\r\n let delta = insertCount - deleteCount\r\n \r\n if(delta > 0) {\r\n self!->array->length += delta\r\n self!->array->copyWithin(start + insertCount, deleteEnd)\r\n } elseIf {delta < 0} {\r\n self!->array->copyWithin(start + insertCount, deleteEnd)\r\n self!->array->length += delta\r\n }\r\n\r\n 0.until(insertCount).each {i => \r\n self!->array.set(start + i, list!.get(i))\r\n } \r\n }\r\n\r\n mapInPlace[S](body: T => S): Unit {\r\n mutable i = 0\r\n while {i < self.size()} {\r\n self!->array.set(i, body(self!->array.get(i)?)!)\r\n i += 1\r\n }\r\n }\r\n \r\n each(body: T => Unit): Unit {\r\n mutable i = 0\r\n while {i < self.size()} {\r\n body(self!->array.get(i)?)\r\n i += 1\r\n }\r\n }\r\n \r\n eachWithIndex(body: (Int, T) => Unit): Unit {\r\n mutable i = 0\r\n while {i < self.size()} {\r\n body(i, self!->array.get(i)?)\r\n i += 1\r\n }\r\n }\r\n\r\n eachWhile(body: T => Bool): Unit {\r\n mutable i = 0\r\n while {i < self.size()} {\r\n if(body(self!->array.get(i)?)) {\r\n i += 1\r\n } else {\r\n i = self.size()\r\n }\r\n }\r\n }\r\n\r\n all(body: T => Bool): Bool {\r\n mutable result = True\r\n self.eachWhile {x =>\r\n result = body(x)\r\n result\r\n }\r\n result\r\n }\r\n\r\n any(body: T => Bool): Bool {\r\n mutable result = False\r\n self.eachWhile {x =>\r\n result = body(x)\r\n (!result)\r\n }\r\n result\r\n }\r\n \r\n find(body: T => Bool): Option[T] {\r\n mutable result = None\r\n self.eachWhile {x =>\r\n if(body(x)) {\r\n result = Some(x)\r\n False\r\n } else {\r\n True\r\n }\r\n }\r\n result\r\n }\r\n\r\n indexWhere(body: T => Bool): Option[Int] {\r\n mutable i = -1\r\n mutable result = False\r\n self.eachWhile {x =>\r\n i += 1\r\n result = body(x)\r\n (!result)\r\n }\r\n if(result) {i}\r\n }\r\n\r\n drain(): List[T] {\r\n let result = self!->array\r\n self!->array = []\r\n result?\r\n }\r\n\r\n toList(start: Int = 0, end: Int = 9007199254740991): List[T] {\r\n self!->array->slice(start, end)?\r\n }\r\n\r\n toStream(start: Int = 0, end: Int = 9007199254740991): Stream[T] {\r\n self.toList(start, end).toStream()\r\n }\r\n\r\n reverse(): Unit {\r\n self!->array->reverse()?\r\n }\r\n\r\n sortBy[S: Order](body: T => S): Unit {\r\n self.sortWith {Ordering.compare(body(_), body(_))}\r\n }\r\n\r\n sortWith(ordering: (T, T) => Ordering): Unit {\r\n if(Js.inAsync()) {\r\n sortRange(self, ordering, 0, self.size())\r\n } else {\r\n self!->array->sort(Js->{x, y => ordering(x?, y?).toInt()})\r\n }\r\n }\r\n\r\n}\r\n\r\nextend self[T: Order]: Array[T] {\r\n\r\n sort(): Unit {\r\n self.sortWith(Ordering.compare)\r\n }\r\n\r\n}\r\n\r\nextend self: Array[String] {\r\n\r\n join(separator: String = \"\"): String {\r\n self!->array->join(separator)?\r\n }\r\n\r\n}\r\n\r\ninstance Array[T: Show]: Show {\r\n show(value: Array[T]): String {\r\n let array = Array.new()\r\n array.push(\"[\")\r\n value.each {x =>\r\n if(array.size() > 1) {array.push(\", \")}\r\n array.push(Show.show(x))\r\n }\r\n array.push(\"].toArray()\")\r\n array.join()\r\n }\r\n}\r\n\r\nsortRange[T](array: Array[T], compare: (T, T) => Ordering, start: Int, end: Int): Unit {\r\n if(end - start < 2) {} else:\r\n\r\n mutable middle = start + (end - start).div(2)\r\n sortRange(array, compare, start, middle)\r\n sortRange(array, compare, middle, end)\r\n\r\n mutable i = start\r\n mutable j = middle\r\n while {i < middle && j < end} {\r\n if(compare(array.grab(i), array.grab(j)) != OrderingAfter) {\r\n i += 1\r\n } else {\r\n let value = array.grab(j)\r\n mutable k = j\r\n while {k > i} {\r\n array.set(k, array.grab(k - 1))\r\n k -= 1\r\n }\r\n array.set(i, value)\r\n i += 1\r\n middle += 1\r\n j += 1\r\n }\r\n }\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/AssetSystem.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"capability AssetSystem(\r\n files: Map[String, () => Stream[Buffer]]\r\n)\r\n\r\ncreate(): AssetSystem {\r\n AssetSystem([].toMap())\r\n}\r\n\r\nextend self: AssetSystem {\r\n\r\n addAssets(path: String, assets: AssetSystem): AssetSystem {\r\n let prefix = if(path.endsWith(\"/\")) {path.dropLast(1)} else {path}\r\n AssetSystem(\r\n self.files.addAll(\r\n assets.files.map {p, stream =>\r\n Pair(prefix + p, stream)\r\n }\r\n )\r\n )\r\n }\r\n\r\n assets(path: String): AssetSystem {\r\n let prefix = if(path.endsWith(\"/\")) {path} else {path + \"/\"}\r\n let streams = self.files.pairs().collect {\r\n | Pair(p, s) {p.startsWith(prefix)} => Some(Pair(p.dropFirst(prefix.size() - 1), s))\r\n | _ => None\r\n }\r\n AssetSystem(streams.toMap())\r\n }\r\n\r\n asset(path: String): AssetSystem {\r\n let name = path.reverse().takeWhile {_ != '/'}.reverse()\r\n let streams = self.files.get(path).toList().map {s => Pair(\"/\" + name, s)}\r\n AssetSystem(streams.toMap())\r\n }\r\n\r\n list(path: String): List[String] {\r\n let prefix = if(path.endsWith(\"/\")) {path} else {path + \"/\"}\r\n self.files.pairs().collect {\r\n | Pair(p, _) {p.startsWith(prefix)} => Some(p.dropFirst(prefix.size()).takeWhile {_ != '/'})\r\n | _ => None\r\n }.distinct()\r\n }\r\n\r\n exists(path: String): Bool {\r\n let prefix = if(path.endsWith(\"/\")) {path} else {path + \"/\"}\r\n self.files.contains(path) || self.files.pairs().any {_.first.startsWith(prefix)}\r\n }\r\n\r\n readStream(file: String): Stream[Buffer] {\r\n let makeStream = self.files.get(file).else {\r\n panic(\"Asset not found for readStream: \" + file)\r\n }\r\n makeStream()\r\n }\r\n\r\n readText(file: String): String {\r\n self.readStream(file).toString()\r\n }\r\n\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Atomic.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"class Atomic[T] {}\r\n\r\nnew[T](value: T): Atomic[T] {\r\n Js->(value = value!)?\r\n}\r\n\r\nextend self[T]: Atomic[T] {\r\n\r\n modify(body: T => T): T {\r\n if(Js.inAsync()) {\r\n mutable currentValue = self!->value\r\n mutable newValue = body(self!->value?)\r\n while {currentValue !== self!->value} {\r\n currentValue = self!->value\r\n newValue = body(self!->value?)\r\n }\r\n self!->value = newValue!\r\n newValue\r\n } else {\r\n let newValue = body(self!->value?)\r\n self!->value = newValue!\r\n newValue\r\n }\r\n }\r\n\r\n getAndModify(body: T => T): T {\r\n mutable currentValue = self!->value\r\n if(Js.inAsync()) {\r\n mutable newValue = body(self!->value?)\r\n while {currentValue !== self!->value} {\r\n currentValue = self!->value\r\n newValue = body(self!->value?)\r\n }\r\n self!->value = newValue!\r\n currentValue?\r\n } else {\r\n let newValue = body(self!->value?)\r\n self!->value = newValue!\r\n currentValue?\r\n }\r\n }\r\n\r\n get(): T {\r\n self!->value?\r\n }\r\n\r\n set(value: T): Unit {\r\n self!->value = value!\r\n }\r\n\r\n getAndSet(newValue: T): T {\r\n let currentValue = self!->value\r\n self!->value = newValue!\r\n currentValue?\r\n }\r\n\r\n compareAndSet(currentValue: T, newValue: T): Bool {\r\n if(self!->value !== currentValue!) {False} else:\r\n self!->value = newValue!\r\n True\r\n }\r\n\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Bool.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"data Bool {\r\n False\r\n True\r\n}\r\n\r\nextend self: Bool {\r\n toInt(): Int {\r\n self.{\r\n | False => 0\r\n | True => 1\r\n }\r\n }\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/BrowserSystem.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"capability BrowserSystem {}\r\n\r\nextend self: BrowserSystem {\r\n\r\n httpClient(): HttpClient {\r\n Js.globalThis()?\r\n }\r\n \r\n mainTask(): Task {\r\n self!->\"task_\"?\r\n }\r\n\r\n crypto(): Crypto {\r\n Js->crypto?\r\n }\r\n \r\n js(): JsSystem {\r\n Js.globalThis()?\r\n }\r\n \r\n date(timeZoneId: Option[String] = None, calendarId: String = Date.isoCalendarId): Date {\r\n let date = Date(Js->Temporal->Now->zonedDateTimeISO(timeZoneId.map {_!}.else {Js.undefined()}))\r\n if(calendarId == Date.isoCalendarId) {date} else {date.withCalendar(calendarId)}\r\n }\r\n\r\n url(): String {\r\n Js->location->href?\r\n }\r\n \r\n urlPath(): String {\r\n Js->location->pathname?\r\n }\r\n\r\n urlQuery(name: String): Option[String] {\r\n let param = Js->URLSearchParams->(Js->location->search)->get(name)\r\n if(param.isNullOrUndefined()) {None} else:\r\n Some(param?)\r\n }\r\n\r\n urlFragment(): Option[String] {\r\n if(!Js->location->hash->startsWith(\"#\")?) {None} else:\r\n Some(Js->location->hash->slice(1)?)\r\n }\r\n \r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Buffer.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"class Buffer {}\r\n\r\nnew(size: Int, shared: Bool = False): Buffer {\r\n Js->DataView->(if(shared) {Js->SharedArrayBuffer->(size)} else {Js->ArrayBuffer->(size)})?\r\n}\r\n\r\nextend self: Buffer {\r\n\r\n /*grabBigInt64(byteOffset: Int, littleEndian: Bool = True): BigInt\r\n target js sync \"return self_.getBigInt64(byteOffset_, littleEndian_)\"*/\r\n\r\n /*grabBigUint64(byteOffset: Int, littleEndian: Bool = True): BigInt\r\n target js sync \"return self_.getBigUint64(byteOffset_, littleEndian_)\"*/\r\n\r\n grabUint64(byteOffset: Int, littleEndian: Bool = True): Int {\r\n let high = self!->getUint32(byteOffset + if(littleEndian) {4} else {0}, littleEndian)\r\n let low = self!->getUint32(byteOffset + if(littleEndian) {0} else {4}, littleEndian)\r\n let result = (high? * 0x100000000) + low?\r\n if(!Js->Number->isSafeInteger(result)?) {\r\n throw(GrabException)\r\n }\r\n result\r\n }\r\n \r\n grabInt64(byteOffset: Int, littleEndian: Bool = True): Int {\r\n let high = self!->getInt32(byteOffset + if(littleEndian) {4} else {0}, littleEndian)\r\n let low = self!->getUint32(byteOffset + if(littleEndian) {0} else {4}, littleEndian)\r\n let result = (high? * 0x100000000) + low?\r\n if(!Js->Number->isSafeInteger(result)?) {\r\n throw(GrabException()) //grabInt64 out of range (consider grabBigInt64)'\r\n }\r\n result\r\n }\r\n\r\n grabFloat32(byteOffset: Int, littleEndian: Bool = True): Float {\r\n self!->getFloat32(byteOffset, littleEndian)?\r\n }\r\n \r\n grabFloat64(byteOffset: Int, littleEndian: Bool = True): Float {\r\n self!->getFloat64(byteOffset, littleEndian)?\r\n }\r\n\r\n grabInt16(byteOffset: Int, littleEndian: Bool = True): Int {\r\n self!->getInt16(byteOffset, littleEndian)?\r\n }\r\n\r\n grabInt32(byteOffset: Int, littleEndian: Bool = True): Int {\r\n self!->getInt32(byteOffset, littleEndian)?\r\n }\r\n\r\n grabInt8(byteOffset: Int): Int {\r\n self!->getInt8(byteOffset)?\r\n }\r\n\r\n grabUint16(byteOffset: Int, littleEndian: Bool = True): Int {\r\n self!->getUint16(byteOffset, littleEndian)?\r\n }\r\n\r\n grabUint32(byteOffset: Int, littleEndian: Bool = True): Int {\r\n self!->getUint32(byteOffset, littleEndian)?\r\n }\r\n\r\n grabUint8(byteOffset: Int): Int {\r\n self!->getUint8(byteOffset)?\r\n }\r\n\r\n /*setBigInt64(byteOffset: Int, value: BigInt, littleEndian: Bool = False): Unit\r\n target js sync \"self_.setBigInt64(byteOffset_, value_, littleEndian_)\"*/\r\n\r\n /*setBigUint64(byteOffset: Int, value: BigInt, littleEndian: Bool = False): Unit\r\n target js sync \"self_.setBigUint64(byteOffset_, value_, littleEndian_)\"*/\r\n\r\n setUint64(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setUint32(byteOffset + if(littleEndian) {4} else {0}, value.bitRightUnsigned(16).bitRightUnsigned(16), littleEndian)\r\n self!->setUint32(byteOffset + if(littleEndian) {0} else {4}, value.bitAnd(0xffffffff), littleEndian)\r\n }\r\n \r\n setInt64(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setUint32(byteOffset + if(littleEndian) {4} else {0}, value.bitRight(16).bitRight(16), littleEndian)\r\n self!->setUint32(byteOffset + if(littleEndian) {0} else {4}, value.bitAnd(0xffffffff), littleEndian)\r\n }\r\n\r\n setFloat32(byteOffset: Int, value: Float, littleEndian: Bool = True): Unit {\r\n self!->setFloat32(byteOffset, value, littleEndian)\r\n }\r\n\r\n setFloat64(byteOffset: Int, value: Float, littleEndian: Bool = True): Unit {\r\n self!->setFloat64(byteOffset, value, littleEndian)\r\n }\r\n\r\n setInt16(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setInt16(byteOffset, value, littleEndian)\r\n }\r\n\r\n setInt32(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setInt32(byteOffset, value, littleEndian)\r\n }\r\n\r\n setInt8(byteOffset: Int, value: Int): Unit {\r\n self!->setInt8(byteOffset, value)\r\n }\r\n\r\n setUint16(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setUint16(byteOffset, value, littleEndian)\r\n }\r\n\r\n setUint32(byteOffset: Int, value: Int, littleEndian: Bool = True): Unit {\r\n self!->setUint32(byteOffset, value, littleEndian)\r\n }\r\n\r\n setUint8(byteOffset: Int, value: Int): Unit {\r\n self!->setUint8(byteOffset, value)\r\n }\r\n\r\n setAll(byteOffset: Int, buffer: Buffer): Unit {\r\n let sourceBuffer = Js->Uint8Array->(buffer!->buffer, buffer!->byteOffset, buffer!->byteLength)\r\n let targetBuffer = Js->Uint8Array->(self!->buffer, self!->byteOffset, self!->byteLength)\r\n targetBuffer->set(sourceBuffer, byteOffset)\r\n }\r\n\r\n size(): Int {\r\n self!->byteLength?\r\n }\r\n\r\n shared(): Bool {\r\n Js->SharedArrayBuffer.typeof() != \"undefined\" && self!->buffer.instanceof(Js->SharedArrayBuffer)\r\n }\r\n\r\n view(begin: Int, end: Int): Buffer {\r\n Js->DataView->(self!->buffer, self!->byteOffset + begin!, end - begin)?\r\n }\r\n\r\n copy(): Buffer {\r\n Js->DataView->(self!->buffer->slice(self!->byteOffset, self!->byteOffset + self!->byteLength))?\r\n }\r\n\r\n toString(encoding: String = \"utf8\"): String {\r\n if(encoding == \"utf8\") {\r\n if(Js->TextDecoder->ffSingleton.typeof() == \"undefined\") {\r\n Js->TextDecoder->ffSingleton = Js->TextDecoder->()\r\n }\r\n Js->TextDecoder->ffSingleton->decode(self!)?\r\n } else {\r\n Js->TextDecoder->()->decode(self!)?\r\n }\r\n }\r\n\r\n toByteList(): List[Int] {\r\n Js->Uint8Array->(self!->buffer, self!->byteOffset, self!->byteLength).spreadToArray()!?\r\n }\r\n \r\n toHex(): String {\r\n mutable hex = \"\"\r\n 0.until(self!->byteLength?).each {i =>\r\n hex = hex + self!->getUint8(i)->toString(16)->padStart(2, \"0\")?\r\n }\r\n hex\r\n }\r\n \r\n toBase64(): String {\r\n let view = Js->Uint8Array->(self!->buffer, self!->byteOffset, self!->byteLength)\r\n //let binaryString = Js->TextDecoder->(\"latin1\")->decode(view)\r\n let binaryString = Js->Array->from(view, Js->{byte => Js->String->fromCodePoint(byte)})->join(\"\");\r\n Js->btoa(binaryString)?\r\n }\r\n \r\n toLetter16(): String {\r\n let result = Buffer.new(self.size().bitLeft(1))\r\n 0.until(self.size()).each {i =>\r\n let b = self.grabUint8(i)\r\n result.setUint16(i.bitLeft(1), (b.bitRightUnsigned(4).bitAnd(0xf) + 0x68).bitOr(\r\n (b.bitAnd(0xf) + 0x68).bitLeft(8)\r\n ), littleEndian = True)\r\n }\r\n result.toString()\r\n }\r\n\r\n}\r\n\r\nfromByteList(array: List[Int]): Buffer {\r\n Js->DataView->(Js->Uint8Array->(array)->buffer)?\r\n}\r\n\r\nfromBufferList(array: List[Buffer]): Buffer {\r\n mutable length = 0\r\n array.each {length += _!->byteLength?}\r\n let arrayBuffer = Js->ArrayBuffer->(length)\r\n let result = Js->Uint8Array->(arrayBuffer)\r\n mutable offset = 0\r\n array.each {b =>\r\n result->set(Js->Uint8Array->(b!->buffer, b!->byteOffset, b!->byteLength), offset)\r\n offset += b!->byteLength?\r\n }\r\n Js->DataView->(arrayBuffer)?\r\n}\r\n\r\nfromHex(hex: String): Buffer {\r\n let byteCount = (hex.size() * 0.5).ceil().toInt()\r\n let arrayBuffer = Js->ArrayBuffer->(byteCount)\r\n let result = Js->Uint8Array->(arrayBuffer)\r\n 0.until(byteCount).each {i =>\r\n result.set(i, Js->parseInt(hex!->slice(i * 2, i * 2 + 2), 16))\r\n }\r\n Js->DataView->(arrayBuffer)?\r\n}\r\n\r\nfromBase64(base64: String): Buffer {\r\n let binaryString = Js->atob(base64)\r\n let bytes = Js->Uint8Array->from(binaryString, Js->{char => char->codePointAt(0)})\r\n Js->DataView->(bytes->buffer)?\r\n}\r\n\r\nfromLetter16(letters: String): Buffer {\r\n let buffer = Buffer.new(letters.size().bitRightUnsigned(1))\r\n 0.until(buffer.size()).each {i =>\r\n buffer.setUint8(i, (letters.grab(i.bitLeft(1)).codeUnit.bitAnd(0x1f) - 0x8).bitLeft(4).bitOr(\r\n letters.grab(i.bitLeft(1).bitOr(1)).codeUnit.bitAnd(0x1f) - 0x8\r\n ))\r\n }\r\n buffer\r\n}\r\n\r\ninstance Buffer: Show {\r\n show(value: Buffer): String {\r\n \"\"\"Buffer.fromHex(\"\"\"\" + value.toHex() + \"\"\"\")\"\"\"\r\n }\r\n}\r\n\r\ninstance Buffer: Equal {\r\n equals(x: Buffer, y: Buffer): Bool {\r\n if(x.size() != y.size()) {False} else:\r\n if(x! === y!) {True} else:\r\n mutable i = 0\r\n mutable same = True\r\n while {i + 4 < x.size() && same} {\r\n same = x!->getInt32(i) === y!->getInt32(i)\r\n i += 4\r\n }\r\n if(!same) {False} else:\r\n i.until(x.size()).eachWhile {i =>\r\n same = x!->getUint8(i) === y!->getUint8(i)\r\n same\r\n }\r\n same\r\n }\r\n}\r\n\r\ninstance Buffer: Order {\r\n compare(x: Buffer, y: Buffer): Ordering {\r\n if(x!.equals(y!)) {OrderingSame} else:\r\n let minLength = x.size().min(y.size())\r\n mutable ordering = OrderingSame\r\n 0.until(minLength).eachWhile {i =>\r\n if(x!->getUint8(i) !== x!->getUint8(i)) {\r\n ordering = Ordering.fromInt((x!->getUint8(i) - y!->getUint8(i))?)\r\n False\r\n } else {\r\n True\r\n }\r\n }\r\n if(ordering == OrderingSame) {\r\n Ordering.fromInt(x.size() - y.size())\r\n } else {\r\n ordering\r\n }\r\n }\r\n}\r\n"
|
|
@@ -104,7 +104,12 @@ esbuild_.build({entryPoints: mainJsFiles_, bundle: true, minify: minify_, source
|
|
|
104
104
|
|
|
105
105
|
export function internalNodeCallEsBuild_(self_, mainJsFile_, outputPath_, minify_) {
|
|
106
106
|
const esbuild_ = import$0;
|
|
107
|
-
esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["
|
|
107
|
+
esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["esbuild", "uws.js"], loader: {[".node"]: "copy"}, outfile: outputPath_})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function internalNodeCallEsBuildContext_(self_, mainJsFile_, outputPath_, minify_) {
|
|
111
|
+
const esbuild_ = import$0;
|
|
112
|
+
return esbuild_.context({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["esbuild", "uws.js"], loader: {[".node"]: "copy"}, outfile: outputPath_})
|
|
108
113
|
}
|
|
109
114
|
|
|
110
115
|
export function internalListDirectory_(path_) {
|
|
@@ -140,7 +145,20 @@ return ff_core_Path.Path(nodePath_.resolve(absoluteOrRelative_))
|
|
|
140
145
|
}
|
|
141
146
|
|
|
142
147
|
export function internalCompile_(buildSystem_, mainFiles_, target_) {
|
|
143
|
-
|
|
148
|
+
if(((typeof globalThis.ffDevelopMode) !== "undefined")) {
|
|
149
|
+
process.send({ffDevelopMode: "internalCompile", mainFiles: ff_core_List.List_map(mainFiles_, ((_w1) => {
|
|
150
|
+
return ff_core_Path.Path_absolute(_w1)
|
|
151
|
+
})), target: target_});
|
|
152
|
+
ff_core_Js.awaitCancellablePromise_(((resolve_, reject_, cleanup_) => {
|
|
153
|
+
process.on("message", ((message_) => {
|
|
154
|
+
if((message_.ffDevelopMode === "internalCompile")) {
|
|
155
|
+
return ff_core_Option.Some(resolve_((void 0)))
|
|
156
|
+
} else return ff_core_Option.None()
|
|
157
|
+
}))
|
|
158
|
+
}))
|
|
159
|
+
} else {
|
|
160
|
+
$firefly_compiler["buildViaBuildSystem_$"](buildSystem_, ff_core_BuildSystem.internalPath_(buildSystem_, buildSystem_["fireflyPath_"]), mainFiles_, target_, (void 0), (void 0), $task)
|
|
161
|
+
}
|
|
144
162
|
}
|
|
145
163
|
|
|
146
164
|
export function internalMainPackagePair_(buildSystem_) {
|
|
@@ -154,7 +172,12 @@ const esbuild_ = import$0;
|
|
|
154
172
|
|
|
155
173
|
export async function internalNodeCallEsBuild_$(self_, mainJsFile_, outputPath_, minify_, $task) {
|
|
156
174
|
const esbuild_ = import$0;
|
|
157
|
-
esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["
|
|
175
|
+
(await esbuild_.build({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["esbuild", "uws.js"], loader: {[".node"]: "copy"}, outfile: outputPath_}))
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export async function internalNodeCallEsBuildContext_$(self_, mainJsFile_, outputPath_, minify_, $task) {
|
|
179
|
+
const esbuild_ = import$0;
|
|
180
|
+
return (await esbuild_.context({entryPoints: [mainJsFile_], bundle: true, minify: minify_, sourcemap: true, platform: "node", target: "es2017", external: ["esbuild", "uws.js"], loader: {[".node"]: "copy"}, outfile: outputPath_}))
|
|
158
181
|
}
|
|
159
182
|
|
|
160
183
|
export async function internalListDirectory_$(path_, $task) {
|
|
@@ -190,7 +213,20 @@ return ff_core_Path.Path(nodePath_.resolve(absoluteOrRelative_))
|
|
|
190
213
|
}
|
|
191
214
|
|
|
192
215
|
export async function internalCompile_$(buildSystem_, mainFiles_, target_, $task) {
|
|
193
|
-
(
|
|
216
|
+
if(((typeof globalThis.ffDevelopMode) !== "undefined")) {
|
|
217
|
+
process.send({ffDevelopMode: "internalCompile", mainFiles: (await ff_core_List.List_map$(mainFiles_, (async (_w1, $task) => {
|
|
218
|
+
return (await ff_core_Path.Path_absolute$(_w1, $task))
|
|
219
|
+
}), $task)), target: target_});
|
|
220
|
+
(await ff_core_Js.awaitCancellablePromise_$(((resolve_, reject_, cleanup_) => {
|
|
221
|
+
process.on("message", ((message_) => {
|
|
222
|
+
if((message_.ffDevelopMode === "internalCompile")) {
|
|
223
|
+
return ff_core_Option.Some(resolve_((void 0)))
|
|
224
|
+
} else return ff_core_Option.None()
|
|
225
|
+
}))
|
|
226
|
+
}), $task))
|
|
227
|
+
} else {
|
|
228
|
+
(await $firefly_compiler["buildViaBuildSystem_$"](buildSystem_, (await ff_core_BuildSystem.internalPath_$(buildSystem_, buildSystem_["fireflyPath_"], $task)), mainFiles_, target_, (void 0), (void 0), $task))
|
|
229
|
+
}
|
|
194
230
|
}
|
|
195
231
|
|
|
196
232
|
export async function internalMainPackagePair_$(buildSystem_, $task) {
|
|
@@ -214,18 +250,52 @@ const browserOutputPath_ = ff_core_BuildSystem.internalPath_(self_, ".firefly/ou
|
|
|
214
250
|
const runPaths_ = ff_core_Stream.Stream_toList(ff_core_Stream.Stream_filter(ff_core_BuildSystem.internalListPath_(browserOutputPath_), ((_w1) => {
|
|
215
251
|
return ff_core_String.String_endsWith(ff_core_Path.Path_base(_w1), ".run.mjs")
|
|
216
252
|
})));
|
|
253
|
+
if(((typeof globalThis.ffDevelopMode) === "undefined")) {
|
|
217
254
|
const outputPath_ = ff_core_Option.Option_grab(ff_core_Path.Path_parent(ff_core_List.List_grabFirst(runPaths_)));
|
|
255
|
+
const start_ = ff_core_Task.Task_elapsed(ff_core_BuildSystem.BuildSystem_mainTask(self_));
|
|
218
256
|
ff_core_BuildSystem.internalBrowserCallEsBuild_(self_, ff_core_List.List_map(runPaths_, ((_w1) => {
|
|
219
257
|
return ff_core_Path.Path_absolute(_w1)
|
|
220
258
|
})), ff_core_Path.Path_absolute(outputPath_), minify_, sourceMaps_);
|
|
221
|
-
const bundlePaths_ =
|
|
222
|
-
|
|
223
|
-
|
|
259
|
+
const bundlePaths_ = ff_core_List.List_flatMap(runPaths_, ((p_) => {
|
|
260
|
+
const outputPath_ = ff_core_Option.Option_grab(ff_core_Path.Path_parent(p_));
|
|
261
|
+
const bundlePath_ = ff_core_Path.Path_slash(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast(ff_core_Path.Path_base(p_), ".mjs")) + ".bundle.js"));
|
|
262
|
+
const mapPath_ = ff_core_Path.Path_slash(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast(ff_core_Path.Path_base(p_), ".mjs")) + ".bundle.js.map"));
|
|
263
|
+
return [bundlePath_, mapPath_]
|
|
264
|
+
}));
|
|
224
265
|
return ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap(ff_core_List.List_map(bundlePaths_, ((p_) => {
|
|
225
|
-
return ff_core_Pair.Pair(("/" +
|
|
266
|
+
return ff_core_Pair.Pair(("/" + ff_core_List.List_join(ff_core_Path.Path_relativeListTo(p_, browserOutputPath_), "/")), (() => {
|
|
226
267
|
return ff_core_Path.Path_readStream(p_)
|
|
227
268
|
}))
|
|
228
269
|
})), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))
|
|
270
|
+
} else {
|
|
271
|
+
let built_ = ff_core_Set.new_();
|
|
272
|
+
const lock_ = ff_core_Task.Task_lock(ff_core_BuildSystem.BuildSystem_mainTask(self_));
|
|
273
|
+
return ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap(ff_core_List.List_flatMap(runPaths_, ((p_) => {
|
|
274
|
+
const outputPath_ = ff_core_Option.Option_grab(ff_core_Path.Path_parent(p_));
|
|
275
|
+
const bundlePath_ = ff_core_Path.Path_slash(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast(ff_core_Path.Path_base(p_), ".mjs")) + ".bundle.js"));
|
|
276
|
+
const mapPath_ = ff_core_Path.Path_slash(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast(ff_core_Path.Path_base(p_), ".mjs")) + ".bundle.js.map"));
|
|
277
|
+
const bundleAssetPath_ = ("/" + ff_core_List.List_join(ff_core_Path.Path_relativeListTo(bundlePath_, browserOutputPath_), "/"));
|
|
278
|
+
const mapAssetPath_ = ("/" + ff_core_List.List_join(ff_core_Path.Path_relativeListTo(mapPath_, browserOutputPath_), "/"));
|
|
279
|
+
function bundle_() {
|
|
280
|
+
ff_core_Lock.Lock_do(lock_, (() => {
|
|
281
|
+
if((!ff_core_Set.Set_contains(built_, ff_core_Path.Path_absolute(p_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))) {
|
|
282
|
+
ff_core_BuildSystem.internalBrowserCallEsBuild_(self_, [ff_core_Path.Path_absolute(p_)], ff_core_Path.Path_absolute(outputPath_), minify_, sourceMaps_);
|
|
283
|
+
built_ = ff_core_Set.Set_add(built_, ff_core_Path.Path_absolute(p_), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
|
|
284
|
+
};
|
|
285
|
+
return ff_core_Path.Path_readStream(bundlePath_)
|
|
286
|
+
}))
|
|
287
|
+
}
|
|
288
|
+
const bundleEntry_ = ff_core_Pair.Pair(bundleAssetPath_, (() => {
|
|
289
|
+
bundle_();
|
|
290
|
+
return ff_core_Path.Path_readStream(bundlePath_)
|
|
291
|
+
}));
|
|
292
|
+
const mapEntry_ = ff_core_Pair.Pair(mapAssetPath_, (() => {
|
|
293
|
+
bundle_();
|
|
294
|
+
return ff_core_Path.Path_readStream(mapPath_)
|
|
295
|
+
}));
|
|
296
|
+
return [bundleEntry_, mapEntry_]
|
|
297
|
+
})), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))
|
|
298
|
+
}
|
|
229
299
|
}
|
|
230
300
|
|
|
231
301
|
export function BuildSystem_buildMode(self_) {
|
|
@@ -274,18 +344,52 @@ const browserOutputPath_ = (await ff_core_BuildSystem.internalPath_$(self_, ".fi
|
|
|
274
344
|
const runPaths_ = (await ff_core_Stream.Stream_toList$((await ff_core_Stream.Stream_filter$((await ff_core_BuildSystem.internalListPath_$(browserOutputPath_, $task)), (async (_w1, $task) => {
|
|
275
345
|
return ff_core_String.String_endsWith((await ff_core_Path.Path_base$(_w1, $task)), ".run.mjs")
|
|
276
346
|
}), $task)), $task));
|
|
347
|
+
if(((typeof globalThis.ffDevelopMode) === "undefined")) {
|
|
277
348
|
const outputPath_ = ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(ff_core_List.List_grabFirst(runPaths_), $task)));
|
|
349
|
+
const start_ = (await ff_core_Task.Task_elapsed$((await ff_core_BuildSystem.BuildSystem_mainTask$(self_, $task)), $task));
|
|
278
350
|
(await ff_core_BuildSystem.internalBrowserCallEsBuild_$(self_, (await ff_core_List.List_map$(runPaths_, (async (_w1, $task) => {
|
|
279
351
|
return (await ff_core_Path.Path_absolute$(_w1, $task))
|
|
280
352
|
}), $task)), (await ff_core_Path.Path_absolute$(outputPath_, $task)), minify_, sourceMaps_, $task));
|
|
281
|
-
const bundlePaths_ = (await
|
|
282
|
-
|
|
283
|
-
|
|
353
|
+
const bundlePaths_ = (await ff_core_List.List_flatMap$(runPaths_, (async (p_, $task) => {
|
|
354
|
+
const outputPath_ = ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(p_, $task)));
|
|
355
|
+
const bundlePath_ = (await ff_core_Path.Path_slash$(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast((await ff_core_Path.Path_base$(p_, $task)), ".mjs")) + ".bundle.js"), $task));
|
|
356
|
+
const mapPath_ = (await ff_core_Path.Path_slash$(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast((await ff_core_Path.Path_base$(p_, $task)), ".mjs")) + ".bundle.js.map"), $task));
|
|
357
|
+
return [bundlePath_, mapPath_]
|
|
358
|
+
}), $task));
|
|
284
359
|
return ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap((await ff_core_List.List_map$(bundlePaths_, (async (p_, $task) => {
|
|
285
|
-
return ff_core_Pair.Pair(("/" +
|
|
360
|
+
return ff_core_Pair.Pair(("/" + ff_core_List.List_join((await ff_core_Path.Path_relativeListTo$(p_, browserOutputPath_, $task)), "/")), (async ($task) => {
|
|
286
361
|
return (await ff_core_Path.Path_readStream$(p_, $task))
|
|
287
362
|
}))
|
|
288
363
|
}), $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))
|
|
364
|
+
} else {
|
|
365
|
+
let built_ = ff_core_Set.new_();
|
|
366
|
+
const lock_ = (await ff_core_Task.Task_lock$((await ff_core_BuildSystem.BuildSystem_mainTask$(self_, $task)), $task));
|
|
367
|
+
return ff_core_AssetSystem.AssetSystem(ff_core_List.List_toMap((await ff_core_List.List_flatMap$(runPaths_, (async (p_, $task) => {
|
|
368
|
+
const outputPath_ = ff_core_Option.Option_grab((await ff_core_Path.Path_parent$(p_, $task)));
|
|
369
|
+
const bundlePath_ = (await ff_core_Path.Path_slash$(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast((await ff_core_Path.Path_base$(p_, $task)), ".mjs")) + ".bundle.js"), $task));
|
|
370
|
+
const mapPath_ = (await ff_core_Path.Path_slash$(outputPath_, (ff_core_Option.Option_grab(ff_core_String.String_removeLast((await ff_core_Path.Path_base$(p_, $task)), ".mjs")) + ".bundle.js.map"), $task));
|
|
371
|
+
const bundleAssetPath_ = ("/" + ff_core_List.List_join((await ff_core_Path.Path_relativeListTo$(bundlePath_, browserOutputPath_, $task)), "/"));
|
|
372
|
+
const mapAssetPath_ = ("/" + ff_core_List.List_join((await ff_core_Path.Path_relativeListTo$(mapPath_, browserOutputPath_, $task)), "/"));
|
|
373
|
+
async function bundle_$($task) {
|
|
374
|
+
(await ff_core_Lock.Lock_do$(lock_, (async ($task) => {
|
|
375
|
+
if((!ff_core_Set.Set_contains(built_, (await ff_core_Path.Path_absolute$(p_, $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))) {
|
|
376
|
+
(await ff_core_BuildSystem.internalBrowserCallEsBuild_$(self_, [(await ff_core_Path.Path_absolute$(p_, $task))], (await ff_core_Path.Path_absolute$(outputPath_, $task)), minify_, sourceMaps_, $task));
|
|
377
|
+
built_ = ff_core_Set.Set_add(built_, (await ff_core_Path.Path_absolute$(p_, $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String)
|
|
378
|
+
};
|
|
379
|
+
return (await ff_core_Path.Path_readStream$(bundlePath_, $task))
|
|
380
|
+
}), $task))
|
|
381
|
+
}
|
|
382
|
+
const bundleEntry_ = ff_core_Pair.Pair(bundleAssetPath_, (async ($task) => {
|
|
383
|
+
(await bundle_$($task));
|
|
384
|
+
return (await ff_core_Path.Path_readStream$(bundlePath_, $task))
|
|
385
|
+
}));
|
|
386
|
+
const mapEntry_ = ff_core_Pair.Pair(mapAssetPath_, (async ($task) => {
|
|
387
|
+
(await bundle_$($task));
|
|
388
|
+
return (await ff_core_Path.Path_readStream$(mapPath_, $task))
|
|
389
|
+
}));
|
|
390
|
+
return [bundleEntry_, mapEntry_]
|
|
391
|
+
}), $task)), ff_core_Ordering.ff_core_Ordering_Order$ff_core_String_String))
|
|
392
|
+
}
|
|
289
393
|
}
|
|
290
394
|
|
|
291
395
|
export async function BuildSystem_buildMode$(self_, $task) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/BuildSystem.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
|
-
"capability BuildSystem {}\r\n\r\nextend self: BuildSystem {\r\n\r\n compileForBrowser(mainFiles: List[String]): AssetSystem {\r\n // TODO: Check that the mainFile is in the current package directory\r\n internalCompile(self, mainFiles.map {internalPath(self, _)}, \"browser\")\r\n let streams = internalListDirectory(internalPath(self, \".firefly/output/browser\"))\r\n let mainPackagePair = internalMainPackagePair(self)\r\n AssetSystem(streams.toMap())\r\n }\r\n\r\n bundleForBrowser(mainFiles: List[String], minify: Bool = True, sourceMaps: Bool = False): AssetSystem {\r\n internalCompile(self, mainFiles.map {internalPath(self, _)}, \"browser\")\r\n let browserOutputPath = internalPath(self, \".firefly/output/browser\")\r\n let runPaths = internalListPath(browserOutputPath).filter {_.base().endsWith(\".run.mjs\")}.toList()\r\n let outputPath = runPaths.grabFirst().parent().grab()\r\n
|
|
7
|
+
"capability BuildSystem {}\r\n\r\nextend self: BuildSystem {\r\n\r\n compileForBrowser(mainFiles: List[String]): AssetSystem {\r\n // TODO: Check that the mainFile is in the current package directory\r\n internalCompile(self, mainFiles.map {internalPath(self, _)}, \"browser\")\r\n let streams = internalListDirectory(internalPath(self, \".firefly/output/browser\"))\r\n let mainPackagePair = internalMainPackagePair(self)\r\n AssetSystem(streams.toMap())\r\n }\r\n\r\n bundleForBrowser(mainFiles: List[String], minify: Bool = True, sourceMaps: Bool = False): AssetSystem {\r\n internalCompile(self, mainFiles.map {internalPath(self, _)}, \"browser\")\r\n let browserOutputPath = internalPath(self, \".firefly/output/browser\")\r\n let runPaths = internalListPath(browserOutputPath).filter {_.base().endsWith(\".run.mjs\")}.toList()\r\n if(Js.globalThis()->ffDevelopMode.typeof() == \"undefined\") {\r\n let outputPath = runPaths.grabFirst().parent().grab()\r\n let start = self.mainTask().elapsed()\r\n internalBrowserCallEsBuild(self, runPaths.map {_.absolute()}, outputPath.absolute(), minify, sourceMaps)\r\n let bundlePaths = runPaths.flatMap {p =>\r\n let outputPath = p.parent().grab()\r\n let bundlePath = outputPath.slash(p.base().removeLast(\".mjs\").grab() + \".bundle.js\")\r\n let mapPath = outputPath.slash(p.base().removeLast(\".mjs\").grab() + \".bundle.js.map\")\r\n [bundlePath, mapPath]\r\n }\r\n AssetSystem(bundlePaths.map {p => \r\n Pair(\"/\" + p.relativeListTo(browserOutputPath).join(\"/\"), {p.readStream()})\r\n }.toMap())\r\n } else {\r\n mutable built = Set.new()\r\n let lock = self.mainTask().lock()\r\n AssetSystem(runPaths.flatMap {p =>\r\n let outputPath = p.parent().grab()\r\n let bundlePath = outputPath.slash(p.base().removeLast(\".mjs\").grab() + \".bundle.js\")\r\n let mapPath = outputPath.slash(p.base().removeLast(\".mjs\").grab() + \".bundle.js.map\")\r\n let bundleAssetPath = \"/\" + bundlePath.relativeListTo(browserOutputPath).join(\"/\")\r\n let mapAssetPath = \"/\" + mapPath.relativeListTo(browserOutputPath).join(\"/\")\r\n function bundle() {\r\n lock.do {\r\n if(!built.contains(p.absolute())) {\r\n internalBrowserCallEsBuild(self, [p.absolute()], outputPath.absolute(), minify, sourceMaps)\r\n built = built.add(p.absolute())\r\n }\r\n bundlePath.readStream()\r\n }\r\n }\r\n let bundleEntry = Pair(bundleAssetPath, {\r\n bundle()\r\n bundlePath.readStream()\r\n })\r\n let mapEntry = Pair(mapAssetPath, {\r\n bundle()\r\n mapPath.readStream()\r\n })\r\n [bundleEntry, mapEntry]\r\n }.toMap())\r\n }\r\n }\r\n\r\n buildMode(): Bool {\r\n !!self!->\"buildMode_\"?\r\n }\r\n \r\n setAssets(assetSystem: AssetSystem): Unit {\r\n self!->\"assets_\" = assetSystem!\r\n }\r\n\r\n packageAssets(): AssetSystem {\r\n let streams = internalListDirectory(internalPath(self, \".\"))\r\n AssetSystem(streams.toMap())\r\n }\r\n\r\n dependencyAssets(user: String, package: String): AssetSystem {\r\n panic(\"dependencyAssets not yet implemented\")\r\n }\r\n\r\n arguments(): List[String] {\r\n self!->\"array_\"?\r\n }\r\n\r\n mainTask(): Task {\r\n self!->\"task_\"?\r\n }\r\n\r\n crypto(): Crypto {\r\n Js->crypto?\r\n }\r\n \r\n}\r\n\r\ninternalBrowserCallEsBuild(\r\n self: BuildSystem\r\n mainJsFiles: List[String]\r\n outputPath: String\r\n minify: Bool\r\n sourceMap: Bool\r\n): Unit {\r\n let esbuild = Js.import(\"esbuild\")\r\n Js.await(esbuild->build(Js->(\r\n entryPoints = mainJsFiles\r\n bundle = True\r\n minify = minify\r\n sourcemap = sourceMap\r\n platform = \"browser\"\r\n target = \"es2017\"\r\n outdir = outputPath\r\n outExtension = Js.object().with(\".js\", \".bundle.js\")\r\n )))\r\n}\r\n\r\ninternalNodeCallEsBuild(\r\n self: NodeSystem\r\n mainJsFile: String\r\n outputPath: String\r\n minify: Bool\r\n): Unit {\r\n let esbuild = Js.import(\"esbuild\")\r\n Js.await(esbuild->build(Js->(\r\n entryPoints = [mainJsFile]\r\n bundle = True\r\n minify = minify\r\n sourcemap = True\r\n platform = \"node\"\r\n target = \"es2017\"\r\n external = [\"esbuild\", \"uws.js\"]\r\n loader = Js.object().with(\".node\", \"copy\")\r\n outfile = outputPath\r\n ))) \r\n}\r\n\r\ninternalNodeCallEsBuildContext(\r\n self: NodeSystem\r\n mainJsFile: String\r\n outputPath: String\r\n minify: Bool\r\n): JsValue {\r\n let esbuild = Js.import(\"esbuild\")\r\n Js.await(esbuild->context(Js->(\r\n entryPoints = [mainJsFile]\r\n bundle = True\r\n minify = minify\r\n sourcemap = True\r\n platform = \"node\"\r\n target = \"es2017\"\r\n external = [\"esbuild\", \"uws.js\"]\r\n loader = Js.object().with(\".node\", \"copy\")\r\n outfile = outputPath\r\n ))) \r\n}\r\n\r\ninternalListDirectory(path: Path): List[Pair[String, () => Stream[Buffer]]] {\r\n function go(currentPath: Path): Stream[Path] {\r\n currentPath.entries().flatMap {file =>\r\n if(file.isDirectory()) {\r\n go(file.path())\r\n } else {\r\n [file.path()].toStream()\r\n }\r\n }\r\n }\r\n go(path).map {file =>\r\n Pair(\"/\" + file.relativeTo(path).replace(\"\\\\\", \"/\"), {file.readStream()})\r\n }.toList()\r\n}\r\n\r\ninternalListPath(path: Path): Stream[Path] {\r\n path.entries().flatMap {file =>\r\n if(file.isDirectory()) {\r\n internalListPath(file.path())\r\n } else {\r\n [file.path()].toStream()\r\n }\r\n }\r\n}\r\n\r\ninternalPath(buildSystem: BuildSystem, absoluteOrRelative: String): Path {\r\n let nodePath = Js.import(\"path\")\r\n Path(nodePath->resolve(absoluteOrRelative)?)\r\n}\r\n\r\ninternalCompile(buildSystem: BuildSystem, mainFiles: List[Path], target: String): Unit {\r\n if(Js.globalThis()->ffDevelopMode.typeof() != \"undefined\") {\r\n Js->process->send(Js->(\r\n ffDevelopMode = \"internalCompile\"\r\n mainFiles = mainFiles.map {_.absolute()}\r\n target = target\r\n ))\r\n Js.awaitCancellablePromise {resolve, reject, cleanup =>\r\n Js->process->on(\"message\", Js->{message => \r\n if(message->ffDevelopMode === \"internalCompile\") {\r\n resolve(Unit) // Handle errors?\r\n }\r\n })\r\n }\r\n } else:\r\n // Ported from the old FFI. It's quite fragile w.r.t. changes in code generation.\r\n Js.await(Js.rawIdentifier(\"$firefly_compiler\")->\"buildViaBuildSystem_$\"(\r\n buildSystem! \r\n internalPath(buildSystem, buildSystem!->\"fireflyPath_\"?)!\r\n mainFiles!\r\n target\r\n Js.undefined()\r\n Js.undefined()\r\n Js.currentTask()!\r\n ))\r\n}\r\n\r\ninternalMainPackagePair(buildSystem: BuildSystem): Pair[String, String] {\r\n Pair(buildSystem!->\"mainPackagePair_\"->\"group_\"?, buildSystem!->\"mainPackagePair_\"->\"name_\"?)\r\n}\r\n"
|
|
8
8
|
],
|
|
9
9
|
"names": [
|
|
10
10
|
"internalBrowserCallEsBuild",
|
|
@@ -25,7 +25,10 @@
|
|
|
25
25
|
"internalNodeCallEsBuild",
|
|
26
26
|
"mainJsFile",
|
|
27
27
|
"external",
|
|
28
|
+
"loader",
|
|
28
29
|
"outfile",
|
|
30
|
+
"internalNodeCallEsBuildContext",
|
|
31
|
+
"context",
|
|
29
32
|
"internalListDirectory",
|
|
30
33
|
"path",
|
|
31
34
|
"go",
|
|
@@ -50,9 +53,18 @@
|
|
|
50
53
|
"resolve",
|
|
51
54
|
"internalCompile",
|
|
52
55
|
"mainFiles",
|
|
56
|
+
"ffDevelopMode",
|
|
57
|
+
"\"process\"",
|
|
58
|
+
"send",
|
|
59
|
+
"w1",
|
|
60
|
+
"absolute",
|
|
61
|
+
"awaitCancellablePromise",
|
|
62
|
+
"reject",
|
|
63
|
+
"cleanup",
|
|
64
|
+
"on",
|
|
65
|
+
"message",
|
|
53
66
|
"internalMainPackagePair",
|
|
54
67
|
"compileForBrowser",
|
|
55
|
-
"w1",
|
|
56
68
|
"streams",
|
|
57
69
|
"mainPackagePair",
|
|
58
70
|
"AssetSystem",
|
|
@@ -67,9 +79,27 @@
|
|
|
67
79
|
"grab",
|
|
68
80
|
"parent",
|
|
69
81
|
"grabFirst",
|
|
70
|
-
"
|
|
82
|
+
"start",
|
|
83
|
+
"elapsed",
|
|
84
|
+
"mainTask",
|
|
71
85
|
"bundlePaths",
|
|
72
86
|
"p",
|
|
87
|
+
"bundlePath",
|
|
88
|
+
"slash",
|
|
89
|
+
"removeLast",
|
|
90
|
+
"mapPath",
|
|
91
|
+
"join",
|
|
92
|
+
"relativeListTo",
|
|
93
|
+
"built",
|
|
94
|
+
"new",
|
|
95
|
+
"lock",
|
|
96
|
+
"bundleAssetPath",
|
|
97
|
+
"mapAssetPath",
|
|
98
|
+
"do",
|
|
99
|
+
"contains",
|
|
100
|
+
"add",
|
|
101
|
+
"bundleEntry",
|
|
102
|
+
"mapEntry",
|
|
73
103
|
"buildMode",
|
|
74
104
|
"setAssets",
|
|
75
105
|
"assetSystem",
|
|
@@ -79,9 +109,8 @@
|
|
|
79
109
|
"package",
|
|
80
110
|
"panic",
|
|
81
111
|
"arguments",
|
|
82
|
-
"mainTask",
|
|
83
112
|
"crypto",
|
|
84
113
|
"\"crypto\""
|
|
85
114
|
],
|
|
86
|
-
"mappings": "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"
|
|
115
|
+
"mappings": "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"
|
|
87
116
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Channel.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"capability Channel[T](\r\n capacity: Int\r\n buffer: Array[T]\r\n readers: JsValue\r\n writers: JsValue\r\n)\r\n\r\nextend self[T]: Channel[T] {\r\n\r\n read(): T {\r\n readOr(self, {_}).wait()\r\n }\r\n\r\n write(message: T): Unit {\r\n writeOr(self, message, {}).wait()\r\n }\r\n\r\n}\r\n\r\n\r\ncapability ChannelAction[T](\r\n channel: Channel[JsValue]\r\n body: JsValue\r\n message: Option[JsValue]\r\n previous: Option[ChannelAction[T]]\r\n)\r\n\r\nextend self[T]: ChannelAction[T] {\r\n \r\n readOr[M](channel: Channel[M], body: M => T): ChannelAction[T] {\r\n ChannelAction(channel!?, body!, None, Some(self))\r\n }\r\n\r\n writeOr[M](channel: Channel[M], message: M, body: () => T): ChannelAction[T] {\r\n ChannelAction(channel!?, body!, Some(message!), Some(self))\r\n }\r\n\r\n wait(): T {\r\n internalRunChannelAction(self, None)\r\n }\r\n\r\n timeout(duration: Duration, body: () => T): T {\r\n internalRunChannelAction(self, Some(Pair(body, Some(duration))))\r\n }\r\n\r\n immediately(body: () => T): T {\r\n internalRunChannelAction(self, Some(Pair(body, None)))\r\n }\r\n\r\n}\r\n\r\nreadOr[M, T](channel: Channel[M], body: M => T): ChannelAction[T] {\r\n ChannelAction(channel!?, body!, None, None)\r\n}\r\n\r\nwriteOr[M, T](channel: Channel[M], message: M, body: () => T): ChannelAction[T] {\r\n ChannelAction(channel!?, body!, Some(message!), None)\r\n}\r\n\r\ninternalRunChannelAction[T](action: ChannelAction[T], mode: Option[Pair[() => T, Option[Duration]]]): T {\r\n Js.throwIfCancelled()\r\n \r\n // Convert the linked actions into an array.\r\n let actions = [].toArray()\r\n function findActions(action: ChannelAction[T]) {\r\n actions.push(action)\r\n action.previous.each {findActions(_)}\r\n }\r\n findActions(action)\r\n \r\n // If any reads or writes can be done immediately, do the first one and return.\r\n mutable foundPromise = None\r\n actions.eachWhile {action =>\r\n action.message.{\r\n | Some(message) {action.channel.readers->size !== 0} => \r\n let reader = action.channel.readers->values()->next()->value\r\n action.channel.readers->delete(reader)\r\n reader->resolve(message)\r\n foundPromise = Some(action.body.callValue1(Js.currentTask()!))\r\n | Some(message) {action.channel.buffer.size() < action.channel.capacity} =>\r\n action.channel.buffer.push(message)\r\n foundPromise = Some(action.body.callValue1(Js.currentTask()!))\r\n | Some(_) =>\r\n | None {action.channel.buffer.size() != 0} => \r\n action.channel.buffer.reverse()\r\n let message = action.channel.buffer.pop()\r\n action.channel.buffer.reverse()\r\n foundPromise = Some(action.body.callValue2(message!, Js.currentTask()!))\r\n | None {action.channel.writers->size !== 0} => \r\n let writer = action.channel.writers->values()->next()->value\r\n action.channel.writers->delete(writer)\r\n writer->resolve()\r\n foundPromise = Some(action.body.callValue2(writer->message!, Js.currentTask()!))\r\n | None => \r\n }\r\n foundPromise.isEmpty()\r\n }\r\n foundPromise.map {Js.await(_)?}.else:\r\n \r\n // If there's an \"immediately(body)\" action, do that now.\r\n if(mode.any {_.second.isEmpty()}) {\r\n let makePromise = mode.grab().first\r\n Js.await(makePromise()!)?\r\n } else:\r\n \r\n // Otherwise, start waiting for one of the readers or writers (or timeout(body), or cancellation) to happen.\r\n let body = Js.awaitCancellablePromise {resolve, reject, onSettled =>\r\n mode.each {m =>\r\n let timeout = Js->setTimeout(Js->{resolve(m.first)}, m.second.grab().seconds * 1000.0)\r\n onSettled {_ => Js->clearTimeout(timeout)}\r\n }\r\n actions.each {action =>\r\n action.message.{\r\n | Some(message) => \r\n let writer = Js->(\r\n resolve = Js->{resolve({action.body.callValue1(Js.currentTask()!)?})}\r\n message = message\r\n )\r\n action.channel.writers->add(writer)\r\n onSettled {_ => action.channel.writers->delete(writer)}\r\n | None =>\r\n let reader = Js->(\r\n resolve = Js->{m =>\r\n resolve({action.body.callValue2(m, Js.currentTask()!)?})\r\n }\r\n )\r\n action.channel.readers->add(reader)\r\n onSettled {_ => action.channel.readers->delete(reader)}\r\n }\r\n }\r\n }\r\n body()\r\n \r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Char.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"newtype Char(codeUnit: Int)\r\n\r\nextend self: Char {\r\n\r\n isAsciiLetter(): Bool {self.isAsciiUpper() || self.isAsciiLower()}\r\n\r\n isAsciiLetterOrDigit(): Bool {self.isAsciiLetter() || self.isAsciiDigit()}\r\n\r\n isAsciiUpper(): Bool {self >= 'A' && self <= 'Z'}\r\n\r\n isAsciiLower(): Bool {self >= 'a' && self <= 'z'}\r\n\r\n isAsciiDigit(): Bool {self >= '0' && self <= '9'}\r\n\r\n toString(): String {\r\n Js->String->fromCharCode(self)?\r\n }\r\n\r\n}\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Core.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"if[T](condition: Bool, body: () => T): Option[T] {\r\n condition.{\r\n | False => None\r\n | True => Some(body())\r\n }\r\n}\r\n\r\nwhile(condition: () => Bool, body: () => Unit): Unit {\r\n condition().{\r\n | False =>\r\n | True =>\r\n body()\r\n tailcall while(condition, body)\r\n }\r\n}\r\n\r\ndoWhile(body: () => Bool): Unit {\r\n while {body()} {}\r\n}\r\n\r\ndoUntil[T](body: () => Option[T]): T {\r\n body().{\r\n | Some(v) => v\r\n | None => tailcall doUntil(body)\r\n }\r\n}\r\n\r\ndo[T](body: () => T): T {\r\n body()\r\n}\r\n\r\ntry[T](body: () => T): Try[T] {\r\n // Special cased by the compiler\r\n try {\r\n Success(body())\r\n } catchAny {e =>\r\n Failure(e)\r\n }\r\n}\r\n\r\nthrow[E: HasAnyTag: Show, T](exception: E): T {\r\n // Special cased by the compiler\r\n throw(exception)\r\n}\r\n\r\nthrowWithMessage[E: HasAnyTag, T](exception: E, message: String): T {\r\n // Special cased by the compiler\r\n throwWithMessage(exception, message)\r\n}\r\n\r\npanic[T](message: String): T {\r\n Js.throw(Js->Error->(message))\r\n}\r\n\r\ndata GrabException()\r\n"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": [
|
|
4
|
-
"
|
|
4
|
+
"../../../../core/Crypto.ff"
|
|
5
5
|
],
|
|
6
6
|
"sourcesContent": [
|
|
7
7
|
"capability Crypto {}\r\n\r\nextend self: Crypto {\r\n \r\n randomUuid(): String {\r\n self!->randomUUID()?\r\n }\r\n \r\n randomBuffer(size: Int): Buffer {\r\n let buffer = Buffer.new(size)\r\n self.randomizeBuffer(buffer)\r\n buffer\r\n }\r\n\r\n randomizeBuffer(buffer: Buffer): Unit {\r\n self!->getRandomValues(Js->Uint8Array->(buffer!->buffer, buffer!->byteOffset, buffer!->byteLength))\r\n }\r\n\r\n hmacSha256(key: Buffer, buffer: Buffer): Buffer {\r\n Js.throwIfCancelled()\r\n let cryptoKey = Js.await(self!->subtle->importKey(\r\n \"raw\"\r\n key!\r\n Js->(name = \"HMAC\", hash = Js->(name = \"SHA-256\"))\r\n False\r\n [\"sign\"]\r\n ))\r\n let signature = Js.await(self!->subtle->sign(\r\n \"HMAC\"\r\n cryptoKey\r\n buffer!\r\n )) \r\n Js->DataView->(signature)?\r\n }\r\n \r\n sha256(buffer: Buffer): Buffer {\r\n Js.throwIfCancelled()\r\n let hash = Js.await(self!->subtle->digest(\"SHA-256\", buffer))\r\n Js->DataView->(hash)?\r\n }\r\n\r\n hashPassword(password: String, iterations: Int = 600000): String {\r\n let salt = self.randomBuffer(16)\r\n let hash = internalHashPassword(self, salt, password.toBuffer(), iterations)\r\n \"$pbkdf2-sha256-hex$\" + iterations + \"$\" + salt.toHex() + \"$\" + hash.toHex()\r\n }\r\n \r\n checkPassword(password: String, passwordHash: String): Bool {\r\n passwordHash.split('$').{\r\n | [\"\", \"pbkdf2-sha256-hex\", iterationsText, saltText, hashText] {\r\n iterationsText.getInt() | Some(iterations)\r\n } =>\r\n let computedHash = \r\n internalHashPassword(self, Buffer.fromHex(saltText), password.toBuffer(), iterations)\r\n let hash = Buffer.fromHex(hashText)\r\n self.constantTimeEquals(computedHash, hash)\r\n | _ => False\r\n }\r\n }\r\n\r\n constantTimeEquals(buffer1: Buffer, buffer2: Buffer): Bool {\r\n if(buffer1.size() != buffer2.size()) {False} else: \r\n mutable v = 0\r\n mutable i = 0\r\n while {i < buffer1.size()} {\r\n v = v.bitOr(buffer1.grabUint8(i).bitXor(buffer2.grabUint8(i)))\r\n i += 1\r\n }\r\n v == 0\r\n }\r\n\r\n}\r\n\r\ninternalHashPassword(system: Crypto, salt: Buffer, password: Buffer, iterations: Int): Buffer {\r\n Js.throwIfCancelled()\r\n let keyMaterial = Js.await(system!->subtle->importKey(\r\n \"raw\"\r\n password!\r\n Js->(name = \"PBKDF2\")\r\n False\r\n [\"deriveBits\"]\r\n ))\r\n let hashBuffer = Js.await(system!->subtle->deriveBits(\r\n Js->(\r\n name = \"PBKDF2\"\r\n salt = salt\r\n iterations = iterations\r\n hash = \"SHA-256\"\r\n )\r\n keyMaterial\r\n 256\r\n ))\r\n Js->DataView->(hashBuffer)?\r\n}\r\n"
|