UNPKG

4.8 kBJavaScriptView Raw
1// Generated by CoffeeScript 1.10.0
2(function() {
3 var bind, clone, curry, deepEqual, delegate, detach, extend, fromJSON, has, include, isFunction, isObject, keys, merge, negate, omit, pairs, pick, properties, property, query, ref, ref1, toJSON, values,
4 slice = [].slice;
5
6 ref = require("fairmont-core"), curry = ref.curry, negate = ref.negate;
7
8 ref1 = require("./type"), isObject = ref1.isObject, isFunction = ref1.isFunction;
9
10 deepEqual = require("./util").deepEqual;
11
12 include = extend = function() {
13 var i, key, len, mixin, mixins, object, value;
14 object = arguments[0], mixins = 2 <= arguments.length ? slice.call(arguments, 1) : [];
15 for (i = 0, len = mixins.length; i < len; i++) {
16 mixin = mixins[i];
17 for (key in mixin) {
18 value = mixin[key];
19 object[key] = value;
20 }
21 }
22 return object;
23 };
24
25 merge = function() {
26 var destination, i, k, len, object, objects, v;
27 objects = 1 <= arguments.length ? slice.call(arguments, 0) : [];
28 destination = {};
29 for (i = 0, len = objects.length; i < len; i++) {
30 object = objects[i];
31 for (k in object) {
32 v = object[k];
33 destination[k] = v;
34 }
35 }
36 return destination;
37 };
38
39 clone = function(object) {
40 var _clone, flags, key;
41 if ((object == null) || typeof object !== 'object') {
42 return object;
43 }
44 if (object instanceof Date) {
45 return new Date(object.getTime());
46 }
47 if (object instanceof RegExp) {
48 flags = '';
49 if (object.global != null) {
50 flags += 'g';
51 }
52 if (object.ignoreCase != null) {
53 flags += 'i';
54 }
55 if (object.multiline != null) {
56 flags += 'm';
57 }
58 if (object.sticky != null) {
59 flags += 'y';
60 }
61 return new RegExp(object.source, flags);
62 }
63 _clone = new object.constructor();
64 for (key in object) {
65 _clone[key] = clone(object[key]);
66 }
67 return _clone;
68 };
69
70 property = curry(function(key, object) {
71 return object[key];
72 });
73
74 delegate = function(from, to) {
75 var name, results, value;
76 results = [];
77 for (name in to) {
78 value = to[name];
79 if (isFunction(value)) {
80 results.push((function(value) {
81 return from[name] = function() {
82 var args;
83 args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
84 return value.call.apply(value, [to].concat(slice.call(args)));
85 };
86 })(value));
87 }
88 }
89 return results;
90 };
91
92 bind = curry(function(f, x) {
93 return f.bind(x);
94 });
95
96 detach = function(f) {
97 return curry(function() {
98 var args, x;
99 x = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
100 return f.apply(x, args);
101 });
102 };
103
104 properties = (function() {
105 var defaults;
106 defaults = {
107 enumerable: true,
108 configurable: true
109 };
110 return function(object, properties) {
111 var key, results, value;
112 results = [];
113 for (key in properties) {
114 value = properties[key];
115 include(value, defaults);
116 results.push(Object.defineProperty(object, key, value));
117 }
118 return results;
119 };
120 })();
121
122 has = curry(function(p, x) {
123 return x[p] != null;
124 });
125
126 keys = Object.keys;
127
128 values = function(x) {
129 var k, results, v;
130 results = [];
131 for (k in x) {
132 v = x[k];
133 results.push(v);
134 }
135 return results;
136 };
137
138 pairs = function(x) {
139 var k, results, v;
140 results = [];
141 for (k in x) {
142 v = x[k];
143 results.push([k, v]);
144 }
145 return results;
146 };
147
148 pick = curry(function(f, x) {
149 var k, r, v;
150 r = {};
151 for (k in x) {
152 v = x[k];
153 if (f(k, v)) {
154 r[k] = v;
155 }
156 }
157 return r;
158 });
159
160 omit = curry(function(f, x) {
161 return pick(negate(f), x);
162 });
163
164 query = curry(function(example, target) {
165 var k, v;
166 if ((isObject(example)) && (isObject(target))) {
167 for (k in example) {
168 v = example[k];
169 if (!query(v, target[k])) {
170 return false;
171 }
172 }
173 return true;
174 } else {
175 return deepEqual(example, target);
176 }
177 });
178
179 toJSON = function(x, pretty) {
180 if (pretty == null) {
181 pretty = false;
182 }
183 if (pretty) {
184 return JSON.stringify(x, null, 2);
185 } else {
186 return JSON.stringify(x);
187 }
188 };
189
190 fromJSON = JSON.parse;
191
192 module.exports = {
193 include: include,
194 extend: extend,
195 merge: merge,
196 clone: clone,
197 properties: properties,
198 property: property,
199 delegate: delegate,
200 bind: bind,
201 detach: detach,
202 has: has,
203 keys: keys,
204 values: values,
205 pairs: pairs,
206 pick: pick,
207 omit: omit,
208 query: query,
209 toJSON: toJSON,
210 fromJSON: fromJSON
211 };
212
213}).call(this);