aboutsummaryrefslogtreecommitdiffstats
path: root/bundle_fileder.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_fileder.moon
parentadd $order mechanism (diff)
downloadmmm-d11441884740d394f73f1a145b502e270482a2d2.tar.gz
mmm-d11441884740d394f73f1a145b502e270482a2d2.zip
recursive tup stuff
Diffstat (limited to 'bundle_fileder.moon')
-rw-r--r--bundle_fileder.moon96
1 files changed, 96 insertions, 0 deletions
diff --git a/bundle_fileder.moon b/bundle_fileder.moon
new file mode 100644
index 0000000..7c0fb26
--- /dev/null
+++ b/bundle_fileder.moon
@@ -0,0 +1,96 @@
+package.moonpath = './?.server.moon;./?/init.server.moon;' .. package.moonpath
+require 'mmm.init'
+import Key from require 'mmm.mmmfs'
+import load_fileder, load_property from require 'mmm.mmmfs.fs'
+import to_lua from require 'moonscript.base'
+
+-- usage:
+-- moon bundle_fileder.moon <dirname> <facets>... -- <children>...
+{ dirname } = arg
+
+assert dirname, "please specify the fileder dirname"
+
+facets = {}
+children_bundles = {}
+
+do
+ addto = facets
+ for file in *arg[2,]
+ if file == '--'
+ addto = children_bundles
+ continue
+ table.insert addto, file
+
+-- dump a fileder subtree as Lua source
+dump_fileder = do
+ escape = (str) -> string.format '%q', tostring str
+
+ compile = (old, new, val) -> escape "-- this property has been transpiled from '#{old}'
+-- to '#{new}' for execution in the browser.
+-- refer to the original property as the source.
+#{to_lua val}"
+
+ _dump = (fileder, root=false) ->
+ code = "Fileder {"
+
+ for key, val in pairs fileder.props
+ code ..= "\n[#{escape key}] = #{escape val},"
+
+ if root and key.type\match '^text/moonscript %->'
+ newkey = Key key.name, key.type\gsub '^text/moonscript %-> (.*)', 'text/lua -> %1'
+ code ..= "\n[fromcache(#{escape newkey}, #{escape key})] = #{compile key, newkey, val},"
+
+ for child in *fileder.children
+ code ..= "\n#{_dump child},"
+
+ code ..= "\n}"
+ code
+
+
+ (fileder) -> "
+local mmmfs = require 'mmm.mmmfs'
+local Key, Fileder = mmmfs.Key, mmmfs.Fileder
+local function fromcache(str, orig)
+ local key = Key(str)
+ key.original = Key(orig)
+ return key
+end
+
+return #{_dump fileder, true}
+ "
+
+import Fileder from require 'mmm.mmmfs.fileder'
+import opairs from require 'mmm.ordered'
+
+with io.open '$bundle.lua', 'w'
+ \write dump_fileder with Fileder 'name: alpha': dirname
+ order = nil
+ children = {}
+
+ for facet in *facets
+ if facet == '$order'
+ order = [line for line in io.lines facet]
+ continue
+ key, value = load_property '', facet
+ .props[key] = value
+
+ for child in *children_bundles
+ -- @BUG: child bundles are malformed due to Tup bug ($ symbol)
+ child = child\gsub '/%.lua$', '/$bundle.lua'
+
+ dirname = assert child\match '^([%w-_%.]+)/%$bundle%.lua$'
+ children[dirname] = dofile child
+
+ if order
+ -- order from order file
+ for i, name in pairs order
+ child = assert children[name], "child in $order but not fs: #{name} of #{path}"
+ table.insert .children, child
+ children[name] = nil
+
+ -- sort remainder alphabeticalally
+ for name, child in opairs children
+ table.insert .children, child
+ warn "child #{name} of #{path} not in $order!" if order
+
+ \close!