initial commit
This commit is contained in:
commit
fdfcd554f8
|
@ -0,0 +1,62 @@
|
||||||
|
# teddit
|
||||||
|
|
||||||
|
A free and open source alternative Reddit front-end focused on privacy.
|
||||||
|
Inspired by the [Nitter](https://github.com/zedeus/nitter) project.
|
||||||
|
|
||||||
|
* No JavaScript or ads
|
||||||
|
* All requests go through the backend, client never talks to Reddit
|
||||||
|
* Prevents Reddit from tracking your IP or JavaScript fingerprint
|
||||||
|
* Lightweight (teddit frontpage: ~30 HTTP requests with ~270 KB of data downloaded vs. Reddit frontpage: ~190 requests with ~24 MB)
|
||||||
|
|
||||||
|
XMR: 832ogRwuoSs2JGYg7wJTqshidK7dErgNdfpenQ9dzMghNXQTJRby1xGbqC3gW3GAifRM9E84J91VdMZRjoSJ32nkAZnaCEj
|
||||||
|
BTC: bc1qlcrmt2pvlh4eq69l3l4h6z5jg74z2m2q3pasan
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
This is a quick guide how to run teddit on your own server with domain teddit.net. Change teddit.net to your own domain in the following steps. Tested on fresh install of Debian 10. Run as root:
|
||||||
|
`# apt update && apt upgrade`
|
||||||
|
`# curl -sL https://deb.nodesource.com/setup_14.x | bash -`
|
||||||
|
`# apt install -y nodejs redis-server ffmpeg git curl certbot` *leave ffmpeg out if you don't want video support*
|
||||||
|
`# adduser teddit`
|
||||||
|
`# mkdir -p /home/teddit/letsencrypt/`
|
||||||
|
`# mkdir -p /home/teddit/letsencrypt/`
|
||||||
|
`# mkdir -p /home/teddit/letsencrypt/logs/`
|
||||||
|
`# mkdir -p /home/teddit/letsencrypt/lib/`
|
||||||
|
`# chown teddit:teddit -R /home/teddit/letsencrypt/`
|
||||||
|
`# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080` *route port 8080 to 80*
|
||||||
|
`# iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8088` *route port 8088 to 443*
|
||||||
|
`# apt install iptables-persistent` *save iptables configuration to be persistent*
|
||||||
|
Edit redis.conf file and set **maxmemory** value suitable for your server (e.g. 75% of your total RAM):
|
||||||
|
`# nano /etc/redis/redis.conf`
|
||||||
|
Add this to the end of the file:
|
||||||
|
`maxmemory 2gb`
|
||||||
|
Also add maxmemory-policy:
|
||||||
|
`maxmemory-policy volatile-ttl`
|
||||||
|
Save and exit the file.
|
||||||
|
Restart redis:
|
||||||
|
`# systemctl restart redis`
|
||||||
|
Let's log in for teddit user.
|
||||||
|
`# su - teddit`
|
||||||
|
`$ git clone https://codeberg.org/teddit/teddit`
|
||||||
|
`$ cd teddit`
|
||||||
|
`$ npm install && npm update`
|
||||||
|
Let's obtain certificates. Run HTTP server:
|
||||||
|
`$ nohup node setup_server.js </dev/null &>/dev/null &`
|
||||||
|
Then run certbot. Change your email ("ADD_YOUR_EMAIL_ADDRESS@SOMETHING.ORG") and domain.
|
||||||
|
`$ certbot certonly --webroot -w /home/teddit/teddit/dist/ -d teddit.net --agree-tos --no-eff-email --manual-public-ip-logging-ok --config-dir /home/teddit/letsencrypt/ --logs-dir /home/teddit/letsencrypt/logs/ --work-dir /home/teddit/letsencrypt/lib/ --email ADD_YOUR_EMAIL_ADDRESS@SOMETHING.ORG`
|
||||||
|
Kill the node HTTP server:
|
||||||
|
`$ ps aux | grep node`
|
||||||
|
`$ kill -9 [PID HERE]`
|
||||||
|
Change config variables in app.js, domain and Reddit app ID. Note: It's recommended that you get your own Reddit app ID. For testing purposes it's okay to use this project's default app ID. Create your Reddit app here: [https://old.reddit.com/prefs/apps/](https://old.reddit.com/prefs/apps/) and update its ID to the app.js. Make sure to create an "installed app" type of app.
|
||||||
|
`$ nano app.js`
|
||||||
|
Save and exit.
|
||||||
|
Now let's start teddit:
|
||||||
|
`$ nohup node app.js > output.log &`
|
||||||
|
If everything went okay, you should have teddit instance running on your domain with a valid SSL certificate.
|
||||||
|
If you see the output.log:
|
||||||
|
`$ tail -f output.log`
|
||||||
|
You should see something like:
|
||||||
|
```
|
||||||
|
Teddit running on https://teddit.net
|
||||||
|
Teddit running on http://teddit.net
|
||||||
|
Successfully obtained a reddit API key.
|
||||||
|
```
|
|
@ -0,0 +1,125 @@
|
||||||
|
/**
|
||||||
|
These you need to change:
|
||||||
|
*/
|
||||||
|
global.domain = 'teddit.net'
|
||||||
|
global.reddit_app_id = 'H6-HjZ5pUPjaFQ' // app ID in Reddit (type: "installed app")
|
||||||
|
/**
|
||||||
|
* You don't necessarily need to configure anything else if you are following the
|
||||||
|
* README installation guide.
|
||||||
|
*/
|
||||||
|
global.video_enabled = true // If true, we download videos from [valid_media_domains] domains
|
||||||
|
const SSL_PORT = 8088
|
||||||
|
const NONSSL_PORT = 8080
|
||||||
|
const LISTEN_ADDRESS = '0.0.0.0' // aka localhost
|
||||||
|
const cert_dir = `/home/teddit/letsencrypt/live/${domain}/`
|
||||||
|
const https_enabled = true
|
||||||
|
const redirect_http_to_https = true
|
||||||
|
const use_compression = true
|
||||||
|
const use_view_cache = false
|
||||||
|
const use_helmet = true
|
||||||
|
const use_helmet_hsts = true
|
||||||
|
const trust_proxy = false // Enable trust_proxy if you are using reverse proxy like nginx
|
||||||
|
const trust_proxy_address = '127.0.0.1'
|
||||||
|
global.setexs = {
|
||||||
|
/**
|
||||||
|
* Redis cache expiration values (in seconds).
|
||||||
|
* When the cache expires, new content is fetched from Reddit's API (when
|
||||||
|
* the given URL is revisited).
|
||||||
|
*/
|
||||||
|
frontpage: 600,
|
||||||
|
subreddit: 600,
|
||||||
|
posts: 600,
|
||||||
|
user: 600,
|
||||||
|
searches: 600
|
||||||
|
}
|
||||||
|
global.client_id_b64 = Buffer.from(`${reddit_app_id}:`).toString('base64')
|
||||||
|
global.reddit_access_token = null
|
||||||
|
global.reddit_refresh_token = null
|
||||||
|
global.valid_media_domains = ['preview.redd.it', 'external-preview.redd.it', 'i.redd.it', 'v.redd.it', 'a.thumbs.redditmedia.com', 'b.thumbs.redditmedia.com', 'thumbs.gfycat.com', 'i.ytimg.com']
|
||||||
|
global.reddit_api_error_text = `Seems like your instance is either blocked (e.g. due to API rate limiting), reddit is currently down, or your API key is expired and not renewd properly. This can also happen for other reasons.`
|
||||||
|
|
||||||
|
const pug = require('pug')
|
||||||
|
const path = require('path')
|
||||||
|
const compression = require('compression')
|
||||||
|
const express = require('express')
|
||||||
|
const r = require('redis')
|
||||||
|
const redis = r.createClient()
|
||||||
|
const helmet = require('helmet')
|
||||||
|
const bodyParser = require('body-parser')
|
||||||
|
const fetch = require('node-fetch')
|
||||||
|
const fs = require('fs')
|
||||||
|
const app = express()
|
||||||
|
const request = require('postman-request')
|
||||||
|
const commons = require('./inc/commons.js')(request, fs)
|
||||||
|
const dlAndSave = require('./inc/downloadAndSave.js')(commons)
|
||||||
|
|
||||||
|
if(!https_enabled && redirect_http_to_https) {
|
||||||
|
console.error(`Cannot redirect HTTP=>HTTPS while "https_enabled" is false.`)
|
||||||
|
}
|
||||||
|
|
||||||
|
let https = null
|
||||||
|
if(https_enabled) {
|
||||||
|
const privateKey = fs.readFileSync(`${cert_dir}/privkey.pem`, 'utf8')
|
||||||
|
const certificate = fs.readFileSync(`${cert_dir}/cert.pem`, 'utf8')
|
||||||
|
const ca = fs.readFileSync(`${cert_dir}/chain.pem`, 'utf8')
|
||||||
|
const credentials = {
|
||||||
|
key: privateKey,
|
||||||
|
cert: certificate,
|
||||||
|
ca: ca
|
||||||
|
}
|
||||||
|
https = require('https').Server(credentials, app)
|
||||||
|
global.protocol = 'https://'
|
||||||
|
} else {
|
||||||
|
global.protocol = 'http://'
|
||||||
|
}
|
||||||
|
|
||||||
|
const http = require('http').Server(app)
|
||||||
|
|
||||||
|
if(use_helmet && https_enabled) {
|
||||||
|
app.use(helmet())
|
||||||
|
if(use_helmet_hsts) {
|
||||||
|
app.use(helmet.hsts({ maxAge: 31536000, preload: true }))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(use_compression) {
|
||||||
|
app.use(compression())
|
||||||
|
}
|
||||||
|
|
||||||
|
if(use_view_cache) {
|
||||||
|
app.set('view cache', true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(trust_proxy) {
|
||||||
|
app.set('trust proxy', trust_proxy_address)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.use(bodyParser.urlencoded({ extended: true }))
|
||||||
|
app.use(bodyParser.json())
|
||||||
|
app.use(express.static(`${__dirname}/dist`))
|
||||||
|
|
||||||
|
app.set('views', './views')
|
||||||
|
app.set('view engine', 'pug')
|
||||||
|
|
||||||
|
if(redirect_http_to_https) {
|
||||||
|
app.use((req, res, next) => {
|
||||||
|
if(req.secure)
|
||||||
|
next()
|
||||||
|
else
|
||||||
|
res.redirect(`https://${req.headers.host}${req.url}`)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const redditAPI = require('./inc/initRedditApi.js')(fetch)
|
||||||
|
require('./routes')(app, redis, fetch, redditAPI)
|
||||||
|
|
||||||
|
redis.on('error', (error) => {
|
||||||
|
if(error) {
|
||||||
|
console.error(`Redis error: ${error}`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if(https_enabled) {
|
||||||
|
https.listen(SSL_PORT, LISTEN_ADDRESS, () => console.log(`Teddit running on https://${domain}`))
|
||||||
|
}
|
||||||
|
http.listen(NONSSL_PORT, LISTEN_ADDRESS, () => console.log(`Teddit running on http://${domain}`))
|
|
@ -0,0 +1,36 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: 'fontello';
|
||||||
|
src: url('/fonts/fontello.eot');
|
||||||
|
src: url('/fonts/fontello.eot') format('embedded-opentype'),
|
||||||
|
url('/fonts/fontello.woff2') format('woff2'),
|
||||||
|
url('/fonts/fontello.woff') format('woff'),
|
||||||
|
url('/fonts/fontello.ttf') format('truetype'),
|
||||||
|
url('/fonts/fontello.svg') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[class^="icon-"]:before, [class*=" icon-"]:before {
|
||||||
|
font-family: "fontello";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
speak: never;
|
||||||
|
display: inline-block;
|
||||||
|
text-decoration: inherit;
|
||||||
|
width: 1em;
|
||||||
|
margin-right: .2em;
|
||||||
|
text-align: center;
|
||||||
|
font-variant: normal;
|
||||||
|
text-transform: none;
|
||||||
|
line-height: 1em;
|
||||||
|
margin-left: .2em;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-search:before { content: '\e800'; } /* '' */
|
||||||
|
.icon-dollar:before { content: '\e801'; } /* '' */
|
||||||
|
.icon-info-circled:before { content: '\e802'; } /* '' */
|
||||||
|
.icon-cog:before { content: '\e803'; } /* '' */
|
||||||
|
.icon-twitter:before { content: '\f099'; } /* '' */
|
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 550 B |
|
@ -0,0 +1,21 @@
|
||||||
|
Font license info
|
||||||
|
|
||||||
|
|
||||||
|
## Font Awesome
|
||||||
|
|
||||||
|
Copyright (C) 2016 by Dave Gandy
|
||||||
|
|
||||||
|
Author: Dave Gandy
|
||||||
|
License: SIL ()
|
||||||
|
Homepage: http://fortawesome.github.com/Font-Awesome/
|
||||||
|
|
||||||
|
|
||||||
|
## Modern Pictograms
|
||||||
|
|
||||||
|
Copyright (c) 2012 by John Caserta. All rights reserved.
|
||||||
|
|
||||||
|
Author: John Caserta
|
||||||
|
License: SIL (http://scripts.sil.org/OFL)
|
||||||
|
Homepage: http://thedesignoffice.org/project/modern-pictograms/
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>Copyright (C) 2020 by original authors @ fontello.com</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="fontello" horiz-adv-x="1000" >
|
||||||
|
<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||||
|
<missing-glyph horiz-adv-x="1000" />
|
||||||
|
<glyph glyph-name="search" unicode="" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="dollar" unicode="" d="M0 343c374 0 558 432 931 434 64-139 130-279 195-419-373 0-531-403-931-434-65 140-130 279-195 419z m120-66c43-92 85-182 128-273 106 20 196 73 282 136-49 19-85 59-106 104-24 53-28 110-20 168-86-63-176-117-284-135z m886 147c-43 91-85 183-127 273-106-20-198-73-284-138 50-17 85-59 106-102 24-53 29-110 20-168 87 64 178 116 285 135z m-657-305c-6 13-11 24-18 36-2-1-6-2-10-2 2-14 4-26 7-40 7 1 15 2 21 6z m27 23c4 6 8 13 12 21-14 4-27 7-39 12-1-3-4-7-5-10 10-7 21-16 32-23z m-83-23c5 13 8 24 13 35-3 1-7 4-8 5-9-10-18-19-27-29 7-5 14-10 22-11z m96 80c-1 8-3 15-5 23l-1 0c-12-8-23-14-35-20l0-2c2-2 2-6 2-10 15 3 26 5 39 9z m-139-41c14 5 25 9 38 15-2 4-3 5-3 9-14-2-29-2-42-2 1-7 3-15 7-22z m88 55c7 11 16 22 23 34-6 5-12 8-18 10-5-13-10-25-14-39 2-1 6-4 9-5z m-52-16c3 2 4 6 5 10-10 7-20 16-31 25-6-7-9-12-11-20 12-5 26-10 37-15z m28 22c-1 14-4 26-5 40-8-1-15-4-23-6 4-8 5-11 9-19-4 8-5 11-9 19 7-13 12-25 18-38 4 3 6 3 10 4z m480 236c-14 33-29 63-44 94-7-4-12-6-19-11 15-31 28-63 43-94 7 5 11 8 20 11z m87 43c-13 30-30 61-43 92-8-2-12-5-20-8 15-30 30-62 43-92 9 3 13 4 20 8z m-43-20c-15 32-30 62-45 94-8-4-12-7-19-10 15-30 30-62 44-93 7 3 11 5 20 9z" horiz-adv-x="1126" />
|
||||||
|
|
||||||
|
<glyph glyph-name="info-circled" unicode="" d="M571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||||
|
|
||||||
|
<glyph glyph-name="cog" unicode="" d="M571 350q0 59-41 101t-101 42-101-42-42-101 42-101 101-42 101 42 41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51 19-27 59-77 6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21-9-76-16-104-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5-8 0-14 6-70 64-92 94-4 5-4 13 0 6 5 12 8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51-23 32-60 77-6 7-6 14 0 5 5 12 15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21 9 76 17 104 3 16 20 16h124q7 0 13-5t7-12l15-103q28-9 51-20l79 59q5 5 13 5 7 0 14-5 72-67 92-95 4-5 4-12 0-7-4-13-9-12-29-37t-30-40q15-28 23-54l102-16q7-1 12-7t4-13z" horiz-adv-x="857.1" />
|
||||||
|
|
||||||
|
<glyph glyph-name="twitter" unicode="" d="M904 622q-37-54-90-93 0-8 0-23 0-73-21-145t-64-139-103-117-144-82-181-30q-151 0-276 81 19-2 43-2 126 0 224 77-59 1-105 36t-64 89q19-3 34-3 24 0 48 6-63 13-104 62t-41 115v2q38-21 82-23-37 25-59 64t-22 86q0 49 25 91 68-83 164-133t208-55q-5 21-5 41 0 75 53 127t127 53q79 0 132-57 61 12 115 44-21-64-80-100 52 6 104 28z" horiz-adv-x="928.6" />
|
||||||
|
</font>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 89 B |
|
@ -0,0 +1,183 @@
|
||||||
|
module.exports = function(request, fs) {
|
||||||
|
this.downloadFile = (url) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
request(url, { encoding: 'binary' }, (error, response, body) => {
|
||||||
|
if(!error && response.statusCode === 200) {
|
||||||
|
resolve({ success: true, data: body })
|
||||||
|
} else {
|
||||||
|
resolve({ success: false, data: null })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.writeToDisk = (data, filename) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fs.writeFile(filename, data, 'binary', (error, result) => {
|
||||||
|
if(!error) {
|
||||||
|
resolve({ success: true })
|
||||||
|
} else {
|
||||||
|
resolve({ success: false })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.logTimestamp = (date) => {
|
||||||
|
return date.toGMTString()
|
||||||
|
}
|
||||||
|
|
||||||
|
this.cleanUrl = (url) => {
|
||||||
|
return url.replace(/&/g, '&')
|
||||||
|
}
|
||||||
|
|
||||||
|
this.localizeUrl = (url, dir) => {
|
||||||
|
url = cleanUrl(url)
|
||||||
|
let temp_url = new URL(url)
|
||||||
|
if(!dir)
|
||||||
|
dir = ''
|
||||||
|
return url.replace(temp_url.origin, `${protocol}${domain}${dir}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.kFormatter = (num) => {
|
||||||
|
return Math.abs(num) > 999 ? Math.sign(num)*((Math.abs(num)/1000).toFixed(1)) + 'k' : Math.sign(num)*Math.abs(num)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.timeDifference = (time) => {
|
||||||
|
time = parseInt(time) * 1000
|
||||||
|
let ms_per_minute = 60 * 1000
|
||||||
|
let ms_per_hour = ms_per_minute * 60
|
||||||
|
let ms_per_day = ms_per_hour * 24
|
||||||
|
let ms_per_month = ms_per_day * 30
|
||||||
|
let ms_per_year = ms_per_day * 365
|
||||||
|
let current = + new Date()
|
||||||
|
|
||||||
|
let elapsed = Math.abs(time - current)
|
||||||
|
let r = ''
|
||||||
|
let e
|
||||||
|
|
||||||
|
if(elapsed < ms_per_minute) {
|
||||||
|
e = Math.round(elapsed/1000)
|
||||||
|
r = `${e} seconds ago`
|
||||||
|
if(e === 1)
|
||||||
|
r = 'just now'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(elapsed < ms_per_hour) {
|
||||||
|
e = Math.round(elapsed/ms_per_minute)
|
||||||
|
r = `${e} minutes ago`
|
||||||
|
if(r === 1)
|
||||||
|
r = 'a minute ago'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(elapsed < ms_per_day ) {
|
||||||
|
e = Math.round(elapsed/ms_per_hour)
|
||||||
|
r = `${e} hours ago`
|
||||||
|
if(e === 1)
|
||||||
|
r = 'an hour ago'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(elapsed < ms_per_month) {
|
||||||
|
e = Math.round(elapsed/ms_per_day)
|
||||||
|
r = `${e} days ago`
|
||||||
|
if(e === 1)
|
||||||
|
r = '1 day ago'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(elapsed < ms_per_year) {
|
||||||
|
e = Math.round(elapsed/ms_per_month)
|
||||||
|
r = `${e} months ago`
|
||||||
|
if(e === 1)
|
||||||
|
r = '1 month ago'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
e = Math.round(elapsed/ms_per_year)
|
||||||
|
r = `${e} years ago`
|
||||||
|
if(e === 1)
|
||||||
|
r = '1 year ago'
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.toUTCString = (time) => {
|
||||||
|
let d = new Date();
|
||||||
|
d.setTime(time*1000);
|
||||||
|
return d.toUTCString();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.unescape = (s) => {
|
||||||
|
if(s) {
|
||||||
|
var re = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;
|
||||||
|
var unescaped = {
|
||||||
|
'&': '&',
|
||||||
|
'&': '&',
|
||||||
|
'<': '<',
|
||||||
|
'<': '<',
|
||||||
|
'>': '>',
|
||||||
|
'>': '>',
|
||||||
|
''': "'",
|
||||||
|
''': "'",
|
||||||
|
'"': '"',
|
||||||
|
'"': '"'
|
||||||
|
}
|
||||||
|
return s.replace(re, (m) => {
|
||||||
|
return unescaped[m]
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.deleteFiles = (files, callback) => {
|
||||||
|
var i = files.length
|
||||||
|
files.forEach((filepath) => {
|
||||||
|
fs.unlink(filepath, (err) => {
|
||||||
|
i--
|
||||||
|
if(err) {
|
||||||
|
callback(err)
|
||||||
|
return
|
||||||
|
} else if(i <= 0) {
|
||||||
|
callback(null)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isGif = (url) => {
|
||||||
|
try {
|
||||||
|
url = new URL(url)
|
||||||
|
let pathname = url.pathname
|
||||||
|
let file_ext = pathname.substring(pathname.lastIndexOf('.') + 1)
|
||||||
|
if(file_ext === 'gif' || file_ext === 'gifv') {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Invalid url supplied to isGif(). URL: ${url}`, error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getFileExtension = (url) => {
|
||||||
|
try {
|
||||||
|
url = new URL(url)
|
||||||
|
let pathname = url.pathname
|
||||||
|
let file_ext = pathname.substring(pathname.lastIndexOf('.') + 1)
|
||||||
|
if(file_ext) {
|
||||||
|
return file_ext
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Invalid url supplied to getFileExtension(). URL: ${url}`, error)
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,150 @@
|
||||||
|
module.exports = function() {
|
||||||
|
this.compilePostCommentsHtml = (comments, next_comment, post_id, post_url, morechildren_ids, post_author) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
(async () => {
|
||||||
|
let comments_html
|
||||||
|
if(comments.author !== undefined && comments.body_html !== undefined) {
|
||||||
|
let classlist = []
|
||||||
|
let submitter_link = ''
|
||||||
|
if(post_author === comments.author) {
|
||||||
|
classlist.push('submitter')
|
||||||
|
submitter_link = `<a href="${post_url}" title="submitter">[S]</a>`
|
||||||
|
}
|
||||||
|
if(comments.author === 'AutoModerator') {
|
||||||
|
classlist.push('green')
|
||||||
|
}
|
||||||
|
comments_html = `
|
||||||
|
<div class="comment" id="${comments.id}">
|
||||||
|
<details open>
|
||||||
|
<summary>
|
||||||
|
<a href="/u/${comments.author}">${comments.author}</a>
|
||||||
|
<p class="ups">${kFormatter(comments.ups)} points</p>
|
||||||
|
<p class="created" title="${toUTCString(comments.created)}">${timeDifference(comments.created)}</p>
|
||||||
|
</summary>
|
||||||
|
<div class="meta">
|
||||||
|
<p class="author"><a href="/u/${comments.author}" class="${classlist.join(' ')}">${comments.author}</a>${comments.author === post_author ? submitter_link : ''}</p>
|
||||||
|
<p class="ups">${kFormatter(comments.ups)} points</p>
|
||||||
|
<p class="created" title="${toUTCString(comments.created)}">
|
||||||
|
<a href="${comments.permalink}">${timeDifference(comments.created)}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="body">${unescape(comments.body_html)}</div>
|
||||||
|
`
|
||||||
|
} else {
|
||||||
|
if(comments.children) {
|
||||||
|
if(comments.children.length > 0) {
|
||||||
|
let parent_id = comments.parent_id.split('_')[1]
|
||||||
|
if(post_id === parent_id && !morechildren_ids) {
|
||||||
|
comments_html = `
|
||||||
|
<form method="POST">
|
||||||
|
<button type="submit">load more comments (${comments.count})</button>
|
||||||
|
<input type="hidden" name="url" id="url" value="${post_url}">
|
||||||
|
<input type="hidden" name="all_ids" id="all_ids" value="${comments.children.join()}">
|
||||||
|
</form>
|
||||||
|
`
|
||||||
|
} else {
|
||||||
|
if(!morechildren_ids) {
|
||||||
|
comments_html = `
|
||||||
|
<div class="load-more-comments">
|
||||||
|
<a href="${parent_id}">load more comments (${comments.count})</a>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
} else {
|
||||||
|
morechildren_ids = JSON.parse(morechildren_ids)
|
||||||
|
comments_html = `
|
||||||
|
<form method="POST">
|
||||||
|
<button type="submit">load more comments (${morechildren_ids.length})</button>
|
||||||
|
<input type="hidden" name="url" id="url" value="${post_url}">
|
||||||
|
<input type="hidden" name="all_ids" id="all_ids" value='${morechildren_ids.join()}'>
|
||||||
|
</form>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
comments_html = `
|
||||||
|
<a href="${comments.id}/">continue this thread</a>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(comments.replies) {
|
||||||
|
for(var i = 0; i < comments.replies.length; i++) {
|
||||||
|
let comment = comments.replies[i]
|
||||||
|
if(comment.type !== 'load_more') {
|
||||||
|
let classlist = []
|
||||||
|
let submitter_link = ''
|
||||||
|
|
||||||
|
if(post_author === comment.author) {
|
||||||
|
classlist.push('submitter')
|
||||||
|
submitter_link = `<a href="${post_url}" title="submitter">[S]</a>`
|
||||||
|
}
|
||||||
|
if(comment.author === 'AutoModerator') {
|
||||||
|
classlist.push('green')
|
||||||
|
}
|
||||||
|
comments_html += `
|
||||||
|
<div class="comment" id="${comment.id}">
|
||||||
|
<details open>
|
||||||
|
<summary>
|
||||||
|
<a href="/u/${comment.author}">${comment.author}</a>
|
||||||
|
<p class="ups">${kFormatter(comment.ups)} points</p>
|
||||||
|
<p class="created" title="${toUTCString(comment.created)}">${timeDifference(comment.created)}</p>
|
||||||
|
</summary>
|
||||||
|
<div class="meta">
|
||||||
|
<p class="author"><a href="/u/${comment.author}" class="${classlist.join(' ')}">${comment.author}</a>${comment.author === post_author ? submitter_link : ''}</p>
|
||||||
|
<p class="ups">${kFormatter(comment.ups)} points</p>
|
||||||
|
<p class="created" title="${toUTCString(comment.created)}">
|
||||||
|
<a href="${comment.permalink}">${timeDifference(comment.created)}</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="body">${unescape(comment.body_html)}</div>
|
||||||
|
`
|
||||||
|
let replies_html = ''
|
||||||
|
if(comment.replies) {
|
||||||
|
if(comment.replies.length) {
|
||||||
|
for(var j = 0; j < comment.replies.length; j++) {
|
||||||
|
let next_reply
|
||||||
|
if(comment.replies[j+1]) {
|
||||||
|
next_reply = comment.replies[j+1]
|
||||||
|
}
|
||||||
|
replies_html += await compilePostCommentsHtml(comment.replies[j], next_reply, post_id, post_url, null, post_author)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
comments_html += replies_html + '</details></div>'
|
||||||
|
} else {
|
||||||
|
if(comment.children.length > 0) {
|
||||||
|
let parent_id = comment.parent_id.split('_')[1]
|
||||||
|
comments_html += `
|
||||||
|
<div class="load-more-comments">
|
||||||
|
<a href="${parent_id}">load more comments (${comment.count})</a>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
} else {
|
||||||
|
comments_html += `
|
||||||
|
<div class="load-more-comments">
|
||||||
|
<a href="${comment.id}">continue this thread</a>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let next_comment_parent_id = null
|
||||||
|
if(next_comment) {
|
||||||
|
if(next_comment.parent_id) {
|
||||||
|
next_comment_parent_id = next_comment.parent_id.split('_')[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if((comments.replies || comments.author !== undefined) && next_comment_parent_id !== comments.id) {
|
||||||
|
comments_html += `</details></div>`
|
||||||
|
}
|
||||||
|
next_comment_parent_id = null
|
||||||
|
|
||||||
|
resolve(comments_html)
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,158 @@
|
||||||
|
module.exports = function(tools) {
|
||||||
|
const {spawn} = require('child_process')
|
||||||
|
const fs = require('fs')
|
||||||
|
this.downloadAndSave = (url, file_prefix = '', gifmp4, isYouTubeThumbnail) => {
|
||||||
|
/**
|
||||||
|
* This function downloads media (video or image) to disk.
|
||||||
|
* Returns a localized URL
|
||||||
|
*
|
||||||
|
* For example for images:
|
||||||
|
* https://external-preview.redd.it/DiaeK_j5fqpBqbatvo7GZzbHNJY2oxEym93B_3.jpg
|
||||||
|
* =>
|
||||||
|
* https://teddit.net/pics/DiaeK_j5fqpBqbatvo7GZzbHNJY2oxEym93B_3.jpg
|
||||||
|
*
|
||||||
|
* For videos:
|
||||||
|
* https://v.redd.it/f3lcdk4ydcl51/DASH_480.mp4?source=fallback
|
||||||
|
* =>
|
||||||
|
* https://teddit.net/vids/f3lcdk4ydcl51.mp4
|
||||||
|
*/
|
||||||
|
let valid_video_extensions = ['mp4', 'webm', 'ogg']
|
||||||
|
let invalid_urls = ['self', 'default', 'nsfw', 'image', 'spoiler']
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if(!invalid_urls.includes(url)) {
|
||||||
|
(async () => {
|
||||||
|
let temp_url = new URL(url)
|
||||||
|
if(valid_media_domains.includes(temp_url.hostname)) {
|
||||||
|
let pathname = temp_url.pathname
|
||||||
|
let file_ext
|
||||||
|
let has_extension = true
|
||||||
|
|
||||||
|
if(gifmp4) {
|
||||||
|
file_ext = 'mp4'
|
||||||
|
} else {
|
||||||
|
if(!pathname.includes('.')) {
|
||||||
|
/**
|
||||||
|
* Sometimes reddit API returns video without extension, like
|
||||||
|
* "DASH_480" and not "DASH_480.mp4".
|
||||||
|
*/
|
||||||
|
file_ext = 'mp4'
|
||||||
|
has_extension = false
|
||||||
|
} else {
|
||||||
|
file_ext = pathname.substring(pathname.lastIndexOf('.') + 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(valid_video_extensions.includes(file_ext) || gifmp4) {
|
||||||
|
/* Is video. */
|
||||||
|
if(!video_enabled) {
|
||||||
|
resolve('')
|
||||||
|
} else {
|
||||||
|
let filename = `${temp_url.pathname.substr(1).split('/')[0]}.${file_ext}`
|
||||||
|
let path = `${__dirname}/../dist/vids/${filename}`
|
||||||
|
let temp_path = `${__dirname}/../dist/vids/temp_${filename}`
|
||||||
|
if(!fs.existsSync(path)) {
|
||||||
|
const download = await downloadFile(cleanUrl(url))
|
||||||
|
if(download.success === true) {
|
||||||
|
const write = await writeToDisk(download.data, temp_path)
|
||||||
|
if(write.success === true) {
|
||||||
|
let audio_url
|
||||||
|
if(has_extension) {
|
||||||
|
audio_url = `${url.split('_')[0]}_audio.mp4`
|
||||||
|
} else {
|
||||||
|
let ending = `${temp_url.pathname.split('/').slice(-1)[0]}`
|
||||||
|
audio_url = url.replace(ending, 'audio')
|
||||||
|
}
|
||||||
|
const download_audio = await downloadFile(cleanUrl(audio_url))
|
||||||
|
if(download_audio.success === true) {
|
||||||
|
let audio_path = `${__dirname}/../dist/vids/temp_audio_${filename}`
|
||||||
|
const write_audio = await writeToDisk(download_audio.data, audio_path)
|
||||||
|
if(write_audio.success === true) {
|
||||||
|
let processVideo = spawn('ffmpeg', ['-y', '-i', temp_path, '-i', audio_path, '-c', 'copy', path])
|
||||||
|
processVideo.on('exit', (code) => {
|
||||||
|
if(code === 0) {
|
||||||
|
let final_url = `${protocol}${domain}/vids/${filename}`
|
||||||
|
let temp_files = [temp_path, audio_path]
|
||||||
|
deleteFiles(temp_files, (error) => {
|
||||||
|
if(error) {
|
||||||
|
console.log(`Error while deleting temporay files:`, error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
resolve(final_url)
|
||||||
|
} else {
|
||||||
|
console.log(`ffmpeg error, exited with code: `, code)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
console.log(`Error while writing temp audio file.`)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/**
|
||||||
|
* Either the video doesn't have any audio track, or we
|
||||||
|
* failed downloading it. Let's return the video only.
|
||||||
|
*/
|
||||||
|
fs.rename(temp_path, path, (error) => {
|
||||||
|
if(error) {
|
||||||
|
console.log(`Error while renaming the temp video file: ${temp_path} => ${path}.`, error)
|
||||||
|
} else {
|
||||||
|
let final_url = `${protocol}${domain}/vids/${filename}`
|
||||||
|
resolve(final_url)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Error while writing video file.`)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Error while downloading video file.`)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resolve(`${protocol}${domain}/vids/${filename}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Is image. */
|
||||||
|
let path, youtubeThumbUrl, filename
|
||||||
|
if(isYouTubeThumbnail) {
|
||||||
|
filename = `${file_prefix}${temp_url.pathname.split('/').slice(-2)[0]}_hqdefault.jpg`
|
||||||
|
} else {
|
||||||
|
let width = ''
|
||||||
|
if(temp_url.searchParams.get('width')) {
|
||||||
|
width = temp_url.searchParams.get('width')
|
||||||
|
}
|
||||||
|
filename = `${file_prefix}w:${temp_url.searchParams.get('width')}_${temp_url.pathname.split('/').slice(-1)}`
|
||||||
|
}
|
||||||
|
path = `${__dirname}/../dist/pics/${filename}`
|
||||||
|
if(!fs.existsSync(path)) {
|
||||||
|
const download = await downloadFile(cleanUrl(url))
|
||||||
|
if(download.success === true) {
|
||||||
|
const write = await writeToDisk(download.data, path)
|
||||||
|
if(write.success === true) {
|
||||||
|
let final_url = `${protocol}${domain}/pics/${filename}`
|
||||||
|
resolve(final_url)
|
||||||
|
} else {
|
||||||
|
console.log(`Error while writing image file.`, write)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Error while downloading image file.`)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resolve(`${protocol}${domain}/pics/${filename}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Invalid URL for downloading media: ${temp_url.hostname}.`)
|
||||||
|
resolve('')
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
} else {
|
||||||
|
resolve('self')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,80 @@
|
||||||
|
module.exports = function(fetch) {
|
||||||
|
this.initRedditApi = function() {
|
||||||
|
let options = {
|
||||||
|
body: `grant_type=https://oauth.reddit.com/grants/installed_client&device_id=DO_NOT_TRACK_THIS_DEVICE&duration=permanent`,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
'Authorization': `Basic ${client_id_b64}`,
|
||||||
|
},
|
||||||
|
method: 'POST'
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch('https://www.reddit.com/api/v1/access_token', options)
|
||||||
|
.then(result => {
|
||||||
|
if(result.status === 200) {
|
||||||
|
result.json()
|
||||||
|
.then(data => {
|
||||||
|
//console.log(data)
|
||||||
|
if(data.access_token) {
|
||||||
|
reddit_access_token = data.access_token
|
||||||
|
reddit_refresh_token = data.refresh_token
|
||||||
|
console.log(`Successfully obtained a reddit API key.`)
|
||||||
|
} else {
|
||||||
|
console.log(`Error while obtaining a reddit API key. Check that your reddit app ID is correct. Reddit could also be down.`, data)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
console.error(`Something went wrong while trying to get an access token from reddit API. ${result.status} – ${result.statusText}`)
|
||||||
|
console.error(reddit_api_error_text)
|
||||||
|
return res.render('index', { json: null, http_status_code: result.status })
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
console.log(`Error while obtaining a reddit API key.`, error)
|
||||||
|
})
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
refreshRedditToken()
|
||||||
|
}, 1000 * 60 * 58) /* Refresh access token every ~1 hour. */
|
||||||
|
}
|
||||||
|
|
||||||
|
this.refreshRedditToken = function() {
|
||||||
|
let options = {
|
||||||
|
body: `grant_type=refresh_token&refresh_token=${reddit_refresh_token}`,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
|
'Authorization': `Basic ${client_id_b64}`,
|
||||||
|
},
|
||||||
|
method: 'POST'
|
||||||
|
}
|
||||||
|
fetch('https://www.reddit.com/api/v1/access_token', options)
|
||||||
|
.then(result => {
|
||||||
|
if(result.status === 200) {
|
||||||
|
result.json()
|
||||||
|
.then(data => {
|
||||||
|
//console.log(data)
|
||||||
|
if(data.access_token) {
|
||||||
|
reddit_access_token = data.access_token
|
||||||
|
console.log(`Successfully refreshed the reddit API key.`)
|
||||||
|
} else {
|
||||||
|
console.log(`Error while refreshing the reddit API key.`, data)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
console.error(`Something went wrong while fetching data from reddit API. ${result.status} – ${result.statusText}`)
|
||||||
|
console.error(reddit_api_error_text)
|
||||||
|
return res.render('index', { json: null, http_status_code: result.status })
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
console.log(`Error while refreshing the reddit API key.`, error)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.redditApiGETHeaders = function() {
|
||||||
|
return {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${reddit_access_token}`
|
||||||
|
},
|
||||||
|
method: 'GET'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
initRedditApi()
|
||||||
|
}
|
|
@ -0,0 +1,283 @@
|
||||||
|
module.exports = function(fetch) {
|
||||||
|
var compilePostComments = require('./compilePostComments.js')();
|
||||||
|
var procPostMedia = require('./processPostMedia.js')();
|
||||||
|
this.processJsonPost = (json, parsed) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
(async () => {
|
||||||
|
if(!parsed) {
|
||||||
|
json = JSON.parse(json)
|
||||||
|
}
|
||||||
|
|
||||||
|
let post = json[0].data.children[0].data
|
||||||
|
let post_id = post.name
|
||||||
|
let comments = json[1].data.children
|
||||||
|
|
||||||
|
let obj = {
|
||||||
|
author: post.author,
|
||||||
|
created: post.created_utc,
|
||||||
|
edited: post.edited,
|
||||||
|
is_video: post.is_video,
|
||||||
|
locked: post.locked,
|
||||||
|
name: post_id,
|
||||||
|
num_comments: post.num_comments,
|
||||||
|
permalink: post.permalink,
|
||||||
|
title: post.title,
|
||||||
|
url: post.url,
|
||||||
|
ups: post.ups,
|
||||||
|
id: post.id,
|
||||||
|
comments: null,
|
||||||
|
has_media: false,
|
||||||
|
media: null,
|
||||||
|
images: null,
|
||||||
|
crosspost: false,
|
||||||
|
selftext: unescape(post.selftext_html)
|
||||||
|
}
|
||||||
|
|
||||||
|
let validEmbedDomains = ['gfycat.com', 'youtube.com']
|
||||||
|
let has_gif = false
|
||||||
|
let gif_to_mp4 = null
|
||||||
|
let reddit_video = null
|
||||||
|
|
||||||
|
if(post.preview) {
|
||||||
|
if(post.preview.reddit_video_preview) {
|
||||||
|
if(post.preview.reddit_video_preview.is_gif) {
|
||||||
|
has_gif = true
|
||||||
|
gif_url = post.preview.reddit_video_preview.fallback_url
|
||||||
|
} else {
|
||||||
|
let file_ext = getFileExtension(post.preview.reddit_video_preview.fallback_url)
|
||||||
|
if(file_ext === 'mp4') {
|
||||||
|
post.media = true
|
||||||
|
reddit_video = post.preview.reddit_video_preview
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(post.preview.images) {
|
||||||
|
if(post.preview.images[0].source) {
|
||||||
|
let file_ext = getFileExtension(post.preview.images[0].source.url)
|
||||||
|
if(file_ext === 'gif') {
|
||||||
|
has_gif = true
|
||||||
|
let resolutions = post.preview.images[0].variants.mp4.resolutions
|
||||||
|
gif_to_mp4 = resolutions[resolutions.length - 1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = await processPostMedia(obj, post, post.media, has_gif, reddit_video, gif_to_mp4)
|
||||||
|
|
||||||
|
if(post.crosspost_parent_list) {
|
||||||
|
post.crosspost = post.crosspost_parent_list[0]
|
||||||
|
}
|
||||||
|
if(post.crosspost) {
|
||||||
|
obj = await processPostMedia(obj, post.crosspost, post.crosspost.media, has_gif, reddit_video, gif_to_mp4)
|
||||||
|
obj.crosspost = {
|
||||||
|
author: post.crosspost.author,
|
||||||
|
created: post.crosspost.created_utc,
|
||||||
|
subreddit: post.crosspost.subreddit,
|
||||||
|
title: post.crosspost.title,
|
||||||
|
name: post.crosspost.name,
|
||||||
|
num_comments: post.crosspost.num_comments,
|
||||||
|
id: post.crosspost.id,
|
||||||
|
permalink: post.crosspost.permalink,
|
||||||
|
ups: post.crosspost.ups,
|
||||||
|
selftext: unescape(post.selftext_html),
|
||||||
|
selftext_crosspost: unescape(post.crosspost.selftext_html),
|
||||||
|
is_crosspost: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(post.preview && !obj.has_media) {
|
||||||
|
obj.images = {
|
||||||
|
source: await downloadAndSave(post.preview.images[0].source.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obj.media) {
|
||||||
|
if(obj.media.source === 'external') {
|
||||||
|
if(post.preview) {
|
||||||
|
obj.images = {
|
||||||
|
source: await downloadAndSave(post.preview.images[0].source.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(post.gallery_data) {
|
||||||
|
obj.gallery = true
|
||||||
|
obj.gallery_items = []
|
||||||
|
for(var i = 0; i < post.gallery_data.items.length; i++) {
|
||||||
|
let id = post.gallery_data.items[i].media_id
|
||||||
|
if(post.media_metadata[id]) {
|
||||||
|
let item = {
|
||||||
|
type: post.media_metadata[id].e,
|
||||||
|
source: await downloadAndSave(post.media_metadata[id].s.u),
|
||||||
|
thumbnail: await downloadAndSave(post.media_metadata[id].p[0].u),
|
||||||
|
large: await downloadAndSave(post.media_metadata[id].p[post.media_metadata[id].p.length - 1].u),
|
||||||
|
}
|
||||||
|
obj.gallery_items.push(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let comms = []
|
||||||
|
for(var i = 0; i < comments.length; i++) {
|
||||||
|
let comment = comments[i].data
|
||||||
|
let kind = comments[i].kind
|
||||||
|
let obj = {}
|
||||||
|
|
||||||
|
if(kind !== 'more') {
|
||||||
|
obj = {
|
||||||
|
author: comment.author,
|
||||||
|
body_html: comment.body_html,
|
||||||
|
parent_id: comment.parent_id,
|
||||||
|
created: comment.created_utc,
|
||||||
|
edited: comment.edited,
|
||||||
|
score: comment.score,
|
||||||
|
ups: comment.ups,
|
||||||
|
id: comment.id,
|
||||||
|
permalink: comment.permalink,
|
||||||
|
replies: []
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj = {
|
||||||
|
type: 'load_more',
|
||||||
|
count: comment.count,
|
||||||
|
id: comment.id,
|
||||||
|
parent_id: comment.parent_id,
|
||||||
|
post_id: post.name,
|
||||||
|
children: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(comment.replies && kind !== 'more') {
|
||||||
|
if(comment.replies.data) {
|
||||||
|
if(comment.replies.data.children.length > 0) {
|
||||||
|
obj.replies = processReplies(comment.replies.data.children, post_id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(comment.children) {
|
||||||
|
for(var j = 0; j < comment.children.length; j++) {
|
||||||
|
obj.children.push(comment.children[j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
comms.push(obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.comments = comms
|
||||||
|
|
||||||
|
resolve(obj)
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
this.finalizeJsonPost = async (processed_json, post_id, post_url, morechildren_ids) => {
|
||||||
|
let comments_html = `<div class="comments">`
|
||||||
|
let comments = processed_json.comments
|
||||||
|
for(var i = 0; i < comments.length; i++) {
|
||||||
|
let next_comment
|
||||||
|
if(comments[i+1]) {
|
||||||
|
next_comment = comments[i+1]
|
||||||
|
}
|
||||||
|
comments_html += await compilePostCommentsHtml(comments[i], next_comment, post_id, post_url, morechildren_ids, processed_json.author)
|
||||||
|
}
|
||||||
|
|
||||||
|
comments_html += `</div>`
|
||||||
|
|
||||||
|
delete processed_json['comments']
|
||||||
|
let post_data = processed_json
|
||||||
|
return { post_data: post_data, comments: comments_html }
|
||||||
|
}
|
||||||
|
|
||||||
|
this.processReplies = (data, post_id) => {
|
||||||
|
let return_replies = []
|
||||||
|
for(var i = 0; i < data.length; i++) {
|
||||||
|
let kind = data[i].kind
|
||||||
|
let reply = data[i].data
|
||||||
|
let obj = {}
|
||||||
|
if(kind !== 'more') {
|
||||||
|
obj = {
|
||||||
|
author: reply.author,
|
||||||
|
body_html: reply.body_html,
|
||||||
|
parent_id: reply.parent_id,
|
||||||
|
created: reply.created_utc,
|
||||||
|
edited: reply.edited,
|
||||||
|
score: reply.score,
|
||||||
|
ups: reply.ups,
|
||||||
|
id: reply.id,
|
||||||
|
permalink: reply.permalink,
|
||||||
|
replies: []
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj = {
|
||||||
|
type: 'load_more',
|
||||||
|
count: reply.count,
|
||||||
|
id: reply.id,
|
||||||
|
parent_id: reply.parent_id,
|
||||||
|
post_id: post_id,
|
||||||
|
children: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply.replies && kind !== 'more') {
|
||||||
|
if(reply.replies.data.children.length) {
|
||||||
|
let replies = []
|
||||||
|
for(var j = 0; j < reply.replies.data.children.length; j++) {
|
||||||
|
let comment = reply.replies.data.children[j].data
|
||||||
|
let objct = {}
|
||||||
|
|
||||||
|
if(comment.author && comment.body_html) {
|
||||||
|
objct = {
|
||||||
|
author: comment.author,
|
||||||
|
body_html: comment.body_html,
|
||||||
|
parent_id: comment.parent_id,
|
||||||
|
created: comment.created_utc,
|
||||||
|
edited: comment.edited,
|
||||||
|
score: comment.score,
|
||||||
|
ups: comment.ups,
|
||||||
|
id: comment.id,
|
||||||
|
permalink: comment.permalink,
|
||||||
|
replies: []
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
objct = {
|
||||||
|
type: 'load_more',
|
||||||
|
count: comment.count,
|
||||||
|
id: comment.id,
|
||||||
|
parent_id: comment.parent_id,
|
||||||
|
post_id: post_id,
|
||||||
|
children: []
|
||||||
|
}
|
||||||
|
if(comment.children) {
|
||||||
|
for(var k = 0; k < comment.children.length; k++) {
|
||||||
|
objct.children.push(comment.children[k])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(comment.replies) {
|
||||||
|
if(comment.replies.data) {
|
||||||
|
if(comment.replies.data.children.length > 0) {
|
||||||
|
objct.replies = processReplies(comment.replies.data.children, post_id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj.replies.push(objct)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(reply.children) {
|
||||||
|
for(var j = 0; j < reply.children.length; j++) {
|
||||||
|
obj.children.push(reply.children[j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return_replies.push(obj)
|
||||||
|
}
|
||||||
|
return return_replies
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
module.exports = function() {
|
||||||
|
this.processJsonSubreddit = (json, from, subreddit_front) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
(async () => {
|
||||||
|
if(from === 'redis') {
|
||||||
|
json = JSON.parse(json)
|
||||||
|
}
|
||||||
|
if(json.error) {
|
||||||
|
resolve({ error: true, error_data: json })
|
||||||
|
} else {
|
||||||
|
let before = json.data.before
|
||||||
|
let after = json.data.after
|
||||||
|
|
||||||
|
let ret = {
|
||||||
|
info: {
|
||||||
|
before: before,
|
||||||
|
after: after
|
||||||
|
},
|
||||||
|
links: []
|
||||||
|
}
|
||||||
|
|
||||||
|
let children_len = json.data.children.length
|
||||||
|
|
||||||
|
for(var i = 0; i < children_len; i++) {
|
||||||
|
let data = json.data.children[i].data
|
||||||
|
let images = null
|
||||||
|
let is_self_link = false
|
||||||
|
let valid_reddit_self_domains = ['reddit.com']
|
||||||
|
|
||||||
|
if(data.domain) {
|
||||||
|
let tld = data.domain.split('self.')
|
||||||
|
if(tld.length > 1) {
|
||||||
|
if(!tld[1].includes('.')) {
|
||||||
|
is_self_link = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(valid_media_domains.includes(data.domain) || valid_reddit_self_domains.includes(data.domain)) {
|
||||||
|
is_self_link = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.preview && data.thumbnail !== 'self') {
|
||||||
|
if(!data.url.startsWith('/r/') && isGif(data.url)) {
|
||||||
|
images = {
|
||||||
|
thumb: await downloadAndSave(data.thumbnail, 'thumb_')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
images = {
|
||||||
|
thumb: await downloadAndSave(data.preview.images[0].resolutions[0].url, 'thumb_')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let obj = {
|
||||||
|
author: data.author,
|
||||||
|
created: data.created_utc,
|
||||||
|
domain: data.domain,
|
||||||
|
id: data.id,
|
||||||
|
images: images,
|
||||||
|
is_video: data.is_video,
|
||||||
|
locked: data.locked,
|
||||||
|
media: data.media,
|
||||||
|
num_comments: data.num_comments,
|
||||||
|
permalink: data.permalink,
|
||||||
|
score: data.score,
|
||||||
|
subreddit: data.subreddit,
|
||||||
|
title: data.title,
|
||||||
|
ups: data.ups,
|
||||||
|
upvote_ratio: data.upvote_ratio,
|
||||||
|
url: data.url,
|
||||||
|
is_self_link: is_self_link,
|
||||||
|
subreddit_front: subreddit_front,
|
||||||
|
before: before,
|
||||||
|
after: after
|
||||||
|
}
|
||||||
|
ret.links.push(obj)
|
||||||
|
}
|
||||||
|
resolve(ret)
|
||||||
|
}
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
module.exports = function() {
|
||||||
|
this.processJsonUser = function(json, parsed, after, before) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
(async () => {
|
||||||
|
if(!parsed) {
|
||||||
|
json = JSON.parse(json)
|
||||||
|
}
|
||||||
|
|
||||||
|
let about = json.about.data
|
||||||
|
let posts = []
|
||||||
|
let view_more_posts = false
|
||||||
|
let posts_limit = 25
|
||||||
|
let user_front = false
|
||||||
|
|
||||||
|
if(json.overview.data.children.length > posts_limit) {
|
||||||
|
view_more_posts = true
|
||||||
|
} else {
|
||||||
|
posts_limit = json.overview.data.children.length
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!after && !before) {
|
||||||
|
user_front = true
|
||||||
|
}
|
||||||
|
|
||||||
|
after = json.overview.data.children[posts_limit - 1].data.name
|
||||||
|
before = json.overview.data.children[0].data.name
|
||||||
|
|
||||||
|
for(var i = 0; i < posts_limit; i++) {
|
||||||
|
let post = json.overview.data.children[i].data
|
||||||
|
let thumbnail = 'self'
|
||||||
|
let type = json.overview.data.children[i].kind
|
||||||
|
let obj
|
||||||
|
|
||||||
|
let post_id = post.permalink.split('/').slice(-2)[0] + '/'
|
||||||
|
let url = post.permalink.replace(post_id, '')
|
||||||
|
|
||||||
|
if(type === 't3') {
|
||||||
|
let duration = null
|
||||||
|
if(post.media) {
|
||||||
|
if(post.is_video) {
|
||||||
|
if(post.media.reddit_video) {
|
||||||
|
duration = post.media.reddit_video.duration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = {
|
||||||
|
type: type,
|
||||||
|
subreddit: post.subreddit,
|
||||||
|
title: post.title,
|
||||||
|
created: post.created_utc,
|
||||||
|
ups: post.ups,
|
||||||
|
url: url,
|
||||||
|
thumbnail: await downloadAndSave(post.thumbnail),
|
||||||
|
duration: duration,
|
||||||
|
edited: post.edited,
|
||||||
|
selftext_html: unescape(post.selftext_html),
|
||||||
|
num_comments: post.num_comments,
|
||||||
|
permalink: post.permalink
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type === 't1') {
|
||||||
|
obj = {
|
||||||
|
type: type,
|
||||||
|
subreddit: post.subreddit,
|
||||||
|
title: post.title,
|
||||||
|
created: post.created_utc,
|
||||||
|
subreddit_name_prefixed: post.subreddit_name_prefixed,
|
||||||
|
ups: post.ups,
|
||||||
|
url: url,
|
||||||
|
edited: post.edited,
|
||||||
|
body_html: unescape(post.body_html),
|
||||||
|
num_comments: post.num_comments,
|
||||||
|
permalink: post.permalink,
|
||||||
|
link_author: post.link_author,
|
||||||
|
link_title: post.link_title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
posts.push(obj)
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = {
|
||||||
|
username: about.name,
|
||||||
|
icon_img: about.icon_img,
|
||||||
|
created: about.created_utc,
|
||||||
|
verified: about.verified,
|
||||||
|
link_karma: about.link_karma,
|
||||||
|
comment_karma: about.comment_karma,
|
||||||
|
view_more_posts: view_more_posts,
|
||||||
|
user_front: user_front,
|
||||||
|
before: before,
|
||||||
|
after: after,
|
||||||
|
posts: posts
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(obj)
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,127 @@
|
||||||
|
module.exports = function() {
|
||||||
|
this.processPostMedia = (obj, post, post_media, has_gif, reddit_video, gif_to_mp4) => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
(async () => {
|
||||||
|
let validEmbedDomains = ['gfycat.com', 'youtube.com']
|
||||||
|
if(post_media || has_gif) {
|
||||||
|
if(!has_gif) {
|
||||||
|
if(validEmbedDomains.includes(post_media.type)) {
|
||||||
|
if(post_media.type === 'gfycat.com') {
|
||||||
|
obj.has_media = true
|
||||||
|
obj.media = {
|
||||||
|
source: await downloadAndSave(post_media.oembed.thumbnail_url),
|
||||||
|
height: post_media.oembed.thumbnail_height,
|
||||||
|
width: post_media.oembed.thumbnail_width,
|
||||||
|
duration: null,
|
||||||
|
is_gif: null,
|
||||||
|
not_hosted_in_reddit: true,
|
||||||
|
embed_src: null
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let str = post_media.oembed.html
|
||||||
|
let r = /iframe.*?src=\"(.*?)\"/;
|
||||||
|
let src = r.exec(str)[1]
|
||||||
|
obj.media.embed_src = cleanUrl(src)
|
||||||
|
} catch(error) {
|
||||||
|
console.error(`Error while trying to get src link from embed html.`, error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(post_media.type === 'youtube.com') {
|
||||||
|
obj.has_media = true
|
||||||
|
obj.media = {
|
||||||
|
source: 'YouTube',
|
||||||
|
height: post_media.oembed.thumbnail_height,
|
||||||
|
width: post_media.oembed.thumbnail_width,
|
||||||
|
thumbnail: await downloadAndSave(post_media.oembed.thumbnail_url, '', false, true),
|
||||||
|
author_name: post_media.oembed.author_name,
|
||||||
|
author_url: post_media.oembed.author_url,
|
||||||
|
title: post_media.oembed.title,
|
||||||
|
duration: null,
|
||||||
|
is_gif: null,
|
||||||
|
not_hosted_in_reddit: true,
|
||||||
|
embed_src: null
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
let str = post_media.oembed.html
|
||||||
|
let r = /iframe.*?src=\"(.*?)\"/;
|
||||||
|
let src = r.exec(str)[1]
|
||||||
|
let youtube_id = src.split('/embed/')[1].split('?')[0]
|
||||||
|
// TODO: Invidious youtube URLs.
|
||||||
|
let youtube_url = `https://youtube.com/watch?v=${youtube_id}`
|
||||||
|
obj.media.embed_src = youtube_url
|
||||||
|
} catch(error) {
|
||||||
|
console.error(`Error while trying to get src link from embed youtube html.`, error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj.has_media = true
|
||||||
|
let video
|
||||||
|
if(!reddit_video) {
|
||||||
|
video = post_media.reddit_video
|
||||||
|
} else {
|
||||||
|
video = post.preview.reddit_video_preview
|
||||||
|
}
|
||||||
|
|
||||||
|
if(video) {
|
||||||
|
obj.media = {
|
||||||
|
source: await downloadAndSave(video.fallback_url),
|
||||||
|
height: video.height,
|
||||||
|
width: video.width,
|
||||||
|
duration: video.duration,
|
||||||
|
is_gif: post_media.reddit_video.is_gif
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(post_media.oembed) {
|
||||||
|
obj.media = {
|
||||||
|
source: 'external',
|
||||||
|
height: post_media.oembed.height,
|
||||||
|
width: post_media.oembed.width,
|
||||||
|
provider_url: post_media.oembed.provider_url,
|
||||||
|
provider_name: post_media.oembed.provider_name,
|
||||||
|
title: post_media.oembed.title,
|
||||||
|
duration: null,
|
||||||
|
is_gif: null,
|
||||||
|
not_hosted_in_reddit: true,
|
||||||
|
embed_src: null
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let str = post_media.oembed.html
|
||||||
|
let r = /iframe.*?src=\"(.*?)\"/;
|
||||||
|
let src = r.exec(str)[1]
|
||||||
|
obj.media.embed_src = cleanUrl(src)
|
||||||
|
} catch(error) {
|
||||||
|
//console.error(`Error while trying to get src link from embed html.`, error)
|
||||||
|
}
|
||||||
|
if(!obj.media.embed_src) {
|
||||||
|
obj.media.embed_src = post_media.oembed.url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj.has_media = true
|
||||||
|
if(!gif_to_mp4) {
|
||||||
|
obj.media = {
|
||||||
|
source: await downloadAndSave(post.preview.reddit_video_preview.fallback_url),
|
||||||
|
height: post.preview.reddit_video_preview.height,
|
||||||
|
width: post.preview.reddit_video_preview.width,
|
||||||
|
duration: post.preview.reddit_video_preview.duration,
|
||||||
|
is_gif: true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
obj.media = {
|
||||||
|
source: await downloadAndSave(gif_to_mp4.url, null, true),
|
||||||
|
height: gif_to_mp4.height,
|
||||||
|
width: gif_to_mp4.width,
|
||||||
|
duration: null,
|
||||||
|
is_gif: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resolve(obj)
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
module.exports = function() {
|
||||||
|
this.processSearchResults = function(json, parsed, after, before) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
(async () => {
|
||||||
|
if(!parsed) {
|
||||||
|
json = JSON.parse(json)
|
||||||
|
}
|
||||||
|
let posts = []
|
||||||
|
let search_firstpage = false
|
||||||
|
let before = json.data.before
|
||||||
|
let after = json.data.after
|
||||||
|
|
||||||
|
if(!after && !before) {
|
||||||
|
search_firstpage = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if(json.data.children) {
|
||||||
|
let view_more_posts = false
|
||||||
|
let posts_limit = 25
|
||||||
|
|
||||||
|
if(json.data.children.length > posts_limit) {
|
||||||
|
view_more_posts = true
|
||||||
|
} else {
|
||||||
|
posts_limit = json.data.children.length
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i = 0; i < posts_limit; i++) {
|
||||||
|
let post = json.data.children[i].data
|
||||||
|
let post_id = post.permalink.split('/').slice(-2)[0] + '/'
|
||||||
|
let url = post.permalink.replace(post_id, '')
|
||||||
|
|
||||||
|
let obj = {
|
||||||
|
subreddit: post.subreddit,
|
||||||
|
title: post.title,
|
||||||
|
created: post.created_utc,
|
||||||
|
subreddit_name_prefixed: post.subreddit_name_prefixed,
|
||||||
|
ups: post.ups,
|
||||||
|
url: url,
|
||||||
|
edited: post.edited,
|
||||||
|
selftext_html: unescape(post.body_html),
|
||||||
|
num_comments: post.num_comments,
|
||||||
|
permalink: post.permalink,
|
||||||
|
author: post.author,
|
||||||
|
link_title: post.link_title
|
||||||
|
}
|
||||||
|
posts.push(obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let obj = {
|
||||||
|
search_firstpage: search_firstpage,
|
||||||
|
before: before,
|
||||||
|
after: after,
|
||||||
|
posts: posts
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(obj)
|
||||||
|
})()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
../acorn/bin/acorn
|
|
@ -0,0 +1 @@
|
||||||
|
../mime/cli.js
|
|
@ -0,0 +1 @@
|
||||||
|
../@babel/parser/bin/babel-parser.js
|
|
@ -0,0 +1 @@
|
||||||
|
../sshpk/bin/sshpk-conv
|
|
@ -0,0 +1 @@
|
||||||
|
../sshpk/bin/sshpk-sign
|
|
@ -0,0 +1 @@
|
||||||
|
../sshpk/bin/sshpk-verify
|
|
@ -0,0 +1 @@
|
||||||
|
../uuid/bin/uuid
|
|
@ -0,0 +1,22 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,19 @@
|
||||||
|
# @babel/helper-validator-identifier
|
||||||
|
|
||||||
|
> Validate identifier/keywords name
|
||||||
|
|
||||||
|
See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/en/next/babel-helper-validator-identifier.html) for more information.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev @babel/helper-validator-identifier
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/helper-validator-identifier --dev
|
||||||
|
```
|
|
@ -0,0 +1,77 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.isIdentifierStart = isIdentifierStart;
|
||||||
|
exports.isIdentifierChar = isIdentifierChar;
|
||||||
|
exports.isIdentifierName = isIdentifierName;
|
||||||
|
let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
|
||||||
|
let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
|
||||||
|
const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
|
||||||
|
const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
|
||||||
|
nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
|
||||||
|
const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8952, 286, 50, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];
|
||||||
|
const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
||||||
|
|
||||||
|
function isInAstralSet(code, set) {
|
||||||
|
let pos = 0x10000;
|
||||||
|
|
||||||
|
for (let i = 0, length = set.length; i < length; i += 2) {
|
||||||
|
pos += set[i];
|
||||||
|
if (pos > code) return false;
|
||||||
|
pos += set[i + 1];
|
||||||
|
if (pos >= code) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isIdentifierStart(code) {
|
||||||
|
if (code < 65) return code === 36;
|
||||||
|
if (code <= 90) return true;
|
||||||
|
if (code < 97) return code === 95;
|
||||||
|
if (code <= 122) return true;
|
||||||
|
|
||||||
|
if (code <= 0xffff) {
|
||||||
|
return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
return isInAstralSet(code, astralIdentifierStartCodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isIdentifierChar(code) {
|
||||||
|
if (code < 48) return code === 36;
|
||||||
|
if (code < 58) return true;
|
||||||
|
if (code < 65) return false;
|
||||||
|
if (code <= 90) return true;
|
||||||
|
if (code < 97) return code === 95;
|
||||||
|
if (code <= 122) return true;
|
||||||
|
|
||||||
|
if (code <= 0xffff) {
|
||||||
|
return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
|
||||||
|
}
|
||||||
|
|
||||||
|
return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isIdentifierName(name) {
|
||||||
|
let isFirst = true;
|
||||||
|
|
||||||
|
for (let _i = 0, _Array$from = Array.from(name); _i < _Array$from.length; _i++) {
|
||||||
|
const char = _Array$from[_i];
|
||||||
|
const cp = char.codePointAt(0);
|
||||||
|
|
||||||
|
if (isFirst) {
|
||||||
|
if (!isIdentifierStart(cp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
isFirst = false;
|
||||||
|
} else if (!isIdentifierChar(cp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return !isFirst;
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierName", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierName;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierChar", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierChar;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isIdentifierStart", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _identifier.isIdentifierStart;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictBindOnlyReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictBindReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictBindReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isStrictReservedWord", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isStrictReservedWord;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isKeyword", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _keyword.isKeyword;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var _identifier = require("./identifier");
|
||||||
|
|
||||||
|
var _keyword = require("./keyword");
|
|
@ -0,0 +1,38 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.isReservedWord = isReservedWord;
|
||||||
|
exports.isStrictReservedWord = isStrictReservedWord;
|
||||||
|
exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
|
||||||
|
exports.isStrictBindReservedWord = isStrictBindReservedWord;
|
||||||
|
exports.isKeyword = isKeyword;
|
||||||
|
const reservedWords = {
|
||||||
|
keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
|
||||||
|
strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
|
||||||
|
strictBind: ["eval", "arguments"]
|
||||||
|
};
|
||||||
|
const keywords = new Set(reservedWords.keyword);
|
||||||
|
const reservedWordsStrictSet = new Set(reservedWords.strict);
|
||||||
|
const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
|
||||||
|
|
||||||
|
function isReservedWord(word, inModule) {
|
||||||
|
return inModule && word === "await" || word === "enum";
|
||||||
|
}
|
||||||
|
|
||||||
|
function isStrictReservedWord(word, inModule) {
|
||||||
|
return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isStrictBindOnlyReservedWord(word) {
|
||||||
|
return reservedWordsStrictBindSet.has(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isStrictBindReservedWord(word, inModule) {
|
||||||
|
return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isKeyword(word) {
|
||||||
|
return keywords.has(word);
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
"_from": "@babel/helper-validator-identifier@^7.10.4",
|
||||||
|
"_id": "@babel/helper-validator-identifier@7.10.4",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
|
||||||
|
"_location": "/@babel/helper-validator-identifier",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@babel/helper-validator-identifier@^7.10.4",
|
||||||
|
"name": "@babel/helper-validator-identifier",
|
||||||
|
"escapedName": "@babel%2fhelper-validator-identifier",
|
||||||
|
"scope": "@babel",
|
||||||
|
"rawSpec": "^7.10.4",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^7.10.4"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/@babel/types"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
|
||||||
|
"_shasum": "a78c7a7251e01f616512d31b10adcf52ada5e0d2",
|
||||||
|
"_spec": "@babel/helper-validator-identifier@^7.10.4",
|
||||||
|
"_where": "/home/user/site/node_modules/@babel/types",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/babel/babel/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "Validate identifier/keywords name",
|
||||||
|
"devDependencies": {
|
||||||
|
"charcodes": "^0.2.0",
|
||||||
|
"unicode-13.0.0": "^0.8.0"
|
||||||
|
},
|
||||||
|
"exports": "./lib/index.js",
|
||||||
|
"gitHead": "7fd40d86a0d03ff0e9c3ea16b29689945433d4df",
|
||||||
|
"homepage": "https://github.com/babel/babel#readme",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "./lib/index.js",
|
||||||
|
"name": "@babel/helper-validator-identifier",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/babel/babel.git",
|
||||||
|
"directory": "packages/babel-helper-validator-identifier"
|
||||||
|
},
|
||||||
|
"version": "7.10.4"
|
||||||
|
}
|
75
node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
generated
vendored
Normal file
75
node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
generated
vendored
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
// Always use the latest available version of Unicode!
|
||||||
|
// https://tc39.github.io/ecma262/#sec-conformance
|
||||||
|
const version = "13.0.0";
|
||||||
|
|
||||||
|
const start = require("unicode-" +
|
||||||
|
version +
|
||||||
|
"/Binary_Property/ID_Start/code-points.js").filter(function (ch) {
|
||||||
|
return ch > 0x7f;
|
||||||
|
});
|
||||||
|
let last = -1;
|
||||||
|
const cont = [0x200c, 0x200d].concat(
|
||||||
|
require("unicode-" +
|
||||||
|
version +
|
||||||
|
"/Binary_Property/ID_Continue/code-points.js").filter(function (ch) {
|
||||||
|
return ch > 0x7f && search(start, ch, last + 1) == -1;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
function search(arr, ch, starting) {
|
||||||
|
for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) {
|
||||||
|
if (arr[i] === ch) return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function pad(str, width) {
|
||||||
|
while (str.length < width) str = "0" + str;
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function esc(code) {
|
||||||
|
const hex = code.toString(16);
|
||||||
|
if (hex.length <= 2) return "\\x" + pad(hex, 2);
|
||||||
|
else return "\\u" + pad(hex, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
function generate(chars) {
|
||||||
|
const astral = [];
|
||||||
|
let re = "";
|
||||||
|
for (let i = 0, at = 0x10000; i < chars.length; i++) {
|
||||||
|
const from = chars[i];
|
||||||
|
let to = from;
|
||||||
|
while (i < chars.length - 1 && chars[i + 1] == to + 1) {
|
||||||
|
i++;
|
||||||
|
to++;
|
||||||
|
}
|
||||||
|
if (to <= 0xffff) {
|
||||||
|
if (from == to) re += esc(from);
|
||||||
|
else if (from + 1 == to) re += esc(from) + esc(to);
|
||||||
|
else re += esc(from) + "-" + esc(to);
|
||||||
|
} else {
|
||||||
|
astral.push(from - at, to - from);
|
||||||
|
at = to;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return { nonASCII: re, astral: astral };
|
||||||
|
}
|
||||||
|
|
||||||
|
const startData = generate(start);
|
||||||
|
const contData = generate(cont);
|
||||||
|
|
||||||
|
console.log("/* prettier-ignore */");
|
||||||
|
console.log('let nonASCIIidentifierStartChars = "' + startData.nonASCII + '";');
|
||||||
|
console.log("/* prettier-ignore */");
|
||||||
|
console.log('let nonASCIIidentifierChars = "' + contData.nonASCII + '";');
|
||||||
|
console.log("/* prettier-ignore */");
|
||||||
|
console.log(
|
||||||
|
"const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"
|
||||||
|
);
|
||||||
|
console.log("/* prettier-ignore */");
|
||||||
|
console.log(
|
||||||
|
"const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"
|
||||||
|
);
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (C) 2012-2014 by various contributors (see AUTHORS)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
|
@ -0,0 +1,19 @@
|
||||||
|
# @babel/parser
|
||||||
|
|
||||||
|
> A JavaScript parser
|
||||||
|
|
||||||
|
See our website [@babel/parser](https://babeljs.io/docs/en/next/babel-parser.html) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen) associated with this package.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev @babel/parser
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/parser --dev
|
||||||
|
```
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
/* eslint no-var: 0 */
|
||||||
|
|
||||||
|
var parser = require("..");
|
||||||
|
var fs = require("fs");
|
||||||
|
|
||||||
|
var filename = process.argv[2];
|
||||||
|
if (!filename) {
|
||||||
|
console.error("no filename specified");
|
||||||
|
} else {
|
||||||
|
var file = fs.readFileSync(filename, "utf8");
|
||||||
|
var ast = parser.parse(file);
|
||||||
|
|
||||||
|
console.log(JSON.stringify(ast, null, " "));
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
"_from": "@babel/parser@^7.6.0",
|
||||||
|
"_id": "@babel/parser@7.11.3",
|
||||||
|
"_inBundle": false,
|
||||||
|
"_integrity": "sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==",
|
||||||
|
"_location": "/@babel/parser",
|
||||||
|
"_phantomChildren": {},
|
||||||
|
"_requested": {
|
||||||
|
"type": "range",
|
||||||
|
"registry": true,
|
||||||
|
"raw": "@babel/parser@^7.6.0",
|
||||||
|
"name": "@babel/parser",
|
||||||
|
"escapedName": "@babel%2fparser",
|
||||||
|
"scope": "@babel",
|
||||||
|
"rawSpec": "^7.6.0",
|
||||||
|
"saveSpec": null,
|
||||||
|
"fetchSpec": "^7.6.0"
|
||||||
|
},
|
||||||
|
"_requiredBy": [
|
||||||
|
"/constantinople",
|
||||||
|
"/with"
|
||||||
|
],
|
||||||
|
"_resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.3.tgz",
|
||||||
|
"_shasum": "9e1eae46738bcd08e23e867bab43e7b95299a8f9",
|
||||||
|
"_spec": "@babel/parser@^7.6.0",
|
||||||
|
"_where": "/home/user/site/node_modules/constantinople",
|
||||||
|
"author": {
|
||||||
|
"name": "Sebastian McKenzie",
|
||||||
|
"email": "sebmck@gmail.com"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"parser": "bin/babel-parser.js"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/babel/babel/issues"
|
||||||
|
},
|
||||||
|
"bundleDependencies": false,
|
||||||
|
"deprecated": false,
|
||||||
|
"description": "A JavaScript parser",
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/code-frame": "^7.10.4",
|
||||||
|
"@babel/helper-fixtures": "^7.10.5",
|
||||||
|
"@babel/helper-validator-identifier": "^7.10.4",
|
||||||
|
"charcodes": "^0.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"bin",
|
||||||
|
"lib",
|
||||||
|
"typings"
|
||||||
|
],
|
||||||
|
"gitHead": "57b658c4d83db6874dd3d72a5a653c5b2cec6e78",
|
||||||
|
"homepage": "https://babeljs.io/",
|
||||||
|
"keywords": [
|
||||||
|
"babel",
|
||||||
|
"javascript",
|
||||||
|
"parser",
|
||||||
|
"tc39",
|
||||||
|
"ecmascript",
|
||||||
|
"@babel/parser"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "lib/index.js",
|
||||||
|
"name": "@babel/parser",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/babel/babel.git",
|
||||||
|
"directory": "packages/babel-parser"
|
||||||
|
},
|
||||||
|
"types": "typings/babel-parser.d.ts",
|
||||||
|
"version": "7.11.3"
|
||||||
|
}
|
|
@ -0,0 +1,149 @@
|
||||||
|
// Type definitions for @babel/parser
|
||||||
|
// Project: https://github.com/babel/babel/tree/main/packages/babel-parser
|
||||||
|
// Definitions by: Troy Gerwien <https://github.com/yortus>
|
||||||
|
// Marvin Hagemeister <https://github.com/marvinhagemeister>
|
||||||
|
// Avi Vahl <https://github.com/AviVahl>
|
||||||
|
// TypeScript Version: 2.9
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the provided code as an entire ECMAScript program.
|
||||||
|
*/
|
||||||
|
export function parse(input: string, options?: ParserOptions): import('@babel/types').File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the provided code as a single expression.
|
||||||
|
*/
|
||||||
|
export function parseExpression(input: string, options?: ParserOptions): import('@babel/types').Expression;
|
||||||
|
|
||||||
|
export interface ParserOptions {
|
||||||
|
/**
|
||||||
|
* By default, import and export declarations can only appear at a program's top level.
|
||||||
|
* Setting this option to true allows them anywhere where a statement is allowed.
|
||||||
|
*/
|
||||||
|
allowImportExportEverywhere?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, await use is not allowed outside of an async function.
|
||||||
|
* Set this to true to accept such code.
|
||||||
|
*/
|
||||||
|
allowAwaitOutsideFunction?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, a return statement at the top level raises an error.
|
||||||
|
* Set this to true to accept such code.
|
||||||
|
*/
|
||||||
|
allowReturnOutsideFunction?: boolean;
|
||||||
|
|
||||||
|
allowSuperOutsideMethod?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, exported identifiers must refer to a declared variable.
|
||||||
|
* Set this to true to allow export statements to reference undeclared variables.
|
||||||
|
*/
|
||||||
|
allowUndeclaredExports?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate the mode the code should be parsed in.
|
||||||
|
* Can be one of "script", "module", or "unambiguous". Defaults to "script".
|
||||||
|
* "unambiguous" will make @babel/parser attempt to guess, based on the presence
|
||||||
|
* of ES6 import or export statements.
|
||||||
|
* Files with ES6 imports and exports are considered "module" and are otherwise "script".
|
||||||
|
*/
|
||||||
|
sourceType?: 'script' | 'module' | 'unambiguous';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correlate output AST nodes with their source filename.
|
||||||
|
* Useful when generating code and source maps from the ASTs of multiple input files.
|
||||||
|
*/
|
||||||
|
sourceFilename?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, the first line of code parsed is treated as line 1.
|
||||||
|
* You can provide a line number to alternatively start with.
|
||||||
|
* Useful for integration with other source tools.
|
||||||
|
*/
|
||||||
|
startLine?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array containing the plugins that you want to enable.
|
||||||
|
*/
|
||||||
|
plugins?: ParserPlugin[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the parser work in strict mode.
|
||||||
|
* Defaults to true if sourceType === 'module'. Otherwise, false.
|
||||||
|
*/
|
||||||
|
strictMode?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a ranges property to each node: [node.start, node.end]
|
||||||
|
*/
|
||||||
|
ranges?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds all parsed tokens to a tokens property on the File node.
|
||||||
|
*/
|
||||||
|
tokens?: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* By default, the parser adds information about parentheses by setting
|
||||||
|
* `extra.parenthesized` to `true` as needed.
|
||||||
|
* When this option is `true` the parser creates `ParenthesizedExpression`
|
||||||
|
* AST nodes instead of using the `extra` property.
|
||||||
|
*/
|
||||||
|
createParenthesizedExpressions?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ParserPlugin =
|
||||||
|
'asyncGenerators' |
|
||||||
|
'bigInt' |
|
||||||
|
'classPrivateMethods' |
|
||||||
|
'classPrivateProperties' |
|
||||||
|
'classProperties' |
|
||||||
|
'decimal' |
|
||||||
|
'decorators' |
|
||||||
|
'decorators-legacy' |
|
||||||
|
'doExpressions' |
|
||||||
|
'dynamicImport' |
|
||||||
|
'estree' |
|
||||||
|
'exportDefaultFrom' |
|
||||||
|
'exportNamespaceFrom' | // deprecated
|
||||||
|
'flow' |
|
||||||
|
'flowComments' |
|
||||||
|
'functionBind' |
|
||||||
|
'functionSent' |
|
||||||
|
'importMeta' |
|
||||||
|
'jsx' |
|
||||||
|
'logicalAssignment' |
|
||||||
|
'moduleAttributes' |
|
||||||
|
'nullishCoalescingOperator' |
|
||||||
|
'numericSeparator' |
|
||||||
|
'objectRestSpread' |
|
||||||
|
'optionalCatchBinding' |
|
||||||
|
'optionalChaining' |
|
||||||
|
'partialApplication' |
|
||||||
|
'pipelineOperator' |
|
||||||
|
'placeholders' |
|
||||||
|
'privateIn' |
|
||||||
|
'throwExpressions' |
|
||||||
|
'topLevelAwait' |
|
||||||
|
'typescript' |
|
||||||
|
'v8intrinsic' |
|
||||||
|
ParserPluginWithOptions;
|
||||||
|
|
||||||
|
export type ParserPluginWithOptions =
|
||||||
|
['decorators', DecoratorsPluginOptions] |
|
||||||
|
['pipelineOperator', PipelineOperatorPluginOptions] |
|
||||||
|
['flow', FlowPluginOptions];
|
||||||
|
|
||||||
|
export interface DecoratorsPluginOptions {
|
||||||
|
decoratorsBeforeExport?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PipelineOperatorPluginOptions {
|
||||||
|
proposal: 'minimal' | 'smart';
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FlowPluginOptions {
|
||||||
|
all?: boolean;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2014-present Sebastian McKenzie and other contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,19 @@
|
||||||
|
# @babel/types
|
||||||
|
|
||||||
|
> Babel Types is a Lodash-esque utility library for AST nodes
|
||||||
|
|
||||||
|
See our website [@babel/types](https://babeljs.io/docs/en/next/babel-types.html) for more information or the [issues](https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A%20types%22+is%3Aopen) associated with this package.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
Using npm:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save-dev @babel/types
|
||||||
|
```
|
||||||
|
|
||||||
|
or using yarn:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @babel/types --dev
|
||||||
|
```
|
|
@ -0,0 +1,19 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = assertNode;
|
||||||
|
|
||||||
|
var _isNode = _interopRequireDefault(require("../validators/isNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function assertNode(node) {
|
||||||
|
if (!(0, _isNode.default)(node)) {
|
||||||
|
var _node$type;
|
||||||
|
|
||||||
|
const type = (_node$type = node == null ? void 0 : node.type) != null ? _node$type : JSON.stringify(node);
|
||||||
|
throw new TypeError(`Not a valid node of type "${type}"`);
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,42 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = builder;
|
||||||
|
|
||||||
|
var _clone = _interopRequireDefault(require("lodash/clone"));
|
||||||
|
|
||||||
|
var _definitions = require("../definitions");
|
||||||
|
|
||||||
|
var _validate = _interopRequireDefault(require("../validators/validate"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function builder(type, ...args) {
|
||||||
|
const keys = _definitions.BUILDER_KEYS[type];
|
||||||
|
const countArgs = args.length;
|
||||||
|
|
||||||
|
if (countArgs > keys.length) {
|
||||||
|
throw new Error(`${type}: Too many arguments passed. Received ${countArgs} but can receive no more than ${keys.length}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const node = {
|
||||||
|
type
|
||||||
|
};
|
||||||
|
let i = 0;
|
||||||
|
keys.forEach(key => {
|
||||||
|
const field = _definitions.NODE_FIELDS[type][key];
|
||||||
|
let arg;
|
||||||
|
if (i < countArgs) arg = args[i];
|
||||||
|
if (arg === undefined) arg = (0, _clone.default)(field.default);
|
||||||
|
node[key] = arg;
|
||||||
|
i++;
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const key of Object.keys(node)) {
|
||||||
|
(0, _validate.default)(node, key, node[key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
22
node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js
generated
vendored
Normal file
22
node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = createFlowUnionType;
|
||||||
|
|
||||||
|
var _generated = require("../generated");
|
||||||
|
|
||||||
|
var _removeTypeDuplicates = _interopRequireDefault(require("../../modifications/flow/removeTypeDuplicates"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function createFlowUnionType(types) {
|
||||||
|
const flattened = (0, _removeTypeDuplicates.default)(types);
|
||||||
|
|
||||||
|
if (flattened.length === 1) {
|
||||||
|
return flattened[0];
|
||||||
|
} else {
|
||||||
|
return (0, _generated.unionTypeAnnotation)(flattened);
|
||||||
|
}
|
||||||
|
}
|
28
node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js
generated
vendored
Normal file
28
node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js
generated
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = createTypeAnnotationBasedOnTypeof;
|
||||||
|
|
||||||
|
var _generated = require("../generated");
|
||||||
|
|
||||||
|
function createTypeAnnotationBasedOnTypeof(type) {
|
||||||
|
if (type === "string") {
|
||||||
|
return (0, _generated.stringTypeAnnotation)();
|
||||||
|
} else if (type === "number") {
|
||||||
|
return (0, _generated.numberTypeAnnotation)();
|
||||||
|
} else if (type === "undefined") {
|
||||||
|
return (0, _generated.voidTypeAnnotation)();
|
||||||
|
} else if (type === "boolean") {
|
||||||
|
return (0, _generated.booleanTypeAnnotation)();
|
||||||
|
} else if (type === "function") {
|
||||||
|
return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Function"));
|
||||||
|
} else if (type === "object") {
|
||||||
|
return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Object"));
|
||||||
|
} else if (type === "symbol") {
|
||||||
|
return (0, _generated.genericTypeAnnotation)((0, _generated.identifier)("Symbol"));
|
||||||
|
} else {
|
||||||
|
throw new Error("Invalid typeof value");
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,31 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = buildChildren;
|
||||||
|
|
||||||
|
var _generated = require("../../validators/generated");
|
||||||
|
|
||||||
|
var _cleanJSXElementLiteralChild = _interopRequireDefault(require("../../utils/react/cleanJSXElementLiteralChild"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function buildChildren(node) {
|
||||||
|
const elements = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < node.children.length; i++) {
|
||||||
|
let child = node.children[i];
|
||||||
|
|
||||||
|
if ((0, _generated.isJSXText)(child)) {
|
||||||
|
(0, _cleanJSXElementLiteralChild.default)(child, elements);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isJSXExpressionContainer)(child)) child = child.expression;
|
||||||
|
if ((0, _generated.isJSXEmptyExpression)(child)) continue;
|
||||||
|
elements.push(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
return elements;
|
||||||
|
}
|
23
node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js
generated
vendored
Normal file
23
node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js
generated
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = createTSUnionType;
|
||||||
|
|
||||||
|
var _generated = require("../generated");
|
||||||
|
|
||||||
|
var _removeTypeDuplicates = _interopRequireDefault(require("../../modifications/typescript/removeTypeDuplicates"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function createTSUnionType(typeAnnotations) {
|
||||||
|
const types = typeAnnotations.map(type => type.typeAnnotations);
|
||||||
|
const flattened = (0, _removeTypeDuplicates.default)(types);
|
||||||
|
|
||||||
|
if (flattened.length === 1) {
|
||||||
|
return flattened[0];
|
||||||
|
} else {
|
||||||
|
return (0, _generated.tsUnionType)(flattened);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = clone;
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("./cloneNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function clone(node) {
|
||||||
|
return (0, _cloneNode.default)(node, false);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = cloneDeep;
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("./cloneNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function cloneDeep(node) {
|
||||||
|
return (0, _cloneNode.default)(node);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = cloneDeepWithoutLoc;
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("./cloneNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function cloneDeepWithoutLoc(node) {
|
||||||
|
return (0, _cloneNode.default)(node, true, true);
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = cloneNode;
|
||||||
|
|
||||||
|
var _definitions = require("../definitions");
|
||||||
|
|
||||||
|
const has = Function.call.bind(Object.prototype.hasOwnProperty);
|
||||||
|
|
||||||
|
function cloneIfNode(obj, deep, withoutLoc) {
|
||||||
|
if (obj && typeof obj.type === "string") {
|
||||||
|
return cloneNode(obj, deep, withoutLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cloneIfNodeOrArray(obj, deep, withoutLoc) {
|
||||||
|
if (Array.isArray(obj)) {
|
||||||
|
return obj.map(node => cloneIfNode(node, deep, withoutLoc));
|
||||||
|
}
|
||||||
|
|
||||||
|
return cloneIfNode(obj, deep, withoutLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
function cloneNode(node, deep = true, withoutLoc = false) {
|
||||||
|
if (!node) return node;
|
||||||
|
const {
|
||||||
|
type
|
||||||
|
} = node;
|
||||||
|
const newNode = {
|
||||||
|
type
|
||||||
|
};
|
||||||
|
|
||||||
|
if (type === "Identifier") {
|
||||||
|
newNode.name = node.name;
|
||||||
|
|
||||||
|
if (has(node, "optional") && typeof node.optional === "boolean") {
|
||||||
|
newNode.optional = node.optional;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "typeAnnotation")) {
|
||||||
|
newNode.typeAnnotation = deep ? cloneIfNodeOrArray(node.typeAnnotation, true, withoutLoc) : node.typeAnnotation;
|
||||||
|
}
|
||||||
|
} else if (!has(_definitions.NODE_FIELDS, type)) {
|
||||||
|
throw new Error(`Unknown node type: "${type}"`);
|
||||||
|
} else {
|
||||||
|
for (const field of Object.keys(_definitions.NODE_FIELDS[type])) {
|
||||||
|
if (has(node, field)) {
|
||||||
|
if (deep) {
|
||||||
|
newNode[field] = type === "File" && field === "comments" ? maybeCloneComments(node.comments, deep, withoutLoc) : cloneIfNodeOrArray(node[field], true, withoutLoc);
|
||||||
|
} else {
|
||||||
|
newNode[field] = node[field];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "loc")) {
|
||||||
|
if (withoutLoc) {
|
||||||
|
newNode.loc = null;
|
||||||
|
} else {
|
||||||
|
newNode.loc = node.loc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "leadingComments")) {
|
||||||
|
newNode.leadingComments = maybeCloneComments(node.leadingComments, deep, withoutLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "innerComments")) {
|
||||||
|
newNode.innerComments = maybeCloneComments(node.innerComments, deep, withoutLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "trailingComments")) {
|
||||||
|
newNode.trailingComments = maybeCloneComments(node.trailingComments, deep, withoutLoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has(node, "extra")) {
|
||||||
|
newNode.extra = Object.assign({}, node.extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cloneCommentsWithoutLoc(comments) {
|
||||||
|
return comments.map(({
|
||||||
|
type,
|
||||||
|
value
|
||||||
|
}) => ({
|
||||||
|
type,
|
||||||
|
value,
|
||||||
|
loc: null
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
function maybeCloneComments(comments, deep, withoutLoc) {
|
||||||
|
return deep && withoutLoc ? cloneCommentsWithoutLoc(comments) : comments;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = cloneWithoutLoc;
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("./cloneNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function cloneWithoutLoc(node) {
|
||||||
|
return (0, _cloneNode.default)(node, false, true);
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = addComment;
|
||||||
|
|
||||||
|
var _addComments = _interopRequireDefault(require("./addComments"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function addComment(node, type, content, line) {
|
||||||
|
return (0, _addComments.default)(node, type, [{
|
||||||
|
type: line ? "CommentLine" : "CommentBlock",
|
||||||
|
value: content
|
||||||
|
}]);
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = addComments;
|
||||||
|
|
||||||
|
function addComments(node, type, comments) {
|
||||||
|
if (!comments || !node) return node;
|
||||||
|
const key = `${type}Comments`;
|
||||||
|
|
||||||
|
if (node[key]) {
|
||||||
|
if (type === "leading") {
|
||||||
|
node[key] = comments.concat(node[key]);
|
||||||
|
} else {
|
||||||
|
node[key] = node[key].concat(comments);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
node[key] = comments;
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = inheritInnerComments;
|
||||||
|
|
||||||
|
var _inherit = _interopRequireDefault(require("../utils/inherit"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function inheritInnerComments(child, parent) {
|
||||||
|
(0, _inherit.default)("innerComments", child, parent);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = inheritLeadingComments;
|
||||||
|
|
||||||
|
var _inherit = _interopRequireDefault(require("../utils/inherit"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function inheritLeadingComments(child, parent) {
|
||||||
|
(0, _inherit.default)("leadingComments", child, parent);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = inheritTrailingComments;
|
||||||
|
|
||||||
|
var _inherit = _interopRequireDefault(require("../utils/inherit"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function inheritTrailingComments(child, parent) {
|
||||||
|
(0, _inherit.default)("trailingComments", child, parent);
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = inheritsComments;
|
||||||
|
|
||||||
|
var _inheritTrailingComments = _interopRequireDefault(require("./inheritTrailingComments"));
|
||||||
|
|
||||||
|
var _inheritLeadingComments = _interopRequireDefault(require("./inheritLeadingComments"));
|
||||||
|
|
||||||
|
var _inheritInnerComments = _interopRequireDefault(require("./inheritInnerComments"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function inheritsComments(child, parent) {
|
||||||
|
(0, _inheritTrailingComments.default)(child, parent);
|
||||||
|
(0, _inheritLeadingComments.default)(child, parent);
|
||||||
|
(0, _inheritInnerComments.default)(child, parent);
|
||||||
|
return child;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = removeComments;
|
||||||
|
|
||||||
|
var _constants = require("../constants");
|
||||||
|
|
||||||
|
function removeComments(node) {
|
||||||
|
_constants.COMMENT_KEYS.forEach(key => {
|
||||||
|
node[key] = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.TSBASETYPE_TYPES = exports.TSTYPE_TYPES = exports.TSTYPEELEMENT_TYPES = exports.PRIVATE_TYPES = exports.JSX_TYPES = exports.ENUMMEMBER_TYPES = exports.ENUMBODY_TYPES = exports.FLOWPREDICATE_TYPES = exports.FLOWDECLARATION_TYPES = exports.FLOWBASEANNOTATION_TYPES = exports.FLOWTYPE_TYPES = exports.FLOW_TYPES = exports.MODULESPECIFIER_TYPES = exports.EXPORTDECLARATION_TYPES = exports.MODULEDECLARATION_TYPES = exports.CLASS_TYPES = exports.PATTERN_TYPES = exports.UNARYLIKE_TYPES = exports.PROPERTY_TYPES = exports.OBJECTMEMBER_TYPES = exports.METHOD_TYPES = exports.USERWHITESPACABLE_TYPES = exports.IMMUTABLE_TYPES = exports.LITERAL_TYPES = exports.TSENTITYNAME_TYPES = exports.LVAL_TYPES = exports.PATTERNLIKE_TYPES = exports.DECLARATION_TYPES = exports.PUREISH_TYPES = exports.FUNCTIONPARENT_TYPES = exports.FUNCTION_TYPES = exports.FORXSTATEMENT_TYPES = exports.FOR_TYPES = exports.EXPRESSIONWRAPPER_TYPES = exports.WHILE_TYPES = exports.LOOP_TYPES = exports.CONDITIONAL_TYPES = exports.COMPLETIONSTATEMENT_TYPES = exports.TERMINATORLESS_TYPES = exports.STATEMENT_TYPES = exports.BLOCK_TYPES = exports.BLOCKPARENT_TYPES = exports.SCOPABLE_TYPES = exports.BINARY_TYPES = exports.EXPRESSION_TYPES = void 0;
|
||||||
|
|
||||||
|
var _definitions = require("../../definitions");
|
||||||
|
|
||||||
|
const EXPRESSION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Expression"];
|
||||||
|
exports.EXPRESSION_TYPES = EXPRESSION_TYPES;
|
||||||
|
const BINARY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Binary"];
|
||||||
|
exports.BINARY_TYPES = BINARY_TYPES;
|
||||||
|
const SCOPABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Scopable"];
|
||||||
|
exports.SCOPABLE_TYPES = SCOPABLE_TYPES;
|
||||||
|
const BLOCKPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["BlockParent"];
|
||||||
|
exports.BLOCKPARENT_TYPES = BLOCKPARENT_TYPES;
|
||||||
|
const BLOCK_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Block"];
|
||||||
|
exports.BLOCK_TYPES = BLOCK_TYPES;
|
||||||
|
const STATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Statement"];
|
||||||
|
exports.STATEMENT_TYPES = STATEMENT_TYPES;
|
||||||
|
const TERMINATORLESS_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Terminatorless"];
|
||||||
|
exports.TERMINATORLESS_TYPES = TERMINATORLESS_TYPES;
|
||||||
|
const COMPLETIONSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["CompletionStatement"];
|
||||||
|
exports.COMPLETIONSTATEMENT_TYPES = COMPLETIONSTATEMENT_TYPES;
|
||||||
|
const CONDITIONAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Conditional"];
|
||||||
|
exports.CONDITIONAL_TYPES = CONDITIONAL_TYPES;
|
||||||
|
const LOOP_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Loop"];
|
||||||
|
exports.LOOP_TYPES = LOOP_TYPES;
|
||||||
|
const WHILE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["While"];
|
||||||
|
exports.WHILE_TYPES = WHILE_TYPES;
|
||||||
|
const EXPRESSIONWRAPPER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ExpressionWrapper"];
|
||||||
|
exports.EXPRESSIONWRAPPER_TYPES = EXPRESSIONWRAPPER_TYPES;
|
||||||
|
const FOR_TYPES = _definitions.FLIPPED_ALIAS_KEYS["For"];
|
||||||
|
exports.FOR_TYPES = FOR_TYPES;
|
||||||
|
const FORXSTATEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ForXStatement"];
|
||||||
|
exports.FORXSTATEMENT_TYPES = FORXSTATEMENT_TYPES;
|
||||||
|
const FUNCTION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Function"];
|
||||||
|
exports.FUNCTION_TYPES = FUNCTION_TYPES;
|
||||||
|
const FUNCTIONPARENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FunctionParent"];
|
||||||
|
exports.FUNCTIONPARENT_TYPES = FUNCTIONPARENT_TYPES;
|
||||||
|
const PUREISH_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Pureish"];
|
||||||
|
exports.PUREISH_TYPES = PUREISH_TYPES;
|
||||||
|
const DECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Declaration"];
|
||||||
|
exports.DECLARATION_TYPES = DECLARATION_TYPES;
|
||||||
|
const PATTERNLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["PatternLike"];
|
||||||
|
exports.PATTERNLIKE_TYPES = PATTERNLIKE_TYPES;
|
||||||
|
const LVAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["LVal"];
|
||||||
|
exports.LVAL_TYPES = LVAL_TYPES;
|
||||||
|
const TSENTITYNAME_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSEntityName"];
|
||||||
|
exports.TSENTITYNAME_TYPES = TSENTITYNAME_TYPES;
|
||||||
|
const LITERAL_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Literal"];
|
||||||
|
exports.LITERAL_TYPES = LITERAL_TYPES;
|
||||||
|
const IMMUTABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Immutable"];
|
||||||
|
exports.IMMUTABLE_TYPES = IMMUTABLE_TYPES;
|
||||||
|
const USERWHITESPACABLE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["UserWhitespacable"];
|
||||||
|
exports.USERWHITESPACABLE_TYPES = USERWHITESPACABLE_TYPES;
|
||||||
|
const METHOD_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Method"];
|
||||||
|
exports.METHOD_TYPES = METHOD_TYPES;
|
||||||
|
const OBJECTMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ObjectMember"];
|
||||||
|
exports.OBJECTMEMBER_TYPES = OBJECTMEMBER_TYPES;
|
||||||
|
const PROPERTY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Property"];
|
||||||
|
exports.PROPERTY_TYPES = PROPERTY_TYPES;
|
||||||
|
const UNARYLIKE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["UnaryLike"];
|
||||||
|
exports.UNARYLIKE_TYPES = UNARYLIKE_TYPES;
|
||||||
|
const PATTERN_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Pattern"];
|
||||||
|
exports.PATTERN_TYPES = PATTERN_TYPES;
|
||||||
|
const CLASS_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Class"];
|
||||||
|
exports.CLASS_TYPES = CLASS_TYPES;
|
||||||
|
const MODULEDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ModuleDeclaration"];
|
||||||
|
exports.MODULEDECLARATION_TYPES = MODULEDECLARATION_TYPES;
|
||||||
|
const EXPORTDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ExportDeclaration"];
|
||||||
|
exports.EXPORTDECLARATION_TYPES = EXPORTDECLARATION_TYPES;
|
||||||
|
const MODULESPECIFIER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["ModuleSpecifier"];
|
||||||
|
exports.MODULESPECIFIER_TYPES = MODULESPECIFIER_TYPES;
|
||||||
|
const FLOW_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Flow"];
|
||||||
|
exports.FLOW_TYPES = FLOW_TYPES;
|
||||||
|
const FLOWTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowType"];
|
||||||
|
exports.FLOWTYPE_TYPES = FLOWTYPE_TYPES;
|
||||||
|
const FLOWBASEANNOTATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowBaseAnnotation"];
|
||||||
|
exports.FLOWBASEANNOTATION_TYPES = FLOWBASEANNOTATION_TYPES;
|
||||||
|
const FLOWDECLARATION_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowDeclaration"];
|
||||||
|
exports.FLOWDECLARATION_TYPES = FLOWDECLARATION_TYPES;
|
||||||
|
const FLOWPREDICATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["FlowPredicate"];
|
||||||
|
exports.FLOWPREDICATE_TYPES = FLOWPREDICATE_TYPES;
|
||||||
|
const ENUMBODY_TYPES = _definitions.FLIPPED_ALIAS_KEYS["EnumBody"];
|
||||||
|
exports.ENUMBODY_TYPES = ENUMBODY_TYPES;
|
||||||
|
const ENUMMEMBER_TYPES = _definitions.FLIPPED_ALIAS_KEYS["EnumMember"];
|
||||||
|
exports.ENUMMEMBER_TYPES = ENUMMEMBER_TYPES;
|
||||||
|
const JSX_TYPES = _definitions.FLIPPED_ALIAS_KEYS["JSX"];
|
||||||
|
exports.JSX_TYPES = JSX_TYPES;
|
||||||
|
const PRIVATE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["Private"];
|
||||||
|
exports.PRIVATE_TYPES = PRIVATE_TYPES;
|
||||||
|
const TSTYPEELEMENT_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSTypeElement"];
|
||||||
|
exports.TSTYPEELEMENT_TYPES = TSTYPEELEMENT_TYPES;
|
||||||
|
const TSTYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSType"];
|
||||||
|
exports.TSTYPE_TYPES = TSTYPE_TYPES;
|
||||||
|
const TSBASETYPE_TYPES = _definitions.FLIPPED_ALIAS_KEYS["TSBaseType"];
|
||||||
|
exports.TSBASETYPE_TYPES = TSBASETYPE_TYPES;
|
|
@ -0,0 +1,49 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.ASSIGNMENT_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = void 0;
|
||||||
|
const STATEMENT_OR_BLOCK_KEYS = ["consequent", "body", "alternate"];
|
||||||
|
exports.STATEMENT_OR_BLOCK_KEYS = STATEMENT_OR_BLOCK_KEYS;
|
||||||
|
const FLATTENABLE_KEYS = ["body", "expressions"];
|
||||||
|
exports.FLATTENABLE_KEYS = FLATTENABLE_KEYS;
|
||||||
|
const FOR_INIT_KEYS = ["left", "init"];
|
||||||
|
exports.FOR_INIT_KEYS = FOR_INIT_KEYS;
|
||||||
|
const COMMENT_KEYS = ["leadingComments", "trailingComments", "innerComments"];
|
||||||
|
exports.COMMENT_KEYS = COMMENT_KEYS;
|
||||||
|
const LOGICAL_OPERATORS = ["||", "&&", "??"];
|
||||||
|
exports.LOGICAL_OPERATORS = LOGICAL_OPERATORS;
|
||||||
|
const UPDATE_OPERATORS = ["++", "--"];
|
||||||
|
exports.UPDATE_OPERATORS = UPDATE_OPERATORS;
|
||||||
|
const BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="];
|
||||||
|
exports.BOOLEAN_NUMBER_BINARY_OPERATORS = BOOLEAN_NUMBER_BINARY_OPERATORS;
|
||||||
|
const EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="];
|
||||||
|
exports.EQUALITY_BINARY_OPERATORS = EQUALITY_BINARY_OPERATORS;
|
||||||
|
const COMPARISON_BINARY_OPERATORS = [...EQUALITY_BINARY_OPERATORS, "in", "instanceof"];
|
||||||
|
exports.COMPARISON_BINARY_OPERATORS = COMPARISON_BINARY_OPERATORS;
|
||||||
|
const BOOLEAN_BINARY_OPERATORS = [...COMPARISON_BINARY_OPERATORS, ...BOOLEAN_NUMBER_BINARY_OPERATORS];
|
||||||
|
exports.BOOLEAN_BINARY_OPERATORS = BOOLEAN_BINARY_OPERATORS;
|
||||||
|
const NUMBER_BINARY_OPERATORS = ["-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^"];
|
||||||
|
exports.NUMBER_BINARY_OPERATORS = NUMBER_BINARY_OPERATORS;
|
||||||
|
const BINARY_OPERATORS = ["+", ...NUMBER_BINARY_OPERATORS, ...BOOLEAN_BINARY_OPERATORS];
|
||||||
|
exports.BINARY_OPERATORS = BINARY_OPERATORS;
|
||||||
|
const ASSIGNMENT_OPERATORS = ["=", "+=", ...NUMBER_BINARY_OPERATORS.map(op => op + "="), ...LOGICAL_OPERATORS.map(op => op + "=")];
|
||||||
|
exports.ASSIGNMENT_OPERATORS = ASSIGNMENT_OPERATORS;
|
||||||
|
const BOOLEAN_UNARY_OPERATORS = ["delete", "!"];
|
||||||
|
exports.BOOLEAN_UNARY_OPERATORS = BOOLEAN_UNARY_OPERATORS;
|
||||||
|
const NUMBER_UNARY_OPERATORS = ["+", "-", "~"];
|
||||||
|
exports.NUMBER_UNARY_OPERATORS = NUMBER_UNARY_OPERATORS;
|
||||||
|
const STRING_UNARY_OPERATORS = ["typeof"];
|
||||||
|
exports.STRING_UNARY_OPERATORS = STRING_UNARY_OPERATORS;
|
||||||
|
const UNARY_OPERATORS = ["void", "throw", ...BOOLEAN_UNARY_OPERATORS, ...NUMBER_UNARY_OPERATORS, ...STRING_UNARY_OPERATORS];
|
||||||
|
exports.UNARY_OPERATORS = UNARY_OPERATORS;
|
||||||
|
const INHERIT_KEYS = {
|
||||||
|
optional: ["typeAnnotation", "typeParameters", "returnType"],
|
||||||
|
force: ["start", "loc", "end"]
|
||||||
|
};
|
||||||
|
exports.INHERIT_KEYS = INHERIT_KEYS;
|
||||||
|
const BLOCK_SCOPED_SYMBOL = Symbol.for("var used to be block scoped");
|
||||||
|
exports.BLOCK_SCOPED_SYMBOL = BLOCK_SCOPED_SYMBOL;
|
||||||
|
const NOT_LOCAL_BINDING = Symbol.for("should not be considered a local binding");
|
||||||
|
exports.NOT_LOCAL_BINDING = NOT_LOCAL_BINDING;
|
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = ensureBlock;
|
||||||
|
|
||||||
|
var _toBlock = _interopRequireDefault(require("./toBlock"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function ensureBlock(node, key = "body") {
|
||||||
|
return node[key] = (0, _toBlock.default)(node[key], node);
|
||||||
|
}
|
77
node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js
generated
vendored
Normal file
77
node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js
generated
vendored
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = gatherSequenceExpressions;
|
||||||
|
|
||||||
|
var _getBindingIdentifiers = _interopRequireDefault(require("../retrievers/getBindingIdentifiers"));
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
var _generated2 = require("../builders/generated");
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("../clone/cloneNode"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function gatherSequenceExpressions(nodes, scope, declars) {
|
||||||
|
const exprs = [];
|
||||||
|
let ensureLastUndefined = true;
|
||||||
|
|
||||||
|
for (const node of nodes) {
|
||||||
|
if (!(0, _generated.isEmptyStatement)(node)) {
|
||||||
|
ensureLastUndefined = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isExpression)(node)) {
|
||||||
|
exprs.push(node);
|
||||||
|
} else if ((0, _generated.isExpressionStatement)(node)) {
|
||||||
|
exprs.push(node.expression);
|
||||||
|
} else if ((0, _generated.isVariableDeclaration)(node)) {
|
||||||
|
if (node.kind !== "var") return;
|
||||||
|
|
||||||
|
for (const declar of node.declarations) {
|
||||||
|
const bindings = (0, _getBindingIdentifiers.default)(declar);
|
||||||
|
|
||||||
|
for (const key of Object.keys(bindings)) {
|
||||||
|
declars.push({
|
||||||
|
kind: node.kind,
|
||||||
|
id: (0, _cloneNode.default)(bindings[key])
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (declar.init) {
|
||||||
|
exprs.push((0, _generated2.assignmentExpression)("=", declar.id, declar.init));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ensureLastUndefined = true;
|
||||||
|
} else if ((0, _generated.isIfStatement)(node)) {
|
||||||
|
const consequent = node.consequent ? gatherSequenceExpressions([node.consequent], scope, declars) : scope.buildUndefinedNode();
|
||||||
|
const alternate = node.alternate ? gatherSequenceExpressions([node.alternate], scope, declars) : scope.buildUndefinedNode();
|
||||||
|
if (!consequent || !alternate) return;
|
||||||
|
exprs.push((0, _generated2.conditionalExpression)(node.test, consequent, alternate));
|
||||||
|
} else if ((0, _generated.isBlockStatement)(node)) {
|
||||||
|
const body = gatherSequenceExpressions(node.body, scope, declars);
|
||||||
|
if (!body) return;
|
||||||
|
exprs.push(body);
|
||||||
|
} else if ((0, _generated.isEmptyStatement)(node)) {
|
||||||
|
if (nodes.indexOf(node) === 0) {
|
||||||
|
ensureLastUndefined = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ensureLastUndefined) {
|
||||||
|
exprs.push(scope.buildUndefinedNode());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exprs.length === 1) {
|
||||||
|
return exprs[0];
|
||||||
|
} else {
|
||||||
|
return (0, _generated2.sequenceExpression)(exprs);
|
||||||
|
}
|
||||||
|
}
|
16
node_modules/@babel/types/lib/converters/toBindingIdentifierName.js
generated
vendored
Normal file
16
node_modules/@babel/types/lib/converters/toBindingIdentifierName.js
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toBindingIdentifierName;
|
||||||
|
|
||||||
|
var _toIdentifier = _interopRequireDefault(require("./toIdentifier"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function toBindingIdentifierName(name) {
|
||||||
|
name = (0, _toIdentifier.default)(name);
|
||||||
|
if (name === "eval" || name === "arguments") name = "_" + name;
|
||||||
|
return name;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toBlock;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
var _generated2 = require("../builders/generated");
|
||||||
|
|
||||||
|
function toBlock(node, parent) {
|
||||||
|
if ((0, _generated.isBlockStatement)(node)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
let blockNodes = [];
|
||||||
|
|
||||||
|
if ((0, _generated.isEmptyStatement)(node)) {
|
||||||
|
blockNodes = [];
|
||||||
|
} else {
|
||||||
|
if (!(0, _generated.isStatement)(node)) {
|
||||||
|
if ((0, _generated.isFunction)(parent)) {
|
||||||
|
node = (0, _generated2.returnStatement)(node);
|
||||||
|
} else {
|
||||||
|
node = (0, _generated2.expressionStatement)(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blockNodes = [node];
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0, _generated2.blockStatement)(blockNodes);
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toComputedKey;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
var _generated2 = require("../builders/generated");
|
||||||
|
|
||||||
|
function toComputedKey(node, key = node.key || node.property) {
|
||||||
|
if (!node.computed && (0, _generated.isIdentifier)(key)) key = (0, _generated2.stringLiteral)(key.name);
|
||||||
|
return key;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toExpression;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
function toExpression(node) {
|
||||||
|
if ((0, _generated.isExpressionStatement)(node)) {
|
||||||
|
node = node.expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isExpression)(node)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isClass)(node)) {
|
||||||
|
node.type = "ClassExpression";
|
||||||
|
} else if ((0, _generated.isFunction)(node)) {
|
||||||
|
node.type = "FunctionExpression";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(0, _generated.isExpression)(node)) {
|
||||||
|
throw new Error(`cannot turn ${node.type} to an expression`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toIdentifier;
|
||||||
|
|
||||||
|
var _isValidIdentifier = _interopRequireDefault(require("../validators/isValidIdentifier"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function toIdentifier(name) {
|
||||||
|
name = name + "";
|
||||||
|
name = name.replace(/[^a-zA-Z0-9$_]/g, "-");
|
||||||
|
name = name.replace(/^[-0-9]+/, "");
|
||||||
|
name = name.replace(/[-\s]+(.)?/g, function (match, c) {
|
||||||
|
return c ? c.toUpperCase() : "";
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!(0, _isValidIdentifier.default)(name)) {
|
||||||
|
name = `_${name}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return name || "_";
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toKeyAlias;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("../clone/cloneNode"));
|
||||||
|
|
||||||
|
var _removePropertiesDeep = _interopRequireDefault(require("../modifications/removePropertiesDeep"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function toKeyAlias(node, key = node.key) {
|
||||||
|
let alias;
|
||||||
|
|
||||||
|
if (node.kind === "method") {
|
||||||
|
return toKeyAlias.increment() + "";
|
||||||
|
} else if ((0, _generated.isIdentifier)(key)) {
|
||||||
|
alias = key.name;
|
||||||
|
} else if ((0, _generated.isStringLiteral)(key)) {
|
||||||
|
alias = JSON.stringify(key.value);
|
||||||
|
} else {
|
||||||
|
alias = JSON.stringify((0, _removePropertiesDeep.default)((0, _cloneNode.default)(key)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.computed) {
|
||||||
|
alias = `[${alias}]`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.static) {
|
||||||
|
alias = `static:${alias}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
toKeyAlias.uid = 0;
|
||||||
|
|
||||||
|
toKeyAlias.increment = function () {
|
||||||
|
if (toKeyAlias.uid >= Number.MAX_SAFE_INTEGER) {
|
||||||
|
return toKeyAlias.uid = 0;
|
||||||
|
} else {
|
||||||
|
return toKeyAlias.uid++;
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,23 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toSequenceExpression;
|
||||||
|
|
||||||
|
var _gatherSequenceExpressions = _interopRequireDefault(require("./gatherSequenceExpressions"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function toSequenceExpression(nodes, scope) {
|
||||||
|
if (!(nodes == null ? void 0 : nodes.length)) return;
|
||||||
|
const declars = [];
|
||||||
|
const result = (0, _gatherSequenceExpressions.default)(nodes, scope, declars);
|
||||||
|
if (!result) return;
|
||||||
|
|
||||||
|
for (const declar of declars) {
|
||||||
|
scope.push(declar);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = toStatement;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
var _generated2 = require("../builders/generated");
|
||||||
|
|
||||||
|
function toStatement(node, ignore) {
|
||||||
|
if ((0, _generated.isStatement)(node)) {
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mustHaveId = false;
|
||||||
|
let newType;
|
||||||
|
|
||||||
|
if ((0, _generated.isClass)(node)) {
|
||||||
|
mustHaveId = true;
|
||||||
|
newType = "ClassDeclaration";
|
||||||
|
} else if ((0, _generated.isFunction)(node)) {
|
||||||
|
mustHaveId = true;
|
||||||
|
newType = "FunctionDeclaration";
|
||||||
|
} else if ((0, _generated.isAssignmentExpression)(node)) {
|
||||||
|
return (0, _generated2.expressionStatement)(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mustHaveId && !node.id) {
|
||||||
|
newType = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!newType) {
|
||||||
|
if (ignore) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
throw new Error(`cannot turn ${node.type} to a statement`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node.type = newType;
|
||||||
|
return node;
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = valueToNode;
|
||||||
|
|
||||||
|
var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
|
||||||
|
|
||||||
|
var _isRegExp = _interopRequireDefault(require("lodash/isRegExp"));
|
||||||
|
|
||||||
|
var _isValidIdentifier = _interopRequireDefault(require("../validators/isValidIdentifier"));
|
||||||
|
|
||||||
|
var _generated = require("../builders/generated");
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function valueToNode(value) {
|
||||||
|
if (value === undefined) {
|
||||||
|
return (0, _generated.identifier)("undefined");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === true || value === false) {
|
||||||
|
return (0, _generated.booleanLiteral)(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value === null) {
|
||||||
|
return (0, _generated.nullLiteral)();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === "string") {
|
||||||
|
return (0, _generated.stringLiteral)(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof value === "number") {
|
||||||
|
let result;
|
||||||
|
|
||||||
|
if (Number.isFinite(value)) {
|
||||||
|
result = (0, _generated.numericLiteral)(Math.abs(value));
|
||||||
|
} else {
|
||||||
|
let numerator;
|
||||||
|
|
||||||
|
if (Number.isNaN(value)) {
|
||||||
|
numerator = (0, _generated.numericLiteral)(0);
|
||||||
|
} else {
|
||||||
|
numerator = (0, _generated.numericLiteral)(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = (0, _generated.binaryExpression)("/", numerator, (0, _generated.numericLiteral)(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value < 0 || Object.is(value, -0)) {
|
||||||
|
result = (0, _generated.unaryExpression)("-", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _isRegExp.default)(value)) {
|
||||||
|
const pattern = value.source;
|
||||||
|
const flags = value.toString().match(/\/([a-z]+|)$/)[1];
|
||||||
|
return (0, _generated.regExpLiteral)(pattern, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
return (0, _generated.arrayExpression)(value.map(valueToNode));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _isPlainObject.default)(value)) {
|
||||||
|
const props = [];
|
||||||
|
|
||||||
|
for (const key of Object.keys(value)) {
|
||||||
|
let nodeKey;
|
||||||
|
|
||||||
|
if ((0, _isValidIdentifier.default)(key)) {
|
||||||
|
nodeKey = (0, _generated.identifier)(key);
|
||||||
|
} else {
|
||||||
|
nodeKey = (0, _generated.stringLiteral)(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
props.push((0, _generated.objectProperty)(nodeKey, valueToNode(value[key])));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0, _generated.objectExpression)(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error("don't know how to turn this value into a node");
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,191 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _utils = _interopRequireWildcard(require("./utils"));
|
||||||
|
|
||||||
|
var _core = require("./core");
|
||||||
|
|
||||||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||||||
|
|
||||||
|
(0, _utils.default)("ArgumentPlaceholder", {});
|
||||||
|
(0, _utils.default)("BindExpression", {
|
||||||
|
visitor: ["object", "callee"],
|
||||||
|
aliases: ["Expression"],
|
||||||
|
fields: !process.env.BABEL_TYPES_8_BREAKING ? {
|
||||||
|
object: {
|
||||||
|
validate: Object.assign(() => {}, {
|
||||||
|
oneOfNodeTypes: ["Expression"]
|
||||||
|
})
|
||||||
|
},
|
||||||
|
callee: {
|
||||||
|
validate: Object.assign(() => {}, {
|
||||||
|
oneOfNodeTypes: ["Expression"]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} : {
|
||||||
|
object: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
},
|
||||||
|
callee: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ClassProperty", {
|
||||||
|
visitor: ["key", "value", "typeAnnotation", "decorators"],
|
||||||
|
builder: ["key", "value", "typeAnnotation", "decorators", "computed", "static"],
|
||||||
|
aliases: ["Property"],
|
||||||
|
fields: Object.assign({}, _core.classMethodOrPropertyCommon, {
|
||||||
|
value: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
definite: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
typeAnnotation: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TypeAnnotation", "TSTypeAnnotation", "Noop"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
decorators: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
readonly: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
declare: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
(0, _utils.default)("PipelineTopicExpression", {
|
||||||
|
builder: ["expression"],
|
||||||
|
visitor: ["expression"],
|
||||||
|
fields: {
|
||||||
|
expression: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("PipelineBareFunction", {
|
||||||
|
builder: ["callee"],
|
||||||
|
visitor: ["callee"],
|
||||||
|
fields: {
|
||||||
|
callee: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("PipelinePrimaryTopicReference", {
|
||||||
|
aliases: ["Expression"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ClassPrivateProperty", {
|
||||||
|
visitor: ["key", "value", "decorators"],
|
||||||
|
builder: ["key", "value", "decorators"],
|
||||||
|
aliases: ["Property", "Private"],
|
||||||
|
fields: {
|
||||||
|
key: {
|
||||||
|
validate: (0, _utils.assertNodeType)("PrivateName")
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
decorators: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Decorator"))),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ClassPrivateMethod", {
|
||||||
|
builder: ["kind", "key", "params", "body", "static"],
|
||||||
|
visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
|
||||||
|
aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method", "Private"],
|
||||||
|
fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, _core.functionTypeAnnotationCommon, {
|
||||||
|
key: {
|
||||||
|
validate: (0, _utils.assertNodeType)("PrivateName")
|
||||||
|
},
|
||||||
|
body: {
|
||||||
|
validate: (0, _utils.assertNodeType)("BlockStatement")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ImportAttribute", {
|
||||||
|
visitor: ["key", "value"],
|
||||||
|
fields: {
|
||||||
|
key: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Identifier")
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
validate: (0, _utils.assertNodeType)("StringLiteral")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("Decorator", {
|
||||||
|
visitor: ["expression"],
|
||||||
|
fields: {
|
||||||
|
expression: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DoExpression", {
|
||||||
|
visitor: ["body"],
|
||||||
|
aliases: ["Expression"],
|
||||||
|
fields: {
|
||||||
|
body: {
|
||||||
|
validate: (0, _utils.assertNodeType)("BlockStatement")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ExportDefaultSpecifier", {
|
||||||
|
visitor: ["exported"],
|
||||||
|
aliases: ["ModuleSpecifier"],
|
||||||
|
fields: {
|
||||||
|
exported: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Identifier")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("PrivateName", {
|
||||||
|
visitor: ["id"],
|
||||||
|
aliases: ["Private"],
|
||||||
|
fields: {
|
||||||
|
id: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Identifier")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("RecordExpression", {
|
||||||
|
visitor: ["properties"],
|
||||||
|
aliases: ["Expression"],
|
||||||
|
fields: {
|
||||||
|
properties: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("ObjectProperty", "SpreadElement")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TupleExpression", {
|
||||||
|
fields: {
|
||||||
|
elements: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("Expression", "SpreadElement"))),
|
||||||
|
default: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
visitor: ["elements"],
|
||||||
|
aliases: ["Expression"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DecimalLiteral", {
|
||||||
|
builder: ["value"],
|
||||||
|
fields: {
|
||||||
|
value: {
|
||||||
|
validate: (0, _utils.assertValueType)("string")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
aliases: ["Expression", "Pureish", "Literal", "Immutable"]
|
||||||
|
});
|
|
@ -0,0 +1,461 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _utils = _interopRequireWildcard(require("./utils"));
|
||||||
|
|
||||||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||||||
|
|
||||||
|
const defineInterfaceishType = (name, typeParameterType = "TypeParameterDeclaration") => {
|
||||||
|
(0, _utils.default)(name, {
|
||||||
|
builder: ["id", "typeParameters", "extends", "body"],
|
||||||
|
visitor: ["id", "typeParameters", "extends", "mixins", "implements", "body"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)(typeParameterType),
|
||||||
|
extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
||||||
|
mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
||||||
|
implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements")),
|
||||||
|
body: (0, _utils.validateType)("ObjectTypeAnnotation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
(0, _utils.default)("AnyTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ArrayTypeAnnotation", {
|
||||||
|
visitor: ["elementType"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
elementType: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("BooleanTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("BooleanLiteralTypeAnnotation", {
|
||||||
|
builder: ["value"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
value: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("NullLiteralTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ClassImplements", {
|
||||||
|
visitor: ["id", "typeParameters"],
|
||||||
|
aliases: ["Flow"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
defineInterfaceishType("DeclareClass");
|
||||||
|
(0, _utils.default)("DeclareFunction", {
|
||||||
|
visitor: ["id"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
predicate: (0, _utils.validateOptionalType)("DeclaredPredicate")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
defineInterfaceishType("DeclareInterface");
|
||||||
|
(0, _utils.default)("DeclareModule", {
|
||||||
|
builder: ["id", "body", "kind"],
|
||||||
|
visitor: ["id", "body"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
||||||
|
body: (0, _utils.validateType)("BlockStatement"),
|
||||||
|
kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS", "ES"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareModuleExports", {
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareTypeAlias", {
|
||||||
|
visitor: ["id", "typeParameters", "right"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
||||||
|
right: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareOpaqueType", {
|
||||||
|
visitor: ["id", "typeParameters", "supertype"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
||||||
|
supertype: (0, _utils.validateOptionalType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareVariable", {
|
||||||
|
visitor: ["id"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareExportDeclaration", {
|
||||||
|
visitor: ["declaration", "specifiers", "source"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
declaration: (0, _utils.validateOptionalType)("Flow"),
|
||||||
|
specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(["ExportSpecifier", "ExportNamespaceSpecifier"])),
|
||||||
|
source: (0, _utils.validateOptionalType)("StringLiteral"),
|
||||||
|
default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclareExportAllDeclaration", {
|
||||||
|
visitor: ["source"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
source: (0, _utils.validateType)("StringLiteral"),
|
||||||
|
exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("DeclaredPredicate", {
|
||||||
|
visitor: ["value"],
|
||||||
|
aliases: ["Flow", "FlowPredicate"],
|
||||||
|
fields: {
|
||||||
|
value: (0, _utils.validateType)("Flow")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ExistsTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("FunctionTypeAnnotation", {
|
||||||
|
visitor: ["typeParameters", "params", "rest", "returnType"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
||||||
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("FunctionTypeParam")),
|
||||||
|
rest: (0, _utils.validateOptionalType)("FunctionTypeParam"),
|
||||||
|
returnType: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("FunctionTypeParam", {
|
||||||
|
visitor: ["name", "typeAnnotation"],
|
||||||
|
aliases: ["Flow"],
|
||||||
|
fields: {
|
||||||
|
name: (0, _utils.validateOptionalType)("Identifier"),
|
||||||
|
typeAnnotation: (0, _utils.validateType)("FlowType"),
|
||||||
|
optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("GenericTypeAnnotation", {
|
||||||
|
visitor: ["id", "typeParameters"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("InferredPredicate", {
|
||||||
|
aliases: ["Flow", "FlowPredicate"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("InterfaceExtends", {
|
||||||
|
visitor: ["id", "typeParameters"],
|
||||||
|
aliases: ["Flow"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
defineInterfaceishType("InterfaceDeclaration");
|
||||||
|
(0, _utils.default)("InterfaceTypeAnnotation", {
|
||||||
|
visitor: ["extends", "body"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
||||||
|
body: (0, _utils.validateType)("ObjectTypeAnnotation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("IntersectionTypeAnnotation", {
|
||||||
|
visitor: ["types"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("MixedTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EmptyTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("NullableTypeAnnotation", {
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("NumberLiteralTypeAnnotation", {
|
||||||
|
builder: ["value"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
value: (0, _utils.validate)((0, _utils.assertValueType)("number"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("NumberTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeAnnotation", {
|
||||||
|
visitor: ["properties", "indexers", "callProperties", "internalSlots"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"],
|
||||||
|
fields: {
|
||||||
|
properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty", "ObjectTypeSpreadProperty"])),
|
||||||
|
indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeIndexer")),
|
||||||
|
callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeCallProperty")),
|
||||||
|
internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeInternalSlot")),
|
||||||
|
exact: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeInternalSlot", {
|
||||||
|
visitor: ["id", "value", "optional", "static", "method"],
|
||||||
|
aliases: ["Flow", "UserWhitespacable"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
value: (0, _utils.validateType)("FlowType"),
|
||||||
|
optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeCallProperty", {
|
||||||
|
visitor: ["value"],
|
||||||
|
aliases: ["Flow", "UserWhitespacable"],
|
||||||
|
fields: {
|
||||||
|
value: (0, _utils.validateType)("FlowType"),
|
||||||
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeIndexer", {
|
||||||
|
visitor: ["id", "key", "value", "variance"],
|
||||||
|
aliases: ["Flow", "UserWhitespacable"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateOptionalType)("Identifier"),
|
||||||
|
key: (0, _utils.validateType)("FlowType"),
|
||||||
|
value: (0, _utils.validateType)("FlowType"),
|
||||||
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
variance: (0, _utils.validateOptionalType)("Variance")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeProperty", {
|
||||||
|
visitor: ["key", "value", "variance"],
|
||||||
|
aliases: ["Flow", "UserWhitespacable"],
|
||||||
|
fields: {
|
||||||
|
key: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
||||||
|
value: (0, _utils.validateType)("FlowType"),
|
||||||
|
kind: (0, _utils.validate)((0, _utils.assertOneOf)("init", "get", "set")),
|
||||||
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
variance: (0, _utils.validateOptionalType)("Variance")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ObjectTypeSpreadProperty", {
|
||||||
|
visitor: ["argument"],
|
||||||
|
aliases: ["Flow", "UserWhitespacable"],
|
||||||
|
fields: {
|
||||||
|
argument: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("OpaqueType", {
|
||||||
|
visitor: ["id", "typeParameters", "supertype", "impltype"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
||||||
|
supertype: (0, _utils.validateOptionalType)("FlowType"),
|
||||||
|
impltype: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("QualifiedTypeIdentifier", {
|
||||||
|
visitor: ["id", "qualification"],
|
||||||
|
aliases: ["Flow"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
qualification: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("StringLiteralTypeAnnotation", {
|
||||||
|
builder: ["value"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
value: (0, _utils.validate)((0, _utils.assertValueType)("string"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("StringTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("SymbolTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("ThisTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TupleTypeAnnotation", {
|
||||||
|
visitor: ["types"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeofTypeAnnotation", {
|
||||||
|
visitor: ["argument"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
argument: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeAlias", {
|
||||||
|
visitor: ["id", "typeParameters", "right"],
|
||||||
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
||||||
|
right: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeAnnotation", {
|
||||||
|
aliases: ["Flow"],
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("FlowType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeCastExpression", {
|
||||||
|
visitor: ["expression", "typeAnnotation"],
|
||||||
|
aliases: ["Flow", "ExpressionWrapper", "Expression"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("Expression"),
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeParameter", {
|
||||||
|
aliases: ["Flow"],
|
||||||
|
visitor: ["bound", "default", "variance"],
|
||||||
|
fields: {
|
||||||
|
name: (0, _utils.validate)((0, _utils.assertValueType)("string")),
|
||||||
|
bound: (0, _utils.validateOptionalType)("TypeAnnotation"),
|
||||||
|
default: (0, _utils.validateOptionalType)("FlowType"),
|
||||||
|
variance: (0, _utils.validateOptionalType)("Variance")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeParameterDeclaration", {
|
||||||
|
aliases: ["Flow"],
|
||||||
|
visitor: ["params"],
|
||||||
|
fields: {
|
||||||
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TypeParameterInstantiation", {
|
||||||
|
aliases: ["Flow"],
|
||||||
|
visitor: ["params"],
|
||||||
|
fields: {
|
||||||
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("UnionTypeAnnotation", {
|
||||||
|
visitor: ["types"],
|
||||||
|
aliases: ["Flow", "FlowType"],
|
||||||
|
fields: {
|
||||||
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("Variance", {
|
||||||
|
aliases: ["Flow"],
|
||||||
|
builder: ["kind"],
|
||||||
|
fields: {
|
||||||
|
kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus", "plus"))
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("VoidTypeAnnotation", {
|
||||||
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumDeclaration", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "body"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
body: (0, _utils.validateType)(["EnumBooleanBody", "EnumNumberBody", "EnumStringBody", "EnumSymbolBody"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumBooleanBody", {
|
||||||
|
aliases: ["EnumBody"],
|
||||||
|
visitor: ["members"],
|
||||||
|
fields: {
|
||||||
|
explicit: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
members: (0, _utils.validateArrayOfType)("EnumBooleanMember")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumNumberBody", {
|
||||||
|
aliases: ["EnumBody"],
|
||||||
|
visitor: ["members"],
|
||||||
|
fields: {
|
||||||
|
explicit: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
members: (0, _utils.validateArrayOfType)("EnumNumberMember")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumStringBody", {
|
||||||
|
aliases: ["EnumBody"],
|
||||||
|
visitor: ["members"],
|
||||||
|
fields: {
|
||||||
|
explicit: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
||||||
|
members: (0, _utils.validateArrayOfType)(["EnumStringMember", "EnumDefaultedMember"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumSymbolBody", {
|
||||||
|
aliases: ["EnumBody"],
|
||||||
|
visitor: ["members"],
|
||||||
|
fields: {
|
||||||
|
members: (0, _utils.validateArrayOfType)("EnumDefaultedMember")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumBooleanMember", {
|
||||||
|
aliases: ["EnumMember"],
|
||||||
|
visitor: ["id"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
init: (0, _utils.validateType)("BooleanLiteral")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumNumberMember", {
|
||||||
|
aliases: ["EnumMember"],
|
||||||
|
visitor: ["id", "init"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
init: (0, _utils.validateType)("NumericLiteral")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumStringMember", {
|
||||||
|
aliases: ["EnumMember"],
|
||||||
|
visitor: ["id", "init"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
init: (0, _utils.validateType)("StringLiteral")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("EnumDefaultedMember", {
|
||||||
|
aliases: ["EnumMember"],
|
||||||
|
visitor: ["id"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier")
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,97 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "VISITOR_KEYS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.VISITOR_KEYS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "ALIAS_KEYS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.ALIAS_KEYS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "FLIPPED_ALIAS_KEYS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.FLIPPED_ALIAS_KEYS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "NODE_FIELDS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.NODE_FIELDS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "BUILDER_KEYS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.BUILDER_KEYS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "DEPRECATED_KEYS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.DEPRECATED_KEYS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "NODE_PARENT_VALIDATIONS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _utils.NODE_PARENT_VALIDATIONS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "PLACEHOLDERS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _placeholders.PLACEHOLDERS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "PLACEHOLDERS_ALIAS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _placeholders.PLACEHOLDERS_ALIAS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "PLACEHOLDERS_FLIPPED_ALIAS", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _placeholders.PLACEHOLDERS_FLIPPED_ALIAS;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports.TYPES = void 0;
|
||||||
|
|
||||||
|
var _toFastProperties = _interopRequireDefault(require("to-fast-properties"));
|
||||||
|
|
||||||
|
require("./core");
|
||||||
|
|
||||||
|
require("./flow");
|
||||||
|
|
||||||
|
require("./jsx");
|
||||||
|
|
||||||
|
require("./misc");
|
||||||
|
|
||||||
|
require("./experimental");
|
||||||
|
|
||||||
|
require("./typescript");
|
||||||
|
|
||||||
|
var _utils = require("./utils");
|
||||||
|
|
||||||
|
var _placeholders = require("./placeholders");
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
(0, _toFastProperties.default)(_utils.VISITOR_KEYS);
|
||||||
|
(0, _toFastProperties.default)(_utils.ALIAS_KEYS);
|
||||||
|
(0, _toFastProperties.default)(_utils.FLIPPED_ALIAS_KEYS);
|
||||||
|
(0, _toFastProperties.default)(_utils.NODE_FIELDS);
|
||||||
|
(0, _toFastProperties.default)(_utils.BUILDER_KEYS);
|
||||||
|
(0, _toFastProperties.default)(_utils.DEPRECATED_KEYS);
|
||||||
|
(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_ALIAS);
|
||||||
|
(0, _toFastProperties.default)(_placeholders.PLACEHOLDERS_FLIPPED_ALIAS);
|
||||||
|
const TYPES = Object.keys(_utils.VISITOR_KEYS).concat(Object.keys(_utils.FLIPPED_ALIAS_KEYS)).concat(Object.keys(_utils.DEPRECATED_KEYS));
|
||||||
|
exports.TYPES = TYPES;
|
|
@ -0,0 +1,165 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _utils = _interopRequireWildcard(require("./utils"));
|
||||||
|
|
||||||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||||||
|
|
||||||
|
(0, _utils.default)("JSXAttribute", {
|
||||||
|
visitor: ["name", "value"],
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXNamespacedName")
|
||||||
|
},
|
||||||
|
value: {
|
||||||
|
optional: true,
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXElement", "JSXFragment", "StringLiteral", "JSXExpressionContainer")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXClosingElement", {
|
||||||
|
visitor: ["name"],
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXMemberExpression", "JSXNamespacedName")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXElement", {
|
||||||
|
builder: ["openingElement", "closingElement", "children", "selfClosing"],
|
||||||
|
visitor: ["openingElement", "children", "closingElement"],
|
||||||
|
aliases: ["JSX", "Immutable", "Expression"],
|
||||||
|
fields: {
|
||||||
|
openingElement: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXOpeningElement")
|
||||||
|
},
|
||||||
|
closingElement: {
|
||||||
|
optional: true,
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXClosingElement")
|
||||||
|
},
|
||||||
|
children: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXSpreadChild", "JSXElement", "JSXFragment")))
|
||||||
|
},
|
||||||
|
selfClosing: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXEmptyExpression", {
|
||||||
|
aliases: ["JSX"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXExpressionContainer", {
|
||||||
|
visitor: ["expression"],
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
fields: {
|
||||||
|
expression: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression", "JSXEmptyExpression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXSpreadChild", {
|
||||||
|
visitor: ["expression"],
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
fields: {
|
||||||
|
expression: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXIdentifier", {
|
||||||
|
builder: ["name"],
|
||||||
|
aliases: ["JSX"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertValueType)("string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXMemberExpression", {
|
||||||
|
visitor: ["object", "property"],
|
||||||
|
aliases: ["JSX"],
|
||||||
|
fields: {
|
||||||
|
object: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXMemberExpression", "JSXIdentifier")
|
||||||
|
},
|
||||||
|
property: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXNamespacedName", {
|
||||||
|
visitor: ["namespace", "name"],
|
||||||
|
aliases: ["JSX"],
|
||||||
|
fields: {
|
||||||
|
namespace: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier")
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXOpeningElement", {
|
||||||
|
builder: ["name", "attributes", "selfClosing"],
|
||||||
|
visitor: ["name", "attributes"],
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXIdentifier", "JSXMemberExpression", "JSXNamespacedName")
|
||||||
|
},
|
||||||
|
selfClosing: {
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
attributes: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXAttribute", "JSXSpreadAttribute")))
|
||||||
|
},
|
||||||
|
typeParameters: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TypeParameterInstantiation", "TSTypeParameterInstantiation"),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXSpreadAttribute", {
|
||||||
|
visitor: ["argument"],
|
||||||
|
aliases: ["JSX"],
|
||||||
|
fields: {
|
||||||
|
argument: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Expression")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXText", {
|
||||||
|
aliases: ["JSX", "Immutable"],
|
||||||
|
builder: ["value"],
|
||||||
|
fields: {
|
||||||
|
value: {
|
||||||
|
validate: (0, _utils.assertValueType)("string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXFragment", {
|
||||||
|
builder: ["openingFragment", "closingFragment", "children"],
|
||||||
|
visitor: ["openingFragment", "children", "closingFragment"],
|
||||||
|
aliases: ["JSX", "Immutable", "Expression"],
|
||||||
|
fields: {
|
||||||
|
openingFragment: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXOpeningFragment")
|
||||||
|
},
|
||||||
|
closingFragment: {
|
||||||
|
validate: (0, _utils.assertNodeType)("JSXClosingFragment")
|
||||||
|
},
|
||||||
|
children: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXSpreadChild", "JSXElement", "JSXFragment")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXOpeningFragment", {
|
||||||
|
aliases: ["JSX", "Immutable"]
|
||||||
|
});
|
||||||
|
(0, _utils.default)("JSXClosingFragment", {
|
||||||
|
aliases: ["JSX", "Immutable"]
|
||||||
|
});
|
|
@ -0,0 +1,33 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _utils = _interopRequireWildcard(require("./utils"));
|
||||||
|
|
||||||
|
var _placeholders = require("./placeholders");
|
||||||
|
|
||||||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||||||
|
|
||||||
|
(0, _utils.default)("Noop", {
|
||||||
|
visitor: []
|
||||||
|
});
|
||||||
|
(0, _utils.default)("Placeholder", {
|
||||||
|
visitor: [],
|
||||||
|
builder: ["expectedNode", "name"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Identifier")
|
||||||
|
},
|
||||||
|
expectedNode: {
|
||||||
|
validate: (0, _utils.assertOneOf)(..._placeholders.PLACEHOLDERS)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("V8IntrinsicIdentifier", {
|
||||||
|
builder: ["name"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertValueType)("string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,33 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.PLACEHOLDERS_FLIPPED_ALIAS = exports.PLACEHOLDERS_ALIAS = exports.PLACEHOLDERS = void 0;
|
||||||
|
|
||||||
|
var _utils = require("./utils");
|
||||||
|
|
||||||
|
const PLACEHOLDERS = ["Identifier", "StringLiteral", "Expression", "Statement", "Declaration", "BlockStatement", "ClassBody", "Pattern"];
|
||||||
|
exports.PLACEHOLDERS = PLACEHOLDERS;
|
||||||
|
const PLACEHOLDERS_ALIAS = {
|
||||||
|
Declaration: ["Statement"],
|
||||||
|
Pattern: ["PatternLike", "LVal"]
|
||||||
|
};
|
||||||
|
exports.PLACEHOLDERS_ALIAS = PLACEHOLDERS_ALIAS;
|
||||||
|
|
||||||
|
for (const type of PLACEHOLDERS) {
|
||||||
|
const alias = _utils.ALIAS_KEYS[type];
|
||||||
|
if (alias == null ? void 0 : alias.length) PLACEHOLDERS_ALIAS[type] = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
const PLACEHOLDERS_FLIPPED_ALIAS = {};
|
||||||
|
exports.PLACEHOLDERS_FLIPPED_ALIAS = PLACEHOLDERS_FLIPPED_ALIAS;
|
||||||
|
Object.keys(PLACEHOLDERS_ALIAS).forEach(type => {
|
||||||
|
PLACEHOLDERS_ALIAS[type].forEach(alias => {
|
||||||
|
if (!Object.hasOwnProperty.call(PLACEHOLDERS_FLIPPED_ALIAS, alias)) {
|
||||||
|
PLACEHOLDERS_FLIPPED_ALIAS[alias] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
PLACEHOLDERS_FLIPPED_ALIAS[alias].push(type);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,427 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var _utils = _interopRequireWildcard(require("./utils"));
|
||||||
|
|
||||||
|
var _core = require("./core");
|
||||||
|
|
||||||
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
||||||
|
|
||||||
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
||||||
|
|
||||||
|
const bool = (0, _utils.assertValueType)("boolean");
|
||||||
|
const tSFunctionTypeAnnotationCommon = {
|
||||||
|
returnType: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TSTypeAnnotation", "Noop"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
typeParameters: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TSTypeParameterDeclaration", "Noop"),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
(0, _utils.default)("TSParameterProperty", {
|
||||||
|
aliases: ["LVal"],
|
||||||
|
visitor: ["parameter"],
|
||||||
|
fields: {
|
||||||
|
accessibility: {
|
||||||
|
validate: (0, _utils.assertOneOf)("public", "private", "protected"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
readonly: {
|
||||||
|
validate: (0, _utils.assertValueType)("boolean"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
parameter: {
|
||||||
|
validate: (0, _utils.assertNodeType)("Identifier", "AssignmentPattern")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSDeclareFunction", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "typeParameters", "params", "returnType"],
|
||||||
|
fields: Object.assign({}, _core.functionDeclarationCommon, tSFunctionTypeAnnotationCommon)
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSDeclareMethod", {
|
||||||
|
visitor: ["decorators", "key", "typeParameters", "params", "returnType"],
|
||||||
|
fields: Object.assign({}, _core.classMethodOrDeclareMethodCommon, tSFunctionTypeAnnotationCommon)
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSQualifiedName", {
|
||||||
|
aliases: ["TSEntityName"],
|
||||||
|
visitor: ["left", "right"],
|
||||||
|
fields: {
|
||||||
|
left: (0, _utils.validateType)("TSEntityName"),
|
||||||
|
right: (0, _utils.validateType)("Identifier")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const signatureDeclarationCommon = {
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
|
||||||
|
parameters: (0, _utils.validateArrayOfType)(["Identifier", "RestElement"]),
|
||||||
|
typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation")
|
||||||
|
};
|
||||||
|
const callConstructSignatureDeclaration = {
|
||||||
|
aliases: ["TSTypeElement"],
|
||||||
|
visitor: ["typeParameters", "parameters", "typeAnnotation"],
|
||||||
|
fields: signatureDeclarationCommon
|
||||||
|
};
|
||||||
|
(0, _utils.default)("TSCallSignatureDeclaration", callConstructSignatureDeclaration);
|
||||||
|
(0, _utils.default)("TSConstructSignatureDeclaration", callConstructSignatureDeclaration);
|
||||||
|
const namedTypeElementCommon = {
|
||||||
|
key: (0, _utils.validateType)("Expression"),
|
||||||
|
computed: (0, _utils.validate)(bool),
|
||||||
|
optional: (0, _utils.validateOptional)(bool)
|
||||||
|
};
|
||||||
|
(0, _utils.default)("TSPropertySignature", {
|
||||||
|
aliases: ["TSTypeElement"],
|
||||||
|
visitor: ["key", "typeAnnotation", "initializer"],
|
||||||
|
fields: Object.assign({}, namedTypeElementCommon, {
|
||||||
|
readonly: (0, _utils.validateOptional)(bool),
|
||||||
|
typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
|
||||||
|
initializer: (0, _utils.validateOptionalType)("Expression")
|
||||||
|
})
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSMethodSignature", {
|
||||||
|
aliases: ["TSTypeElement"],
|
||||||
|
visitor: ["key", "typeParameters", "parameters", "typeAnnotation"],
|
||||||
|
fields: Object.assign({}, signatureDeclarationCommon, namedTypeElementCommon)
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSIndexSignature", {
|
||||||
|
aliases: ["TSTypeElement"],
|
||||||
|
visitor: ["parameters", "typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
readonly: (0, _utils.validateOptional)(bool),
|
||||||
|
parameters: (0, _utils.validateArrayOfType)("Identifier"),
|
||||||
|
typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const tsKeywordTypes = ["TSAnyKeyword", "TSBooleanKeyword", "TSBigIntKeyword", "TSNeverKeyword", "TSNullKeyword", "TSNumberKeyword", "TSObjectKeyword", "TSStringKeyword", "TSSymbolKeyword", "TSUndefinedKeyword", "TSUnknownKeyword", "TSVoidKeyword"];
|
||||||
|
|
||||||
|
for (const type of tsKeywordTypes) {
|
||||||
|
(0, _utils.default)(type, {
|
||||||
|
aliases: ["TSType", "TSBaseType"],
|
||||||
|
visitor: [],
|
||||||
|
fields: {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
(0, _utils.default)("TSThisType", {
|
||||||
|
aliases: ["TSType", "TSBaseType"],
|
||||||
|
visitor: [],
|
||||||
|
fields: {}
|
||||||
|
});
|
||||||
|
const fnOrCtr = {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeParameters", "parameters", "typeAnnotation"],
|
||||||
|
fields: signatureDeclarationCommon
|
||||||
|
};
|
||||||
|
(0, _utils.default)("TSFunctionType", fnOrCtr);
|
||||||
|
(0, _utils.default)("TSConstructorType", fnOrCtr);
|
||||||
|
(0, _utils.default)("TSTypeReference", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeName", "typeParameters"],
|
||||||
|
fields: {
|
||||||
|
typeName: (0, _utils.validateType)("TSEntityName"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypePredicate", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["parameterName", "typeAnnotation"],
|
||||||
|
builder: ["parameterName", "typeAnnotation", "asserts"],
|
||||||
|
fields: {
|
||||||
|
parameterName: (0, _utils.validateType)(["Identifier", "TSThisType"]),
|
||||||
|
typeAnnotation: (0, _utils.validateOptionalType)("TSTypeAnnotation"),
|
||||||
|
asserts: (0, _utils.validateOptional)(bool)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeQuery", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["exprName"],
|
||||||
|
fields: {
|
||||||
|
exprName: (0, _utils.validateType)(["TSEntityName", "TSImportType"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeLiteral", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["members"],
|
||||||
|
fields: {
|
||||||
|
members: (0, _utils.validateArrayOfType)("TSTypeElement")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSArrayType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["elementType"],
|
||||||
|
fields: {
|
||||||
|
elementType: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTupleType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["elementTypes"],
|
||||||
|
fields: {
|
||||||
|
elementTypes: (0, _utils.validateArrayOfType)(["TSType", "TSNamedTupleMember"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSOptionalType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSRestType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSNamedTupleMember", {
|
||||||
|
visitor: ["label", "elementType"],
|
||||||
|
builder: ["label", "elementType", "optional"],
|
||||||
|
fields: {
|
||||||
|
label: (0, _utils.validateType)("Identifier"),
|
||||||
|
optional: {
|
||||||
|
validate: bool,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
elementType: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const unionOrIntersection = {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["types"],
|
||||||
|
fields: {
|
||||||
|
types: (0, _utils.validateArrayOfType)("TSType")
|
||||||
|
}
|
||||||
|
};
|
||||||
|
(0, _utils.default)("TSUnionType", unionOrIntersection);
|
||||||
|
(0, _utils.default)("TSIntersectionType", unionOrIntersection);
|
||||||
|
(0, _utils.default)("TSConditionalType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["checkType", "extendsType", "trueType", "falseType"],
|
||||||
|
fields: {
|
||||||
|
checkType: (0, _utils.validateType)("TSType"),
|
||||||
|
extendsType: (0, _utils.validateType)("TSType"),
|
||||||
|
trueType: (0, _utils.validateType)("TSType"),
|
||||||
|
falseType: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSInferType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeParameter"],
|
||||||
|
fields: {
|
||||||
|
typeParameter: (0, _utils.validateType)("TSTypeParameter")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSParenthesizedType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeOperator", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
operator: (0, _utils.validate)((0, _utils.assertValueType)("string")),
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSIndexedAccessType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["objectType", "indexType"],
|
||||||
|
fields: {
|
||||||
|
objectType: (0, _utils.validateType)("TSType"),
|
||||||
|
indexType: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSMappedType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["typeParameter", "typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
readonly: (0, _utils.validateOptional)(bool),
|
||||||
|
typeParameter: (0, _utils.validateType)("TSTypeParameter"),
|
||||||
|
optional: (0, _utils.validateOptional)(bool),
|
||||||
|
typeAnnotation: (0, _utils.validateOptionalType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSLiteralType", {
|
||||||
|
aliases: ["TSType", "TSBaseType"],
|
||||||
|
visitor: ["literal"],
|
||||||
|
fields: {
|
||||||
|
literal: (0, _utils.validateType)(["NumericLiteral", "StringLiteral", "BooleanLiteral", "BigIntLiteral"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSExpressionWithTypeArguments", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["expression", "typeParameters"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("TSEntityName"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSInterfaceDeclaration", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "typeParameters", "extends", "body"],
|
||||||
|
fields: {
|
||||||
|
declare: (0, _utils.validateOptional)(bool),
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
|
||||||
|
extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("TSExpressionWithTypeArguments")),
|
||||||
|
body: (0, _utils.validateType)("TSInterfaceBody")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSInterfaceBody", {
|
||||||
|
visitor: ["body"],
|
||||||
|
fields: {
|
||||||
|
body: (0, _utils.validateArrayOfType)("TSTypeElement")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeAliasDeclaration", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "typeParameters", "typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
declare: (0, _utils.validateOptional)(bool),
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterDeclaration"),
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSAsExpression", {
|
||||||
|
aliases: ["Expression"],
|
||||||
|
visitor: ["expression", "typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("Expression"),
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeAssertion", {
|
||||||
|
aliases: ["Expression"],
|
||||||
|
visitor: ["typeAnnotation", "expression"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: (0, _utils.validateType)("TSType"),
|
||||||
|
expression: (0, _utils.validateType)("Expression")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSEnumDeclaration", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "members"],
|
||||||
|
fields: {
|
||||||
|
declare: (0, _utils.validateOptional)(bool),
|
||||||
|
const: (0, _utils.validateOptional)(bool),
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
members: (0, _utils.validateArrayOfType)("TSEnumMember"),
|
||||||
|
initializer: (0, _utils.validateOptionalType)("Expression")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSEnumMember", {
|
||||||
|
visitor: ["id", "initializer"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
||||||
|
initializer: (0, _utils.validateOptionalType)("Expression")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSModuleDeclaration", {
|
||||||
|
aliases: ["Statement", "Declaration"],
|
||||||
|
visitor: ["id", "body"],
|
||||||
|
fields: {
|
||||||
|
declare: (0, _utils.validateOptional)(bool),
|
||||||
|
global: (0, _utils.validateOptional)(bool),
|
||||||
|
id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
||||||
|
body: (0, _utils.validateType)(["TSModuleBlock", "TSModuleDeclaration"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSModuleBlock", {
|
||||||
|
aliases: ["Scopable", "Block", "BlockParent"],
|
||||||
|
visitor: ["body"],
|
||||||
|
fields: {
|
||||||
|
body: (0, _utils.validateArrayOfType)("Statement")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSImportType", {
|
||||||
|
aliases: ["TSType"],
|
||||||
|
visitor: ["argument", "qualifier", "typeParameters"],
|
||||||
|
fields: {
|
||||||
|
argument: (0, _utils.validateType)("StringLiteral"),
|
||||||
|
qualifier: (0, _utils.validateOptionalType)("TSEntityName"),
|
||||||
|
typeParameters: (0, _utils.validateOptionalType)("TSTypeParameterInstantiation")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSImportEqualsDeclaration", {
|
||||||
|
aliases: ["Statement"],
|
||||||
|
visitor: ["id", "moduleReference"],
|
||||||
|
fields: {
|
||||||
|
isExport: (0, _utils.validate)(bool),
|
||||||
|
id: (0, _utils.validateType)("Identifier"),
|
||||||
|
moduleReference: (0, _utils.validateType)(["TSEntityName", "TSExternalModuleReference"])
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSExternalModuleReference", {
|
||||||
|
visitor: ["expression"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("StringLiteral")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSNonNullExpression", {
|
||||||
|
aliases: ["Expression"],
|
||||||
|
visitor: ["expression"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("Expression")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSExportAssignment", {
|
||||||
|
aliases: ["Statement"],
|
||||||
|
visitor: ["expression"],
|
||||||
|
fields: {
|
||||||
|
expression: (0, _utils.validateType)("Expression")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSNamespaceExportDeclaration", {
|
||||||
|
aliases: ["Statement"],
|
||||||
|
visitor: ["id"],
|
||||||
|
fields: {
|
||||||
|
id: (0, _utils.validateType)("Identifier")
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeAnnotation", {
|
||||||
|
visitor: ["typeAnnotation"],
|
||||||
|
fields: {
|
||||||
|
typeAnnotation: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TSType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeParameterInstantiation", {
|
||||||
|
visitor: ["params"],
|
||||||
|
fields: {
|
||||||
|
params: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSType")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeParameterDeclaration", {
|
||||||
|
visitor: ["params"],
|
||||||
|
fields: {
|
||||||
|
params: {
|
||||||
|
validate: (0, _utils.chain)((0, _utils.assertValueType)("array"), (0, _utils.assertEach)((0, _utils.assertNodeType)("TSTypeParameter")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
(0, _utils.default)("TSTypeParameter", {
|
||||||
|
builder: ["constraint", "default", "name"],
|
||||||
|
visitor: ["constraint", "default"],
|
||||||
|
fields: {
|
||||||
|
name: {
|
||||||
|
validate: (0, _utils.assertValueType)("string")
|
||||||
|
},
|
||||||
|
constraint: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TSType"),
|
||||||
|
optional: true
|
||||||
|
},
|
||||||
|
default: {
|
||||||
|
validate: (0, _utils.assertNodeType)("TSType"),
|
||||||
|
optional: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,315 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.validate = validate;
|
||||||
|
exports.typeIs = typeIs;
|
||||||
|
exports.validateType = validateType;
|
||||||
|
exports.validateOptional = validateOptional;
|
||||||
|
exports.validateOptionalType = validateOptionalType;
|
||||||
|
exports.arrayOf = arrayOf;
|
||||||
|
exports.arrayOfType = arrayOfType;
|
||||||
|
exports.validateArrayOfType = validateArrayOfType;
|
||||||
|
exports.assertEach = assertEach;
|
||||||
|
exports.assertOneOf = assertOneOf;
|
||||||
|
exports.assertNodeType = assertNodeType;
|
||||||
|
exports.assertNodeOrValueType = assertNodeOrValueType;
|
||||||
|
exports.assertValueType = assertValueType;
|
||||||
|
exports.assertShape = assertShape;
|
||||||
|
exports.assertOptionalChainStart = assertOptionalChainStart;
|
||||||
|
exports.chain = chain;
|
||||||
|
exports.default = defineType;
|
||||||
|
exports.NODE_PARENT_VALIDATIONS = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.FLIPPED_ALIAS_KEYS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = void 0;
|
||||||
|
|
||||||
|
var _is = _interopRequireDefault(require("../validators/is"));
|
||||||
|
|
||||||
|
var _validate = require("../validators/validate");
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
const VISITOR_KEYS = {};
|
||||||
|
exports.VISITOR_KEYS = VISITOR_KEYS;
|
||||||
|
const ALIAS_KEYS = {};
|
||||||
|
exports.ALIAS_KEYS = ALIAS_KEYS;
|
||||||
|
const FLIPPED_ALIAS_KEYS = {};
|
||||||
|
exports.FLIPPED_ALIAS_KEYS = FLIPPED_ALIAS_KEYS;
|
||||||
|
const NODE_FIELDS = {};
|
||||||
|
exports.NODE_FIELDS = NODE_FIELDS;
|
||||||
|
const BUILDER_KEYS = {};
|
||||||
|
exports.BUILDER_KEYS = BUILDER_KEYS;
|
||||||
|
const DEPRECATED_KEYS = {};
|
||||||
|
exports.DEPRECATED_KEYS = DEPRECATED_KEYS;
|
||||||
|
const NODE_PARENT_VALIDATIONS = {};
|
||||||
|
exports.NODE_PARENT_VALIDATIONS = NODE_PARENT_VALIDATIONS;
|
||||||
|
|
||||||
|
function getType(val) {
|
||||||
|
if (Array.isArray(val)) {
|
||||||
|
return "array";
|
||||||
|
} else if (val === null) {
|
||||||
|
return "null";
|
||||||
|
} else {
|
||||||
|
return typeof val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function validate(validate) {
|
||||||
|
return {
|
||||||
|
validate
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function typeIs(typeName) {
|
||||||
|
return typeof typeName === "string" ? assertNodeType(typeName) : assertNodeType(...typeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateType(typeName) {
|
||||||
|
return validate(typeIs(typeName));
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateOptional(validate) {
|
||||||
|
return {
|
||||||
|
validate,
|
||||||
|
optional: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateOptionalType(typeName) {
|
||||||
|
return {
|
||||||
|
validate: typeIs(typeName),
|
||||||
|
optional: true
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayOf(elementType) {
|
||||||
|
return chain(assertValueType("array"), assertEach(elementType));
|
||||||
|
}
|
||||||
|
|
||||||
|
function arrayOfType(typeName) {
|
||||||
|
return arrayOf(typeIs(typeName));
|
||||||
|
}
|
||||||
|
|
||||||
|
function validateArrayOfType(typeName) {
|
||||||
|
return validate(arrayOfType(typeName));
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertEach(callback) {
|
||||||
|
function validator(node, key, val) {
|
||||||
|
if (!Array.isArray(val)) return;
|
||||||
|
|
||||||
|
for (let i = 0; i < val.length; i++) {
|
||||||
|
const subkey = `${key}[${i}]`;
|
||||||
|
const v = val[i];
|
||||||
|
callback(node, subkey, v);
|
||||||
|
if (process.env.BABEL_TYPES_8_BREAKING) (0, _validate.validateChild)(node, subkey, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validator.each = callback;
|
||||||
|
return validator;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertOneOf(...values) {
|
||||||
|
function validate(node, key, val) {
|
||||||
|
if (values.indexOf(val) < 0) {
|
||||||
|
throw new TypeError(`Property ${key} expected value to be one of ${JSON.stringify(values)} but got ${JSON.stringify(val)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.oneOf = values;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertNodeType(...types) {
|
||||||
|
function validate(node, key, val) {
|
||||||
|
for (const type of types) {
|
||||||
|
if ((0, _is.default)(type, val)) {
|
||||||
|
(0, _validate.validateChild)(node, key, val);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.oneOfNodeTypes = types;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertNodeOrValueType(...types) {
|
||||||
|
function validate(node, key, val) {
|
||||||
|
for (const type of types) {
|
||||||
|
if (getType(val) === type || (0, _is.default)(type, val)) {
|
||||||
|
(0, _validate.validateChild)(node, key, val);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new TypeError(`Property ${key} of ${node.type} expected node to be of a type ${JSON.stringify(types)} but instead got ${JSON.stringify(val == null ? void 0 : val.type)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.oneOfNodeOrValueTypes = types;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertValueType(type) {
|
||||||
|
function validate(node, key, val) {
|
||||||
|
const valid = getType(val) === type;
|
||||||
|
|
||||||
|
if (!valid) {
|
||||||
|
throw new TypeError(`Property ${key} expected type of ${type} but got ${getType(val)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.type = type;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertShape(shape) {
|
||||||
|
function validate(node, key, val) {
|
||||||
|
const errors = [];
|
||||||
|
|
||||||
|
for (const property of Object.keys(shape)) {
|
||||||
|
try {
|
||||||
|
(0, _validate.validateField)(node, property, val[property], shape[property]);
|
||||||
|
} catch (error) {
|
||||||
|
if (error instanceof TypeError) {
|
||||||
|
errors.push(error.message);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errors.length) {
|
||||||
|
throw new TypeError(`Property ${key} of ${node.type} expected to have the following:\n${errors.join("\n")}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.shapeOf = shape;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertOptionalChainStart() {
|
||||||
|
function validate(node) {
|
||||||
|
var _current;
|
||||||
|
|
||||||
|
let current = node;
|
||||||
|
|
||||||
|
while (node) {
|
||||||
|
const {
|
||||||
|
type
|
||||||
|
} = current;
|
||||||
|
|
||||||
|
if (type === "OptionalCallExpression") {
|
||||||
|
if (current.optional) return;
|
||||||
|
current = current.callee;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type === "OptionalMemberExpression") {
|
||||||
|
if (current.optional) return;
|
||||||
|
current = current.object;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new TypeError(`Non-optional ${node.type} must chain from an optional OptionalMemberExpression or OptionalCallExpression. Found chain from ${(_current = current) == null ? void 0 : _current.type}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function chain(...fns) {
|
||||||
|
function validate(...args) {
|
||||||
|
for (const fn of fns) {
|
||||||
|
fn(...args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
validate.chainOf = fns;
|
||||||
|
return validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
const validTypeOpts = ["aliases", "builder", "deprecatedAlias", "fields", "inherits", "visitor", "validate"];
|
||||||
|
const validFieldKeys = ["default", "optional", "validate"];
|
||||||
|
|
||||||
|
function defineType(type, opts = {}) {
|
||||||
|
const inherits = opts.inherits && store[opts.inherits] || {};
|
||||||
|
let fields = opts.fields;
|
||||||
|
|
||||||
|
if (!fields) {
|
||||||
|
fields = {};
|
||||||
|
|
||||||
|
if (inherits.fields) {
|
||||||
|
const keys = Object.getOwnPropertyNames(inherits.fields);
|
||||||
|
|
||||||
|
for (const key of keys) {
|
||||||
|
const field = inherits.fields[key];
|
||||||
|
fields[key] = {
|
||||||
|
default: field.default,
|
||||||
|
optional: field.optional,
|
||||||
|
validate: field.validate
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const visitor = opts.visitor || inherits.visitor || [];
|
||||||
|
const aliases = opts.aliases || inherits.aliases || [];
|
||||||
|
const builder = opts.builder || inherits.builder || opts.visitor || [];
|
||||||
|
|
||||||
|
for (const k of Object.keys(opts)) {
|
||||||
|
if (validTypeOpts.indexOf(k) === -1) {
|
||||||
|
throw new Error(`Unknown type option "${k}" on ${type}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts.deprecatedAlias) {
|
||||||
|
DEPRECATED_KEYS[opts.deprecatedAlias] = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of visitor.concat(builder)) {
|
||||||
|
fields[key] = fields[key] || {};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(fields)) {
|
||||||
|
const field = fields[key];
|
||||||
|
|
||||||
|
if (field.default !== undefined && builder.indexOf(key) === -1) {
|
||||||
|
field.optional = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field.default === undefined) {
|
||||||
|
field.default = null;
|
||||||
|
} else if (!field.validate && field.default != null) {
|
||||||
|
field.validate = assertValueType(getType(field.default));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const k of Object.keys(field)) {
|
||||||
|
if (validFieldKeys.indexOf(k) === -1) {
|
||||||
|
throw new Error(`Unknown field key "${k}" on ${type}.${key}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VISITOR_KEYS[type] = opts.visitor = visitor;
|
||||||
|
BUILDER_KEYS[type] = opts.builder = builder;
|
||||||
|
NODE_FIELDS[type] = opts.fields = fields;
|
||||||
|
ALIAS_KEYS[type] = opts.aliases = aliases;
|
||||||
|
aliases.forEach(alias => {
|
||||||
|
FLIPPED_ALIAS_KEYS[alias] = FLIPPED_ALIAS_KEYS[alias] || [];
|
||||||
|
FLIPPED_ALIAS_KEYS[alias].push(type);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (opts.validate) {
|
||||||
|
NODE_PARENT_VALIDATIONS[type] = opts.validate;
|
||||||
|
}
|
||||||
|
|
||||||
|
store[type] = opts;
|
||||||
|
}
|
||||||
|
|
||||||
|
const store = {};
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,604 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
var _exportNames = {
|
||||||
|
react: true,
|
||||||
|
assertNode: true,
|
||||||
|
createTypeAnnotationBasedOnTypeof: true,
|
||||||
|
createUnionTypeAnnotation: true,
|
||||||
|
createFlowUnionType: true,
|
||||||
|
createTSUnionType: true,
|
||||||
|
cloneNode: true,
|
||||||
|
clone: true,
|
||||||
|
cloneDeep: true,
|
||||||
|
cloneDeepWithoutLoc: true,
|
||||||
|
cloneWithoutLoc: true,
|
||||||
|
addComment: true,
|
||||||
|
addComments: true,
|
||||||
|
inheritInnerComments: true,
|
||||||
|
inheritLeadingComments: true,
|
||||||
|
inheritsComments: true,
|
||||||
|
inheritTrailingComments: true,
|
||||||
|
removeComments: true,
|
||||||
|
ensureBlock: true,
|
||||||
|
toBindingIdentifierName: true,
|
||||||
|
toBlock: true,
|
||||||
|
toComputedKey: true,
|
||||||
|
toExpression: true,
|
||||||
|
toIdentifier: true,
|
||||||
|
toKeyAlias: true,
|
||||||
|
toSequenceExpression: true,
|
||||||
|
toStatement: true,
|
||||||
|
valueToNode: true,
|
||||||
|
appendToMemberExpression: true,
|
||||||
|
inherits: true,
|
||||||
|
prependToMemberExpression: true,
|
||||||
|
removeProperties: true,
|
||||||
|
removePropertiesDeep: true,
|
||||||
|
removeTypeDuplicates: true,
|
||||||
|
getBindingIdentifiers: true,
|
||||||
|
getOuterBindingIdentifiers: true,
|
||||||
|
traverse: true,
|
||||||
|
traverseFast: true,
|
||||||
|
shallowEqual: true,
|
||||||
|
is: true,
|
||||||
|
isBinding: true,
|
||||||
|
isBlockScoped: true,
|
||||||
|
isImmutable: true,
|
||||||
|
isLet: true,
|
||||||
|
isNode: true,
|
||||||
|
isNodesEquivalent: true,
|
||||||
|
isPlaceholderType: true,
|
||||||
|
isReferenced: true,
|
||||||
|
isScope: true,
|
||||||
|
isSpecifierDefault: true,
|
||||||
|
isType: true,
|
||||||
|
isValidES3Identifier: true,
|
||||||
|
isValidIdentifier: true,
|
||||||
|
isVar: true,
|
||||||
|
matchesPattern: true,
|
||||||
|
validate: true,
|
||||||
|
buildMatchMemberExpression: true
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "assertNode", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _assertNode.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "createTypeAnnotationBasedOnTypeof", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _createTypeAnnotationBasedOnTypeof.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "createUnionTypeAnnotation", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _createFlowUnionType.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "createFlowUnionType", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _createFlowUnionType.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "createTSUnionType", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _createTSUnionType.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "cloneNode", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _cloneNode.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "clone", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _clone.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "cloneDeep", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _cloneDeep.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "cloneDeepWithoutLoc", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _cloneDeepWithoutLoc.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "cloneWithoutLoc", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _cloneWithoutLoc.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "addComment", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _addComment.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "addComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _addComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "inheritInnerComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _inheritInnerComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "inheritLeadingComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _inheritLeadingComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "inheritsComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _inheritsComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "inheritTrailingComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _inheritTrailingComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "removeComments", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _removeComments.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "ensureBlock", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _ensureBlock.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toBindingIdentifierName", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toBindingIdentifierName.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toBlock", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toBlock.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toComputedKey", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toComputedKey.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toExpression", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toExpression.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toIdentifier", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toIdentifier.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toKeyAlias", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toKeyAlias.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toSequenceExpression", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toSequenceExpression.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "toStatement", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _toStatement.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "valueToNode", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _valueToNode.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "appendToMemberExpression", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _appendToMemberExpression.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "inherits", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _inherits.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "prependToMemberExpression", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _prependToMemberExpression.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "removeProperties", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _removeProperties.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "removePropertiesDeep", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _removePropertiesDeep.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "removeTypeDuplicates", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _removeTypeDuplicates.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "getBindingIdentifiers", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _getBindingIdentifiers.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "getOuterBindingIdentifiers", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _getOuterBindingIdentifiers.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "traverse", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _traverse.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "traverseFast", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _traverseFast.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "shallowEqual", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _shallowEqual.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "is", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _is.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isBinding", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isBinding.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isBlockScoped", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isBlockScoped.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isImmutable", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isImmutable.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isLet", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isLet.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isNode", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isNode.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isNodesEquivalent", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isNodesEquivalent.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isPlaceholderType", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isPlaceholderType.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isReferenced", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isReferenced.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isScope", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isScope.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isSpecifierDefault", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isSpecifierDefault.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isType", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isType.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isValidES3Identifier", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isValidES3Identifier.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isValidIdentifier", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isValidIdentifier.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "isVar", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _isVar.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "matchesPattern", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _matchesPattern.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "validate", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _validate.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(exports, "buildMatchMemberExpression", {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _buildMatchMemberExpression.default;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
exports.react = void 0;
|
||||||
|
|
||||||
|
var _isReactComponent = _interopRequireDefault(require("./validators/react/isReactComponent"));
|
||||||
|
|
||||||
|
var _isCompatTag = _interopRequireDefault(require("./validators/react/isCompatTag"));
|
||||||
|
|
||||||
|
var _buildChildren = _interopRequireDefault(require("./builders/react/buildChildren"));
|
||||||
|
|
||||||
|
var _assertNode = _interopRequireDefault(require("./asserts/assertNode"));
|
||||||
|
|
||||||
|
var _generated = require("./asserts/generated");
|
||||||
|
|
||||||
|
Object.keys(_generated).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _generated[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var _createTypeAnnotationBasedOnTypeof = _interopRequireDefault(require("./builders/flow/createTypeAnnotationBasedOnTypeof"));
|
||||||
|
|
||||||
|
var _createFlowUnionType = _interopRequireDefault(require("./builders/flow/createFlowUnionType"));
|
||||||
|
|
||||||
|
var _createTSUnionType = _interopRequireDefault(require("./builders/typescript/createTSUnionType"));
|
||||||
|
|
||||||
|
var _generated2 = require("./builders/generated");
|
||||||
|
|
||||||
|
Object.keys(_generated2).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _generated2[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var _cloneNode = _interopRequireDefault(require("./clone/cloneNode"));
|
||||||
|
|
||||||
|
var _clone = _interopRequireDefault(require("./clone/clone"));
|
||||||
|
|
||||||
|
var _cloneDeep = _interopRequireDefault(require("./clone/cloneDeep"));
|
||||||
|
|
||||||
|
var _cloneDeepWithoutLoc = _interopRequireDefault(require("./clone/cloneDeepWithoutLoc"));
|
||||||
|
|
||||||
|
var _cloneWithoutLoc = _interopRequireDefault(require("./clone/cloneWithoutLoc"));
|
||||||
|
|
||||||
|
var _addComment = _interopRequireDefault(require("./comments/addComment"));
|
||||||
|
|
||||||
|
var _addComments = _interopRequireDefault(require("./comments/addComments"));
|
||||||
|
|
||||||
|
var _inheritInnerComments = _interopRequireDefault(require("./comments/inheritInnerComments"));
|
||||||
|
|
||||||
|
var _inheritLeadingComments = _interopRequireDefault(require("./comments/inheritLeadingComments"));
|
||||||
|
|
||||||
|
var _inheritsComments = _interopRequireDefault(require("./comments/inheritsComments"));
|
||||||
|
|
||||||
|
var _inheritTrailingComments = _interopRequireDefault(require("./comments/inheritTrailingComments"));
|
||||||
|
|
||||||
|
var _removeComments = _interopRequireDefault(require("./comments/removeComments"));
|
||||||
|
|
||||||
|
var _generated3 = require("./constants/generated");
|
||||||
|
|
||||||
|
Object.keys(_generated3).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _generated3[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var _constants = require("./constants");
|
||||||
|
|
||||||
|
Object.keys(_constants).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _constants[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var _ensureBlock = _interopRequireDefault(require("./converters/ensureBlock"));
|
||||||
|
|
||||||
|
var _toBindingIdentifierName = _interopRequireDefault(require("./converters/toBindingIdentifierName"));
|
||||||
|
|
||||||
|
var _toBlock = _interopRequireDefault(require("./converters/toBlock"));
|
||||||
|
|
||||||
|
var _toComputedKey = _interopRequireDefault(require("./converters/toComputedKey"));
|
||||||
|
|
||||||
|
var _toExpression = _interopRequireDefault(require("./converters/toExpression"));
|
||||||
|
|
||||||
|
var _toIdentifier = _interopRequireDefault(require("./converters/toIdentifier"));
|
||||||
|
|
||||||
|
var _toKeyAlias = _interopRequireDefault(require("./converters/toKeyAlias"));
|
||||||
|
|
||||||
|
var _toSequenceExpression = _interopRequireDefault(require("./converters/toSequenceExpression"));
|
||||||
|
|
||||||
|
var _toStatement = _interopRequireDefault(require("./converters/toStatement"));
|
||||||
|
|
||||||
|
var _valueToNode = _interopRequireDefault(require("./converters/valueToNode"));
|
||||||
|
|
||||||
|
var _definitions = require("./definitions");
|
||||||
|
|
||||||
|
Object.keys(_definitions).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _definitions[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var _appendToMemberExpression = _interopRequireDefault(require("./modifications/appendToMemberExpression"));
|
||||||
|
|
||||||
|
var _inherits = _interopRequireDefault(require("./modifications/inherits"));
|
||||||
|
|
||||||
|
var _prependToMemberExpression = _interopRequireDefault(require("./modifications/prependToMemberExpression"));
|
||||||
|
|
||||||
|
var _removeProperties = _interopRequireDefault(require("./modifications/removeProperties"));
|
||||||
|
|
||||||
|
var _removePropertiesDeep = _interopRequireDefault(require("./modifications/removePropertiesDeep"));
|
||||||
|
|
||||||
|
var _removeTypeDuplicates = _interopRequireDefault(require("./modifications/flow/removeTypeDuplicates"));
|
||||||
|
|
||||||
|
var _getBindingIdentifiers = _interopRequireDefault(require("./retrievers/getBindingIdentifiers"));
|
||||||
|
|
||||||
|
var _getOuterBindingIdentifiers = _interopRequireDefault(require("./retrievers/getOuterBindingIdentifiers"));
|
||||||
|
|
||||||
|
var _traverse = _interopRequireDefault(require("./traverse/traverse"));
|
||||||
|
|
||||||
|
var _traverseFast = _interopRequireDefault(require("./traverse/traverseFast"));
|
||||||
|
|
||||||
|
var _shallowEqual = _interopRequireDefault(require("./utils/shallowEqual"));
|
||||||
|
|
||||||
|
var _is = _interopRequireDefault(require("./validators/is"));
|
||||||
|
|
||||||
|
var _isBinding = _interopRequireDefault(require("./validators/isBinding"));
|
||||||
|
|
||||||
|
var _isBlockScoped = _interopRequireDefault(require("./validators/isBlockScoped"));
|
||||||
|
|
||||||
|
var _isImmutable = _interopRequireDefault(require("./validators/isImmutable"));
|
||||||
|
|
||||||
|
var _isLet = _interopRequireDefault(require("./validators/isLet"));
|
||||||
|
|
||||||
|
var _isNode = _interopRequireDefault(require("./validators/isNode"));
|
||||||
|
|
||||||
|
var _isNodesEquivalent = _interopRequireDefault(require("./validators/isNodesEquivalent"));
|
||||||
|
|
||||||
|
var _isPlaceholderType = _interopRequireDefault(require("./validators/isPlaceholderType"));
|
||||||
|
|
||||||
|
var _isReferenced = _interopRequireDefault(require("./validators/isReferenced"));
|
||||||
|
|
||||||
|
var _isScope = _interopRequireDefault(require("./validators/isScope"));
|
||||||
|
|
||||||
|
var _isSpecifierDefault = _interopRequireDefault(require("./validators/isSpecifierDefault"));
|
||||||
|
|
||||||
|
var _isType = _interopRequireDefault(require("./validators/isType"));
|
||||||
|
|
||||||
|
var _isValidES3Identifier = _interopRequireDefault(require("./validators/isValidES3Identifier"));
|
||||||
|
|
||||||
|
var _isValidIdentifier = _interopRequireDefault(require("./validators/isValidIdentifier"));
|
||||||
|
|
||||||
|
var _isVar = _interopRequireDefault(require("./validators/isVar"));
|
||||||
|
|
||||||
|
var _matchesPattern = _interopRequireDefault(require("./validators/matchesPattern"));
|
||||||
|
|
||||||
|
var _validate = _interopRequireDefault(require("./validators/validate"));
|
||||||
|
|
||||||
|
var _buildMatchMemberExpression = _interopRequireDefault(require("./validators/buildMatchMemberExpression"));
|
||||||
|
|
||||||
|
var _generated4 = require("./validators/generated");
|
||||||
|
|
||||||
|
Object.keys(_generated4).forEach(function (key) {
|
||||||
|
if (key === "default" || key === "__esModule") return;
|
||||||
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
||||||
|
Object.defineProperty(exports, key, {
|
||||||
|
enumerable: true,
|
||||||
|
get: function () {
|
||||||
|
return _generated4[key];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
const react = {
|
||||||
|
isReactComponent: _isReactComponent.default,
|
||||||
|
isCompatTag: _isCompatTag.default,
|
||||||
|
buildChildren: _buildChildren.default
|
||||||
|
};
|
||||||
|
exports.react = react;
|
File diff suppressed because it is too large
Load Diff
15
node_modules/@babel/types/lib/modifications/appendToMemberExpression.js
generated
vendored
Normal file
15
node_modules/@babel/types/lib/modifications/appendToMemberExpression.js
generated
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = appendToMemberExpression;
|
||||||
|
|
||||||
|
var _generated = require("../builders/generated");
|
||||||
|
|
||||||
|
function appendToMemberExpression(member, append, computed = false) {
|
||||||
|
member.object = (0, _generated.memberExpression)(member.object, member.property, member.computed);
|
||||||
|
member.property = append;
|
||||||
|
member.computed = !!computed;
|
||||||
|
return member;
|
||||||
|
}
|
74
node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js
generated
vendored
Normal file
74
node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js
generated
vendored
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = removeTypeDuplicates;
|
||||||
|
|
||||||
|
var _generated = require("../../validators/generated");
|
||||||
|
|
||||||
|
function removeTypeDuplicates(nodes) {
|
||||||
|
const generics = {};
|
||||||
|
const bases = {};
|
||||||
|
const typeGroups = [];
|
||||||
|
const types = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
|
const node = nodes[i];
|
||||||
|
if (!node) continue;
|
||||||
|
|
||||||
|
if (types.indexOf(node) >= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isAnyTypeAnnotation)(node)) {
|
||||||
|
return [node];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isFlowBaseAnnotation)(node)) {
|
||||||
|
bases[node.type] = node;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isUnionTypeAnnotation)(node)) {
|
||||||
|
if (typeGroups.indexOf(node.types) < 0) {
|
||||||
|
nodes = nodes.concat(node.types);
|
||||||
|
typeGroups.push(node.types);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isGenericTypeAnnotation)(node)) {
|
||||||
|
const name = node.id.name;
|
||||||
|
|
||||||
|
if (generics[name]) {
|
||||||
|
let existing = generics[name];
|
||||||
|
|
||||||
|
if (existing.typeParameters) {
|
||||||
|
if (node.typeParameters) {
|
||||||
|
existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
existing = node.typeParameters;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
generics[name] = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
types.push(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const type of Object.keys(bases)) {
|
||||||
|
types.push(bases[type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const name of Object.keys(generics)) {
|
||||||
|
types.push(generics[name]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return types;
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = inherits;
|
||||||
|
|
||||||
|
var _constants = require("../constants");
|
||||||
|
|
||||||
|
var _inheritsComments = _interopRequireDefault(require("../comments/inheritsComments"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function inherits(child, parent) {
|
||||||
|
if (!child || !parent) return child;
|
||||||
|
|
||||||
|
for (const key of _constants.INHERIT_KEYS.optional) {
|
||||||
|
if (child[key] == null) {
|
||||||
|
child[key] = parent[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(parent)) {
|
||||||
|
if (key[0] === "_" && key !== "__clone") child[key] = parent[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of _constants.INHERIT_KEYS.force) {
|
||||||
|
child[key] = parent[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
(0, _inheritsComments.default)(child, parent);
|
||||||
|
return child;
|
||||||
|
}
|
13
node_modules/@babel/types/lib/modifications/prependToMemberExpression.js
generated
vendored
Normal file
13
node_modules/@babel/types/lib/modifications/prependToMemberExpression.js
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = prependToMemberExpression;
|
||||||
|
|
||||||
|
var _generated = require("../builders/generated");
|
||||||
|
|
||||||
|
function prependToMemberExpression(member, prepend) {
|
||||||
|
member.object = (0, _generated.memberExpression)(prepend, member.object);
|
||||||
|
return member;
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = removeProperties;
|
||||||
|
|
||||||
|
var _constants = require("../constants");
|
||||||
|
|
||||||
|
const CLEAR_KEYS = ["tokens", "start", "end", "loc", "raw", "rawValue"];
|
||||||
|
|
||||||
|
const CLEAR_KEYS_PLUS_COMMENTS = _constants.COMMENT_KEYS.concat(["comments"]).concat(CLEAR_KEYS);
|
||||||
|
|
||||||
|
function removeProperties(node, opts = {}) {
|
||||||
|
const map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS;
|
||||||
|
|
||||||
|
for (const key of map) {
|
||||||
|
if (node[key] != null) node[key] = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key of Object.keys(node)) {
|
||||||
|
if (key[0] === "_" && node[key] != null) node[key] = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const symbols = Object.getOwnPropertySymbols(node);
|
||||||
|
|
||||||
|
for (const sym of symbols) {
|
||||||
|
node[sym] = null;
|
||||||
|
}
|
||||||
|
}
|
17
node_modules/@babel/types/lib/modifications/removePropertiesDeep.js
generated
vendored
Normal file
17
node_modules/@babel/types/lib/modifications/removePropertiesDeep.js
generated
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = removePropertiesDeep;
|
||||||
|
|
||||||
|
var _traverseFast = _interopRequireDefault(require("../traverse/traverseFast"));
|
||||||
|
|
||||||
|
var _removeProperties = _interopRequireDefault(require("./removeProperties"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function removePropertiesDeep(tree, opts) {
|
||||||
|
(0, _traverseFast.default)(tree, _removeProperties.default, opts);
|
||||||
|
return tree;
|
||||||
|
}
|
54
node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js
generated
vendored
Normal file
54
node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js
generated
vendored
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = removeTypeDuplicates;
|
||||||
|
|
||||||
|
var _generated = require("../../validators/generated");
|
||||||
|
|
||||||
|
function removeTypeDuplicates(nodes) {
|
||||||
|
const generics = {};
|
||||||
|
const bases = {};
|
||||||
|
const typeGroups = [];
|
||||||
|
const types = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < nodes.length; i++) {
|
||||||
|
const node = nodes[i];
|
||||||
|
if (!node) continue;
|
||||||
|
|
||||||
|
if (types.indexOf(node) >= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isTSAnyKeyword)(node.type)) {
|
||||||
|
return [node];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isTSBaseType)(node)) {
|
||||||
|
bases[node.type] = node;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isTSUnionType)(node)) {
|
||||||
|
if (typeGroups.indexOf(node.types) < 0) {
|
||||||
|
nodes = nodes.concat(node.types);
|
||||||
|
typeGroups.push(node.types);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
types.push(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const type of Object.keys(bases)) {
|
||||||
|
types.push(bases[type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const name of Object.keys(generics)) {
|
||||||
|
types.push(generics[name]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return types;
|
||||||
|
}
|
103
node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js
generated
vendored
Normal file
103
node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js
generated
vendored
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = getBindingIdentifiers;
|
||||||
|
|
||||||
|
var _generated = require("../validators/generated");
|
||||||
|
|
||||||
|
function getBindingIdentifiers(node, duplicates, outerOnly) {
|
||||||
|
let search = [].concat(node);
|
||||||
|
const ids = Object.create(null);
|
||||||
|
|
||||||
|
while (search.length) {
|
||||||
|
const id = search.shift();
|
||||||
|
if (!id) continue;
|
||||||
|
const keys = getBindingIdentifiers.keys[id.type];
|
||||||
|
|
||||||
|
if ((0, _generated.isIdentifier)(id)) {
|
||||||
|
if (duplicates) {
|
||||||
|
const _ids = ids[id.name] = ids[id.name] || [];
|
||||||
|
|
||||||
|
_ids.push(id);
|
||||||
|
} else {
|
||||||
|
ids[id.name] = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isExportDeclaration)(id)) {
|
||||||
|
if ((0, _generated.isDeclaration)(id.declaration)) {
|
||||||
|
search.push(id.declaration);
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outerOnly) {
|
||||||
|
if ((0, _generated.isFunctionDeclaration)(id)) {
|
||||||
|
search.push(id.id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((0, _generated.isFunctionExpression)(id)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keys) {
|
||||||
|
for (let i = 0; i < keys.length; i++) {
|
||||||
|
const key = keys[i];
|
||||||
|
|
||||||
|
if (id[key]) {
|
||||||
|
search = search.concat(id[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ids;
|
||||||
|
}
|
||||||
|
|
||||||
|
getBindingIdentifiers.keys = {
|
||||||
|
DeclareClass: ["id"],
|
||||||
|
DeclareFunction: ["id"],
|
||||||
|
DeclareModule: ["id"],
|
||||||
|
DeclareVariable: ["id"],
|
||||||
|
DeclareInterface: ["id"],
|
||||||
|
DeclareTypeAlias: ["id"],
|
||||||
|
DeclareOpaqueType: ["id"],
|
||||||
|
InterfaceDeclaration: ["id"],
|
||||||
|
TypeAlias: ["id"],
|
||||||
|
OpaqueType: ["id"],
|
||||||
|
CatchClause: ["param"],
|
||||||
|
LabeledStatement: ["label"],
|
||||||
|
UnaryExpression: ["argument"],
|
||||||
|
AssignmentExpression: ["left"],
|
||||||
|
ImportSpecifier: ["local"],
|
||||||
|
ImportNamespaceSpecifier: ["local"],
|
||||||
|
ImportDefaultSpecifier: ["local"],
|
||||||
|
ImportDeclaration: ["specifiers"],
|
||||||
|
ExportSpecifier: ["exported"],
|
||||||
|
ExportNamespaceSpecifier: ["exported"],
|
||||||
|
ExportDefaultSpecifier: ["exported"],
|
||||||
|
FunctionDeclaration: ["id", "params"],
|
||||||
|
FunctionExpression: ["id", "params"],
|
||||||
|
ArrowFunctionExpression: ["params"],
|
||||||
|
ObjectMethod: ["params"],
|
||||||
|
ClassMethod: ["params"],
|
||||||
|
ForInStatement: ["left"],
|
||||||
|
ForOfStatement: ["left"],
|
||||||
|
ClassDeclaration: ["id"],
|
||||||
|
ClassExpression: ["id"],
|
||||||
|
RestElement: ["argument"],
|
||||||
|
UpdateExpression: ["argument"],
|
||||||
|
ObjectProperty: ["value"],
|
||||||
|
AssignmentPattern: ["left"],
|
||||||
|
ArrayPattern: ["elements"],
|
||||||
|
ObjectPattern: ["properties"],
|
||||||
|
VariableDeclaration: ["declarations"],
|
||||||
|
VariableDeclarator: ["id"]
|
||||||
|
};
|
14
node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js
generated
vendored
Normal file
14
node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
Object.defineProperty(exports, "__esModule", {
|
||||||
|
value: true
|
||||||
|
});
|
||||||
|
exports.default = getOuterBindingIdentifiers;
|
||||||
|
|
||||||
|
var _getBindingIdentifiers = _interopRequireDefault(require("./getBindingIdentifiers"));
|
||||||
|
|
||||||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||||
|
|
||||||
|
function getOuterBindingIdentifiers(node, duplicates) {
|
||||||
|
return (0, _getBindingIdentifiers.default)(node, duplicates, true);
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue