mirror of
				https://github.com/fooflington/selfdefined.git
				synced 2025-10-31 06:08:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| require! {
 | |
|   '../library/fn/promise': Promise
 | |
|   './config': {list, experimental, libraryBlacklist, es5SpecialCase, banner}
 | |
|   fs: {readFile, writeFile, unlink}
 | |
|   path: {basename, dirname, join}
 | |
|   webpack, temp
 | |
| }
 | |
| 
 | |
| module.exports = ({modules = [], blacklist = [], library = no, umd = on})->
 | |
|   resolve, reject <~! new Promise _
 | |
|   let @ = modules.reduce ((memo, it)-> memo[it] = on; memo), {}
 | |
|     if @exp => for experimental => @[..] = on
 | |
|     if @es5 => for es5SpecialCase => @[..] = on
 | |
|     for ns of @
 | |
|       if @[ns]
 | |
|         for name in list
 | |
|           if name.indexOf("#ns.") is 0 and name not in experimental
 | |
|             @[name] = on
 | |
| 
 | |
|     if library => blacklist ++= libraryBlacklist
 | |
|     for ns in blacklist
 | |
|       for name in list
 | |
|         if name is ns or name.indexOf("#ns.") is 0
 | |
|           @[name] = no
 | |
| 
 | |
|     TARGET = temp.path {suffix: '.js'}
 | |
| 
 | |
|     err, info <~! webpack do
 | |
|       entry: list.filter(~> @[it]).map ~>
 | |
|         if library => join __dirname, '..', 'library', 'modules', it
 | |
|         else join __dirname, '..', 'modules', it
 | |
|       output:
 | |
|         path: dirname TARGET
 | |
|         filename: basename "./#TARGET"
 | |
|     if err => return reject err
 | |
| 
 | |
|     err, script <~! readFile TARGET
 | |
|     if err => return reject err
 | |
| 
 | |
|     err <~! unlink TARGET
 | |
|     if err => return reject err
 | |
| 
 | |
|     if umd
 | |
|       exportScript = """
 | |
|         // CommonJS export
 | |
|         if (typeof module != 'undefined' && module.exports) module.exports = __e;
 | |
|         // RequireJS export
 | |
|         else if (typeof define == 'function' && define.amd) define(function () { return __e; });
 | |
|         // Export to global object
 | |
|         else __g.core = __e;
 | |
|         """
 | |
|     else
 | |
|       exportScript = ""
 | |
| 
 | |
|     resolve """
 | |
|       #banner
 | |
|       !function(__e, __g, undefined){
 | |
|       'use strict';
 | |
|       #script
 | |
|       #exportScript
 | |
|       }(1, 1);
 | |
|       """ | 
