macgyver 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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));