macgyver 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +20 -0
  5. data/README.md +45 -0
  6. data/Rakefile +1 -0
  7. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Growl +0 -0
  8. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/Growl +0 -0
  9. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/Headers/Growl.h +5 -0
  10. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h +551 -0
  11. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/Headers/GrowlDefines.h +341 -0
  12. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/Resources/Info.plist +40 -0
  13. data/assets/MacGap.app/Contents/Frameworks/Growl.framework/Versions/A/_CodeSignature/CodeResources +34 -0
  14. data/assets/MacGap.app/Contents/Info.plist +48 -0
  15. data/assets/MacGap.app/Contents/MacOS/MacGap +0 -0
  16. data/assets/MacGap.app/Contents/PkgInfo +1 -0
  17. data/assets/MacGap.app/Contents/Resources/_debugger.js +1718 -0
  18. data/assets/MacGap.app/Contents/Resources/_http_agent.js +310 -0
  19. data/assets/MacGap.app/Contents/Resources/_http_client.js +533 -0
  20. data/assets/MacGap.app/Contents/Resources/_http_common.js +222 -0
  21. data/assets/MacGap.app/Contents/Resources/_http_incoming.js +194 -0
  22. data/assets/MacGap.app/Contents/Resources/_http_outgoing.js +597 -0
  23. data/assets/MacGap.app/Contents/Resources/_http_server.js +510 -0
  24. data/assets/MacGap.app/Contents/Resources/_linklist.js +76 -0
  25. data/assets/MacGap.app/Contents/Resources/_stream_duplex.js +69 -0
  26. data/assets/MacGap.app/Contents/Resources/_stream_passthrough.js +41 -0
  27. data/assets/MacGap.app/Contents/Resources/_stream_readable.js +900 -0
  28. data/assets/MacGap.app/Contents/Resources/_stream_transform.js +204 -0
  29. data/assets/MacGap.app/Contents/Resources/_stream_writable.js +456 -0
  30. data/assets/MacGap.app/Contents/Resources/_tls_legacy.js +887 -0
  31. data/assets/MacGap.app/Contents/Resources/_tls_wrap.js +831 -0
  32. data/assets/MacGap.app/Contents/Resources/application.icns +0 -0
  33. data/assets/MacGap.app/Contents/Resources/assert.js +326 -0
  34. data/assets/MacGap.app/Contents/Resources/buffer.js +724 -0
  35. data/assets/MacGap.app/Contents/Resources/child_process.js +1107 -0
  36. data/assets/MacGap.app/Contents/Resources/cluster.js +613 -0
  37. data/assets/MacGap.app/Contents/Resources/console.js +108 -0
  38. data/assets/MacGap.app/Contents/Resources/constants.js +22 -0
  39. data/assets/MacGap.app/Contents/Resources/crypto.js +691 -0
  40. data/assets/MacGap.app/Contents/Resources/dgram.js +459 -0
  41. data/assets/MacGap.app/Contents/Resources/dns.js +274 -0
  42. data/assets/MacGap.app/Contents/Resources/domain.js +292 -0
  43. data/assets/MacGap.app/Contents/Resources/en.lproj/Credits.rtf +29 -0
  44. data/assets/MacGap.app/Contents/Resources/en.lproj/InfoPlist.strings +0 -0
  45. data/assets/MacGap.app/Contents/Resources/en.lproj/MainMenu.nib +0 -0
  46. data/assets/MacGap.app/Contents/Resources/en.lproj/Window.nib +0 -0
  47. data/assets/MacGap.app/Contents/Resources/events.js +312 -0
  48. data/assets/MacGap.app/Contents/Resources/freelist.js +43 -0
  49. data/assets/MacGap.app/Contents/Resources/fs.js +1732 -0
  50. data/assets/MacGap.app/Contents/Resources/http.js +119 -0
  51. data/assets/MacGap.app/Contents/Resources/https.js +134 -0
  52. data/assets/MacGap.app/Contents/Resources/module.js +529 -0
  53. data/assets/MacGap.app/Contents/Resources/net.js +1378 -0
  54. data/assets/MacGap.app/Contents/Resources/nodelike.js +195 -0
  55. data/assets/MacGap.app/Contents/Resources/os.js +64 -0
  56. data/assets/MacGap.app/Contents/Resources/path.js +517 -0
  57. data/assets/MacGap.app/Contents/Resources/public/index.html +38 -0
  58. data/assets/MacGap.app/Contents/Resources/punycode.js +507 -0
  59. data/assets/MacGap.app/Contents/Resources/querystring.js +206 -0
  60. data/assets/MacGap.app/Contents/Resources/readline.js +1311 -0
  61. data/assets/MacGap.app/Contents/Resources/repl.js +945 -0
  62. data/assets/MacGap.app/Contents/Resources/smalloc.js +90 -0
  63. data/assets/MacGap.app/Contents/Resources/stream.js +127 -0
  64. data/assets/MacGap.app/Contents/Resources/string_decoder.js +189 -0
  65. data/assets/MacGap.app/Contents/Resources/sys.js +24 -0
  66. data/assets/MacGap.app/Contents/Resources/timers.js +568 -0
  67. data/assets/MacGap.app/Contents/Resources/tls.js +220 -0
  68. data/assets/MacGap.app/Contents/Resources/tty.js +129 -0
  69. data/assets/MacGap.app/Contents/Resources/url.js +693 -0
  70. data/assets/MacGap.app/Contents/Resources/util.js +688 -0
  71. data/assets/MacGap.app/Contents/Resources/vm.js +73 -0
  72. data/assets/MacGap.app/Contents/Resources/zlib.js +524 -0
  73. data/assets/index.html +38 -0
  74. data/bin/macgyver +104 -0
  75. data/macgyver.gemspec +19 -0
  76. data/test/public/index.html +27 -0
  77. metadata +121 -0
@@ -0,0 +1,38 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>MacGap</title>
5
+ <style type="text/css" media="screen">
6
+ html, body {
7
+ height: 100%;
8
+ width: 100%;
9
+ background: #FFF;
10
+ padding: 0;
11
+ margin: 0;
12
+ overflow: hidden;
13
+ -webkit-user-select: none;
14
+ }
15
+
16
+ h1 {
17
+ color: #E0E0E0;
18
+ margin: 18% 0;
19
+ text-align: center;
20
+ font-family: helvetica;
21
+ }
22
+ </style>
23
+
24
+ </head>
25
+ <body>
26
+
27
+ <script type="text/javascript" charset="utf-8">
28
+ macgap.notice.notify({title: 'MacGap', content: 'Hello World'});
29
+
30
+ var fs = require('fs');
31
+ fs.readdir('/tmp', function(e, files){
32
+ console.log(files);
33
+ })
34
+ </script>
35
+
36
+ <h1>MacGap</h1>
37
+ </body>
38
+ </html>
@@ -0,0 +1,507 @@
1
+ /*! http://mths.be/punycode v1.2.3 by @mathias */
2
+ ;(function(root) {
3
+
4
+ /** Detect free variables */
5
+ var freeExports = typeof exports == 'object' && exports;
6
+ var freeModule = typeof module == 'object' && module &&
7
+ module.exports == freeExports && module;
8
+ var freeGlobal = typeof global == 'object' && global;
9
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
10
+ root = freeGlobal;
11
+ }
12
+
13
+ /**
14
+ * The `punycode` object.
15
+ * @name punycode
16
+ * @type Object
17
+ */
18
+ var punycode,
19
+
20
+ /** Highest positive signed 32-bit float value */
21
+ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
22
+
23
+ /** Bootstring parameters */
24
+ base = 36,
25
+ tMin = 1,
26
+ tMax = 26,
27
+ skew = 38,
28
+ damp = 700,
29
+ initialBias = 72,
30
+ initialN = 128, // 0x80
31
+ delimiter = '-', // '\x2D'
32
+
33
+ /** Regular expressions */
34
+ regexPunycode = /^xn--/,
35
+ regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars
36
+ regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators
37
+
38
+ /** Error messages */
39
+ errors = {
40
+ 'overflow': 'Overflow: input needs wider integers to process',
41
+ 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
42
+ 'invalid-input': 'Invalid input'
43
+ },
44
+
45
+ /** Convenience shortcuts */
46
+ baseMinusTMin = base - tMin,
47
+ floor = Math.floor,
48
+ stringFromCharCode = String.fromCharCode,
49
+
50
+ /** Temporary variable */
51
+ key;
52
+
53
+ /*--------------------------------------------------------------------------*/
54
+
55
+ /**
56
+ * A generic error utility function.
57
+ * @private
58
+ * @param {String} type The error type.
59
+ * @returns {Error} Throws a `RangeError` with the applicable error message.
60
+ */
61
+ function error(type) {
62
+ throw RangeError(errors[type]);
63
+ }
64
+
65
+ /**
66
+ * A generic `Array#map` utility function.
67
+ * @private
68
+ * @param {Array} array The array to iterate over.
69
+ * @param {Function} callback The function that gets called for every array
70
+ * item.
71
+ * @returns {Array} A new array of values returned by the callback function.
72
+ */
73
+ function map(array, fn) {
74
+ var length = array.length;
75
+ while (length--) {
76
+ array[length] = fn(array[length]);
77
+ }
78
+ return array;
79
+ }
80
+
81
+ /**
82
+ * A simple `Array#map`-like wrapper to work with domain name strings.
83
+ * @private
84
+ * @param {String} domain The domain name.
85
+ * @param {Function} callback The function that gets called for every
86
+ * character.
87
+ * @returns {Array} A new string of characters returned by the callback
88
+ * function.
89
+ */
90
+ function mapDomain(string, fn) {
91
+ return map(string.split(regexSeparators), fn).join('.');
92
+ }
93
+
94
+ /**
95
+ * Creates an array containing the numeric code points of each Unicode
96
+ * character in the string. While JavaScript uses UCS-2 internally,
97
+ * this function will convert a pair of surrogate halves (each of which
98
+ * UCS-2 exposes as separate characters) into a single code point,
99
+ * matching UTF-16.
100
+ * @see `punycode.ucs2.encode`
101
+ * @see <http://mathiasbynens.be/notes/javascript-encoding>
102
+ * @memberOf punycode.ucs2
103
+ * @name decode
104
+ * @param {String} string The Unicode input string (UCS-2).
105
+ * @returns {Array} The new array of code points.
106
+ */
107
+ function ucs2decode(string) {
108
+ var output = [],
109
+ counter = 0,
110
+ length = string.length,
111
+ value,
112
+ extra;
113
+ while (counter < length) {
114
+ value = string.charCodeAt(counter++);
115
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
116
+ // high surrogate, and there is a next character
117
+ extra = string.charCodeAt(counter++);
118
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
119
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
120
+ } else {
121
+ // unmatched surrogate; only append this code unit, in case the next
122
+ // code unit is the high surrogate of a surrogate pair
123
+ output.push(value);
124
+ counter--;
125
+ }
126
+ } else {
127
+ output.push(value);
128
+ }
129
+ }
130
+ return output;
131
+ }
132
+
133
+ /**
134
+ * Creates a string based on an array of numeric code points.
135
+ * @see `punycode.ucs2.decode`
136
+ * @memberOf punycode.ucs2
137
+ * @name encode
138
+ * @param {Array} codePoints The array of numeric code points.
139
+ * @returns {String} The new Unicode string (UCS-2).
140
+ */
141
+ function ucs2encode(array) {
142
+ return map(array, function(value) {
143
+ var output = '';
144
+ if (value > 0xFFFF) {
145
+ value -= 0x10000;
146
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
147
+ value = 0xDC00 | value & 0x3FF;
148
+ }
149
+ output += stringFromCharCode(value);
150
+ return output;
151
+ }).join('');
152
+ }
153
+
154
+ /**
155
+ * Converts a basic code point into a digit/integer.
156
+ * @see `digitToBasic()`
157
+ * @private
158
+ * @param {Number} codePoint The basic numeric code point value.
159
+ * @returns {Number} The numeric value of a basic code point (for use in
160
+ * representing integers) in the range `0` to `base - 1`, or `base` if
161
+ * the code point does not represent a value.
162
+ */
163
+ function basicToDigit(codePoint) {
164
+ if (codePoint - 48 < 10) {
165
+ return codePoint - 22;
166
+ }
167
+ if (codePoint - 65 < 26) {
168
+ return codePoint - 65;
169
+ }
170
+ if (codePoint - 97 < 26) {
171
+ return codePoint - 97;
172
+ }
173
+ return base;
174
+ }
175
+
176
+ /**
177
+ * Converts a digit/integer into a basic code point.
178
+ * @see `basicToDigit()`
179
+ * @private
180
+ * @param {Number} digit The numeric value of a basic code point.
181
+ * @returns {Number} The basic code point whose value (when used for
182
+ * representing integers) is `digit`, which needs to be in the range
183
+ * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
184
+ * used; else, the lowercase form is used. The behavior is undefined
185
+ * if `flag` is non-zero and `digit` has no uppercase form.
186
+ */
187
+ function digitToBasic(digit, flag) {
188
+ // 0..25 map to ASCII a..z or A..Z
189
+ // 26..35 map to ASCII 0..9
190
+ return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
191
+ }
192
+
193
+ /**
194
+ * Bias adaptation function as per section 3.4 of RFC 3492.
195
+ * http://tools.ietf.org/html/rfc3492#section-3.4
196
+ * @private
197
+ */
198
+ function adapt(delta, numPoints, firstTime) {
199
+ var k = 0;
200
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
201
+ delta += floor(delta / numPoints);
202
+ for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
203
+ delta = floor(delta / baseMinusTMin);
204
+ }
205
+ return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
206
+ }
207
+
208
+ /**
209
+ * Converts a Punycode string of ASCII-only symbols to a string of Unicode
210
+ * symbols.
211
+ * @memberOf punycode
212
+ * @param {String} input The Punycode string of ASCII-only symbols.
213
+ * @returns {String} The resulting string of Unicode symbols.
214
+ */
215
+ function decode(input) {
216
+ // Don't use UCS-2
217
+ var output = [],
218
+ inputLength = input.length,
219
+ out,
220
+ i = 0,
221
+ n = initialN,
222
+ bias = initialBias,
223
+ basic,
224
+ j,
225
+ index,
226
+ oldi,
227
+ w,
228
+ k,
229
+ digit,
230
+ t,
231
+ /** Cached calculation results */
232
+ baseMinusT;
233
+
234
+ // Handle the basic code points: let `basic` be the number of input code
235
+ // points before the last delimiter, or `0` if there is none, then copy
236
+ // the first basic code points to the output.
237
+
238
+ basic = input.lastIndexOf(delimiter);
239
+ if (basic < 0) {
240
+ basic = 0;
241
+ }
242
+
243
+ for (j = 0; j < basic; ++j) {
244
+ // if it's not a basic code point
245
+ if (input.charCodeAt(j) >= 0x80) {
246
+ error('not-basic');
247
+ }
248
+ output.push(input.charCodeAt(j));
249
+ }
250
+
251
+ // Main decoding loop: start just after the last delimiter if any basic code
252
+ // points were copied; start at the beginning otherwise.
253
+
254
+ for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
255
+
256
+ // `index` is the index of the next character to be consumed.
257
+ // Decode a generalized variable-length integer into `delta`,
258
+ // which gets added to `i`. The overflow checking is easier
259
+ // if we increase `i` as we go, then subtract off its starting
260
+ // value at the end to obtain `delta`.
261
+ for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
262
+
263
+ if (index >= inputLength) {
264
+ error('invalid-input');
265
+ }
266
+
267
+ digit = basicToDigit(input.charCodeAt(index++));
268
+
269
+ if (digit >= base || digit > floor((maxInt - i) / w)) {
270
+ error('overflow');
271
+ }
272
+
273
+ i += digit * w;
274
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
275
+
276
+ if (digit < t) {
277
+ break;
278
+ }
279
+
280
+ baseMinusT = base - t;
281
+ if (w > floor(maxInt / baseMinusT)) {
282
+ error('overflow');
283
+ }
284
+
285
+ w *= baseMinusT;
286
+
287
+ }
288
+
289
+ out = output.length + 1;
290
+ bias = adapt(i - oldi, out, oldi == 0);
291
+
292
+ // `i` was supposed to wrap around from `out` to `0`,
293
+ // incrementing `n` each time, so we'll fix that now:
294
+ if (floor(i / out) > maxInt - n) {
295
+ error('overflow');
296
+ }
297
+
298
+ n += floor(i / out);
299
+ i %= out;
300
+
301
+ // Insert `n` at position `i` of the output
302
+ output.splice(i++, 0, n);
303
+
304
+ }
305
+
306
+ return ucs2encode(output);
307
+ }
308
+
309
+ /**
310
+ * Converts a string of Unicode symbols to a Punycode string of ASCII-only
311
+ * symbols.
312
+ * @memberOf punycode
313
+ * @param {String} input The string of Unicode symbols.
314
+ * @returns {String} The resulting Punycode string of ASCII-only symbols.
315
+ */
316
+ function encode(input) {
317
+ var n,
318
+ delta,
319
+ handledCPCount,
320
+ basicLength,
321
+ bias,
322
+ j,
323
+ m,
324
+ q,
325
+ k,
326
+ t,
327
+ currentValue,
328
+ output = [],
329
+ /** `inputLength` will hold the number of code points in `input`. */
330
+ inputLength,
331
+ /** Cached calculation results */
332
+ handledCPCountPlusOne,
333
+ baseMinusT,
334
+ qMinusT;
335
+
336
+ // Convert the input in UCS-2 to Unicode
337
+ input = ucs2decode(input);
338
+
339
+ // Cache the length
340
+ inputLength = input.length;
341
+
342
+ // Initialize the state
343
+ n = initialN;
344
+ delta = 0;
345
+ bias = initialBias;
346
+
347
+ // Handle the basic code points
348
+ for (j = 0; j < inputLength; ++j) {
349
+ currentValue = input[j];
350
+ if (currentValue < 0x80) {
351
+ output.push(stringFromCharCode(currentValue));
352
+ }
353
+ }
354
+
355
+ handledCPCount = basicLength = output.length;
356
+
357
+ // `handledCPCount` is the number of code points that have been handled;
358
+ // `basicLength` is the number of basic code points.
359
+
360
+ // Finish the basic string - if it is not empty - with a delimiter
361
+ if (basicLength) {
362
+ output.push(delimiter);
363
+ }
364
+
365
+ // Main encoding loop:
366
+ while (handledCPCount < inputLength) {
367
+
368
+ // All non-basic code points < n have been handled already. Find the next
369
+ // larger one:
370
+ for (m = maxInt, j = 0; j < inputLength; ++j) {
371
+ currentValue = input[j];
372
+ if (currentValue >= n && currentValue < m) {
373
+ m = currentValue;
374
+ }
375
+ }
376
+
377
+ // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
378
+ // but guard against overflow
379
+ handledCPCountPlusOne = handledCPCount + 1;
380
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
381
+ error('overflow');
382
+ }
383
+
384
+ delta += (m - n) * handledCPCountPlusOne;
385
+ n = m;
386
+
387
+ for (j = 0; j < inputLength; ++j) {
388
+ currentValue = input[j];
389
+
390
+ if (currentValue < n && ++delta > maxInt) {
391
+ error('overflow');
392
+ }
393
+
394
+ if (currentValue == n) {
395
+ // Represent delta as a generalized variable-length integer
396
+ for (q = delta, k = base; /* no condition */; k += base) {
397
+ t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
398
+ if (q < t) {
399
+ break;
400
+ }
401
+ qMinusT = q - t;
402
+ baseMinusT = base - t;
403
+ output.push(
404
+ stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
405
+ );
406
+ q = floor(qMinusT / baseMinusT);
407
+ }
408
+
409
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
410
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
411
+ delta = 0;
412
+ ++handledCPCount;
413
+ }
414
+ }
415
+
416
+ ++delta;
417
+ ++n;
418
+
419
+ }
420
+ return output.join('');
421
+ }
422
+
423
+ /**
424
+ * Converts a Punycode string representing a domain name to Unicode. Only the
425
+ * Punycoded parts of the domain name will be converted, i.e. it doesn't
426
+ * matter if you call it on a string that has already been converted to
427
+ * Unicode.
428
+ * @memberOf punycode
429
+ * @param {String} domain The Punycode domain name to convert to Unicode.
430
+ * @returns {String} The Unicode representation of the given Punycode
431
+ * string.
432
+ */
433
+ function toUnicode(domain) {
434
+ return mapDomain(domain, function(string) {
435
+ return regexPunycode.test(string)
436
+ ? decode(string.slice(4).toLowerCase())
437
+ : string;
438
+ });
439
+ }
440
+
441
+ /**
442
+ * Converts a Unicode string representing a domain name to Punycode. Only the
443
+ * non-ASCII parts of the domain name will be converted, i.e. it doesn't
444
+ * matter if you call it with a domain that's already in ASCII.
445
+ * @memberOf punycode
446
+ * @param {String} domain The domain name to convert, as a Unicode string.
447
+ * @returns {String} The Punycode representation of the given domain name.
448
+ */
449
+ function toASCII(domain) {
450
+ return mapDomain(domain, function(string) {
451
+ return regexNonASCII.test(string)
452
+ ? 'xn--' + encode(string)
453
+ : string;
454
+ });
455
+ }
456
+
457
+ /*--------------------------------------------------------------------------*/
458
+
459
+ /** Define the public API */
460
+ punycode = {
461
+ /**
462
+ * A string representing the current Punycode.js version number.
463
+ * @memberOf punycode
464
+ * @type String
465
+ */
466
+ 'version': '1.2.3',
467
+ /**
468
+ * An object of methods to convert from JavaScript's internal character
469
+ * representation (UCS-2) to Unicode code points, and back.
470
+ * @see <http://mathiasbynens.be/notes/javascript-encoding>
471
+ * @memberOf punycode
472
+ * @type Object
473
+ */
474
+ 'ucs2': {
475
+ 'decode': ucs2decode,
476
+ 'encode': ucs2encode
477
+ },
478
+ 'decode': decode,
479
+ 'encode': encode,
480
+ 'toASCII': toASCII,
481
+ 'toUnicode': toUnicode
482
+ };
483
+
484
+ /** Expose `punycode` */
485
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
486
+ // like the following:
487
+ if (
488
+ typeof define == 'function' &&
489
+ typeof define.amd == 'object' &&
490
+ define.amd
491
+ ) {
492
+ define(function() {
493
+ return punycode;
494
+ });
495
+ } else if (freeExports && !freeExports.nodeType) {
496
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
497
+ freeModule.exports = punycode;
498
+ } else { // in Narwhal or RingoJS v0.7.0-
499
+ for (key in punycode) {
500
+ punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
501
+ }
502
+ }
503
+ } else { // in Rhino or a web browser
504
+ root.punycode = punycode;
505
+ }
506
+
507
+ }(this));