aboutsummaryrefslogtreecommitdiffstats
path: root/bundle.moon
diff options
context:
space:
mode:
authors-ol <s-ol@users.noreply.github.com>2018-11-08 06:17:17 +0000
committers-ol <s-ol@users.noreply.github.com>2018-11-08 06:17:17 +0000
commitd11441884740d394f73f1a145b502e270482a2d2 (patch)
tree8ce1258d8f66a65945b611b6a2836eadd5861889 /bundle.moon
parentadd $order mechanism (diff)
downloadmmm-d11441884740d394f73f1a145b502e270482a2d2.tar.gz
mmm-d11441884740d394f73f1a145b502e270482a2d2.zip
recursive tup stuff
Diffstat (limited to 'bundle.moon')
-rw-r--r--bundle.moon56
1 files changed, 42 insertions, 14 deletions
diff --git a/bundle.moon b/bundle.moon
index 5d855ea..8e277c7 100644
--- a/bundle.moon
+++ b/bundle.moon
@@ -2,23 +2,51 @@ output_name = assert arg[1], "please specify the output directory"
escape = (str) -> string.format '%q', str
+readfile = (name) ->
+ file = io.open name, 'r'
+ with file\read '*all'
+ file\close
+
with io.open output_name, 'w'
- \write "local p = package.preload\n"
+ -- final wrap mode
+ if arg[2] == '--wrap'
+ assert #arg == 3, "too many arguments for 'wrap' mode"
+ bundle = arg[3]
+
+ bundle = dofile bundle
+ \write "local p = package.preload\n"
+ for { :module, :file, :source } in *bundle
+ module = escape module
+ \write "if not p[#{module}] then p[#{module}] = load(#{escape source}, #{escape file}) end\n"
- for i=2, #arg
- file_name = arg[i]
+ -- iterative bundling mode
+ else
+ \write "return {\n"
- file = io.open file_name, 'r'
- code = file\read '*all'
- file\close!
+ for i=2, #arg
+ file = arg[i]
- module = file_name\gsub '/', '.'
- module = module\gsub '%.lua$', ''
- module = module\gsub '%.init$', ''
- module = module\match '^dist%.(.*)'
+ if dirname = file\match '^([%w-_]+)/%.bundle%.lua$'
+ bundle = dofile file
+ for { :module, :file, :source } in *bundle
+ \write "
+{
+ module = #{escape dirname .. '.' .. module},
+ file = #{escape dirname .. '/' .. file},
+ source = #{escape source},
+},
+ "
+ else
+ module = file\gsub '%.lua$', ''
+ module = module\gsub '%.init$', ''
+ \write "
+{
+ module = #{escape module},
+ file = #{escape file},
+ source = #{escape readfile file},
+},
+ "
- file_name = escape file_name
- code = escape code
- module = escape module
+ \write "}"
- \write "if not p[#{module}] then p[#{module}] = load(#{code}, #{file_name}) end\n"
+ \close!