aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/build.gleam31
-rw-r--r--src/build_ffi.mjs19
2 files changed, 22 insertions, 28 deletions
diff --git a/src/build.gleam b/src/build.gleam
index f0da63d..9f5a02b 100644
--- a/src/build.gleam
+++ b/src/build.gleam
@@ -1,31 +1,36 @@
-import gleam/io
+// import gleam/io
+// import gleam/result
import gleam/javascript/promise.{type Promise}
-import gleam/result
pub const prefix = "glv8"
@external(javascript, "./build_ffi.mjs", "bundle_build")
pub fn bundle_build(
- entry f: String,
+ entry e: String,
global g: String,
+ banner b: String,
+ footer f: String,
outfile o: String,
-) -> Promise(Result(Nil, String))
-
-@external(javascript, "./build_ffi.mjs", "copy_build")
-pub fn copy_build(
- json f: String,
- outfile o: String,
-) -> Promise(Result(Nil, String))
+) -> Promise(Result(String, String))
const entry = "./build/dev/javascript/glv8/bundle.mjs"
const dist = "./dist/"
+const banner = "CREATE OR REPLACE FUNCTION glv8_init() RETURNS void LANGUAGE plv8 AS $function$"
+
+const footer = " = app.exports(); $function$"
+
pub fn main() {
- use r <- promise.await(bundle_build(entry, "app", dist <> "app.js"))
- use _ <- promise.await(copy_build(dist <> "app.js", dist <> "glv8_init.sql"))
+ use r <- promise.await(bundle_build(
+ entry,
+ "app",
+ banner,
+ prefix <> footer,
+ dist <> "glv8_init.sql",
+ ))
r
- |> result.map_error(fn(e) { io.println_error(e) })
+ // |> result.map_error(fn(e) { io.println_error(e) })
|> promise.resolve
}
diff --git a/src/build_ffi.mjs b/src/build_ffi.mjs
index 7a4c045..962562c 100644
--- a/src/build_ffi.mjs
+++ b/src/build_ffi.mjs
@@ -1,10 +1,12 @@
import { build, context } from 'esbuild'
import { Ok, Error } from "./gleam.mjs"
-export function bundle_build(entry, global, out) {
+export function bundle_build(entry, global, ba, fo, out) {
return new Promise(resolve => {
build({
entryPoints: [entry],
+ banner: {js: ba},
+ footer: {js: fo},
bundle: true,
minify: true,
keepNames: true,
@@ -12,23 +14,10 @@ export function bundle_build(entry, global, out) {
globalName: global,
outfile: out,
}).then(function(r){
- resolve(new Ok(undefined))
+ resolve(new Ok(Nil))
}).catch(function(e){
resolve(new Error(JSON.stringify(e)))
})
})
}
-export function copy_build(src, out) {
- return new Promise(resolve => {
- build({
- entryPoints: [src],
- loader: {'.js': 'copy'},
- outfile: out,
- }).then(function(r){
- resolve(new Ok(undefined))
- }).catch(function(e){
- resolve(new Error(JSON.stringify(e)))
- })
- })
-}