werkzeug
Version:
compiles ts, coffee, sass/scss, less/ stylus and packs browser ready bundles
123 lines (101 loc) • 3.47 kB
text/coffeescript
class Pack
init: () ->
= .startIndex
= {}
= {}
()
() if .total == 1
null
prepare: () ->
console.log "packer: #{@cfg.path}, total packs: #{@cfg.total}"
= Date.now()
= 1
pack = .pack
= (index, chunk) =>
if chunk
return index, chunk
m = [index]
return m.exports if m
m = [index] =
require:
exports: {}
r = pack[index]
if r
try
r m, m.exports, m.require
catch e
console.log "Error requiring '#{index}': ", e.toString(), e.stack
else
console.log "Error requiring '#{index}': module doesn't exist"
m.exports
document.addEventListener .type, (e) => (e)
null
getChunk: (index, chunk) ->
chunks = [chunk]
if [index]
resolver = (clazz) =>
new Promise((r) =>
m = index
if clazz
r(m[clazz])
else
r(m)
null)
else
if not chunks
chunks = [chunk] = []
script = document.createElement 'script'
script.src = chunk
document.body.appendChild script
loader = {}
resolve = () =>
console.log 'resolve promise: ', index
clazz = loader.clazz
m = index
if clazz
loader.r m[clazz]
else
loader.r m
loader.resolve = resolve
chunks.push loader
resolver = (clazz) ->
loader.clazz = clazz
new Promise((r) -> loader.r = r)
resolver
start: () ->
setTimeout () =>
t = Date.now()
now = Date.now()
console.log "packer total startup in #{now - @startTime}ms, module initialization in #{now - t}ms."
null
null
addPack: (pack) ->
for key, value of pack
if not .pack[key]
.pack[key] = value
else
console.log "Error adding module: module '#{key}' already exists"
null
handleEvent: (e) ->
detail = e.detail
if detail
detail.registered = true
pack = detail.pack
if pack
console.log "add #{if detail.chunk then 'chunk' else 'pack'}: ", detail.path
pack
else
console.log "Error adding pack: pack doesn't exists in details: ", detail
else
console.log "Error adding pack: detail doesn't exist in event: ", event
chunk = detail.chunk
if not chunk
= detail.startIndex if detail.index == 0
() if ++ == .total
else
chunks = [chunk]
if chunks
loader.resolve() for loader in chunks
null
return new Pack()