1 | (function initLazyAss() {
|
2 |
|
3 | function formMessage(args) {
|
4 | var msg = args.reduce(function (total, arg, k) {
|
5 | if (k) {
|
6 | total += ' ';
|
7 | }
|
8 | if (typeof arg === 'string') {
|
9 | return total + arg;
|
10 | }
|
11 | if (typeof arg === 'function') {
|
12 | var fnResult;
|
13 | try {
|
14 | fnResult = arg();
|
15 | } catch (err) {
|
16 |
|
17 | fnResult = '[function ' + arg.name + ' threw error!]';
|
18 | }
|
19 | return total + fnResult;
|
20 | }
|
21 | if (Array.isArray(arg)) {
|
22 | return total + JSON.stringify(arg);
|
23 | }
|
24 | if (arg instanceof Error) {
|
25 | return total + arg.name + ' ' + arg.message;
|
26 | }
|
27 | return total + JSON.stringify(arg, null, 2);
|
28 | }, '');
|
29 | return msg;
|
30 | }
|
31 |
|
32 | function lazyAssLogic(condition) {
|
33 | var fn = typeof condition === 'function' ? condition : null;
|
34 |
|
35 | if (fn) {
|
36 | condition = fn();
|
37 | }
|
38 | if (!condition) {
|
39 | var args = [].slice.call(arguments, 1);
|
40 | if (fn) {
|
41 | args.unshift(fn.toString());
|
42 | }
|
43 | return new Error(formMessage(args));
|
44 | }
|
45 | }
|
46 |
|
47 | var lazyAss = function lazyAss() {
|
48 | var err = lazyAssLogic.apply(null, arguments);
|
49 | if (err) {
|
50 | throw err;
|
51 | }
|
52 | };
|
53 |
|
54 | var lazyAssync = function lazyAssync() {
|
55 | var err = lazyAssLogic.apply(null, arguments);
|
56 | if (err) {
|
57 | setTimeout(function () {
|
58 | throw err;
|
59 | }, 0);
|
60 | }
|
61 | };
|
62 |
|
63 | function register(value, name) {
|
64 | if (typeof window === 'object') {
|
65 |
|
66 | window[name] = value;
|
67 | } else if (typeof global === 'object') {
|
68 | global[name] = value;
|
69 | } else {
|
70 | throw new Error('Do not know how to register ' + name);
|
71 | }
|
72 | }
|
73 |
|
74 | register(lazyAss, 'lazyAss');
|
75 | register(lazyAss, 'la');
|
76 | register(lazyAssync, 'lazyAssync');
|
77 | register(lazyAssync, 'lac');
|
78 |
|
79 | }());
|