react-source 0.11.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7a26c491ee260f677ae023b087a97b0380b4d05
4
- data.tar.gz: 24572eeaf7f9b7a718a036139e2e86be09fe221e
3
+ metadata.gz: 9c3cb0306b64d1c4c5aac71c482cd40b8f24760a
4
+ data.tar.gz: 24ff0130464f8f866aac882f3dadf561a4e33fe4
5
5
  SHA512:
6
- metadata.gz: b2732954c0cae6aabeb06a17b58801b94c8a551ac9424741d6a9a821a8872d0a8fa743f0aeace114aa9d8d8037f22df687a5f911d8900bd807b99f957f82e361
7
- data.tar.gz: 419685c9fd86c6f3703d1463a5c71aa677408fdf5aa05d3cafded06d12437083f31717e8fa4619e8da665524d75d07a2149aa59f5d9ef9cc8cbbce45662eaf1c
6
+ metadata.gz: a2253b7e87f33d91699d53c2bc13dfa6b3834ce8441f72c62add6e615a7f2399d428f9ee43c6f1cbb4638fa167d0a1ba5f756dc544de31d05d9221cb12cef228
7
+ data.tar.gz: 9f74e054136b138c0367ce0a4e77a928794c6842b67f4a1dde5871acf9dd6d3fb0b42f84a840c2179d5fe92786b8daee88c1385dfdb8fcd2432de30c80ae6921
@@ -1,7 +1,336 @@
1
1
  /**
2
- * JSXTransformer v0.11.1
2
+ * JSXTransformer v0.12.0
3
3
  */
4
- !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSXTransformer=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
4
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSXTransformer=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
5
+ /**
6
+ * Copyright 2013-2014, Facebook, Inc.
7
+ * All rights reserved.
8
+ *
9
+ * This source code is licensed under the BSD-style license found in the
10
+ * LICENSE file in the root directory of this source tree. An additional grant
11
+ * of patent rights can be found in the PATENTS file in the same directory.
12
+ */
13
+ /* jshint browser: true */
14
+ /* jslint evil: true */
15
+
16
+ 'use strict';
17
+
18
+ var buffer = _dereq_('buffer');
19
+ var transform = _dereq_('jstransform').transform;
20
+ var visitors = _dereq_('./fbtransform/visitors');
21
+
22
+ var headEl;
23
+ var dummyAnchor;
24
+ var inlineScriptCount = 0;
25
+
26
+ // The source-map library relies on Object.defineProperty, but IE8 doesn't
27
+ // support it fully even with es5-sham. Indeed, es5-sham's defineProperty
28
+ // throws when Object.prototype.__defineGetter__ is missing, so we skip building
29
+ // the source map in that case.
30
+ var supportsAccessors = Object.prototype.hasOwnProperty('__defineGetter__');
31
+
32
+ /**
33
+ * Run provided code through jstransform.
34
+ *
35
+ * @param {string} source Original source code
36
+ * @param {object?} options Options to pass to jstransform
37
+ * @return {object} object as returned from jstransform
38
+ */
39
+ function transformReact(source, options) {
40
+ // TODO: just use react-tools
41
+ options = options || {};
42
+ var visitorList;
43
+ if (options.harmony) {
44
+ visitorList = visitors.getAllVisitors();
45
+ } else {
46
+ visitorList = visitors.transformVisitors.react;
47
+ }
48
+
49
+ return transform(visitorList, source, {
50
+ sourceMap: supportsAccessors && options.sourceMap
51
+ });
52
+ }
53
+
54
+ /**
55
+ * Eval provided source after transforming it.
56
+ *
57
+ * @param {string} source Original source code
58
+ * @param {object?} options Options to pass to jstransform
59
+ */
60
+ function exec(source, options) {
61
+ return eval(transformReact(source, options).code);
62
+ }
63
+
64
+ /**
65
+ * This method returns a nicely formated line of code pointing to the exact
66
+ * location of the error `e`. The line is limited in size so big lines of code
67
+ * are also shown in a readable way.
68
+ *
69
+ * Example:
70
+ * ... x', overflow:'scroll'}} id={} onScroll={this.scroll} class=" ...
71
+ * ^
72
+ *
73
+ * @param {string} code The full string of code
74
+ * @param {Error} e The error being thrown
75
+ * @return {string} formatted message
76
+ * @internal
77
+ */
78
+ function createSourceCodeErrorMessage(code, e) {
79
+ var sourceLines = code.split('\n');
80
+ var erroneousLine = sourceLines[e.lineNumber - 1];
81
+
82
+ // Removes any leading indenting spaces and gets the number of
83
+ // chars indenting the `erroneousLine`
84
+ var indentation = 0;
85
+ erroneousLine = erroneousLine.replace(/^\s+/, function(leadingSpaces) {
86
+ indentation = leadingSpaces.length;
87
+ return '';
88
+ });
89
+
90
+ // Defines the number of characters that are going to show
91
+ // before and after the erroneous code
92
+ var LIMIT = 30;
93
+ var errorColumn = e.column - indentation;
94
+
95
+ if (errorColumn > LIMIT) {
96
+ erroneousLine = '... ' + erroneousLine.slice(errorColumn - LIMIT);
97
+ errorColumn = 4 + LIMIT;
98
+ }
99
+ if (erroneousLine.length - errorColumn > LIMIT) {
100
+ erroneousLine = erroneousLine.slice(0, errorColumn + LIMIT) + ' ...';
101
+ }
102
+ var message = '\n\n' + erroneousLine + '\n';
103
+ message += new Array(errorColumn - 1).join(' ') + '^';
104
+ return message;
105
+ }
106
+
107
+ /**
108
+ * Actually transform the code.
109
+ *
110
+ * @param {string} code
111
+ * @param {string?} url
112
+ * @param {object?} options
113
+ * @return {string} The transformed code.
114
+ * @internal
115
+ */
116
+ function transformCode(code, url, options) {
117
+ try {
118
+ var transformed = transformReact(code, options);
119
+ } catch(e) {
120
+ e.message += '\n at ';
121
+ if (url) {
122
+ if ('fileName' in e) {
123
+ // We set `fileName` if it's supported by this error object and
124
+ // a `url` was provided.
125
+ // The error will correctly point to `url` in Firefox.
126
+ e.fileName = url;
127
+ }
128
+ e.message += url + ':' + e.lineNumber + ':' + e.column;
129
+ } else {
130
+ e.message += location.href;
131
+ }
132
+ e.message += createSourceCodeErrorMessage(code, e);
133
+ throw e;
134
+ }
135
+
136
+ if (!transformed.sourceMap) {
137
+ return transformed.code;
138
+ }
139
+
140
+ var map = transformed.sourceMap.toJSON();
141
+ var source;
142
+ if (url == null) {
143
+ source = "Inline JSX script";
144
+ inlineScriptCount++;
145
+ if (inlineScriptCount > 1) {
146
+ source += ' (' + inlineScriptCount + ')';
147
+ }
148
+ } else if (dummyAnchor) {
149
+ // Firefox has problems when the sourcemap source is a proper URL with a
150
+ // protocol and hostname, so use the pathname. We could use just the
151
+ // filename, but hopefully using the full path will prevent potential
152
+ // issues where the same filename exists in multiple directories.
153
+ dummyAnchor.href = url;
154
+ source = dummyAnchor.pathname.substr(1);
155
+ }
156
+ map.sources = [source];
157
+ map.sourcesContent = [code];
158
+
159
+ return (
160
+ transformed.code +
161
+ '\n//# sourceMappingURL=data:application/json;base64,' +
162
+ buffer.Buffer(JSON.stringify(map)).toString('base64')
163
+ );
164
+ }
165
+
166
+
167
+ /**
168
+ * Appends a script element at the end of the <head> with the content of code,
169
+ * after transforming it.
170
+ *
171
+ * @param {string} code The original source code
172
+ * @param {string?} url Where the code came from. null if inline
173
+ * @param {object?} options Options to pass to jstransform
174
+ * @internal
175
+ */
176
+ function run(code, url, options) {
177
+ var scriptEl = document.createElement('script');
178
+ scriptEl.text = transformCode(code, url, options);
179
+ headEl.appendChild(scriptEl);
180
+ }
181
+
182
+ /**
183
+ * Load script from the provided url and pass the content to the callback.
184
+ *
185
+ * @param {string} url The location of the script src
186
+ * @param {function} callback Function to call with the content of url
187
+ * @internal
188
+ */
189
+ function load(url, successCallback, errorCallback) {
190
+ var xhr;
191
+ xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP')
192
+ : new XMLHttpRequest();
193
+
194
+ // async, however scripts will be executed in the order they are in the
195
+ // DOM to mirror normal script loading.
196
+ xhr.open('GET', url, true);
197
+ if ('overrideMimeType' in xhr) {
198
+ xhr.overrideMimeType('text/plain');
199
+ }
200
+ xhr.onreadystatechange = function() {
201
+ if (xhr.readyState === 4) {
202
+ if (xhr.status === 0 || xhr.status === 200) {
203
+ successCallback(xhr.responseText);
204
+ } else {
205
+ errorCallback();
206
+ throw new Error("Could not load " + url);
207
+ }
208
+ }
209
+ };
210
+ return xhr.send(null);
211
+ }
212
+
213
+ /**
214
+ * Loop over provided script tags and get the content, via innerHTML if an
215
+ * inline script, or by using XHR. Transforms are applied if needed. The scripts
216
+ * are executed in the order they are found on the page.
217
+ *
218
+ * @param {array} scripts The <script> elements to load and run.
219
+ * @internal
220
+ */
221
+ function loadScripts(scripts) {
222
+ var result = [];
223
+ var count = scripts.length;
224
+
225
+ function check() {
226
+ var script, i;
227
+
228
+ for (i = 0; i < count; i++) {
229
+ script = result[i];
230
+
231
+ if (script.loaded && !script.executed) {
232
+ script.executed = true;
233
+ run(script.content, script.url, script.options);
234
+ } else if (!script.loaded && !script.error && !script.async) {
235
+ break;
236
+ }
237
+ }
238
+ }
239
+
240
+ scripts.forEach(function(script, i) {
241
+ var options = {
242
+ sourceMap: true
243
+ };
244
+ if (/;harmony=true(;|$)/.test(script.type)) {
245
+ options.harmony = true
246
+ }
247
+
248
+ // script.async is always true for non-javascript script tags
249
+ var async = script.hasAttribute('async');
250
+
251
+ if (script.src) {
252
+ result[i] = {
253
+ async: async,
254
+ error: false,
255
+ executed: false,
256
+ content: null,
257
+ loaded: false,
258
+ url: script.src,
259
+ options: options
260
+ };
261
+
262
+ load(script.src, function(content) {
263
+ result[i].loaded = true;
264
+ result[i].content = content;
265
+ check();
266
+ }, function() {
267
+ result[i].error = true;
268
+ check();
269
+ });
270
+ } else {
271
+ result[i] = {
272
+ async: async,
273
+ error: false,
274
+ executed: false,
275
+ content: script.innerHTML,
276
+ loaded: true,
277
+ url: null,
278
+ options: options
279
+ };
280
+ }
281
+ });
282
+
283
+ check();
284
+ }
285
+
286
+ /**
287
+ * Find and run all script tags with type="text/jsx".
288
+ *
289
+ * @internal
290
+ */
291
+ function runScripts() {
292
+ var scripts = document.getElementsByTagName('script');
293
+
294
+ // Array.prototype.slice cannot be used on NodeList on IE8
295
+ var jsxScripts = [];
296
+ for (var i = 0; i < scripts.length; i++) {
297
+ if (/^text\/jsx(;|$)/.test(scripts.item(i).type)) {
298
+ jsxScripts.push(scripts.item(i));
299
+ }
300
+ }
301
+
302
+ if (jsxScripts.length < 1) {
303
+ return;
304
+ }
305
+
306
+ console.warn(
307
+ 'You are using the in-browser JSX transformer. Be sure to precompile ' +
308
+ 'your JSX for production - ' +
309
+ 'http://facebook.github.io/react/docs/tooling-integration.html#jsx'
310
+ );
311
+
312
+ loadScripts(jsxScripts);
313
+ }
314
+
315
+ // Listen for load event if we're in a browser and then kick off finding and
316
+ // running of scripts.
317
+ if (typeof window !== "undefined" && window !== null) {
318
+ headEl = document.getElementsByTagName('head')[0];
319
+ dummyAnchor = document.createElement('a');
320
+
321
+ if (window.addEventListener) {
322
+ window.addEventListener('DOMContentLoaded', runScripts, false);
323
+ } else {
324
+ window.attachEvent('onload', runScripts);
325
+ }
326
+ }
327
+
328
+ module.exports = {
329
+ transform: transformReact,
330
+ exec: exec
331
+ };
332
+
333
+ },{"./fbtransform/visitors":37,"buffer":2,"jstransform":21}],2:[function(_dereq_,module,exports){
5
334
  /*!
6
335
  * The buffer module from node.js, for the browser.
7
336
  *
@@ -11,29 +340,45 @@
11
340
 
12
341
  var base64 = _dereq_('base64-js')
13
342
  var ieee754 = _dereq_('ieee754')
343
+ var isArray = _dereq_('is-array')
14
344
 
15
345
  exports.Buffer = Buffer
16
346
  exports.SlowBuffer = Buffer
17
347
  exports.INSPECT_MAX_BYTES = 50
18
- Buffer.poolSize = 8192
348
+ Buffer.poolSize = 8192 // not used by this implementation
349
+
350
+ var kMaxLength = 0x3fffffff
19
351
 
20
352
  /**
21
- * If `Buffer._useTypedArrays`:
353
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
22
354
  * === true Use Uint8Array implementation (fastest)
23
- * === false Use Object implementation (compatible down to IE6)
355
+ * === false Use Object implementation (most compatible, even IE6)
356
+ *
357
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
358
+ * Opera 11.6+, iOS 4.2+.
359
+ *
360
+ * Note:
361
+ *
362
+ * - Implementation must support adding new properties to `Uint8Array` instances.
363
+ * Firefox 4-29 lacked support, fixed in Firefox 30+.
364
+ * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
365
+ *
366
+ * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
367
+ *
368
+ * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
369
+ * incorrect length in some situations.
370
+ *
371
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will
372
+ * get the Object implementation, which is slower but will work correctly.
24
373
  */
25
- Buffer._useTypedArrays = (function () {
26
- // Detect if browser supports Typed Arrays. Supported browsers are IE 10+, Firefox 4+,
27
- // Chrome 7+, Safari 5.1+, Opera 11.6+, iOS 4.2+. If the browser does not support adding
28
- // properties to `Uint8Array` instances, then that's the same as no `Uint8Array` support
29
- // because we need to be able to add all the node Buffer API methods. This is an issue
30
- // in Firefox 4-29. Now fixed: https://bugzilla.mozilla.org/show_bug.cgi?id=695438
374
+ Buffer.TYPED_ARRAY_SUPPORT = (function () {
31
375
  try {
32
376
  var buf = new ArrayBuffer(0)
33
377
  var arr = new Uint8Array(buf)
34
378
  arr.foo = function () { return 42 }
35
- return 42 === arr.foo() &&
36
- typeof arr.subarray === 'function' // Chrome 9-10 lack `subarray`
379
+ return 42 === arr.foo() && // typed array instances can be augmented
380
+ typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
381
+ new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
37
382
  } catch (e) {
38
383
  return false
39
384
  }
@@ -66,14 +411,18 @@ function Buffer (subject, encoding, noZero) {
66
411
  subject = base64clean(subject)
67
412
  length = Buffer.byteLength(subject, encoding)
68
413
  } else if (type === 'object' && subject !== null) { // assume object is array-like
69
- if (subject.type === 'Buffer' && Array.isArray(subject.data))
414
+ if (subject.type === 'Buffer' && isArray(subject.data))
70
415
  subject = subject.data
71
416
  length = +subject.length > 0 ? Math.floor(+subject.length) : 0
72
417
  } else
73
- throw new Error('First argument needs to be a number, array or string.')
418
+ throw new TypeError('must start with number, buffer, array or string')
419
+
420
+ if (this.length > kMaxLength)
421
+ throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
422
+ 'size: 0x' + kMaxLength.toString(16) + ' bytes')
74
423
 
75
424
  var buf
76
- if (Buffer._useTypedArrays) {
425
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
77
426
  // Preferred: Return an augmented `Uint8Array` instance for best performance
78
427
  buf = Buffer._augment(new Uint8Array(length))
79
428
  } else {
@@ -84,7 +433,7 @@ function Buffer (subject, encoding, noZero) {
84
433
  }
85
434
 
86
435
  var i
87
- if (Buffer._useTypedArrays && typeof subject.byteLength === 'number') {
436
+ if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') {
88
437
  // Speed optimization -- use set if we're copying from a typed array
89
438
  buf._set(subject)
90
439
  } else if (isArrayish(subject)) {
@@ -98,7 +447,7 @@ function Buffer (subject, encoding, noZero) {
98
447
  }
99
448
  } else if (type === 'string') {
100
449
  buf.write(subject, 0, encoding)
101
- } else if (type === 'number' && !Buffer._useTypedArrays && !noZero) {
450
+ } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT && !noZero) {
102
451
  for (i = 0; i < length; i++) {
103
452
  buf[i] = 0
104
453
  }
@@ -107,8 +456,25 @@ function Buffer (subject, encoding, noZero) {
107
456
  return buf
108
457
  }
109
458
 
110
- // STATIC METHODS
111
- // ==============
459
+ Buffer.isBuffer = function (b) {
460
+ return !!(b != null && b._isBuffer)
461
+ }
462
+
463
+ Buffer.compare = function (a, b) {
464
+ if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b))
465
+ throw new TypeError('Arguments must be Buffers')
466
+
467
+ var x = a.length
468
+ var y = b.length
469
+ for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
470
+ if (i !== len) {
471
+ x = a[i]
472
+ y = b[i]
473
+ }
474
+ if (x < y) return -1
475
+ if (y < x) return 1
476
+ return 0
477
+ }
112
478
 
113
479
  Buffer.isEncoding = function (encoding) {
114
480
  switch (String(encoding).toLowerCase()) {
@@ -129,88 +495,145 @@ Buffer.isEncoding = function (encoding) {
129
495
  }
130
496
  }
131
497
 
132
- Buffer.isBuffer = function (b) {
133
- return !!(b != null && b._isBuffer)
498
+ Buffer.concat = function (list, totalLength) {
499
+ if (!isArray(list)) throw new TypeError('Usage: Buffer.concat(list[, length])')
500
+
501
+ if (list.length === 0) {
502
+ return new Buffer(0)
503
+ } else if (list.length === 1) {
504
+ return list[0]
505
+ }
506
+
507
+ var i
508
+ if (totalLength === undefined) {
509
+ totalLength = 0
510
+ for (i = 0; i < list.length; i++) {
511
+ totalLength += list[i].length
512
+ }
513
+ }
514
+
515
+ var buf = new Buffer(totalLength)
516
+ var pos = 0
517
+ for (i = 0; i < list.length; i++) {
518
+ var item = list[i]
519
+ item.copy(buf, pos)
520
+ pos += item.length
521
+ }
522
+ return buf
134
523
  }
135
524
 
136
525
  Buffer.byteLength = function (str, encoding) {
137
526
  var ret
138
- str = str.toString()
527
+ str = str + ''
139
528
  switch (encoding || 'utf8') {
140
- case 'hex':
141
- ret = str.length / 2
142
- break
143
- case 'utf8':
144
- case 'utf-8':
145
- ret = utf8ToBytes(str).length
146
- break
147
529
  case 'ascii':
148
530
  case 'binary':
149
531
  case 'raw':
150
532
  ret = str.length
151
533
  break
152
- case 'base64':
153
- ret = base64ToBytes(str).length
154
- break
155
534
  case 'ucs2':
156
535
  case 'ucs-2':
157
536
  case 'utf16le':
158
537
  case 'utf-16le':
159
538
  ret = str.length * 2
160
539
  break
540
+ case 'hex':
541
+ ret = str.length >>> 1
542
+ break
543
+ case 'utf8':
544
+ case 'utf-8':
545
+ ret = utf8ToBytes(str).length
546
+ break
547
+ case 'base64':
548
+ ret = base64ToBytes(str).length
549
+ break
161
550
  default:
162
- throw new Error('Unknown encoding')
551
+ ret = str.length
163
552
  }
164
553
  return ret
165
554
  }
166
555
 
167
- Buffer.concat = function (list, totalLength) {
168
- assert(isArray(list), 'Usage: Buffer.concat(list[, length])')
556
+ // pre-set for values that may exist in the future
557
+ Buffer.prototype.length = undefined
558
+ Buffer.prototype.parent = undefined
169
559
 
170
- if (list.length === 0) {
171
- return new Buffer(0)
172
- } else if (list.length === 1) {
173
- return list[0]
174
- }
560
+ // toString(encoding, start=0, end=buffer.length)
561
+ Buffer.prototype.toString = function (encoding, start, end) {
562
+ var loweredCase = false
563
+
564
+ start = start >>> 0
565
+ end = end === undefined || end === Infinity ? this.length : end >>> 0
566
+
567
+ if (!encoding) encoding = 'utf8'
568
+ if (start < 0) start = 0
569
+ if (end > this.length) end = this.length
570
+ if (end <= start) return ''
571
+
572
+ while (true) {
573
+ switch (encoding) {
574
+ case 'hex':
575
+ return hexSlice(this, start, end)
576
+
577
+ case 'utf8':
578
+ case 'utf-8':
579
+ return utf8Slice(this, start, end)
580
+
581
+ case 'ascii':
582
+ return asciiSlice(this, start, end)
175
583
 
176
- var i
177
- if (totalLength === undefined) {
178
- totalLength = 0
179
- for (i = 0; i < list.length; i++) {
180
- totalLength += list[i].length
584
+ case 'binary':
585
+ return binarySlice(this, start, end)
586
+
587
+ case 'base64':
588
+ return base64Slice(this, start, end)
589
+
590
+ case 'ucs2':
591
+ case 'ucs-2':
592
+ case 'utf16le':
593
+ case 'utf-16le':
594
+ return utf16leSlice(this, start, end)
595
+
596
+ default:
597
+ if (loweredCase)
598
+ throw new TypeError('Unknown encoding: ' + encoding)
599
+ encoding = (encoding + '').toLowerCase()
600
+ loweredCase = true
181
601
  }
182
602
  }
603
+ }
183
604
 
184
- var buf = new Buffer(totalLength)
185
- var pos = 0
186
- for (i = 0; i < list.length; i++) {
187
- var item = list[i]
188
- item.copy(buf, pos)
189
- pos += item.length
190
- }
191
- return buf
605
+ Buffer.prototype.equals = function (b) {
606
+ if(!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
607
+ return Buffer.compare(this, b) === 0
192
608
  }
193
609
 
194
- Buffer.compare = function (a, b) {
195
- assert(Buffer.isBuffer(a) && Buffer.isBuffer(b), 'Arguments must be Buffers')
196
- var x = a.length
197
- var y = b.length
198
- for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}
199
- if (i !== len) {
200
- x = a[i]
201
- y = b[i]
202
- }
203
- if (x < y) {
204
- return -1
205
- }
206
- if (y < x) {
207
- return 1
610
+ Buffer.prototype.inspect = function () {
611
+ var str = ''
612
+ var max = exports.INSPECT_MAX_BYTES
613
+ if (this.length > 0) {
614
+ str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
615
+ if (this.length > max)
616
+ str += ' ... '
208
617
  }
209
- return 0
618
+ return '<Buffer ' + str + '>'
619
+ }
620
+
621
+ Buffer.prototype.compare = function (b) {
622
+ if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
623
+ return Buffer.compare(this, b)
624
+ }
625
+
626
+ // `get` will be removed in Node 0.13+
627
+ Buffer.prototype.get = function (offset) {
628
+ console.log('.get() is deprecated. Access using array indexes instead.')
629
+ return this.readUInt8(offset)
210
630
  }
211
631
 
212
- // BUFFER INSTANCE METHODS
213
- // =======================
632
+ // `set` will be removed in Node 0.13+
633
+ Buffer.prototype.set = function (v, offset) {
634
+ console.log('.set() is deprecated. Access using array indexes instead.')
635
+ return this.writeUInt8(v, offset)
636
+ }
214
637
 
215
638
  function hexWrite (buf, string, offset, length) {
216
639
  offset = Number(offset) || 0
@@ -226,14 +649,14 @@ function hexWrite (buf, string, offset, length) {
226
649
 
227
650
  // must be an even number of digits
228
651
  var strLen = string.length
229
- assert(strLen % 2 === 0, 'Invalid hex string')
652
+ if (strLen % 2 !== 0) throw new Error('Invalid hex string')
230
653
 
231
654
  if (length > strLen / 2) {
232
655
  length = strLen / 2
233
656
  }
234
657
  for (var i = 0; i < length; i++) {
235
658
  var byte = parseInt(string.substr(i * 2, 2), 16)
236
- assert(!isNaN(byte), 'Invalid hex string')
659
+ if (isNaN(byte)) throw new Error('Invalid hex string')
237
660
  buf[offset + i] = byte
238
661
  }
239
662
  return i
@@ -315,48 +738,7 @@ Buffer.prototype.write = function (string, offset, length, encoding) {
315
738
  ret = utf16leWrite(this, string, offset, length)
316
739
  break
317
740
  default:
318
- throw new Error('Unknown encoding')
319
- }
320
- return ret
321
- }
322
-
323
- Buffer.prototype.toString = function (encoding, start, end) {
324
- var self = this
325
-
326
- encoding = String(encoding || 'utf8').toLowerCase()
327
- start = Number(start) || 0
328
- end = (end === undefined) ? self.length : Number(end)
329
-
330
- // Fastpath empty strings
331
- if (end === start)
332
- return ''
333
-
334
- var ret
335
- switch (encoding) {
336
- case 'hex':
337
- ret = hexSlice(self, start, end)
338
- break
339
- case 'utf8':
340
- case 'utf-8':
341
- ret = utf8Slice(self, start, end)
342
- break
343
- case 'ascii':
344
- ret = asciiSlice(self, start, end)
345
- break
346
- case 'binary':
347
- ret = binarySlice(self, start, end)
348
- break
349
- case 'base64':
350
- ret = base64Slice(self, start, end)
351
- break
352
- case 'ucs2':
353
- case 'ucs-2':
354
- case 'utf16le':
355
- case 'utf-16le':
356
- ret = utf16leSlice(self, start, end)
357
- break
358
- default:
359
- throw new Error('Unknown encoding')
741
+ throw new TypeError('Unknown encoding: ' + encoding)
360
742
  }
361
743
  return ret
362
744
  }
@@ -368,52 +750,6 @@ Buffer.prototype.toJSON = function () {
368
750
  }
369
751
  }
370
752
 
371
- Buffer.prototype.equals = function (b) {
372
- assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
373
- return Buffer.compare(this, b) === 0
374
- }
375
-
376
- Buffer.prototype.compare = function (b) {
377
- assert(Buffer.isBuffer(b), 'Argument must be a Buffer')
378
- return Buffer.compare(this, b)
379
- }
380
-
381
- // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
382
- Buffer.prototype.copy = function (target, target_start, start, end) {
383
- var source = this
384
-
385
- if (!start) start = 0
386
- if (!end && end !== 0) end = this.length
387
- if (!target_start) target_start = 0
388
-
389
- // Copy 0 bytes; we're done
390
- if (end === start) return
391
- if (target.length === 0 || source.length === 0) return
392
-
393
- // Fatal error conditions
394
- assert(end >= start, 'sourceEnd < sourceStart')
395
- assert(target_start >= 0 && target_start < target.length,
396
- 'targetStart out of bounds')
397
- assert(start >= 0 && start < source.length, 'sourceStart out of bounds')
398
- assert(end >= 0 && end <= source.length, 'sourceEnd out of bounds')
399
-
400
- // Are we oob?
401
- if (end > this.length)
402
- end = this.length
403
- if (target.length - target_start < end - start)
404
- end = target.length - target_start + start
405
-
406
- var len = end - start
407
-
408
- if (len < 100 || !Buffer._useTypedArrays) {
409
- for (var i = 0; i < len; i++) {
410
- target[i + target_start] = this[i + start]
411
- }
412
- } else {
413
- target._set(this.subarray(start, start + len), target_start)
414
- }
415
- }
416
-
417
753
  function base64Slice (buf, start, end) {
418
754
  if (start === 0 && end === buf.length) {
419
755
  return base64.fromByteArray(buf)
@@ -499,7 +835,7 @@ Buffer.prototype.slice = function (start, end) {
499
835
  if (end < start)
500
836
  end = start
501
837
 
502
- if (Buffer._useTypedArrays) {
838
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
503
839
  return Buffer._augment(this.subarray(start, end))
504
840
  } else {
505
841
  var sliceLen = end - start
@@ -511,365 +847,275 @@ Buffer.prototype.slice = function (start, end) {
511
847
  }
512
848
  }
513
849
 
514
- // `get` will be removed in Node 0.13+
515
- Buffer.prototype.get = function (offset) {
516
- console.log('.get() is deprecated. Access using array indexes instead.')
517
- return this.readUInt8(offset)
518
- }
519
-
520
- // `set` will be removed in Node 0.13+
521
- Buffer.prototype.set = function (v, offset) {
522
- console.log('.set() is deprecated. Access using array indexes instead.')
523
- return this.writeUInt8(v, offset)
850
+ /*
851
+ * Need to make sure that buffer isn't trying to write out of bounds.
852
+ */
853
+ function checkOffset (offset, ext, length) {
854
+ if ((offset % 1) !== 0 || offset < 0)
855
+ throw new RangeError('offset is not uint')
856
+ if (offset + ext > length)
857
+ throw new RangeError('Trying to access beyond buffer length')
524
858
  }
525
859
 
526
860
  Buffer.prototype.readUInt8 = function (offset, noAssert) {
527
- if (!noAssert) {
528
- assert(offset !== undefined && offset !== null, 'missing offset')
529
- assert(offset < this.length, 'Trying to read beyond buffer length')
530
- }
531
-
532
- if (offset >= this.length)
533
- return
534
-
861
+ if (!noAssert)
862
+ checkOffset(offset, 1, this.length)
535
863
  return this[offset]
536
864
  }
537
865
 
538
- function readUInt16 (buf, offset, littleEndian, noAssert) {
539
- if (!noAssert) {
540
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
541
- assert(offset !== undefined && offset !== null, 'missing offset')
542
- assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
543
- }
544
-
545
- var len = buf.length
546
- if (offset >= len)
547
- return
548
-
549
- var val
550
- if (littleEndian) {
551
- val = buf[offset]
552
- if (offset + 1 < len)
553
- val |= buf[offset + 1] << 8
554
- } else {
555
- val = buf[offset] << 8
556
- if (offset + 1 < len)
557
- val |= buf[offset + 1]
558
- }
559
- return val
560
- }
561
-
562
866
  Buffer.prototype.readUInt16LE = function (offset, noAssert) {
563
- return readUInt16(this, offset, true, noAssert)
867
+ if (!noAssert)
868
+ checkOffset(offset, 2, this.length)
869
+ return this[offset] | (this[offset + 1] << 8)
564
870
  }
565
871
 
566
872
  Buffer.prototype.readUInt16BE = function (offset, noAssert) {
567
- return readUInt16(this, offset, false, noAssert)
568
- }
569
-
570
- function readUInt32 (buf, offset, littleEndian, noAssert) {
571
- if (!noAssert) {
572
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
573
- assert(offset !== undefined && offset !== null, 'missing offset')
574
- assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
575
- }
576
-
577
- var len = buf.length
578
- if (offset >= len)
579
- return
580
-
581
- var val
582
- if (littleEndian) {
583
- if (offset + 2 < len)
584
- val = buf[offset + 2] << 16
585
- if (offset + 1 < len)
586
- val |= buf[offset + 1] << 8
587
- val |= buf[offset]
588
- if (offset + 3 < len)
589
- val = val + (buf[offset + 3] << 24 >>> 0)
590
- } else {
591
- if (offset + 1 < len)
592
- val = buf[offset + 1] << 16
593
- if (offset + 2 < len)
594
- val |= buf[offset + 2] << 8
595
- if (offset + 3 < len)
596
- val |= buf[offset + 3]
597
- val = val + (buf[offset] << 24 >>> 0)
598
- }
599
- return val
873
+ if (!noAssert)
874
+ checkOffset(offset, 2, this.length)
875
+ return (this[offset] << 8) | this[offset + 1]
600
876
  }
601
877
 
602
878
  Buffer.prototype.readUInt32LE = function (offset, noAssert) {
603
- return readUInt32(this, offset, true, noAssert)
604
- }
879
+ if (!noAssert)
880
+ checkOffset(offset, 4, this.length)
605
881
 
606
- Buffer.prototype.readUInt32BE = function (offset, noAssert) {
607
- return readUInt32(this, offset, false, noAssert)
882
+ return ((this[offset]) |
883
+ (this[offset + 1] << 8) |
884
+ (this[offset + 2] << 16)) +
885
+ (this[offset + 3] * 0x1000000)
608
886
  }
609
887
 
610
- Buffer.prototype.readInt8 = function (offset, noAssert) {
611
- if (!noAssert) {
612
- assert(offset !== undefined && offset !== null,
613
- 'missing offset')
614
- assert(offset < this.length, 'Trying to read beyond buffer length')
615
- }
616
-
617
- if (offset >= this.length)
618
- return
888
+ Buffer.prototype.readUInt32BE = function (offset, noAssert) {
889
+ if (!noAssert)
890
+ checkOffset(offset, 4, this.length)
619
891
 
620
- var neg = this[offset] & 0x80
621
- if (neg)
622
- return (0xff - this[offset] + 1) * -1
623
- else
624
- return this[offset]
892
+ return (this[offset] * 0x1000000) +
893
+ ((this[offset + 1] << 16) |
894
+ (this[offset + 2] << 8) |
895
+ this[offset + 3])
625
896
  }
626
897
 
627
- function readInt16 (buf, offset, littleEndian, noAssert) {
628
- if (!noAssert) {
629
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
630
- assert(offset !== undefined && offset !== null, 'missing offset')
631
- assert(offset + 1 < buf.length, 'Trying to read beyond buffer length')
632
- }
633
-
634
- var len = buf.length
635
- if (offset >= len)
636
- return
637
-
638
- var val = readUInt16(buf, offset, littleEndian, true)
639
- var neg = val & 0x8000
640
- if (neg)
641
- return (0xffff - val + 1) * -1
642
- else
643
- return val
898
+ Buffer.prototype.readInt8 = function (offset, noAssert) {
899
+ if (!noAssert)
900
+ checkOffset(offset, 1, this.length)
901
+ if (!(this[offset] & 0x80))
902
+ return (this[offset])
903
+ return ((0xff - this[offset] + 1) * -1)
644
904
  }
645
905
 
646
906
  Buffer.prototype.readInt16LE = function (offset, noAssert) {
647
- return readInt16(this, offset, true, noAssert)
907
+ if (!noAssert)
908
+ checkOffset(offset, 2, this.length)
909
+ var val = this[offset] | (this[offset + 1] << 8)
910
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
648
911
  }
649
912
 
650
913
  Buffer.prototype.readInt16BE = function (offset, noAssert) {
651
- return readInt16(this, offset, false, noAssert)
652
- }
653
-
654
- function readInt32 (buf, offset, littleEndian, noAssert) {
655
- if (!noAssert) {
656
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
657
- assert(offset !== undefined && offset !== null, 'missing offset')
658
- assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
659
- }
660
-
661
- var len = buf.length
662
- if (offset >= len)
663
- return
664
-
665
- var val = readUInt32(buf, offset, littleEndian, true)
666
- var neg = val & 0x80000000
667
- if (neg)
668
- return (0xffffffff - val + 1) * -1
669
- else
670
- return val
914
+ if (!noAssert)
915
+ checkOffset(offset, 2, this.length)
916
+ var val = this[offset + 1] | (this[offset] << 8)
917
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
671
918
  }
672
919
 
673
920
  Buffer.prototype.readInt32LE = function (offset, noAssert) {
674
- return readInt32(this, offset, true, noAssert)
675
- }
921
+ if (!noAssert)
922
+ checkOffset(offset, 4, this.length)
676
923
 
677
- Buffer.prototype.readInt32BE = function (offset, noAssert) {
678
- return readInt32(this, offset, false, noAssert)
924
+ return (this[offset]) |
925
+ (this[offset + 1] << 8) |
926
+ (this[offset + 2] << 16) |
927
+ (this[offset + 3] << 24)
679
928
  }
680
929
 
681
- function readFloat (buf, offset, littleEndian, noAssert) {
682
- if (!noAssert) {
683
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
684
- assert(offset + 3 < buf.length, 'Trying to read beyond buffer length')
685
- }
930
+ Buffer.prototype.readInt32BE = function (offset, noAssert) {
931
+ if (!noAssert)
932
+ checkOffset(offset, 4, this.length)
686
933
 
687
- return ieee754.read(buf, offset, littleEndian, 23, 4)
934
+ return (this[offset] << 24) |
935
+ (this[offset + 1] << 16) |
936
+ (this[offset + 2] << 8) |
937
+ (this[offset + 3])
688
938
  }
689
939
 
690
940
  Buffer.prototype.readFloatLE = function (offset, noAssert) {
691
- return readFloat(this, offset, true, noAssert)
941
+ if (!noAssert)
942
+ checkOffset(offset, 4, this.length)
943
+ return ieee754.read(this, offset, true, 23, 4)
692
944
  }
693
945
 
694
946
  Buffer.prototype.readFloatBE = function (offset, noAssert) {
695
- return readFloat(this, offset, false, noAssert)
696
- }
697
-
698
- function readDouble (buf, offset, littleEndian, noAssert) {
699
- if (!noAssert) {
700
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
701
- assert(offset + 7 < buf.length, 'Trying to read beyond buffer length')
702
- }
703
-
704
- return ieee754.read(buf, offset, littleEndian, 52, 8)
947
+ if (!noAssert)
948
+ checkOffset(offset, 4, this.length)
949
+ return ieee754.read(this, offset, false, 23, 4)
705
950
  }
706
951
 
707
952
  Buffer.prototype.readDoubleLE = function (offset, noAssert) {
708
- return readDouble(this, offset, true, noAssert)
953
+ if (!noAssert)
954
+ checkOffset(offset, 8, this.length)
955
+ return ieee754.read(this, offset, true, 52, 8)
709
956
  }
710
957
 
711
958
  Buffer.prototype.readDoubleBE = function (offset, noAssert) {
712
- return readDouble(this, offset, false, noAssert)
959
+ if (!noAssert)
960
+ checkOffset(offset, 8, this.length)
961
+ return ieee754.read(this, offset, false, 52, 8)
713
962
  }
714
963
 
715
- Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
716
- if (!noAssert) {
717
- assert(value !== undefined && value !== null, 'missing value')
718
- assert(offset !== undefined && offset !== null, 'missing offset')
719
- assert(offset < this.length, 'trying to write beyond buffer length')
720
- verifuint(value, 0xff)
721
- }
722
-
723
- if (offset >= this.length) return
964
+ function checkInt (buf, value, offset, ext, max, min) {
965
+ if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
966
+ if (value > max || value < min) throw new TypeError('value is out of bounds')
967
+ if (offset + ext > buf.length) throw new TypeError('index out of range')
968
+ }
724
969
 
970
+ Buffer.prototype.writeUInt8 = function (value, offset, noAssert) {
971
+ value = +value
972
+ offset = offset >>> 0
973
+ if (!noAssert)
974
+ checkInt(this, value, offset, 1, 0xff, 0)
975
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
725
976
  this[offset] = value
726
977
  return offset + 1
727
978
  }
728
979
 
729
- function writeUInt16 (buf, value, offset, littleEndian, noAssert) {
730
- if (!noAssert) {
731
- assert(value !== undefined && value !== null, 'missing value')
732
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
733
- assert(offset !== undefined && offset !== null, 'missing offset')
734
- assert(offset + 1 < buf.length, 'trying to write beyond buffer length')
735
- verifuint(value, 0xffff)
736
- }
737
-
738
- var len = buf.length
739
- if (offset >= len)
740
- return
741
-
742
- for (var i = 0, j = Math.min(len - offset, 2); i < j; i++) {
743
- buf[offset + i] =
744
- (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
745
- (littleEndian ? i : 1 - i) * 8
980
+ function objectWriteUInt16 (buf, value, offset, littleEndian) {
981
+ if (value < 0) value = 0xffff + value + 1
982
+ for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
983
+ buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
984
+ (littleEndian ? i : 1 - i) * 8
746
985
  }
747
- return offset + 2
748
986
  }
749
987
 
750
988
  Buffer.prototype.writeUInt16LE = function (value, offset, noAssert) {
751
- return writeUInt16(this, value, offset, true, noAssert)
989
+ value = +value
990
+ offset = offset >>> 0
991
+ if (!noAssert)
992
+ checkInt(this, value, offset, 2, 0xffff, 0)
993
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
994
+ this[offset] = value
995
+ this[offset + 1] = (value >>> 8)
996
+ } else objectWriteUInt16(this, value, offset, true)
997
+ return offset + 2
752
998
  }
753
999
 
754
1000
  Buffer.prototype.writeUInt16BE = function (value, offset, noAssert) {
755
- return writeUInt16(this, value, offset, false, noAssert)
1001
+ value = +value
1002
+ offset = offset >>> 0
1003
+ if (!noAssert)
1004
+ checkInt(this, value, offset, 2, 0xffff, 0)
1005
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1006
+ this[offset] = (value >>> 8)
1007
+ this[offset + 1] = value
1008
+ } else objectWriteUInt16(this, value, offset, false)
1009
+ return offset + 2
756
1010
  }
757
1011
 
758
- function writeUInt32 (buf, value, offset, littleEndian, noAssert) {
759
- if (!noAssert) {
760
- assert(value !== undefined && value !== null, 'missing value')
761
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
762
- assert(offset !== undefined && offset !== null, 'missing offset')
763
- assert(offset + 3 < buf.length, 'trying to write beyond buffer length')
764
- verifuint(value, 0xffffffff)
765
- }
766
-
767
- var len = buf.length
768
- if (offset >= len)
769
- return
770
-
771
- for (var i = 0, j = Math.min(len - offset, 4); i < j; i++) {
772
- buf[offset + i] =
773
- (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
1012
+ function objectWriteUInt32 (buf, value, offset, littleEndian) {
1013
+ if (value < 0) value = 0xffffffff + value + 1
1014
+ for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
1015
+ buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
774
1016
  }
775
- return offset + 4
776
1017
  }
777
1018
 
778
1019
  Buffer.prototype.writeUInt32LE = function (value, offset, noAssert) {
779
- return writeUInt32(this, value, offset, true, noAssert)
1020
+ value = +value
1021
+ offset = offset >>> 0
1022
+ if (!noAssert)
1023
+ checkInt(this, value, offset, 4, 0xffffffff, 0)
1024
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1025
+ this[offset + 3] = (value >>> 24)
1026
+ this[offset + 2] = (value >>> 16)
1027
+ this[offset + 1] = (value >>> 8)
1028
+ this[offset] = value
1029
+ } else objectWriteUInt32(this, value, offset, true)
1030
+ return offset + 4
780
1031
  }
781
1032
 
782
1033
  Buffer.prototype.writeUInt32BE = function (value, offset, noAssert) {
783
- return writeUInt32(this, value, offset, false, noAssert)
1034
+ value = +value
1035
+ offset = offset >>> 0
1036
+ if (!noAssert)
1037
+ checkInt(this, value, offset, 4, 0xffffffff, 0)
1038
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1039
+ this[offset] = (value >>> 24)
1040
+ this[offset + 1] = (value >>> 16)
1041
+ this[offset + 2] = (value >>> 8)
1042
+ this[offset + 3] = value
1043
+ } else objectWriteUInt32(this, value, offset, false)
1044
+ return offset + 4
784
1045
  }
785
1046
 
786
1047
  Buffer.prototype.writeInt8 = function (value, offset, noAssert) {
787
- if (!noAssert) {
788
- assert(value !== undefined && value !== null, 'missing value')
789
- assert(offset !== undefined && offset !== null, 'missing offset')
790
- assert(offset < this.length, 'Trying to write beyond buffer length')
791
- verifsint(value, 0x7f, -0x80)
792
- }
793
-
794
- if (offset >= this.length)
795
- return
796
-
797
- if (value >= 0)
798
- this.writeUInt8(value, offset, noAssert)
799
- else
800
- this.writeUInt8(0xff + value + 1, offset, noAssert)
1048
+ value = +value
1049
+ offset = offset >>> 0
1050
+ if (!noAssert)
1051
+ checkInt(this, value, offset, 1, 0x7f, -0x80)
1052
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1053
+ if (value < 0) value = 0xff + value + 1
1054
+ this[offset] = value
801
1055
  return offset + 1
802
1056
  }
803
1057
 
804
- function writeInt16 (buf, value, offset, littleEndian, noAssert) {
805
- if (!noAssert) {
806
- assert(value !== undefined && value !== null, 'missing value')
807
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
808
- assert(offset !== undefined && offset !== null, 'missing offset')
809
- assert(offset + 1 < buf.length, 'Trying to write beyond buffer length')
810
- verifsint(value, 0x7fff, -0x8000)
811
- }
812
-
813
- var len = buf.length
814
- if (offset >= len)
815
- return
816
-
817
- if (value >= 0)
818
- writeUInt16(buf, value, offset, littleEndian, noAssert)
819
- else
820
- writeUInt16(buf, 0xffff + value + 1, offset, littleEndian, noAssert)
821
- return offset + 2
822
- }
823
-
824
1058
  Buffer.prototype.writeInt16LE = function (value, offset, noAssert) {
825
- return writeInt16(this, value, offset, true, noAssert)
1059
+ value = +value
1060
+ offset = offset >>> 0
1061
+ if (!noAssert)
1062
+ checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1063
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1064
+ this[offset] = value
1065
+ this[offset + 1] = (value >>> 8)
1066
+ } else objectWriteUInt16(this, value, offset, true)
1067
+ return offset + 2
826
1068
  }
827
1069
 
828
1070
  Buffer.prototype.writeInt16BE = function (value, offset, noAssert) {
829
- return writeInt16(this, value, offset, false, noAssert)
1071
+ value = +value
1072
+ offset = offset >>> 0
1073
+ if (!noAssert)
1074
+ checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1075
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1076
+ this[offset] = (value >>> 8)
1077
+ this[offset + 1] = value
1078
+ } else objectWriteUInt16(this, value, offset, false)
1079
+ return offset + 2
830
1080
  }
831
1081
 
832
- function writeInt32 (buf, value, offset, littleEndian, noAssert) {
833
- if (!noAssert) {
834
- assert(value !== undefined && value !== null, 'missing value')
835
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
836
- assert(offset !== undefined && offset !== null, 'missing offset')
837
- assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
838
- verifsint(value, 0x7fffffff, -0x80000000)
839
- }
840
-
841
- var len = buf.length
842
- if (offset >= len)
843
- return
844
-
845
- if (value >= 0)
846
- writeUInt32(buf, value, offset, littleEndian, noAssert)
847
- else
848
- writeUInt32(buf, 0xffffffff + value + 1, offset, littleEndian, noAssert)
1082
+ Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
1083
+ value = +value
1084
+ offset = offset >>> 0
1085
+ if (!noAssert)
1086
+ checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1087
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1088
+ this[offset] = value
1089
+ this[offset + 1] = (value >>> 8)
1090
+ this[offset + 2] = (value >>> 16)
1091
+ this[offset + 3] = (value >>> 24)
1092
+ } else objectWriteUInt32(this, value, offset, true)
849
1093
  return offset + 4
850
1094
  }
851
1095
 
852
- Buffer.prototype.writeInt32LE = function (value, offset, noAssert) {
853
- return writeInt32(this, value, offset, true, noAssert)
1096
+ Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
1097
+ value = +value
1098
+ offset = offset >>> 0
1099
+ if (!noAssert)
1100
+ checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1101
+ if (value < 0) value = 0xffffffff + value + 1
1102
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
1103
+ this[offset] = (value >>> 24)
1104
+ this[offset + 1] = (value >>> 16)
1105
+ this[offset + 2] = (value >>> 8)
1106
+ this[offset + 3] = value
1107
+ } else objectWriteUInt32(this, value, offset, false)
1108
+ return offset + 4
854
1109
  }
855
1110
 
856
- Buffer.prototype.writeInt32BE = function (value, offset, noAssert) {
857
- return writeInt32(this, value, offset, false, noAssert)
1111
+ function checkIEEE754 (buf, value, offset, ext, max, min) {
1112
+ if (value > max || value < min) throw new TypeError('value is out of bounds')
1113
+ if (offset + ext > buf.length) throw new TypeError('index out of range')
858
1114
  }
859
1115
 
860
1116
  function writeFloat (buf, value, offset, littleEndian, noAssert) {
861
- if (!noAssert) {
862
- assert(value !== undefined && value !== null, 'missing value')
863
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
864
- assert(offset !== undefined && offset !== null, 'missing offset')
865
- assert(offset + 3 < buf.length, 'Trying to write beyond buffer length')
866
- verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38)
867
- }
868
-
869
- var len = buf.length
870
- if (offset >= len)
871
- return
872
-
1117
+ if (!noAssert)
1118
+ checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
873
1119
  ieee754.write(buf, value, offset, littleEndian, 23, 4)
874
1120
  return offset + 4
875
1121
  }
@@ -883,19 +1129,8 @@ Buffer.prototype.writeFloatBE = function (value, offset, noAssert) {
883
1129
  }
884
1130
 
885
1131
  function writeDouble (buf, value, offset, littleEndian, noAssert) {
886
- if (!noAssert) {
887
- assert(value !== undefined && value !== null, 'missing value')
888
- assert(typeof littleEndian === 'boolean', 'missing or invalid endian')
889
- assert(offset !== undefined && offset !== null, 'missing offset')
890
- assert(offset + 7 < buf.length,
891
- 'Trying to write beyond buffer length')
892
- verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308)
893
- }
894
-
895
- var len = buf.length
896
- if (offset >= len)
897
- return
898
-
1132
+ if (!noAssert)
1133
+ checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
899
1134
  ieee754.write(buf, value, offset, littleEndian, 52, 8)
900
1135
  return offset + 8
901
1136
  }
@@ -908,20 +1143,56 @@ Buffer.prototype.writeDoubleBE = function (value, offset, noAssert) {
908
1143
  return writeDouble(this, value, offset, false, noAssert)
909
1144
  }
910
1145
 
1146
+ // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
1147
+ Buffer.prototype.copy = function (target, target_start, start, end) {
1148
+ var source = this
1149
+
1150
+ if (!start) start = 0
1151
+ if (!end && end !== 0) end = this.length
1152
+ if (!target_start) target_start = 0
1153
+
1154
+ // Copy 0 bytes; we're done
1155
+ if (end === start) return
1156
+ if (target.length === 0 || source.length === 0) return
1157
+
1158
+ // Fatal error conditions
1159
+ if (end < start) throw new TypeError('sourceEnd < sourceStart')
1160
+ if (target_start < 0 || target_start >= target.length)
1161
+ throw new TypeError('targetStart out of bounds')
1162
+ if (start < 0 || start >= source.length) throw new TypeError('sourceStart out of bounds')
1163
+ if (end < 0 || end > source.length) throw new TypeError('sourceEnd out of bounds')
1164
+
1165
+ // Are we oob?
1166
+ if (end > this.length)
1167
+ end = this.length
1168
+ if (target.length - target_start < end - start)
1169
+ end = target.length - target_start + start
1170
+
1171
+ var len = end - start
1172
+
1173
+ if (len < 100 || !Buffer.TYPED_ARRAY_SUPPORT) {
1174
+ for (var i = 0; i < len; i++) {
1175
+ target[i + target_start] = this[i + start]
1176
+ }
1177
+ } else {
1178
+ target._set(this.subarray(start, start + len), target_start)
1179
+ }
1180
+ }
1181
+
911
1182
  // fill(value, start=0, end=buffer.length)
912
1183
  Buffer.prototype.fill = function (value, start, end) {
913
1184
  if (!value) value = 0
914
1185
  if (!start) start = 0
915
1186
  if (!end) end = this.length
916
1187
 
917
- assert(end >= start, 'end < start')
1188
+ if (end < start) throw new TypeError('end < start')
918
1189
 
919
1190
  // Fill 0 bytes; we're done
920
1191
  if (end === start) return
921
1192
  if (this.length === 0) return
922
1193
 
923
- assert(start >= 0 && start < this.length, 'start out of bounds')
924
- assert(end >= 0 && end <= this.length, 'end out of bounds')
1194
+ if (start < 0 || start >= this.length) throw new TypeError('start out of bounds')
1195
+ if (end < 0 || end > this.length) throw new TypeError('end out of bounds')
925
1196
 
926
1197
  var i
927
1198
  if (typeof value === 'number') {
@@ -931,25 +1202,12 @@ Buffer.prototype.fill = function (value, start, end) {
931
1202
  } else {
932
1203
  var bytes = utf8ToBytes(value.toString())
933
1204
  var len = bytes.length
934
- for (i = start; i < end; i++) {
935
- this[i] = bytes[i % len]
936
- }
937
- }
938
-
939
- return this
940
- }
941
-
942
- Buffer.prototype.inspect = function () {
943
- var out = []
944
- var len = this.length
945
- for (var i = 0; i < len; i++) {
946
- out[i] = toHex(this[i])
947
- if (i === exports.INSPECT_MAX_BYTES) {
948
- out[i + 1] = '...'
949
- break
1205
+ for (i = start; i < end; i++) {
1206
+ this[i] = bytes[i % len]
950
1207
  }
951
1208
  }
952
- return '<Buffer ' + out.join(' ') + '>'
1209
+
1210
+ return this
953
1211
  }
954
1212
 
955
1213
  /**
@@ -958,7 +1216,7 @@ Buffer.prototype.inspect = function () {
958
1216
  */
959
1217
  Buffer.prototype.toArrayBuffer = function () {
960
1218
  if (typeof Uint8Array !== 'undefined') {
961
- if (Buffer._useTypedArrays) {
1219
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
962
1220
  return (new Buffer(this)).buffer
963
1221
  } else {
964
1222
  var buf = new Uint8Array(this.length)
@@ -968,7 +1226,7 @@ Buffer.prototype.toArrayBuffer = function () {
968
1226
  return buf.buffer
969
1227
  }
970
1228
  } else {
971
- throw new Error('Buffer.toArrayBuffer not supported in this browser')
1229
+ throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
972
1230
  }
973
1231
  }
974
1232
 
@@ -1051,12 +1309,6 @@ function stringtrim (str) {
1051
1309
  return str.replace(/^\s+|\s+$/g, '')
1052
1310
  }
1053
1311
 
1054
- function isArray (subject) {
1055
- return (Array.isArray || function (subject) {
1056
- return Object.prototype.toString.call(subject) === '[object Array]'
1057
- })(subject)
1058
- }
1059
-
1060
1312
  function isArrayish (subject) {
1061
1313
  return isArray(subject) || Buffer.isBuffer(subject) ||
1062
1314
  subject && typeof subject === 'object' &&
@@ -1130,36 +1382,7 @@ function decodeUtf8Char (str) {
1130
1382
  }
1131
1383
  }
1132
1384
 
1133
- /*
1134
- * We have to make sure that the value is a valid integer. This means that it
1135
- * is non-negative. It has no fractional component and that it does not
1136
- * exceed the maximum allowed value.
1137
- */
1138
- function verifuint (value, max) {
1139
- assert(typeof value === 'number', 'cannot write a non-number as a number')
1140
- assert(value >= 0, 'specified a negative value for writing an unsigned value')
1141
- assert(value <= max, 'value is larger than maximum value for type')
1142
- assert(Math.floor(value) === value, 'value has a fractional component')
1143
- }
1144
-
1145
- function verifsint (value, max, min) {
1146
- assert(typeof value === 'number', 'cannot write a non-number as a number')
1147
- assert(value <= max, 'value larger than maximum allowed value')
1148
- assert(value >= min, 'value smaller than minimum allowed value')
1149
- assert(Math.floor(value) === value, 'value has a fractional component')
1150
- }
1151
-
1152
- function verifIEEE754 (value, max, min) {
1153
- assert(typeof value === 'number', 'cannot write a non-number as a number')
1154
- assert(value <= max, 'value larger than maximum allowed value')
1155
- assert(value >= min, 'value smaller than minimum allowed value')
1156
- }
1157
-
1158
- function assert (test, message) {
1159
- if (!test) throw new Error(message || 'Failed assertion')
1160
- }
1161
-
1162
- },{"base64-js":2,"ieee754":3}],2:[function(_dereq_,module,exports){
1385
+ },{"base64-js":3,"ieee754":4,"is-array":5}],3:[function(_dereq_,module,exports){
1163
1386
  var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
1164
1387
 
1165
1388
  ;(function (exports) {
@@ -1281,7 +1504,7 @@ var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
1281
1504
  exports.fromByteArray = uint8ToBase64
1282
1505
  }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
1283
1506
 
1284
- },{}],3:[function(_dereq_,module,exports){
1507
+ },{}],4:[function(_dereq_,module,exports){
1285
1508
  exports.read = function(buffer, offset, isLE, mLen, nBytes) {
1286
1509
  var e, m,
1287
1510
  eLen = nBytes * 8 - mLen - 1,
@@ -1367,7 +1590,42 @@ exports.write = function(buffer, value, offset, isLE, mLen, nBytes) {
1367
1590
  buffer[offset + i - d] |= s * 128;
1368
1591
  };
1369
1592
 
1370
- },{}],4:[function(_dereq_,module,exports){
1593
+ },{}],5:[function(_dereq_,module,exports){
1594
+
1595
+ /**
1596
+ * isArray
1597
+ */
1598
+
1599
+ var isArray = Array.isArray;
1600
+
1601
+ /**
1602
+ * toString
1603
+ */
1604
+
1605
+ var str = Object.prototype.toString;
1606
+
1607
+ /**
1608
+ * Whether or not the given `val`
1609
+ * is an array.
1610
+ *
1611
+ * example:
1612
+ *
1613
+ * isArray([]);
1614
+ * // > true
1615
+ * isArray(arguments);
1616
+ * // > false
1617
+ * isArray('');
1618
+ * // > false
1619
+ *
1620
+ * @param {mixed} val
1621
+ * @return {bool}
1622
+ */
1623
+
1624
+ module.exports = isArray || function (val) {
1625
+ return !! val && '[object Array]' == str.call(val);
1626
+ };
1627
+
1628
+ },{}],6:[function(_dereq_,module,exports){
1371
1629
  (function (process){
1372
1630
  // Copyright Joyent, Inc. and other Node contributors.
1373
1631
  //
@@ -1594,8 +1852,8 @@ var substr = 'ab'.substr(-1) === 'b'
1594
1852
  }
1595
1853
  ;
1596
1854
 
1597
- }).call(this,_dereq_("FWaASH"))
1598
- },{"FWaASH":5}],5:[function(_dereq_,module,exports){
1855
+ }).call(this,_dereq_('_process'))
1856
+ },{"_process":7}],7:[function(_dereq_,module,exports){
1599
1857
  // shim for using process in browser
1600
1858
 
1601
1859
  var process = module.exports = {};
@@ -1603,6 +1861,8 @@ var process = module.exports = {};
1603
1861
  process.nextTick = (function () {
1604
1862
  var canSetImmediate = typeof window !== 'undefined'
1605
1863
  && window.setImmediate;
1864
+ var canMutationObserver = typeof window !== 'undefined'
1865
+ && window.MutationObserver;
1606
1866
  var canPost = typeof window !== 'undefined'
1607
1867
  && window.postMessage && window.addEventListener
1608
1868
  ;
@@ -1611,8 +1871,29 @@ process.nextTick = (function () {
1611
1871
  return function (f) { return window.setImmediate(f) };
1612
1872
  }
1613
1873
 
1874
+ var queue = [];
1875
+
1876
+ if (canMutationObserver) {
1877
+ var hiddenDiv = document.createElement("div");
1878
+ var observer = new MutationObserver(function () {
1879
+ var queueList = queue.slice();
1880
+ queue.length = 0;
1881
+ queueList.forEach(function (fn) {
1882
+ fn();
1883
+ });
1884
+ });
1885
+
1886
+ observer.observe(hiddenDiv, { attributes: true });
1887
+
1888
+ return function nextTick(fn) {
1889
+ if (!queue.length) {
1890
+ hiddenDiv.setAttribute('yes', 'no');
1891
+ }
1892
+ queue.push(fn);
1893
+ };
1894
+ }
1895
+
1614
1896
  if (canPost) {
1615
- var queue = [];
1616
1897
  window.addEventListener('message', function (ev) {
1617
1898
  var source = ev.source;
1618
1899
  if ((source === window || source === null) && ev.data === 'process-tick') {
@@ -1652,7 +1933,7 @@ process.emit = noop;
1652
1933
 
1653
1934
  process.binding = function (name) {
1654
1935
  throw new Error('process.binding is not supported');
1655
- }
1936
+ };
1656
1937
 
1657
1938
  // TODO(shtylman)
1658
1939
  process.cwd = function () { return '/' };
@@ -1660,7 +1941,7 @@ process.chdir = function (dir) {
1660
1941
  throw new Error('process.chdir is not supported');
1661
1942
  };
1662
1943
 
1663
- },{}],6:[function(_dereq_,module,exports){
1944
+ },{}],8:[function(_dereq_,module,exports){
1664
1945
  /*
1665
1946
  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>
1666
1947
  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
@@ -2106,14 +2387,16 @@ parseYieldExpression: true
2106
2387
  }
2107
2388
  } else if (blockComment) {
2108
2389
  if (isLineTerminator(ch)) {
2109
- if (ch === 13 && source.charCodeAt(index + 1) === 10) {
2390
+ if (ch === 13) {
2110
2391
  ++index;
2111
2392
  }
2112
- ++lineNumber;
2113
- ++index;
2114
- lineStart = index;
2115
- if (index >= length) {
2116
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
2393
+ if (ch !== 13 || source.charCodeAt(index) === 10) {
2394
+ ++lineNumber;
2395
+ ++index;
2396
+ lineStart = index;
2397
+ if (index >= length) {
2398
+ throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
2399
+ }
2117
2400
  }
2118
2401
  } else {
2119
2402
  ch = source.charCodeAt(index++);
@@ -2769,6 +3052,7 @@ parseYieldExpression: true
2769
3052
  if (ch === '\r' && source[index] === '\n') {
2770
3053
  ++index;
2771
3054
  }
3055
+ lineStart = index;
2772
3056
  }
2773
3057
  } else if (isLineTerminator(ch.charCodeAt(0))) {
2774
3058
  break;
@@ -2884,12 +3168,14 @@ parseYieldExpression: true
2884
3168
  if (ch === '\r' && source[index] === '\n') {
2885
3169
  ++index;
2886
3170
  }
3171
+ lineStart = index;
2887
3172
  }
2888
3173
  } else if (isLineTerminator(ch.charCodeAt(0))) {
2889
3174
  ++lineNumber;
2890
3175
  if (ch === '\r' && source[index] === '\n') {
2891
3176
  ++index;
2892
3177
  }
3178
+ lineStart = index;
2893
3179
  cooked += '\n';
2894
3180
  } else {
2895
3181
  cooked += ch;
@@ -3240,6 +3526,57 @@ parseYieldExpression: true
3240
3526
  return {offset: index, line: lineNumber, col: index - lineStart};
3241
3527
  }
3242
3528
 
3529
+ function processComment(node) {
3530
+ var lastChild,
3531
+ trailingComments,
3532
+ bottomRight = extra.bottomRightStack,
3533
+ last = bottomRight[bottomRight.length - 1];
3534
+
3535
+ if (node.type === Syntax.Program) {
3536
+ if (node.body.length > 0) {
3537
+ return;
3538
+ }
3539
+ }
3540
+
3541
+ if (extra.trailingComments.length > 0) {
3542
+ if (extra.trailingComments[0].range[0] >= node.range[1]) {
3543
+ trailingComments = extra.trailingComments;
3544
+ extra.trailingComments = [];
3545
+ } else {
3546
+ extra.trailingComments.length = 0;
3547
+ }
3548
+ } else {
3549
+ if (last && last.trailingComments && last.trailingComments[0].range[0] >= node.range[1]) {
3550
+ trailingComments = last.trailingComments;
3551
+ delete last.trailingComments;
3552
+ }
3553
+ }
3554
+
3555
+ // Eating the stack.
3556
+ if (last) {
3557
+ while (last && last.range[0] >= node.range[0]) {
3558
+ lastChild = last;
3559
+ last = bottomRight.pop();
3560
+ }
3561
+ }
3562
+
3563
+ if (lastChild) {
3564
+ if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
3565
+ node.leadingComments = lastChild.leadingComments;
3566
+ delete lastChild.leadingComments;
3567
+ }
3568
+ } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {
3569
+ node.leadingComments = extra.leadingComments;
3570
+ extra.leadingComments = [];
3571
+ }
3572
+
3573
+ if (trailingComments) {
3574
+ node.trailingComments = trailingComments;
3575
+ }
3576
+
3577
+ bottomRight.push(node);
3578
+ }
3579
+
3243
3580
  function markerApply(marker, node) {
3244
3581
  if (extra.range) {
3245
3582
  node.range = [marker.offset, index];
@@ -3257,6 +3594,9 @@ parseYieldExpression: true
3257
3594
  };
3258
3595
  node = delegate.postProcess(node);
3259
3596
  }
3597
+ if (extra.attachComment) {
3598
+ processComment(node);
3599
+ }
3260
3600
  return node;
3261
3601
  }
3262
3602
 
@@ -3466,10 +3806,11 @@ parseYieldExpression: true
3466
3806
  };
3467
3807
  },
3468
3808
 
3469
- createObjectTypeAnnotation: function (properties) {
3809
+ createObjectTypeAnnotation: function (properties, nullable) {
3470
3810
  return {
3471
3811
  type: Syntax.ObjectTypeAnnotation,
3472
- properties: properties
3812
+ properties: properties,
3813
+ nullable: nullable
3473
3814
  };
3474
3815
  },
3475
3816
 
@@ -3492,7 +3833,7 @@ parseYieldExpression: true
3492
3833
  return {
3493
3834
  type: Syntax.XJSAttribute,
3494
3835
  name: name,
3495
- value: value
3836
+ value: value || null
3496
3837
  };
3497
3838
  },
3498
3839
 
@@ -4066,7 +4407,8 @@ parseYieldExpression: true
4066
4407
  }
4067
4408
 
4068
4409
  function consumeSemicolon() {
4069
- var line;
4410
+ var line, oldIndex = index, oldLineNumber = lineNumber,
4411
+ oldLineStart = lineStart, oldLookahead = lookahead;
4070
4412
 
4071
4413
  // Catch the very common case first: immediately a semicolon (char #59).
4072
4414
  if (source.charCodeAt(index) === 59) {
@@ -4077,6 +4419,10 @@ parseYieldExpression: true
4077
4419
  line = lineNumber;
4078
4420
  skipComment();
4079
4421
  if (lineNumber !== line) {
4422
+ index = oldIndex;
4423
+ lineNumber = oldLineNumber;
4424
+ lineStart = oldLineStart;
4425
+ lookahead = oldLookahead;
4080
4426
  return;
4081
4427
  }
4082
4428
 
@@ -5172,7 +5518,7 @@ parseYieldExpression: true
5172
5518
 
5173
5519
  // 12.2 Variable Statement
5174
5520
 
5175
- function parseObjectTypeAnnotation() {
5521
+ function parseObjectTypeAnnotation(nullable) {
5176
5522
  var isMethod, marker, properties = [], property, propertyKey,
5177
5523
  propertyTypeAnnotation;
5178
5524
 
@@ -5202,7 +5548,7 @@ parseYieldExpression: true
5202
5548
 
5203
5549
  expect('}');
5204
5550
 
5205
- return delegate.createObjectTypeAnnotation(properties);
5551
+ return delegate.createObjectTypeAnnotation(properties, nullable);
5206
5552
  }
5207
5553
 
5208
5554
  function parseVoidTypeAnnotation() {
@@ -5237,15 +5583,15 @@ parseYieldExpression: true
5237
5583
  expect(':');
5238
5584
  }
5239
5585
 
5240
- if (match('{')) {
5241
- return markerApply(marker, parseObjectTypeAnnotation());
5242
- }
5243
-
5244
5586
  if (match('?')) {
5245
5587
  lex();
5246
5588
  nullable = true;
5247
5589
  }
5248
5590
 
5591
+ if (match('{')) {
5592
+ return markerApply(marker, parseObjectTypeAnnotation(nullable));
5593
+ }
5594
+
5249
5595
  if (lookahead.type === Token.Identifier) {
5250
5596
  typeIdentifier = parseVariableIdentifier();
5251
5597
  if (match('<')) {
@@ -5273,7 +5619,7 @@ parseYieldExpression: true
5273
5619
  if (!matchKeyword('void')) {
5274
5620
  throwUnexpected(lookahead);
5275
5621
  } else {
5276
- return parseVoidTypeAnnotation();
5622
+ return markerApply(marker, parseVoidTypeAnnotation());
5277
5623
  }
5278
5624
  }
5279
5625
 
@@ -6833,6 +7179,10 @@ parseYieldExpression: true
6833
7179
  comment.loc = loc;
6834
7180
  }
6835
7181
  extra.comments.push(comment);
7182
+ if (extra.attachComment) {
7183
+ extra.leadingComments.push(comment);
7184
+ extra.trailingComments.push(comment);
7185
+ }
6836
7186
  }
6837
7187
 
6838
7188
  function scanComment() {
@@ -6873,17 +7223,18 @@ parseYieldExpression: true
6873
7223
  }
6874
7224
  } else if (blockComment) {
6875
7225
  if (isLineTerminator(ch.charCodeAt(0))) {
6876
- if (ch === '\r' && source[index + 1] === '\n') {
7226
+ if (ch === '\r') {
6877
7227
  ++index;
6878
- comment += '\r\n';
6879
- } else {
6880
- comment += ch;
7228
+ comment += '\r';
6881
7229
  }
6882
- ++lineNumber;
6883
- ++index;
6884
- lineStart = index;
6885
- if (index >= length) {
6886
- throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
7230
+ if (ch !== '\r' || source[index] === '\n') {
7231
+ comment += source[index];
7232
+ ++lineNumber;
7233
+ ++index;
7234
+ lineStart = index;
7235
+ if (index >= length) {
7236
+ throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
7237
+ }
6887
7238
  }
6888
7239
  } else {
6889
7240
  ch = source[index++];
@@ -7296,6 +7647,11 @@ parseYieldExpression: true
7296
7647
  str += scanXJSEntity();
7297
7648
  } else {
7298
7649
  index++;
7650
+ if (ch === '\r' && source[index] === '\n') {
7651
+ str += ch;
7652
+ ch = source[index];
7653
+ index++;
7654
+ }
7299
7655
  if (isLineTerminator(ch.charCodeAt(0))) {
7300
7656
  ++lineNumber;
7301
7657
  lineStart = index;
@@ -7564,7 +7920,7 @@ parseYieldExpression: true
7564
7920
  }
7565
7921
 
7566
7922
  function parseXJSElement() {
7567
- var openingElement, closingElement, children = [], origInXJSChild, origInXJSTag, marker = markerCreate();
7923
+ var openingElement, closingElement = null, children = [], origInXJSChild, origInXJSTag, marker = markerCreate();
7568
7924
 
7569
7925
  origInXJSChild = state.inXJSChild;
7570
7926
  origInXJSTag = state.inXJSTag;
@@ -7882,6 +8238,7 @@ parseYieldExpression: true
7882
8238
  if (typeof options !== 'undefined') {
7883
8239
  extra.range = (typeof options.range === 'boolean') && options.range;
7884
8240
  extra.loc = (typeof options.loc === 'boolean') && options.loc;
8241
+ extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
7885
8242
 
7886
8243
  if (extra.loc && options.source !== null && options.source !== undefined) {
7887
8244
  delegate = extend(delegate, {
@@ -7901,6 +8258,13 @@ parseYieldExpression: true
7901
8258
  if (typeof options.tolerant === 'boolean' && options.tolerant) {
7902
8259
  extra.errors = [];
7903
8260
  }
8261
+ if (extra.attachComment) {
8262
+ extra.range = true;
8263
+ extra.comments = [];
8264
+ extra.bottomRightStack = [];
8265
+ extra.trailingComments = [];
8266
+ extra.leadingComments = [];
8267
+ }
7904
8268
  }
7905
8269
 
7906
8270
  if (length > 0) {
@@ -7938,7 +8302,7 @@ parseYieldExpression: true
7938
8302
  }
7939
8303
 
7940
8304
  // Sync with *.json manifests.
7941
- exports.version = '4001.3001.0000-dev-harmony-fb';
8305
+ exports.version = '6001.0001.0000-dev-harmony-fb';
7942
8306
 
7943
8307
  exports.tokenize = tokenize;
7944
8308
 
@@ -7968,7 +8332,7 @@ parseYieldExpression: true
7968
8332
  }));
7969
8333
  /* vim: set sw=4 ts=4 et tw=80 : */
7970
8334
 
7971
- },{}],7:[function(_dereq_,module,exports){
8335
+ },{}],9:[function(_dereq_,module,exports){
7972
8336
  var Base62 = (function (my) {
7973
8337
  my.chars = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
7974
8338
 
@@ -7996,7 +8360,7 @@ var Base62 = (function (my) {
7996
8360
  }({}));
7997
8361
 
7998
8362
  module.exports = Base62
7999
- },{}],8:[function(_dereq_,module,exports){
8363
+ },{}],10:[function(_dereq_,module,exports){
8000
8364
  /*
8001
8365
  * Copyright 2009-2011 Mozilla Foundation and contributors
8002
8366
  * Licensed under the New BSD license. See LICENSE.txt or:
@@ -8006,7 +8370,7 @@ exports.SourceMapGenerator = _dereq_('./source-map/source-map-generator').Source
8006
8370
  exports.SourceMapConsumer = _dereq_('./source-map/source-map-consumer').SourceMapConsumer;
8007
8371
  exports.SourceNode = _dereq_('./source-map/source-node').SourceNode;
8008
8372
 
8009
- },{"./source-map/source-map-consumer":13,"./source-map/source-map-generator":14,"./source-map/source-node":15}],9:[function(_dereq_,module,exports){
8373
+ },{"./source-map/source-map-consumer":15,"./source-map/source-map-generator":16,"./source-map/source-node":17}],11:[function(_dereq_,module,exports){
8010
8374
  /* -*- Mode: js; js-indent-level: 2; -*- */
8011
8375
  /*
8012
8376
  * Copyright 2011 Mozilla Foundation and contributors
@@ -8105,7 +8469,7 @@ define(function (_dereq_, exports, module) {
8105
8469
 
8106
8470
  });
8107
8471
 
8108
- },{"./util":16,"amdefine":17}],10:[function(_dereq_,module,exports){
8472
+ },{"./util":18,"amdefine":19}],12:[function(_dereq_,module,exports){
8109
8473
  /* -*- Mode: js; js-indent-level: 2; -*- */
8110
8474
  /*
8111
8475
  * Copyright 2011 Mozilla Foundation and contributors
@@ -8251,7 +8615,7 @@ define(function (_dereq_, exports, module) {
8251
8615
 
8252
8616
  });
8253
8617
 
8254
- },{"./base64":11,"amdefine":17}],11:[function(_dereq_,module,exports){
8618
+ },{"./base64":13,"amdefine":19}],13:[function(_dereq_,module,exports){
8255
8619
  /* -*- Mode: js; js-indent-level: 2; -*- */
8256
8620
  /*
8257
8621
  * Copyright 2011 Mozilla Foundation and contributors
@@ -8295,7 +8659,7 @@ define(function (_dereq_, exports, module) {
8295
8659
 
8296
8660
  });
8297
8661
 
8298
- },{"amdefine":17}],12:[function(_dereq_,module,exports){
8662
+ },{"amdefine":19}],14:[function(_dereq_,module,exports){
8299
8663
  /* -*- Mode: js; js-indent-level: 2; -*- */
8300
8664
  /*
8301
8665
  * Copyright 2011 Mozilla Foundation and contributors
@@ -8378,7 +8742,7 @@ define(function (_dereq_, exports, module) {
8378
8742
 
8379
8743
  });
8380
8744
 
8381
- },{"amdefine":17}],13:[function(_dereq_,module,exports){
8745
+ },{"amdefine":19}],15:[function(_dereq_,module,exports){
8382
8746
  /* -*- Mode: js; js-indent-level: 2; -*- */
8383
8747
  /*
8384
8748
  * Copyright 2011 Mozilla Foundation and contributors
@@ -8857,7 +9221,7 @@ define(function (_dereq_, exports, module) {
8857
9221
 
8858
9222
  });
8859
9223
 
8860
- },{"./array-set":9,"./base64-vlq":10,"./binary-search":12,"./util":16,"amdefine":17}],14:[function(_dereq_,module,exports){
9224
+ },{"./array-set":11,"./base64-vlq":12,"./binary-search":14,"./util":18,"amdefine":19}],16:[function(_dereq_,module,exports){
8861
9225
  /* -*- Mode: js; js-indent-level: 2; -*- */
8862
9226
  /*
8863
9227
  * Copyright 2011 Mozilla Foundation and contributors
@@ -9239,7 +9603,7 @@ define(function (_dereq_, exports, module) {
9239
9603
 
9240
9604
  });
9241
9605
 
9242
- },{"./array-set":9,"./base64-vlq":10,"./util":16,"amdefine":17}],15:[function(_dereq_,module,exports){
9606
+ },{"./array-set":11,"./base64-vlq":12,"./util":18,"amdefine":19}],17:[function(_dereq_,module,exports){
9243
9607
  /* -*- Mode: js; js-indent-level: 2; -*- */
9244
9608
  /*
9245
9609
  * Copyright 2011 Mozilla Foundation and contributors
@@ -9612,7 +9976,7 @@ define(function (_dereq_, exports, module) {
9612
9976
 
9613
9977
  });
9614
9978
 
9615
- },{"./source-map-generator":14,"./util":16,"amdefine":17}],16:[function(_dereq_,module,exports){
9979
+ },{"./source-map-generator":16,"./util":18,"amdefine":19}],18:[function(_dereq_,module,exports){
9616
9980
  /* -*- Mode: js; js-indent-level: 2; -*- */
9617
9981
  /*
9618
9982
  * Copyright 2011 Mozilla Foundation and contributors
@@ -9819,7 +10183,7 @@ define(function (_dereq_, exports, module) {
9819
10183
 
9820
10184
  });
9821
10185
 
9822
- },{"amdefine":17}],17:[function(_dereq_,module,exports){
10186
+ },{"amdefine":19}],19:[function(_dereq_,module,exports){
9823
10187
  (function (process,__filename){
9824
10188
  /** vim: et:ts=4:sw=4:sts=4
9825
10189
  * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved.
@@ -10121,8 +10485,8 @@ function amdefine(module, requireFn) {
10121
10485
 
10122
10486
  module.exports = amdefine;
10123
10487
 
10124
- }).call(this,_dereq_("FWaASH"),"/../node_modules/jstransform/node_modules/source-map/node_modules/amdefine/amdefine.js")
10125
- },{"FWaASH":5,"path":4}],18:[function(_dereq_,module,exports){
10488
+ }).call(this,_dereq_('_process'),"/node_modules/jstransform/node_modules/source-map/node_modules/amdefine/amdefine.js")
10489
+ },{"_process":7,"path":6}],20:[function(_dereq_,module,exports){
10126
10490
  /**
10127
10491
  * Copyright 2013 Facebook, Inc.
10128
10492
  *
@@ -10210,7 +10574,7 @@ exports.extract = extract;
10210
10574
  exports.parse = parse;
10211
10575
  exports.parseAsObject = parseAsObject;
10212
10576
 
10213
- },{}],19:[function(_dereq_,module,exports){
10577
+ },{}],21:[function(_dereq_,module,exports){
10214
10578
  /**
10215
10579
  * Copyright 2013 Facebook, Inc.
10216
10580
  *
@@ -10464,8 +10828,9 @@ function transform(visitors, source, options) {
10464
10828
  }
10465
10829
 
10466
10830
  exports.transform = transform;
10831
+ exports.Syntax = Syntax;
10467
10832
 
10468
- },{"./utils":20,"esprima-fb":6,"source-map":8}],20:[function(_dereq_,module,exports){
10833
+ },{"./utils":22,"esprima-fb":8,"source-map":10}],22:[function(_dereq_,module,exports){
10469
10834
  /**
10470
10835
  * Copyright 2013 Facebook, Inc.
10471
10836
  *
@@ -11072,7 +11437,7 @@ exports.analyzeAndTraverse = analyzeAndTraverse;
11072
11437
  exports.getOrderedChildren = getOrderedChildren;
11073
11438
  exports.getNodeSourceText = getNodeSourceText;
11074
11439
 
11075
- },{"./docblock":18,"esprima-fb":6}],21:[function(_dereq_,module,exports){
11440
+ },{"./docblock":20,"esprima-fb":8}],23:[function(_dereq_,module,exports){
11076
11441
  /**
11077
11442
  * Copyright 2013 Facebook, Inc.
11078
11443
  *
@@ -11225,7 +11590,7 @@ exports.visitorList = [
11225
11590
  ];
11226
11591
 
11227
11592
 
11228
- },{"../src/utils":20,"./es6-destructuring-visitors":23,"./es6-rest-param-visitors":26,"esprima-fb":6}],22:[function(_dereq_,module,exports){
11593
+ },{"../src/utils":22,"./es6-destructuring-visitors":25,"./es6-rest-param-visitors":28,"esprima-fb":8}],24:[function(_dereq_,module,exports){
11229
11594
  /**
11230
11595
  * Copyright 2013 Facebook, Inc.
11231
11596
  *
@@ -11252,6 +11617,7 @@ exports.visitorList = [
11252
11617
  var base62 = _dereq_('base62');
11253
11618
  var Syntax = _dereq_('esprima-fb').Syntax;
11254
11619
  var utils = _dereq_('../src/utils');
11620
+ var reservedWordsHelper = _dereq_('./reserved-words-helper');
11255
11621
 
11256
11622
  var declareIdentInLocalScope = utils.declareIdentInLocalScope;
11257
11623
  var initScopeMetadata = utils.initScopeMetadata;
@@ -11370,7 +11736,7 @@ function _shouldMungeIdentifier(node, state) {
11370
11736
  * @param {object} state
11371
11737
  */
11372
11738
  function visitClassMethod(traverse, node, path, state) {
11373
- if (node.kind === 'get' || node.kind === 'set') {
11739
+ if (!state.g.opts.es5 && (node.kind === 'get' || node.kind === 'set')) {
11374
11740
  throw new Error(
11375
11741
  'This transform does not support ' + node.kind + 'ter methods for ES6 ' +
11376
11742
  'classes. (line: ' + node.loc.start.line + ', col: ' +
@@ -11398,6 +11764,8 @@ visitClassMethod.test = function(node, path, state) {
11398
11764
  */
11399
11765
  function visitClassFunctionExpression(traverse, node, path, state) {
11400
11766
  var methodNode = path[0];
11767
+ var isGetter = methodNode.kind === 'get';
11768
+ var isSetter = methodNode.kind === 'set';
11401
11769
 
11402
11770
  state = utils.updateState(state, {
11403
11771
  methodFuncNode: node
@@ -11408,6 +11776,7 @@ function visitClassFunctionExpression(traverse, node, path, state) {
11408
11776
  } else {
11409
11777
  var methodAccessor;
11410
11778
  var prototypeOrStatic = methodNode["static"] ? '' : '.prototype';
11779
+ var objectAccessor = state.className + prototypeOrStatic;
11411
11780
 
11412
11781
  if (methodNode.key.type === Syntax.Identifier) {
11413
11782
  // foo() {}
@@ -11415,17 +11784,37 @@ function visitClassFunctionExpression(traverse, node, path, state) {
11415
11784
  if (_shouldMungeIdentifier(methodNode.key, state)) {
11416
11785
  methodAccessor = _getMungedName(methodAccessor, state);
11417
11786
  }
11418
- methodAccessor = '.' + methodAccessor;
11787
+ if (isGetter || isSetter) {
11788
+ methodAccessor = JSON.stringify(methodAccessor);
11789
+ } else if (reservedWordsHelper.isReservedWord(methodAccessor)) {
11790
+ methodAccessor = '[' + JSON.stringify(methodAccessor) + ']';
11791
+ } else {
11792
+ methodAccessor = '.' + methodAccessor;
11793
+ }
11419
11794
  } else if (methodNode.key.type === Syntax.Literal) {
11420
- // 'foo bar'() {}
11421
- methodAccessor = '[' + JSON.stringify(methodNode.key.value) + ']';
11795
+ // 'foo bar'() {} | get 'foo bar'() {} | set 'foo bar'() {}
11796
+ methodAccessor = JSON.stringify(methodNode.key.value);
11797
+ if (!(isGetter || isSetter)) {
11798
+ methodAccessor = '[' + methodAccessor + ']';
11799
+ }
11422
11800
  }
11423
11801
 
11424
- utils.append(
11425
- state.className + prototypeOrStatic +
11426
- methodAccessor + '=function',
11427
- state
11428
- );
11802
+ if (isSetter || isGetter) {
11803
+ utils.append(
11804
+ 'Object.defineProperty(' +
11805
+ objectAccessor + ',' +
11806
+ methodAccessor + ',' +
11807
+ '{enumerable:true,configurable:true,' +
11808
+ methodNode.kind + ':function',
11809
+ state
11810
+ );
11811
+ } else {
11812
+ utils.append(
11813
+ objectAccessor +
11814
+ methodAccessor + '=function' + (node.generator ? '*' : ''),
11815
+ state
11816
+ );
11817
+ }
11429
11818
  }
11430
11819
  utils.move(methodNode.key.range[1], state);
11431
11820
  utils.append('(', state);
@@ -11457,6 +11846,9 @@ function visitClassFunctionExpression(traverse, node, path, state) {
11457
11846
  utils.catchup(node.body.range[1], state);
11458
11847
 
11459
11848
  if (methodNode.key.name !== 'constructor') {
11849
+ if (isGetter || isSetter) {
11850
+ utils.append('})', state);
11851
+ }
11460
11852
  utils.append(';', state);
11461
11853
  }
11462
11854
  return false;
@@ -11767,7 +12159,7 @@ exports.visitorList = [
11767
12159
  visitSuperMemberExpression
11768
12160
  ];
11769
12161
 
11770
- },{"../src/utils":20,"base62":7,"esprima-fb":6}],23:[function(_dereq_,module,exports){
12162
+ },{"../src/utils":22,"./reserved-words-helper":32,"base62":9,"esprima-fb":8}],25:[function(_dereq_,module,exports){
11771
12163
  /**
11772
12164
  * Copyright 2014 Facebook, Inc.
11773
12165
  *
@@ -11810,7 +12202,9 @@ exports.visitorList = [
11810
12202
  var Syntax = _dereq_('esprima-fb').Syntax;
11811
12203
  var utils = _dereq_('../src/utils');
11812
12204
 
12205
+ var reservedWordsHelper = _dereq_('./reserved-words-helper');
11813
12206
  var restParamVisitors = _dereq_('./es6-rest-param-visitors');
12207
+ var restPropertyHelpers = _dereq_('./es7-rest-property-helpers');
11814
12208
 
11815
12209
  // -------------------------------------------------------
11816
12210
  // 1. Structured variable declarations.
@@ -11855,6 +12249,26 @@ function getDestructuredComponents(node, state) {
11855
12249
  continue;
11856
12250
  }
11857
12251
 
12252
+ if (item.type === Syntax.SpreadElement) {
12253
+ // Spread/rest of an array.
12254
+ // TODO(dmitrys): support spread in the middle of a pattern
12255
+ // and also for function param patterns: [x, ...xs, y]
12256
+ components.push(item.argument.name +
12257
+ '=Array.prototype.slice.call(' +
12258
+ getTmpVar(tmpIndex) + ',' + idx + ')'
12259
+ );
12260
+ continue;
12261
+ }
12262
+
12263
+ if (item.type === Syntax.SpreadProperty) {
12264
+ var restExpression = restPropertyHelpers.renderRestExpression(
12265
+ getTmpVar(tmpIndex),
12266
+ patternItems
12267
+ );
12268
+ components.push(item.argument.name + '=' + restExpression);
12269
+ continue;
12270
+ }
12271
+
11858
12272
  // Depending on pattern type (Array or Object), we get
11859
12273
  // corresponding pattern item parts.
11860
12274
  var accessor = getPatternItemAccessor(node, item, tmpIndex, idx);
@@ -11864,14 +12278,6 @@ function getDestructuredComponents(node, state) {
11864
12278
  if (value.type === Syntax.Identifier) {
11865
12279
  // Simple pattern item.
11866
12280
  components.push(value.name + '=' + accessor);
11867
- } else if (value.type === Syntax.SpreadElement) {
11868
- // Spread/rest of an array.
11869
- // TODO(dmitrys): support spread in the middle of a pattern
11870
- // and also for function param patterns: [x, ...xs, y]
11871
- components.push(value.argument.name +
11872
- '=Array.prototype.slice.call(' +
11873
- getTmpVar(tmpIndex) + ',' + idx + ')'
11874
- );
11875
12281
  } else {
11876
12282
  // Complex sub-structure.
11877
12283
  components.push(
@@ -11890,9 +12296,15 @@ function getPatternItems(node) {
11890
12296
 
11891
12297
  function getPatternItemAccessor(node, patternItem, tmpIndex, idx) {
11892
12298
  var tmpName = getTmpVar(tmpIndex);
11893
- return node.type === Syntax.ObjectPattern
11894
- ? tmpName + '.' + patternItem.key.name
11895
- : tmpName + '[' + idx + ']';
12299
+ if (node.type === Syntax.ObjectPattern) {
12300
+ if (reservedWordsHelper.isReservedWord(patternItem.key.name)) {
12301
+ return tmpName + '["' + patternItem.key.name + '"]';
12302
+ } else {
12303
+ return tmpName + '.' + patternItem.key.name;
12304
+ }
12305
+ } else {
12306
+ return tmpName + '[' + idx + ']';
12307
+ }
11896
12308
  }
11897
12309
 
11898
12310
  function getPatternItemValue(node, patternItem) {
@@ -12035,7 +12447,7 @@ exports.visitorList = [
12035
12447
  exports.renderDestructuredComponents = renderDestructuredComponents;
12036
12448
 
12037
12449
 
12038
- },{"../src/utils":20,"./es6-rest-param-visitors":26,"esprima-fb":6}],24:[function(_dereq_,module,exports){
12450
+ },{"../src/utils":22,"./es6-rest-param-visitors":28,"./es7-rest-property-helpers":30,"./reserved-words-helper":32,"esprima-fb":8}],26:[function(_dereq_,module,exports){
12039
12451
  /**
12040
12452
  * Copyright 2013 Facebook, Inc.
12041
12453
  *
@@ -12055,7 +12467,7 @@ exports.renderDestructuredComponents = renderDestructuredComponents;
12055
12467
  /*jslint node:true*/
12056
12468
 
12057
12469
  /**
12058
- * Desugars concise methods of objects to ES3 function expressions.
12470
+ * Desugars concise methods of objects to function expressions.
12059
12471
  *
12060
12472
  * var foo = {
12061
12473
  * method(x, y) { ... }
@@ -12069,10 +12481,27 @@ exports.renderDestructuredComponents = renderDestructuredComponents;
12069
12481
 
12070
12482
  var Syntax = _dereq_('esprima-fb').Syntax;
12071
12483
  var utils = _dereq_('../src/utils');
12484
+ var reservedWordsHelper = _dereq_('./reserved-words-helper');
12072
12485
 
12073
12486
  function visitObjectConciseMethod(traverse, node, path, state) {
12487
+ var isGenerator = node.value.generator;
12488
+ if (isGenerator) {
12489
+ utils.catchupWhiteSpace(node.range[0] + 1, state);
12490
+ }
12491
+ if (node.computed) { // [<expr>]() { ...}
12492
+ utils.catchup(node.key.range[1] + 1, state);
12493
+ } else if (reservedWordsHelper.isReservedWord(node.key.name)) {
12494
+ utils.catchup(node.key.range[0], state);
12495
+ utils.append('"', state);
12496
+ utils.catchup(node.key.range[1], state);
12497
+ utils.append('"', state);
12498
+ }
12499
+
12074
12500
  utils.catchup(node.key.range[1], state);
12075
- utils.append(':function', state);
12501
+ utils.append(
12502
+ ':function' + (isGenerator ? '*' : ''),
12503
+ state
12504
+ );
12076
12505
  path.unshift(node);
12077
12506
  traverse(node.value, path, state);
12078
12507
  path.shift();
@@ -12089,7 +12518,7 @@ exports.visitorList = [
12089
12518
  visitObjectConciseMethod
12090
12519
  ];
12091
12520
 
12092
- },{"../src/utils":20,"esprima-fb":6}],25:[function(_dereq_,module,exports){
12521
+ },{"../src/utils":22,"./reserved-words-helper":32,"esprima-fb":8}],27:[function(_dereq_,module,exports){
12093
12522
  /**
12094
12523
  * Copyright 2013 Facebook, Inc.
12095
12524
  *
@@ -12144,7 +12573,7 @@ exports.visitorList = [
12144
12573
  ];
12145
12574
 
12146
12575
 
12147
- },{"../src/utils":20,"esprima-fb":6}],26:[function(_dereq_,module,exports){
12576
+ },{"../src/utils":22,"esprima-fb":8}],28:[function(_dereq_,module,exports){
12148
12577
  /**
12149
12578
  * Copyright 2013 Facebook, Inc.
12150
12579
  *
@@ -12243,7 +12672,7 @@ exports.visitorList = [
12243
12672
  visitFunctionBodyWithRestParam
12244
12673
  ];
12245
12674
 
12246
- },{"../src/utils":20,"esprima-fb":6}],27:[function(_dereq_,module,exports){
12675
+ },{"../src/utils":22,"esprima-fb":8}],29:[function(_dereq_,module,exports){
12247
12676
  /**
12248
12677
  * Copyright 2013 Facebook, Inc.
12249
12678
  *
@@ -12401,9 +12830,9 @@ exports.visitorList = [
12401
12830
  visitTaggedTemplateExpression
12402
12831
  ];
12403
12832
 
12404
- },{"../src/utils":20,"esprima-fb":6}],28:[function(_dereq_,module,exports){
12833
+ },{"../src/utils":22,"esprima-fb":8}],30:[function(_dereq_,module,exports){
12405
12834
  /**
12406
- * Copyright 2013-2014 Facebook, Inc.
12835
+ * Copyright 2013 Facebook, Inc.
12407
12836
  *
12408
12837
  * Licensed under the Apache License, Version 2.0 (the "License");
12409
12838
  * you may not use this file except in compliance with the License.
@@ -12417,319 +12846,182 @@ exports.visitorList = [
12417
12846
  * See the License for the specific language governing permissions and
12418
12847
  * limitations under the License.
12419
12848
  */
12420
- /* jshint browser: true */
12421
- /* jslint evil: true */
12422
-
12423
- 'use strict';
12424
-
12425
- var buffer = _dereq_('buffer');
12426
- var docblock = _dereq_('jstransform/src/docblock');
12427
- var transform = _dereq_('jstransform').transform;
12428
- var visitors = _dereq_('./fbtransform/visitors');
12429
-
12430
- var headEl;
12431
- var dummyAnchor;
12432
- var inlineScriptCount = 0;
12433
-
12434
- // The source-map library relies on Object.defineProperty, but IE8 doesn't
12435
- // support it fully even with es5-sham. Indeed, es5-sham's defineProperty
12436
- // throws when Object.prototype.__defineGetter__ is missing, so we skip building
12437
- // the source map in that case.
12438
- var supportsAccessors = Object.prototype.hasOwnProperty('__defineGetter__');
12439
-
12440
- /**
12441
- * Run provided code through jstransform.
12442
- *
12443
- * @param {string} source Original source code
12444
- * @param {object?} options Options to pass to jstransform
12445
- * @return {object} object as returned from jstransform
12446
- */
12447
- function transformReact(source, options) {
12448
- // TODO: just use react-tools
12449
- var visitorList;
12450
- if (options && options.harmony) {
12451
- visitorList = visitors.getAllVisitors();
12452
- } else {
12453
- visitorList = visitors.transformVisitors.react;
12454
- }
12455
-
12456
- return transform(visitorList, source, {
12457
- sourceMap: supportsAccessors
12458
- });
12459
- }
12460
12849
 
12461
- /**
12462
- * Eval provided source after transforming it.
12463
- *
12464
- * @param {string} source Original source code
12465
- * @param {object?} options Options to pass to jstransform
12466
- */
12467
- function exec(source, options) {
12468
- return eval(transformReact(source, options).code);
12469
- }
12850
+ /*jslint node:true*/
12470
12851
 
12471
12852
  /**
12472
- * This method returns a nicely formated line of code pointing to the exact
12473
- * location of the error `e`. The line is limited in size so big lines of code
12474
- * are also shown in a readable way.
12475
- *
12476
- * Example:
12477
- * ... x', overflow:'scroll'}} id={} onScroll={this.scroll} class=" ...
12478
- * ^
12479
- *
12480
- * @param {string} code The full string of code
12481
- * @param {Error} e The error being thrown
12482
- * @return {string} formatted message
12483
- * @internal
12853
+ * Desugars ES7 rest properties into ES5 object iteration.
12484
12854
  */
12485
- function createSourceCodeErrorMessage(code, e) {
12486
- var sourceLines = code.split('\n');
12487
- var erroneousLine = sourceLines[e.lineNumber - 1];
12488
-
12489
- // Removes any leading indenting spaces and gets the number of
12490
- // chars indenting the `erroneousLine`
12491
- var indentation = 0;
12492
- erroneousLine = erroneousLine.replace(/^\s+/, function(leadingSpaces) {
12493
- indentation = leadingSpaces.length;
12494
- return '';
12495
- });
12496
12855
 
12497
- // Defines the number of characters that are going to show
12498
- // before and after the erroneous code
12499
- var LIMIT = 30;
12500
- var errorColumn = e.column - indentation;
12856
+ var Syntax = _dereq_('esprima-fb').Syntax;
12857
+ var utils = _dereq_('../src/utils');
12501
12858
 
12502
- if (errorColumn > LIMIT) {
12503
- erroneousLine = '... ' + erroneousLine.slice(errorColumn - LIMIT);
12504
- errorColumn = 4 + LIMIT;
12505
- }
12506
- if (erroneousLine.length - errorColumn > LIMIT) {
12507
- erroneousLine = erroneousLine.slice(0, errorColumn + LIMIT) + ' ...';
12859
+ // TODO: This is a pretty massive helper, it should only be defined once, in the
12860
+ // transform's runtime environment. We don't currently have a runtime though.
12861
+ var restFunction =
12862
+ '(function(source, exclusion) {' +
12863
+ 'var rest = {};' +
12864
+ 'var hasOwn = Object.prototype.hasOwnProperty;' +
12865
+ 'if (source == null) {' +
12866
+ 'throw new TypeError();' +
12867
+ '}' +
12868
+ 'for (var key in source) {' +
12869
+ 'if (hasOwn.call(source, key) && !hasOwn.call(exclusion, key)) {' +
12870
+ 'rest[key] = source[key];' +
12871
+ '}' +
12872
+ '}' +
12873
+ 'return rest;' +
12874
+ '})';
12875
+
12876
+ function getPropertyNames(properties) {
12877
+ var names = [];
12878
+ for (var i = 0; i < properties.length; i++) {
12879
+ var property = properties[i];
12880
+ if (property.type === Syntax.SpreadProperty) {
12881
+ continue;
12882
+ }
12883
+ if (property.type === Syntax.Identifier) {
12884
+ names.push(property.name);
12885
+ } else {
12886
+ names.push(property.key.name);
12887
+ }
12508
12888
  }
12509
- var message = '\n\n' + erroneousLine + '\n';
12510
- message += new Array(errorColumn - 1).join(' ') + '^';
12511
- return message;
12889
+ return names;
12512
12890
  }
12513
12891
 
12514
- /**
12515
- * Actually transform the code.
12516
- *
12517
- * @param {string} code
12518
- * @param {string?} url
12519
- * @param {object?} options
12520
- * @return {string} The transformed code.
12521
- * @internal
12522
- */
12523
- function transformCode(code, url, options) {
12524
- var jsx = docblock.parseAsObject(docblock.extract(code)).jsx;
12525
-
12526
- if (jsx) {
12527
- try {
12528
- var transformed = transformReact(code, options);
12529
- } catch(e) {
12530
- e.message += '\n at ';
12531
- if (url) {
12532
- if ('fileName' in e) {
12533
- // We set `fileName` if it's supported by this error object and
12534
- // a `url` was provided.
12535
- // The error will correctly point to `url` in Firefox.
12536
- e.fileName = url;
12537
- }
12538
- e.message += url + ':' + e.lineNumber + ':' + e.column;
12539
- } else {
12540
- e.message += location.href;
12541
- }
12542
- e.message += createSourceCodeErrorMessage(code, e);
12543
- throw e;
12544
- }
12892
+ function getRestFunctionCall(source, exclusion) {
12893
+ return restFunction + '(' + source + ',' + exclusion + ')';
12894
+ }
12545
12895
 
12546
- if (!transformed.sourceMap) {
12547
- return transformed.code;
12548
- }
12896
+ function getSimpleShallowCopy(accessorExpression) {
12897
+ // This could be faster with 'Object.assign({}, ' + accessorExpression + ')'
12898
+ // but to unify code paths and avoid a ES6 dependency we use the same
12899
+ // helper as for the exclusion case.
12900
+ return getRestFunctionCall(accessorExpression, '{}');
12901
+ }
12549
12902
 
12550
- var map = transformed.sourceMap.toJSON();
12551
- var source;
12552
- if (url == null) {
12553
- source = "Inline JSX script";
12554
- inlineScriptCount++;
12555
- if (inlineScriptCount > 1) {
12556
- source += ' (' + inlineScriptCount + ')';
12557
- }
12558
- } else if (dummyAnchor) {
12559
- // Firefox has problems when the sourcemap source is a proper URL with a
12560
- // protocol and hostname, so use the pathname. We could use just the
12561
- // filename, but hopefully using the full path will prevent potential
12562
- // issues where the same filename exists in multiple directories.
12563
- dummyAnchor.href = url;
12564
- source = dummyAnchor.pathname.substr(1);
12565
- }
12566
- map.sources = [source];
12567
- map.sourcesContent = [code];
12568
-
12569
- return (
12570
- transformed.code +
12571
- '\n//# sourceMappingURL=data:application/json;base64,' +
12572
- buffer.Buffer(JSON.stringify(map)).toString('base64')
12573
- );
12574
- } else {
12575
- // TODO: warn that we found a script tag missing the docblock?
12576
- // or warn and proceed anyway?
12577
- // or warn, add it ourselves, and proceed anyway?
12578
- return code;
12903
+ function renderRestExpression(accessorExpression, excludedProperties) {
12904
+ var excludedNames = getPropertyNames(excludedProperties);
12905
+ if (!excludedNames.length) {
12906
+ return getSimpleShallowCopy(accessorExpression);
12579
12907
  }
12908
+ return getRestFunctionCall(
12909
+ accessorExpression,
12910
+ '{' + excludedNames.join(':1,') + ':1}'
12911
+ );
12580
12912
  }
12581
12913
 
12914
+ exports.renderRestExpression = renderRestExpression;
12582
12915
 
12916
+ },{"../src/utils":22,"esprima-fb":8}],31:[function(_dereq_,module,exports){
12583
12917
  /**
12584
- * Appends a script element at the end of the <head> with the content of code,
12585
- * after transforming it.
12586
- *
12587
- * @param {string} code The original source code
12588
- * @param {string?} url Where the code came from. null if inline
12589
- * @param {object?} options Options to pass to jstransform
12590
- * @internal
12918
+ * Copyright 2004-present Facebook. All Rights Reserved.
12591
12919
  */
12592
- function run(code, url, options) {
12593
- var scriptEl = document.createElement('script');
12594
- scriptEl.text = transformCode(code, url, options);
12595
- headEl.appendChild(scriptEl);
12596
- }
12920
+ /*global exports:true*/
12597
12921
 
12598
12922
  /**
12599
- * Load script from the provided url and pass the content to the callback.
12923
+ * Implements ES7 object spread property.
12924
+ * https://gist.github.com/sebmarkbage/aa849c7973cb4452c547
12925
+ *
12926
+ * { ...a, x: 1 }
12927
+ *
12928
+ * Object.assign({}, a, {x: 1 })
12600
12929
  *
12601
- * @param {string} url The location of the script src
12602
- * @param {function} callback Function to call with the content of url
12603
- * @internal
12604
12930
  */
12605
- function load(url, callback) {
12606
- var xhr;
12607
- xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP')
12608
- : new XMLHttpRequest();
12609
12931
 
12610
- // async, however scripts will be executed in the order they are in the
12611
- // DOM to mirror normal script loading.
12612
- xhr.open('GET', url, true);
12613
- if ('overrideMimeType' in xhr) {
12614
- xhr.overrideMimeType('text/plain');
12615
- }
12616
- xhr.onreadystatechange = function() {
12617
- if (xhr.readyState === 4) {
12618
- if (xhr.status === 0 || xhr.status === 200) {
12619
- callback(xhr.responseText, url);
12620
- } else {
12621
- throw new Error("Could not load " + url);
12622
- }
12623
- }
12624
- };
12625
- return xhr.send(null);
12626
- }
12932
+ var Syntax = _dereq_('esprima-fb').Syntax;
12933
+ var utils = _dereq_('../src/utils');
12627
12934
 
12628
- /**
12629
- * Loop over provided script tags and get the content, via innerHTML if an
12630
- * inline script, or by using XHR. Transforms are applied if needed. The scripts
12631
- * are executed in the order they are found on the page.
12632
- *
12633
- * @param {array} scripts The <script> elements to load and run.
12634
- * @internal
12635
- */
12636
- function loadScripts(scripts) {
12637
- var result = scripts.map(function() {
12638
- return false;
12639
- });
12640
- var count = result.length;
12935
+ function visitObjectLiteralSpread(traverse, node, path, state) {
12936
+ utils.catchup(node.range[0], state);
12641
12937
 
12642
- function check() {
12643
- var script, i;
12938
+ utils.append('Object.assign({', state);
12644
12939
 
12645
- for (i = 0; i < count; i++) {
12646
- script = result[i];
12940
+ // Skip the original {
12941
+ utils.move(node.range[0] + 1, state);
12647
12942
 
12648
- if (script && !script.executed) {
12649
- run(script.content, script.url, script.options);
12650
- script.executed = true;
12651
- } else if (!script) {
12652
- break;
12943
+ var previousWasSpread = false;
12944
+
12945
+ for (var i = 0; i < node.properties.length; i++) {
12946
+ var property = node.properties[i];
12947
+ if (property.type === Syntax.SpreadProperty) {
12948
+
12949
+ // Close the previous object or initial object
12950
+ if (!previousWasSpread) {
12951
+ utils.append('}', state);
12653
12952
  }
12654
- }
12655
- }
12656
12953
 
12657
- scripts.forEach(function(script, i) {
12658
- var options;
12659
- if (script.type.indexOf('harmony=true') !== -1) {
12660
- options = {
12661
- harmony: true
12662
- };
12663
- }
12954
+ if (i === 0) {
12955
+ // Normally there will be a comma when we catch up, but not before
12956
+ // the first property.
12957
+ utils.append(',', state);
12958
+ }
12959
+
12960
+ utils.catchup(property.range[0], state);
12961
+
12962
+ // skip ...
12963
+ utils.move(property.range[0] + 3, state);
12964
+
12965
+ traverse(property.argument, path, state);
12966
+
12967
+ utils.catchup(property.range[1], state);
12968
+
12969
+ previousWasSpread = true;
12664
12970
 
12665
- if (script.src) {
12666
- load(script.src, function(content, url) {
12667
- result[i] = {
12668
- executed: false,
12669
- content: content,
12670
- url: url,
12671
- options: options
12672
- };
12673
- check();
12674
- });
12675
12971
  } else {
12676
- result[i] = {
12677
- executed: false,
12678
- content: script.innerHTML,
12679
- url: null,
12680
- options: options
12681
- };
12682
- check();
12683
- }
12684
- });
12685
- }
12686
12972
 
12687
- /**
12688
- * Find and run all script tags with type="text/jsx".
12689
- *
12690
- * @internal
12691
- */
12692
- function runScripts() {
12693
- var scripts = document.getElementsByTagName('script');
12973
+ utils.catchup(property.range[0], state);
12974
+
12975
+ if (previousWasSpread) {
12976
+ utils.append('{', state);
12977
+ }
12978
+
12979
+ traverse(property, path, state);
12980
+
12981
+ utils.catchup(property.range[1], state);
12982
+
12983
+ previousWasSpread = false;
12694
12984
 
12695
- // Array.prototype.slice cannot be used on NodeList on IE8
12696
- var jsxScripts = [];
12697
- for (var i = 0; i < scripts.length; i++) {
12698
- if (scripts.item(i).type.indexOf('text/jsx') !== -1) {
12699
- jsxScripts.push(scripts.item(i));
12700
12985
  }
12701
12986
  }
12702
12987
 
12703
- console.warn(
12704
- 'You are using the in-browser JSX transformer. Be sure to precompile ' +
12705
- 'your JSX for production - ' +
12706
- 'http://facebook.github.io/react/docs/tooling-integration.html#jsx'
12707
- );
12708
-
12709
- loadScripts(jsxScripts);
12710
- }
12988
+ utils.catchup(node.range[1] - 1, state);
12711
12989
 
12712
- // Listen for load event if we're in a browser and then kick off finding and
12713
- // running of scripts.
12714
- if (typeof window !== "undefined" && window !== null) {
12715
- headEl = document.getElementsByTagName('head')[0];
12716
- dummyAnchor = document.createElement('a');
12990
+ // Skip the trailing }
12991
+ utils.move(node.range[1], state);
12717
12992
 
12718
- if (window.addEventListener) {
12719
- window.addEventListener('DOMContentLoaded', runScripts, false);
12720
- } else {
12721
- window.attachEvent('onload', runScripts);
12993
+ if (!previousWasSpread) {
12994
+ utils.append('}', state);
12722
12995
  }
12996
+
12997
+ utils.append(')', state);
12998
+ return false;
12723
12999
  }
12724
13000
 
12725
- module.exports = {
12726
- transform: transformReact,
12727
- exec: exec
13001
+ visitObjectLiteralSpread.test = function(node, path, state) {
13002
+ if (node.type !== Syntax.ObjectExpression) {
13003
+ return false;
13004
+ }
13005
+ // Tight loop optimization
13006
+ var hasAtLeastOneSpreadProperty = false;
13007
+ for (var i = 0; i < node.properties.length; i++) {
13008
+ var property = node.properties[i];
13009
+ if (property.type === Syntax.SpreadProperty) {
13010
+ hasAtLeastOneSpreadProperty = true;
13011
+ } else if (property.kind !== 'init') {
13012
+ return false;
13013
+ }
13014
+ }
13015
+ return hasAtLeastOneSpreadProperty;
12728
13016
  };
12729
13017
 
12730
- },{"./fbtransform/visitors":32,"buffer":1,"jstransform":19,"jstransform/src/docblock":18}],29:[function(_dereq_,module,exports){
13018
+ exports.visitorList = [
13019
+ visitObjectLiteralSpread
13020
+ ];
13021
+
13022
+ },{"../src/utils":22,"esprima-fb":8}],32:[function(_dereq_,module,exports){
12731
13023
  /**
12732
- * Copyright 2013-2014 Facebook, Inc.
13024
+ * Copyright 2014 Facebook, Inc.
12733
13025
  *
12734
13026
  * Licensed under the Apache License, Version 2.0 (the "License");
12735
13027
  * you may not use this file except in compliance with the License.
@@ -12743,6 +13035,121 @@ module.exports = {
12743
13035
  * See the License for the specific language governing permissions and
12744
13036
  * limitations under the License.
12745
13037
  */
13038
+
13039
+ var KEYWORDS = [
13040
+ 'break', 'do', 'in', 'typeof', 'case', 'else', 'instanceof', 'var', 'catch',
13041
+ 'export', 'new', 'void', 'class', 'extends', 'return', 'while', 'const',
13042
+ 'finally', 'super', 'with', 'continue', 'for', 'switch', 'yield', 'debugger',
13043
+ 'function', 'this', 'default', 'if', 'throw', 'delete', 'import', 'try'
13044
+ ];
13045
+
13046
+ var FUTURE_RESERVED_WORDS = [
13047
+ 'enum', 'await', 'implements', 'package', 'protected', 'static', 'interface',
13048
+ 'private', 'public'
13049
+ ];
13050
+
13051
+ var LITERALS = [
13052
+ 'null',
13053
+ 'true',
13054
+ 'false'
13055
+ ];
13056
+
13057
+ // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-reserved-words
13058
+ var RESERVED_WORDS = [].concat(
13059
+ KEYWORDS,
13060
+ FUTURE_RESERVED_WORDS,
13061
+ LITERALS
13062
+ );
13063
+
13064
+ var reservedWordsMap = {};
13065
+ RESERVED_WORDS.forEach(function(k) {
13066
+ reservedWordsMap[k] = true;
13067
+ });
13068
+
13069
+ exports.isReservedWord = function(word) {
13070
+ return !!reservedWordsMap[word];
13071
+ };
13072
+
13073
+ },{}],33:[function(_dereq_,module,exports){
13074
+ var esprima = _dereq_('esprima-fb');
13075
+ var utils = _dereq_('jstransform/src/utils');
13076
+
13077
+ var Syntax = esprima.Syntax;
13078
+
13079
+ function _isFunctionNode(node) {
13080
+ return node.type === Syntax.FunctionDeclaration
13081
+ || node.type === Syntax.FunctionExpression
13082
+ || node.type === Syntax.ArrowFunctionExpression;
13083
+ }
13084
+
13085
+ function visitClassProperty(traverse, node, path, state) {
13086
+ utils.catchupWhiteOut(node.range[1], state);
13087
+ return false;
13088
+ }
13089
+ visitClassProperty.test = function(node, path, state) {
13090
+ return node.type === Syntax.ClassProperty;
13091
+ };
13092
+
13093
+ function visitFunctionParametricAnnotation(traverse, node, path, state) {
13094
+ utils.catchupWhiteOut(node.range[1], state);
13095
+ return false;
13096
+ }
13097
+ visitFunctionParametricAnnotation.test = function(node, path, state) {
13098
+ return node.type === Syntax.ParametricTypeAnnotation
13099
+ && path[0]
13100
+ && _isFunctionNode(path[0])
13101
+ && node === path[0].parametricType;
13102
+ };
13103
+
13104
+ function visitFunctionReturnAnnotation(traverse, node, path, state) {
13105
+ utils.catchupWhiteOut(node.range[1], state);
13106
+ return false;
13107
+ }
13108
+ visitFunctionReturnAnnotation.test = function(node, path, state) {
13109
+ return path[0] && _isFunctionNode(path[0]) && node === path[0].returnType;
13110
+ };
13111
+
13112
+ function visitOptionalFunctionParameterAnnotation(traverse, node, path, state) {
13113
+ path.unshift(node);
13114
+ traverse(node.id, path, state);
13115
+ path.shift();
13116
+ utils.catchup(node.id.range[1], state);
13117
+ utils.catchupWhiteOut(node.range[1], state);
13118
+ return false;
13119
+ }
13120
+ visitOptionalFunctionParameterAnnotation.test = function(node, path, state) {
13121
+ return node.type === Syntax.OptionalParameter
13122
+ && path[0]
13123
+ && _isFunctionNode(path[0]);
13124
+ };
13125
+
13126
+ function visitTypeAnnotatedIdentifier(traverse, node, path, state) {
13127
+ traverse(node.id, path, state);
13128
+ utils.catchup(node.id.range[1], state);
13129
+ utils.catchupWhiteOut(node.range[1], state);
13130
+ return false;
13131
+ }
13132
+ visitTypeAnnotatedIdentifier.test = function(node, path, state) {
13133
+ return node.type === Syntax.TypeAnnotatedIdentifier;
13134
+ };
13135
+
13136
+ exports.visitorList = [
13137
+ visitClassProperty,
13138
+ visitFunctionParametricAnnotation,
13139
+ visitFunctionReturnAnnotation,
13140
+ visitOptionalFunctionParameterAnnotation,
13141
+ visitTypeAnnotatedIdentifier
13142
+ ];
13143
+
13144
+ },{"esprima-fb":8,"jstransform/src/utils":22}],34:[function(_dereq_,module,exports){
13145
+ /**
13146
+ * Copyright 2013-2014, Facebook, Inc.
13147
+ * All rights reserved.
13148
+ *
13149
+ * This source code is licensed under the BSD-style license found in the
13150
+ * LICENSE file in the root directory of this source tree. An additional grant
13151
+ * of patent rights can be found in the PATENTS file in the same directory.
13152
+ */
12746
13153
  /*global exports:true*/
12747
13154
  "use strict";
12748
13155
 
@@ -12758,27 +13165,16 @@ var quoteAttrName = _dereq_('./xjs').quoteAttrName;
12758
13165
  var trimLeft = _dereq_('./xjs').trimLeft;
12759
13166
 
12760
13167
  /**
12761
- * Customized desugar processor.
13168
+ * Customized desugar processor for React JSX. Currently:
12762
13169
  *
12763
- * Currently: (Somewhat tailored to React)
12764
- * <X> </X> => X(null, null)
12765
- * <X prop="1" /> => X({prop: '1'}, null)
12766
- * <X prop="2"><Y /></X> => X({prop:'2'}, Y(null, null))
12767
- * <X prop="2"><Y /><Z /></X> => X({prop:'2'}, [Y(null, null), Z(null, null)])
12768
- *
12769
- * Exceptions to the simple rules above:
12770
- * if a property is named "class" it will be changed to "className" in the
12771
- * javascript since "class" is not a valid object key in javascript.
13170
+ * <X> </X> => React.createElement(X, null)
13171
+ * <X prop="1" /> => React.createElement(X, {prop: '1'}, null)
13172
+ * <X prop="2"><Y /></X> => React.createElement(X, {prop:'2'},
13173
+ * React.createElement(Y, null)
13174
+ * )
13175
+ * <div /> => React.createElement("div", null)
12772
13176
  */
12773
13177
 
12774
- var JSX_ATTRIBUTE_TRANSFORMS = {
12775
- cxName: function(attr) {
12776
- throw new Error(
12777
- "cxName is no longer supported, use className={cx(...)} instead"
12778
- );
12779
- }
12780
- };
12781
-
12782
13178
  /**
12783
13179
  * Removes all non-whitespace/parenthesis characters
12784
13180
  */
@@ -12787,8 +13183,12 @@ function stripNonWhiteParen(value) {
12787
13183
  return value.replace(reNonWhiteParen, '');
12788
13184
  }
12789
13185
 
13186
+ var tagConvention = /^[a-z]|\-/;
13187
+ function isTagName(name) {
13188
+ return tagConvention.test(name);
13189
+ }
13190
+
12790
13191
  function visitReactTag(traverse, object, path, state) {
12791
- var jsxObjIdent = utils.getDocblock(state).jsx;
12792
13192
  var openingElement = object.openingElement;
12793
13193
  var nameObject = openingElement.name;
12794
13194
  var attributesObject = openingElement.attributes;
@@ -12799,44 +13199,31 @@ function visitReactTag(traverse, object, path, state) {
12799
13199
  throw new Error('Namespace tags are not supported. ReactJSX is not XML.');
12800
13200
  }
12801
13201
 
12802
- // Only identifiers can be fallback tags or need quoting. We don't need to
12803
- // handle quoting for other types.
12804
- var didAddTag = false;
12805
-
12806
- // Only identifiers can be fallback tags. XJSMemberExpressions are not.
12807
- if (nameObject.type === Syntax.XJSIdentifier) {
12808
- var tagName = nameObject.name;
12809
- var quotedTagName = quoteAttrName(tagName);
12810
-
12811
- if (FALLBACK_TAGS.hasOwnProperty(tagName)) {
12812
- // "Properly" handle invalid identifiers, like <font-face>, which needs to
12813
- // be enclosed in quotes.
12814
- var predicate =
12815
- tagName === quotedTagName ?
12816
- ('.' + tagName) :
12817
- ('[' + quotedTagName + ']');
12818
- utils.append(jsxObjIdent + predicate, state);
12819
- utils.move(nameObject.range[1], state);
12820
- didAddTag = true;
12821
- } else if (tagName !== quotedTagName) {
12822
- // If we're in the case where we need to quote and but don't recognize the
12823
- // tag, throw.
13202
+ // We assume that the React runtime is already in scope
13203
+ utils.append('React.createElement(', state);
13204
+
13205
+ // Identifiers with lower case or hypthens are fallback tags (strings).
13206
+ // XJSMemberExpressions are not.
13207
+ if (nameObject.type === Syntax.XJSIdentifier && isTagName(nameObject.name)) {
13208
+ // This is a temporary error message to assist upgrades
13209
+ if (!FALLBACK_TAGS.hasOwnProperty(nameObject.name)) {
12824
13210
  throw new Error(
12825
- 'Tags must be valid JS identifiers or a recognized special case. `<' +
12826
- tagName + '>` is not one of them.'
13211
+ 'Lower case component names (' + nameObject.name + ') are no longer ' +
13212
+ 'supported in JSX: See http://fb.me/react-jsx-lower-case'
12827
13213
  );
12828
13214
  }
12829
- }
12830
13215
 
12831
- // Use utils.catchup in this case so we can easily handle XJSMemberExpressions
12832
- // which look like Foo.Bar.Baz. This also handles unhyphenated XJSIdentifiers
12833
- // that aren't fallback tags.
12834
- if (!didAddTag) {
13216
+ utils.append('"' + nameObject.name + '"', state);
13217
+ utils.move(nameObject.range[1], state);
13218
+ } else {
13219
+ // Use utils.catchup in this case so we can easily handle
13220
+ // XJSMemberExpressions which look like Foo.Bar.Baz. This also handles
13221
+ // XJSIdentifiers that aren't fallback tags.
12835
13222
  utils.move(nameObject.range[0], state);
12836
13223
  utils.catchup(nameObject.range[1], state);
12837
13224
  }
12838
13225
 
12839
- utils.append('(', state);
13226
+ utils.append(', ', state);
12840
13227
 
12841
13228
  var hasAttributes = attributesObject.length;
12842
13229
 
@@ -12846,7 +13233,7 @@ function visitReactTag(traverse, object, path, state) {
12846
13233
 
12847
13234
  // if we don't have any attributes, pass in null
12848
13235
  if (hasAtLeastOneSpreadProperty) {
12849
- utils.append('Object.assign({', state);
13236
+ utils.append('React.__spread({', state);
12850
13237
  } else if (hasAttributes) {
12851
13238
  utils.append('{', state);
12852
13239
  } else {
@@ -12861,9 +13248,6 @@ function visitReactTag(traverse, object, path, state) {
12861
13248
  var isLast = index === attributesObject.length - 1;
12862
13249
 
12863
13250
  if (attr.type === Syntax.XJSSpreadAttribute) {
12864
- // Plus 1 to skip `{`.
12865
- utils.move(attr.range[0] + 1, state);
12866
-
12867
13251
  // Close the previous object or initial object
12868
13252
  if (!previousWasSpread) {
12869
13253
  utils.append('}, ', state);
@@ -12871,6 +13255,9 @@ function visitReactTag(traverse, object, path, state) {
12871
13255
 
12872
13256
  // Move to the expression start, ignoring everything except parenthesis
12873
13257
  // and whitespace.
13258
+ utils.catchup(attr.range[0], state, stripNonWhiteParen);
13259
+ // Plus 1 to skip `{`.
13260
+ utils.move(attr.range[0] + 1, state);
12874
13261
  utils.catchup(attr.argument.range[0], state, stripNonWhiteParen);
12875
13262
 
12876
13263
  traverse(attr.argument, path, state);
@@ -12921,13 +13308,7 @@ function visitReactTag(traverse, object, path, state) {
12921
13308
  utils.move(attr.name.range[1], state);
12922
13309
  // Use catchupNewlines to skip over the '=' in the attribute
12923
13310
  utils.catchupNewlines(attr.value.range[0], state);
12924
- if (JSX_ATTRIBUTE_TRANSFORMS.hasOwnProperty(attr.name.name)) {
12925
- utils.append(JSX_ATTRIBUTE_TRANSFORMS[attr.name.name](attr), state);
12926
- utils.move(attr.value.range[1], state);
12927
- if (!isLast) {
12928
- utils.append(', ', state);
12929
- }
12930
- } else if (attr.value.type === Syntax.Literal) {
13311
+ if (attr.value.type === Syntax.Literal) {
12931
13312
  renderXJSLiteral(attr.value, isLast, state);
12932
13313
  } else {
12933
13314
  renderXJSExpressionContainer(traverse, attr.value, isLast, path, state);
@@ -13008,30 +13389,21 @@ function visitReactTag(traverse, object, path, state) {
13008
13389
  }
13009
13390
 
13010
13391
  visitReactTag.test = function(object, path, state) {
13011
- // only run react when react @jsx namespace is specified in docblock
13012
- var jsx = utils.getDocblock(state).jsx;
13013
- return object.type === Syntax.XJSElement && jsx && jsx.length;
13392
+ return object.type === Syntax.XJSElement;
13014
13393
  };
13015
13394
 
13016
13395
  exports.visitorList = [
13017
13396
  visitReactTag
13018
13397
  ];
13019
13398
 
13020
- },{"./xjs":31,"esprima-fb":6,"jstransform/src/utils":20}],30:[function(_dereq_,module,exports){
13399
+ },{"./xjs":36,"esprima-fb":8,"jstransform/src/utils":22}],35:[function(_dereq_,module,exports){
13021
13400
  /**
13022
- * Copyright 2013-2014 Facebook, Inc.
13023
- *
13024
- * Licensed under the Apache License, Version 2.0 (the "License");
13025
- * you may not use this file except in compliance with the License.
13026
- * You may obtain a copy of the License at
13401
+ * Copyright 2013-2014, Facebook, Inc.
13402
+ * All rights reserved.
13027
13403
  *
13028
- * http://www.apache.org/licenses/LICENSE-2.0
13029
- *
13030
- * Unless required by applicable law or agreed to in writing, software
13031
- * distributed under the License is distributed on an "AS IS" BASIS,
13032
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13033
- * See the License for the specific language governing permissions and
13034
- * limitations under the License.
13404
+ * This source code is licensed under the BSD-style license found in the
13405
+ * LICENSE file in the root directory of this source tree. An additional grant
13406
+ * of patent rights can be found in the PATENTS file in the same directory.
13035
13407
  */
13036
13408
  /*global exports:true*/
13037
13409
  "use strict";
@@ -13107,40 +13479,26 @@ function visitReactDisplayName(traverse, object, path, state) {
13107
13479
  }
13108
13480
  }
13109
13481
 
13110
- /**
13111
- * Will only run on @jsx files for now.
13112
- */
13113
13482
  visitReactDisplayName.test = function(object, path, state) {
13114
- if (utils.getDocblock(state).jsx) {
13115
- return (
13116
- object.type === Syntax.AssignmentExpression ||
13117
- object.type === Syntax.Property ||
13118
- object.type === Syntax.VariableDeclarator
13119
- );
13120
- } else {
13121
- return false;
13122
- }
13483
+ return (
13484
+ object.type === Syntax.AssignmentExpression ||
13485
+ object.type === Syntax.Property ||
13486
+ object.type === Syntax.VariableDeclarator
13487
+ );
13123
13488
  };
13124
13489
 
13125
13490
  exports.visitorList = [
13126
13491
  visitReactDisplayName
13127
13492
  ];
13128
13493
 
13129
- },{"esprima-fb":6,"jstransform/src/utils":20}],31:[function(_dereq_,module,exports){
13494
+ },{"esprima-fb":8,"jstransform/src/utils":22}],36:[function(_dereq_,module,exports){
13130
13495
  /**
13131
- * Copyright 2013-2014 Facebook, Inc.
13132
- *
13133
- * Licensed under the Apache License, Version 2.0 (the "License");
13134
- * you may not use this file except in compliance with the License.
13135
- * You may obtain a copy of the License at
13136
- *
13137
- * http://www.apache.org/licenses/LICENSE-2.0
13496
+ * Copyright 2013-2014, Facebook, Inc.
13497
+ * All rights reserved.
13138
13498
  *
13139
- * Unless required by applicable law or agreed to in writing, software
13140
- * distributed under the License is distributed on an "AS IS" BASIS,
13141
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13142
- * See the License for the specific language governing permissions and
13143
- * limitations under the License.
13499
+ * This source code is licensed under the BSD-style license found in the
13500
+ * LICENSE file in the root directory of this source tree. An additional grant
13501
+ * of patent rights can be found in the PATENTS file in the same directory.
13144
13502
  */
13145
13503
  /*global exports:true*/
13146
13504
  "use strict";
@@ -13237,6 +13595,7 @@ var knownTags = {
13237
13595
  param: true,
13238
13596
  path: true,
13239
13597
  pattern: false,
13598
+ picture: true,
13240
13599
  polygon: true,
13241
13600
  polyline: true,
13242
13601
  pre: true,
@@ -13381,7 +13740,7 @@ exports.renderXJSLiteral = renderXJSLiteral;
13381
13740
  exports.quoteAttrName = quoteAttrName;
13382
13741
  exports.trimLeft = trimLeft;
13383
13742
 
13384
- },{"esprima-fb":6,"jstransform/src/utils":20}],32:[function(_dereq_,module,exports){
13743
+ },{"esprima-fb":8,"jstransform/src/utils":22}],37:[function(_dereq_,module,exports){
13385
13744
  /*global exports:true*/
13386
13745
  var es6ArrowFunctions = _dereq_('jstransform/visitors/es6-arrow-function-visitors');
13387
13746
  var es6Classes = _dereq_('jstransform/visitors/es6-class-visitors');
@@ -13390,8 +13749,10 @@ var es6ObjectConciseMethod = _dereq_('jstransform/visitors/es6-object-concise-me
13390
13749
  var es6ObjectShortNotation = _dereq_('jstransform/visitors/es6-object-short-notation-visitors');
13391
13750
  var es6RestParameters = _dereq_('jstransform/visitors/es6-rest-param-visitors');
13392
13751
  var es6Templates = _dereq_('jstransform/visitors/es6-template-visitors');
13752
+ var es7SpreadProperty = _dereq_('jstransform/visitors/es7-spread-property-visitors');
13393
13753
  var react = _dereq_('./transforms/react');
13394
13754
  var reactDisplayName = _dereq_('./transforms/reactDisplayName');
13755
+ var typesSyntax = _dereq_('jstransform/visitors/type-syntax');
13395
13756
 
13396
13757
  /**
13397
13758
  * Map from transformName => orderedListOfVisitors.
@@ -13404,13 +13765,35 @@ var transformVisitors = {
13404
13765
  'es6-object-short-notation': es6ObjectShortNotation.visitorList,
13405
13766
  'es6-rest-params': es6RestParameters.visitorList,
13406
13767
  'es6-templates': es6Templates.visitorList,
13407
- 'react': react.visitorList.concat(reactDisplayName.visitorList)
13768
+ 'es7-spread-property': es7SpreadProperty.visitorList,
13769
+ 'react': react.visitorList.concat(reactDisplayName.visitorList),
13770
+ 'types': typesSyntax.visitorList
13771
+ };
13772
+
13773
+ var transformSets = {
13774
+ 'harmony': [
13775
+ 'es6-arrow-functions',
13776
+ 'es6-object-concise-method',
13777
+ 'es6-object-short-notation',
13778
+ 'es6-classes',
13779
+ 'es6-rest-params',
13780
+ 'es6-templates',
13781
+ 'es6-destructuring',
13782
+ 'es7-spread-property'
13783
+ ],
13784
+ 'react': [
13785
+ 'react'
13786
+ ],
13787
+ 'type-annotations': [
13788
+ 'types'
13789
+ ]
13408
13790
  };
13409
13791
 
13410
13792
  /**
13411
13793
  * Specifies the order in which each transform should run.
13412
13794
  */
13413
13795
  var transformRunOrder = [
13796
+ 'types',
13414
13797
  'es6-arrow-functions',
13415
13798
  'es6-object-concise-method',
13416
13799
  'es6-object-short-notation',
@@ -13418,6 +13801,7 @@ var transformRunOrder = [
13418
13801
  'es6-rest-params',
13419
13802
  'es6-templates',
13420
13803
  'es6-destructuring',
13804
+ 'es7-spread-property',
13421
13805
  'react'
13422
13806
  ];
13423
13807
 
@@ -13438,9 +13822,37 @@ function getAllVisitors(excludes) {
13438
13822
  return ret;
13439
13823
  }
13440
13824
 
13825
+ /**
13826
+ * Given a list of visitor set names, return the ordered list of visitors to be
13827
+ * passed to jstransform.
13828
+ *
13829
+ * @param {array}
13830
+ * @return {array}
13831
+ */
13832
+ function getVisitorsBySet(sets) {
13833
+ var visitorsToInclude = sets.reduce(function(visitors, set) {
13834
+ if (!transformSets.hasOwnProperty(set)) {
13835
+ throw new Error('Unknown visitor set: ' + set);
13836
+ }
13837
+ transformSets[set].forEach(function(visitor) {
13838
+ visitors[visitor] = true;
13839
+ });
13840
+ return visitors;
13841
+ }, {});
13842
+
13843
+ var visitorList = [];
13844
+ for (var i = 0; i < transformRunOrder.length; i++) {
13845
+ if (visitorsToInclude.hasOwnProperty(transformRunOrder[i])) {
13846
+ visitorList = visitorList.concat(transformVisitors[transformRunOrder[i]]);
13847
+ }
13848
+ }
13849
+
13850
+ return visitorList;
13851
+ }
13852
+
13853
+ exports.getVisitorsBySet = getVisitorsBySet;
13441
13854
  exports.getAllVisitors = getAllVisitors;
13442
13855
  exports.transformVisitors = transformVisitors;
13443
13856
 
13444
- },{"./transforms/react":29,"./transforms/reactDisplayName":30,"jstransform/visitors/es6-arrow-function-visitors":21,"jstransform/visitors/es6-class-visitors":22,"jstransform/visitors/es6-destructuring-visitors":23,"jstransform/visitors/es6-object-concise-method-visitors":24,"jstransform/visitors/es6-object-short-notation-visitors":25,"jstransform/visitors/es6-rest-param-visitors":26,"jstransform/visitors/es6-template-visitors":27}]},{},[28])
13445
- (28)
13857
+ },{"./transforms/react":34,"./transforms/reactDisplayName":35,"jstransform/visitors/es6-arrow-function-visitors":23,"jstransform/visitors/es6-class-visitors":24,"jstransform/visitors/es6-destructuring-visitors":25,"jstransform/visitors/es6-object-concise-method-visitors":26,"jstransform/visitors/es6-object-short-notation-visitors":27,"jstransform/visitors/es6-rest-param-visitors":28,"jstransform/visitors/es6-template-visitors":29,"jstransform/visitors/es7-spread-property-visitors":31,"jstransform/visitors/type-syntax":33}]},{},[1])(1)
13446
13858
  });