UNPKG

12.1 kBJavaScriptView Raw
1"use strict";
2var lang_1 = require('./lang');
3exports.Map = lang_1.global.Map;
4exports.Set = lang_1.global.Set;
5// Safari and Internet Explorer do not support the iterable parameter to the
6// Map constructor. We work around that by manually adding the items.
7var createMapFromPairs = (function () {
8 try {
9 if (new exports.Map([[1, 2]]).size === 1) {
10 return function createMapFromPairs(pairs) { return new exports.Map(pairs); };
11 }
12 }
13 catch (e) {
14 }
15 return function createMapAndPopulateFromPairs(pairs) {
16 var map = new exports.Map();
17 for (var i = 0; i < pairs.length; i++) {
18 var pair = pairs[i];
19 map.set(pair[0], pair[1]);
20 }
21 return map;
22 };
23})();
24var createMapFromMap = (function () {
25 try {
26 if (new exports.Map(new exports.Map())) {
27 return function createMapFromMap(m) { return new exports.Map(m); };
28 }
29 }
30 catch (e) {
31 }
32 return function createMapAndPopulateFromMap(m) {
33 var map = new exports.Map();
34 m.forEach(function (v, k) { map.set(k, v); });
35 return map;
36 };
37})();
38var _clearValues = (function () {
39 if ((new exports.Map()).keys().next) {
40 return function _clearValues(m) {
41 var keyIterator = m.keys();
42 var k;
43 while (!((k = keyIterator.next()).done)) {
44 m.set(k.value, null);
45 }
46 };
47 }
48 else {
49 return function _clearValuesWithForeEach(m) {
50 m.forEach(function (v, k) { m.set(k, null); });
51 };
52 }
53})();
54// Safari doesn't implement MapIterator.next(), which is used is Traceur's polyfill of Array.from
55// TODO(mlaval): remove the work around once we have a working polyfill of Array.from
56var _arrayFromMap = (function () {
57 try {
58 if ((new exports.Map()).values().next) {
59 return function createArrayFromMap(m, getValues) {
60 return getValues ? Array.from(m.values()) : Array.from(m.keys());
61 };
62 }
63 }
64 catch (e) {
65 }
66 return function createArrayFromMapWithForeach(m, getValues) {
67 var res = ListWrapper.createFixedSize(m.size), i = 0;
68 m.forEach(function (v, k) {
69 res[i] = getValues ? v : k;
70 i++;
71 });
72 return res;
73 };
74})();
75var MapWrapper = (function () {
76 function MapWrapper() {
77 }
78 MapWrapper.clone = function (m) { return createMapFromMap(m); };
79 MapWrapper.createFromStringMap = function (stringMap) {
80 var result = new exports.Map();
81 for (var prop in stringMap) {
82 result.set(prop, stringMap[prop]);
83 }
84 return result;
85 };
86 MapWrapper.toStringMap = function (m) {
87 var r = {};
88 m.forEach(function (v, k) { return r[k] = v; });
89 return r;
90 };
91 MapWrapper.createFromPairs = function (pairs) { return createMapFromPairs(pairs); };
92 MapWrapper.clearValues = function (m) { _clearValues(m); };
93 MapWrapper.iterable = function (m) { return m; };
94 MapWrapper.keys = function (m) { return _arrayFromMap(m, false); };
95 MapWrapper.values = function (m) { return _arrayFromMap(m, true); };
96 return MapWrapper;
97}());
98exports.MapWrapper = MapWrapper;
99/**
100 * Wraps Javascript Objects
101 */
102var StringMapWrapper = (function () {
103 function StringMapWrapper() {
104 }
105 StringMapWrapper.create = function () {
106 // Note: We are not using Object.create(null) here due to
107 // performance!
108 // http://jsperf.com/ng2-object-create-null
109 return {};
110 };
111 StringMapWrapper.contains = function (map, key) {
112 return map.hasOwnProperty(key);
113 };
114 StringMapWrapper.get = function (map, key) {
115 return map.hasOwnProperty(key) ? map[key] : undefined;
116 };
117 StringMapWrapper.set = function (map, key, value) { map[key] = value; };
118 StringMapWrapper.keys = function (map) { return Object.keys(map); };
119 StringMapWrapper.values = function (map) {
120 return Object.keys(map).reduce(function (r, a) {
121 r.push(map[a]);
122 return r;
123 }, []);
124 };
125 StringMapWrapper.isEmpty = function (map) {
126 for (var prop in map) {
127 return false;
128 }
129 return true;
130 };
131 StringMapWrapper.delete = function (map, key) { delete map[key]; };
132 StringMapWrapper.forEach = function (map, callback) {
133 for (var prop in map) {
134 if (map.hasOwnProperty(prop)) {
135 callback(map[prop], prop);
136 }
137 }
138 };
139 StringMapWrapper.merge = function (m1, m2) {
140 var m = {};
141 for (var attr in m1) {
142 if (m1.hasOwnProperty(attr)) {
143 m[attr] = m1[attr];
144 }
145 }
146 for (var attr in m2) {
147 if (m2.hasOwnProperty(attr)) {
148 m[attr] = m2[attr];
149 }
150 }
151 return m;
152 };
153 StringMapWrapper.equals = function (m1, m2) {
154 var k1 = Object.keys(m1);
155 var k2 = Object.keys(m2);
156 if (k1.length != k2.length) {
157 return false;
158 }
159 var key;
160 for (var i = 0; i < k1.length; i++) {
161 key = k1[i];
162 if (m1[key] !== m2[key]) {
163 return false;
164 }
165 }
166 return true;
167 };
168 return StringMapWrapper;
169}());
170exports.StringMapWrapper = StringMapWrapper;
171var ListWrapper = (function () {
172 function ListWrapper() {
173 }
174 // JS has no way to express a statically fixed size list, but dart does so we
175 // keep both methods.
176 ListWrapper.createFixedSize = function (size) { return new Array(size); };
177 ListWrapper.createGrowableSize = function (size) { return new Array(size); };
178 ListWrapper.clone = function (array) { return array.slice(0); };
179 ListWrapper.forEachWithIndex = function (array, fn) {
180 for (var i = 0; i < array.length; i++) {
181 fn(array[i], i);
182 }
183 };
184 ListWrapper.first = function (array) {
185 if (!array)
186 return null;
187 return array[0];
188 };
189 ListWrapper.last = function (array) {
190 if (!array || array.length == 0)
191 return null;
192 return array[array.length - 1];
193 };
194 ListWrapper.indexOf = function (array, value, startIndex) {
195 if (startIndex === void 0) { startIndex = 0; }
196 return array.indexOf(value, startIndex);
197 };
198 ListWrapper.contains = function (list, el) { return list.indexOf(el) !== -1; };
199 ListWrapper.reversed = function (array) {
200 var a = ListWrapper.clone(array);
201 return a.reverse();
202 };
203 ListWrapper.concat = function (a, b) { return a.concat(b); };
204 ListWrapper.insert = function (list, index, value) { list.splice(index, 0, value); };
205 ListWrapper.removeAt = function (list, index) {
206 var res = list[index];
207 list.splice(index, 1);
208 return res;
209 };
210 ListWrapper.removeAll = function (list, items) {
211 for (var i = 0; i < items.length; ++i) {
212 var index = list.indexOf(items[i]);
213 list.splice(index, 1);
214 }
215 };
216 ListWrapper.remove = function (list, el) {
217 var index = list.indexOf(el);
218 if (index > -1) {
219 list.splice(index, 1);
220 return true;
221 }
222 return false;
223 };
224 ListWrapper.clear = function (list) { list.length = 0; };
225 ListWrapper.isEmpty = function (list) { return list.length == 0; };
226 ListWrapper.fill = function (list, value, start, end) {
227 if (start === void 0) { start = 0; }
228 if (end === void 0) { end = null; }
229 list.fill(value, start, end === null ? list.length : end);
230 };
231 ListWrapper.equals = function (a, b) {
232 if (a.length != b.length)
233 return false;
234 for (var i = 0; i < a.length; ++i) {
235 if (a[i] !== b[i])
236 return false;
237 }
238 return true;
239 };
240 ListWrapper.slice = function (l, from, to) {
241 if (from === void 0) { from = 0; }
242 if (to === void 0) { to = null; }
243 return l.slice(from, to === null ? undefined : to);
244 };
245 ListWrapper.splice = function (l, from, length) { return l.splice(from, length); };
246 ListWrapper.sort = function (l, compareFn) {
247 if (lang_1.isPresent(compareFn)) {
248 l.sort(compareFn);
249 }
250 else {
251 l.sort();
252 }
253 };
254 ListWrapper.toString = function (l) { return l.toString(); };
255 ListWrapper.toJSON = function (l) { return JSON.stringify(l); };
256 ListWrapper.maximum = function (list, predicate) {
257 if (list.length == 0) {
258 return null;
259 }
260 var solution = null;
261 var maxValue = -Infinity;
262 for (var index = 0; index < list.length; index++) {
263 var candidate = list[index];
264 if (lang_1.isBlank(candidate)) {
265 continue;
266 }
267 var candidateValue = predicate(candidate);
268 if (candidateValue > maxValue) {
269 solution = candidate;
270 maxValue = candidateValue;
271 }
272 }
273 return solution;
274 };
275 ListWrapper.flatten = function (list) {
276 var target = [];
277 _flattenArray(list, target);
278 return target;
279 };
280 ListWrapper.addAll = function (list, source) {
281 for (var i = 0; i < source.length; i++) {
282 list.push(source[i]);
283 }
284 };
285 return ListWrapper;
286}());
287exports.ListWrapper = ListWrapper;
288function _flattenArray(source, target) {
289 if (lang_1.isPresent(source)) {
290 for (var i = 0; i < source.length; i++) {
291 var item = source[i];
292 if (lang_1.isArray(item)) {
293 _flattenArray(item, target);
294 }
295 else {
296 target.push(item);
297 }
298 }
299 }
300 return target;
301}
302function isListLikeIterable(obj) {
303 if (!lang_1.isJsObject(obj))
304 return false;
305 return lang_1.isArray(obj) ||
306 (!(obj instanceof exports.Map) &&
307 lang_1.getSymbolIterator() in obj); // JS Iterable have a Symbol.iterator prop
308}
309exports.isListLikeIterable = isListLikeIterable;
310function areIterablesEqual(a, b, comparator) {
311 var iterator1 = a[lang_1.getSymbolIterator()]();
312 var iterator2 = b[lang_1.getSymbolIterator()]();
313 while (true) {
314 var item1 = iterator1.next();
315 var item2 = iterator2.next();
316 if (item1.done && item2.done)
317 return true;
318 if (item1.done || item2.done)
319 return false;
320 if (!comparator(item1.value, item2.value))
321 return false;
322 }
323}
324exports.areIterablesEqual = areIterablesEqual;
325function iterateListLike(obj, fn) {
326 if (lang_1.isArray(obj)) {
327 for (var i = 0; i < obj.length; i++) {
328 fn(obj[i]);
329 }
330 }
331 else {
332 var iterator = obj[lang_1.getSymbolIterator()]();
333 var item;
334 while (!((item = iterator.next()).done)) {
335 fn(item.value);
336 }
337 }
338}
339exports.iterateListLike = iterateListLike;
340// Safari and Internet Explorer do not support the iterable parameter to the
341// Set constructor. We work around that by manually adding the items.
342var createSetFromList = (function () {
343 var test = new exports.Set([1, 2, 3]);
344 if (test.size === 3) {
345 return function createSetFromList(lst) { return new exports.Set(lst); };
346 }
347 else {
348 return function createSetAndPopulateFromList(lst) {
349 var res = new exports.Set(lst);
350 if (res.size !== lst.length) {
351 for (var i = 0; i < lst.length; i++) {
352 res.add(lst[i]);
353 }
354 }
355 return res;
356 };
357 }
358})();
359var SetWrapper = (function () {
360 function SetWrapper() {
361 }
362 SetWrapper.createFromList = function (lst) { return createSetFromList(lst); };
363 SetWrapper.has = function (s, key) { return s.has(key); };
364 SetWrapper.delete = function (m, k) { m.delete(k); };
365 return SetWrapper;
366}());
367exports.SetWrapper = SetWrapper;
368//# sourceMappingURL=collection.js.map
\No newline at end of file