UNPKG

1.83 kBJavaScriptView Raw
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 // ignore the error
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 /* global window */
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}());