├── .gitignore ├── .npmignore ├── README.md ├── README_CN.md ├── index.js ├── lib └── execplugins.js ├── license ├── package-lock.json ├── package.json └── test ├── build ├── a.js ├── c.js ├── f.js ├── f2.js ├── k.js ├── m.js ├── q.js └── r.js ├── gulpfile.js ├── index.html ├── sea-debug.js ├── src ├── a.js ├── alias │ └── i.js ├── b.js ├── c.js ├── d.js ├── duplicate │ └── s.js ├── e.js ├── f.js ├── f2.js ├── foo │ └── bar │ │ └── biz │ │ └── p.js ├── g.js ├── h.js ├── j.js ├── k.js ├── l.js ├── m.js ├── o.js ├── q.js ├── r.js ├── s.js ├── tpl │ └── u.tpl └── zh-cn │ └── n.js └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .swap 4 | .orig 5 | .log 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .swap 4 | .orig 5 | .log 6 | test/gulpfile.js 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gulp-seajs-combo 2 | 3 | *** 4 | > seajs(CMD) Module combo pulgin for gulp [Chinese Docs](https://github.com/chenmnkken/gulp-seajs-combo/blob/master/README_CN.md) 5 | 6 | ## Install 7 | 8 | ``` 9 | $ npm install --save-dev gulp-seajs-combo 10 | ``` 11 | 12 | ## Usage 13 | 14 | ``` 15 | var gulp = require( 'gulp' ), 16 | seajsCombo = require( 'gulp-seajs-combo' ); 17 | 18 | gulp.task( 'seajscombo', function(){ 19 | return gulp.src( 'src/js/main.js' ) 20 | .pipe( seajsCombo() ) 21 | .pipe( gulp.task('build/js') ); 22 | }); 23 | ``` 24 | 25 | ## API 26 | 27 | ### seajsCombo( options ) 28 | 29 | Unsupported files are ignored. 30 | 31 | ### options 32 | 33 | #### encoding 34 | 35 | Type : `String` 36 | 37 | Default : `utf-8` 38 | 39 | #### ignore 40 | 41 | Type : `Array` 42 | 43 | Ignored module list. combo module `main`, need ignore dependencies `global` and `common`, configuration ignore list : 44 | 45 | ``` 46 | ignore : [ 'global', 'common' ] 47 | ``` 48 | 49 | Ignore configuration has two rules, if need ignore `src/a` and `src/test/a`: 50 | 51 | ``` 52 | ignore : [ 'a' ] 53 | ``` 54 | 55 | If `src/a` and `src/test/a` need ignore `src/test/a` 56 | 57 | ``` 58 | ignore : [ 'src/test/a' ] 59 | ``` 60 | 61 | #### map 62 | 63 | When use `seajs.use`, module id is `foo/bar/biz`, but the module file with respect to `gulp.src` path is `./biz.js`, use `map` configuration. 64 | 65 | ``` 66 | map : { 67 | 'foo/bar/biz' : './biz' 68 | } 69 | ``` 70 | 71 | #### plugins 72 | 73 | `plugins` for special module. A module need combo Handlebars tpl module, but tpl will compile before combo. 74 | 75 | ``` 76 | var handlebars = require( 'gulp-handlebars' ), 77 | wrap = require( 'gulp-wrap' ); 78 | 79 | ... 80 | plugins : [{ 81 | ext : [ '.tpl' ], 82 | use : [{ 83 | plugin : handlebars, 84 | },{ 85 | plugin : wrap, 86 | param : ['define(function(){return Handlebars.template(<%= contents %>)});'] 87 | }] 88 | }] 89 | ``` 90 | 91 | ## Combo rule 92 | 93 | Module `a.js` : 94 | 95 | ``` 96 | define(function(){ 97 | var b = require( 'deps/b' ); 98 | return 'a' + ' ' + b; 99 | }); 100 | ``` 101 | 102 | Module `b.js` : 103 | 104 | ``` 105 | define(function(){ 106 | return 'b'; 107 | }); 108 | ``` 109 | 110 | gulp code : 111 | 112 | ``` 113 | gulp.src( 'src/a.js' ) 114 | .pipe( seajsCombo() ) 115 | ... 116 | ``` 117 | 118 | Combined `a.js` : 119 | 120 | ``` 121 | define('b',function(){ 122 | return 'b'; 123 | }); 124 | define('a',['b'],function(){ 125 | var b = require( 'b' ); 126 | return 'a' + ' ' + b; 127 | }); 128 | ``` 129 | 130 | File `main.js` : 131 | 132 | ``` 133 | seajs.use( 'a' ); 134 | ``` 135 | 136 | Gulp code : 137 | 138 | ``` 139 | gulp.src( 'src/main.js' ) 140 | .pipe( seajsCombo() ) 141 | ... 142 | ``` 143 | 144 | Combined `main.js` : 145 | 146 | ``` 147 | define('b',function(){ 148 | return 'b'; 149 | }); 150 | define('a',['b'],function(){ 151 | var b = require( 'b' ); 152 | return 'a' + ' ' + b; 153 | }); 154 | seajs.use( 'a' ); 155 | ``` 156 | 157 | The combined module will keep none path id, `src/a` combined id is `a`, `foo/bar/p` combined id is `p`. 158 | 159 | If combined module id is duplicate, gulp-seajs-combo will modify original id. `src/a` and `src/test/a` combined id both is `a`, then gulp-seajs-combo will modify `src/test/a` id is `s_gulp_seajs_combo_xx`. 160 | 161 | ## Parse `seajs.config` 162 | 163 | `gulp-seajs-combo` will parse `alias` `vars` `paths` in `seajs.config`, other configuration is ignored, the configuration value must be a `String`, will ignored variable. see more [seajs.config](https://github.com/seajs/seajs/issues/262). [test/src/m.js](https://github.com/chenmnkken/gulp-seajs-combo/blob/master/test/src/m.js) and [test/build/m.js](https://github.com/chenmnkken/gulp-seajs-combo/blob/master/test/build/m.js) is parse example. 164 | 165 | ## License 166 | 167 | MIT @ [Yiguo Chan](https://github.com/chenmnkken) -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | # gulp-seajs-combo 2 | 3 | *** 4 | > 一个用于 seajs(CMD) 模块合并工具的 gulp 插件。 5 | 6 | ## 安装 7 | 8 | ``` 9 | $ npm install --save-dev gulp-seajs-combo 10 | ``` 11 | 12 | ## 使用 13 | 14 | ``` 15 | var gulp = require( 'gulp' ), 16 | seajsCombo = require( 'gulp-seajs-combo' ); 17 | 18 | gulp.task( 'seajscombo', function(){ 19 | return gulp.src( 'src/js/main.js' ) 20 | .pipe( seajsCombo() ) 21 | .pipe( gulp.task('build/js') ); 22 | }); 23 | ``` 24 | 25 | ## API 26 | 27 | ### seajsCombo( options ) 28 | 29 | 对于不支持的文件类型会直接忽略。 30 | 31 | ### options 32 | 33 | #### encoding 34 | 35 | Type : `String` 36 | 37 | Default : `utf-8` 38 | 39 | #### ignore 40 | 41 | Type : `Array` 42 | 43 | 忽略模块列表。合并模块 `main` 时想忽略其以来模块 `global` 和 `common`,那么其配置规则如下: 44 | 45 | ``` 46 | ignore : [ 'global', 'common' ] 47 | ``` 48 | 49 | 忽略配置有两种规则,如果需要忽略 `src/a` 和 `src/test/a` 2 个模块,直接配置不带路径的模块标识: 50 | 51 | ``` 52 | ignore : [ 'a' ] 53 | ``` 54 | 55 | 如果上面两个模块中只想忽略其中一个,那么配置具体的路径: 56 | 57 | ``` 58 | ignore : [ 'src/test/a' ] 59 | ``` 60 | 61 | #### map 62 | 63 | 使用 seajs.use 时,模块标识为 `foo/bar/biz`,但是模块的文件路径基于 `gulp.src` 解析出来的路径是 `./biz.js`,那么使用 `map` 配置来映射这种关系。 64 | 65 | ``` 66 | map : { 67 | 'foo/bar/biz' : './biz' 68 | } 69 | ``` 70 | 71 | #### plugins 72 | 73 | `plugins` 用于为特殊模块的合并提供插件接口。比如在合并一个 Handlebar 的 tpl 模块时,想在合并前对其进行编译,那么可以借助插件配置和其他 gulp 插件进行配合。 74 | 75 | ``` 76 | var handlebars = require( 'gulp-handlebars' ), 77 | wrap = require( 'gulp-wrap' ); 78 | 79 | ... 80 | plugins : [{ 81 | ext : [ '.tpl' ], 82 | use : [{ 83 | plugin : handlebars, 84 | },{ 85 | plugin : wrap, 86 | param : ['define(function(){return Handlebars.template(<%= contents %>)});'] 87 | }] 88 | }] 89 | ``` 90 | 91 | ## 合并规则 92 | 93 | 模块 `a.js` : 94 | 95 | ``` 96 | define(function(){ 97 | var b = require( 'deps/b' ); 98 | return 'a' + ' ' + b; 99 | }); 100 | ``` 101 | 102 | 模块 `b.js` : 103 | 104 | ``` 105 | define(function(){ 106 | return 'b'; 107 | }); 108 | ``` 109 | 110 | gulp 代码 : 111 | 112 | ``` 113 | gulp.src( 'src/a.js' ) 114 | .pipe( seajsCombo() ) 115 | ... 116 | ``` 117 | 118 | 合并好的 `a.js` : 119 | 120 | ``` 121 | define('b',function(){ 122 | return 'b'; 123 | }); 124 | define('a',['b'],function(){ 125 | var b = require( 'b' ); 126 | return 'a' + ' ' + b; 127 | }); 128 | ``` 129 | 130 | 文件 `main.js` : 131 | 132 | ``` 133 | seajs.use( 'a' ); 134 | ``` 135 | 136 | gulp 代码 : 137 | 138 | ``` 139 | gulp.src( 'src/main.js' ) 140 | .pipe( seajsCombo() ) 141 | ... 142 | ``` 143 | 144 | 合并后的 `main.js` : 145 | 146 | ``` 147 | define('b',function(){ 148 | return 'b'; 149 | }); 150 | define('a',['b'],function(){ 151 | var b = require( 'b' ); 152 | return 'a' + ' ' + b; 153 | }); 154 | seajs.use( 'a' ); 155 | ``` 156 | 157 | 合并后的模块标识不会保留其路径,`src/a` 的模块标识在合并后就变成了 `a`,`foo/bar/p` 在合并后变成了 `p`。 158 | 159 | 如果合并的模块中模块标识有重复,gulp-seajs-combo 会修改原来的模块标识。`src/a` 和 `src/test/a` 在合并后由于去掉了路径都会变成 `a`,gulp-seajs-combo 会将后一个依赖 `src/test/a` 改成 `s_gulp_seajs_combo_xx`。 160 | 161 | ## 解析 `seajs.config` 162 | 163 | `gulp-seajs-combo` 会解析 `seajs.config` 中的 `alias` `vars` `paths` 这 3 个配置,其他的配置会忽略,并且配置的值必须为 `String` 类型,会忽略其中的变量,查看更多的 [seajs.config](https://github.com/seajs/seajs/issues/262)。[test/src/m.js](https://github.com/chenmnkken/gulp-seajs-combo/blob/master/test/src/m.js) 和 [test/build/m.js](https://github.com/chenmnkken/gulp-seajs-combo/blob/master/test/build/m.js) 是合并时解析规则的例子。 164 | 165 | 想深入了解 gulp-seajs-combo 可以查看[使用gulp-seajs-combo合并seajs模块](http://stylechen.com/gulp-seajs-combo.html) 166 | 167 | ## License 168 | 169 | MIT @ [Yiguo Chan](https://github.com/chenmnkken) -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * seajs(CMD) Module combo pulgin for gulp 3 | * Author : chenmnkken@gmail.com 4 | * Date : 2018-03-29 5 | */ 6 | var Promise = require("promise"), 7 | fs = require("fs"), 8 | path = require("path"), 9 | through = require("through2"), 10 | gutil = require("gulp-util"), 11 | execPlugins = require("./lib/execplugins"), 12 | rFirstStr = /[\s\r\n\=]/, 13 | rDefine = /define\(\s*(['"](.+?)['"],)?/, 14 | rDeps = /(['"])(.+?)\1/g, 15 | rAlias = /alias\s*\:([^\}]+)\}/, 16 | rPaths = /paths\s*\:([^\}]+)\}/, 17 | rVars = /vars\s*\:([^\}]+)\}/, 18 | rVar = /\{([^{]+)}/g, 19 | rSeajsConfig = /seajs\.config\([^\)]+\);?/g, 20 | rModId = /([^\\\/?]+?)(\.(?:js))?([\?#].*)?$/, 21 | rQueryHash = /[\?#].*$/, 22 | rExistId = /define\(\s*['"][^\[\('"\{\r\n]+['"]\s*,?/, 23 | rSeajsUse = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*seajs\.use|(?:^|[^$])\bseajs\.use\s*\((.+)/g, 24 | rRequire = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g; 25 | 26 | const PLUGIN_NAME = "gulp-seajs-cmobo"; 27 | 28 | /* 29 | * 过滤忽略模块 30 | * param { Array } 忽略模块列表 31 | * param { String } 模块名 32 | * param { String } 模块标识 33 | * return { Boolean } 是否在忽略列表中 34 | */ 35 | var filterIgnore = function(ignore, id, origId) { 36 | return ignore.some(function(item) { 37 | var arr; 38 | 39 | // 含路径的模块id只过滤精确匹配的结果 40 | if (~item.indexOf("/")) { 41 | return item === origId; 42 | } 43 | // 不含路径的模块id将过滤所有匹配结果 44 | // ui 将匹配 ../ui 和 ../../ui 45 | else { 46 | // 使用id过滤忽略模块时要去掉自动添加的 gulp-seajs-combo 47 | if (~id.indexOf(PLUGIN_NAME)) { 48 | arr = id.split("_"); 49 | id = arr.slice(0, -2).join("_"); 50 | } 51 | 52 | return item === id; 53 | } 54 | }); 55 | }, 56 | /* 57 | * 初始化插件 58 | * param { Object } 老配置对象 59 | * param { Object } 新忽略列表 60 | */ 61 | initPlugins = function(options, o) { 62 | var name; 63 | 64 | o.plugins = {}; 65 | options.plugins.forEach(function(item) { 66 | item.ext.forEach(function(name) { 67 | o.plugins[name] = item.use; 68 | }); 69 | }); 70 | }, 71 | /* 72 | * 提取config中的配置,会忽略包含变量的配置,只提取纯字符串 73 | * param{ String } config字符串 74 | * return{ Object } 提取出来的配置 75 | */ 76 | evalConfig = function(configStr) { 77 | var configArr = configStr, 78 | config = {}; 79 | 80 | configStr = configStr.replace(/\{/, ""); 81 | configArr = configStr.split(","); 82 | configArr.forEach(function(item) { 83 | var index, arr, key, value; 84 | 85 | index = item.indexOf(":"); 86 | key = item.slice(0, index).replace(/['"]/g, ""); 87 | value = item.slice(index + 1); 88 | 89 | key = key.trim(); 90 | value = value.trim(); 91 | 92 | try { 93 | value = eval("(function(){return " + value + "})()"); 94 | config[key] = value; 95 | } catch (_) {} 96 | }); 97 | 98 | return config; 99 | }, 100 | /* 101 | * 解析config字符串,尝试提取alias、paths、vars 102 | * param{ String } 文件内容 103 | * return{ Object } 提取出来的配置和提取后的文件内容 104 | */ 105 | parseConfig = function(contents) { 106 | var config = {}; 107 | 108 | contents = contents.replace(rSeajsConfig, function($) { 109 | $.replace(rAlias, function(_, $1) { 110 | config.alias = evalConfig($1); 111 | }); 112 | 113 | $.replace(rPaths, function(_, $1) { 114 | config.paths = evalConfig($1); 115 | }); 116 | 117 | $.replace(rVars, function(_, $1) { 118 | config.vars = evalConfig($1); 119 | }); 120 | 121 | return ""; 122 | }); 123 | 124 | return { 125 | contents: contents, 126 | config: config 127 | }; 128 | }, 129 | /* 130 | * 基于base将依赖模块的相对路径转化成绝对路径 131 | * 同时对seajs.config中的paths、alias、vars,还有options.map进行处理 132 | * param { Object } 数据存储对象 133 | * param { Array } 依赖模块的相对路径列表 134 | * param { String } 基础路径 135 | * return { Array } 依赖模块的绝对路径列表 136 | */ 137 | mergePath = function(options, deps, base) { 138 | var config = options.config; 139 | 140 | return deps.map(function(item, i) { 141 | var origId = item.origId, 142 | arr, 143 | modId; 144 | 145 | // 防止多次merge 146 | if (item.path) { 147 | return; 148 | } 149 | 150 | // 处理build.json => map 151 | if (options.map && options.map[origId]) { 152 | origId = options.map[origId]; 153 | } 154 | 155 | // 处理seajs.config => vars 156 | if (config.vars) { 157 | if (~origId.indexOf("{")) { 158 | origId = origId.replace(rVar, function($, $1) { 159 | if (config.vars[$1]) { 160 | return config.vars[$1]; 161 | } 162 | 163 | return $; 164 | }); 165 | } 166 | } 167 | 168 | // 处理seajs.config => alias 169 | if (config.alias && config.alias[origId]) { 170 | origId = config.alias[origId]; 171 | } 172 | 173 | // 处理seajs.config => paths 174 | if (config.paths) { 175 | arr = origId.split("/"); 176 | modId = arr.splice(arr.length - 1, 1); 177 | arr.forEach(function(_item, i) { 178 | if (config.paths[_item]) { 179 | arr[i] = config.paths[_item]; 180 | } 181 | }); 182 | 183 | arr = arr.concat(modId); 184 | origId = arr.join("/"); 185 | } 186 | return { 187 | id: item.id, 188 | extName: item.extName, 189 | path: path.resolve(base, origId), 190 | origId: origId 191 | }; 192 | }); 193 | }, 194 | /* 195 | * 解析模块标识 196 | * param { Object } 配置参数 197 | * param { String } 模块标识 198 | * return { Object } filePath: 过滤query和hash后的模块标识,id: 模块id,extName: 模块后缀 199 | */ 200 | modPathResolve = function(options, filePath) { 201 | // 过滤query(?)和hash(#) 202 | filePath = filePath.replace(rQueryHash, ""); 203 | 204 | var id = filePath.match(rModId)[1], 205 | extName = path.extname(filePath); 206 | 207 | if (extName && extName === ".js") { 208 | id = id.replace(extName, ""); 209 | } 210 | 211 | return { 212 | id: id, 213 | path: filePath, 214 | extName: extName 215 | }; 216 | }, 217 | /* 218 | * 解析依赖模块列表,如果有依赖模块则开始解析依赖模块 219 | * param { Object } 配置参数 220 | * param { Array } 依赖模块 221 | * param { promise } 222 | */ 223 | readDeps = function(options, parentDeps) { 224 | var childDeps = []; 225 | 226 | promiseArr = parentDeps.map(function(item) { 227 | return new Promise(function(resolve, reject) { 228 | var id = item.id, 229 | extName = item.extName, 230 | filePath = item.path, 231 | origId = item.origId, 232 | contents, 233 | stream, 234 | plugins, 235 | deps, 236 | isIgnore; 237 | 238 | isIgnore = options.ignore ? 239 | filterIgnore(options.ignore, id, origId) : 240 | false; 241 | 242 | // 检测该模块是否在忽略列表中 243 | if (isIgnore) { 244 | options.modArr.push({ 245 | id: id, 246 | path: filePath, 247 | contents: "", 248 | extName: extName, 249 | origId: origId 250 | }); 251 | 252 | resolve(); 253 | return; 254 | } 255 | 256 | // 处理特殊的模块,如 tpl 模块(需额外的插件支持) 257 | // 根据模块后缀来匹配是否使用插件 258 | if (extName && !~extName.indexOf(".js") && fs.existsSync(filePath)) { 259 | if (options.plugins && options.plugins[extName]) { 260 | plugins = options.plugins[extName]; 261 | 262 | // 有插件则执行插件 263 | stream = execPlugins(filePath, plugins); 264 | 265 | stream.on("end", function() { 266 | resolve(); 267 | }); 268 | 269 | stream.pipe( 270 | through.obj(function(file, enc, _callback) { 271 | parseDeps(options, file.contents.toString(), item); 272 | _callback(null, file); 273 | }) 274 | ); 275 | } else { 276 | return reject("Can't combo unkonwn module [" + filePath + "]"); 277 | } 278 | } 279 | // 处理普通的js模块 280 | else { 281 | if (!extName.trim() || extName != ".js") { 282 | filePath += ".js"; 283 | } 284 | try { 285 | contents = fs.readFileSync(filePath, options.encoding); 286 | } catch (_) { 287 | reject("File [" + filePath + "] not found."); 288 | return; 289 | } 290 | 291 | deps = parseDeps(options, contents, item); 292 | 293 | if (deps.length) { 294 | childDeps = childDeps.concat(deps); 295 | } 296 | 297 | resolve(); 298 | } 299 | }); 300 | }); 301 | 302 | return Promise.all(promiseArr) 303 | .then( 304 | function() { 305 | if (childDeps.length) { 306 | return readDeps(options, childDeps); 307 | } 308 | }, 309 | function(err) { 310 | gutil.log(gutil.colors.red(PLUGIN_NAME + " Error: " + err)); 311 | } 312 | ) 313 | .catch(function(err) { 314 | gutil.log(gutil.colors.red(PLUGIN_NAME + " error: " + err.message)); 315 | console.log(err.stack); 316 | }); 317 | }, 318 | /* 319 | * 提取依赖模块 320 | * param { Object } 配置参数 321 | * param { RegExp } 提取正则 322 | * param { Object } 文件内容 323 | * return { Array } 依赖模块列表 324 | */ 325 | pullDeps = function(options, reg, contents) { 326 | var deps = [], 327 | matches, 328 | origId; 329 | 330 | reg.lastIndex = 0; 331 | 332 | while ((matches = reg.exec(contents)) !== null) { 333 | origId = matches[2]; 334 | 335 | if (origId && origId.slice(0, 4) !== "http") { 336 | depPathResult = modPathResolve(options, origId); 337 | 338 | deps.push({ 339 | id: depPathResult.id, 340 | origId: depPathResult.path, 341 | extName: depPathResult.extName 342 | }); 343 | } 344 | } 345 | 346 | return deps; 347 | }, 348 | /* 349 | * 解析依赖模块 350 | * param { Object } 配置参数 351 | * param { String } 文件内容 352 | * param { Object } 模块数据 353 | * return { Array } 依赖模块数据列表 354 | */ 355 | parseDeps = function(options, contents, modData) { 356 | var isSeajsUse = !!~contents.indexOf("seajs.use("), 357 | id = modData.id, 358 | deps = [], 359 | configResult, 360 | name, 361 | base, 362 | matches; 363 | 364 | // 标准模块 365 | if (!isSeajsUse) { 366 | deps = pullDeps(options, rRequire, contents); 367 | } 368 | // 解析seajs.use 369 | else { 370 | configResult = parseConfig(contents); 371 | contents = configResult.contents; 372 | 373 | for (name in configResult.config) { 374 | options.config[name] = configResult.config[name]; 375 | } 376 | 377 | matches = contents.match(rSeajsUse); 378 | 379 | matches.forEach(function(item) { 380 | var _deps = []; 381 | 382 | if (~item.indexOf("seajs.use")) { 383 | _deps = pullDeps(options, rDeps, item); 384 | deps = deps.concat(_deps); 385 | } 386 | }); 387 | } 388 | 389 | base = path.resolve(modData.path, ".."); 390 | deps = mergePath(options, deps, base); 391 | 392 | options.modArr.push({ 393 | id: id, 394 | deps: deps, 395 | path: modData.path, 396 | contents: contents, 397 | extName: modData.extName, 398 | origId: modData.origId || id 399 | }); 400 | 401 | return deps; 402 | }, 403 | /* 404 | * 转换模块内容 405 | * param { Object } 配置参数 406 | * param { Object } 模块数据 407 | * param { Object } id映射表 408 | * return { String } 文件内容 409 | */ 410 | transform = function(options, modData, idMap) { 411 | var contents = modData.contents, 412 | isSeajsUse = !!~contents.indexOf("seajs.use("), 413 | origId = modData.origId, 414 | deps = []; 415 | 416 | // 标准模块 417 | if (!isSeajsUse) { 418 | contents = contents.replace(rRequire, function($, _, $2) { 419 | var result = $, 420 | depId, 421 | depOrigId, 422 | depPathResult, 423 | firstStr; 424 | 425 | if ($2 && $2.slice(0, 4) !== "http") { 426 | depPathResult = modPathResolve(options, $2); 427 | firstStr = result.charAt(0); 428 | depOrigId = depPathResult.path; 429 | depId = idMap[depOrigId] || depPathResult.id; 430 | deps.push(depId); 431 | 432 | result = "require('" + depId + "')"; 433 | 434 | if (rFirstStr.test(firstStr)) { 435 | result = firstStr + result; 436 | } 437 | } 438 | 439 | return result; 440 | }); 441 | 442 | // 为匿名模块添加模块名,同时将依赖列表添加到头部 443 | contents = contents.replace(rDefine, function() { 444 | var id = idMap[origId]; 445 | 446 | return deps.length ? 447 | "define('" + id + "',['" + deps.join("','") + "']," : 448 | "define('" + id + "',"; 449 | }); 450 | } else { 451 | contents = contents.replace(rSeajsUse, function($) { 452 | var result = $; 453 | 454 | if (~$.indexOf("seajs.use(")) { 455 | result = $.replace(rDeps, function($, _, $2) { 456 | var _result = $, 457 | depPathResult, 458 | depId; 459 | 460 | if ($2 && $2.slice(0, 4) !== "http") { 461 | depPathResult = modPathResolve(options, $2); 462 | depId = depPathResult.id; 463 | 464 | _result = "'" + depId + "'"; 465 | } 466 | 467 | return _result; 468 | }); 469 | } 470 | 471 | return result; 472 | }); 473 | } 474 | 475 | return contents; 476 | }, 477 | /* 478 | * 合并模块内容 479 | * param { Object } 配置参数 480 | * return { String } 文件内容 481 | */ 482 | comboContent = function(options) { 483 | var idUnique = {}, 484 | pathUnique = {}, 485 | contents = "", 486 | idMap = {}, 487 | newModArr = []; 488 | 489 | options.modArr.forEach(function(item, i) { 490 | var obj = {}, 491 | id = item.id, 492 | filePath = item.path; 493 | 494 | if (!pathUnique[filePath]) { 495 | pathUnique[filePath] = true; 496 | newModArr.push(item); 497 | 498 | if (idUnique[id]) { 499 | id = id + "_" + PLUGIN_NAME + "_" + i; 500 | } else { 501 | idUnique[id] = true; 502 | } 503 | 504 | idMap[item.origId] = id; 505 | } 506 | }); 507 | newModArr.forEach(function(item) { 508 | var newContents = transform(options, item, idMap); 509 | if (newContents) { 510 | contents = newContents + "\n" + contents; 511 | } 512 | 513 | if (options.verbose) { 514 | gutil.log( 515 | "gulp-seajs-combo:", 516 | "✔ Module [" + filePath + "] combo success." 517 | ); 518 | } 519 | }); 520 | 521 | return new Buffer(contents); 522 | }, 523 | /* 524 | * 解析模块的内容,如果有依赖模块则开始解析依赖模块 525 | * param { Object } 数据存储对象 526 | * param { String } 文件内容 527 | * param { String } 模块的绝对路径 528 | * param { promise } 529 | */ 530 | parseContent = function(options, contents, filePath) { 531 | return new Promise(function(resolve) { 532 | var pathResult = modPathResolve(options, filePath), 533 | deps = parseDeps(options, contents, pathResult); 534 | 535 | if (deps.length) { 536 | resolve(readDeps(options, deps)); 537 | } else { 538 | resolve(); 539 | } 540 | }); 541 | }, 542 | // 插件入口函数 543 | createStream = function(options) { 544 | var o = { 545 | modArr: [], 546 | config: {}, 547 | unique: {}, 548 | uuid: 0, 549 | contents: "", 550 | encoding: "UTF-8", 551 | verbose: !!~process.argv.indexOf("--verbose") 552 | }; 553 | 554 | if (options) { 555 | if (options.ignore) { 556 | o.ignore = options.ignore; 557 | } 558 | 559 | if (options.map) { 560 | o.map = options.map; 561 | } 562 | 563 | if (options.encoding) { 564 | o.encoding = options.encoding; 565 | } 566 | 567 | if (options.plugins) { 568 | initPlugins(options, o); 569 | } 570 | } 571 | 572 | return through.obj(function(file, enc, callback) { 573 | if (file.isBuffer()) { 574 | parseContent(o, file.contents.toString(), file.path) 575 | .then(function() { 576 | var contents = comboContent(o); 577 | file.contents = contents; 578 | callback(null, file); 579 | }) 580 | .catch(function(err) { 581 | gutil.log(gutil.colors.red(PLUGIN_NAME + " error: " + err.message)); 582 | console.log(err.stack); 583 | callback(null, file); 584 | }); 585 | } else { 586 | callback(null, file); 587 | } 588 | }); 589 | }; 590 | 591 | module.exports = createStream; 592 | -------------------------------------------------------------------------------- /lib/execplugins.js: -------------------------------------------------------------------------------- 1 | var through = require( 'through2' ), 2 | gs = require( 'glob-stream' ), 3 | gfs = require( 'graceful-fs' ), 4 | vinylFile = require( 'vinyl' ), 5 | stripBom = require( 'strip-bom' ); 6 | 7 | var bufferFile = function( file, callback ){ 8 | gfs.readFile( file.path, function (err, data) { 9 | if( err ){ 10 | return callback( err ); 11 | } 12 | file.contents = stripBom( data ); 13 | callback( null, file ); 14 | }); 15 | }; 16 | 17 | var getContents = function(){ 18 | return through.obj(function( file, enc, callback ){ 19 | return bufferFile( file, callback ); 20 | }); 21 | }; 22 | 23 | var fetchStats = function( file, enc, callback ){ 24 | gfs.lstat( file.path, function (err, stat){ 25 | if( stat ){ 26 | file.stat = stat; 27 | } 28 | 29 | callback( err, file ); 30 | }); 31 | }; 32 | 33 | var getStats = function(){ 34 | return through.obj( fetchStats ); 35 | }; 36 | 37 | var createFile = function(){ 38 | return through.obj(function( file, enc, callback ){ 39 | callback( null, new vinylFile(file) ); 40 | }); 41 | }; 42 | 43 | var execPlugins = function( path, plugins ){ 44 | var pass = through.obj(), 45 | outputStream, globStream; 46 | 47 | globStream = gs.create( path, { 48 | read : true, 49 | buffer : true 50 | }); 51 | 52 | outputStream = globStream 53 | .pipe( createFile() ) 54 | .pipe( getStats() ) 55 | .pipe( getContents() ); 56 | 57 | plugins.forEach(function( item ){ 58 | if( item.param ){ 59 | outputStream = outputStream.pipe( item.plugin.apply(null, item.param) ); 60 | } 61 | else{ 62 | outputStream = outputStream.pipe( item.plugin() ); 63 | } 64 | }); 65 | 66 | return outputStream.pipe( pass ); 67 | }; 68 | 69 | module.exports = execPlugins; 70 | -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Yiguo Chan (stylechen.com) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-seajs-combo", 3 | "version": "1.2.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "align-text": { 8 | "version": "0.1.4", 9 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 10 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 11 | "dev": true, 12 | "optional": true, 13 | "requires": { 14 | "kind-of": "^3.0.2", 15 | "longest": "^1.0.1", 16 | "repeat-string": "^1.5.2" 17 | }, 18 | "dependencies": { 19 | "kind-of": { 20 | "version": "3.2.2", 21 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 22 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 23 | "dev": true, 24 | "optional": true, 25 | "requires": { 26 | "is-buffer": "^1.1.5" 27 | } 28 | } 29 | } 30 | }, 31 | "amdefine": { 32 | "version": "1.0.1", 33 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 34 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 35 | "dev": true 36 | }, 37 | "ansi-gray": { 38 | "version": "0.1.1", 39 | "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", 40 | "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", 41 | "requires": { 42 | "ansi-wrap": "0.1.0" 43 | } 44 | }, 45 | "ansi-regex": { 46 | "version": "2.1.1", 47 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 48 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 49 | }, 50 | "ansi-styles": { 51 | "version": "2.2.1", 52 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 53 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 54 | }, 55 | "ansi-wrap": { 56 | "version": "0.1.0", 57 | "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", 58 | "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" 59 | }, 60 | "archy": { 61 | "version": "1.0.0", 62 | "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", 63 | "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", 64 | "dev": true 65 | }, 66 | "argparse": { 67 | "version": "1.0.10", 68 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 69 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 70 | "dev": true, 71 | "requires": { 72 | "sprintf-js": "~1.0.2" 73 | } 74 | }, 75 | "arr-diff": { 76 | "version": "4.0.0", 77 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 78 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 79 | "dev": true 80 | }, 81 | "arr-flatten": { 82 | "version": "1.1.0", 83 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 84 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 85 | "dev": true 86 | }, 87 | "arr-union": { 88 | "version": "3.1.0", 89 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 90 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 91 | "dev": true 92 | }, 93 | "array-differ": { 94 | "version": "1.0.0", 95 | "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", 96 | "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" 97 | }, 98 | "array-each": { 99 | "version": "1.0.1", 100 | "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", 101 | "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", 102 | "dev": true 103 | }, 104 | "array-slice": { 105 | "version": "1.1.0", 106 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", 107 | "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", 108 | "dev": true 109 | }, 110 | "array-uniq": { 111 | "version": "1.0.3", 112 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 113 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" 114 | }, 115 | "array-unique": { 116 | "version": "0.3.2", 117 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 118 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 119 | "dev": true 120 | }, 121 | "asap": { 122 | "version": "1.0.0", 123 | "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", 124 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" 125 | }, 126 | "assign-symbols": { 127 | "version": "1.0.0", 128 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 129 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 130 | "dev": true 131 | }, 132 | "atob": { 133 | "version": "2.1.2", 134 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 135 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 136 | "dev": true 137 | }, 138 | "balanced-match": { 139 | "version": "1.0.0", 140 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 141 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 142 | }, 143 | "base": { 144 | "version": "0.11.2", 145 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 146 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 147 | "dev": true, 148 | "requires": { 149 | "cache-base": "^1.0.1", 150 | "class-utils": "^0.3.5", 151 | "component-emitter": "^1.2.1", 152 | "define-property": "^1.0.0", 153 | "isobject": "^3.0.1", 154 | "mixin-deep": "^1.2.0", 155 | "pascalcase": "^0.1.1" 156 | }, 157 | "dependencies": { 158 | "define-property": { 159 | "version": "1.0.0", 160 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 161 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 162 | "dev": true, 163 | "requires": { 164 | "is-descriptor": "^1.0.0" 165 | } 166 | }, 167 | "is-accessor-descriptor": { 168 | "version": "1.0.0", 169 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 170 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 171 | "dev": true, 172 | "requires": { 173 | "kind-of": "^6.0.0" 174 | } 175 | }, 176 | "is-data-descriptor": { 177 | "version": "1.0.0", 178 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 179 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 180 | "dev": true, 181 | "requires": { 182 | "kind-of": "^6.0.0" 183 | } 184 | }, 185 | "is-descriptor": { 186 | "version": "1.0.2", 187 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 188 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 189 | "dev": true, 190 | "requires": { 191 | "is-accessor-descriptor": "^1.0.0", 192 | "is-data-descriptor": "^1.0.0", 193 | "kind-of": "^6.0.2" 194 | } 195 | } 196 | } 197 | }, 198 | "beeper": { 199 | "version": "1.1.1", 200 | "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", 201 | "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" 202 | }, 203 | "brace-expansion": { 204 | "version": "1.1.11", 205 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 206 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 207 | "requires": { 208 | "balanced-match": "^1.0.0", 209 | "concat-map": "0.0.1" 210 | } 211 | }, 212 | "braces": { 213 | "version": "2.3.2", 214 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 215 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 216 | "dev": true, 217 | "requires": { 218 | "arr-flatten": "^1.1.0", 219 | "array-unique": "^0.3.2", 220 | "extend-shallow": "^2.0.1", 221 | "fill-range": "^4.0.0", 222 | "isobject": "^3.0.1", 223 | "repeat-element": "^1.1.2", 224 | "snapdragon": "^0.8.1", 225 | "snapdragon-node": "^2.0.1", 226 | "split-string": "^3.0.2", 227 | "to-regex": "^3.0.1" 228 | }, 229 | "dependencies": { 230 | "extend-shallow": { 231 | "version": "2.0.1", 232 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 233 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 234 | "dev": true, 235 | "requires": { 236 | "is-extendable": "^0.1.0" 237 | } 238 | } 239 | } 240 | }, 241 | "bufferstreams": { 242 | "version": "1.0.1", 243 | "resolved": "https://registry.npmjs.org/bufferstreams/-/bufferstreams-1.0.1.tgz", 244 | "integrity": "sha1-z7GtlWjTujz+k1upq92VLeiKqyo=", 245 | "dev": true, 246 | "requires": { 247 | "readable-stream": "^1.0.33" 248 | } 249 | }, 250 | "cache-base": { 251 | "version": "1.0.1", 252 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 253 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 254 | "dev": true, 255 | "requires": { 256 | "collection-visit": "^1.0.0", 257 | "component-emitter": "^1.2.1", 258 | "get-value": "^2.0.6", 259 | "has-value": "^1.0.0", 260 | "isobject": "^3.0.1", 261 | "set-value": "^2.0.0", 262 | "to-object-path": "^0.3.0", 263 | "union-value": "^1.0.0", 264 | "unset-value": "^1.0.0" 265 | } 266 | }, 267 | "camelcase": { 268 | "version": "1.2.1", 269 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 270 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 271 | "dev": true, 272 | "optional": true 273 | }, 274 | "center-align": { 275 | "version": "0.1.3", 276 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 277 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 278 | "dev": true, 279 | "optional": true, 280 | "requires": { 281 | "align-text": "^0.1.3", 282 | "lazy-cache": "^1.0.3" 283 | } 284 | }, 285 | "chalk": { 286 | "version": "1.1.3", 287 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 288 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 289 | "requires": { 290 | "ansi-styles": "^2.2.1", 291 | "escape-string-regexp": "^1.0.2", 292 | "has-ansi": "^2.0.0", 293 | "strip-ansi": "^3.0.0", 294 | "supports-color": "^2.0.0" 295 | } 296 | }, 297 | "class-utils": { 298 | "version": "0.3.6", 299 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 300 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 301 | "dev": true, 302 | "requires": { 303 | "arr-union": "^3.1.0", 304 | "define-property": "^0.2.5", 305 | "isobject": "^3.0.0", 306 | "static-extend": "^0.1.1" 307 | }, 308 | "dependencies": { 309 | "define-property": { 310 | "version": "0.2.5", 311 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 312 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 313 | "dev": true, 314 | "requires": { 315 | "is-descriptor": "^0.1.0" 316 | } 317 | } 318 | } 319 | }, 320 | "cliui": { 321 | "version": "2.1.0", 322 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 323 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 324 | "dev": true, 325 | "optional": true, 326 | "requires": { 327 | "center-align": "^0.1.1", 328 | "right-align": "^0.1.1", 329 | "wordwrap": "0.0.2" 330 | }, 331 | "dependencies": { 332 | "wordwrap": { 333 | "version": "0.0.2", 334 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 335 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 336 | "dev": true, 337 | "optional": true 338 | } 339 | } 340 | }, 341 | "clone": { 342 | "version": "1.0.4", 343 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 344 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 345 | }, 346 | "clone-stats": { 347 | "version": "0.0.1", 348 | "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", 349 | "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" 350 | }, 351 | "collection-visit": { 352 | "version": "1.0.0", 353 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 354 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 355 | "dev": true, 356 | "requires": { 357 | "map-visit": "^1.0.0", 358 | "object-visit": "^1.0.0" 359 | } 360 | }, 361 | "color-support": { 362 | "version": "1.1.3", 363 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 364 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" 365 | }, 366 | "component-emitter": { 367 | "version": "1.2.1", 368 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 369 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 370 | "dev": true 371 | }, 372 | "concat-map": { 373 | "version": "0.0.1", 374 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 375 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 376 | }, 377 | "consolidate": { 378 | "version": "0.11.0", 379 | "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.11.0.tgz", 380 | "integrity": "sha1-g4F1gGYoVpw2D21/YYrkH9/XNDM=", 381 | "dev": true 382 | }, 383 | "copy-descriptor": { 384 | "version": "0.1.1", 385 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 386 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 387 | "dev": true 388 | }, 389 | "core-util-is": { 390 | "version": "1.0.2", 391 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 392 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 393 | }, 394 | "dateformat": { 395 | "version": "2.2.0", 396 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", 397 | "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" 398 | }, 399 | "debug": { 400 | "version": "2.6.9", 401 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 402 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 403 | "dev": true, 404 | "requires": { 405 | "ms": "2.0.0" 406 | } 407 | }, 408 | "decamelize": { 409 | "version": "1.2.0", 410 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 411 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 412 | "dev": true, 413 | "optional": true 414 | }, 415 | "decode-uri-component": { 416 | "version": "0.2.0", 417 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 418 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 419 | "dev": true 420 | }, 421 | "defaults": { 422 | "version": "1.0.3", 423 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 424 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 425 | "dev": true, 426 | "requires": { 427 | "clone": "^1.0.2" 428 | } 429 | }, 430 | "define-property": { 431 | "version": "2.0.2", 432 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 433 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 434 | "dev": true, 435 | "requires": { 436 | "is-descriptor": "^1.0.2", 437 | "isobject": "^3.0.1" 438 | }, 439 | "dependencies": { 440 | "is-accessor-descriptor": { 441 | "version": "1.0.0", 442 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 443 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 444 | "dev": true, 445 | "requires": { 446 | "kind-of": "^6.0.0" 447 | } 448 | }, 449 | "is-data-descriptor": { 450 | "version": "1.0.0", 451 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 452 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 453 | "dev": true, 454 | "requires": { 455 | "kind-of": "^6.0.0" 456 | } 457 | }, 458 | "is-descriptor": { 459 | "version": "1.0.2", 460 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 461 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 462 | "dev": true, 463 | "requires": { 464 | "is-accessor-descriptor": "^1.0.0", 465 | "is-data-descriptor": "^1.0.0", 466 | "kind-of": "^6.0.2" 467 | } 468 | } 469 | } 470 | }, 471 | "deprecated": { 472 | "version": "0.0.1", 473 | "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", 474 | "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", 475 | "dev": true 476 | }, 477 | "detect-file": { 478 | "version": "1.0.0", 479 | "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", 480 | "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", 481 | "dev": true 482 | }, 483 | "duplexer2": { 484 | "version": "0.0.2", 485 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", 486 | "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", 487 | "requires": { 488 | "readable-stream": "~1.1.9" 489 | }, 490 | "dependencies": { 491 | "readable-stream": { 492 | "version": "1.1.14", 493 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 494 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 495 | "requires": { 496 | "core-util-is": "~1.0.0", 497 | "inherits": "~2.0.1", 498 | "isarray": "0.0.1", 499 | "string_decoder": "~0.10.x" 500 | } 501 | } 502 | } 503 | }, 504 | "end-of-stream": { 505 | "version": "0.1.5", 506 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", 507 | "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", 508 | "dev": true, 509 | "requires": { 510 | "once": "~1.3.0" 511 | }, 512 | "dependencies": { 513 | "once": { 514 | "version": "1.3.3", 515 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 516 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 517 | "dev": true, 518 | "requires": { 519 | "wrappy": "1" 520 | } 521 | } 522 | } 523 | }, 524 | "es6-promise": { 525 | "version": "2.3.0", 526 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", 527 | "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", 528 | "dev": true 529 | }, 530 | "escape-string-regexp": { 531 | "version": "1.0.5", 532 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 533 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 534 | }, 535 | "esprima": { 536 | "version": "4.0.1", 537 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 538 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 539 | "dev": true 540 | }, 541 | "expand-brackets": { 542 | "version": "2.1.4", 543 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 544 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 545 | "dev": true, 546 | "requires": { 547 | "debug": "^2.3.3", 548 | "define-property": "^0.2.5", 549 | "extend-shallow": "^2.0.1", 550 | "posix-character-classes": "^0.1.0", 551 | "regex-not": "^1.0.0", 552 | "snapdragon": "^0.8.1", 553 | "to-regex": "^3.0.1" 554 | }, 555 | "dependencies": { 556 | "define-property": { 557 | "version": "0.2.5", 558 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 559 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 560 | "dev": true, 561 | "requires": { 562 | "is-descriptor": "^0.1.0" 563 | } 564 | }, 565 | "extend-shallow": { 566 | "version": "2.0.1", 567 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 568 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 569 | "dev": true, 570 | "requires": { 571 | "is-extendable": "^0.1.0" 572 | } 573 | } 574 | } 575 | }, 576 | "expand-tilde": { 577 | "version": "2.0.2", 578 | "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", 579 | "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", 580 | "dev": true, 581 | "requires": { 582 | "homedir-polyfill": "^1.0.1" 583 | } 584 | }, 585 | "extend": { 586 | "version": "3.0.2", 587 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 588 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 589 | "dev": true 590 | }, 591 | "extend-shallow": { 592 | "version": "3.0.2", 593 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 594 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 595 | "dev": true, 596 | "requires": { 597 | "assign-symbols": "^1.0.0", 598 | "is-extendable": "^1.0.1" 599 | }, 600 | "dependencies": { 601 | "is-extendable": { 602 | "version": "1.0.1", 603 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 604 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 605 | "dev": true, 606 | "requires": { 607 | "is-plain-object": "^2.0.4" 608 | } 609 | } 610 | } 611 | }, 612 | "extglob": { 613 | "version": "2.0.4", 614 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 615 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 616 | "dev": true, 617 | "requires": { 618 | "array-unique": "^0.3.2", 619 | "define-property": "^1.0.0", 620 | "expand-brackets": "^2.1.4", 621 | "extend-shallow": "^2.0.1", 622 | "fragment-cache": "^0.2.1", 623 | "regex-not": "^1.0.0", 624 | "snapdragon": "^0.8.1", 625 | "to-regex": "^3.0.1" 626 | }, 627 | "dependencies": { 628 | "define-property": { 629 | "version": "1.0.0", 630 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 631 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 632 | "dev": true, 633 | "requires": { 634 | "is-descriptor": "^1.0.0" 635 | } 636 | }, 637 | "extend-shallow": { 638 | "version": "2.0.1", 639 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 640 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 641 | "dev": true, 642 | "requires": { 643 | "is-extendable": "^0.1.0" 644 | } 645 | }, 646 | "is-accessor-descriptor": { 647 | "version": "1.0.0", 648 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 649 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 650 | "dev": true, 651 | "requires": { 652 | "kind-of": "^6.0.0" 653 | } 654 | }, 655 | "is-data-descriptor": { 656 | "version": "1.0.0", 657 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 658 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 659 | "dev": true, 660 | "requires": { 661 | "kind-of": "^6.0.0" 662 | } 663 | }, 664 | "is-descriptor": { 665 | "version": "1.0.2", 666 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 667 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 668 | "dev": true, 669 | "requires": { 670 | "is-accessor-descriptor": "^1.0.0", 671 | "is-data-descriptor": "^1.0.0", 672 | "kind-of": "^6.0.2" 673 | } 674 | } 675 | } 676 | }, 677 | "fancy-log": { 678 | "version": "1.3.3", 679 | "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", 680 | "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", 681 | "requires": { 682 | "ansi-gray": "^0.1.1", 683 | "color-support": "^1.1.3", 684 | "parse-node-version": "^1.0.0", 685 | "time-stamp": "^1.0.0" 686 | } 687 | }, 688 | "fill-range": { 689 | "version": "4.0.0", 690 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 691 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 692 | "dev": true, 693 | "requires": { 694 | "extend-shallow": "^2.0.1", 695 | "is-number": "^3.0.0", 696 | "repeat-string": "^1.6.1", 697 | "to-regex-range": "^2.1.0" 698 | }, 699 | "dependencies": { 700 | "extend-shallow": { 701 | "version": "2.0.1", 702 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 703 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 704 | "dev": true, 705 | "requires": { 706 | "is-extendable": "^0.1.0" 707 | } 708 | } 709 | } 710 | }, 711 | "find-index": { 712 | "version": "0.1.1", 713 | "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", 714 | "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=" 715 | }, 716 | "findup-sync": { 717 | "version": "2.0.0", 718 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", 719 | "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", 720 | "dev": true, 721 | "requires": { 722 | "detect-file": "^1.0.0", 723 | "is-glob": "^3.1.0", 724 | "micromatch": "^3.0.4", 725 | "resolve-dir": "^1.0.1" 726 | } 727 | }, 728 | "fined": { 729 | "version": "1.1.1", 730 | "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.1.tgz", 731 | "integrity": "sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==", 732 | "dev": true, 733 | "requires": { 734 | "expand-tilde": "^2.0.2", 735 | "is-plain-object": "^2.0.3", 736 | "object.defaults": "^1.1.0", 737 | "object.pick": "^1.2.0", 738 | "parse-filepath": "^1.0.1" 739 | } 740 | }, 741 | "first-chunk-stream": { 742 | "version": "1.0.0", 743 | "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", 744 | "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" 745 | }, 746 | "flagged-respawn": { 747 | "version": "1.0.1", 748 | "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", 749 | "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", 750 | "dev": true 751 | }, 752 | "for-in": { 753 | "version": "1.0.2", 754 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 755 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 756 | "dev": true 757 | }, 758 | "for-own": { 759 | "version": "1.0.0", 760 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", 761 | "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", 762 | "dev": true, 763 | "requires": { 764 | "for-in": "^1.0.1" 765 | } 766 | }, 767 | "fragment-cache": { 768 | "version": "0.2.1", 769 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 770 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 771 | "dev": true, 772 | "requires": { 773 | "map-cache": "^0.2.2" 774 | } 775 | }, 776 | "fs-readfile-promise": { 777 | "version": "1.1.0", 778 | "resolved": "https://registry.npmjs.org/fs-readfile-promise/-/fs-readfile-promise-1.1.0.tgz", 779 | "integrity": "sha1-UVT4/4hydwfWcwpVjSUYfXupD88=", 780 | "dev": true, 781 | "requires": { 782 | "es6-promise": "^2.0.0", 783 | "graceful-fs": "^3.0.5" 784 | } 785 | }, 786 | "function-bind": { 787 | "version": "1.1.1", 788 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 789 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 790 | "dev": true 791 | }, 792 | "gaze": { 793 | "version": "0.5.2", 794 | "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", 795 | "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", 796 | "dev": true, 797 | "requires": { 798 | "globule": "~0.1.0" 799 | } 800 | }, 801 | "get-value": { 802 | "version": "2.0.6", 803 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 804 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 805 | "dev": true 806 | }, 807 | "glob": { 808 | "version": "4.5.3", 809 | "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 810 | "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", 811 | "requires": { 812 | "inflight": "^1.0.4", 813 | "inherits": "2", 814 | "minimatch": "^2.0.1", 815 | "once": "^1.3.0" 816 | } 817 | }, 818 | "glob-stream": { 819 | "version": "4.1.1", 820 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-4.1.1.tgz", 821 | "integrity": "sha1-uELfENaIx+trz869hG84UilrMgA=", 822 | "requires": { 823 | "glob": "^4.3.1", 824 | "glob2base": "^0.0.12", 825 | "minimatch": "^2.0.1", 826 | "ordered-read-streams": "^0.1.0", 827 | "through2": "^0.6.1", 828 | "unique-stream": "^2.0.2" 829 | } 830 | }, 831 | "glob-watcher": { 832 | "version": "0.0.6", 833 | "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", 834 | "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", 835 | "dev": true, 836 | "requires": { 837 | "gaze": "^0.5.1" 838 | } 839 | }, 840 | "glob2base": { 841 | "version": "0.0.12", 842 | "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", 843 | "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", 844 | "requires": { 845 | "find-index": "^0.1.1" 846 | } 847 | }, 848 | "global-modules": { 849 | "version": "1.0.0", 850 | "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", 851 | "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", 852 | "dev": true, 853 | "requires": { 854 | "global-prefix": "^1.0.1", 855 | "is-windows": "^1.0.1", 856 | "resolve-dir": "^1.0.0" 857 | } 858 | }, 859 | "global-prefix": { 860 | "version": "1.0.2", 861 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", 862 | "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", 863 | "dev": true, 864 | "requires": { 865 | "expand-tilde": "^2.0.2", 866 | "homedir-polyfill": "^1.0.1", 867 | "ini": "^1.3.4", 868 | "is-windows": "^1.0.1", 869 | "which": "^1.2.14" 870 | } 871 | }, 872 | "globule": { 873 | "version": "0.1.0", 874 | "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", 875 | "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", 876 | "dev": true, 877 | "requires": { 878 | "glob": "~3.1.21", 879 | "lodash": "~1.0.1", 880 | "minimatch": "~0.2.11" 881 | }, 882 | "dependencies": { 883 | "glob": { 884 | "version": "3.1.21", 885 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", 886 | "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", 887 | "dev": true, 888 | "requires": { 889 | "graceful-fs": "~1.2.0", 890 | "inherits": "1", 891 | "minimatch": "~0.2.11" 892 | } 893 | }, 894 | "graceful-fs": { 895 | "version": "1.2.3", 896 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", 897 | "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", 898 | "dev": true 899 | }, 900 | "inherits": { 901 | "version": "1.0.2", 902 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", 903 | "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", 904 | "dev": true 905 | }, 906 | "minimatch": { 907 | "version": "0.2.14", 908 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 909 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 910 | "dev": true, 911 | "requires": { 912 | "lru-cache": "2", 913 | "sigmund": "~1.0.0" 914 | } 915 | } 916 | } 917 | }, 918 | "glogg": { 919 | "version": "1.0.2", 920 | "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", 921 | "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", 922 | "requires": { 923 | "sparkles": "^1.0.0" 924 | } 925 | }, 926 | "graceful-fs": { 927 | "version": "3.0.11", 928 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", 929 | "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", 930 | "requires": { 931 | "natives": "^1.1.0" 932 | } 933 | }, 934 | "gulp": { 935 | "version": "3.9.1", 936 | "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", 937 | "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", 938 | "dev": true, 939 | "requires": { 940 | "archy": "^1.0.0", 941 | "chalk": "^1.0.0", 942 | "deprecated": "^0.0.1", 943 | "gulp-util": "^3.0.0", 944 | "interpret": "^1.0.0", 945 | "liftoff": "^2.1.0", 946 | "minimist": "^1.1.0", 947 | "orchestrator": "^0.3.0", 948 | "pretty-hrtime": "^1.0.0", 949 | "semver": "^4.1.0", 950 | "tildify": "^1.0.0", 951 | "v8flags": "^2.0.2", 952 | "vinyl-fs": "^0.3.0" 953 | } 954 | }, 955 | "gulp-handlebars": { 956 | "version": "4.0.0", 957 | "resolved": "https://registry.npmjs.org/gulp-handlebars/-/gulp-handlebars-4.0.0.tgz", 958 | "integrity": "sha1-tf9GpBl+fMyfJZpQkqLCn0eVOyk=", 959 | "dev": true, 960 | "requires": { 961 | "gulp-util": "^3.0.4", 962 | "handlebars": "^3.0.0", 963 | "through2": "^0.6.3" 964 | } 965 | }, 966 | "gulp-util": { 967 | "version": "3.0.8", 968 | "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", 969 | "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", 970 | "requires": { 971 | "array-differ": "^1.0.0", 972 | "array-uniq": "^1.0.2", 973 | "beeper": "^1.0.0", 974 | "chalk": "^1.0.0", 975 | "dateformat": "^2.0.0", 976 | "fancy-log": "^1.1.0", 977 | "gulplog": "^1.0.0", 978 | "has-gulplog": "^0.1.0", 979 | "lodash._reescape": "^3.0.0", 980 | "lodash._reevaluate": "^3.0.0", 981 | "lodash._reinterpolate": "^3.0.0", 982 | "lodash.template": "^3.0.0", 983 | "minimist": "^1.1.0", 984 | "multipipe": "^0.1.2", 985 | "object-assign": "^3.0.0", 986 | "replace-ext": "0.0.1", 987 | "through2": "^2.0.0", 988 | "vinyl": "^0.5.0" 989 | }, 990 | "dependencies": { 991 | "isarray": { 992 | "version": "1.0.0", 993 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 994 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 995 | }, 996 | "readable-stream": { 997 | "version": "2.3.6", 998 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 999 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1000 | "requires": { 1001 | "core-util-is": "~1.0.0", 1002 | "inherits": "~2.0.3", 1003 | "isarray": "~1.0.0", 1004 | "process-nextick-args": "~2.0.0", 1005 | "safe-buffer": "~5.1.1", 1006 | "string_decoder": "~1.1.1", 1007 | "util-deprecate": "~1.0.1" 1008 | } 1009 | }, 1010 | "string_decoder": { 1011 | "version": "1.1.1", 1012 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1013 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1014 | "requires": { 1015 | "safe-buffer": "~5.1.0" 1016 | } 1017 | }, 1018 | "through2": { 1019 | "version": "2.0.5", 1020 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1021 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1022 | "requires": { 1023 | "readable-stream": "~2.3.6", 1024 | "xtend": "~4.0.1" 1025 | } 1026 | }, 1027 | "vinyl": { 1028 | "version": "0.5.3", 1029 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", 1030 | "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", 1031 | "requires": { 1032 | "clone": "^1.0.0", 1033 | "clone-stats": "^0.0.1", 1034 | "replace-ext": "0.0.1" 1035 | } 1036 | } 1037 | } 1038 | }, 1039 | "gulp-wrap": { 1040 | "version": "0.11.0", 1041 | "resolved": "https://registry.npmjs.org/gulp-wrap/-/gulp-wrap-0.11.0.tgz", 1042 | "integrity": "sha1-a0nz9r8cmWT8Twxgwu5Gd61JtcE=", 1043 | "dev": true, 1044 | "requires": { 1045 | "consolidate": "^0.11.0", 1046 | "es6-promise": "^2.0.1", 1047 | "fs-readfile-promise": "^1.1.0", 1048 | "gulp-util": "^3.0.3", 1049 | "js-yaml": "^3.2.6", 1050 | "lodash": "^3.1.0", 1051 | "node.extend": "^1.1.2", 1052 | "through2": "^0.6.3", 1053 | "tryit": "^1.0.1", 1054 | "vinyl-bufferstream": "^1.0.1" 1055 | }, 1056 | "dependencies": { 1057 | "lodash": { 1058 | "version": "3.10.1", 1059 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 1060 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 1061 | "dev": true 1062 | } 1063 | } 1064 | }, 1065 | "gulplog": { 1066 | "version": "1.0.0", 1067 | "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", 1068 | "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", 1069 | "requires": { 1070 | "glogg": "^1.0.0" 1071 | } 1072 | }, 1073 | "handlebars": { 1074 | "version": "3.0.6", 1075 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-3.0.6.tgz", 1076 | "integrity": "sha512-LxzdOvkYFsdL6ZT92igXthJIZLYKBSowtrM3oxfMdOwjv0dRWk6EK4PygNgXc0xwjH38BWMCSnktrOpKbec+Qw==", 1077 | "dev": true, 1078 | "requires": { 1079 | "optimist": "^0.6.1", 1080 | "source-map": "^0.1.40", 1081 | "uglify-js": "^2.6" 1082 | }, 1083 | "dependencies": { 1084 | "source-map": { 1085 | "version": "0.1.43", 1086 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 1087 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 1088 | "dev": true, 1089 | "requires": { 1090 | "amdefine": ">=0.0.4" 1091 | } 1092 | } 1093 | } 1094 | }, 1095 | "has": { 1096 | "version": "1.0.3", 1097 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1098 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1099 | "dev": true, 1100 | "requires": { 1101 | "function-bind": "^1.1.1" 1102 | } 1103 | }, 1104 | "has-ansi": { 1105 | "version": "2.0.0", 1106 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1107 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1108 | "requires": { 1109 | "ansi-regex": "^2.0.0" 1110 | } 1111 | }, 1112 | "has-gulplog": { 1113 | "version": "0.1.0", 1114 | "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", 1115 | "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", 1116 | "requires": { 1117 | "sparkles": "^1.0.0" 1118 | } 1119 | }, 1120 | "has-value": { 1121 | "version": "1.0.0", 1122 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 1123 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 1124 | "dev": true, 1125 | "requires": { 1126 | "get-value": "^2.0.6", 1127 | "has-values": "^1.0.0", 1128 | "isobject": "^3.0.0" 1129 | } 1130 | }, 1131 | "has-values": { 1132 | "version": "1.0.0", 1133 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 1134 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 1135 | "dev": true, 1136 | "requires": { 1137 | "is-number": "^3.0.0", 1138 | "kind-of": "^4.0.0" 1139 | }, 1140 | "dependencies": { 1141 | "kind-of": { 1142 | "version": "4.0.0", 1143 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1144 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1145 | "dev": true, 1146 | "requires": { 1147 | "is-buffer": "^1.1.5" 1148 | } 1149 | } 1150 | } 1151 | }, 1152 | "homedir-polyfill": { 1153 | "version": "1.0.3", 1154 | "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", 1155 | "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", 1156 | "dev": true, 1157 | "requires": { 1158 | "parse-passwd": "^1.0.0" 1159 | } 1160 | }, 1161 | "inflight": { 1162 | "version": "1.0.6", 1163 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1164 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1165 | "requires": { 1166 | "once": "^1.3.0", 1167 | "wrappy": "1" 1168 | } 1169 | }, 1170 | "inherits": { 1171 | "version": "2.0.3", 1172 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1173 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1174 | }, 1175 | "ini": { 1176 | "version": "1.3.5", 1177 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1178 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1179 | "dev": true 1180 | }, 1181 | "interpret": { 1182 | "version": "1.2.0", 1183 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", 1184 | "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", 1185 | "dev": true 1186 | }, 1187 | "is": { 1188 | "version": "3.3.0", 1189 | "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", 1190 | "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", 1191 | "dev": true 1192 | }, 1193 | "is-absolute": { 1194 | "version": "1.0.0", 1195 | "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", 1196 | "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", 1197 | "dev": true, 1198 | "requires": { 1199 | "is-relative": "^1.0.0", 1200 | "is-windows": "^1.0.1" 1201 | } 1202 | }, 1203 | "is-accessor-descriptor": { 1204 | "version": "0.1.6", 1205 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 1206 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 1207 | "dev": true, 1208 | "requires": { 1209 | "kind-of": "^3.0.2" 1210 | }, 1211 | "dependencies": { 1212 | "kind-of": { 1213 | "version": "3.2.2", 1214 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1215 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1216 | "dev": true, 1217 | "requires": { 1218 | "is-buffer": "^1.1.5" 1219 | } 1220 | } 1221 | } 1222 | }, 1223 | "is-buffer": { 1224 | "version": "1.1.6", 1225 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1226 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1227 | "dev": true 1228 | }, 1229 | "is-data-descriptor": { 1230 | "version": "0.1.4", 1231 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 1232 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 1233 | "dev": true, 1234 | "requires": { 1235 | "kind-of": "^3.0.2" 1236 | }, 1237 | "dependencies": { 1238 | "kind-of": { 1239 | "version": "3.2.2", 1240 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1241 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1242 | "dev": true, 1243 | "requires": { 1244 | "is-buffer": "^1.1.5" 1245 | } 1246 | } 1247 | } 1248 | }, 1249 | "is-descriptor": { 1250 | "version": "0.1.6", 1251 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 1252 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 1253 | "dev": true, 1254 | "requires": { 1255 | "is-accessor-descriptor": "^0.1.6", 1256 | "is-data-descriptor": "^0.1.4", 1257 | "kind-of": "^5.0.0" 1258 | }, 1259 | "dependencies": { 1260 | "kind-of": { 1261 | "version": "5.1.0", 1262 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1263 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 1264 | "dev": true 1265 | } 1266 | } 1267 | }, 1268 | "is-extendable": { 1269 | "version": "0.1.1", 1270 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1271 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1272 | "dev": true 1273 | }, 1274 | "is-extglob": { 1275 | "version": "2.1.1", 1276 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1277 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1278 | "dev": true 1279 | }, 1280 | "is-glob": { 1281 | "version": "3.1.0", 1282 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1283 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 1284 | "dev": true, 1285 | "requires": { 1286 | "is-extglob": "^2.1.0" 1287 | } 1288 | }, 1289 | "is-number": { 1290 | "version": "3.0.0", 1291 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1292 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1293 | "dev": true, 1294 | "requires": { 1295 | "kind-of": "^3.0.2" 1296 | }, 1297 | "dependencies": { 1298 | "kind-of": { 1299 | "version": "3.2.2", 1300 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1301 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1302 | "dev": true, 1303 | "requires": { 1304 | "is-buffer": "^1.1.5" 1305 | } 1306 | } 1307 | } 1308 | }, 1309 | "is-plain-object": { 1310 | "version": "2.0.4", 1311 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1312 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1313 | "dev": true, 1314 | "requires": { 1315 | "isobject": "^3.0.1" 1316 | } 1317 | }, 1318 | "is-relative": { 1319 | "version": "1.0.0", 1320 | "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", 1321 | "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", 1322 | "dev": true, 1323 | "requires": { 1324 | "is-unc-path": "^1.0.0" 1325 | } 1326 | }, 1327 | "is-unc-path": { 1328 | "version": "1.0.0", 1329 | "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", 1330 | "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", 1331 | "dev": true, 1332 | "requires": { 1333 | "unc-path-regex": "^0.1.2" 1334 | } 1335 | }, 1336 | "is-utf8": { 1337 | "version": "0.2.1", 1338 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1339 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" 1340 | }, 1341 | "is-windows": { 1342 | "version": "1.0.2", 1343 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1344 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 1345 | "dev": true 1346 | }, 1347 | "isarray": { 1348 | "version": "0.0.1", 1349 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1350 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1351 | }, 1352 | "isexe": { 1353 | "version": "2.0.0", 1354 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1355 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1356 | "dev": true 1357 | }, 1358 | "isobject": { 1359 | "version": "3.0.1", 1360 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1361 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 1362 | "dev": true 1363 | }, 1364 | "js-yaml": { 1365 | "version": "3.13.0", 1366 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", 1367 | "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", 1368 | "dev": true, 1369 | "requires": { 1370 | "argparse": "^1.0.7", 1371 | "esprima": "^4.0.0" 1372 | } 1373 | }, 1374 | "json-stable-stringify-without-jsonify": { 1375 | "version": "1.0.1", 1376 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1377 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 1378 | }, 1379 | "kind-of": { 1380 | "version": "6.0.2", 1381 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1382 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 1383 | "dev": true 1384 | }, 1385 | "lazy-cache": { 1386 | "version": "1.0.4", 1387 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 1388 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 1389 | "dev": true, 1390 | "optional": true 1391 | }, 1392 | "liftoff": { 1393 | "version": "2.5.0", 1394 | "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", 1395 | "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", 1396 | "dev": true, 1397 | "requires": { 1398 | "extend": "^3.0.0", 1399 | "findup-sync": "^2.0.0", 1400 | "fined": "^1.0.1", 1401 | "flagged-respawn": "^1.0.0", 1402 | "is-plain-object": "^2.0.4", 1403 | "object.map": "^1.0.0", 1404 | "rechoir": "^0.6.2", 1405 | "resolve": "^1.1.7" 1406 | } 1407 | }, 1408 | "lodash": { 1409 | "version": "1.0.2", 1410 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", 1411 | "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", 1412 | "dev": true 1413 | }, 1414 | "lodash._basecopy": { 1415 | "version": "3.0.1", 1416 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 1417 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" 1418 | }, 1419 | "lodash._basetostring": { 1420 | "version": "3.0.1", 1421 | "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", 1422 | "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=" 1423 | }, 1424 | "lodash._basevalues": { 1425 | "version": "3.0.0", 1426 | "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", 1427 | "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=" 1428 | }, 1429 | "lodash._getnative": { 1430 | "version": "3.9.1", 1431 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1432 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" 1433 | }, 1434 | "lodash._isiterateecall": { 1435 | "version": "3.0.9", 1436 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1437 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" 1438 | }, 1439 | "lodash._reescape": { 1440 | "version": "3.0.0", 1441 | "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", 1442 | "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=" 1443 | }, 1444 | "lodash._reevaluate": { 1445 | "version": "3.0.0", 1446 | "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", 1447 | "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=" 1448 | }, 1449 | "lodash._reinterpolate": { 1450 | "version": "3.0.0", 1451 | "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", 1452 | "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" 1453 | }, 1454 | "lodash._root": { 1455 | "version": "3.0.1", 1456 | "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", 1457 | "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=" 1458 | }, 1459 | "lodash.escape": { 1460 | "version": "3.2.0", 1461 | "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", 1462 | "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", 1463 | "requires": { 1464 | "lodash._root": "^3.0.0" 1465 | } 1466 | }, 1467 | "lodash.isarguments": { 1468 | "version": "3.1.0", 1469 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1470 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" 1471 | }, 1472 | "lodash.isarray": { 1473 | "version": "3.0.4", 1474 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1475 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" 1476 | }, 1477 | "lodash.keys": { 1478 | "version": "3.1.2", 1479 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1480 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1481 | "requires": { 1482 | "lodash._getnative": "^3.0.0", 1483 | "lodash.isarguments": "^3.0.0", 1484 | "lodash.isarray": "^3.0.0" 1485 | } 1486 | }, 1487 | "lodash.restparam": { 1488 | "version": "3.6.1", 1489 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1490 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=" 1491 | }, 1492 | "lodash.template": { 1493 | "version": "3.6.2", 1494 | "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", 1495 | "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", 1496 | "requires": { 1497 | "lodash._basecopy": "^3.0.0", 1498 | "lodash._basetostring": "^3.0.0", 1499 | "lodash._basevalues": "^3.0.0", 1500 | "lodash._isiterateecall": "^3.0.0", 1501 | "lodash._reinterpolate": "^3.0.0", 1502 | "lodash.escape": "^3.0.0", 1503 | "lodash.keys": "^3.0.0", 1504 | "lodash.restparam": "^3.0.0", 1505 | "lodash.templatesettings": "^3.0.0" 1506 | } 1507 | }, 1508 | "lodash.templatesettings": { 1509 | "version": "3.1.1", 1510 | "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", 1511 | "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", 1512 | "requires": { 1513 | "lodash._reinterpolate": "^3.0.0", 1514 | "lodash.escape": "^3.0.0" 1515 | } 1516 | }, 1517 | "longest": { 1518 | "version": "1.0.1", 1519 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 1520 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 1521 | "dev": true, 1522 | "optional": true 1523 | }, 1524 | "lru-cache": { 1525 | "version": "2.7.3", 1526 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1527 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 1528 | "dev": true 1529 | }, 1530 | "make-iterator": { 1531 | "version": "1.0.1", 1532 | "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", 1533 | "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", 1534 | "dev": true, 1535 | "requires": { 1536 | "kind-of": "^6.0.2" 1537 | } 1538 | }, 1539 | "map-cache": { 1540 | "version": "0.2.2", 1541 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1542 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 1543 | "dev": true 1544 | }, 1545 | "map-visit": { 1546 | "version": "1.0.0", 1547 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 1548 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 1549 | "dev": true, 1550 | "requires": { 1551 | "object-visit": "^1.0.0" 1552 | } 1553 | }, 1554 | "micromatch": { 1555 | "version": "3.1.10", 1556 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 1557 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 1558 | "dev": true, 1559 | "requires": { 1560 | "arr-diff": "^4.0.0", 1561 | "array-unique": "^0.3.2", 1562 | "braces": "^2.3.1", 1563 | "define-property": "^2.0.2", 1564 | "extend-shallow": "^3.0.2", 1565 | "extglob": "^2.0.4", 1566 | "fragment-cache": "^0.2.1", 1567 | "kind-of": "^6.0.2", 1568 | "nanomatch": "^1.2.9", 1569 | "object.pick": "^1.3.0", 1570 | "regex-not": "^1.0.0", 1571 | "snapdragon": "^0.8.1", 1572 | "to-regex": "^3.0.2" 1573 | } 1574 | }, 1575 | "minimatch": { 1576 | "version": "2.0.10", 1577 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 1578 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 1579 | "requires": { 1580 | "brace-expansion": "^1.0.0" 1581 | } 1582 | }, 1583 | "minimist": { 1584 | "version": "1.2.0", 1585 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1586 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1587 | }, 1588 | "mixin-deep": { 1589 | "version": "1.3.1", 1590 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 1591 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", 1592 | "dev": true, 1593 | "requires": { 1594 | "for-in": "^1.0.2", 1595 | "is-extendable": "^1.0.1" 1596 | }, 1597 | "dependencies": { 1598 | "is-extendable": { 1599 | "version": "1.0.1", 1600 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1601 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1602 | "dev": true, 1603 | "requires": { 1604 | "is-plain-object": "^2.0.4" 1605 | } 1606 | } 1607 | } 1608 | }, 1609 | "mkdirp": { 1610 | "version": "0.5.1", 1611 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1612 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1613 | "dev": true, 1614 | "requires": { 1615 | "minimist": "0.0.8" 1616 | }, 1617 | "dependencies": { 1618 | "minimist": { 1619 | "version": "0.0.8", 1620 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1621 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1622 | "dev": true 1623 | } 1624 | } 1625 | }, 1626 | "ms": { 1627 | "version": "2.0.0", 1628 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1629 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1630 | "dev": true 1631 | }, 1632 | "multipipe": { 1633 | "version": "0.1.2", 1634 | "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", 1635 | "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", 1636 | "requires": { 1637 | "duplexer2": "0.0.2" 1638 | } 1639 | }, 1640 | "nanomatch": { 1641 | "version": "1.2.13", 1642 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 1643 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 1644 | "dev": true, 1645 | "requires": { 1646 | "arr-diff": "^4.0.0", 1647 | "array-unique": "^0.3.2", 1648 | "define-property": "^2.0.2", 1649 | "extend-shallow": "^3.0.2", 1650 | "fragment-cache": "^0.2.1", 1651 | "is-windows": "^1.0.2", 1652 | "kind-of": "^6.0.2", 1653 | "object.pick": "^1.3.0", 1654 | "regex-not": "^1.0.0", 1655 | "snapdragon": "^0.8.1", 1656 | "to-regex": "^3.0.1" 1657 | } 1658 | }, 1659 | "natives": { 1660 | "version": "1.1.6", 1661 | "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", 1662 | "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==" 1663 | }, 1664 | "node.extend": { 1665 | "version": "1.1.8", 1666 | "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.8.tgz", 1667 | "integrity": "sha512-L/dvEBwyg3UowwqOUTyDsGBU6kjBQOpOhshio9V3i3BMPv5YUb9+mWNN8MK0IbWqT0AqaTSONZf0aTuMMahWgA==", 1668 | "dev": true, 1669 | "requires": { 1670 | "has": "^1.0.3", 1671 | "is": "^3.2.1" 1672 | } 1673 | }, 1674 | "object-assign": { 1675 | "version": "3.0.0", 1676 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 1677 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" 1678 | }, 1679 | "object-copy": { 1680 | "version": "0.1.0", 1681 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 1682 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 1683 | "dev": true, 1684 | "requires": { 1685 | "copy-descriptor": "^0.1.0", 1686 | "define-property": "^0.2.5", 1687 | "kind-of": "^3.0.3" 1688 | }, 1689 | "dependencies": { 1690 | "define-property": { 1691 | "version": "0.2.5", 1692 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1693 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1694 | "dev": true, 1695 | "requires": { 1696 | "is-descriptor": "^0.1.0" 1697 | } 1698 | }, 1699 | "kind-of": { 1700 | "version": "3.2.2", 1701 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1702 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1703 | "dev": true, 1704 | "requires": { 1705 | "is-buffer": "^1.1.5" 1706 | } 1707 | } 1708 | } 1709 | }, 1710 | "object-visit": { 1711 | "version": "1.0.1", 1712 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 1713 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 1714 | "dev": true, 1715 | "requires": { 1716 | "isobject": "^3.0.0" 1717 | } 1718 | }, 1719 | "object.defaults": { 1720 | "version": "1.1.0", 1721 | "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", 1722 | "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", 1723 | "dev": true, 1724 | "requires": { 1725 | "array-each": "^1.0.1", 1726 | "array-slice": "^1.0.0", 1727 | "for-own": "^1.0.0", 1728 | "isobject": "^3.0.0" 1729 | } 1730 | }, 1731 | "object.map": { 1732 | "version": "1.0.1", 1733 | "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", 1734 | "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", 1735 | "dev": true, 1736 | "requires": { 1737 | "for-own": "^1.0.0", 1738 | "make-iterator": "^1.0.0" 1739 | } 1740 | }, 1741 | "object.pick": { 1742 | "version": "1.3.0", 1743 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 1744 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 1745 | "dev": true, 1746 | "requires": { 1747 | "isobject": "^3.0.1" 1748 | } 1749 | }, 1750 | "once": { 1751 | "version": "1.4.0", 1752 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1753 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1754 | "requires": { 1755 | "wrappy": "1" 1756 | } 1757 | }, 1758 | "optimist": { 1759 | "version": "0.6.1", 1760 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 1761 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 1762 | "dev": true, 1763 | "requires": { 1764 | "minimist": "~0.0.1", 1765 | "wordwrap": "~0.0.2" 1766 | }, 1767 | "dependencies": { 1768 | "minimist": { 1769 | "version": "0.0.10", 1770 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1771 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 1772 | "dev": true 1773 | } 1774 | } 1775 | }, 1776 | "orchestrator": { 1777 | "version": "0.3.8", 1778 | "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", 1779 | "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", 1780 | "dev": true, 1781 | "requires": { 1782 | "end-of-stream": "~0.1.5", 1783 | "sequencify": "~0.0.7", 1784 | "stream-consume": "~0.1.0" 1785 | } 1786 | }, 1787 | "ordered-read-streams": { 1788 | "version": "0.1.0", 1789 | "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", 1790 | "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=" 1791 | }, 1792 | "os-homedir": { 1793 | "version": "1.0.2", 1794 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1795 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 1796 | "dev": true 1797 | }, 1798 | "parse-filepath": { 1799 | "version": "1.0.2", 1800 | "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", 1801 | "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", 1802 | "dev": true, 1803 | "requires": { 1804 | "is-absolute": "^1.0.0", 1805 | "map-cache": "^0.2.0", 1806 | "path-root": "^0.1.1" 1807 | } 1808 | }, 1809 | "parse-node-version": { 1810 | "version": "1.0.1", 1811 | "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", 1812 | "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" 1813 | }, 1814 | "parse-passwd": { 1815 | "version": "1.0.0", 1816 | "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", 1817 | "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", 1818 | "dev": true 1819 | }, 1820 | "pascalcase": { 1821 | "version": "0.1.1", 1822 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 1823 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 1824 | "dev": true 1825 | }, 1826 | "path-parse": { 1827 | "version": "1.0.6", 1828 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1829 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1830 | "dev": true 1831 | }, 1832 | "path-root": { 1833 | "version": "0.1.1", 1834 | "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", 1835 | "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", 1836 | "dev": true, 1837 | "requires": { 1838 | "path-root-regex": "^0.1.0" 1839 | } 1840 | }, 1841 | "path-root-regex": { 1842 | "version": "0.1.2", 1843 | "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", 1844 | "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", 1845 | "dev": true 1846 | }, 1847 | "posix-character-classes": { 1848 | "version": "0.1.1", 1849 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 1850 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 1851 | "dev": true 1852 | }, 1853 | "pretty-hrtime": { 1854 | "version": "1.0.3", 1855 | "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", 1856 | "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", 1857 | "dev": true 1858 | }, 1859 | "process-nextick-args": { 1860 | "version": "2.0.0", 1861 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1862 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" 1863 | }, 1864 | "promise": { 1865 | "version": "6.1.0", 1866 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", 1867 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", 1868 | "requires": { 1869 | "asap": "~1.0.0" 1870 | } 1871 | }, 1872 | "readable-stream": { 1873 | "version": "1.0.34", 1874 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1875 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 1876 | "requires": { 1877 | "core-util-is": "~1.0.0", 1878 | "inherits": "~2.0.1", 1879 | "isarray": "0.0.1", 1880 | "string_decoder": "~0.10.x" 1881 | } 1882 | }, 1883 | "rechoir": { 1884 | "version": "0.6.2", 1885 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", 1886 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", 1887 | "dev": true, 1888 | "requires": { 1889 | "resolve": "^1.1.6" 1890 | } 1891 | }, 1892 | "regex-not": { 1893 | "version": "1.0.2", 1894 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 1895 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 1896 | "dev": true, 1897 | "requires": { 1898 | "extend-shallow": "^3.0.2", 1899 | "safe-regex": "^1.1.0" 1900 | } 1901 | }, 1902 | "repeat-element": { 1903 | "version": "1.1.3", 1904 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 1905 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 1906 | "dev": true 1907 | }, 1908 | "repeat-string": { 1909 | "version": "1.6.1", 1910 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1911 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 1912 | "dev": true 1913 | }, 1914 | "replace-ext": { 1915 | "version": "0.0.1", 1916 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", 1917 | "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" 1918 | }, 1919 | "resolve": { 1920 | "version": "1.10.0", 1921 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", 1922 | "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", 1923 | "dev": true, 1924 | "requires": { 1925 | "path-parse": "^1.0.6" 1926 | } 1927 | }, 1928 | "resolve-dir": { 1929 | "version": "1.0.1", 1930 | "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", 1931 | "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", 1932 | "dev": true, 1933 | "requires": { 1934 | "expand-tilde": "^2.0.0", 1935 | "global-modules": "^1.0.0" 1936 | } 1937 | }, 1938 | "resolve-url": { 1939 | "version": "0.2.1", 1940 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 1941 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 1942 | "dev": true 1943 | }, 1944 | "ret": { 1945 | "version": "0.1.15", 1946 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 1947 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 1948 | "dev": true 1949 | }, 1950 | "right-align": { 1951 | "version": "0.1.3", 1952 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1953 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 1954 | "dev": true, 1955 | "optional": true, 1956 | "requires": { 1957 | "align-text": "^0.1.1" 1958 | } 1959 | }, 1960 | "safe-buffer": { 1961 | "version": "5.1.2", 1962 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1963 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1964 | }, 1965 | "safe-regex": { 1966 | "version": "1.1.0", 1967 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 1968 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 1969 | "dev": true, 1970 | "requires": { 1971 | "ret": "~0.1.10" 1972 | } 1973 | }, 1974 | "semver": { 1975 | "version": "4.3.6", 1976 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 1977 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 1978 | "dev": true 1979 | }, 1980 | "sequencify": { 1981 | "version": "0.0.7", 1982 | "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", 1983 | "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", 1984 | "dev": true 1985 | }, 1986 | "set-value": { 1987 | "version": "2.0.0", 1988 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 1989 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", 1990 | "dev": true, 1991 | "requires": { 1992 | "extend-shallow": "^2.0.1", 1993 | "is-extendable": "^0.1.1", 1994 | "is-plain-object": "^2.0.3", 1995 | "split-string": "^3.0.1" 1996 | }, 1997 | "dependencies": { 1998 | "extend-shallow": { 1999 | "version": "2.0.1", 2000 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2001 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2002 | "dev": true, 2003 | "requires": { 2004 | "is-extendable": "^0.1.0" 2005 | } 2006 | } 2007 | } 2008 | }, 2009 | "should": { 2010 | "version": "4.6.5", 2011 | "resolved": "https://registry.npmjs.org/should/-/should-4.6.5.tgz", 2012 | "integrity": "sha1-DRI0bbvRsCj59Lt6nVRzZPw2qH8=", 2013 | "dev": true, 2014 | "requires": { 2015 | "should-equal": "0.3.1", 2016 | "should-format": "0.0.7", 2017 | "should-type": "0.0.4" 2018 | } 2019 | }, 2020 | "should-equal": { 2021 | "version": "0.3.1", 2022 | "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-0.3.1.tgz", 2023 | "integrity": "sha1-vY6pemdI45+tR2o75v1y68LnK/A=", 2024 | "dev": true, 2025 | "requires": { 2026 | "should-type": "0.0.4" 2027 | } 2028 | }, 2029 | "should-format": { 2030 | "version": "0.0.7", 2031 | "resolved": "https://registry.npmjs.org/should-format/-/should-format-0.0.7.tgz", 2032 | "integrity": "sha1-Hi74a9kdqcLgQSM1tWq6vZov3hI=", 2033 | "dev": true, 2034 | "requires": { 2035 | "should-type": "0.0.4" 2036 | } 2037 | }, 2038 | "should-type": { 2039 | "version": "0.0.4", 2040 | "resolved": "https://registry.npmjs.org/should-type/-/should-type-0.0.4.tgz", 2041 | "integrity": "sha1-ATKgVBemEmhmQmrPEW8e1WI6XNA=", 2042 | "dev": true 2043 | }, 2044 | "sigmund": { 2045 | "version": "1.0.1", 2046 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 2047 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 2048 | "dev": true 2049 | }, 2050 | "snapdragon": { 2051 | "version": "0.8.2", 2052 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 2053 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 2054 | "dev": true, 2055 | "requires": { 2056 | "base": "^0.11.1", 2057 | "debug": "^2.2.0", 2058 | "define-property": "^0.2.5", 2059 | "extend-shallow": "^2.0.1", 2060 | "map-cache": "^0.2.2", 2061 | "source-map": "^0.5.6", 2062 | "source-map-resolve": "^0.5.0", 2063 | "use": "^3.1.0" 2064 | }, 2065 | "dependencies": { 2066 | "define-property": { 2067 | "version": "0.2.5", 2068 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2069 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2070 | "dev": true, 2071 | "requires": { 2072 | "is-descriptor": "^0.1.0" 2073 | } 2074 | }, 2075 | "extend-shallow": { 2076 | "version": "2.0.1", 2077 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2078 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2079 | "dev": true, 2080 | "requires": { 2081 | "is-extendable": "^0.1.0" 2082 | } 2083 | } 2084 | } 2085 | }, 2086 | "snapdragon-node": { 2087 | "version": "2.1.1", 2088 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 2089 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 2090 | "dev": true, 2091 | "requires": { 2092 | "define-property": "^1.0.0", 2093 | "isobject": "^3.0.0", 2094 | "snapdragon-util": "^3.0.1" 2095 | }, 2096 | "dependencies": { 2097 | "define-property": { 2098 | "version": "1.0.0", 2099 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 2100 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 2101 | "dev": true, 2102 | "requires": { 2103 | "is-descriptor": "^1.0.0" 2104 | } 2105 | }, 2106 | "is-accessor-descriptor": { 2107 | "version": "1.0.0", 2108 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 2109 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 2110 | "dev": true, 2111 | "requires": { 2112 | "kind-of": "^6.0.0" 2113 | } 2114 | }, 2115 | "is-data-descriptor": { 2116 | "version": "1.0.0", 2117 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 2118 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 2119 | "dev": true, 2120 | "requires": { 2121 | "kind-of": "^6.0.0" 2122 | } 2123 | }, 2124 | "is-descriptor": { 2125 | "version": "1.0.2", 2126 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 2127 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 2128 | "dev": true, 2129 | "requires": { 2130 | "is-accessor-descriptor": "^1.0.0", 2131 | "is-data-descriptor": "^1.0.0", 2132 | "kind-of": "^6.0.2" 2133 | } 2134 | } 2135 | } 2136 | }, 2137 | "snapdragon-util": { 2138 | "version": "3.0.1", 2139 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 2140 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 2141 | "dev": true, 2142 | "requires": { 2143 | "kind-of": "^3.2.0" 2144 | }, 2145 | "dependencies": { 2146 | "kind-of": { 2147 | "version": "3.2.2", 2148 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2149 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2150 | "dev": true, 2151 | "requires": { 2152 | "is-buffer": "^1.1.5" 2153 | } 2154 | } 2155 | } 2156 | }, 2157 | "source-map": { 2158 | "version": "0.5.7", 2159 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2160 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2161 | "dev": true 2162 | }, 2163 | "source-map-resolve": { 2164 | "version": "0.5.2", 2165 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 2166 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 2167 | "dev": true, 2168 | "requires": { 2169 | "atob": "^2.1.1", 2170 | "decode-uri-component": "^0.2.0", 2171 | "resolve-url": "^0.2.1", 2172 | "source-map-url": "^0.4.0", 2173 | "urix": "^0.1.0" 2174 | } 2175 | }, 2176 | "source-map-url": { 2177 | "version": "0.4.0", 2178 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 2179 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 2180 | "dev": true 2181 | }, 2182 | "sparkles": { 2183 | "version": "1.0.1", 2184 | "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", 2185 | "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==" 2186 | }, 2187 | "split-string": { 2188 | "version": "3.1.0", 2189 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 2190 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 2191 | "dev": true, 2192 | "requires": { 2193 | "extend-shallow": "^3.0.0" 2194 | } 2195 | }, 2196 | "sprintf-js": { 2197 | "version": "1.0.3", 2198 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2199 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2200 | "dev": true 2201 | }, 2202 | "static-extend": { 2203 | "version": "0.1.2", 2204 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 2205 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 2206 | "dev": true, 2207 | "requires": { 2208 | "define-property": "^0.2.5", 2209 | "object-copy": "^0.1.0" 2210 | }, 2211 | "dependencies": { 2212 | "define-property": { 2213 | "version": "0.2.5", 2214 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2215 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2216 | "dev": true, 2217 | "requires": { 2218 | "is-descriptor": "^0.1.0" 2219 | } 2220 | } 2221 | } 2222 | }, 2223 | "stream-assert": { 2224 | "version": "2.0.3", 2225 | "resolved": "https://registry.npmjs.org/stream-assert/-/stream-assert-2.0.3.tgz", 2226 | "integrity": "sha1-G6ijS2feoGsA7jkmHKYEFDcjPjI=", 2227 | "dev": true, 2228 | "requires": { 2229 | "through2": "^0.6.1" 2230 | } 2231 | }, 2232 | "stream-consume": { 2233 | "version": "0.1.1", 2234 | "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", 2235 | "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", 2236 | "dev": true 2237 | }, 2238 | "string_decoder": { 2239 | "version": "0.10.31", 2240 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 2241 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 2242 | }, 2243 | "strip-ansi": { 2244 | "version": "3.0.1", 2245 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2246 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2247 | "requires": { 2248 | "ansi-regex": "^2.0.0" 2249 | } 2250 | }, 2251 | "strip-bom": { 2252 | "version": "1.0.0", 2253 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", 2254 | "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", 2255 | "requires": { 2256 | "first-chunk-stream": "^1.0.0", 2257 | "is-utf8": "^0.2.0" 2258 | } 2259 | }, 2260 | "supports-color": { 2261 | "version": "2.0.0", 2262 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2263 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 2264 | }, 2265 | "through2": { 2266 | "version": "0.6.5", 2267 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", 2268 | "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", 2269 | "requires": { 2270 | "readable-stream": ">=1.0.33-1 <1.1.0-0", 2271 | "xtend": ">=4.0.0 <4.1.0-0" 2272 | } 2273 | }, 2274 | "through2-filter": { 2275 | "version": "3.0.0", 2276 | "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", 2277 | "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", 2278 | "requires": { 2279 | "through2": "~2.0.0", 2280 | "xtend": "~4.0.0" 2281 | }, 2282 | "dependencies": { 2283 | "isarray": { 2284 | "version": "1.0.0", 2285 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2286 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 2287 | }, 2288 | "readable-stream": { 2289 | "version": "2.3.6", 2290 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2291 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2292 | "requires": { 2293 | "core-util-is": "~1.0.0", 2294 | "inherits": "~2.0.3", 2295 | "isarray": "~1.0.0", 2296 | "process-nextick-args": "~2.0.0", 2297 | "safe-buffer": "~5.1.1", 2298 | "string_decoder": "~1.1.1", 2299 | "util-deprecate": "~1.0.1" 2300 | } 2301 | }, 2302 | "string_decoder": { 2303 | "version": "1.1.1", 2304 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2305 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2306 | "requires": { 2307 | "safe-buffer": "~5.1.0" 2308 | } 2309 | }, 2310 | "through2": { 2311 | "version": "2.0.5", 2312 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2313 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2314 | "requires": { 2315 | "readable-stream": "~2.3.6", 2316 | "xtend": "~4.0.1" 2317 | } 2318 | } 2319 | } 2320 | }, 2321 | "tildify": { 2322 | "version": "1.2.0", 2323 | "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", 2324 | "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", 2325 | "dev": true, 2326 | "requires": { 2327 | "os-homedir": "^1.0.0" 2328 | } 2329 | }, 2330 | "time-stamp": { 2331 | "version": "1.1.0", 2332 | "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", 2333 | "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" 2334 | }, 2335 | "to-object-path": { 2336 | "version": "0.3.0", 2337 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 2338 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 2339 | "dev": true, 2340 | "requires": { 2341 | "kind-of": "^3.0.2" 2342 | }, 2343 | "dependencies": { 2344 | "kind-of": { 2345 | "version": "3.2.2", 2346 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2347 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2348 | "dev": true, 2349 | "requires": { 2350 | "is-buffer": "^1.1.5" 2351 | } 2352 | } 2353 | } 2354 | }, 2355 | "to-regex": { 2356 | "version": "3.0.2", 2357 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 2358 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 2359 | "dev": true, 2360 | "requires": { 2361 | "define-property": "^2.0.2", 2362 | "extend-shallow": "^3.0.2", 2363 | "regex-not": "^1.0.2", 2364 | "safe-regex": "^1.1.0" 2365 | } 2366 | }, 2367 | "to-regex-range": { 2368 | "version": "2.1.1", 2369 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 2370 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 2371 | "dev": true, 2372 | "requires": { 2373 | "is-number": "^3.0.0", 2374 | "repeat-string": "^1.6.1" 2375 | } 2376 | }, 2377 | "tryit": { 2378 | "version": "1.0.3", 2379 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 2380 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 2381 | "dev": true 2382 | }, 2383 | "uglify-js": { 2384 | "version": "2.8.29", 2385 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 2386 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 2387 | "dev": true, 2388 | "optional": true, 2389 | "requires": { 2390 | "source-map": "~0.5.1", 2391 | "uglify-to-browserify": "~1.0.0", 2392 | "yargs": "~3.10.0" 2393 | } 2394 | }, 2395 | "uglify-to-browserify": { 2396 | "version": "1.0.2", 2397 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 2398 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 2399 | "dev": true, 2400 | "optional": true 2401 | }, 2402 | "unc-path-regex": { 2403 | "version": "0.1.2", 2404 | "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", 2405 | "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", 2406 | "dev": true 2407 | }, 2408 | "union-value": { 2409 | "version": "1.0.0", 2410 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 2411 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 2412 | "dev": true, 2413 | "requires": { 2414 | "arr-union": "^3.1.0", 2415 | "get-value": "^2.0.6", 2416 | "is-extendable": "^0.1.1", 2417 | "set-value": "^0.4.3" 2418 | }, 2419 | "dependencies": { 2420 | "extend-shallow": { 2421 | "version": "2.0.1", 2422 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2423 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2424 | "dev": true, 2425 | "requires": { 2426 | "is-extendable": "^0.1.0" 2427 | } 2428 | }, 2429 | "set-value": { 2430 | "version": "0.4.3", 2431 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 2432 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 2433 | "dev": true, 2434 | "requires": { 2435 | "extend-shallow": "^2.0.1", 2436 | "is-extendable": "^0.1.1", 2437 | "is-plain-object": "^2.0.1", 2438 | "to-object-path": "^0.3.0" 2439 | } 2440 | } 2441 | } 2442 | }, 2443 | "unique-stream": { 2444 | "version": "2.3.1", 2445 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", 2446 | "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", 2447 | "requires": { 2448 | "json-stable-stringify-without-jsonify": "^1.0.1", 2449 | "through2-filter": "^3.0.0" 2450 | } 2451 | }, 2452 | "unset-value": { 2453 | "version": "1.0.0", 2454 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 2455 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 2456 | "dev": true, 2457 | "requires": { 2458 | "has-value": "^0.3.1", 2459 | "isobject": "^3.0.0" 2460 | }, 2461 | "dependencies": { 2462 | "has-value": { 2463 | "version": "0.3.1", 2464 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 2465 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 2466 | "dev": true, 2467 | "requires": { 2468 | "get-value": "^2.0.3", 2469 | "has-values": "^0.1.4", 2470 | "isobject": "^2.0.0" 2471 | }, 2472 | "dependencies": { 2473 | "isobject": { 2474 | "version": "2.1.0", 2475 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2476 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2477 | "dev": true, 2478 | "requires": { 2479 | "isarray": "1.0.0" 2480 | } 2481 | } 2482 | } 2483 | }, 2484 | "has-values": { 2485 | "version": "0.1.4", 2486 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 2487 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 2488 | "dev": true 2489 | }, 2490 | "isarray": { 2491 | "version": "1.0.0", 2492 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2493 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2494 | "dev": true 2495 | } 2496 | } 2497 | }, 2498 | "urix": { 2499 | "version": "0.1.0", 2500 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 2501 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 2502 | "dev": true 2503 | }, 2504 | "use": { 2505 | "version": "3.1.1", 2506 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 2507 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 2508 | "dev": true 2509 | }, 2510 | "user-home": { 2511 | "version": "1.1.1", 2512 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", 2513 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", 2514 | "dev": true 2515 | }, 2516 | "util-deprecate": { 2517 | "version": "1.0.2", 2518 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2519 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2520 | }, 2521 | "v8flags": { 2522 | "version": "2.1.1", 2523 | "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", 2524 | "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", 2525 | "dev": true, 2526 | "requires": { 2527 | "user-home": "^1.1.1" 2528 | } 2529 | }, 2530 | "vinyl": { 2531 | "version": "0.4.6", 2532 | "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", 2533 | "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", 2534 | "requires": { 2535 | "clone": "^0.2.0", 2536 | "clone-stats": "^0.0.1" 2537 | }, 2538 | "dependencies": { 2539 | "clone": { 2540 | "version": "0.2.0", 2541 | "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", 2542 | "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=" 2543 | } 2544 | } 2545 | }, 2546 | "vinyl-bufferstream": { 2547 | "version": "1.0.1", 2548 | "resolved": "https://registry.npmjs.org/vinyl-bufferstream/-/vinyl-bufferstream-1.0.1.tgz", 2549 | "integrity": "sha1-BTeGn1gO/6TKRay0dXnkuf5jCBo=", 2550 | "dev": true, 2551 | "requires": { 2552 | "bufferstreams": "1.0.1" 2553 | } 2554 | }, 2555 | "vinyl-fs": { 2556 | "version": "0.3.14", 2557 | "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", 2558 | "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", 2559 | "dev": true, 2560 | "requires": { 2561 | "defaults": "^1.0.0", 2562 | "glob-stream": "^3.1.5", 2563 | "glob-watcher": "^0.0.6", 2564 | "graceful-fs": "^3.0.0", 2565 | "mkdirp": "^0.5.0", 2566 | "strip-bom": "^1.0.0", 2567 | "through2": "^0.6.1", 2568 | "vinyl": "^0.4.0" 2569 | }, 2570 | "dependencies": { 2571 | "glob-stream": { 2572 | "version": "3.1.18", 2573 | "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", 2574 | "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", 2575 | "dev": true, 2576 | "requires": { 2577 | "glob": "^4.3.1", 2578 | "glob2base": "^0.0.12", 2579 | "minimatch": "^2.0.1", 2580 | "ordered-read-streams": "^0.1.0", 2581 | "through2": "^0.6.1", 2582 | "unique-stream": "^1.0.0" 2583 | } 2584 | }, 2585 | "unique-stream": { 2586 | "version": "1.0.0", 2587 | "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", 2588 | "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", 2589 | "dev": true 2590 | } 2591 | } 2592 | }, 2593 | "which": { 2594 | "version": "1.3.1", 2595 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2596 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2597 | "dev": true, 2598 | "requires": { 2599 | "isexe": "^2.0.0" 2600 | } 2601 | }, 2602 | "window-size": { 2603 | "version": "0.1.0", 2604 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 2605 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 2606 | "dev": true, 2607 | "optional": true 2608 | }, 2609 | "wordwrap": { 2610 | "version": "0.0.3", 2611 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2612 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 2613 | "dev": true 2614 | }, 2615 | "wrappy": { 2616 | "version": "1.0.2", 2617 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2618 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2619 | }, 2620 | "xtend": { 2621 | "version": "4.0.1", 2622 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2623 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 2624 | }, 2625 | "yargs": { 2626 | "version": "3.10.0", 2627 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 2628 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 2629 | "dev": true, 2630 | "optional": true, 2631 | "requires": { 2632 | "camelcase": "^1.0.2", 2633 | "cliui": "^2.1.0", 2634 | "decamelize": "^1.0.0", 2635 | "window-size": "0.1.0" 2636 | } 2637 | } 2638 | } 2639 | } 2640 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-seajs-combo", 3 | "version": "1.2.4", 4 | "description": "seajs(CMD) Module combo pulgin for gulp", 5 | "homepage": "http://github.com/chenmnkken/gulp-seajs-combo", 6 | "author": { 7 | "name": "YiguoChan", 8 | "email": "chenmnkken@gmail.com", 9 | "url": "http://stylechen.com/" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/chenmnkken/gulp-seajs-combo.git" 14 | }, 15 | "main": "index.js", 16 | "keywords": [ 17 | "gulpplugin", 18 | "seajs", 19 | "cmd", 20 | "combo" 21 | ], 22 | "scripts": { 23 | "test": "mocha" 24 | }, 25 | "dependencies": { 26 | "glob-stream": "^4.1.1", 27 | "graceful-fs": "^3.0.6", 28 | "gulp-util": "^3.0.0", 29 | "promise": "^6.1.0", 30 | "strip-bom": "^1.0.0", 31 | "through2": "^0.6.0", 32 | "vinyl": "^0.4.6" 33 | }, 34 | "devDependencies": { 35 | "gulp": "^3.8.11", 36 | "gulp-handlebars": "^4.0.0", 37 | "gulp-wrap": "^0.11.0", 38 | "should": "^4.6.5", 39 | "stream-assert": "^2.0.2" 40 | }, 41 | "license": "MIT" 42 | } 43 | -------------------------------------------------------------------------------- /test/build/a.js: -------------------------------------------------------------------------------- 1 | define('b',function(){ 2 | return 'b'; 3 | }); 4 | define('a',['b'],function( require, exports, module ){ 5 | var b = require('b'); 6 | module.exports = 'a' + ' ' + b; 7 | }); 8 | 9 | -------------------------------------------------------------------------------- /test/build/c.js: -------------------------------------------------------------------------------- 1 | define('d',function(){ 2 | return 'd'; 3 | }); 4 | define('c',['d','e'],function( require, exports, module ){ 5 | var d = require('d'); 6 | require('e'); 7 | 8 | module.exports = d; 9 | }); 10 | 11 | -------------------------------------------------------------------------------- /test/build/f.js: -------------------------------------------------------------------------------- 1 | define('j',function(){ 2 | return 'j'; 3 | }); 4 | 5 | define('h',function(){ 6 | return 'h'; 7 | }); 8 | define('g',['j'],function(require){ 9 | var j=require('j'); 10 | return 'g' + ' ' + j; 11 | }); 12 | 13 | seajs.use( 'g', function( g ){ 14 | console.log( g ); 15 | }); 16 | 17 | seajs.use( 'h', function( h ){ 18 | console.log( h ); 19 | }); 20 | 21 | -------------------------------------------------------------------------------- /test/build/f2.js: -------------------------------------------------------------------------------- 1 | define('j',function(){ 2 | return 'j'; 3 | }); 4 | 5 | define('h',function(){ 6 | return 'h'; 7 | }); 8 | define('g',['j'],function(require){ 9 | var j=require('j'); 10 | return 'g' + ' ' + j; 11 | }); 12 | 13 | seajs.use( ['g','h'], function( g, h ){ 14 | console.log( g ); 15 | console.log( h ); 16 | }); 17 | 18 | -------------------------------------------------------------------------------- /test/build/k.js: -------------------------------------------------------------------------------- 1 | define('l',function(){ 2 | return 'l'; 3 | }); 4 | 5 | 6 | 7 | seajs.use( 'l', function( l ){ 8 | console.log( l ); 9 | }); 10 | 11 | -------------------------------------------------------------------------------- /test/build/m.js: -------------------------------------------------------------------------------- 1 | define('p',function(){ 2 | return 'p'; 3 | }); 4 | define('o',['p'],function(require){ 5 | var p=require('p') 6 | return 'o' + ' ' + p 7 | } ) 8 | 9 | define('i',function(){ 10 | return 'i'; 11 | }); 12 | define('n',function(){ 13 | return 'n'; 14 | }); 15 | 16 | 17 | 18 | var hello = 'hello'; 19 | 20 | seajs.use( ['n', 'i', 'o'], function(){ 21 | var args = Array.prototype.join.call( arguments, ', ' ); 22 | console.log( args + ' is done' ); 23 | }); 24 | 25 | -------------------------------------------------------------------------------- /test/build/q.js: -------------------------------------------------------------------------------- 1 | define('u.tpl',function(){return Handlebars.template({"compiler":[6,">= 2.0.0-beta.1"],"main":function(depth0,helpers,partials,data) { 2 | return "
This is test Handlebars tpl.
"; 3 | },"useData":true})}); 4 | define('d',function(){ 5 | return 'd'; 6 | }); 7 | define('b',function(){ 8 | return 'b'; 9 | }); 10 | define('q',['b','u.tpl','d'],function( require ){ 11 | require('b'); 12 | var tpl = require('u.tpl'); 13 | require('d'); 14 | console.log( tpl ); 15 | }); 16 | 17 | -------------------------------------------------------------------------------- /test/build/r.js: -------------------------------------------------------------------------------- 1 | define('s_gulp-seajs-cmobo_2',function(){ 2 | return 's2'; 3 | }); 4 | 5 | define('s',function(){ 6 | return 's'; 7 | }); 8 | 9 | define('r',['s','s_gulp-seajs-cmobo_2'],function( require ){ 10 | var s = require('s'), 11 | s2 = require('s_gulp-seajs-cmobo_2'); 12 | 13 | return s + ', ' + s2 + ' is done'; 14 | }); 15 | 16 | -------------------------------------------------------------------------------- /test/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require( 'gulp' ), 2 | seajsCombo = require( '../index' ), 3 | handlebars = require( 'gulp-handlebars' ), 4 | wrap = require( 'gulp-wrap' ); 5 | 6 | gulp.task( 'a', function(){ 7 | return gulp.src( 'src/a.js' ) 8 | .pipe( seajsCombo() ) 9 | .pipe( gulp.dest('build') ); 10 | }); 11 | 12 | gulp.task( 'c', function(){ 13 | return gulp.src( 'src/c.js' ) 14 | .pipe( seajsCombo({ 15 | ignore : [ 'e' ] 16 | })) 17 | .pipe( gulp.dest('build') ); 18 | }); 19 | 20 | gulp.task( 'f', function(){ 21 | return gulp.src( 'src/f.js' ) 22 | .pipe( seajsCombo({ 23 | map : { 24 | 'src/g' : './g', 25 | 'src/h' : './h' 26 | } 27 | })) 28 | .pipe( gulp.dest('build') ); 29 | }); 30 | 31 | gulp.task( 'f2', function(){ 32 | return gulp.src( 'src/f2.js' ) 33 | .pipe( seajsCombo({ 34 | map : { 35 | 'src/g' : './g', 36 | 'src/h' : './h' 37 | } 38 | })) 39 | .pipe( gulp.dest('build') ); 40 | }); 41 | 42 | gulp.task( 'k', function(){ 43 | return gulp.src( 'src/k.js' ) 44 | .pipe( seajsCombo({ 45 | map : { 46 | 'src/l' : './l' 47 | } 48 | })) 49 | .pipe( gulp.dest('build') ); 50 | }); 51 | 52 | gulp.task( 'm', function(){ 53 | return gulp.src( 'src/m.js' ) 54 | .pipe( seajsCombo() ) 55 | .pipe( gulp.dest('build') ); 56 | }); 57 | 58 | gulp.task( 'q', function(){ 59 | return gulp.src( 'src/q.js' ) 60 | .pipe( seajsCombo({ 61 | plugins : [{ 62 | ext : [ '.tpl' ], 63 | use : [{ 64 | plugin : handlebars, 65 | },{ 66 | plugin : wrap, 67 | param : ['define(function(){return Handlebars.template(<%= contents %>)});'] 68 | }] 69 | }] 70 | })) 71 | .pipe( gulp.dest('build') ); 72 | }); 73 | 74 | gulp.task( 'r', function(){ 75 | return gulp.src( 'src/r.js' ) 76 | .pipe( seajsCombo() ) 77 | .pipe( gulp.dest('build') ); 78 | }); 79 | 80 | gulp.task( 'default', ['a', 'c', 'f', 'f2', 'k', 'm', 'q', 'r'] ); 81 | -------------------------------------------------------------------------------- /test/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | seajs combo test 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 19 | 20 | 21 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 49 | 50 | 51 | 52 | 53 | 54 | 59 | 60 | 61 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /test/sea-debug.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sea.js 2.3.0 | seajs.org/LICENSE.md 3 | */ 4 | (function(global, undefined) { 5 | 6 | // Avoid conflicting when `sea.js` is loaded multiple times 7 | if (global.seajs) { 8 | return 9 | } 10 | 11 | var seajs = global.seajs = { 12 | // The current version of Sea.js being used 13 | version: "2.3.0" 14 | } 15 | 16 | var data = seajs.data = {} 17 | 18 | 19 | /** 20 | * util-lang.js - The minimal language enhancement 21 | */ 22 | 23 | function isType(type) { 24 | return function(obj) { 25 | return {}.toString.call(obj) == "[object " + type + "]" 26 | } 27 | } 28 | 29 | var isObject = isType("Object") 30 | var isString = isType("String") 31 | var isArray = Array.isArray || isType("Array") 32 | var isFunction = isType("Function") 33 | 34 | var _cid = 0 35 | function cid() { 36 | return _cid++ 37 | } 38 | 39 | 40 | /** 41 | * util-events.js - The minimal events support 42 | */ 43 | 44 | var events = data.events = {} 45 | 46 | // Bind event 47 | seajs.on = function(name, callback) { 48 | var list = events[name] || (events[name] = []) 49 | list.push(callback) 50 | return seajs 51 | } 52 | 53 | // Remove event. If `callback` is undefined, remove all callbacks for the 54 | // event. If `event` and `callback` are both undefined, remove all callbacks 55 | // for all events 56 | seajs.off = function(name, callback) { 57 | // Remove *all* events 58 | if (!(name || callback)) { 59 | events = data.events = {} 60 | return seajs 61 | } 62 | 63 | var list = events[name] 64 | if (list) { 65 | if (callback) { 66 | for (var i = list.length - 1; i >= 0; i--) { 67 | if (list[i] === callback) { 68 | list.splice(i, 1) 69 | } 70 | } 71 | } 72 | else { 73 | delete events[name] 74 | } 75 | } 76 | 77 | return seajs 78 | } 79 | 80 | // Emit event, firing all bound callbacks. Callbacks receive the same 81 | // arguments as `emit` does, apart from the event name 82 | var emit = seajs.emit = function(name, data) { 83 | var list = events[name], fn 84 | 85 | if (list) { 86 | // Copy callback lists to prevent modification 87 | list = list.slice() 88 | 89 | // Execute event callbacks, use index because it's the faster. 90 | for(var i = 0, len = list.length; i < len; i++) { 91 | list[i](data) 92 | } 93 | } 94 | 95 | return seajs 96 | } 97 | 98 | 99 | /** 100 | * util-path.js - The utilities for operating path such as id, uri 101 | */ 102 | 103 | var DIRNAME_RE = /[^?#]*\// 104 | 105 | var DOT_RE = /\/\.\//g 106 | var DOUBLE_DOT_RE = /\/[^/]+\/\.\.\// 107 | var MULTI_SLASH_RE = /([^:/])\/+\//g 108 | 109 | // Extract the directory portion of a path 110 | // dirname("a/b/c.js?t=123#xx/zz") ==> "a/b/" 111 | // ref: http://jsperf.com/regex-vs-split/2 112 | function dirname(path) { 113 | return path.match(DIRNAME_RE)[0] 114 | } 115 | 116 | // Canonicalize a path 117 | // realpath("http://test.com/a//./b/../c") ==> "http://test.com/a/c" 118 | function realpath(path) { 119 | // /a/b/./c/./d ==> /a/b/c/d 120 | path = path.replace(DOT_RE, "/") 121 | 122 | /* 123 | @author wh1100717 124 | a//b/c ==> a/b/c 125 | a///b/////c ==> a/b/c 126 | DOUBLE_DOT_RE matches a/b/c//../d path correctly only if replace // with / first 127 | */ 128 | path = path.replace(MULTI_SLASH_RE, "$1/") 129 | 130 | // a/b/c/../../d ==> a/b/../d ==> a/d 131 | while (path.match(DOUBLE_DOT_RE)) { 132 | path = path.replace(DOUBLE_DOT_RE, "/") 133 | } 134 | 135 | return path 136 | } 137 | 138 | // Normalize an id 139 | // normalize("path/to/a") ==> "path/to/a.js" 140 | // NOTICE: substring is faster than negative slice and RegExp 141 | function normalize(path) { 142 | var last = path.length - 1 143 | var lastC = path.charAt(last) 144 | 145 | // If the uri ends with `#`, just return it without '#' 146 | if (lastC === "#") { 147 | return path.substring(0, last) 148 | } 149 | 150 | return (path.substring(last - 2) === ".js" || 151 | path.indexOf("?") > 0 || 152 | lastC === "/") ? path : path + ".js" 153 | } 154 | 155 | 156 | var PATHS_RE = /^([^/:]+)(\/.+)$/ 157 | var VARS_RE = /{([^{]+)}/g 158 | 159 | function parseAlias(id) { 160 | var alias = data.alias 161 | return alias && isString(alias[id]) ? alias[id] : id 162 | } 163 | 164 | function parsePaths(id) { 165 | var paths = data.paths 166 | var m 167 | 168 | if (paths && (m = id.match(PATHS_RE)) && isString(paths[m[1]])) { 169 | id = paths[m[1]] + m[2] 170 | } 171 | 172 | return id 173 | } 174 | 175 | function parseVars(id) { 176 | var vars = data.vars 177 | 178 | if (vars && id.indexOf("{") > -1) { 179 | id = id.replace(VARS_RE, function(m, key) { 180 | return isString(vars[key]) ? vars[key] : m 181 | }) 182 | } 183 | 184 | return id 185 | } 186 | 187 | function parseMap(uri) { 188 | var map = data.map 189 | var ret = uri 190 | 191 | if (map) { 192 | for (var i = 0, len = map.length; i < len; i++) { 193 | var rule = map[i] 194 | 195 | ret = isFunction(rule) ? 196 | (rule(uri) || uri) : 197 | uri.replace(rule[0], rule[1]) 198 | 199 | // Only apply the first matched rule 200 | if (ret !== uri) break 201 | } 202 | } 203 | 204 | return ret 205 | } 206 | 207 | 208 | var ABSOLUTE_RE = /^\/\/.|:\// 209 | var ROOT_DIR_RE = /^.*?\/\/.*?\// 210 | 211 | function addBase(id, refUri) { 212 | var ret 213 | var first = id.charAt(0) 214 | 215 | // Absolute 216 | if (ABSOLUTE_RE.test(id)) { 217 | ret = id 218 | } 219 | // Relative 220 | else if (first === ".") { 221 | ret = realpath((refUri ? dirname(refUri) : data.cwd) + id) 222 | } 223 | // Root 224 | else if (first === "/") { 225 | var m = data.cwd.match(ROOT_DIR_RE) 226 | ret = m ? m[0] + id.substring(1) : id 227 | } 228 | // Top-level 229 | else { 230 | ret = data.base + id 231 | } 232 | 233 | // Add default protocol when uri begins with "//" 234 | if (ret.indexOf("//") === 0) { 235 | ret = location.protocol + ret 236 | } 237 | 238 | return ret 239 | } 240 | 241 | function id2Uri(id, refUri) { 242 | if (!id) return "" 243 | 244 | id = parseAlias(id) 245 | id = parsePaths(id) 246 | id = parseVars(id) 247 | id = normalize(id) 248 | 249 | var uri = addBase(id, refUri) 250 | uri = parseMap(uri) 251 | 252 | return uri 253 | } 254 | 255 | 256 | var doc = document 257 | var cwd = (!location.href || location.href.indexOf('about:') === 0) ? '' : dirname(location.href) 258 | var scripts = doc.scripts 259 | 260 | // Recommend to add `seajsnode` id for the `sea.js` script element 261 | var loaderScript = doc.getElementById("seajsnode") || 262 | scripts[scripts.length - 1] 263 | 264 | // When `sea.js` is inline, set loaderDir to current working directory 265 | var loaderDir = dirname(getScriptAbsoluteSrc(loaderScript) || cwd) 266 | 267 | function getScriptAbsoluteSrc(node) { 268 | return node.hasAttribute ? // non-IE6/7 269 | node.src : 270 | // see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx 271 | node.getAttribute("src", 4) 272 | } 273 | 274 | 275 | // For Developers 276 | seajs.resolve = id2Uri 277 | 278 | 279 | /** 280 | * util-request.js - The utilities for requesting script and style files 281 | * ref: tests/research/load-js-css/test.html 282 | */ 283 | 284 | var head = doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement 285 | var baseElement = head.getElementsByTagName("base")[0] 286 | 287 | var currentlyAddingScript 288 | var interactiveScript 289 | 290 | function request(url, callback, charset) { 291 | var node = doc.createElement("script") 292 | 293 | if (charset) { 294 | var cs = isFunction(charset) ? charset(url) : charset 295 | if (cs) { 296 | node.charset = cs 297 | } 298 | } 299 | 300 | addOnload(node, callback, url) 301 | 302 | node.async = true 303 | node.src = url 304 | 305 | // For some cache cases in IE 6-8, the script executes IMMEDIATELY after 306 | // the end of the insert execution, so use `currentlyAddingScript` to 307 | // hold current node, for deriving url in `define` call 308 | currentlyAddingScript = node 309 | 310 | // ref: #185 & http://dev.jquery.com/ticket/2709 311 | baseElement ? 312 | head.insertBefore(node, baseElement) : 313 | head.appendChild(node) 314 | 315 | currentlyAddingScript = null 316 | } 317 | 318 | function addOnload(node, callback, url) { 319 | var supportOnload = "onload" in node 320 | 321 | if (supportOnload) { 322 | node.onload = onload 323 | node.onerror = function() { 324 | emit("error", { uri: url, node: node }) 325 | onload() 326 | } 327 | } 328 | else { 329 | node.onreadystatechange = function() { 330 | if (/loaded|complete/.test(node.readyState)) { 331 | onload() 332 | } 333 | } 334 | } 335 | 336 | function onload() { 337 | // Ensure only run once and handle memory leak in IE 338 | node.onload = node.onerror = node.onreadystatechange = null 339 | 340 | // Remove the script to reduce memory leak 341 | if (!data.debug) { 342 | head.removeChild(node) 343 | } 344 | 345 | // Dereference the node 346 | node = null 347 | 348 | callback() 349 | } 350 | } 351 | 352 | function getCurrentScript() { 353 | if (currentlyAddingScript) { 354 | return currentlyAddingScript 355 | } 356 | 357 | // For IE6-9 browsers, the script onload event may not fire right 358 | // after the script is evaluated. Kris Zyp found that it 359 | // could query the script nodes and the one that is in "interactive" 360 | // mode indicates the current script 361 | // ref: http://goo.gl/JHfFW 362 | if (interactiveScript && interactiveScript.readyState === "interactive") { 363 | return interactiveScript 364 | } 365 | 366 | var scripts = head.getElementsByTagName("script") 367 | 368 | for (var i = scripts.length - 1; i >= 0; i--) { 369 | var script = scripts[i] 370 | if (script.readyState === "interactive") { 371 | interactiveScript = script 372 | return interactiveScript 373 | } 374 | } 375 | } 376 | 377 | 378 | // For Developers 379 | seajs.request = request 380 | 381 | 382 | /** 383 | * util-deps.js - The parser for dependencies 384 | * ref: tests/research/parse-dependencies/test.html 385 | */ 386 | 387 | var REQUIRE_RE = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g 388 | var SLASH_RE = /\\\\/g 389 | 390 | function parseDependencies(code) { 391 | var ret = [] 392 | 393 | code.replace(SLASH_RE, "") 394 | .replace(REQUIRE_RE, function(m, m1, m2) { 395 | if (m2) { 396 | ret.push(m2) 397 | } 398 | }) 399 | 400 | return ret 401 | } 402 | 403 | 404 | /** 405 | * module.js - The core of module loader 406 | */ 407 | 408 | var cachedMods = seajs.cache = {} 409 | var anonymousMeta 410 | 411 | var fetchingList = {} 412 | var fetchedList = {} 413 | var callbackList = {} 414 | 415 | var STATUS = Module.STATUS = { 416 | // 1 - The `module.uri` is being fetched 417 | FETCHING: 1, 418 | // 2 - The meta data has been saved to cachedMods 419 | SAVED: 2, 420 | // 3 - The `module.dependencies` are being loaded 421 | LOADING: 3, 422 | // 4 - The module are ready to execute 423 | LOADED: 4, 424 | // 5 - The module is being executed 425 | EXECUTING: 5, 426 | // 6 - The `module.exports` is available 427 | EXECUTED: 6 428 | } 429 | 430 | 431 | function Module(uri, deps) { 432 | this.uri = uri 433 | this.dependencies = deps || [] 434 | this.exports = null 435 | this.status = 0 436 | 437 | // Who depends on me 438 | this._waitings = {} 439 | 440 | // The number of unloaded dependencies 441 | this._remain = 0 442 | } 443 | 444 | // Resolve module.dependencies 445 | Module.prototype.resolve = function() { 446 | var mod = this 447 | var ids = mod.dependencies 448 | var uris = [] 449 | 450 | for (var i = 0, len = ids.length; i < len; i++) { 451 | uris[i] = Module.resolve(ids[i], mod.uri) 452 | } 453 | return uris 454 | } 455 | 456 | // Load module.dependencies and fire onload when all done 457 | Module.prototype.load = function() { 458 | var mod = this 459 | 460 | // If the module is being loaded, just wait it onload call 461 | if (mod.status >= STATUS.LOADING) { 462 | return 463 | } 464 | 465 | mod.status = STATUS.LOADING 466 | 467 | // Emit `load` event for plugins such as combo plugin 468 | var uris = mod.resolve() 469 | emit("load", uris) 470 | 471 | var len = mod._remain = uris.length 472 | var m 473 | 474 | // Initialize modules and register waitings 475 | for (var i = 0; i < len; i++) { 476 | m = Module.get(uris[i]) 477 | 478 | if (m.status < STATUS.LOADED) { 479 | // Maybe duplicate: When module has dupliate dependency, it should be it's count, not 1 480 | m._waitings[mod.uri] = (m._waitings[mod.uri] || 0) + 1 481 | } 482 | else { 483 | mod._remain-- 484 | } 485 | } 486 | 487 | if (mod._remain === 0) { 488 | mod.onload() 489 | return 490 | } 491 | 492 | // Begin parallel loading 493 | var requestCache = {} 494 | 495 | for (i = 0; i < len; i++) { 496 | m = cachedMods[uris[i]] 497 | 498 | if (m.status < STATUS.FETCHING) { 499 | m.fetch(requestCache) 500 | } 501 | else if (m.status === STATUS.SAVED) { 502 | m.load() 503 | } 504 | } 505 | 506 | // Send all requests at last to avoid cache bug in IE6-9. Issues#808 507 | for (var requestUri in requestCache) { 508 | if (requestCache.hasOwnProperty(requestUri)) { 509 | requestCache[requestUri]() 510 | } 511 | } 512 | } 513 | 514 | // Call this method when module is loaded 515 | Module.prototype.onload = function() { 516 | var mod = this 517 | mod.status = STATUS.LOADED 518 | 519 | if (mod.callback) { 520 | mod.callback() 521 | } 522 | 523 | // Notify waiting modules to fire onload 524 | var waitings = mod._waitings 525 | var uri, m 526 | 527 | for (uri in waitings) { 528 | if (waitings.hasOwnProperty(uri)) { 529 | m = cachedMods[uri] 530 | m._remain -= waitings[uri] 531 | if (m._remain === 0) { 532 | m.onload() 533 | } 534 | } 535 | } 536 | 537 | // Reduce memory taken 538 | delete mod._waitings 539 | delete mod._remain 540 | } 541 | 542 | // Fetch a module 543 | Module.prototype.fetch = function(requestCache) { 544 | var mod = this 545 | var uri = mod.uri 546 | 547 | mod.status = STATUS.FETCHING 548 | 549 | // Emit `fetch` event for plugins such as combo plugin 550 | var emitData = { uri: uri } 551 | emit("fetch", emitData) 552 | var requestUri = emitData.requestUri || uri 553 | 554 | // Empty uri or a non-CMD module 555 | if (!requestUri || fetchedList[requestUri]) { 556 | mod.load() 557 | return 558 | } 559 | 560 | if (fetchingList[requestUri]) { 561 | callbackList[requestUri].push(mod) 562 | return 563 | } 564 | 565 | fetchingList[requestUri] = true 566 | callbackList[requestUri] = [mod] 567 | 568 | // Emit `request` event for plugins such as text plugin 569 | emit("request", emitData = { 570 | uri: uri, 571 | requestUri: requestUri, 572 | onRequest: onRequest, 573 | charset: data.charset 574 | }) 575 | 576 | if (!emitData.requested) { 577 | requestCache ? 578 | requestCache[emitData.requestUri] = sendRequest : 579 | sendRequest() 580 | } 581 | 582 | function sendRequest() { 583 | seajs.request(emitData.requestUri, emitData.onRequest, emitData.charset) 584 | } 585 | 586 | function onRequest() { 587 | delete fetchingList[requestUri] 588 | fetchedList[requestUri] = true 589 | 590 | // Save meta data of anonymous module 591 | if (anonymousMeta) { 592 | Module.save(uri, anonymousMeta) 593 | anonymousMeta = null 594 | } 595 | 596 | // Call callbacks 597 | var m, mods = callbackList[requestUri] 598 | delete callbackList[requestUri] 599 | while ((m = mods.shift())) m.load() 600 | } 601 | } 602 | 603 | // Execute a module 604 | Module.prototype.exec = function () { 605 | var mod = this 606 | 607 | // When module is executed, DO NOT execute it again. When module 608 | // is being executed, just return `module.exports` too, for avoiding 609 | // circularly calling 610 | if (mod.status >= STATUS.EXECUTING) { 611 | return mod.exports 612 | } 613 | 614 | mod.status = STATUS.EXECUTING 615 | 616 | // Create require 617 | var uri = mod.uri 618 | 619 | function require(id) { 620 | return Module.get(require.resolve(id)).exec() 621 | } 622 | 623 | require.resolve = function(id) { 624 | return Module.resolve(id, uri) 625 | } 626 | 627 | require.async = function(ids, callback) { 628 | Module.use(ids, callback, uri + "_async_" + cid()) 629 | return require 630 | } 631 | 632 | // Exec factory 633 | var factory = mod.factory 634 | 635 | var exports = isFunction(factory) ? 636 | factory(require, mod.exports = {}, mod) : 637 | factory 638 | 639 | if (exports === undefined) { 640 | exports = mod.exports 641 | } 642 | 643 | // Reduce memory leak 644 | delete mod.factory 645 | 646 | mod.exports = exports 647 | mod.status = STATUS.EXECUTED 648 | 649 | // Emit `exec` event 650 | emit("exec", mod) 651 | 652 | return exports 653 | } 654 | 655 | // Resolve id to uri 656 | Module.resolve = function(id, refUri) { 657 | // Emit `resolve` event for plugins such as text plugin 658 | var emitData = { id: id, refUri: refUri } 659 | emit("resolve", emitData) 660 | 661 | return emitData.uri || seajs.resolve(emitData.id, refUri) 662 | } 663 | 664 | // Define a module 665 | Module.define = function (id, deps, factory) { 666 | var argsLen = arguments.length 667 | 668 | // define(factory) 669 | if (argsLen === 1) { 670 | factory = id 671 | id = undefined 672 | } 673 | else if (argsLen === 2) { 674 | factory = deps 675 | 676 | // define(deps, factory) 677 | if (isArray(id)) { 678 | deps = id 679 | id = undefined 680 | } 681 | // define(id, factory) 682 | else { 683 | deps = undefined 684 | } 685 | } 686 | 687 | // Parse dependencies according to the module factory code 688 | if (!isArray(deps) && isFunction(factory)) { 689 | deps = parseDependencies(factory.toString()) 690 | } 691 | 692 | var meta = { 693 | id: id, 694 | uri: Module.resolve(id), 695 | deps: deps, 696 | factory: factory 697 | } 698 | 699 | // Try to derive uri in IE6-9 for anonymous modules 700 | if (!meta.uri && doc.attachEvent) { 701 | var script = getCurrentScript() 702 | 703 | if (script) { 704 | meta.uri = script.src 705 | } 706 | 707 | // NOTE: If the id-deriving methods above is failed, then falls back 708 | // to use onload event to get the uri 709 | } 710 | 711 | // Emit `define` event, used in nocache plugin, seajs node version etc 712 | emit("define", meta) 713 | 714 | meta.uri ? Module.save(meta.uri, meta) : 715 | // Save information for "saving" work in the script onload event 716 | anonymousMeta = meta 717 | } 718 | 719 | // Save meta data to cachedMods 720 | Module.save = function(uri, meta) { 721 | var mod = Module.get(uri) 722 | 723 | // Do NOT override already saved modules 724 | if (mod.status < STATUS.SAVED) { 725 | mod.id = meta.id || uri 726 | mod.dependencies = meta.deps || [] 727 | mod.factory = meta.factory 728 | mod.status = STATUS.SAVED 729 | 730 | emit("save", mod) 731 | } 732 | } 733 | 734 | // Get an existed module or create a new one 735 | Module.get = function(uri, deps) { 736 | return cachedMods[uri] || (cachedMods[uri] = new Module(uri, deps)) 737 | } 738 | 739 | // Use function is equal to load a anonymous module 740 | Module.use = function (ids, callback, uri) { 741 | var mod = Module.get(uri, isArray(ids) ? ids : [ids]) 742 | 743 | mod.callback = function() { 744 | var exports = [] 745 | var uris = mod.resolve() 746 | 747 | for (var i = 0, len = uris.length; i < len; i++) { 748 | exports[i] = cachedMods[uris[i]].exec() 749 | } 750 | 751 | if (callback) { 752 | callback.apply(global, exports) 753 | } 754 | 755 | delete mod.callback 756 | } 757 | 758 | mod.load() 759 | } 760 | 761 | 762 | // Public API 763 | 764 | seajs.use = function(ids, callback) { 765 | Module.use(ids, callback, data.cwd + "_use_" + cid()) 766 | return seajs 767 | } 768 | 769 | Module.define.cmd = {} 770 | global.define = Module.define 771 | 772 | 773 | // For Developers 774 | 775 | seajs.Module = Module 776 | data.fetchedList = fetchedList 777 | data.cid = cid 778 | 779 | seajs.require = function(id) { 780 | var mod = Module.get(Module.resolve(id)) 781 | if (mod.status < STATUS.EXECUTING) { 782 | mod.onload() 783 | mod.exec() 784 | } 785 | return mod.exports 786 | } 787 | 788 | 789 | /** 790 | * config.js - The configuration for the loader 791 | */ 792 | 793 | // The root path to use for id2uri parsing 794 | data.base = loaderDir 795 | 796 | // The loader directory 797 | data.dir = loaderDir 798 | 799 | // The current working directory 800 | data.cwd = cwd 801 | 802 | // The charset for requesting files 803 | data.charset = "utf-8" 804 | 805 | // data.alias - An object containing shorthands of module id 806 | // data.paths - An object containing path shorthands in module id 807 | // data.vars - The {xxx} variables in module id 808 | // data.map - An array containing rules to map module uri 809 | // data.debug - Debug mode. The default value is false 810 | 811 | seajs.config = function(configData) { 812 | 813 | for (var key in configData) { 814 | var curr = configData[key] 815 | var prev = data[key] 816 | 817 | // Merge object config such as alias, vars 818 | if (prev && isObject(prev)) { 819 | for (var k in curr) { 820 | prev[k] = curr[k] 821 | } 822 | } 823 | else { 824 | // Concat array config such as map 825 | if (isArray(prev)) { 826 | curr = prev.concat(curr) 827 | } 828 | // Make sure that `data.base` is an absolute path 829 | else if (key === "base") { 830 | // Make sure end with "/" 831 | if (curr.slice(-1) !== "/") { 832 | curr += "/" 833 | } 834 | curr = addBase(curr) 835 | } 836 | 837 | // Set config 838 | data[key] = curr 839 | } 840 | } 841 | 842 | emit("config", configData) 843 | return seajs 844 | } 845 | 846 | })(this); 847 | -------------------------------------------------------------------------------- /test/src/a.js: -------------------------------------------------------------------------------- 1 | define(function( require, exports, module ){ 2 | var b = require( './b' ); 3 | module.exports = 'a' + ' ' + b; 4 | }); 5 | -------------------------------------------------------------------------------- /test/src/alias/i.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'i'; 3 | }); -------------------------------------------------------------------------------- /test/src/b.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'b'; 3 | }); -------------------------------------------------------------------------------- /test/src/c.js: -------------------------------------------------------------------------------- 1 | define(function( require, exports, module ){ 2 | var d = require( './d' ); 3 | require( './e' ); 4 | 5 | module.exports = d; 6 | }); 7 | -------------------------------------------------------------------------------- /test/src/d.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'd'; 3 | }); -------------------------------------------------------------------------------- /test/src/duplicate/s.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 's2'; 3 | }); 4 | -------------------------------------------------------------------------------- /test/src/e.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'e'; 3 | }); -------------------------------------------------------------------------------- /test/src/f.js: -------------------------------------------------------------------------------- 1 | seajs.use( 'src/g', function( g ){ 2 | console.log( g ); 3 | }); 4 | 5 | seajs.use( 'src/h', function( h ){ 6 | console.log( h ); 7 | }); 8 | -------------------------------------------------------------------------------- /test/src/f2.js: -------------------------------------------------------------------------------- 1 | seajs.use( ['src/g','src/h'], function( g, h ){ 2 | console.log( g ); 3 | console.log( h ); 4 | }); 5 | -------------------------------------------------------------------------------- /test/src/foo/bar/biz/p.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'p'; 3 | }); -------------------------------------------------------------------------------- /test/src/g.js: -------------------------------------------------------------------------------- 1 | define(function(require){ 2 | var j=require( './j' ); 3 | return 'g' + ' ' + j; 4 | }); 5 | -------------------------------------------------------------------------------- /test/src/h.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'h'; 3 | }); -------------------------------------------------------------------------------- /test/src/j.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'j'; 3 | }); 4 | -------------------------------------------------------------------------------- /test/src/k.js: -------------------------------------------------------------------------------- 1 | seajs.config({ 2 | map : [ 3 | ['name/is/l', 'src/l'] 4 | ] 5 | }); 6 | 7 | seajs.use( 'src/l', function( l ){ 8 | console.log( l ); 9 | }); 10 | -------------------------------------------------------------------------------- /test/src/l.js: -------------------------------------------------------------------------------- 1 | define('name/is/l',function(){ 2 | return 'l'; 3 | }); 4 | -------------------------------------------------------------------------------- /test/src/m.js: -------------------------------------------------------------------------------- 1 | seajs.config({ 2 | 3 | // 别名配置 4 | alias: { 5 | 'i' : 'alias/i' 6 | }, 7 | 8 | // 路径配置 9 | paths: { 10 | 'foo': 'foo/bar/biz' 11 | }, 12 | 13 | // 变量配置 14 | vars: { 15 | 'locale': 'zh-cn' 16 | }, 17 | 18 | // 映射配置 19 | map: [ 20 | ['http://example.com/js/app/', 'http://localhost/js/app/'] 21 | ], 22 | 23 | // 预加载项 24 | preload: [ 25 | Function.prototype.bind ? '' : 'es5-safe', 26 | this.JSON ? '' : 'json' 27 | ], 28 | 29 | // 调试模式 30 | debug: true, 31 | 32 | // Sea.js 的基础路径 33 | base: 'src', 34 | 35 | // 文件编码 36 | charset: 'utf-8' 37 | }); 38 | 39 | var hello = 'hello'; 40 | 41 | seajs.use( ['{locale}/n', 'i', 'o'], function(){ 42 | var args = Array.prototype.join.call( arguments, ', ' ); 43 | console.log( args + ' is done' ); 44 | }); 45 | -------------------------------------------------------------------------------- /test/src/o.js: -------------------------------------------------------------------------------- 1 | define( function(require){ 2 | var p=require( 'foo/p') 3 | return 'o' + ' ' + p 4 | } ) 5 | -------------------------------------------------------------------------------- /test/src/q.js: -------------------------------------------------------------------------------- 1 | define(function( require ){ 2 | require( './b' ); 3 | var tpl = require( './tpl/u.tpl?v=20101' ); 4 | require( './d' ); 5 | console.log( tpl ); 6 | }); 7 | -------------------------------------------------------------------------------- /test/src/r.js: -------------------------------------------------------------------------------- 1 | define(function( require ){ 2 | var s = require( './s' ), 3 | s2 = require( './duplicate/s' ); 4 | 5 | return s + ', ' + s2 + ' is done'; 6 | }); 7 | -------------------------------------------------------------------------------- /test/src/s.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 's'; 3 | }); 4 | -------------------------------------------------------------------------------- /test/src/tpl/u.tpl: -------------------------------------------------------------------------------- 1 |
This is test Handlebars tpl.
-------------------------------------------------------------------------------- /test/src/zh-cn/n.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | return 'n'; 3 | }); 4 | -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | var fs = require( 'fs' ), 2 | gulp = require( 'gulp' ), 3 | should = require( 'should' ), 4 | gutil = require( 'gulp-util' ), 5 | assert = require( 'stream-assert' ), 6 | handlebars = require( 'gulp-handlebars' ), 7 | wrap = require( 'gulp-wrap' ), 8 | seajsCombo = require( '../index' ); 9 | 10 | describe( 'gulp-seajs-combo', function(){ 11 | describe( 'seajsCombo()', function(){ 12 | // 测试忽略空文件 13 | it( 'should ignore null file', function( done ){ 14 | gulp.src( 'hello.js' ) 15 | .pipe( seajsCombo() ) 16 | .pipe( assert.length(0) ) 17 | .pipe( assert.end(done) ); 18 | }); 19 | 20 | // 测试普通的模块 21 | it( 'should combo module a & b, no seajs.use', function( done ){ 22 | fs.readFile( 'build/a.js', function( err, buildData ){ 23 | if( err ){ 24 | throw err; 25 | } 26 | 27 | gulp.src( 'src/a.js' ) 28 | .pipe( seajsCombo() ) 29 | .pipe( assert.first(function( srcData ){ 30 | srcData.contents.should.eql( buildData ); 31 | })) 32 | .pipe( assert.end(done)); 33 | }); 34 | }); 35 | 36 | // 测试普通的模块 37 | it( 'should combo module s & duplicate/s, module id is duplicate', function( done ){ 38 | fs.readFile( 'build/r.js', function( err, buildData ){ 39 | if( err ){ 40 | throw err; 41 | } 42 | 43 | gulp.src( 'src/r.js' ) 44 | .pipe( seajsCombo() ) 45 | .pipe( assert.first(function( srcData ){ 46 | srcData.contents.should.eql( buildData ); 47 | })) 48 | .pipe( assert.end(done)); 49 | }); 50 | }); 51 | 52 | // 测试有seajs.use的情况 53 | it( 'should combo module f, have seajs.use', function( done ){ 54 | fs.readFile( 'build/f.js', function( err, buildData ){ 55 | if( err ){ 56 | throw err; 57 | } 58 | 59 | gulp.src( 'src/f.js' ) 60 | .pipe( seajsCombo({ 61 | map : { 62 | 'src/g' : './g', 63 | 'src/h' : './h' 64 | } 65 | })) 66 | .pipe( assert.first(function( srcData ){ 67 | srcData.contents.should.eql( buildData ); 68 | })) 69 | .pipe( assert.end(done)); 70 | }); 71 | }); 72 | }); 73 | 74 | describe( 'options', function(){ 75 | // 测试options.ignore 76 | it( 'should ignore module e', function( done ){ 77 | fs.readFile( 'build/c.js', function( err, buildData ){ 78 | if( err ){ 79 | throw err; 80 | } 81 | 82 | gulp.src( 'src/c.js' ) 83 | .pipe( seajsCombo({ 84 | ignore : ['./e'] 85 | })) 86 | .pipe( assert.first(function( srcData ){ 87 | srcData.contents.should.eql( buildData ); 88 | })) 89 | .pipe( assert.end(done) ); 90 | }); 91 | }); 92 | 93 | // 测试options.map 94 | it( 'should use map', function( done ){ 95 | fs.readFile( 'build/f2.js', function( err, buildData ){ 96 | if( err ){ 97 | throw err; 98 | } 99 | 100 | gulp.src( 'src/f2.js' ) 101 | .pipe( seajsCombo({ 102 | map : { 103 | 'src/g' : './g', 104 | 'src/h' : './h' 105 | } 106 | })) 107 | .pipe( assert.first(function( srcData ){ 108 | srcData.contents.should.eql( buildData ); 109 | })) 110 | .pipe( assert.end(done) ); 111 | }); 112 | }); 113 | 114 | // 测试options.plugins 115 | it( 'should use plugins for handlebars tpl', function( done ){ 116 | fs.readFile( 'build/q.js', function( err, buildData ){ 117 | if( err ){ 118 | throw err; 119 | } 120 | 121 | gulp.src( 'src/q.js' ) 122 | .pipe( seajsCombo({ 123 | plugins : [{ 124 | ext : [ '.tpl' ], 125 | use : [{ 126 | plugin : handlebars, 127 | },{ 128 | plugin : wrap, 129 | param : ['define(function(){return Handlebars.template(<%= contents %>)});'] 130 | }] 131 | }] 132 | })) 133 | .pipe( assert.first(function( srcData ){ 134 | srcData.contents.should.eql( buildData ); 135 | })) 136 | .pipe( assert.end(done) ); 137 | }); 138 | }); 139 | }); 140 | 141 | describe( 'seajs.config', function(){ 142 | // 测试解析seajs.config中的配置 143 | it( 'should parse alias & paths & vars in seajs.config', function( done ){ 144 | fs.readFile( 'build/m.js', function( err, buildData ){ 145 | if( err ){ 146 | throw err; 147 | } 148 | 149 | gulp.src( 'src/m.js' ) 150 | .pipe( seajsCombo() ) 151 | .pipe( assert.first(function( srcData ){ 152 | srcData.contents.should.eql( buildData ); 153 | })) 154 | .pipe( assert.end(done) ); 155 | }); 156 | }); 157 | 158 | // 测试解析seajs.config中的配置 159 | it( 'should parse map & module have modId', function( done ){ 160 | fs.readFile( 'build/k.js', function( err, buildData ){ 161 | if( err ){ 162 | throw err; 163 | } 164 | 165 | gulp.src( 'src/k.js' ) 166 | .pipe( seajsCombo({ 167 | map : { 168 | 'src/l' : './l' 169 | } 170 | })) 171 | .pipe( assert.first(function( srcData ){ 172 | srcData.contents.should.eql( buildData ); 173 | })) 174 | .pipe( assert.end(done) ); 175 | }); 176 | }); 177 | }); 178 | }); 179 | --------------------------------------------------------------------------------