|
|
@@
-1,323
+1,323
|
|
|
1
|
define([],
|
|
1
|
define([],
|
|
|
2
|
|
|
2
|
|
|
|
3
|
function () {
|
|
3
|
function () {
|
|
|
4
|
var _create = Object.create,
|
|
4
|
var _create = Object.create,
|
|
|
5
|
_keys = Object.keys;
|
|
5
|
_keys = Object.keys;
|
|
|
6
|
|
|
6
|
|
|
|
7
|
var safe = null;
|
|
7
|
var safe = null;
|
|
|
8
|
safe = {
|
|
8
|
safe = {
|
|
|
9
|
argumentNotNull: function (arg, name) {
|
|
9
|
argumentNotNull: function (arg, name) {
|
|
|
10
|
if (arg === null || arg === undefined)
|
|
10
|
if (arg === null || arg === undefined)
|
|
|
11
|
throw new Error("The argument " + name + " can't be null or undefined");
|
|
11
|
throw new Error("The argument " + name + " can't be null or undefined");
|
|
|
12
|
},
|
|
12
|
},
|
|
|
13
|
|
|
13
|
|
|
|
14
|
argumentNotEmptyString: function (arg, name) {
|
|
14
|
argumentNotEmptyString: function (arg, name) {
|
|
|
15
|
if (typeof (arg) !== "string" || !arg.length)
|
|
15
|
if (typeof (arg) !== "string" || !arg.length)
|
|
|
16
|
throw new Error("The argument '" + name + "' must be a not empty string");
|
|
16
|
throw new Error("The argument '" + name + "' must be a not empty string");
|
|
|
17
|
},
|
|
17
|
},
|
|
|
18
|
|
|
18
|
|
|
|
19
|
argumentNotEmptyArray: function (arg, name) {
|
|
19
|
argumentNotEmptyArray: function (arg, name) {
|
|
|
20
|
if (!(arg instanceof Array) || !arg.length)
|
|
20
|
if (!(arg instanceof Array) || !arg.length)
|
|
|
21
|
throw new Error("The argument '" + name + "' must be a not empty array");
|
|
21
|
throw new Error("The argument '" + name + "' must be a not empty array");
|
|
|
22
|
},
|
|
22
|
},
|
|
|
23
|
|
|
23
|
|
|
|
24
|
argumentOfType: function (arg, type, name) {
|
|
24
|
argumentOfType: function (arg, type, name) {
|
|
|
25
|
if (!(arg instanceof type))
|
|
25
|
if (!(arg instanceof type))
|
|
|
26
|
throw new Error("The argument '" + name + "' type doesn't match");
|
|
26
|
throw new Error("The argument '" + name + "' type doesn't match");
|
|
|
27
|
},
|
|
27
|
},
|
|
|
28
|
|
|
28
|
|
|
|
29
|
isNull: function (arg) {
|
|
29
|
isNull: function (arg) {
|
|
|
30
|
return (arg === null || arg === undefined);
|
|
30
|
return (arg === null || arg === undefined);
|
|
|
31
|
},
|
|
31
|
},
|
|
|
32
|
|
|
32
|
|
|
|
33
|
isPrimitive: function (arg) {
|
|
33
|
isPrimitive: function (arg) {
|
|
|
34
|
return (arg === null || arg === undefined || typeof (arg) === "string" ||
|
|
34
|
return (arg === null || arg === undefined || typeof (arg) === "string" ||
|
|
|
35
|
typeof (arg) === "number" || typeof (arg) === "boolean");
|
|
35
|
typeof (arg) === "number" || typeof (arg) === "boolean");
|
|
|
36
|
},
|
|
36
|
},
|
|
|
37
|
|
|
37
|
|
|
|
38
|
isInteger: function (arg) {
|
|
38
|
isInteger: function (arg) {
|
|
|
39
|
return parseInt(arg) == arg;
|
|
39
|
return parseInt(arg) == arg;
|
|
|
40
|
},
|
|
40
|
},
|
|
|
41
|
|
|
41
|
|
|
|
42
|
isNumber: function (arg) {
|
|
42
|
isNumber: function (arg) {
|
|
|
43
|
return parseFloat(arg) == arg;
|
|
43
|
return parseFloat(arg) == arg;
|
|
|
44
|
},
|
|
44
|
},
|
|
|
45
|
|
|
45
|
|
|
|
46
|
isString: function (val) {
|
|
46
|
isString: function (val) {
|
|
|
47
|
return typeof (val) == "string" || val instanceof String;
|
|
47
|
return typeof (val) == "string" || val instanceof String;
|
|
|
48
|
},
|
|
48
|
},
|
|
|
49
|
|
|
49
|
|
|
|
50
|
isNullOrEmptyString: function (str) {
|
|
50
|
isNullOrEmptyString: function (str) {
|
|
|
51
|
if (str === null || str === undefined ||
|
|
51
|
if (str === null || str === undefined ||
|
|
|
52
|
((typeof (str) == "string" || str instanceof String) && str.length === 0))
|
|
52
|
((typeof (str) == "string" || str instanceof String) && str.length === 0))
|
|
|
53
|
return true;
|
|
53
|
return true;
|
|
|
54
|
},
|
|
54
|
},
|
|
|
55
|
|
|
55
|
|
|
|
56
|
isNotEmptyArray: function (arg) {
|
|
56
|
isNotEmptyArray: function (arg) {
|
|
|
57
|
return (arg instanceof Array && arg.length > 0);
|
|
57
|
return (arg instanceof Array && arg.length > 0);
|
|
|
58
|
},
|
|
58
|
},
|
|
|
59
|
|
|
59
|
|
|
|
60
|
/**
|
|
60
|
/**
|
|
|
61
|
* ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π°
|
|
61
|
* ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π°
|
|
|
62
|
* Π»ΠΈΠ±ΠΎ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΡ <c>cb</c> Π²Π΅ΡΠ½ΡΠ»Π°
|
|
62
|
* Π»ΠΈΠ±ΠΎ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΡ <c>cb</c> Π²Π΅ΡΠ½ΡΠ»Π°
|
|
|
63
|
* Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
|
|
63
|
* Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
|
|
|
64
|
*
|
|
64
|
*
|
|
|
65
|
* @param{Array | Object} obj ΠΌΠ°ΡΡΠΈΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
|
|
65
|
* @param{Array | Object} obj ΠΌΠ°ΡΡΠΈΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
|
|
|
66
|
* @param{Function} cb ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
|
|
66
|
* @param{Function} cb ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
|
|
|
67
|
* @param{Object} thisArg Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
|
|
67
|
* @param{Object} thisArg Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅
|
|
|
68
|
* <c>this</c> Π² <c>cb</c>.
|
|
68
|
* <c>this</c> Π² <c>cb</c>.
|
|
|
69
|
* @returns Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ <c>cb</c>, Π»ΠΈΠ±ΠΎ <c>undefined</c>
|
|
69
|
* @returns Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ <c>cb</c>, Π»ΠΈΠ±ΠΎ <c>undefined</c>
|
|
|
70
|
* Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°.
|
|
70
|
* Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ ΠΊΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°.
|
|
|
71
|
*/
|
|
71
|
*/
|
|
|
72
|
each: function (obj, cb, thisArg) {
|
|
72
|
each: function (obj, cb, thisArg) {
|
|
|
73
|
safe.argumentNotNull(cb, "cb");
|
|
73
|
safe.argumentNotNull(cb, "cb");
|
|
|
74
|
var i, x;
|
|
74
|
var i, x;
|
|
|
75
|
if (obj instanceof Array) {
|
|
75
|
if (obj instanceof Array) {
|
|
|
76
|
for (i = 0; i < obj.length; i++) {
|
|
76
|
for (i = 0; i < obj.length; i++) {
|
|
|
77
|
x = cb.call(thisArg, obj[i], i);
|
|
77
|
x = cb.call(thisArg, obj[i], i);
|
|
|
78
|
if (x !== undefined)
|
|
78
|
if (x !== undefined)
|
|
|
79
|
return x;
|
|
79
|
return x;
|
|
|
80
|
}
|
|
80
|
}
|
|
|
81
|
} else {
|
|
81
|
} else {
|
|
|
82
|
var keys = _keys(obj);
|
|
82
|
var keys = _keys(obj);
|
|
|
83
|
for (i = 0; i < keys.length; i++) {
|
|
83
|
for (i = 0; i < keys.length; i++) {
|
|
|
84
|
var k = keys[i];
|
|
84
|
var k = keys[i];
|
|
|
85
|
x = cb.call(thisArg, obj[k], k);
|
|
85
|
x = cb.call(thisArg, obj[k], k);
|
|
|
86
|
if (x !== undefined)
|
|
86
|
if (x !== undefined)
|
|
|
87
|
return x;
|
|
87
|
return x;
|
|
|
88
|
}
|
|
88
|
}
|
|
|
89
|
}
|
|
89
|
}
|
|
|
90
|
},
|
|
90
|
},
|
|
|
91
|
|
|
91
|
|
|
|
92
|
/**
|
|
92
|
/**
|
|
|
93
|
* ΠΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ.
|
|
93
|
* ΠΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ.
|
|
|
94
|
*
|
|
94
|
*
|
|
|
95
|
* @param{Any} dest ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
|
|
95
|
* @param{Any} dest ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
|
|
|
96
|
* @param{Any} src ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
|
|
96
|
* @param{Any} src ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
|
|
|
97
|
* @tmpl{Object|Array} tmpl ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ
|
|
97
|
* @tmpl{Object|Array} tmpl ΡΠ°Π±Π»ΠΎΠ½ ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ
|
|
|
98
|
* ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ
|
|
98
|
* ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ
|
|
|
99
|
* (ΡΠΏΠΈΡΠΎΠΊ ΡΠ²ΠΎΠΉΡΡΠ²), ΡΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°
|
|
99
|
* (ΡΠΏΠΈΡΠΎΠΊ ΡΠ²ΠΎΠΉΡΡΠ²), ΡΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°
|
|
|
100
|
* ΡΠ²Π»ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ²ΠΎΠΉΡΠ²Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ
|
|
100
|
* ΡΠ²Π»ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ²ΠΎΠΉΡΠ²Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ
|
|
|
101
|
* ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (ΠΊΠ°ΡΡΠ°
|
|
101
|
* ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (ΠΊΠ°ΡΡΠ°
|
|
|
102
|
* ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΡΠ²ΠΎΠΉΡΡΠ² src->dst), ΡΠΎΠ³Π΄Π°
|
|
102
|
* ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΡΠ²ΠΎΠΉΡΡΠ² src->dst), ΡΠΎΠ³Π΄Π°
|
|
|
103
|
* ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
|
|
103
|
* ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
|
|
|
104
|
* ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, ΠΏΡΠΈΡΡΡΡΠ²ΡΡΡΠΈΡ
Π²
|
|
104
|
* ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, ΠΏΡΠΈΡΡΡΡΠ²ΡΡΡΠΈΡ
Π²
|
|
|
105
|
* ΡΠ°Π±Π»ΠΎΠ½Π΅, ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°Π±Π»ΠΎΠ½Π°
|
|
105
|
* ΡΠ°Π±Π»ΠΎΠ½Π΅, ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°Π±Π»ΠΎΠ½Π°
|
|
|
106
|
* ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ
|
|
106
|
* ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ
|
|
|
107
|
* ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΊΠΎΠΏΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
|
107
|
* ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΠΊΠΎΠΏΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
|
|
108
|
*/
|
|
108
|
*/
|
|
|
109
|
mixin: function (dest, src, tmpl) {
|
|
109
|
mixin: function (dest, src, tmpl) {
|
|
|
110
|
safe.argumentNotNull(dest, "dest");
|
|
110
|
safe.argumentNotNull(dest, "dest");
|
|
|
111
|
if (!src)
|
|
111
|
if (!src)
|
|
|
112
|
return dest;
|
|
112
|
return dest;
|
|
|
113
|
|
|
113
|
|
|
|
114
|
var keys, i, p;
|
|
114
|
var keys, i, p;
|
|
|
115
|
if (arguments.length < 3) {
|
|
115
|
if (arguments.length < 3) {
|
|
|
116
|
keys = _keys(src);
|
|
116
|
keys = _keys(src);
|
|
|
117
|
for (i = 0; i < keys.length; i++) {
|
|
117
|
for (i = 0; i < keys.length; i++) {
|
|
|
118
|
p = keys[i];
|
|
118
|
p = keys[i];
|
|
|
119
|
dest[p] = src[p];
|
|
119
|
dest[p] = src[p];
|
|
|
120
|
}
|
|
120
|
}
|
|
|
121
|
} else {
|
|
121
|
} else {
|
|
|
122
|
if (tmpl instanceof Array) {
|
|
122
|
if (tmpl instanceof Array) {
|
|
|
123
|
for (i = 0; i < tmpl.length; i++) {
|
|
123
|
for (i = 0; i < tmpl.length; i++) {
|
|
|
124
|
p = tmpl[i];
|
|
124
|
p = tmpl[i];
|
|
|
125
|
if (p in src)
|
|
125
|
if (p in src)
|
|
|
126
|
dest[p] = src[p];
|
|
126
|
dest[p] = src[p];
|
|
|
127
|
}
|
|
127
|
}
|
|
|
128
|
|
|
128
|
|
|
|
129
|
} else {
|
|
129
|
} else {
|
|
|
130
|
keys = _keys(src);
|
|
130
|
keys = _keys(src);
|
|
|
131
|
for (i = 0; i < keys.length; i++) {
|
|
131
|
for (i = 0; i < keys.length; i++) {
|
|
|
132
|
p = keys[i];
|
|
132
|
p = keys[i];
|
|
|
133
|
if (p in tmpl)
|
|
133
|
if (p in tmpl)
|
|
|
134
|
dest[tmpl[p]] = src[p];
|
|
134
|
dest[tmpl[p]] = src[p];
|
|
|
135
|
}
|
|
135
|
}
|
|
|
136
|
}
|
|
136
|
}
|
|
|
137
|
}
|
|
137
|
}
|
|
|
138
|
return dest;
|
|
138
|
return dest;
|
|
|
139
|
},
|
|
139
|
},
|
|
|
140
|
|
|
140
|
|
|
|
141
|
/** Wraps the specified function to emulate an asynchronous execution.
|
|
141
|
/** Wraps the specified function to emulate an asynchronous execution.
|
|
|
142
|
* @param{Object} thisArg [Optional] Object which will be passed as 'this' to the function.
|
|
142
|
* @param{Object} thisArg [Optional] Object which will be passed as 'this' to the function.
|
|
|
143
|
* @param{Function|String} fn [Required] Function wich will be wrapped.
|
|
143
|
* @param{Function|String} fn [Required] Function wich will be wrapped.
|
|
|
144
|
*/
|
|
144
|
*/
|
|
|
145
|
async: function (fn, thisArg) {
|
|
145
|
async: function (fn, thisArg) {
|
|
|
146
|
if (arguments.length == 2 && !(fn instanceof Function))
|
|
146
|
if (arguments.length == 2 && !(fn instanceof Function))
|
|
|
147
|
fn = thisArg[fn];
|
|
147
|
fn = thisArg[fn];
|
|
|
148
|
|
|
148
|
|
|
|
149
|
if (fn == null)
|
|
149
|
if (fn == null)
|
|
|
150
|
throw new Error("The function must be specified");
|
|
150
|
throw new Error("The function must be specified");
|
|
|
151
|
|
|
151
|
|
|
|
152
|
function wrapresult(x, e) {
|
|
152
|
function wrapresult(x, e) {
|
|
|
153
|
if (e) {
|
|
153
|
if (e) {
|
|
|
154
|
return {
|
|
154
|
return {
|
|
|
155
|
then: function (cb, eb) {
|
|
155
|
then: function (cb, eb) {
|
|
|
156
|
try {
|
|
156
|
try {
|
|
|
157
|
return eb ? wrapresult(eb(e)) : this;
|
|
157
|
return eb ? wrapresult(eb(e)) : this;
|
|
|
158
|
} catch (e2) {
|
|
158
|
} catch (e2) {
|
|
|
159
|
return wrapresult(null, e2);
|
|
159
|
return wrapresult(null, e2);
|
|
|
160
|
}
|
|
160
|
}
|
|
|
161
|
}
|
|
161
|
}
|
|
|
162
|
};
|
|
162
|
};
|
|
|
163
|
} else {
|
|
163
|
} else {
|
|
|
164
|
if (x && x.then)
|
|
164
|
if (x && x.then)
|
|
|
165
|
return x;
|
|
165
|
return x;
|
|
|
166
|
return {
|
|
166
|
return {
|
|
|
167
|
then : function(cb) {
|
|
167
|
then : function(cb) {
|
|
|
168
|
try {
|
|
168
|
try {
|
|
|
169
|
return cb ? wrapresult(cb(x)) : this;
|
|
169
|
return cb ? wrapresult(cb(x)) : this;
|
|
|
170
|
} catch(e2) {
|
|
170
|
} catch(e2) {
|
|
|
171
|
return wrapresult(e2);
|
|
171
|
return wrapresult(e2);
|
|
|
172
|
}
|
|
172
|
}
|
|
|
173
|
}
|
|
173
|
}
|
|
|
174
|
};
|
|
174
|
};
|
|
|
175
|
}
|
|
175
|
}
|
|
|
176
|
}
|
|
176
|
}
|
|
|
177
|
|
|
177
|
|
|
|
178
|
try {
|
|
178
|
try {
|
|
|
179
|
return wrapresult(fn.apply(thisArg, arguments));
|
|
179
|
return wrapresult(fn.apply(thisArg, arguments));
|
|
|
180
|
} catch (e) {
|
|
180
|
} catch (e) {
|
|
|
181
|
return wrapresult(null, e);
|
|
181
|
return wrapresult(null, e);
|
|
|
182
|
};
|
|
182
|
}
|
|
|
183
|
},
|
|
183
|
},
|
|
|
184
|
|
|
184
|
|
|
|
185
|
create: function () {
|
|
185
|
create: function () {
|
|
|
186
|
if (console && console.warn)
|
|
186
|
if (console && console.warn)
|
|
|
187
|
console.warn("implab/safe::create is deprecated use Object.create instead");
|
|
187
|
console.warn("implab/safe::create is deprecated use Object.create instead");
|
|
|
188
|
_create.apply(this, arguments);
|
|
188
|
_create.apply(this, arguments);
|
|
|
189
|
},
|
|
189
|
},
|
|
|
190
|
|
|
190
|
|
|
|
191
|
delegate: function (target, method) {
|
|
191
|
delegate: function (target, method) {
|
|
|
192
|
if (!(method instanceof Function)) {
|
|
192
|
if (!(method instanceof Function)) {
|
|
|
193
|
this.argumentNotNull(target, "target");
|
|
193
|
this.argumentNotNull(target, "target");
|
|
|
194
|
method = target[method];
|
|
194
|
method = target[method];
|
|
|
195
|
}
|
|
195
|
}
|
|
|
196
|
|
|
196
|
|
|
|
197
|
if (!(method instanceof Function))
|
|
197
|
if (!(method instanceof Function))
|
|
|
198
|
throw new Error("'method' argument must be a Function or a method name");
|
|
198
|
throw new Error("'method' argument must be a Function or a method name");
|
|
|
199
|
|
|
199
|
|
|
|
200
|
return function () {
|
|
200
|
return function () {
|
|
|
201
|
return method.apply(target, arguments);
|
|
201
|
return method.apply(target, arguments);
|
|
|
202
|
};
|
|
202
|
};
|
|
|
203
|
},
|
|
203
|
},
|
|
|
204
|
|
|
204
|
|
|
|
205
|
/**
|
|
205
|
/**
|
|
|
206
|
* ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ
|
|
206
|
* ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ
|
|
|
207
|
* Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
|
|
207
|
* Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
|
|
|
208
|
*
|
|
208
|
*
|
|
|
209
|
* @remarks cb ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ
|
|
209
|
* @remarks cb ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ
|
|
|
210
|
* ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
|
|
210
|
* ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
|
|
|
211
|
*
|
|
211
|
*
|
|
|
212
|
* @async
|
|
212
|
* @async
|
|
|
213
|
*/
|
|
213
|
*/
|
|
|
214
|
pmap: function (items, cb) {
|
|
214
|
pmap: function (items, cb) {
|
|
|
215
|
safe.argumentNotNull(cb, "cb");
|
|
215
|
safe.argumentNotNull(cb, "cb");
|
|
|
216
|
|
|
216
|
|
|
|
217
|
if (items && items.then instanceof Function)
|
|
217
|
if (items && items.then instanceof Function)
|
|
|
218
|
return items.then(function (data) {
|
|
218
|
return items.then(function (data) {
|
|
|
219
|
return safe.pmap(data, cb);
|
|
219
|
return safe.pmap(data, cb);
|
|
|
220
|
});
|
|
220
|
});
|
|
|
221
|
|
|
221
|
|
|
|
222
|
if (safe.isNull(items) || !items.length)
|
|
222
|
if (safe.isNull(items) || !items.length)
|
|
|
223
|
return items;
|
|
223
|
return items;
|
|
|
224
|
|
|
224
|
|
|
|
225
|
var i = 0,
|
|
225
|
var i = 0,
|
|
|
226
|
result = [];
|
|
226
|
result = [];
|
|
|
227
|
|
|
227
|
|
|
|
228
|
function next() {
|
|
228
|
function next() {
|
|
|
229
|
var r, ri;
|
|
229
|
var r, ri;
|
|
|
230
|
|
|
230
|
|
|
|
231
|
function chain(x) {
|
|
231
|
function chain(x) {
|
|
|
232
|
result[ri] = x;
|
|
232
|
result[ri] = x;
|
|
|
233
|
return next();
|
|
233
|
return next();
|
|
|
234
|
}
|
|
234
|
}
|
|
|
235
|
|
|
235
|
|
|
|
236
|
while (i < items.length) {
|
|
236
|
while (i < items.length) {
|
|
|
237
|
r = cb(items[i], i);
|
|
237
|
r = cb(items[i], i);
|
|
|
238
|
ri = i;
|
|
238
|
ri = i;
|
|
|
239
|
i++;
|
|
239
|
i++;
|
|
|
240
|
if (r && r.then) {
|
|
240
|
if (r && r.then) {
|
|
|
241
|
return r.then(chain);
|
|
241
|
return r.then(chain);
|
|
|
242
|
} else {
|
|
242
|
} else {
|
|
|
243
|
result[ri] = r;
|
|
243
|
result[ri] = r;
|
|
|
244
|
}
|
|
244
|
}
|
|
|
245
|
}
|
|
245
|
}
|
|
|
246
|
return result;
|
|
246
|
return result;
|
|
|
247
|
}
|
|
247
|
}
|
|
|
248
|
|
|
248
|
|
|
|
249
|
return next();
|
|
249
|
return next();
|
|
|
250
|
},
|
|
250
|
},
|
|
|
251
|
|
|
251
|
|
|
|
252
|
/**
|
|
252
|
/**
|
|
|
253
|
* ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ
|
|
253
|
* ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ
|
|
|
254
|
* Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ
|
|
254
|
* Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ
|
|
|
255
|
*
|
|
255
|
*
|
|
|
256
|
* @remarks cb ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ
|
|
256
|
* @remarks cb ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ΄Π΅Ρ
|
|
|
257
|
* ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
|
|
257
|
* ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
|
|
|
258
|
* @async
|
|
258
|
* @async
|
|
|
259
|
*/
|
|
259
|
*/
|
|
|
260
|
pfor: function (items, cb) {
|
|
260
|
pfor: function (items, cb) {
|
|
|
261
|
safe.argumentNotNull(cb, "cb");
|
|
261
|
safe.argumentNotNull(cb, "cb");
|
|
|
262
|
|
|
262
|
|
|
|
263
|
if (items && items.then instanceof Function)
|
|
263
|
if (items && items.then instanceof Function)
|
|
|
264
|
return items.then(function (data) {
|
|
264
|
return items.then(function (data) {
|
|
|
265
|
return safe.pmap(data, cb);
|
|
265
|
return safe.pmap(data, cb);
|
|
|
266
|
});
|
|
266
|
});
|
|
|
267
|
|
|
267
|
|
|
|
268
|
if (safe.isNull(items) || !items.length)
|
|
268
|
if (safe.isNull(items) || !items.length)
|
|
|
269
|
return items;
|
|
269
|
return items;
|
|
|
270
|
|
|
270
|
|
|
|
271
|
var i = 0;
|
|
271
|
var i = 0;
|
|
|
272
|
|
|
272
|
|
|
|
273
|
function next() {
|
|
273
|
function next() {
|
|
|
274
|
while (i < items.length) {
|
|
274
|
while (i < items.length) {
|
|
|
275
|
var r = cb(items[i], i);
|
|
275
|
var r = cb(items[i], i);
|
|
|
276
|
i++;
|
|
276
|
i++;
|
|
|
277
|
if (r && r.then)
|
|
277
|
if (r && r.then)
|
|
|
278
|
return r.then(next);
|
|
278
|
return r.then(next);
|
|
|
279
|
}
|
|
279
|
}
|
|
|
280
|
}
|
|
280
|
}
|
|
|
281
|
|
|
281
|
|
|
|
282
|
return next();
|
|
282
|
return next();
|
|
|
283
|
},
|
|
283
|
},
|
|
|
284
|
|
|
284
|
|
|
|
285
|
/**
|
|
285
|
/**
|
|
|
286
|
* ΠΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π²
|
|
286
|
* ΠΡΠ±ΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π²
|
|
|
287
|
* ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΌΠ°ΡΡΠΈΠ².
|
|
287
|
* ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΌΠ°ΡΡΠΈΠ².
|
|
|
288
|
*
|
|
288
|
*
|
|
|
289
|
* @param{Function} cb ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ
|
|
289
|
* @param{Function} cb ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ
|
|
|
290
|
* ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π°
|
|
290
|
* ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π°
|
|
|
291
|
* @param{Fucntion} err ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΡΡΠΎΠΉ, Π»ΠΈΠ±ΠΎ
|
|
291
|
* @param{Fucntion} err ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΡΡΠΎΠΉ, Π»ΠΈΠ±ΠΎ
|
|
|
292
|
* Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²
|
|
292
|
* Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²
|
|
|
293
|
*
|
|
293
|
*
|
|
|
294
|
* @remarks ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ Π½ΠΈ cb Π½ΠΈ err, ΡΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ Π»ΠΈΠ±ΠΎ
|
|
294
|
* @remarks ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ Π½ΠΈ cb Π½ΠΈ err, ΡΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ Π»ΠΈΠ±ΠΎ
|
|
|
295
|
* ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
|
|
295
|
* ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
|
|
|
296
|
* @async
|
|
296
|
* @async
|
|
|
297
|
*/
|
|
297
|
*/
|
|
|
298
|
first: function (sequence, cb, err) {
|
|
298
|
first: function (sequence, cb, err) {
|
|
|
299
|
if (sequence) {
|
|
299
|
if (sequence) {
|
|
|
300
|
if (sequence.then instanceof Function) {
|
|
300
|
if (sequence.then instanceof Function) {
|
|
|
301
|
return sequence.then(function (res) {
|
|
301
|
return sequence.then(function (res) {
|
|
|
302
|
return safe.first(res, cb, err);
|
|
302
|
return safe.first(res, cb, err);
|
|
|
303
|
}, err);
|
|
303
|
}, err);
|
|
|
304
|
} else if (sequence && "length" in sequence) {
|
|
304
|
} else if (sequence && "length" in sequence) {
|
|
|
305
|
if (sequence.length === 0) {
|
|
305
|
if (sequence.length === 0) {
|
|
|
306
|
if (err)
|
|
306
|
if (err)
|
|
|
307
|
return err(new Error("The sequence is empty"));
|
|
307
|
return err(new Error("The sequence is empty"));
|
|
|
308
|
else
|
|
308
|
else
|
|
|
309
|
throw new Error("The sequence is empty");
|
|
309
|
throw new Error("The sequence is empty");
|
|
|
310
|
}
|
|
310
|
}
|
|
|
311
|
return cb ? cb(sequence[0]) : sequence[0];
|
|
311
|
return cb ? cb(sequence[0]) : sequence[0];
|
|
|
312
|
}
|
|
312
|
}
|
|
|
313
|
}
|
|
313
|
}
|
|
|
314
|
|
|
314
|
|
|
|
315
|
if (err)
|
|
315
|
if (err)
|
|
|
316
|
return err(new Error("The sequence is required"));
|
|
316
|
return err(new Error("The sequence is required"));
|
|
|
317
|
else
|
|
317
|
else
|
|
|
318
|
throw new Error("The sequence is required");
|
|
318
|
throw new Error("The sequence is required");
|
|
|
319
|
}
|
|
319
|
}
|
|
|
320
|
};
|
|
320
|
};
|
|
|
321
|
|
|
321
|
|
|
|
322
|
return safe;
|
|
322
|
return safe;
|
|
|
323
|
});
No newline at end of file
|
|
323
|
});
|