UNPKG

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