##// END OF EJS Templates
improved core/build.gradle script
cin -
r4:f88a0de08cfb default
parent child
Show More
@@ -0,0 +1,27
1 {
2 "env": {
3 "browser": true,
4 "commonjs": true,
5 "amd": true,
6 "node": true
7 },
8 "parserOptions": {
9 "ecmaFeatures": {
10 "jsx": true
11 },
12 "sourceType": "module"
13 },
14 "extends": "eslint:recommended",
15 "rules": {
16 "no-const-assign": "warn",
17 "no-this-before-super": "warn",
18 "no-undef": "error",
19 "no-unreachable": "warn",
20 "no-unused-vars": "warn",
21 "constructor-super": "warn",
22 "valid-typeof": "warn",
23 "semi" : "warn",
24 "no-invalid-this" : "error",
25 "no-console": "off"
26 }
27 } No newline at end of file
@@ -1,58 +1,63
1
1
2 println "version: $version"
2 println "version: $version"
3
3
4 String makePackageName(String group, String name, String ver) {
4 def distDir = "$buildDir/dist"
5 def sb = new StringBuilder();
5 def testDir = "$buildDir/test"
6 if(group)
7 sb
8 .append('@')
9 .append(group)
10 .append('/');
11
12 sb.append(name);
13
6
14 if (ver)
7 task clean {
15 sb.append('@').append(ver);
8 doLast {
16
9 delete buildDir
17 return sb.toString();
10 }
18 }
19
20 configurations {
21 compile
22 peer
23 dev
24 }
11 }
25
12
26 dependencies {
13 task cleanNpm {
27 compile ":eslint:1.x || >=2.5.0 || 5.0.0 - 7.2.3"
14 doLast {
28 compile (name: 'foo') {
15 delete 'node_modules'
29 ext.location = "http://some/package/location"
30 }
16 }
31 peer "dojo:core"
32 }
17 }
33
18
34 task prepare(type: Copy) {
19 task _npmInstall() {
35 from('src/js/')
20 inputs.file("package.json")
36 from('.') {
21 outputs.dir("node_modules")
37 include 'readme.md', 'license', 'history.md', 'package.json'
22 doLast {
38 }
23 exec {
39 into(buildDir)
24 commandLine 'npm', 'install'
40 }
41
42 task installDeps {
43 configurations.compile.allDependencies.forEach { d ->
44 println makePackageName(d.group, d.name, d.version);
45 if(d.hasProperty('location')) {
46 println d.location
47 }
25 }
48 }
26 }
49 }
27 }
50
28
51 task build(dependsOn: prepare) {
29 task _legacyJs(type:Copy) {
30 from 'src/js/'
31 into distDir
32 }
33
34 task _packageMeta(type: Copy) {
35 inputs.property("version", version)
36 from('.') {
37 include 'package.json', 'readme.md', 'license', 'history.md'
38 }
39 into distDir
40 doLast {
41 exec {
42 workingDir distDir
43 commandLine 'npm', 'version', version
44 }
45 }
46 }
47
48 task build(dependsOn: [_npmInstall, _legacyJs, _packageMeta]) {
49
50 }
51
52 task _localInstall(dependsOn: build, type: Exec) {
53 inputs.file("$distDir/package.json")
54 outputs.upToDateWhen { true }
55
56 commandLine 'npm', 'install', '--no-save', '--force', distDir
52 }
57 }
53
58
54 task pack(dependsOn: build, type: Exec) {
59 task pack(dependsOn: build, type: Exec) {
55 workingDir = buildDir
60 workingDir = buildDir
56
61
57 commandLine 'npm', 'pack'
62 commandLine 'npm', 'pack'
58 } No newline at end of file
63 }
@@ -0,0 +1,22
1 Copyright 2017-2018 Implab team
2
3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions are met:
5
6 1. Redistributions of source code must retain the above copyright notice, this
7 list of conditions and the following disclaimer.
8
9 2. Redistributions in binary form must reproduce the above copyright notice,
10 this list of conditions and the following disclaimer in the documentation
11 and/or other materials provided with the distribution.
12
13 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
17 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
20 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. No newline at end of file
@@ -1,18 +1,19
1 {
1 {
2 "name": "@implab/core",
2 "name": "@implab/core",
3 "version": "1.0.1",
3 "version": "0.0.1-dev",
4 "description": "Dependency injection, logging, simple and fast text template engine",
4 "description": "Dependency injection, logging, simple and fast text template engine",
5 "main": "main.js",
5 "main": "main.js",
6 "scripts": {
6 "scripts": {
7 "test": "echo \"Error: no test specified\" && exit 1"
7 "test": "echo \"Error: no test specified\" && exit 1"
8 },
8 },
9 "keywords": [
9 "keywords": [
10 "di",
10 "di",
11 "ioc",
11 "ioc",
12 "logging",
12 "logging",
13 "template engine",
13 "template engine",
14 "dependency injection"
14 "dependency injection"
15 ],
15 ],
16 "author": "Sergey Smirnov",
16 "author": "Implab team",
17 "license": "MIT"
17 "license": "BSD",
18 "repository": "https://bitbucket.org/implab/implabjs"
18 }
19 }
@@ -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 });
General Comments 0
You need to be logged in to leave comments. Login now