diff options
author | Kai WU <kaiwu2004@gmail.com> | 2024-07-19 17:33:28 +0800 |
---|---|---|
committer | Kai WU <kaiwu2004@gmail.com> | 2024-07-19 17:33:28 +0800 |
commit | 787dd934e1b8ae772a1e810be1c6e2d5c7a33a00 (patch) | |
tree | c97b69d44a3e1ca0c6d54a0a69fb16ad6785749a | |
parent | 12e0a14fc106afe64d6ef0a22c025c0b4f9fb1d7 (diff) | |
download | wechat_dev_tools-787dd934e1b8ae772a1e810be1c6e2d5c7a33a00.tar.gz wechat_dev_tools-787dd934e1b8ae772a1e810be1c6e2d5c7a33a00.zip |
esbuild returns?
-rw-r--r-- | package.json | 5 | ||||
-rw-r--r-- | src/build.gleam | 88 |
2 files changed, 80 insertions, 13 deletions
diff --git a/package.json b/package.json index 56aebeb..5f818b6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,10 @@ "name": "gleam-wechat-dev-tools", "version": "0.1.0", "description": "build wechat miniprogram with gleam", - "scripts": {}, + "scripts": { + "build": "gleam run -m build", + "clean": "rm -rf dist/*" + }, "author": "Kai WU", "license": "MIT", "dependencies": { 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 } |