-
Notifications
You must be signed in to change notification settings - Fork 0
/
object.js
71 lines (67 loc) · 2.16 KB
/
object.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/* UMD.define */ (typeof define=="function"&&define||function(d,f,m){m={module:module,require:require};module.exports=f.apply(null,d.map(function(n){return m[n]||require(n)}))})
(["./utils/translate", "heya-ctr"], function(translate, ctr){
"use strict";
var fTmpl = [
"(function(${varList}){",
" #{extDecl}",
" return {",
" start: function(${argList}){",
" #{extInit}",
" #{assignArgs}",
" #{assignVars}",
" #{undefineVars}",
" #{head}",
" },",
" process: function(value, sink){",
" if(__stop) return value;",
" #{code}",
" },",
" stop: function(sink){",
" #{tail}",
" __stop = true;",
" },",
" isStopped: function(){ return __stop; },",
" getResult: function(){",
" #{ret}",
" }",
" };",
"})()",
"//@ sourceURL=#{name}"
];
return function object(pipe, name){
var result = translate(pipe),
externals = result.ext,
varList = result.args.concat(result.vars.map(function(value){
return /\b\w+\b/.exec(value)[0];
})).join(", "),
argList = result.args.map(function(value, index){
return "__arg" + index;
}).join(", "),
assignArgs = result.args.map(function(value, index){
return value + " = __arg" + index + ";";
}),
assignVars = result.vars.filter(function(value){
return value.indexOf("=") > 0;
}).map(function(value){
return value + ";";
}),
undefineVars = result.vars.filter(function(value){
return value.indexOf("=") < 0;
}).join(" = ");
undefineVars = undefineVars ? undefineVars + " = undefined;" : undefined;
return ctr(fTmpl, {
varList: varList,
argList: argList,
assignArgs: assignArgs,
assignVars: assignVars,
undefineVars: undefineVars,
extDecl: externals.length ? "var __e;" : undefined,
extInit: externals.length ? "__e = this.externals;" : undefined,
head: result.head,
code: result.code,
tail: result.tail,
ret: result.ret,
name: name || ("/pipe/object/" + pipe.getName())
}, externals.length && {externals: externals});
};
});