aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKai WU <kaiwu2004@gmail.com>2024-07-19 17:33:28 +0800
committerKai WU <kaiwu2004@gmail.com>2024-07-19 17:33:28 +0800
commit787dd934e1b8ae772a1e810be1c6e2d5c7a33a00 (patch)
treec97b69d44a3e1ca0c6d54a0a69fb16ad6785749a /src
parent12e0a14fc106afe64d6ef0a22c025c0b4f9fb1d7 (diff)
downloadwechat_dev_tools-787dd934e1b8ae772a1e810be1c6e2d5c7a33a00.tar.gz
wechat_dev_tools-787dd934e1b8ae772a1e810be1c6e2d5c7a33a00.zip
esbuild returns?
Diffstat (limited to 'src')
-rw-r--r--src/build.gleam88
1 files changed, 76 insertions, 12 deletions
diff --git a/src/build.gleam b/src/build.gleam
index a35e8aa..2b26915 100644
--- a/src/build.gleam
+++ b/src/build.gleam
@@ -1,15 +1,9 @@
-// import gleam/string
+import gleam/io
+import gleam/list
+import gleam/string
+import gleam/result
import gleam/javascript/promise.{type Promise}
-// import bundle
-
-// const entry = "./build/dev/javascript/wechat_dev_tools/bundle.mjs"
-// const app_content = "import { app } from './bundle.mjs'; app()"
-// const dist = "./dist/"
-// const src = "./src/"
-//
-// fn page_content(p: String) -> String {
-// "improt { pages, page } from './bundle.mjs'; page(pages(), \"" <> p <> "\")"
-// }
+import bundle
@external(javascript, "./build_ffi.mjs", "bundle_build")
pub fn bundle_build(entry f: String, outfile o: String) -> Promise(Result(Nil, String))
@@ -26,6 +20,76 @@ pub fn wxml_build(wxml f: String, outfile o: String) -> Promise(Result(Nil, Stri
@external(javascript, "./build_ffi.mjs", "less_build")
pub fn less_build(less f: String, outfile o: String) -> Promise(Result(Nil, String))
+const entry = "./build/dev/javascript/wechat_dev_tools/bundle.mjs"
+const app_content = "import { app } from './bundle.mjs'; app()"
+const dist = "./dist/"
+const src = "./src/"
+
+pub type Builder = fn(String, String) -> Promise(Result(Nil, String))
+
+pub type Asset {
+ Asset(src: String, dist: String, builder: Builder)
+}
+
+fn file_path(path: String, p: String, t: String) -> String {
+ string.concat([ path, p, "/", p, ".", t, ])
+}
+
+fn page_content(p: String) -> String {
+ string.concat([
+ "improt { pages, page } from './bundle.mjs'; page(pages(), \"",
+ p,
+ "\")",
+ ])
+}
+
+fn bundle_asset() -> List(Asset) {
+ [ Asset(entry, dist <> "bundle.mjs", bundle_build) ]
+}
+
+fn app_assets() -> List(Asset) {
+ [ Asset(app_content, dist <> "app.js", js_build),
+ Asset(src <> "app.json", dist <> "app.json", json_build),
+ Asset(src <> "less", dist <> "app.wxss", less_build) ]
+}
+
+fn page_assets(p: String) -> List(Asset) {
+ [ Asset(page_content(p), file_path(dist, p, "js"), js_build),
+ Asset(file_path(src, p, "json"), file_path(dist, p, "json"), json_build),
+ Asset(file_path(src, p, "wxml"), file_path(dist, p, "wxml"), wxml_build),
+ Asset(file_path(src, p, "less"), file_path(dist, p, "wxss"), less_build) ]
+}
+
+fn pages_assets() -> List(Asset) {
+ bundle.pages()
+ |> list.map(fn(p) { p.0 })
+ |> list.flat_map(fn(p) { page_assets(p) })
+}
+
+fn fold_result(r0: Result(Nil, String), r: Result(Nil, String)) -> Result(Nil, String) {
+ case r {
+ Ok(Nil) -> r0
+ Error(_) -> r
+ }
+}
+
+fn build(ass: List(Asset)) -> Promise(Result(Nil, String)) {
+ ass
+ |> list.map(fn(a) { a.builder(a.src, a.dist) })
+ |> promise.await_list
+ |> promise.map(fn(ls) {
+ ls
+ |> list.fold(Ok(Nil), fold_result)
+ })
+}
+
pub fn main() {
- Nil
+ use r0 <- promise.await(build(bundle_asset()))
+ use r1 <- promise.await(build(app_assets()))
+ use r2 <- promise.await(build(pages_assets()))
+
+ [r0, r1, r2]
+ |> list.fold(Ok(Nil), fold_result)
+ |> result.map_error(fn (e) { io.println(e) })
+ |> promise.resolve
}