firefly-compiler 0.5.82 → 0.5.83

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.
@@ -229,7 +229,7 @@ extend self: JsEmitter {
229
229
  "await " + mainName + "_$(system, $task)"
230
230
  ]} else {[]}
231
231
  ...if(self.emitTarget == EmitBuild) {[
232
- "await $firefly_compiler.internalCreateExecutable_$(system, '.firefly/output/executable/Main.bundle.js', '.firefly/output', ['host'], system.assets_, $task)"
232
+ // "await $firefly_compiler.internalCreateExecutable_$(system, '.firefly/output/executable/Main.bundle.js', '.firefly/output', ['host'], system.assets_, $task)"
233
233
  ]} else {[]}
234
234
  ...if(!willRunOnNode) {[]} else {[
235
235
  "} catch(error) {"
package/compiler/Main.ff CHANGED
@@ -63,13 +63,13 @@ main(system: NodeSystem): Unit {
63
63
  let resolvedDependencies = Dependencies.process(
64
64
  system.httpClient()
65
65
  DependencyLock.new(system.mainTask())
66
- system.path(mainFile + ".ff")
66
+ system.path(mainFile)
67
67
  )
68
68
  prepareFireflyDirectory(system.path("."))
69
69
  let mainPath = system.path(mainFile)
70
70
  let moduleKey = buildScript(system, mainPath, resolvedDependencies.mainPackagePair, EmitBuild, resolvedDependencies)
71
71
  buildScript(system, mainPath, resolvedDependencies.mainPackagePair, EmitExecutable, resolvedDependencies)
72
- bundleForPkg(system, resolvedDependencies.mainPackagePair, mainPath.base())
72
+ bundleForExecutable(system, resolvedDependencies.mainPackagePair, moduleKey)
73
73
  importAndRun(system, fireflyPath, "build", moduleKey, [])
74
74
 
75
75
  | CheckCommand(filePath) =>
@@ -276,11 +276,16 @@ parseCommandLine(arguments: List[String]): MainCommand {
276
276
  | [s, ...] => throw(CommandLineError("Unknown command '" + s + "'" + usageString))
277
277
  }
278
278
 
279
- bundleForPkg(system: NodeSystem, packagePair: PackagePair, mainFile: String) {
280
- let prefix = ".firefly/output/executable/"
281
- let mainJsFile = prefix + packagePair.groupName("/") + "/" + mainFile + ".mjs"
282
- let file = prefix + "Main.bundle.js"
283
- BuildSystem.internalNodeCallEsBuild(system, mainJsFile, outputPath = file, minify = False)
279
+ bundleForExecutable(system: NodeSystem, packagePair: PackagePair, moduleKey: ModuleKey) {
280
+ let packagePath = moduleKey.packagePair.groupName("/")
281
+ let outputPath = system.path(".firefly/output/executable/" + packagePath + "/")
282
+ let runFile = outputPath.slash(moduleKey.importName() + ".run.mjs")
283
+ BuildSystem.internalNodeCallEsBuild(
284
+ system,
285
+ runFile.absolute(),
286
+ outputPath.absolute(),
287
+ minify = True
288
+ )
284
289
  }
285
290
 
286
291
  bundleForBrowser(system: NodeSystem, packagePair: PackagePair, moduleKey: ModuleKey) {
@@ -125,8 +125,8 @@ internalNodeCallEsBuild(
125
125
  target = "es2017"
126
126
  external = ["esbuild", "uws.js"]
127
127
  loader = Js.object().with(".node", "copy")
128
- outfile = outputPath
129
- )))
128
+ outdir = outputPath
129
+ )))
130
130
  }
131
131
 
132
132
  internalNodeCallEsBuildContext(
@@ -0,0 +1,17 @@
1
+ FROM node:24
2
+ RUN mkdir /home/node/app && chown -R node:node /home/node/app
3
+ RUN mkdir /home/node/firefly && chown -R node:node /home/node/firefly
4
+ # COPY package*.json ./
5
+ USER node
6
+ WORKDIR /home/node/firefly
7
+ RUN npm install firefly-compiler
8
+ WORKDIR /home/node/app
9
+ COPY --chown=node:node . .
10
+ # This fetches Firefly packages but we should also do their npm install --no-bin-links
11
+ RUN [ "/home/node/firefly/node_modules/.bin/firefly", "check", "Main.ff" ]
12
+ EXPOSE 8080
13
+ ENTRYPOINT [ "/home/node/firefly/node_modules/.bin/firefly", "Main.ff" ]
14
+
15
+ # Test it with
16
+ # podman build -t my-image .
17
+ # podman run -it --name my-container my-image
@@ -0,0 +1,3 @@
1
+ nodeMain(system: NodeSystem) {
2
+ system.writeLine("Hello!")
3
+ }
@@ -0,0 +1,10 @@
1
+ **/.firefly/output/
2
+ **/.firefly/temporary/
3
+ **/.firefly/dependencies/
4
+ **/.firefly/include/package-lock.json
5
+ **/node_modules/
6
+ **/*_?_?_?.tar.gz
7
+ **/.DS_Store
8
+
9
+ Dockerfile
10
+ .dockerignore
@@ -0,0 +1,20 @@
1
+ FROM node:22
2
+ # See https://cheatsheetseries.owasp.org/cheatsheets/NodeJS_Docker_Cheat_Sheet.html
3
+ RUN apt update
4
+ RUN apt install dumb-init
5
+ USER node
6
+ RUN mkdir /home/node/app
7
+ RUN mkdir /home/node/firefly
8
+ WORKDIR /home/node/firefly
9
+ RUN npm install firefly-compiler
10
+ WORKDIR /home/node/app
11
+ RUN mkdir -p .firefly/output/executable
12
+ COPY --chown=node:node .firefly/output/executable .firefly/output/executable
13
+ # This fetches Firefly packages but we should also do their npm install --no-bin-links
14
+ RUN [ "/home/node/firefly/node_modules/.bin/firefly", "build", "Main.ff" ]
15
+ EXPOSE 8080
16
+ ENTRYPOINT [ "dumb-init", "node", ".firefly/output/executable/Main.bundle.js", "0.0.0.0", "8080" ]
17
+
18
+ # Test it with
19
+ # podman build -t fireflysite .
20
+ # podman run -p 8080:8080 --rm -it fireflysite
@@ -18,6 +18,7 @@ nodeMain(system: NodeSystem): Unit {
18
18
  let handlers = WebRouteHandler(Array.new())
19
19
  Router.handlers(handlers)
20
20
  let cacheSalt = system.crypto().randomBuffer(16)
21
+ Log.debug("Starting server on " + host + ":" + port)
21
22
  WebServer.new(system, host, port).listen {request =>
22
23
  let path = request.readPath()
23
24
  let segments = path.split('/').filter {s => s != "" && s != "." && s != ".."}
@@ -825,7 +825,7 @@ return (((("import {" + ff_compiler_JsEmitter.escapeKeyword_(buildMain_.signatur
825
825
  : []), ...(ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBuild(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget)
826
826
  ? [(("await " + mainName_) + "_$(system, $task)")]
827
827
  : []), ...(ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget.equals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBuild())
828
- ? ["await $firefly_compiler.internalCreateExecutable_$(system, '.firefly/output/executable/Main.bundle.js', '.firefly/output', ['host'], system.assets_, $task)"]
828
+ ? []
829
829
  : []), ...((!willRunOnNode_)
830
830
  ? []
831
831
  : ["} catch(error) {", "console.error(ff_core_Error.Error_stack(error))", "process.exit(1)"]), "} finally {", ...(ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget)
@@ -4439,7 +4439,7 @@ return (((("import {" + ff_compiler_JsEmitter.escapeKeyword_(buildMain_.signatur
4439
4439
  : []), ...(ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBuild(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget)
4440
4440
  ? [(("await " + mainName_) + "_$(system, $task)")]
4441
4441
  : []), ...(ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget.equals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBuild())
4442
- ? ["await $firefly_compiler.internalCreateExecutable_$(system, '.firefly/output/executable/Main.bundle.js', '.firefly/output', ['host'], system.assets_, $task)"]
4442
+ ? []
4443
4443
  : []), ...((!willRunOnNode_)
4444
4444
  ? []
4445
4445
  : ["} catch(error) {", "console.error(ff_core_Error.Error_stack(error))", "process.exit(1)"]), "} finally {", ...(ff_core_Equal.notEquals_(self_.emitTarget_, ff_compiler_JsEmitter.EmitBrowser(), ff_compiler_JsEmitter.ff_core_Equal_Equal$ff_compiler_JsEmitter_EmitTarget)