Dexter Jin

Unnecessary Node Modules Deleted

Showing 1000 changed files with 0 additions and 3712 deletions

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

1 -../acorn/bin/acorn
...\ No newline at end of file ...\ No newline at end of file
1 -../babel-cli/bin/babel.js
...\ No newline at end of file ...\ No newline at end of file
1 -../babel-cli/bin/babel-doctor.js
...\ No newline at end of file ...\ No newline at end of file
1 -../babel-cli/bin/babel-external-helpers.js
...\ No newline at end of file ...\ No newline at end of file
1 -../babel-cli/bin/babel-node.js
...\ No newline at end of file ...\ No newline at end of file
1 -../babylon/bin/babylon.js
...\ No newline at end of file ...\ No newline at end of file
1 -../casperjs/bin/casperjs
...\ No newline at end of file ...\ No newline at end of file
1 -../eslint/bin/eslint.js
...\ No newline at end of file ...\ No newline at end of file
1 -../esprima/bin/esparse.js
...\ No newline at end of file ...\ No newline at end of file
1 -../esprima/bin/esvalidate.js
...\ No newline at end of file ...\ No newline at end of file
1 -../extract-zip/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../hogan.js/bin/hulk
...\ No newline at end of file ...\ No newline at end of file
1 -../js-yaml/bin/js-yaml.js
...\ No newline at end of file ...\ No newline at end of file
1 -../jsesc/bin/jsesc
...\ No newline at end of file ...\ No newline at end of file
1 -../json5/lib/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../knex/bin/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../loose-envify/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../mime/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../mkdirp/bin/cmd.js
...\ No newline at end of file ...\ No newline at end of file
1 -../nopt/bin/nopt.js
...\ No newline at end of file ...\ No newline at end of file
1 -../phantomjs/bin/phantomjs
...\ No newline at end of file ...\ No newline at end of file
1 -../regjsparser/bin/parser
...\ No newline at end of file ...\ No newline at end of file
1 -../rimraf/bin.js
...\ No newline at end of file ...\ No newline at end of file
1 -../semver/bin/semver
...\ No newline at end of file ...\ No newline at end of file
1 -../shelljs/bin/shjs
...\ No newline at end of file ...\ No newline at end of file
1 -../sshpk/bin/sshpk-conv
...\ No newline at end of file ...\ No newline at end of file
1 -../sshpk/bin/sshpk-sign
...\ No newline at end of file ...\ No newline at end of file
1 -../sshpk/bin/sshpk-verify
...\ No newline at end of file ...\ No newline at end of file
1 -../user-home/cli.js
...\ No newline at end of file ...\ No newline at end of file
1 -../uuid/bin/uuid
...\ No newline at end of file ...\ No newline at end of file
1 -../which/bin/which
...\ No newline at end of file ...\ No newline at end of file
1 - MIT License
2 -
3 - Copyright (c) Microsoft Corporation. All rights reserved.
4 -
5 - Permission is hereby granted, free of charge, to any person obtaining a copy
6 - of this software and associated documentation files (the "Software"), to deal
7 - in the Software without restriction, including without limitation the rights
8 - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 - copies of the Software, and to permit persons to whom the Software is
10 - furnished to do so, subject to the following conditions:
11 -
12 - The above copyright notice and this permission notice shall be included in all
13 - copies or substantial portions of the Software.
14 -
15 - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 - SOFTWARE
1 -# Installation
2 -> `npm install --save @types/node`
3 -
4 -# Summary
5 -This package contains type definitions for Node.js (http://nodejs.org/).
6 -
7 -# Details
8 -Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node
9 -
10 -Additional Details
11 - * Last updated: Wed, 15 Nov 2017 23:11:40 GMT
12 - * Dependencies: events, net, stream, url, child_process, tls, http, readline, dns, crypto, fs
13 - * Global values: Buffer, NodeJS, SlowBuffer, Symbol, __dirname, __filename, clearImmediate, clearInterval, clearTimeout, console, exports, global, module, process, require, setImmediate, setInterval, setTimeout
14 -
15 -# Credits
16 -These definitions were written by Microsoft TypeScript <http://typescriptlang.org>, DefinitelyTyped <https://github.com/DefinitelyTyped/DefinitelyTyped>, Parambir Singh <https://github.com/parambirs>, Christian Vaagland Tellnes <https://github.com/tellnes>, Wilco Bakker <https://github.com/WilcoBakker>, Nicolas Voigt <https://github.com/octo-sniffle>, Chigozirim C. <https://github.com/smac89>, Flarna <https://github.com/Flarna>, Mariusz Wiktorczyk <https://github.com/mwiktorczyk>, wwwy3y3 <https://github.com/wwwy3y3>, Deividas Bakanas <https://github.com/DeividasBakanas>, Kelvin Jin <https://github.com/kjin>, Alvis HT Tang <https://github.com/alvis>, Oliver Joseph Ash <https://github.com/OliverJAsh>, Sebastian Silbermann <https://github.com/eps1lon>.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 -{
2 - "_args": [
3 - [
4 - {
5 - "raw": "@types/node@*",
6 - "scope": "@types",
7 - "escapedName": "@types%2fnode",
8 - "name": "@types/node",
9 - "rawSpec": "*",
10 - "spec": "*",
11 - "type": "range"
12 - },
13 - "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/parse5"
14 - ]
15 - ],
16 - "_from": "@types/node@*",
17 - "_id": "@types/node@8.0.53",
18 - "_inCache": true,
19 - "_location": "/@types/node",
20 - "_npmOperationalInternal": {
21 - "host": "s3://npm-registry-packages",
22 - "tmp": "tmp/node-8.0.53.tgz_1510787550776_0.5821074724663049"
23 - },
24 - "_npmUser": {
25 - "name": "types",
26 - "email": "ts-npm-types@microsoft.com"
27 - },
28 - "_phantomChildren": {},
29 - "_requested": {
30 - "raw": "@types/node@*",
31 - "scope": "@types",
32 - "escapedName": "@types%2fnode",
33 - "name": "@types/node",
34 - "rawSpec": "*",
35 - "spec": "*",
36 - "type": "range"
37 - },
38 - "_requiredBy": [
39 - "/parse5"
40 - ],
41 - "_resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.53.tgz",
42 - "_shasum": "396b35af826fa66aad472c8cb7b8d5e277f4e6d8",
43 - "_shrinkwrap": null,
44 - "_spec": "@types/node@*",
45 - "_where": "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/parse5",
46 - "contributors": [
47 - {
48 - "name": "Microsoft TypeScript",
49 - "url": "http://typescriptlang.org"
50 - },
51 - {
52 - "name": "DefinitelyTyped",
53 - "url": "https://github.com/DefinitelyTyped/DefinitelyTyped"
54 - },
55 - {
56 - "name": "Parambir Singh",
57 - "url": "https://github.com/parambirs"
58 - },
59 - {
60 - "name": "Christian Vaagland Tellnes",
61 - "url": "https://github.com/tellnes"
62 - },
63 - {
64 - "name": "Wilco Bakker",
65 - "url": "https://github.com/WilcoBakker"
66 - },
67 - {
68 - "name": "Nicolas Voigt",
69 - "url": "https://github.com/octo-sniffle"
70 - },
71 - {
72 - "name": "Chigozirim C.",
73 - "url": "https://github.com/smac89"
74 - },
75 - {
76 - "name": "Flarna",
77 - "url": "https://github.com/Flarna"
78 - },
79 - {
80 - "name": "Mariusz Wiktorczyk",
81 - "url": "https://github.com/mwiktorczyk"
82 - },
83 - {
84 - "name": "wwwy3y3",
85 - "url": "https://github.com/wwwy3y3"
86 - },
87 - {
88 - "name": "Deividas Bakanas",
89 - "url": "https://github.com/DeividasBakanas"
90 - },
91 - {
92 - "name": "Kelvin Jin",
93 - "url": "https://github.com/kjin"
94 - },
95 - {
96 - "name": "Alvis HT Tang",
97 - "url": "https://github.com/alvis"
98 - },
99 - {
100 - "name": "Oliver Joseph Ash",
101 - "url": "https://github.com/OliverJAsh"
102 - },
103 - {
104 - "name": "Sebastian Silbermann",
105 - "url": "https://github.com/eps1lon"
106 - }
107 - ],
108 - "dependencies": {},
109 - "description": "TypeScript definitions for Node.js",
110 - "devDependencies": {},
111 - "directories": {},
112 - "dist": {
113 - "integrity": "sha512-54Dm6NwYeiSQmRB1BLXKr5GELi0wFapR1npi8bnZhEcu84d/yQKqnwwXQ56hZ0RUbTG6L5nqDZaN3dgByQXQRQ==",
114 - "shasum": "396b35af826fa66aad472c8cb7b8d5e277f4e6d8",
115 - "tarball": "https://registry.npmjs.org/@types/node/-/node-8.0.53.tgz"
116 - },
117 - "license": "MIT",
118 - "main": "",
119 - "maintainers": [
120 - {
121 - "name": "types",
122 - "email": "ts-npm-types@microsoft.com"
123 - }
124 - ],
125 - "name": "@types/node",
126 - "optionalDependencies": {},
127 - "readme": "ERROR: No README data found!",
128 - "repository": {
129 - "type": "git",
130 - "url": "https://www.github.com/DefinitelyTyped/DefinitelyTyped.git"
131 - },
132 - "scripts": {},
133 - "typeScriptVersion": "2.0",
134 - "typesPublisherContentHash": "7628c177ed2033fe9d4dfbbef0851ddb49397afbd2e4cd6f04aea9b9b4f1996f",
135 - "version": "8.0.53"
136 -}
1 -This software is dual-licensed under the ISC and MIT licenses.
2 -You may use this software under EITHER of the following licenses.
3 -
4 -----------
5 -
6 -The ISC License
7 -
8 -Copyright (c) Isaac Z. Schlueter and Contributors
9 -
10 -Permission to use, copy, modify, and/or distribute this software for any
11 -purpose with or without fee is hereby granted, provided that the above
12 -copyright notice and this permission notice appear in all copies.
13 -
14 -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15 -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16 -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
17 -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19 -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
20 -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 -
22 -----------
23 -
24 -Copyright Isaac Z. Schlueter and Contributors
25 -All rights reserved.
26 -
27 -Permission is hereby granted, free of charge, to any person
28 -obtaining a copy of this software and associated documentation
29 -files (the "Software"), to deal in the Software without
30 -restriction, including without limitation the rights to use,
31 -copy, modify, merge, publish, distribute, sublicense, and/or sell
32 -copies of the Software, and to permit persons to whom the
33 -Software is furnished to do so, subject to the following
34 -conditions:
35 -
36 -The above copyright notice and this permission notice shall be
37 -included in all copies or substantial portions of the Software.
38 -
39 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
40 -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
41 -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
42 -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
43 -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
44 -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
45 -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
46 -OTHER DEALINGS IN THE SOFTWARE.
1 -# abbrev-js
2 -
3 -Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).
4 -
5 -Usage:
6 -
7 - var abbrev = require("abbrev");
8 - abbrev("foo", "fool", "folding", "flop");
9 -
10 - // returns:
11 - { fl: 'flop'
12 - , flo: 'flop'
13 - , flop: 'flop'
14 - , fol: 'folding'
15 - , fold: 'folding'
16 - , foldi: 'folding'
17 - , foldin: 'folding'
18 - , folding: 'folding'
19 - , foo: 'foo'
20 - , fool: 'fool'
21 - }
22 -
23 -This is handy for command-line scripts, or other cases where you want to be able to accept shorthands.
1 -module.exports = exports = abbrev.abbrev = abbrev
2 -
3 -abbrev.monkeyPatch = monkeyPatch
4 -
5 -function monkeyPatch () {
6 - Object.defineProperty(Array.prototype, 'abbrev', {
7 - value: function () { return abbrev(this) },
8 - enumerable: false, configurable: true, writable: true
9 - })
10 -
11 - Object.defineProperty(Object.prototype, 'abbrev', {
12 - value: function () { return abbrev(Object.keys(this)) },
13 - enumerable: false, configurable: true, writable: true
14 - })
15 -}
16 -
17 -function abbrev (list) {
18 - if (arguments.length !== 1 || !Array.isArray(list)) {
19 - list = Array.prototype.slice.call(arguments, 0)
20 - }
21 - for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
22 - args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
23 - }
24 -
25 - // sort them lexicographically, so that they're next to their nearest kin
26 - args = args.sort(lexSort)
27 -
28 - // walk through each, seeing how much it has in common with the next and previous
29 - var abbrevs = {}
30 - , prev = ""
31 - for (var i = 0, l = args.length ; i < l ; i ++) {
32 - var current = args[i]
33 - , next = args[i + 1] || ""
34 - , nextMatches = true
35 - , prevMatches = true
36 - if (current === next) continue
37 - for (var j = 0, cl = current.length ; j < cl ; j ++) {
38 - var curChar = current.charAt(j)
39 - nextMatches = nextMatches && curChar === next.charAt(j)
40 - prevMatches = prevMatches && curChar === prev.charAt(j)
41 - if (!nextMatches && !prevMatches) {
42 - j ++
43 - break
44 - }
45 - }
46 - prev = current
47 - if (j === cl) {
48 - abbrevs[current] = current
49 - continue
50 - }
51 - for (var a = current.substr(0, j) ; j <= cl ; j ++) {
52 - abbrevs[a] = current
53 - a += current.charAt(j)
54 - }
55 - }
56 - return abbrevs
57 -}
58 -
59 -function lexSort (a, b) {
60 - return a === b ? 0 : a > b ? 1 : -1
61 -}
1 -{
2 - "_args": [
3 - [
4 - {
5 - "raw": "abbrev@1",
6 - "scope": null,
7 - "escapedName": "abbrev",
8 - "name": "abbrev",
9 - "rawSpec": "1",
10 - "spec": ">=1.0.0 <2.0.0",
11 - "type": "range"
12 - },
13 - "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/nopt"
14 - ]
15 - ],
16 - "_from": "abbrev@>=1.0.0 <2.0.0",
17 - "_id": "abbrev@1.1.1",
18 - "_inCache": true,
19 - "_location": "/abbrev",
20 - "_nodeVersion": "8.5.0",
21 - "_npmOperationalInternal": {
22 - "host": "s3://npm-registry-packages",
23 - "tmp": "tmp/abbrev-1.1.1.tgz_1506566833068_0.05750026390887797"
24 - },
25 - "_npmUser": {
26 - "name": "isaacs",
27 - "email": "i@izs.me"
28 - },
29 - "_npmVersion": "5.4.2",
30 - "_phantomChildren": {},
31 - "_requested": {
32 - "raw": "abbrev@1",
33 - "scope": null,
34 - "escapedName": "abbrev",
35 - "name": "abbrev",
36 - "rawSpec": "1",
37 - "spec": ">=1.0.0 <2.0.0",
38 - "type": "range"
39 - },
40 - "_requiredBy": [
41 - "/nopt"
42 - ],
43 - "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
44 - "_shasum": "f8f2c887ad10bf67f634f005b6987fed3179aac8",
45 - "_shrinkwrap": null,
46 - "_spec": "abbrev@1",
47 - "_where": "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/nopt",
48 - "author": {
49 - "name": "Isaac Z. Schlueter",
50 - "email": "i@izs.me"
51 - },
52 - "bugs": {
53 - "url": "https://github.com/isaacs/abbrev-js/issues"
54 - },
55 - "dependencies": {},
56 - "description": "Like ruby's abbrev module, but in js",
57 - "devDependencies": {
58 - "tap": "^10.1"
59 - },
60 - "directories": {},
61 - "dist": {
62 - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
63 - "shasum": "f8f2c887ad10bf67f634f005b6987fed3179aac8",
64 - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
65 - },
66 - "files": [
67 - "abbrev.js"
68 - ],
69 - "gitHead": "a9ee72ebc8fe3975f1b0c7aeb3a8f2a806a432eb",
70 - "homepage": "https://github.com/isaacs/abbrev-js#readme",
71 - "license": "ISC",
72 - "main": "abbrev.js",
73 - "maintainers": [
74 - {
75 - "name": "gabra",
76 - "email": "jerry+1@npmjs.com"
77 - },
78 - {
79 - "name": "isaacs",
80 - "email": "i@izs.me"
81 - }
82 - ],
83 - "name": "abbrev",
84 - "optionalDependencies": {},
85 - "readme": "ERROR: No README data found!",
86 - "repository": {
87 - "type": "git",
88 - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
89 - },
90 - "scripts": {
91 - "postpublish": "git push origin --all; git push origin --tags",
92 - "postversion": "npm publish",
93 - "preversion": "npm test",
94 - "test": "tap test.js --100"
95 - },
96 - "version": "1.1.1"
97 -}
1 -1.3.4 / 2017-08-22
2 -==================
3 -
4 - * deps: mime-types@~2.1.16
5 - - deps: mime-db@~1.29.0
6 -
7 -1.3.3 / 2016-05-02
8 -==================
9 -
10 - * deps: mime-types@~2.1.11
11 - - deps: mime-db@~1.23.0
12 - * deps: negotiator@0.6.1
13 - - perf: improve `Accept` parsing speed
14 - - perf: improve `Accept-Charset` parsing speed
15 - - perf: improve `Accept-Encoding` parsing speed
16 - - perf: improve `Accept-Language` parsing speed
17 -
18 -1.3.2 / 2016-03-08
19 -==================
20 -
21 - * deps: mime-types@~2.1.10
22 - - Fix extension of `application/dash+xml`
23 - - Update primary extension for `audio/mp4`
24 - - deps: mime-db@~1.22.0
25 -
26 -1.3.1 / 2016-01-19
27 -==================
28 -
29 - * deps: mime-types@~2.1.9
30 - - deps: mime-db@~1.21.0
31 -
32 -1.3.0 / 2015-09-29
33 -==================
34 -
35 - * deps: mime-types@~2.1.7
36 - - deps: mime-db@~1.19.0
37 - * deps: negotiator@0.6.0
38 - - Fix including type extensions in parameters in `Accept` parsing
39 - - Fix parsing `Accept` parameters with quoted equals
40 - - Fix parsing `Accept` parameters with quoted semicolons
41 - - Lazy-load modules from main entry point
42 - - perf: delay type concatenation until needed
43 - - perf: enable strict mode
44 - - perf: hoist regular expressions
45 - - perf: remove closures getting spec properties
46 - - perf: remove a closure from media type parsing
47 - - perf: remove property delete from media type parsing
48 -
49 -1.2.13 / 2015-09-06
50 -===================
51 -
52 - * deps: mime-types@~2.1.6
53 - - deps: mime-db@~1.18.0
54 -
55 -1.2.12 / 2015-07-30
56 -===================
57 -
58 - * deps: mime-types@~2.1.4
59 - - deps: mime-db@~1.16.0
60 -
61 -1.2.11 / 2015-07-16
62 -===================
63 -
64 - * deps: mime-types@~2.1.3
65 - - deps: mime-db@~1.15.0
66 -
67 -1.2.10 / 2015-07-01
68 -===================
69 -
70 - * deps: mime-types@~2.1.2
71 - - deps: mime-db@~1.14.0
72 -
73 -1.2.9 / 2015-06-08
74 -==================
75 -
76 - * deps: mime-types@~2.1.1
77 - - perf: fix deopt during mapping
78 -
79 -1.2.8 / 2015-06-07
80 -==================
81 -
82 - * deps: mime-types@~2.1.0
83 - - deps: mime-db@~1.13.0
84 - * perf: avoid argument reassignment & argument slice
85 - * perf: avoid negotiator recursive construction
86 - * perf: enable strict mode
87 - * perf: remove unnecessary bitwise operator
88 -
89 -1.2.7 / 2015-05-10
90 -==================
91 -
92 - * deps: negotiator@0.5.3
93 - - Fix media type parameter matching to be case-insensitive
94 -
95 -1.2.6 / 2015-05-07
96 -==================
97 -
98 - * deps: mime-types@~2.0.11
99 - - deps: mime-db@~1.9.1
100 - * deps: negotiator@0.5.2
101 - - Fix comparing media types with quoted values
102 - - Fix splitting media types with quoted commas
103 -
104 -1.2.5 / 2015-03-13
105 -==================
106 -
107 - * deps: mime-types@~2.0.10
108 - - deps: mime-db@~1.8.0
109 -
110 -1.2.4 / 2015-02-14
111 -==================
112 -
113 - * Support Node.js 0.6
114 - * deps: mime-types@~2.0.9
115 - - deps: mime-db@~1.7.0
116 - * deps: negotiator@0.5.1
117 - - Fix preference sorting to be stable for long acceptable lists
118 -
119 -1.2.3 / 2015-01-31
120 -==================
121 -
122 - * deps: mime-types@~2.0.8
123 - - deps: mime-db@~1.6.0
124 -
125 -1.2.2 / 2014-12-30
126 -==================
127 -
128 - * deps: mime-types@~2.0.7
129 - - deps: mime-db@~1.5.0
130 -
131 -1.2.1 / 2014-12-30
132 -==================
133 -
134 - * deps: mime-types@~2.0.5
135 - - deps: mime-db@~1.3.1
136 -
137 -1.2.0 / 2014-12-19
138 -==================
139 -
140 - * deps: negotiator@0.5.0
141 - - Fix list return order when large accepted list
142 - - Fix missing identity encoding when q=0 exists
143 - - Remove dynamic building of Negotiator class
144 -
145 -1.1.4 / 2014-12-10
146 -==================
147 -
148 - * deps: mime-types@~2.0.4
149 - - deps: mime-db@~1.3.0
150 -
151 -1.1.3 / 2014-11-09
152 -==================
153 -
154 - * deps: mime-types@~2.0.3
155 - - deps: mime-db@~1.2.0
156 -
157 -1.1.2 / 2014-10-14
158 -==================
159 -
160 - * deps: negotiator@0.4.9
161 - - Fix error when media type has invalid parameter
162 -
163 -1.1.1 / 2014-09-28
164 -==================
165 -
166 - * deps: mime-types@~2.0.2
167 - - deps: mime-db@~1.1.0
168 - * deps: negotiator@0.4.8
169 - - Fix all negotiations to be case-insensitive
170 - - Stable sort preferences of same quality according to client order
171 -
172 -1.1.0 / 2014-09-02
173 -==================
174 -
175 - * update `mime-types`
176 -
177 -1.0.7 / 2014-07-04
178 -==================
179 -
180 - * Fix wrong type returned from `type` when match after unknown extension
181 -
182 -1.0.6 / 2014-06-24
183 -==================
184 -
185 - * deps: negotiator@0.4.7
186 -
187 -1.0.5 / 2014-06-20
188 -==================
189 -
190 - * fix crash when unknown extension given
191 -
192 -1.0.4 / 2014-06-19
193 -==================
194 -
195 - * use `mime-types`
196 -
197 -1.0.3 / 2014-06-11
198 -==================
199 -
200 - * deps: negotiator@0.4.6
201 - - Order by specificity when quality is the same
202 -
203 -1.0.2 / 2014-05-29
204 -==================
205 -
206 - * Fix interpretation when header not in request
207 - * deps: pin negotiator@0.4.5
208 -
209 -1.0.1 / 2014-01-18
210 -==================
211 -
212 - * Identity encoding isn't always acceptable
213 - * deps: negotiator@~0.4.0
214 -
215 -1.0.0 / 2013-12-27
216 -==================
217 -
218 - * Genesis
1 -(The MIT License)
2 -
3 -Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
4 -Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
5 -
6 -Permission is hereby granted, free of charge, to any person obtaining
7 -a copy of this software and associated documentation files (the
8 -'Software'), to deal in the Software without restriction, including
9 -without limitation the rights to use, copy, modify, merge, publish,
10 -distribute, sublicense, and/or sell copies of the Software, and to
11 -permit persons to whom the Software is furnished to do so, subject to
12 -the following conditions:
13 -
14 -The above copyright notice and this permission notice shall be
15 -included in all copies or substantial portions of the Software.
16 -
17 -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
18 -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21 -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1 -# accepts
2 -
3 -[![NPM Version][npm-image]][npm-url]
4 -[![NPM Downloads][downloads-image]][downloads-url]
5 -[![Node.js Version][node-version-image]][node-version-url]
6 -[![Build Status][travis-image]][travis-url]
7 -[![Test Coverage][coveralls-image]][coveralls-url]
8 -
9 -Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
10 -Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
11 -
12 -In addition to negotiator, it allows:
13 -
14 -- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
15 - as well as `('text/html', 'application/json')`.
16 -- Allows type shorthands such as `json`.
17 -- Returns `false` when no types match
18 -- Treats non-existent headers as `*`
19 -
20 -## Installation
21 -
22 -This is a [Node.js](https://nodejs.org/en/) module available through the
23 -[npm registry](https://www.npmjs.com/). Installation is done using the
24 -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
25 -
26 -```sh
27 -$ npm install accepts
28 -```
29 -
30 -## API
31 -
32 -<!-- eslint-disable no-unused-vars -->
33 -
34 -```js
35 -var accepts = require('accepts')
36 -```
37 -
38 -### accepts(req)
39 -
40 -Create a new `Accepts` object for the given `req`.
41 -
42 -#### .charset(charsets)
43 -
44 -Return the first accepted charset. If nothing in `charsets` is accepted,
45 -then `false` is returned.
46 -
47 -#### .charsets()
48 -
49 -Return the charsets that the request accepts, in the order of the client's
50 -preference (most preferred first).
51 -
52 -#### .encoding(encodings)
53 -
54 -Return the first accepted encoding. If nothing in `encodings` is accepted,
55 -then `false` is returned.
56 -
57 -#### .encodings()
58 -
59 -Return the encodings that the request accepts, in the order of the client's
60 -preference (most preferred first).
61 -
62 -#### .language(languages)
63 -
64 -Return the first accepted language. If nothing in `languages` is accepted,
65 -then `false` is returned.
66 -
67 -#### .languages()
68 -
69 -Return the languages that the request accepts, in the order of the client's
70 -preference (most preferred first).
71 -
72 -#### .type(types)
73 -
74 -Return the first accepted type (and it is returned as the same text as what
75 -appears in the `types` array). If nothing in `types` is accepted, then `false`
76 -is returned.
77 -
78 -The `types` array can contain full MIME types or file extensions. Any value
79 -that is not a full MIME types is passed to `require('mime-types').lookup`.
80 -
81 -#### .types()
82 -
83 -Return the types that the request accepts, in the order of the client's
84 -preference (most preferred first).
85 -
86 -## Examples
87 -
88 -### Simple type negotiation
89 -
90 -This simple example shows how to use `accepts` to return a different typed
91 -respond body based on what the client wants to accept. The server lists it's
92 -preferences in order and will get back the best match between the client and
93 -server.
94 -
95 -```js
96 -var accepts = require('accepts')
97 -var http = require('http')
98 -
99 -function app (req, res) {
100 - var accept = accepts(req)
101 -
102 - // the order of this list is significant; should be server preferred order
103 - switch (accept.type(['json', 'html'])) {
104 - case 'json':
105 - res.setHeader('Content-Type', 'application/json')
106 - res.write('{"hello":"world!"}')
107 - break
108 - case 'html':
109 - res.setHeader('Content-Type', 'text/html')
110 - res.write('<b>hello, world!</b>')
111 - break
112 - default:
113 - // the fallback is text/plain, so no need to specify it above
114 - res.setHeader('Content-Type', 'text/plain')
115 - res.write('hello, world!')
116 - break
117 - }
118 -
119 - res.end()
120 -}
121 -
122 -http.createServer(app).listen(3000)
123 -```
124 -
125 -You can test this out with the cURL program:
126 -```sh
127 -curl -I -H'Accept: text/html' http://localhost:3000/
128 -```
129 -
130 -## License
131 -
132 -[MIT](LICENSE)
133 -
134 -[npm-image]: https://img.shields.io/npm/v/accepts.svg
135 -[npm-url]: https://npmjs.org/package/accepts
136 -[node-version-image]: https://img.shields.io/node/v/accepts.svg
137 -[node-version-url]: https://nodejs.org/en/download/
138 -[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg
139 -[travis-url]: https://travis-ci.org/jshttp/accepts
140 -[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg
141 -[coveralls-url]: https://coveralls.io/r/jshttp/accepts
142 -[downloads-image]: https://img.shields.io/npm/dm/accepts.svg
143 -[downloads-url]: https://npmjs.org/package/accepts
1 -/*!
2 - * accepts
3 - * Copyright(c) 2014 Jonathan Ong
4 - * Copyright(c) 2015 Douglas Christopher Wilson
5 - * MIT Licensed
6 - */
7 -
8 -'use strict'
9 -
10 -/**
11 - * Module dependencies.
12 - * @private
13 - */
14 -
15 -var Negotiator = require('negotiator')
16 -var mime = require('mime-types')
17 -
18 -/**
19 - * Module exports.
20 - * @public
21 - */
22 -
23 -module.exports = Accepts
24 -
25 -/**
26 - * Create a new Accepts object for the given req.
27 - *
28 - * @param {object} req
29 - * @public
30 - */
31 -
32 -function Accepts (req) {
33 - if (!(this instanceof Accepts)) {
34 - return new Accepts(req)
35 - }
36 -
37 - this.headers = req.headers
38 - this.negotiator = new Negotiator(req)
39 -}
40 -
41 -/**
42 - * Check if the given `type(s)` is acceptable, returning
43 - * the best match when true, otherwise `undefined`, in which
44 - * case you should respond with 406 "Not Acceptable".
45 - *
46 - * The `type` value may be a single mime type string
47 - * such as "application/json", the extension name
48 - * such as "json" or an array `["json", "html", "text/plain"]`. When a list
49 - * or array is given the _best_ match, if any is returned.
50 - *
51 - * Examples:
52 - *
53 - * // Accept: text/html
54 - * this.types('html');
55 - * // => "html"
56 - *
57 - * // Accept: text/*, application/json
58 - * this.types('html');
59 - * // => "html"
60 - * this.types('text/html');
61 - * // => "text/html"
62 - * this.types('json', 'text');
63 - * // => "json"
64 - * this.types('application/json');
65 - * // => "application/json"
66 - *
67 - * // Accept: text/*, application/json
68 - * this.types('image/png');
69 - * this.types('png');
70 - * // => undefined
71 - *
72 - * // Accept: text/*;q=.5, application/json
73 - * this.types(['html', 'json']);
74 - * this.types('html', 'json');
75 - * // => "json"
76 - *
77 - * @param {String|Array} types...
78 - * @return {String|Array|Boolean}
79 - * @public
80 - */
81 -
82 -Accepts.prototype.type =
83 -Accepts.prototype.types = function (types_) {
84 - var types = types_
85 -
86 - // support flattened arguments
87 - if (types && !Array.isArray(types)) {
88 - types = new Array(arguments.length)
89 - for (var i = 0; i < types.length; i++) {
90 - types[i] = arguments[i]
91 - }
92 - }
93 -
94 - // no types, return all requested types
95 - if (!types || types.length === 0) {
96 - return this.negotiator.mediaTypes()
97 - }
98 -
99 - // no accept header, return first given type
100 - if (!this.headers.accept) {
101 - return types[0]
102 - }
103 -
104 - var mimes = types.map(extToMime)
105 - var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
106 - var first = accepts[0]
107 -
108 - return first
109 - ? types[mimes.indexOf(first)]
110 - : false
111 -}
112 -
113 -/**
114 - * Return accepted encodings or best fit based on `encodings`.
115 - *
116 - * Given `Accept-Encoding: gzip, deflate`
117 - * an array sorted by quality is returned:
118 - *
119 - * ['gzip', 'deflate']
120 - *
121 - * @param {String|Array} encodings...
122 - * @return {String|Array}
123 - * @public
124 - */
125 -
126 -Accepts.prototype.encoding =
127 -Accepts.prototype.encodings = function (encodings_) {
128 - var encodings = encodings_
129 -
130 - // support flattened arguments
131 - if (encodings && !Array.isArray(encodings)) {
132 - encodings = new Array(arguments.length)
133 - for (var i = 0; i < encodings.length; i++) {
134 - encodings[i] = arguments[i]
135 - }
136 - }
137 -
138 - // no encodings, return all requested encodings
139 - if (!encodings || encodings.length === 0) {
140 - return this.negotiator.encodings()
141 - }
142 -
143 - return this.negotiator.encodings(encodings)[0] || false
144 -}
145 -
146 -/**
147 - * Return accepted charsets or best fit based on `charsets`.
148 - *
149 - * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
150 - * an array sorted by quality is returned:
151 - *
152 - * ['utf-8', 'utf-7', 'iso-8859-1']
153 - *
154 - * @param {String|Array} charsets...
155 - * @return {String|Array}
156 - * @public
157 - */
158 -
159 -Accepts.prototype.charset =
160 -Accepts.prototype.charsets = function (charsets_) {
161 - var charsets = charsets_
162 -
163 - // support flattened arguments
164 - if (charsets && !Array.isArray(charsets)) {
165 - charsets = new Array(arguments.length)
166 - for (var i = 0; i < charsets.length; i++) {
167 - charsets[i] = arguments[i]
168 - }
169 - }
170 -
171 - // no charsets, return all requested charsets
172 - if (!charsets || charsets.length === 0) {
173 - return this.negotiator.charsets()
174 - }
175 -
176 - return this.negotiator.charsets(charsets)[0] || false
177 -}
178 -
179 -/**
180 - * Return accepted languages or best fit based on `langs`.
181 - *
182 - * Given `Accept-Language: en;q=0.8, es, pt`
183 - * an array sorted by quality is returned:
184 - *
185 - * ['es', 'pt', 'en']
186 - *
187 - * @param {String|Array} langs...
188 - * @return {Array|String}
189 - * @public
190 - */
191 -
192 -Accepts.prototype.lang =
193 -Accepts.prototype.langs =
194 -Accepts.prototype.language =
195 -Accepts.prototype.languages = function (languages_) {
196 - var languages = languages_
197 -
198 - // support flattened arguments
199 - if (languages && !Array.isArray(languages)) {
200 - languages = new Array(arguments.length)
201 - for (var i = 0; i < languages.length; i++) {
202 - languages[i] = arguments[i]
203 - }
204 - }
205 -
206 - // no languages, return all requested languages
207 - if (!languages || languages.length === 0) {
208 - return this.negotiator.languages()
209 - }
210 -
211 - return this.negotiator.languages(languages)[0] || false
212 -}
213 -
214 -/**
215 - * Convert extnames to mime.
216 - *
217 - * @param {String} type
218 - * @return {String}
219 - * @private
220 - */
221 -
222 -function extToMime (type) {
223 - return type.indexOf('/') === -1
224 - ? mime.lookup(type)
225 - : type
226 -}
227 -
228 -/**
229 - * Check if mime is valid.
230 - *
231 - * @param {String} type
232 - * @return {String}
233 - * @private
234 - */
235 -
236 -function validMime (type) {
237 - return typeof type === 'string'
238 -}
1 -{
2 - "_args": [
3 - [
4 - {
5 - "raw": "accepts@~1.3.3",
6 - "scope": null,
7 - "escapedName": "accepts",
8 - "name": "accepts",
9 - "rawSpec": "~1.3.3",
10 - "spec": ">=1.3.3 <1.4.0",
11 - "type": "range"
12 - },
13 - "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/express"
14 - ]
15 - ],
16 - "_from": "accepts@>=1.3.3 <1.4.0",
17 - "_id": "accepts@1.3.4",
18 - "_inCache": true,
19 - "_location": "/accepts",
20 - "_nodeVersion": "6.11.1",
21 - "_npmOperationalInternal": {
22 - "host": "s3://npm-registry-packages",
23 - "tmp": "tmp/accepts-1.3.4.tgz_1503455053008_0.43370609171688557"
24 - },
25 - "_npmUser": {
26 - "name": "dougwilson",
27 - "email": "doug@somethingdoug.com"
28 - },
29 - "_npmVersion": "3.10.10",
30 - "_phantomChildren": {},
31 - "_requested": {
32 - "raw": "accepts@~1.3.3",
33 - "scope": null,
34 - "escapedName": "accepts",
35 - "name": "accepts",
36 - "rawSpec": "~1.3.3",
37 - "spec": ">=1.3.3 <1.4.0",
38 - "type": "range"
39 - },
40 - "_requiredBy": [
41 - "/express"
42 - ],
43 - "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
44 - "_shasum": "86246758c7dd6d21a6474ff084a4740ec05eb21f",
45 - "_shrinkwrap": null,
46 - "_spec": "accepts@~1.3.3",
47 - "_where": "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/express",
48 - "bugs": {
49 - "url": "https://github.com/jshttp/accepts/issues"
50 - },
51 - "contributors": [
52 - {
53 - "name": "Douglas Christopher Wilson",
54 - "email": "doug@somethingdoug.com"
55 - },
56 - {
57 - "name": "Jonathan Ong",
58 - "email": "me@jongleberry.com",
59 - "url": "http://jongleberry.com"
60 - }
61 - ],
62 - "dependencies": {
63 - "mime-types": "~2.1.16",
64 - "negotiator": "0.6.1"
65 - },
66 - "description": "Higher-level content negotiation",
67 - "devDependencies": {
68 - "eslint": "3.19.0",
69 - "eslint-config-standard": "10.2.1",
70 - "eslint-plugin-import": "2.7.0",
71 - "eslint-plugin-markdown": "1.0.0-beta.6",
72 - "eslint-plugin-node": "5.1.1",
73 - "eslint-plugin-promise": "3.5.0",
74 - "eslint-plugin-standard": "3.0.1",
75 - "istanbul": "0.4.5",
76 - "mocha": "~1.21.5"
77 - },
78 - "directories": {},
79 - "dist": {
80 - "shasum": "86246758c7dd6d21a6474ff084a4740ec05eb21f",
81 - "tarball": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz"
82 - },
83 - "engines": {
84 - "node": ">= 0.6"
85 - },
86 - "files": [
87 - "LICENSE",
88 - "HISTORY.md",
89 - "index.js"
90 - ],
91 - "gitHead": "71ea430741d6eb5484b6c67c95924540a98186a5",
92 - "homepage": "https://github.com/jshttp/accepts#readme",
93 - "keywords": [
94 - "content",
95 - "negotiation",
96 - "accept",
97 - "accepts"
98 - ],
99 - "license": "MIT",
100 - "maintainers": [
101 - {
102 - "name": "dougwilson",
103 - "email": "doug@somethingdoug.com"
104 - }
105 - ],
106 - "name": "accepts",
107 - "optionalDependencies": {},
108 - "readme": "ERROR: No README data found!",
109 - "repository": {
110 - "type": "git",
111 - "url": "git+https://github.com/jshttp/accepts.git"
112 - },
113 - "scripts": {
114 - "lint": "eslint --plugin markdown --ext js,md .",
115 - "test": "mocha --reporter spec --check-leaks --bail test/",
116 - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
117 - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
118 - },
119 - "version": "1.3.4"
120 -}
1 -Copyright (C) 2012-2014 by Ingvar Stepanyan
2 -
3 -Permission is hereby granted, free of charge, to any person obtaining a copy
4 -of this software and associated documentation files (the "Software"), to deal
5 -in the Software without restriction, including without limitation the rights
6 -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 -copies of the Software, and to permit persons to whom the Software is
8 -furnished to do so, subject to the following conditions:
9 -
10 -The above copyright notice and this permission notice shall be included in
11 -all copies or substantial portions of the Software.
12 -
13 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 -THE SOFTWARE.
1 -# Acorn-JSX
2 -
3 -[![Build Status](https://travis-ci.org/RReverser/acorn-jsx.svg?branch=master)](https://travis-ci.org/RReverser/acorn-jsx)
4 -[![NPM version](https://img.shields.io/npm/v/acorn-jsx.svg)](https://www.npmjs.org/package/acorn-jsx)
5 -
6 -This is plugin for [Acorn](http://marijnhaverbeke.nl/acorn/) - a tiny, fast JavaScript parser, written completely in JavaScript.
7 -
8 -It was created as an experimental alternative, faster [React.js JSX](http://facebook.github.io/react/docs/jsx-in-depth.html) parser.
9 -
10 -According to [benchmarks](https://github.com/RReverser/acorn-jsx/blob/master/test/bench.html), Acorn-JSX is 2x faster than official [Esprima-based parser](https://github.com/facebook/esprima) when location tracking is turned on in both (call it "source maps enabled mode"). At the same time, it consumes all the ES6+JSX syntax that can be consumed by Esprima-FB (this is proved by [official tests](https://github.com/RReverser/acorn-jsx/blob/master/test/tests-jsx.js)).
11 -
12 -**UPDATE [14-Apr-2015]**: Facebook implementation started [deprecation process](https://github.com/facebook/esprima/issues/111) in favor of Acorn + Acorn-JSX + Babel for parsing and transpiling JSX syntax.
13 -
14 -## Transpiler
15 -
16 -Please note that this tool only parses source code to JSX AST, which is useful for various language tools and services. If you want to transpile your code to regular ES5-compliant JavaScript with source map, check out the [babel transpiler](https://babeljs.io/) which uses `acorn-jsx` under the hood.
17 -
18 -## Usage
19 -
20 -You can use module directly in order to get Acorn instance with plugin installed:
21 -
22 -```javascript
23 -var acorn = require('acorn-jsx');
24 -```
25 -
26 -Or you can use `inject.js` for injecting plugin into your own version of Acorn like following:
27 -
28 -```javascript
29 -var acorn = require('acorn-jsx/inject')(require('./custom-acorn'));
30 -```
31 -
32 -Then, use `plugins` option whenever you need to support JSX while parsing:
33 -
34 -```javascript
35 -var ast = acorn.parse(code, {
36 - plugins: { jsx: true }
37 -});
38 -```
39 -
40 -Note that official spec doesn't support mix of XML namespaces and object-style access in tag names (#27) like in `<namespace:Object.Property />`, so it was deprecated in `acorn-jsx@3.0`. If you still want to opt-in to support of such constructions, you can pass the following option:
41 -
42 -```javascript
43 -var ast = acorn.parse(code, {
44 - plugins: {
45 - jsx: { allowNamespacedObjects: true }
46 - }
47 -});
48 -```
49 -
50 -Also, since most apps use pure React transformer, a new option was introduced that allows to prohibit namespaces completely:
51 -
52 -```javascript
53 -var ast = acorn.parse(code, {
54 - plugins: {
55 - jsx: { allowNamespaces: false }
56 - }
57 -});
58 -```
59 -
60 -Note that by default `allowNamespaces` is enabled for spec compliancy.
61 -
62 -## License
63 -
64 -This plugin is issued under the [MIT license](./LICENSE).
1 -'use strict';
2 -
3 -module.exports = require('./inject')(require('acorn'));
This diff is collapsed. Click to expand it.
1 -../acorn/bin/acorn
...\ No newline at end of file ...\ No newline at end of file
1 -root = true
2 -
3 -[*]
4 -indent_style = space
5 -indent_size = 2
6 -end_of_line = lf
7 -insert_final_newline = true
1 -{
2 - "plugins": {
3 - "node": true,
4 - "es_modules": true
5 - }
6 -}
...\ No newline at end of file ...\ No newline at end of file
1 -language: node_js
2 -sudo: false
3 -node_js:
4 - - '0.12'
5 - - '4'
6 - - '5'
7 - - '6'
1 -List of Acorn contributors. Updated before every release.
2 -
3 -Adrian Rakovsky
4 -Alistair Braidwood
5 -Amila Welihinda
6 -Andres Suarez
7 -Angelo
8 -Aparajita Fishman
9 -Arian Stolwijk
10 -Artem Govorov
11 -Brandon Mills
12 -Charles Hughes
13 -Conrad Irwin
14 -Daniel Tschinder
15 -David Bonnet
16 -Domenico Matteo
17 -ForbesLindesay
18 -Forbes Lindesay
19 -Gilad Peleg
20 -impinball
21 -Ingvar Stepanyan
22 -Jackson Ray Hamilton
23 -Jesse McCarthy
24 -Jiaxing Wang
25 -Joel Kemp
26 -Johannes Herr
27 -Jordan Klassen
28 -Jürg Lehni
29 -keeyipchan
30 -Keheliya Gallaba
31 -Kevin Irish
32 -Kevin Kwok
33 -krator
34 -Marijn Haverbeke
35 -Martin Carlberg
36 -Mathias Bynens
37 -Mathieu 'p01' Henri
38 -Matthew Bastien
39 -Max Schaefer
40 -Max Zerzouri
41 -Mihai Bazon
42 -Mike Rennie
43 -Nicholas C. Zakas
44 -Nick Fitzgerald
45 -Olivier Thomann
46 -Oskar Schöldström
47 -Paul Harper
48 -Peter Rust
49 -PlNG
50 -Prayag Verma
51 -ReadmeCritic
52 -r-e-d
53 -Richard Gibson
54 -Rich Harris
55 -Rich-Harris
56 -Sebastian McKenzie
57 -Timothy Gu
58 -Toru Nagashima
59 -zsjforcn
1 -## 3.3.0 (2016-07-25)
2 -
3 -### Bug fixes
4 -
5 -Fix bug in tokenizing of regexp operator after a function declaration.
6 -
7 -Fix parser crash when parsing an array pattern with a hole.
8 -
9 -### New features
10 -
11 -Implement check against complex argument lists in functions that
12 -enable strict mode in ES7.
13 -
14 -## 3.2.0 (2016-06-07)
15 -
16 -### Bug fixes
17 -
18 -Improve handling of lack of unicode regexp support in host
19 -environment.
20 -
21 -Properly reject shorthand properties whose name is a keyword.
22 -
23 -Don't crash when the loose parser is called without options object.
24 -
25 -### New features
26 -
27 -Visitors created with `visit.make` now have their base as _prototype_,
28 -rather than copying properties into a fresh object.
29 -
30 -Make it possible to use `visit.ancestor` with a walk state.
31 -
32 -## 3.1.0 (2016-04-18)
33 -
34 -### Bug fixes
35 -
36 -Fix issue where the loose parser created invalid TemplateElement nodes
37 -for unclosed template literals.
38 -
39 -Properly tokenize the division operator directly after a function
40 -expression.
41 -
42 -Allow trailing comma in destructuring arrays.
43 -
44 -### New features
45 -
46 -The walker now allows defining handlers for `CatchClause` nodes.
47 -
48 -## 3.0.4 (2016-02-25)
49 -
50 -### Fixes
51 -
52 -Allow update expressions as left-hand-side of the ES7 exponential
53 -operator.
54 -
55 -## 3.0.2 (2016-02-10)
56 -
57 -### Fixes
58 -
59 -Fix bug that accidentally made `undefined` a reserved word when
60 -parsing ES7.
61 -
62 -## 3.0.0 (2016-02-10)
63 -
64 -### Breaking changes
65 -
66 -The default value of the `ecmaVersion` option is now 6 (used to be 5).
67 -
68 -Support for comprehension syntax (which was dropped from the draft
69 -spec) has been removed.
70 -
71 -### Fixes
72 -
73 -`let` and `yield` are now “contextual keywords”, meaning you can
74 -mostly use them as identifiers in ES5 non-strict code.
75 -
76 -A parenthesized class or function expression after `export default` is
77 -now parsed correctly.
78 -
79 -### New features
80 -
81 -When `ecmaVersion` is set to 7, Acorn will parse the exponentiation
82 -operator (`**`).
83 -
84 -The identifier character ranges are now based on Unicode 8.0.0.
85 -
86 -Plugins can now override the `raiseRecoverable` method to override the
87 -way non-critical errors are handled.
88 -
89 -## 2.7.0 (2016-01-04)
90 -
91 -### Fixes
92 -
93 -Stop allowing rest parameters in setters.
94 -
95 -Make sure the loose parser always attaches a `local` property to
96 -`ImportNamespaceSpecifier` nodes.
97 -
98 -Disallow `y` rexexp flag in ES5.
99 -
100 -Disallow `\00` and `\000` escapes in strict mode.
101 -
102 -Raise an error when an import name is a reserved word.
103 -
104 -## 2.6.4 (2015-11-12)
105 -
106 -### Fixes
107 -
108 -Fix crash in loose parser when parsing invalid object pattern.
109 -
110 -### New features
111 -
112 -Support plugins in the loose parser.
113 -
114 -## 2.6.2 (2015-11-10)
115 -
116 -### Fixes
117 -
118 -Don't crash when no options object is passed.
119 -
120 -## 2.6.0 (2015-11-09)
121 -
122 -### Fixes
123 -
124 -Add `await` as a reserved word in module sources.
125 -
126 -Disallow `yield` in a parameter default value for a generator.
127 -
128 -Forbid using a comma after a rest pattern in an array destructuring.
129 -
130 -### New features
131 -
132 -Support parsing stdin in command-line tool.
133 -
134 -## 2.5.2 (2015-10-27)
135 -
136 -### Fixes
137 -
138 -Fix bug where the walker walked an exported `let` statement as an
139 -expression.
140 -
141 -## 2.5.0 (2015-10-27)
142 -
143 -### Fixes
144 -
145 -Fix tokenizer support in the command-line tool.
146 -
147 -In the loose parser, don't allow non-string-literals as import
148 -sources.
149 -
150 -Stop allowing `new.target` outside of functions.
151 -
152 -Remove legacy `guard` and `guardedHandler` properties from try nodes.
153 -
154 -Stop allowing multiple `__proto__` properties on an object literal in
155 -strict mode.
156 -
157 -Don't allow rest parameters to be non-identifier patterns.
158 -
159 -Check for duplicate paramter names in arrow functions.
1 -Copyright (C) 2012-2016 by various contributors (see AUTHORS)
2 -
3 -Permission is hereby granted, free of charge, to any person obtaining a copy
4 -of this software and associated documentation files (the "Software"), to deal
5 -in the Software without restriction, including without limitation the rights
6 -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 -copies of the Software, and to permit persons to whom the Software is
8 -furnished to do so, subject to the following conditions:
9 -
10 -The above copyright notice and this permission notice shall be included in
11 -all copies or substantial portions of the Software.
12 -
13 -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 -THE SOFTWARE.
This diff is collapsed. Click to expand it.
1 -#!/usr/bin/env node
2 -'use strict';
3 -
4 -var path = require('path');
5 -var fs = require('fs');
6 -var acorn = require('../dist/acorn.js');
7 -
8 -var infile;
9 -var forceFile;
10 -var silent = false;
11 -var compact = false;
12 -var tokenize = false;
13 -var options = {}
14 -
15 -function help(status) {
16 - var print = (status == 0) ? console.log : console.error
17 - print("usage: " + path.basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7]")
18 - print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] [infile]")
19 - process.exit(status)
20 -}
21 -
22 -for (var i = 2; i < process.argv.length; ++i) {
23 - var arg = process.argv[i]
24 - if ((arg == "-" || arg[0] != "-") && !infile) infile = arg
25 - else if (arg == "--" && !infile && i + 2 == process.argv.length) forceFile = infile = process.argv[++i]
26 - else if (arg == "--ecma3") options.ecmaVersion = 3
27 - else if (arg == "--ecma5") options.ecmaVersion = 5
28 - else if (arg == "--ecma6") options.ecmaVersion = 6
29 - else if (arg == "--ecma7") options.ecmaVersion = 7
30 - else if (arg == "--locations") options.locations = true
31 - else if (arg == "--allow-hash-bang") options.allowHashBang = true
32 - else if (arg == "--silent") silent = true
33 - else if (arg == "--compact") compact = true
34 - else if (arg == "--help") help(0)
35 - else if (arg == "--tokenize") tokenize = true
36 - else if (arg == "--module") options.sourceType = 'module'
37 - else help(1)
38 -}
39 -
40 -function run(code) {
41 - var result
42 - if (!tokenize) {
43 - try { result = acorn.parse(code, options) }
44 - catch(e) { console.error(e.message); process.exit(1) }
45 - } else {
46 - result = []
47 - var tokenizer = acorn.tokenizer(code, options), token
48 - while (true) {
49 - try { token = tokenizer.getToken() }
50 - catch(e) { console.error(e.message); process.exit(1) }
51 - result.push(token)
52 - if (token.type == acorn.tokTypes.eof) break
53 - }
54 - }
55 - if (!silent) console.log(JSON.stringify(result, null, compact ? null : 2))
56 -}
57 -
58 -if (forceFile || infile && infile != "-") {
59 - run(fs.readFileSync(infile, "utf8"))
60 -} else {
61 - var code = ""
62 - process.stdin.resume()
63 - process.stdin.on("data", function (chunk) { return code += chunk; })
64 - process.stdin.on("end", function () { return run(code); })
65 -}
...\ No newline at end of file ...\ No newline at end of file
1 -'use strict';
2 -
3 -// Which Unicode version should be used?
4 -var version = '9.0.0';
5 -
6 -var start = require('unicode-' + version + '/Binary_Property/ID_Start/code-points.js')
7 - .filter(function(ch) { return ch > 0x7f; });
8 -var last = -1;
9 -var cont = [0x200c, 0x200d].concat(require('unicode-' + version + '/Binary_Property/ID_Continue/code-points.js')
10 - .filter(function(ch) { return ch > 0x7f && search(start, ch, last + 1) == -1; }));
11 -
12 -function search(arr, ch, starting) {
13 - for (var i = starting; arr[i] <= ch && i < arr.length; last = i++)
14 - if (arr[i] === ch)
15 - return i;
16 - return -1;
17 -}
18 -
19 -function pad(str, width) {
20 - while (str.length < width) str = "0" + str;
21 - return str;
22 -}
23 -
24 -function esc(code) {
25 - var hex = code.toString(16);
26 - if (hex.length <= 2) return "\\x" + pad(hex, 2);
27 - else return "\\u" + pad(hex, 4);
28 -}
29 -
30 -function generate(chars) {
31 - var astral = [], re = "";
32 - for (var i = 0, at = 0x10000; i < chars.length; i++) {
33 - var from = chars[i], to = from;
34 - while (i < chars.length - 1 && chars[i + 1] == to + 1) {
35 - i++;
36 - to++;
37 - }
38 - if (to <= 0xffff) {
39 - if (from == to) re += esc(from);
40 - else if (from + 1 == to) re += esc(from) + esc(to);
41 - else re += esc(from) + "-" + esc(to);
42 - } else {
43 - astral.push(from - at, to - from);
44 - at = to;
45 - }
46 - }
47 - return {nonASCII: re, astral: astral};
48 -}
49 -
50 -var startData = generate(start), contData = generate(cont);
51 -
52 -console.log("let nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\"");
53 -console.log("let nonASCIIidentifierChars = \"" + contData.nonASCII + "\"");
54 -console.log("const astralIdentifierStartCodes = " + JSON.stringify(startData.astral));
55 -console.log("const astralIdentifierCodes = " + JSON.stringify(contData.astral));
1 -# Combine existing list of authors with everyone known in git, sort, add header.
2 -tail --lines=+3 AUTHORS > AUTHORS.tmp
3 -git log --format='%aN' | grep -v abraidwood >> AUTHORS.tmp
4 -echo -e "List of Acorn contributors. Updated before every release.\n" > AUTHORS
5 -sort -u AUTHORS.tmp >> AUTHORS
6 -rm -f AUTHORS.tmp
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
1 -{
2 - "_args": [
3 - [
4 - {
5 - "raw": "acorn@^3.0.4",
6 - "scope": null,
7 - "escapedName": "acorn",
8 - "name": "acorn",
9 - "rawSpec": "^3.0.4",
10 - "spec": ">=3.0.4 <4.0.0",
11 - "type": "range"
12 - },
13 - "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/acorn-jsx"
14 - ]
15 - ],
16 - "_from": "acorn@>=3.0.4 <4.0.0",
17 - "_id": "acorn@3.3.0",
18 - "_inCache": true,
19 - "_location": "/acorn-jsx/acorn",
20 - "_nodeVersion": "6.3.0",
21 - "_npmOperationalInternal": {
22 - "host": "packages-16-east.internal.npmjs.com",
23 - "tmp": "tmp/acorn-3.3.0.tgz_1469481913382_0.3856039580423385"
24 - },
25 - "_npmUser": {
26 - "name": "marijn",
27 - "email": "marijnh@gmail.com"
28 - },
29 - "_npmVersion": "3.10.3",
30 - "_phantomChildren": {},
31 - "_requested": {
32 - "raw": "acorn@^3.0.4",
33 - "scope": null,
34 - "escapedName": "acorn",
35 - "name": "acorn",
36 - "rawSpec": "^3.0.4",
37 - "spec": ">=3.0.4 <4.0.0",
38 - "type": "range"
39 - },
40 - "_requiredBy": [
41 - "/acorn-jsx"
42 - ],
43 - "_resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
44 - "_shasum": "45e37fb39e8da3f25baee3ff5369e2bb5f22017a",
45 - "_shrinkwrap": null,
46 - "_spec": "acorn@^3.0.4",
47 - "_where": "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/acorn-jsx",
48 - "bin": {
49 - "acorn": "./bin/acorn"
50 - },
51 - "bugs": {
52 - "url": "https://github.com/ternjs/acorn/issues"
53 - },
54 - "contributors": [
55 - {
56 - "name": "List of Acorn contributors. Updated before every release."
57 - },
58 - {
59 - "name": "Adrian Rakovsky"
60 - },
61 - {
62 - "name": "Alistair Braidwood"
63 - },
64 - {
65 - "name": "Amila Welihinda"
66 - },
67 - {
68 - "name": "Andres Suarez"
69 - },
70 - {
71 - "name": "Angelo"
72 - },
73 - {
74 - "name": "Aparajita Fishman"
75 - },
76 - {
77 - "name": "Arian Stolwijk"
78 - },
79 - {
80 - "name": "Artem Govorov"
81 - },
82 - {
83 - "name": "Brandon Mills"
84 - },
85 - {
86 - "name": "Charles Hughes"
87 - },
88 - {
89 - "name": "Conrad Irwin"
90 - },
91 - {
92 - "name": "Daniel Tschinder"
93 - },
94 - {
95 - "name": "David Bonnet"
96 - },
97 - {
98 - "name": "Domenico Matteo"
99 - },
100 - {
101 - "name": "ForbesLindesay"
102 - },
103 - {
104 - "name": "Forbes Lindesay"
105 - },
106 - {
107 - "name": "Gilad Peleg"
108 - },
109 - {
110 - "name": "impinball"
111 - },
112 - {
113 - "name": "Ingvar Stepanyan"
114 - },
115 - {
116 - "name": "Jackson Ray Hamilton"
117 - },
118 - {
119 - "name": "Jesse McCarthy"
120 - },
121 - {
122 - "name": "Jiaxing Wang"
123 - },
124 - {
125 - "name": "Joel Kemp"
126 - },
127 - {
128 - "name": "Johannes Herr"
129 - },
130 - {
131 - "name": "Jordan Klassen"
132 - },
133 - {
134 - "name": "Jürg Lehni"
135 - },
136 - {
137 - "name": "keeyipchan"
138 - },
139 - {
140 - "name": "Keheliya Gallaba"
141 - },
142 - {
143 - "name": "Kevin Irish"
144 - },
145 - {
146 - "name": "Kevin Kwok"
147 - },
148 - {
149 - "name": "krator"
150 - },
151 - {
152 - "name": "Marijn Haverbeke"
153 - },
154 - {
155 - "name": "Martin Carlberg"
156 - },
157 - {
158 - "name": "Mathias Bynens"
159 - },
160 - {
161 - "name": "Mathieu 'p01' Henri"
162 - },
163 - {
164 - "name": "Matthew Bastien"
165 - },
166 - {
167 - "name": "Max Schaefer"
168 - },
169 - {
170 - "name": "Max Zerzouri"
171 - },
172 - {
173 - "name": "Mihai Bazon"
174 - },
175 - {
176 - "name": "Mike Rennie"
177 - },
178 - {
179 - "name": "Nicholas C. Zakas"
180 - },
181 - {
182 - "name": "Nick Fitzgerald"
183 - },
184 - {
185 - "name": "Olivier Thomann"
186 - },
187 - {
188 - "name": "Oskar Schöldström"
189 - },
190 - {
191 - "name": "Paul Harper"
192 - },
193 - {
194 - "name": "Peter Rust"
195 - },
196 - {
197 - "name": "PlNG"
198 - },
199 - {
200 - "name": "Prayag Verma"
201 - },
202 - {
203 - "name": "ReadmeCritic"
204 - },
205 - {
206 - "name": "r-e-d"
207 - },
208 - {
209 - "name": "Richard Gibson"
210 - },
211 - {
212 - "name": "Rich Harris"
213 - },
214 - {
215 - "name": "Rich-Harris"
216 - },
217 - {
218 - "name": "Sebastian McKenzie"
219 - },
220 - {
221 - "name": "Timothy Gu"
222 - },
223 - {
224 - "name": "Toru Nagashima"
225 - },
226 - {
227 - "name": "zsjforcn"
228 - }
229 - ],
230 - "dependencies": {},
231 - "description": "ECMAScript parser",
232 - "devDependencies": {
233 - "rollup": "^0.34.1",
234 - "rollup-plugin-buble": "^0.11.0",
235 - "unicode-9.0.0": "^0.7.0"
236 - },
237 - "directories": {},
238 - "dist": {
239 - "shasum": "45e37fb39e8da3f25baee3ff5369e2bb5f22017a",
240 - "tarball": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz"
241 - },
242 - "engines": {
243 - "node": ">=0.4.0"
244 - },
245 - "gitHead": "693c5fe9257c3e114a7097dc9196d6e484e52809",
246 - "homepage": "https://github.com/ternjs/acorn",
247 - "jsnext:main": "dist/acorn.es.js",
248 - "license": "MIT",
249 - "main": "dist/acorn.js",
250 - "maintainers": [
251 - {
252 - "name": "marijn",
253 - "email": "marijnh@gmail.com"
254 - },
255 - {
256 - "name": "rreverser",
257 - "email": "me@rreverser.com"
258 - }
259 - ],
260 - "name": "acorn",
261 - "optionalDependencies": {},
262 - "readme": "ERROR: No README data found!",
263 - "repository": {
264 - "type": "git",
265 - "url": "git+https://github.com/ternjs/acorn.git"
266 - },
267 - "scripts": {
268 - "build": "npm run build:main && npm run build:walk && npm run build:loose && npm run build:bin",
269 - "build:bin": "rollup -c rollup/config.bin.js",
270 - "build:loose": "rollup -c rollup/config.loose.js",
271 - "build:main": "rollup -c rollup/config.main.js",
272 - "build:walk": "rollup -c rollup/config.walk.js",
273 - "prepublish": "npm test",
274 - "pretest": "npm run build",
275 - "test": "node test/run.js"
276 - },
277 - "version": "3.3.0"
278 -}
1 -import buble from 'rollup-plugin-buble'
2 -
3 -export default {
4 - entry: 'src/bin/acorn.js',
5 - dest: 'bin/acorn',
6 - format: 'cjs',
7 - banner: '#!/usr/bin/env node',
8 - external: [ 'fs', 'path', 'acorn' ],
9 - paths: {
10 - acorn: '../dist/acorn.js'
11 - },
12 - plugins: [
13 - buble()
14 - ]
15 -}
1 -import buble from 'rollup-plugin-buble'
2 -
3 -export default {
4 - entry: 'src/loose/index.js',
5 - moduleName: 'acorn.loose',
6 - external: [ 'acorn' ],
7 - paths: {
8 - acorn: './acorn.js'
9 - },
10 - globals: {
11 - acorn: 'acorn'
12 - },
13 - targets: [
14 - { dest: 'dist/acorn_loose.js', format: 'umd' },
15 - { dest: 'dist/acorn_loose.es.js', format: 'es' }
16 - ],
17 - plugins: [
18 - buble()
19 - ]
20 -}
1 -import buble from 'rollup-plugin-buble';
2 -
3 -export default {
4 - entry: 'src/index.js',
5 - moduleName: 'acorn',
6 - plugins: [ buble() ],
7 - targets: [
8 - { dest: 'dist/acorn.js', format: 'umd' },
9 - { dest: 'dist/acorn.es.js', format: 'es' }
10 - ]
11 -};
1 -import buble from 'rollup-plugin-buble';
2 -
3 -export default {
4 - entry: 'src/walk/index.js',
5 - moduleName: 'acorn.walk',
6 - plugins: [ buble() ],
7 - targets: [
8 - { dest: 'dist/walk.js', format: 'umd' },
9 - { dest: 'dist/walk.es.js', format: 'es' }
10 - ]
11 -};
1 -import {basename} from "path"
2 -import {readFileSync as readFile} from "fs"
3 -import * as acorn from "acorn"
4 -
5 -let infile, forceFile, silent = false, compact = false, tokenize = false
6 -const options = {}
7 -
8 -function help(status) {
9 - const print = (status == 0) ? console.log : console.error
10 - print("usage: " + basename(process.argv[1]) + " [--ecma3|--ecma5|--ecma6|--ecma7]")
11 - print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] [infile]")
12 - process.exit(status)
13 -}
14 -
15 -for (let i = 2; i < process.argv.length; ++i) {
16 - const arg = process.argv[i]
17 - if ((arg == "-" || arg[0] != "-") && !infile) infile = arg
18 - else if (arg == "--" && !infile && i + 2 == process.argv.length) forceFile = infile = process.argv[++i]
19 - else if (arg == "--ecma3") options.ecmaVersion = 3
20 - else if (arg == "--ecma5") options.ecmaVersion = 5
21 - else if (arg == "--ecma6") options.ecmaVersion = 6
22 - else if (arg == "--ecma7") options.ecmaVersion = 7
23 - else if (arg == "--locations") options.locations = true
24 - else if (arg == "--allow-hash-bang") options.allowHashBang = true
25 - else if (arg == "--silent") silent = true
26 - else if (arg == "--compact") compact = true
27 - else if (arg == "--help") help(0)
28 - else if (arg == "--tokenize") tokenize = true
29 - else if (arg == "--module") options.sourceType = 'module'
30 - else help(1)
31 -}
32 -
33 -function run(code) {
34 - let result
35 - if (!tokenize) {
36 - try { result = acorn.parse(code, options) }
37 - catch(e) { console.error(e.message); process.exit(1) }
38 - } else {
39 - result = []
40 - let tokenizer = acorn.tokenizer(code, options), token
41 - while (true) {
42 - try { token = tokenizer.getToken() }
43 - catch(e) { console.error(e.message); process.exit(1) }
44 - result.push(token)
45 - if (token.type == acorn.tokTypes.eof) break
46 - }
47 - }
48 - if (!silent) console.log(JSON.stringify(result, null, compact ? null : 2))
49 -}
50 -
51 -if (forceFile || infile && infile != "-") {
52 - run(readFile(infile, "utf8"))
53 -} else {
54 - let code = ""
55 - process.stdin.resume()
56 - process.stdin.on("data", chunk => code += chunk)
57 - process.stdin.on("end", () => run(code))
58 -}
1 -// Acorn is a tiny, fast JavaScript parser written in JavaScript.
2 -//
3 -// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and
4 -// various contributors and released under an MIT license.
5 -//
6 -// Git repositories for Acorn are available at
7 -//
8 -// http://marijnhaverbeke.nl/git/acorn
9 -// https://github.com/ternjs/acorn.git
10 -//
11 -// Please use the [github bug tracker][ghbt] to report issues.
12 -//
13 -// [ghbt]: https://github.com/ternjs/acorn/issues
14 -//
15 -// This file defines the main parser interface. The library also comes
16 -// with a [error-tolerant parser][dammit] and an
17 -// [abstract syntax tree walker][walk], defined in other files.
18 -//
19 -// [dammit]: acorn_loose.js
20 -// [walk]: util/walk.js
21 -
22 -import {Parser} from "./state"
23 -import "./parseutil"
24 -import "./statement"
25 -import "./lval"
26 -import "./expression"
27 -import "./location"
28 -
29 -export {Parser, plugins} from "./state"
30 -export {defaultOptions} from "./options"
31 -export {Position, SourceLocation, getLineInfo} from "./locutil"
32 -export {Node} from "./node"
33 -export {TokenType, types as tokTypes} from "./tokentype"
34 -export {TokContext, types as tokContexts} from "./tokencontext"
35 -export {isIdentifierChar, isIdentifierStart} from "./identifier"
36 -export {Token} from "./tokenize"
37 -export {isNewLine, lineBreak, lineBreakG} from "./whitespace"
38 -
39 -export const version = "3.3.0"
40 -
41 -// The main exported interface (under `self.acorn` when in the
42 -// browser) is a `parse` function that takes a code string and
43 -// returns an abstract syntax tree as specified by [Mozilla parser
44 -// API][api].
45 -//
46 -// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
47 -
48 -export function parse(input, options) {
49 - return new Parser(options, input).parse()
50 -}
51 -
52 -// This function tries to parse a single expression at a given
53 -// offset in a string. Useful for parsing mixed-language formats
54 -// that embed JavaScript expressions.
55 -
56 -export function parseExpressionAt(input, pos, options) {
57 - let p = new Parser(options, input, pos)
58 - p.nextToken()
59 - return p.parseExpression()
60 -}
61 -
62 -// Acorn is organized as a tokenizer and a recursive-descent parser.
63 -// The `tokenizer` export provides an interface to the tokenizer.
64 -
65 -export function tokenizer(input, options) {
66 - return new Parser(options, input)
67 -}
1 -import {Parser} from "./state"
2 -import {Position, getLineInfo} from "./locutil"
3 -
4 -const pp = Parser.prototype
5 -
6 -// This function is used to raise exceptions on parse errors. It
7 -// takes an offset integer (into the current `input`) to indicate
8 -// the location of the error, attaches the position to the end
9 -// of the error message, and then raises a `SyntaxError` with that
10 -// message.
11 -
12 -pp.raise = function(pos, message) {
13 - let loc = getLineInfo(this.input, pos)
14 - message += " (" + loc.line + ":" + loc.column + ")"
15 - let err = new SyntaxError(message)
16 - err.pos = pos; err.loc = loc; err.raisedAt = this.pos
17 - throw err
18 -}
19 -
20 -pp.raiseRecoverable = pp.raise
21 -
22 -pp.curPosition = function() {
23 - if (this.options.locations) {
24 - return new Position(this.curLine, this.pos - this.lineStart)
25 - }
26 -}
1 -import {lineBreakG} from "./whitespace"
2 -
3 -// These are used when `options.locations` is on, for the
4 -// `startLoc` and `endLoc` properties.
5 -
6 -export class Position {
7 - constructor(line, col) {
8 - this.line = line
9 - this.column = col
10 - }
11 -
12 - offset(n) {
13 - return new Position(this.line, this.column + n)
14 - }
15 -}
16 -
17 -export class SourceLocation {
18 - constructor(p, start, end) {
19 - this.start = start
20 - this.end = end
21 - if (p.sourceFile !== null) this.source = p.sourceFile
22 - }
23 -}
24 -
25 -// The `getLineInfo` function is mostly useful when the
26 -// `locations` option is off (for performance reasons) and you
27 -// want to find the line/column position for a given character
28 -// offset. `input` should be the code string that the offset refers
29 -// into.
30 -
31 -export function getLineInfo(input, offset) {
32 - for (let line = 1, cur = 0;;) {
33 - lineBreakG.lastIndex = cur
34 - let match = lineBreakG.exec(input)
35 - if (match && match.index < offset) {
36 - ++line
37 - cur = match.index + match[0].length
38 - } else {
39 - return new Position(line, offset - cur)
40 - }
41 - }
42 -}
1 -// Acorn: Loose parser
2 -//
3 -// This module provides an alternative parser (`parse_dammit`) that
4 -// exposes that same interface as `parse`, but will try to parse
5 -// anything as JavaScript, repairing syntax error the best it can.
6 -// There are circumstances in which it will raise an error and give
7 -// up, but they are very rare. The resulting AST will be a mostly
8 -// valid JavaScript AST (as per the [Mozilla parser API][api], except
9 -// that:
10 -//
11 -// - Return outside functions is allowed
12 -//
13 -// - Label consistency (no conflicts, break only to existing labels)
14 -// is not enforced.
15 -//
16 -// - Bogus Identifier nodes with a name of `"✖"` are inserted whenever
17 -// the parser got too confused to return anything meaningful.
18 -//
19 -// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
20 -//
21 -// The expected use for this is to *first* try `acorn.parse`, and only
22 -// if that fails switch to `parse_dammit`. The loose parser might
23 -// parse badly indented code incorrectly, so **don't** use it as
24 -// your default parser.
25 -//
26 -// Quite a lot of acorn.js is duplicated here. The alternative was to
27 -// add a *lot* of extra cruft to that file, making it less readable
28 -// and slower. Copying and editing the code allowed me to make
29 -// invasive changes and simplifications without creating a complicated
30 -// tangle.
31 -
32 -import acorn from "acorn"
33 -import {LooseParser, pluginsLoose} from "./state"
34 -import "./tokenize"
35 -import "./statement"
36 -import "./expression"
37 -
38 -export {LooseParser, pluginsLoose} from "./state"
39 -
40 -acorn.defaultOptions.tabSize = 4
41 -
42 -export function parse_dammit(input, options) {
43 - let p = new LooseParser(input, options)
44 - p.next()
45 - return p.parseTopLevel()
46 -}
47 -
48 -acorn.parse_dammit = parse_dammit
49 -acorn.LooseParser = LooseParser
50 -acorn.pluginsLoose = pluginsLoose
1 -export function isDummy(node) { return node.name == "✖" }
...\ No newline at end of file ...\ No newline at end of file
1 -import {tokenizer, SourceLocation, tokTypes as tt, Node, lineBreak, isNewLine} from "acorn"
2 -
3 -// Registered plugins
4 -export const pluginsLoose = {}
5 -
6 -export class LooseParser {
7 - constructor(input, options = {}) {
8 - this.toks = tokenizer(input, options)
9 - this.options = this.toks.options
10 - this.input = this.toks.input
11 - this.tok = this.last = {type: tt.eof, start: 0, end: 0}
12 - if (this.options.locations) {
13 - let here = this.toks.curPosition()
14 - this.tok.loc = new SourceLocation(this.toks, here, here)
15 - }
16 - this.ahead = [] // Tokens ahead
17 - this.context = [] // Indentation contexted
18 - this.curIndent = 0
19 - this.curLineStart = 0
20 - this.nextLineStart = this.lineEnd(this.curLineStart) + 1
21 - // Load plugins
22 - this.options.pluginsLoose = options.pluginsLoose || {}
23 - this.loadPlugins(this.options.pluginsLoose)
24 - }
25 -
26 - startNode() {
27 - return new Node(this.toks, this.tok.start, this.options.locations ? this.tok.loc.start : null)
28 - }
29 -
30 - storeCurrentPos() {
31 - return this.options.locations ? [this.tok.start, this.tok.loc.start] : this.tok.start
32 - }
33 -
34 - startNodeAt(pos) {
35 - if (this.options.locations) {
36 - return new Node(this.toks, pos[0], pos[1])
37 - } else {
38 - return new Node(this.toks, pos)
39 - }
40 - }
41 -
42 - finishNode(node, type) {
43 - node.type = type
44 - node.end = this.last.end
45 - if (this.options.locations)
46 - node.loc.end = this.last.loc.end
47 - if (this.options.ranges)
48 - node.range[1] = this.last.end
49 - return node
50 - }
51 -
52 - dummyNode(type) {
53 - let dummy = this.startNode()
54 - dummy.type = type
55 - dummy.end = dummy.start
56 - if (this.options.locations)
57 - dummy.loc.end = dummy.loc.start
58 - if (this.options.ranges)
59 - dummy.range[1] = dummy.start
60 - this.last = {type: tt.name, start: dummy.start, end: dummy.start, loc: dummy.loc}
61 - return dummy
62 - }
63 -
64 - dummyIdent() {
65 - let dummy = this.dummyNode("Identifier")
66 - dummy.name = "✖"
67 - return dummy
68 - }
69 -
70 - dummyString() {
71 - let dummy = this.dummyNode("Literal")
72 - dummy.value = dummy.raw = "✖"
73 - return dummy
74 - }
75 -
76 - eat(type) {
77 - if (this.tok.type === type) {
78 - this.next()
79 - return true
80 - } else {
81 - return false
82 - }
83 - }
84 -
85 - isContextual(name) {
86 - return this.tok.type === tt.name && this.tok.value === name
87 - }
88 -
89 - eatContextual(name) {
90 - return this.tok.value === name && this.eat(tt.name)
91 - }
92 -
93 - canInsertSemicolon() {
94 - return this.tok.type === tt.eof || this.tok.type === tt.braceR ||
95 - lineBreak.test(this.input.slice(this.last.end, this.tok.start))
96 - }
97 -
98 - semicolon() {
99 - return this.eat(tt.semi)
100 - }
101 -
102 - expect(type) {
103 - if (this.eat(type)) return true
104 - for (let i = 1; i <= 2; i++) {
105 - if (this.lookAhead(i).type == type) {
106 - for (let j = 0; j < i; j++) this.next()
107 - return true
108 - }
109 - }
110 - }
111 -
112 - pushCx() {
113 - this.context.push(this.curIndent)
114 - }
115 -
116 - popCx() {
117 - this.curIndent = this.context.pop()
118 - }
119 -
120 - lineEnd(pos) {
121 - while (pos < this.input.length && !isNewLine(this.input.charCodeAt(pos))) ++pos
122 - return pos
123 - }
124 -
125 - indentationAfter(pos) {
126 - for (let count = 0;; ++pos) {
127 - let ch = this.input.charCodeAt(pos)
128 - if (ch === 32) ++count
129 - else if (ch === 9) count += this.options.tabSize
130 - else return count
131 - }
132 - }
133 -
134 - closes(closeTok, indent, line, blockHeuristic) {
135 - if (this.tok.type === closeTok || this.tok.type === tt.eof) return true
136 - return line != this.curLineStart && this.curIndent < indent && this.tokenStartsLine() &&
137 - (!blockHeuristic || this.nextLineStart >= this.input.length ||
138 - this.indentationAfter(this.nextLineStart) < indent)
139 - }
140 -
141 - tokenStartsLine() {
142 - for (let p = this.tok.start - 1; p >= this.curLineStart; --p) {
143 - let ch = this.input.charCodeAt(p)
144 - if (ch !== 9 && ch !== 32) return false
145 - }
146 - return true
147 - }
148 -
149 - extend(name, f) {
150 - this[name] = f(this[name])
151 - }
152 -
153 - loadPlugins(pluginConfigs) {
154 - for (let name in pluginConfigs) {
155 - let plugin = pluginsLoose[name]
156 - if (!plugin) throw new Error("Plugin '" + name + "' not found")
157 - plugin(this, pluginConfigs[name])
158 - }
159 - }
160 -}
1 -import {tokTypes as tt, Token, isNewLine, SourceLocation, getLineInfo, lineBreakG} from "acorn"
2 -import {LooseParser} from "./state"
3 -
4 -const lp = LooseParser.prototype
5 -
6 -function isSpace(ch) {
7 - return (ch < 14 && ch > 8) || ch === 32 || ch === 160 || isNewLine(ch)
8 -}
9 -
10 -lp.next = function() {
11 - this.last = this.tok
12 - if (this.ahead.length)
13 - this.tok = this.ahead.shift()
14 - else
15 - this.tok = this.readToken()
16 -
17 - if (this.tok.start >= this.nextLineStart) {
18 - while (this.tok.start >= this.nextLineStart) {
19 - this.curLineStart = this.nextLineStart
20 - this.nextLineStart = this.lineEnd(this.curLineStart) + 1
21 - }
22 - this.curIndent = this.indentationAfter(this.curLineStart)
23 - }
24 -}
25 -
26 -lp.readToken = function() {
27 - for (;;) {
28 - try {
29 - this.toks.next()
30 - if (this.toks.type === tt.dot &&
31 - this.input.substr(this.toks.end, 1) === "." &&
32 - this.options.ecmaVersion >= 6) {
33 - this.toks.end++
34 - this.toks.type = tt.ellipsis
35 - }
36 - return new Token(this.toks)
37 - } catch(e) {
38 - if (!(e instanceof SyntaxError)) throw e
39 -
40 - // Try to skip some text, based on the error message, and then continue
41 - let msg = e.message, pos = e.raisedAt, replace = true
42 - if (/unterminated/i.test(msg)) {
43 - pos = this.lineEnd(e.pos + 1)
44 - if (/string/.test(msg)) {
45 - replace = {start: e.pos, end: pos, type: tt.string, value: this.input.slice(e.pos + 1, pos)}
46 - } else if (/regular expr/i.test(msg)) {
47 - let re = this.input.slice(e.pos, pos)
48 - try { re = new RegExp(re) } catch(e) {}
49 - replace = {start: e.pos, end: pos, type: tt.regexp, value: re}
50 - } else if (/template/.test(msg)) {
51 - replace = {start: e.pos, end: pos,
52 - type: tt.template,
53 - value: this.input.slice(e.pos, pos)}
54 - } else {
55 - replace = false
56 - }
57 - } else if (/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number|expected number in radix/i.test(msg)) {
58 - while (pos < this.input.length && !isSpace(this.input.charCodeAt(pos))) ++pos
59 - } else if (/character escape|expected hexadecimal/i.test(msg)) {
60 - while (pos < this.input.length) {
61 - let ch = this.input.charCodeAt(pos++)
62 - if (ch === 34 || ch === 39 || isNewLine(ch)) break
63 - }
64 - } else if (/unexpected character/i.test(msg)) {
65 - pos++
66 - replace = false
67 - } else if (/regular expression/i.test(msg)) {
68 - replace = true
69 - } else {
70 - throw e
71 - }
72 - this.resetTo(pos)
73 - if (replace === true) replace = {start: pos, end: pos, type: tt.name, value: "✖"}
74 - if (replace) {
75 - if (this.options.locations)
76 - replace.loc = new SourceLocation(
77 - this.toks,
78 - getLineInfo(this.input, replace.start),
79 - getLineInfo(this.input, replace.end))
80 - return replace
81 - }
82 - }
83 - }
84 -}
85 -
86 -lp.resetTo = function(pos) {
87 - this.toks.pos = pos
88 - let ch = this.input.charAt(pos - 1)
89 - this.toks.exprAllowed = !ch || /[\[\{\(,;:?\/*=+\-~!|&%^<>]/.test(ch) ||
90 - /[enwfd]/.test(ch) &&
91 - /\b(keywords|case|else|return|throw|new|in|(instance|type)of|delete|void)$/.test(this.input.slice(pos - 10, pos))
92 -
93 - if (this.options.locations) {
94 - this.toks.curLine = 1
95 - this.toks.lineStart = lineBreakG.lastIndex = 0
96 - let match
97 - while ((match = lineBreakG.exec(this.input)) && match.index < pos) {
98 - ++this.toks.curLine
99 - this.toks.lineStart = match.index + match[0].length
100 - }
101 - }
102 -}
103 -
104 -lp.lookAhead = function(n) {
105 - while (n > this.ahead.length)
106 - this.ahead.push(this.readToken())
107 - return this.ahead[n - 1]
108 -}
1 -import {types as tt} from "./tokentype"
2 -import {Parser} from "./state"
3 -import {has} from "./util"
4 -
5 -const pp = Parser.prototype
6 -
7 -// Convert existing expression atom to assignable pattern
8 -// if possible.
9 -
10 -pp.toAssignable = function(node, isBinding) {
11 - if (this.options.ecmaVersion >= 6 && node) {
12 - switch (node.type) {
13 - case "Identifier":
14 - case "ObjectPattern":
15 - case "ArrayPattern":
16 - break
17 -
18 - case "ObjectExpression":
19 - node.type = "ObjectPattern"
20 - for (let i = 0; i < node.properties.length; i++) {
21 - let prop = node.properties[i]
22 - if (prop.kind !== "init") this.raise(prop.key.start, "Object pattern can't contain getter or setter")
23 - this.toAssignable(prop.value, isBinding)
24 - }
25 - break
26 -
27 - case "ArrayExpression":
28 - node.type = "ArrayPattern"
29 - this.toAssignableList(node.elements, isBinding)
30 - break
31 -
32 - case "AssignmentExpression":
33 - if (node.operator === "=") {
34 - node.type = "AssignmentPattern"
35 - delete node.operator
36 - // falls through to AssignmentPattern
37 - } else {
38 - this.raise(node.left.end, "Only '=' operator can be used for specifying default value.")
39 - break
40 - }
41 -
42 - case "AssignmentPattern":
43 - if (node.right.type === "YieldExpression")
44 - this.raise(node.right.start, "Yield expression cannot be a default value")
45 - break
46 -
47 - case "ParenthesizedExpression":
48 - node.expression = this.toAssignable(node.expression, isBinding)
49 - break
50 -
51 - case "MemberExpression":
52 - if (!isBinding) break
53 -
54 - default:
55 - this.raise(node.start, "Assigning to rvalue")
56 - }
57 - }
58 - return node
59 -}
60 -
61 -// Convert list of expression atoms to binding list.
62 -
63 -pp.toAssignableList = function(exprList, isBinding) {
64 - let end = exprList.length
65 - if (end) {
66 - let last = exprList[end - 1]
67 - if (last && last.type == "RestElement") {
68 - --end
69 - } else if (last && last.type == "SpreadElement") {
70 - last.type = "RestElement"
71 - let arg = last.argument
72 - this.toAssignable(arg, isBinding)
73 - if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern")
74 - this.unexpected(arg.start)
75 - --end
76 - }
77 -
78 - if (isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
79 - this.unexpected(last.argument.start)
80 - }
81 - for (let i = 0; i < end; i++) {
82 - let elt = exprList[i]
83 - if (elt) this.toAssignable(elt, isBinding)
84 - }
85 - return exprList
86 -}
87 -
88 -// Parses spread element.
89 -
90 -pp.parseSpread = function(refDestructuringErrors) {
91 - let node = this.startNode()
92 - this.next()
93 - node.argument = this.parseMaybeAssign(false, refDestructuringErrors)
94 - return this.finishNode(node, "SpreadElement")
95 -}
96 -
97 -pp.parseRest = function(allowNonIdent) {
98 - let node = this.startNode()
99 - this.next()
100 -
101 - // RestElement inside of a function parameter must be an identifier
102 - if (allowNonIdent) node.argument = this.type === tt.name ? this.parseIdent() : this.unexpected()
103 - else node.argument = this.type === tt.name || this.type === tt.bracketL ? this.parseBindingAtom() : this.unexpected()
104 -
105 - return this.finishNode(node, "RestElement")
106 -}
107 -
108 -// Parses lvalue (assignable) atom.
109 -
110 -pp.parseBindingAtom = function() {
111 - if (this.options.ecmaVersion < 6) return this.parseIdent()
112 - switch (this.type) {
113 - case tt.name:
114 - return this.parseIdent()
115 -
116 - case tt.bracketL:
117 - let node = this.startNode()
118 - this.next()
119 - node.elements = this.parseBindingList(tt.bracketR, true, true)
120 - return this.finishNode(node, "ArrayPattern")
121 -
122 - case tt.braceL:
123 - return this.parseObj(true)
124 -
125 - default:
126 - this.unexpected()
127 - }
128 -}
129 -
130 -pp.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowNonIdent) {
131 - let elts = [], first = true
132 - while (!this.eat(close)) {
133 - if (first) first = false
134 - else this.expect(tt.comma)
135 - if (allowEmpty && this.type === tt.comma) {
136 - elts.push(null)
137 - } else if (allowTrailingComma && this.afterTrailingComma(close)) {
138 - break
139 - } else if (this.type === tt.ellipsis) {
140 - let rest = this.parseRest(allowNonIdent)
141 - this.parseBindingListItem(rest)
142 - elts.push(rest)
143 - if (this.type === tt.comma) this.raise(this.start, "Comma is not permitted after the rest element")
144 - this.expect(close)
145 - break
146 - } else {
147 - let elem = this.parseMaybeDefault(this.start, this.startLoc)
148 - this.parseBindingListItem(elem)
149 - elts.push(elem)
150 - }
151 - }
152 - return elts
153 -}
154 -
155 -pp.parseBindingListItem = function(param) {
156 - return param
157 -}
158 -
159 -// Parses assignment pattern around given atom if possible.
160 -
161 -pp.parseMaybeDefault = function(startPos, startLoc, left) {
162 - left = left || this.parseBindingAtom()
163 - if (this.options.ecmaVersion < 6 || !this.eat(tt.eq)) return left
164 - let node = this.startNodeAt(startPos, startLoc)
165 - node.left = left
166 - node.right = this.parseMaybeAssign()
167 - return this.finishNode(node, "AssignmentPattern")
168 -}
169 -
170 -// Verify that a node is an lval — something that can be assigned
171 -// to.
172 -
173 -pp.checkLVal = function(expr, isBinding, checkClashes) {
174 - switch (expr.type) {
175 - case "Identifier":
176 - if (this.strict && this.reservedWordsStrictBind.test(expr.name))
177 - this.raiseRecoverable(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode")
178 - if (checkClashes) {
179 - if (has(checkClashes, expr.name))
180 - this.raiseRecoverable(expr.start, "Argument name clash")
181 - checkClashes[expr.name] = true
182 - }
183 - break
184 -
185 - case "MemberExpression":
186 - if (isBinding) this.raiseRecoverable(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression")
187 - break
188 -
189 - case "ObjectPattern":
190 - for (let i = 0; i < expr.properties.length; i++)
191 - this.checkLVal(expr.properties[i].value, isBinding, checkClashes)
192 - break
193 -
194 - case "ArrayPattern":
195 - for (let i = 0; i < expr.elements.length; i++) {
196 - let elem = expr.elements[i]
197 - if (elem) this.checkLVal(elem, isBinding, checkClashes)
198 - }
199 - break
200 -
201 - case "AssignmentPattern":
202 - this.checkLVal(expr.left, isBinding, checkClashes)
203 - break
204 -
205 - case "RestElement":
206 - this.checkLVal(expr.argument, isBinding, checkClashes)
207 - break
208 -
209 - case "ParenthesizedExpression":
210 - this.checkLVal(expr.expression, isBinding, checkClashes)
211 - break
212 -
213 - default:
214 - this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " rvalue")
215 - }
216 -}
1 -import {Parser} from "./state"
2 -import {SourceLocation} from "./locutil"
3 -
4 -export class Node {
5 - constructor(parser, pos, loc) {
6 - this.type = ""
7 - this.start = pos
8 - this.end = 0
9 - if (parser.options.locations)
10 - this.loc = new SourceLocation(parser, loc)
11 - if (parser.options.directSourceFile)
12 - this.sourceFile = parser.options.directSourceFile
13 - if (parser.options.ranges)
14 - this.range = [pos, 0]
15 - }
16 -}
17 -
18 -// Start an AST node, attaching a start offset.
19 -
20 -const pp = Parser.prototype
21 -
22 -pp.startNode = function() {
23 - return new Node(this, this.start, this.startLoc)
24 -}
25 -
26 -pp.startNodeAt = function(pos, loc) {
27 - return new Node(this, pos, loc)
28 -}
29 -
30 -// Finish an AST node, adding `type` and `end` properties.
31 -
32 -function finishNodeAt(node, type, pos, loc) {
33 - node.type = type
34 - node.end = pos
35 - if (this.options.locations)
36 - node.loc.end = loc
37 - if (this.options.ranges)
38 - node.range[1] = pos
39 - return node
40 -}
41 -
42 -pp.finishNode = function(node, type) {
43 - return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
44 -}
45 -
46 -// Finish node at given position
47 -
48 -pp.finishNodeAt = function(node, type, pos, loc) {
49 - return finishNodeAt.call(this, node, type, pos, loc)
50 -}
1 -import {has, isArray} from "./util"
2 -import {SourceLocation} from "./locutil"
3 -
4 -// A second optional argument can be given to further configure
5 -// the parser process. These options are recognized:
6 -
7 -export const defaultOptions = {
8 - // `ecmaVersion` indicates the ECMAScript version to parse. Must
9 - // be either 3, or 5, or 6. This influences support for strict
10 - // mode, the set of reserved words, support for getters and
11 - // setters and other features. The default is 6.
12 - ecmaVersion: 6,
13 - // Source type ("script" or "module") for different semantics
14 - sourceType: "script",
15 - // `onInsertedSemicolon` can be a callback that will be called
16 - // when a semicolon is automatically inserted. It will be passed
17 - // th position of the comma as an offset, and if `locations` is
18 - // enabled, it is given the location as a `{line, column}` object
19 - // as second argument.
20 - onInsertedSemicolon: null,
21 - // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
22 - // trailing commas.
23 - onTrailingComma: null,
24 - // By default, reserved words are only enforced if ecmaVersion >= 5.
25 - // Set `allowReserved` to a boolean value to explicitly turn this on
26 - // an off. When this option has the value "never", reserved words
27 - // and keywords can also not be used as property names.
28 - allowReserved: null,
29 - // When enabled, a return at the top level is not considered an
30 - // error.
31 - allowReturnOutsideFunction: false,
32 - // When enabled, import/export statements are not constrained to
33 - // appearing at the top of the program.
34 - allowImportExportEverywhere: false,
35 - // When enabled, hashbang directive in the beginning of file
36 - // is allowed and treated as a line comment.
37 - allowHashBang: false,
38 - // When `locations` is on, `loc` properties holding objects with
39 - // `start` and `end` properties in `{line, column}` form (with
40 - // line being 1-based and column 0-based) will be attached to the
41 - // nodes.
42 - locations: false,
43 - // A function can be passed as `onToken` option, which will
44 - // cause Acorn to call that function with object in the same
45 - // format as tokens returned from `tokenizer().getToken()`. Note
46 - // that you are not allowed to call the parser from the
47 - // callback—that will corrupt its internal state.
48 - onToken: null,
49 - // A function can be passed as `onComment` option, which will
50 - // cause Acorn to call that function with `(block, text, start,
51 - // end)` parameters whenever a comment is skipped. `block` is a
52 - // boolean indicating whether this is a block (`/* */`) comment,
53 - // `text` is the content of the comment, and `start` and `end` are
54 - // character offsets that denote the start and end of the comment.
55 - // When the `locations` option is on, two more parameters are
56 - // passed, the full `{line, column}` locations of the start and
57 - // end of the comments. Note that you are not allowed to call the
58 - // parser from the callback—that will corrupt its internal state.
59 - onComment: null,
60 - // Nodes have their start and end characters offsets recorded in
61 - // `start` and `end` properties (directly on the node, rather than
62 - // the `loc` object, which holds line/column data. To also add a
63 - // [semi-standardized][range] `range` property holding a `[start,
64 - // end]` array with the same numbers, set the `ranges` option to
65 - // `true`.
66 - //
67 - // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
68 - ranges: false,
69 - // It is possible to parse multiple files into a single AST by
70 - // passing the tree produced by parsing the first file as
71 - // `program` option in subsequent parses. This will add the
72 - // toplevel forms of the parsed file to the `Program` (top) node
73 - // of an existing parse tree.
74 - program: null,
75 - // When `locations` is on, you can pass this to record the source
76 - // file in every node's `loc` object.
77 - sourceFile: null,
78 - // This value, if given, is stored in every node, whether
79 - // `locations` is on or off.
80 - directSourceFile: null,
81 - // When enabled, parenthesized expressions are represented by
82 - // (non-standard) ParenthesizedExpression nodes
83 - preserveParens: false,
84 - plugins: {}
85 -}
86 -
87 -// Interpret and default an options object
88 -
89 -export function getOptions(opts) {
90 - let options = {}
91 - for (let opt in defaultOptions)
92 - options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]
93 - if (options.allowReserved == null)
94 - options.allowReserved = options.ecmaVersion < 5
95 -
96 - if (isArray(options.onToken)) {
97 - let tokens = options.onToken
98 - options.onToken = (token) => tokens.push(token)
99 - }
100 - if (isArray(options.onComment))
101 - options.onComment = pushComment(options, options.onComment)
102 -
103 - return options
104 -}
105 -
106 -function pushComment(options, array) {
107 - return function (block, text, start, end, startLoc, endLoc) {
108 - let comment = {
109 - type: block ? 'Block' : 'Line',
110 - value: text,
111 - start: start,
112 - end: end
113 - }
114 - if (options.locations)
115 - comment.loc = new SourceLocation(this, startLoc, endLoc)
116 - if (options.ranges)
117 - comment.range = [start, end]
118 - array.push(comment)
119 - }
120 -}
121 -
1 -import {types as tt} from "./tokentype"
2 -import {Parser} from "./state"
3 -import {lineBreak} from "./whitespace"
4 -
5 -const pp = Parser.prototype
6 -
7 -// ## Parser utilities
8 -
9 -// Test whether a statement node is the string literal `"use strict"`.
10 -
11 -pp.isUseStrict = function(stmt) {
12 - return this.options.ecmaVersion >= 5 && stmt.type === "ExpressionStatement" &&
13 - stmt.expression.type === "Literal" &&
14 - stmt.expression.raw.slice(1, -1) === "use strict"
15 -}
16 -
17 -// Predicate that tests whether the next token is of the given
18 -// type, and if yes, consumes it as a side effect.
19 -
20 -pp.eat = function(type) {
21 - if (this.type === type) {
22 - this.next()
23 - return true
24 - } else {
25 - return false
26 - }
27 -}
28 -
29 -// Tests whether parsed token is a contextual keyword.
30 -
31 -pp.isContextual = function(name) {
32 - return this.type === tt.name && this.value === name
33 -}
34 -
35 -// Consumes contextual keyword if possible.
36 -
37 -pp.eatContextual = function(name) {
38 - return this.value === name && this.eat(tt.name)
39 -}
40 -
41 -// Asserts that following token is given contextual keyword.
42 -
43 -pp.expectContextual = function(name) {
44 - if (!this.eatContextual(name)) this.unexpected()
45 -}
46 -
47 -// Test whether a semicolon can be inserted at the current position.
48 -
49 -pp.canInsertSemicolon = function() {
50 - return this.type === tt.eof ||
51 - this.type === tt.braceR ||
52 - lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
53 -}
54 -
55 -pp.insertSemicolon = function() {
56 - if (this.canInsertSemicolon()) {
57 - if (this.options.onInsertedSemicolon)
58 - this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc)
59 - return true
60 - }
61 -}
62 -
63 -// Consume a semicolon, or, failing that, see if we are allowed to
64 -// pretend that there is a semicolon at this position.
65 -
66 -pp.semicolon = function() {
67 - if (!this.eat(tt.semi) && !this.insertSemicolon()) this.unexpected()
68 -}
69 -
70 -pp.afterTrailingComma = function(tokType) {
71 - if (this.type == tokType) {
72 - if (this.options.onTrailingComma)
73 - this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc)
74 - this.next()
75 - return true
76 - }
77 -}
78 -
79 -// Expect a token of a given type. If found, consume it, otherwise,
80 -// raise an unexpected token error.
81 -
82 -pp.expect = function(type) {
83 - this.eat(type) || this.unexpected()
84 -}
85 -
86 -// Raise an unexpected token error.
87 -
88 -pp.unexpected = function(pos) {
89 - this.raise(pos != null ? pos : this.start, "Unexpected token")
90 -}
91 -
92 -export class DestructuringErrors {
93 - constructor() {
94 - this.shorthandAssign = 0
95 - this.trailingComma = 0
96 - }
97 -}
98 -
99 -pp.checkPatternErrors = function(refDestructuringErrors, andThrow) {
100 - let trailing = refDestructuringErrors && refDestructuringErrors.trailingComma
101 - if (!andThrow) return !!trailing
102 - if (trailing) this.raise(trailing, "Comma is not permitted after the rest element")
103 -}
104 -
105 -pp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
106 - let pos = refDestructuringErrors && refDestructuringErrors.shorthandAssign
107 - if (!andThrow) return !!pos
108 - if (pos) this.raise(pos, "Shorthand property assignments are valid only in destructuring patterns")
109 -}
1 -import {reservedWords, keywords} from "./identifier"
2 -import {types as tt} from "./tokentype"
3 -import {lineBreak} from "./whitespace"
4 -import {getOptions} from "./options"
5 -
6 -// Registered plugins
7 -export const plugins = {}
8 -
9 -function keywordRegexp(words) {
10 - return new RegExp("^(" + words.replace(/ /g, "|") + ")$")
11 -}
12 -
13 -export class Parser {
14 - constructor(options, input, startPos) {
15 - this.options = options = getOptions(options)
16 - this.sourceFile = options.sourceFile
17 - this.keywords = keywordRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5])
18 - let reserved = options.allowReserved ? "" :
19 - reservedWords[options.ecmaVersion] + (options.sourceType == "module" ? " await" : "")
20 - this.reservedWords = keywordRegexp(reserved)
21 - let reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict
22 - this.reservedWordsStrict = keywordRegexp(reservedStrict)
23 - this.reservedWordsStrictBind = keywordRegexp(reservedStrict + " " + reservedWords.strictBind)
24 - this.input = String(input)
25 -
26 - // Used to signal to callers of `readWord1` whether the word
27 - // contained any escape sequences. This is needed because words with
28 - // escape sequences must not be interpreted as keywords.
29 - this.containsEsc = false
30 -
31 - // Load plugins
32 - this.loadPlugins(options.plugins)
33 -
34 - // Set up token state
35 -
36 - // The current position of the tokenizer in the input.
37 - if (startPos) {
38 - this.pos = startPos
39 - this.lineStart = Math.max(0, this.input.lastIndexOf("\n", startPos))
40 - this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length
41 - } else {
42 - this.pos = this.lineStart = 0
43 - this.curLine = 1
44 - }
45 -
46 - // Properties of the current token:
47 - // Its type
48 - this.type = tt.eof
49 - // For tokens that include more information than their type, the value
50 - this.value = null
51 - // Its start and end offset
52 - this.start = this.end = this.pos
53 - // And, if locations are used, the {line, column} object
54 - // corresponding to those offsets
55 - this.startLoc = this.endLoc = this.curPosition()
56 -
57 - // Position information for the previous token
58 - this.lastTokEndLoc = this.lastTokStartLoc = null
59 - this.lastTokStart = this.lastTokEnd = this.pos
60 -
61 - // The context stack is used to superficially track syntactic
62 - // context to predict whether a regular expression is allowed in a
63 - // given position.
64 - this.context = this.initialContext()
65 - this.exprAllowed = true
66 -
67 - // Figure out if it's a module code.
68 - this.strict = this.inModule = options.sourceType === "module"
69 -
70 - // Used to signify the start of a potential arrow function
71 - this.potentialArrowAt = -1
72 -
73 - // Flags to track whether we are in a function, a generator.
74 - this.inFunction = this.inGenerator = false
75 - // Labels in scope.
76 - this.labels = []
77 -
78 - // If enabled, skip leading hashbang line.
79 - if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === '#!')
80 - this.skipLineComment(2)
81 - }
82 -
83 - // DEPRECATED Kept for backwards compatibility until 3.0 in case a plugin uses them
84 - isKeyword(word) { return this.keywords.test(word) }
85 - isReservedWord(word) { return this.reservedWords.test(word) }
86 -
87 - extend(name, f) {
88 - this[name] = f(this[name])
89 - }
90 -
91 - loadPlugins(pluginConfigs) {
92 - for (let name in pluginConfigs) {
93 - let plugin = plugins[name]
94 - if (!plugin) throw new Error("Plugin '" + name + "' not found")
95 - plugin(this, pluginConfigs[name])
96 - }
97 - }
98 -
99 - parse() {
100 - let node = this.options.program || this.startNode()
101 - this.nextToken()
102 - return this.parseTopLevel(node)
103 - }
104 -}
1 -// The algorithm used to determine whether a regexp can appear at a
2 -// given point in the program is loosely based on sweet.js' approach.
3 -// See https://github.com/mozilla/sweet.js/wiki/design
4 -
5 -import {Parser} from "./state"
6 -import {types as tt} from "./tokentype"
7 -import {lineBreak} from "./whitespace"
8 -
9 -export class TokContext {
10 - constructor(token, isExpr, preserveSpace, override) {
11 - this.token = token
12 - this.isExpr = !!isExpr
13 - this.preserveSpace = !!preserveSpace
14 - this.override = override
15 - }
16 -}
17 -
18 -export const types = {
19 - b_stat: new TokContext("{", false),
20 - b_expr: new TokContext("{", true),
21 - b_tmpl: new TokContext("${", true),
22 - p_stat: new TokContext("(", false),
23 - p_expr: new TokContext("(", true),
24 - q_tmpl: new TokContext("`", true, true, p => p.readTmplToken()),
25 - f_expr: new TokContext("function", true)
26 -}
27 -
28 -const pp = Parser.prototype
29 -
30 -pp.initialContext = function() {
31 - return [types.b_stat]
32 -}
33 -
34 -pp.braceIsBlock = function(prevType) {
35 - if (prevType === tt.colon) {
36 - let parent = this.curContext()
37 - if (parent === types.b_stat || parent === types.b_expr)
38 - return !parent.isExpr
39 - }
40 - if (prevType === tt._return)
41 - return lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
42 - if (prevType === tt._else || prevType === tt.semi || prevType === tt.eof || prevType === tt.parenR)
43 - return true
44 - if (prevType == tt.braceL)
45 - return this.curContext() === types.b_stat
46 - return !this.exprAllowed
47 -}
48 -
49 -pp.updateContext = function(prevType) {
50 - let update, type = this.type
51 - if (type.keyword && prevType == tt.dot)
52 - this.exprAllowed = false
53 - else if (update = type.updateContext)
54 - update.call(this, prevType)
55 - else
56 - this.exprAllowed = type.beforeExpr
57 -}
58 -
59 -// Token-specific context update code
60 -
61 -tt.parenR.updateContext = tt.braceR.updateContext = function() {
62 - if (this.context.length == 1) {
63 - this.exprAllowed = true
64 - return
65 - }
66 - let out = this.context.pop()
67 - if (out === types.b_stat && this.curContext() === types.f_expr) {
68 - this.context.pop()
69 - this.exprAllowed = false
70 - } else if (out === types.b_tmpl) {
71 - this.exprAllowed = true
72 - } else {
73 - this.exprAllowed = !out.isExpr
74 - }
75 -}
76 -
77 -tt.braceL.updateContext = function(prevType) {
78 - this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr)
79 - this.exprAllowed = true
80 -}
81 -
82 -tt.dollarBraceL.updateContext = function() {
83 - this.context.push(types.b_tmpl)
84 - this.exprAllowed = true
85 -}
86 -
87 -tt.parenL.updateContext = function(prevType) {
88 - let statementParens = prevType === tt._if || prevType === tt._for || prevType === tt._with || prevType === tt._while
89 - this.context.push(statementParens ? types.p_stat : types.p_expr)
90 - this.exprAllowed = true
91 -}
92 -
93 -tt.incDec.updateContext = function() {
94 - // tokExprAllowed stays unchanged
95 -}
96 -
97 -tt._function.updateContext = function(prevType) {
98 - if (prevType.beforeExpr && prevType !== tt.semi && prevType !== tt._else &&
99 - !((prevType === tt.colon || prevType === tt.braceL) && this.curContext() === types.b_stat))
100 - this.context.push(types.f_expr)
101 - this.exprAllowed = false
102 -}
103 -
104 -tt.backQuote.updateContext = function() {
105 - if (this.curContext() === types.q_tmpl)
106 - this.context.pop()
107 - else
108 - this.context.push(types.q_tmpl)
109 - this.exprAllowed = false
110 -}
1 -// ## Token types
2 -
3 -// The assignment of fine-grained, information-carrying type objects
4 -// allows the tokenizer to store the information it has about a
5 -// token in a way that is very cheap for the parser to look up.
6 -
7 -// All token type variables start with an underscore, to make them
8 -// easy to recognize.
9 -
10 -// The `beforeExpr` property is used to disambiguate between regular
11 -// expressions and divisions. It is set on all token types that can
12 -// be followed by an expression (thus, a slash after them would be a
13 -// regular expression).
14 -//
15 -// The `startsExpr` property is used to check if the token ends a
16 -// `yield` expression. It is set on all token types that either can
17 -// directly start an expression (like a quotation mark) or can
18 -// continue an expression (like the body of a string).
19 -//
20 -// `isLoop` marks a keyword as starting a loop, which is important
21 -// to know when parsing a label, in order to allow or disallow
22 -// continue jumps to that label.
23 -
24 -export class TokenType {
25 - constructor(label, conf = {}) {
26 - this.label = label
27 - this.keyword = conf.keyword
28 - this.beforeExpr = !!conf.beforeExpr
29 - this.startsExpr = !!conf.startsExpr
30 - this.isLoop = !!conf.isLoop
31 - this.isAssign = !!conf.isAssign
32 - this.prefix = !!conf.prefix
33 - this.postfix = !!conf.postfix
34 - this.binop = conf.binop || null
35 - this.updateContext = null
36 - }
37 -}
38 -
39 -function binop(name, prec) {
40 - return new TokenType(name, {beforeExpr: true, binop: prec})
41 -}
42 -const beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true}
43 -
44 -// Map keyword names to token types.
45 -
46 -export const keywords = {}
47 -
48 -// Succinct definitions of keyword token types
49 -function kw(name, options = {}) {
50 - options.keyword = name
51 - return keywords[name] = new TokenType(name, options)
52 -}
53 -
54 -export const types = {
55 - num: new TokenType("num", startsExpr),
56 - regexp: new TokenType("regexp", startsExpr),
57 - string: new TokenType("string", startsExpr),
58 - name: new TokenType("name", startsExpr),
59 - eof: new TokenType("eof"),
60 -
61 - // Punctuation token types.
62 - bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
63 - bracketR: new TokenType("]"),
64 - braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
65 - braceR: new TokenType("}"),
66 - parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
67 - parenR: new TokenType(")"),
68 - comma: new TokenType(",", beforeExpr),
69 - semi: new TokenType(";", beforeExpr),
70 - colon: new TokenType(":", beforeExpr),
71 - dot: new TokenType("."),
72 - question: new TokenType("?", beforeExpr),
73 - arrow: new TokenType("=>", beforeExpr),
74 - template: new TokenType("template"),
75 - ellipsis: new TokenType("...", beforeExpr),
76 - backQuote: new TokenType("`", startsExpr),
77 - dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
78 -
79 - // Operators. These carry several kinds of properties to help the
80 - // parser use them properly (the presence of these properties is
81 - // what categorizes them as operators).
82 - //
83 - // `binop`, when present, specifies that this operator is a binary
84 - // operator, and will refer to its precedence.
85 - //
86 - // `prefix` and `postfix` mark the operator as a prefix or postfix
87 - // unary operator.
88 - //
89 - // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
90 - // binary operators with a very low precedence, that should result
91 - // in AssignmentExpression nodes.
92 -
93 - eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
94 - assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
95 - incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
96 - prefix: new TokenType("prefix", {beforeExpr: true, prefix: true, startsExpr: true}),
97 - logicalOR: binop("||", 1),
98 - logicalAND: binop("&&", 2),
99 - bitwiseOR: binop("|", 3),
100 - bitwiseXOR: binop("^", 4),
101 - bitwiseAND: binop("&", 5),
102 - equality: binop("==/!=", 6),
103 - relational: binop("</>", 7),
104 - bitShift: binop("<</>>", 8),
105 - plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
106 - modulo: binop("%", 10),
107 - star: binop("*", 10),
108 - slash: binop("/", 10),
109 - starstar: new TokenType("**", {beforeExpr: true}),
110 -
111 - // Keyword token types.
112 - _break: kw("break"),
113 - _case: kw("case", beforeExpr),
114 - _catch: kw("catch"),
115 - _continue: kw("continue"),
116 - _debugger: kw("debugger"),
117 - _default: kw("default", beforeExpr),
118 - _do: kw("do", {isLoop: true, beforeExpr: true}),
119 - _else: kw("else", beforeExpr),
120 - _finally: kw("finally"),
121 - _for: kw("for", {isLoop: true}),
122 - _function: kw("function", startsExpr),
123 - _if: kw("if"),
124 - _return: kw("return", beforeExpr),
125 - _switch: kw("switch"),
126 - _throw: kw("throw", beforeExpr),
127 - _try: kw("try"),
128 - _var: kw("var"),
129 - _const: kw("const"),
130 - _while: kw("while", {isLoop: true}),
131 - _with: kw("with"),
132 - _new: kw("new", {beforeExpr: true, startsExpr: true}),
133 - _this: kw("this", startsExpr),
134 - _super: kw("super", startsExpr),
135 - _class: kw("class"),
136 - _extends: kw("extends", beforeExpr),
137 - _export: kw("export"),
138 - _import: kw("import"),
139 - _null: kw("null", startsExpr),
140 - _true: kw("true", startsExpr),
141 - _false: kw("false", startsExpr),
142 - _in: kw("in", {beforeExpr: true, binop: 7}),
143 - _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
144 - _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
145 - _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
146 - _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
147 -}
1 -export function isArray(obj) {
2 - return Object.prototype.toString.call(obj) === "[object Array]"
3 -}
4 -
5 -// Checks if an object has a property.
6 -
7 -export function has(obj, propName) {
8 - return Object.prototype.hasOwnProperty.call(obj, propName)
9 -}
1 -// Matches a whole line break (where CRLF is considered a single
2 -// line break). Used to count lines.
3 -
4 -export const lineBreak = /\r\n?|\n|\u2028|\u2029/
5 -export const lineBreakG = new RegExp(lineBreak.source, "g")
6 -
7 -export function isNewLine(code) {
8 - return code === 10 || code === 13 || code === 0x2028 || code == 0x2029
9 -}
10 -
11 -export const nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/
12 -
13 -export const skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g
1 -{
2 - "_args": [
3 - [
4 - {
5 - "raw": "acorn-jsx@^3.0.0",
6 - "scope": null,
7 - "escapedName": "acorn-jsx",
8 - "name": "acorn-jsx",
9 - "rawSpec": "^3.0.0",
10 - "spec": ">=3.0.0 <4.0.0",
11 - "type": "range"
12 - },
13 - "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/espree"
14 - ]
15 - ],
16 - "_from": "acorn-jsx@>=3.0.0 <4.0.0",
17 - "_id": "acorn-jsx@3.0.1",
18 - "_inCache": true,
19 - "_location": "/acorn-jsx",
20 - "_nodeVersion": "6.0.0",
21 - "_npmOperationalInternal": {
22 - "host": "packages-12-west.internal.npmjs.com",
23 - "tmp": "tmp/acorn-jsx-3.0.1.tgz_1462206645285_0.17844340158626437"
24 - },
25 - "_npmUser": {
26 - "name": "rreverser",
27 - "email": "me@rreverser.com"
28 - },
29 - "_npmVersion": "3.8.6",
30 - "_phantomChildren": {},
31 - "_requested": {
32 - "raw": "acorn-jsx@^3.0.0",
33 - "scope": null,
34 - "escapedName": "acorn-jsx",
35 - "name": "acorn-jsx",
36 - "rawSpec": "^3.0.0",
37 - "spec": ">=3.0.0 <4.0.0",
38 - "type": "range"
39 - },
40 - "_requiredBy": [
41 - "/espree"
42 - ],
43 - "_resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
44 - "_shasum": "afdf9488fb1ecefc8348f6fb22f464e32a58b36b",
45 - "_shrinkwrap": null,
46 - "_spec": "acorn-jsx@^3.0.0",
47 - "_where": "/Users/kanghyeontae/IdeaProjects/YTMT/node_modules/espree",
48 - "bugs": {
49 - "url": "https://github.com/RReverser/acorn-jsx/issues"
50 - },
51 - "dependencies": {
52 - "acorn": "^3.0.4"
53 - },
54 - "description": "Alternative, faster React.js JSX parser",
55 - "devDependencies": {
56 - "chai": "^3.0.0",
57 - "mocha": "^2.2.5"
58 - },
59 - "directories": {},
60 - "dist": {
61 - "shasum": "afdf9488fb1ecefc8348f6fb22f464e32a58b36b",
62 - "tarball": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz"
63 - },
64 - "gitHead": "05852d8ae9476b7f8a25e417665e2265528d5fb9",
65 - "homepage": "https://github.com/RReverser/acorn-jsx",
66 - "license": "MIT",
67 - "maintainers": [
68 - {
69 - "name": "rreverser",
70 - "email": "me@rreverser.com"
71 - }
72 - ],
73 - "name": "acorn-jsx",
74 - "optionalDependencies": {},
75 - "readme": "ERROR: No README data found!",
76 - "repository": {
77 - "type": "git",
78 - "url": "git+https://github.com/RReverser/acorn-jsx.git"
79 - },
80 - "scripts": {
81 - "test": "node test/run.js"
82 - },
83 - "version": "3.0.1"
84 -}
1 -module.exports = {
2 - quot: '\u0022',
3 - amp: '&',
4 - apos: '\u0027',
5 - lt: '<',
6 - gt: '>',
7 - nbsp: '\u00A0',
8 - iexcl: '\u00A1',
9 - cent: '\u00A2',
10 - pound: '\u00A3',
11 - curren: '\u00A4',
12 - yen: '\u00A5',
13 - brvbar: '\u00A6',
14 - sect: '\u00A7',
15 - uml: '\u00A8',
16 - copy: '\u00A9',
17 - ordf: '\u00AA',
18 - laquo: '\u00AB',
19 - not: '\u00AC',
20 - shy: '\u00AD',
21 - reg: '\u00AE',
22 - macr: '\u00AF',
23 - deg: '\u00B0',
24 - plusmn: '\u00B1',
25 - sup2: '\u00B2',
26 - sup3: '\u00B3',
27 - acute: '\u00B4',
28 - micro: '\u00B5',
29 - para: '\u00B6',
30 - middot: '\u00B7',
31 - cedil: '\u00B8',
32 - sup1: '\u00B9',
33 - ordm: '\u00BA',
34 - raquo: '\u00BB',
35 - frac14: '\u00BC',
36 - frac12: '\u00BD',
37 - frac34: '\u00BE',
38 - iquest: '\u00BF',
39 - Agrave: '\u00C0',
40 - Aacute: '\u00C1',
41 - Acirc: '\u00C2',
42 - Atilde: '\u00C3',
43 - Auml: '\u00C4',
44 - Aring: '\u00C5',
45 - AElig: '\u00C6',
46 - Ccedil: '\u00C7',
47 - Egrave: '\u00C8',
48 - Eacute: '\u00C9',
49 - Ecirc: '\u00CA',
50 - Euml: '\u00CB',
51 - Igrave: '\u00CC',
52 - Iacute: '\u00CD',
53 - Icirc: '\u00CE',
54 - Iuml: '\u00CF',
55 - ETH: '\u00D0',
56 - Ntilde: '\u00D1',
57 - Ograve: '\u00D2',
58 - Oacute: '\u00D3',
59 - Ocirc: '\u00D4',
60 - Otilde: '\u00D5',
61 - Ouml: '\u00D6',
62 - times: '\u00D7',
63 - Oslash: '\u00D8',
64 - Ugrave: '\u00D9',
65 - Uacute: '\u00DA',
66 - Ucirc: '\u00DB',
67 - Uuml: '\u00DC',
68 - Yacute: '\u00DD',
69 - THORN: '\u00DE',
70 - szlig: '\u00DF',
71 - agrave: '\u00E0',
72 - aacute: '\u00E1',
73 - acirc: '\u00E2',
74 - atilde: '\u00E3',
75 - auml: '\u00E4',
76 - aring: '\u00E5',
77 - aelig: '\u00E6',
78 - ccedil: '\u00E7',
79 - egrave: '\u00E8',
80 - eacute: '\u00E9',
81 - ecirc: '\u00EA',
82 - euml: '\u00EB',
83 - igrave: '\u00EC',
84 - iacute: '\u00ED',
85 - icirc: '\u00EE',
86 - iuml: '\u00EF',
87 - eth: '\u00F0',
88 - ntilde: '\u00F1',
89 - ograve: '\u00F2',
90 - oacute: '\u00F3',
91 - ocirc: '\u00F4',
92 - otilde: '\u00F5',
93 - ouml: '\u00F6',
94 - divide: '\u00F7',
95 - oslash: '\u00F8',
96 - ugrave: '\u00F9',
97 - uacute: '\u00FA',
98 - ucirc: '\u00FB',
99 - uuml: '\u00FC',
100 - yacute: '\u00FD',
101 - thorn: '\u00FE',
102 - yuml: '\u00FF',
103 - OElig: '\u0152',
104 - oelig: '\u0153',
105 - Scaron: '\u0160',
106 - scaron: '\u0161',
107 - Yuml: '\u0178',
108 - fnof: '\u0192',
109 - circ: '\u02C6',
110 - tilde: '\u02DC',
111 - Alpha: '\u0391',
112 - Beta: '\u0392',
113 - Gamma: '\u0393',
114 - Delta: '\u0394',
115 - Epsilon: '\u0395',
116 - Zeta: '\u0396',
117 - Eta: '\u0397',
118 - Theta: '\u0398',
119 - Iota: '\u0399',
120 - Kappa: '\u039A',
121 - Lambda: '\u039B',
122 - Mu: '\u039C',
123 - Nu: '\u039D',
124 - Xi: '\u039E',
125 - Omicron: '\u039F',
126 - Pi: '\u03A0',
127 - Rho: '\u03A1',
128 - Sigma: '\u03A3',
129 - Tau: '\u03A4',
130 - Upsilon: '\u03A5',
131 - Phi: '\u03A6',
132 - Chi: '\u03A7',
133 - Psi: '\u03A8',
134 - Omega: '\u03A9',
135 - alpha: '\u03B1',
136 - beta: '\u03B2',
137 - gamma: '\u03B3',
138 - delta: '\u03B4',
139 - epsilon: '\u03B5',
140 - zeta: '\u03B6',
141 - eta: '\u03B7',
142 - theta: '\u03B8',
143 - iota: '\u03B9',
144 - kappa: '\u03BA',
145 - lambda: '\u03BB',
146 - mu: '\u03BC',
147 - nu: '\u03BD',
148 - xi: '\u03BE',
149 - omicron: '\u03BF',
150 - pi: '\u03C0',
151 - rho: '\u03C1',
152 - sigmaf: '\u03C2',
153 - sigma: '\u03C3',
154 - tau: '\u03C4',
155 - upsilon: '\u03C5',
156 - phi: '\u03C6',
157 - chi: '\u03C7',
158 - psi: '\u03C8',
159 - omega: '\u03C9',
160 - thetasym: '\u03D1',
161 - upsih: '\u03D2',
162 - piv: '\u03D6',
163 - ensp: '\u2002',
164 - emsp: '\u2003',
165 - thinsp: '\u2009',
166 - zwnj: '\u200C',
167 - zwj: '\u200D',
168 - lrm: '\u200E',
169 - rlm: '\u200F',
170 - ndash: '\u2013',
171 - mdash: '\u2014',
172 - lsquo: '\u2018',
173 - rsquo: '\u2019',
174 - sbquo: '\u201A',
175 - ldquo: '\u201C',
176 - rdquo: '\u201D',
177 - bdquo: '\u201E',
178 - dagger: '\u2020',
179 - Dagger: '\u2021',
180 - bull: '\u2022',
181 - hellip: '\u2026',
182 - permil: '\u2030',
183 - prime: '\u2032',
184 - Prime: '\u2033',
185 - lsaquo: '\u2039',
186 - rsaquo: '\u203A',
187 - oline: '\u203E',
188 - frasl: '\u2044',
189 - euro: '\u20AC',
190 - image: '\u2111',
191 - weierp: '\u2118',
192 - real: '\u211C',
193 - trade: '\u2122',
194 - alefsym: '\u2135',
195 - larr: '\u2190',
196 - uarr: '\u2191',
197 - rarr: '\u2192',
198 - darr: '\u2193',
199 - harr: '\u2194',
200 - crarr: '\u21B5',
201 - lArr: '\u21D0',
202 - uArr: '\u21D1',
203 - rArr: '\u21D2',
204 - dArr: '\u21D3',
205 - hArr: '\u21D4',
206 - forall: '\u2200',
207 - part: '\u2202',
208 - exist: '\u2203',
209 - empty: '\u2205',
210 - nabla: '\u2207',
211 - isin: '\u2208',
212 - notin: '\u2209',
213 - ni: '\u220B',
214 - prod: '\u220F',
215 - sum: '\u2211',
216 - minus: '\u2212',
217 - lowast: '\u2217',
218 - radic: '\u221A',
219 - prop: '\u221D',
220 - infin: '\u221E',
221 - ang: '\u2220',
222 - and: '\u2227',
223 - or: '\u2228',
224 - cap: '\u2229',
225 - cup: '\u222A',
226 - 'int': '\u222B',
227 - there4: '\u2234',
228 - sim: '\u223C',
229 - cong: '\u2245',
230 - asymp: '\u2248',
231 - ne: '\u2260',
232 - equiv: '\u2261',
233 - le: '\u2264',
234 - ge: '\u2265',
235 - sub: '\u2282',
236 - sup: '\u2283',
237 - nsub: '\u2284',
238 - sube: '\u2286',
239 - supe: '\u2287',
240 - oplus: '\u2295',
241 - otimes: '\u2297',
242 - perp: '\u22A5',
243 - sdot: '\u22C5',
244 - lceil: '\u2308',
245 - rceil: '\u2309',
246 - lfloor: '\u230A',
247 - rfloor: '\u230B',
248 - lang: '\u2329',
249 - rang: '\u232A',
250 - loz: '\u25CA',
251 - spades: '\u2660',
252 - clubs: '\u2663',
253 - hearts: '\u2665',
254 - diams: '\u2666'
255 -};
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.