Skip to content

Instantly share code, notes, and snippets.

@Sarverott
Last active September 11, 2025 07:20
Show Gist options
  • Save Sarverott/6394c8647862b19a2e09eb10982b3aa4 to your computer and use it in GitHub Desktop.
Save Sarverott/6394c8647862b19a2e09eb10982b3aa4 to your computer and use it in GitHub Desktop.
import ComicsDownloader from './PoW_comics-downloader.cjs'
ComicsDownloader.downloadWebcomic(
"https://w5.read-one-punchman.com/manga/one-punch-man-chapter-1/",
"one-punch-man_webcomic",
__dirname
)
import fs from 'node:fs'
import path from 'node:path'
import ComicsDownloader from './PoW_comics-downloader.cjs'
ComicsDownloader.downloadFileChain(
JSON.parse(
fs.readFileSync(
path.join(
__dirname,
"one-punch-man_webcomic",
"descriptor.json"
)
)
),
__dirname,
"one-punch-man_webcomic"
)
node_modules
*/**
.BACKUP*

recovery of for-fun old microproject, sidescripted pararel with router web interface handler management packages

create point by recorded in metadata:

  • UNIXUSAT=1703192058000

downloader of OnePunchMan webcomic

OnePunchMan GIF from 'tenor.com'


preparations before publishing here in now point UNIXUSAT=1755756091949

alias wildsmelt="node -e '((stdin, data=``)=>{stdin.on(`data`,(chunk)=>data+=chunk);stdin.on(`end`,()=>process.stdout.write(JSON.stringify(JSON.parse(data))));})(process.openStdin())'"
alias smeltcheck="python3 -c \"(lambda json: json.dumps(json.loads(open(__import__('sys').argv[1]).read())))(__import__('json'))\""
alias ttystory="history > ~/ttystory-$(date +%s)-now.txt"
alias NOW="node -e 'console.log(`UNIXUSAT=`,Date.now())'"

npm install
npm audit fix
cp package-lock.json .BACKUP___package-lock.json
cat package-lock.json | wildsmelt > smelted.package-lock.json
smeltcheck smelted.package-lock.json && echo "OKIDOKI" && mv smelted.package-lock.json package-lock.json

ttystory

result output of tree . -I node_modules

.
├── main.js
├── one-punch-man_webcomic
│   ├── descriptor.json
│   ├── img.100.onepunch_man_6_1.jpg
│   ├── img.101.onepunch_man_6_2.jpg
│   ├── img.102.onepunch_man_6_3.jpg
│   ├── img.103.onepunch_man_6_4.jpg
│   ├── img.104.onepunch_man_6_5.jpg
│   ├── img.105.onepunch_man_6_6.jpg
│   ├── img.106.onepunch_man_6_7.jpg
│   ├── img.107.onepunch_man_6_8.jpg
│   ├── img.108.onepunch_man_6_9.jpg
│   ├── img.109.onepunch_man_6_10.jpg
│   ├── img.10.onepunch_man_1_10.jpg
│   ├── img.110.onepunch_man_6_11.jpg
│   ├── img.111.onepunch_man_6_12.jpg
│   ├── img.112.onepunch_man_6_13.jpg
│   ├── img.113.onepunch_man_6_14.jpg
│   ├── img.114.onepunch_man_6_15.jpg
│   ├── img.115.onepunch_man_6_16.jpg
│   ├── img.116.onepunch_man_6_17.jpg
│   ├── img.117.onepunch_man_6_18.jpg
│   ├── img.118.onepunch_man_6_19.jpg
│   ├── img.119.onepunch_man_6_20.jpg
│   ├── img.11.onepunch_man_1_11.jpg
│   ├── img.120.onepunch_man_6_21.jpg
│   ├── img.121.onepunch_man_6_22.jpg
│   ├── img.122.onepunch_man_6_23.jpg
│   ├── img.123.onepunch_man_6_24.jpg
│   ├── img.124.onepunch_man_6_25.jpg
│   ├── img.125.onepunch_man_7_1.jpg
│   ├── img.126.onepunch_man_7_2.jpg
│   ├── img.127.onepunch_man_7_3.jpg
│   ├── img.128.onepunch_man_7_4.jpg
│   ├── img.129.onepunch_man_7_5.jpg
│   ├── img.12.onepunch_man_1_12.jpg
│   ├── img.130.onepunch_man_7_6.jpg
│   ├── img.131.onepunch_man_7_7.jpg
│   ├── img.132.onepunch_man_7_8.jpg
│   ├── img.133.onepunch_man_7_9.jpg
│   ├── img.134.onepunch_man_7_10.jpg
│   ├── img.135.onepunch_man_7_11.jpg
│   ├── img.136.onepunch_man_7_12.jpg
│   ├── img.137.onepunch_man_7_13.jpg
│   ├── img.138.onepunch_man_7_14.jpg
│   ├── img.139.onepunch_man_7_15.jpg
│   ├── img.13.onepunch_man_1_13.jpg
│   ├── img.140.onepunch_man_7_16.jpg
│   ├── img.141.onepunch_man_7_17.jpg
│   ├── img.142.onepunch_man_8_1.jpg
│   ├── img.143.onepunch_man_8_2.jpg
│   ├── img.144.onepunch_man_8_3.jpg
│   ├── img.145.onepunch_man_8_4.jpg
│   ├── img.146.onepunch_man_8_5.jpg
│   ├── img.147.onepunch_man_8_6.jpg
│   ├── img.148.onepunch_man_8_7.jpg
│   ├── img.149.onepunch_man_8_8.jpg
│   ├── img.14.onepunch_man_1_14.jpg
│   ├── img.150.onepunch_man_8_9.jpg
│   ├── img.151.onepunch_man_8_10.jpg
│   ├── img.152.onepunch_man_8_11.jpg
│   ├── img.153.onepunch_man_8_12.jpg
│   ├── img.154.onepunch_man_8_13.jpg
│   ├── img.155.onepunch_man_8_14.jpg
│   ├── img.156.onepunch_man_8_15.jpg
│   ├── img.157.onepunch_man_8_16.jpg
│   ├── img.158.onepunch_man_8_17.jpg
│   ├── img.159.onepunch_man_8_18.jpg
│   ├── img.15.onepunch_man_1_15.jpg
│   ├── img.160.onepunch_man_8_19.jpg
│   ├── img.161.onepunch_man_8_20.jpg
│   ├── img.162.onepunch_man_8_21.jpg
│   ├── img.163.onepunch_man_8_22.jpg
│   ├── img.164.onepunch_man_8_23.jpg
│   ├── img.165.1.jpg
│   ├── img.166.2.jpg
│   ├── img.167.3.jpg
│   ├── img.168.4.jpg
│   ├── img.169.5.jpg
│   ├── img.16.onepunch_man_1_16.jpg
│   ├── img.170.6.jpg
│   ├── img.171.7.jpg
│   ├── img.172.8.jpg
│   ├── img.173.9.jpg
│   ├── img.174.10.jpg
│   ├── img.175.11.jpg
│   ├── img.176.12.jpg
│   ├── img.177.13.jpg
│   ├── img.178.14.jpg
│   ├── img.179.15.jpg
│   ├── img.17.onepunch_man_1_17.jpg
│   ├── img.180.16.jpg
│   ├── img.181.17.jpg
│   ├── img.182.18.jpg
│   ├── img.183.19.jpg
│   ├── img.184.20.jpg
│   ├── img.185.21.jpg
│   ├── img.186.22.jpg
│   ├── img.187.23.jpg
│   ├── img.188.24.jpg
│   ├── img.189.25.jpg
│   ├── img.18.onepunch_man_1_18.jpg
│   ├── img.190.26.jpg
│   ├── img.191.onepunch_man_9_1.jpg
│   ├── img.192.onepunch_man_9_2.jpg
│   ├── img.193.onepunch_man_9_3.jpg
│   ├── img.194.onepunch_man_9_4.jpg
│   ├── img.195.onepunch_man_9_5.jpg
│   ├── img.196.onepunch_man_9_6.jpg
│   ├── img.197.onepunch_man_9_7.jpg
│   ├── img.198.onepunch_man_9_8.jpg
│   ├── img.199.onepunch_man_9_9.jpg
│   ├── img.19.onepunch_man_1_19.jpg
│   ├── img.1.onepunch_man_1_1.jpg
│   ├── img.200.onepunch_man_9_10.jpg
│   ├── img.201.onepunch_man_9_11.jpg
│   ├── img.202.onepunch_man_9_12.jpg
│   ├── img.203.onepunch_man_9_13.jpg
│   ├── img.204.onepunch_man_9_14.jpg
│   ├── img.205.onepunch_man_9_15.jpg
│   ├── img.206.onepunch_man_9_16.jpg
│   ├── img.207.onepunch_man_9_17.jpg
│   ├── img.208.onepunch_man_9_18.jpg
│   ├── img.209.onepunch_man_9_19.jpg
│   ├── img.20.onepunch_man_2_1.jpg
│   ├── img.210.onepunch_man_9_20.jpg
│   ├── img.211.onepunch_man_9_21.jpg
│   ├── img.212.onepunch_man_9_22.jpg
│   ├── img.213.onepunch_man_9_23.jpg
│   ├── img.214.onepunch_man_9_24.jpg
│   ├── img.215.onepunch_man_10_1.jpg
│   ├── img.216.onepunch_man_10_2.jpg
│   ├── img.217.onepunch_man_10_3.jpg
│   ├── img.218.onepunch_man_10_4.jpg
│   ├── img.219.onepunch_man_10_5.jpg
│   ├── img.21.onepunch_man_2_2.jpg
│   ├── img.220.onepunch_man_10_6.jpg
│   ├── img.221.onepunch_man_10_7.jpg
│   ├── img.222.onepunch_man_10_8.jpg
│   ├── img.223.onepunch_man_10_9.jpg
│   ├── img.224.onepunch_man_10_10.jpg
│   ├── img.225.onepunch_man_10_11.jpg
│   ├── img.226.onepunch_man_10_12.jpg
│   ├── img.227.onepunch_man_10_13.jpg
│   ├── img.228.onepunch_man_10_14.jpg
│   ├── img.229.onepunch_man_10_15.jpg
│   ├── img.22.onepunch_man_2_3.jpg
│   ├── img.230.onepunch_man_10_16.jpg
│   ├── img.231.onepunch_man_10_17.jpg
│   ├── img.232.onepunch_man_10_18.jpg
│   ├── img.233.onepunch_man_10_19.jpg
│   ├── img.234.onepunch_man_10_20.jpg
│   ├── img.235.onepunch_man_10_21.jpg
│   ├── img.236.onepunch_man_10_22.jpg
│   ├── img.237.onepunch_man_10_23.jpg
│   ├── img.238.onepunch_man_10_24.jpg
│   ├── img.239.onepunch_man_10_25.jpg
│   ├── img.23.onepunch_man_2_4.jpg
│   ├── img.240.onepunch_man_10_26.jpg
│   ├── img.241.onepunch_man_10_27.jpg
│   ├── img.242.onepunch_man_10_28.jpg
│   ├── img.243.onepunch_man_10_29.jpg
│   ├── img.244.onepunch_man_10_30.jpg
│   ├── img.245.onepunch_man_10_31.jpg
│   ├── img.246.onepunch_man_10_32.jpg
│   ├── img.247.onepunch_man_11_1.jpg
│   ├── img.248.onepunch_man_11_2.jpg
│   ├── img.249.onepunch_man_11_3.jpg
│   ├── img.24.onepunch_man_2_5.jpg
│   ├── img.250.onepunch_man_11_4.jpg
│   ├── img.251.onepunch_man_11_5.jpg
│   ├── img.252.onepunch_man_11_6.jpg
│   ├── img.253.onepunch_man_11_7.jpg
│   ├── img.254.onepunch_man_11_8.jpg
│   ├── img.255.onepunch_man_11_9.jpg
│   ├── img.256.onepunch_man_11_10.jpg
│   ├── img.257.onepunch_man_11_11.jpg
│   ├── img.258.onepunch_man_11_12.jpg
│   ├── img.259.onepunch_man_11_13.jpg
│   ├── img.25.onepunch_man_2_6.jpg
│   ├── img.260.onepunch_man_11_14.jpg
│   ├── img.261.onepunch_man_11_15.jpg
│   ├── img.262.onepunch_man_11_16.jpg
│   ├── img.263.onepunch_man_11_17.jpg
│   ├── img.264.onepunch_man_11_18.jpg
│   ├── img.265.onepunch_man_11_19.jpg
│   ├── img.266.onepunch_man_11_20.jpg
│   ├── img.267.onepunch_man_11_21.jpg
│   ├── img.268.onepunch_man_11_22.jpg
│   ├── img.269.onepunch_man_11_23.jpg
│   ├── img.26.onepunch_man_2_7.jpg
│   ├── img.270.onepunch_man_12_1.jpg
│   ├── img.271.onepunch_man_12_2.jpg
│   ├── img.272.onepunch_man_12_3.jpg
│   ├── img.273.onepunch_man_12_4.jpg
│   ├── img.274.onepunch_man_12_5.jpg
│   ├── img.275.onepunch_man_12_6.jpg
│   ├── img.276.onepunch_man_12_7.jpg
│   ├── img.277.onepunch_man_12_8.jpg
│   ├── img.278.onepunch_man_12_9.jpg
│   ├── img.279.onepunch_man_12_10.jpg
│   ├── img.27.onepunch_man_2_8.jpg
│   ├── img.280.onepunch_man_12_11.jpg
│   ├── img.281.onepunch_man_12_12.jpg
│   ├── img.282.onepunch_man_12_13.jpg
│   ├── img.283.onepunch_man_12_14.jpg
│   ├── img.284.onepunch_man_12_15.jpg
│   ├── img.285.onepunch_man_12_16.jpg
│   ├── img.286.onepunch_man_12_17.jpg
│   ├── img.287.onepunch_man_12_18.jpg
│   ├── img.288.onepunch_man_12_19.jpg
│   ├── img.289.onepunch_man_12_20.jpg
│   ├── img.28.onepunch_man_2_9.jpg
│   ├── img.290.onepunch_man_12_21.jpg
│   ├── img.291.onepunch_man_12_22.jpg
│   ├── img.292.onepunch_man_12_23.jpg
│   ├── img.293.onepunch_man_12_24.jpg
│   ├── img.294.onepunch_man_12_25.jpg
│   ├── img.295.onepunch_man_13_1.jpg
│   ├── img.296.onepunch_man_13_2.jpg
│   ├── img.297.onepunch_man_13_3.jpg
│   ├── img.298.onepunch_man_13_4.jpg
│   ├── img.299.onepunch_man_13_5.jpg
│   ├── img.29.onepunch_man_2_10.jpg
│   ├── img.2.onepunch_man_1_2.jpg
│   ├── img.300.onepunch_man_13_6.jpg
│   ├── img.301.onepunch_man_13_7.jpg
│   ├── img.302.onepunch_man_13_8.jpg
│   ├── img.303.onepunch_man_13_9.jpg
│   ├── img.304.onepunch_man_13_10.jpg
│   ├── img.305.onepunch_man_13_11.jpg
│   ├── img.306.onepunch_man_13_12.jpg
│   ├── img.307.onepunch_man_13_13.jpg
│   ├── img.308.onepunch_man_13_14.jpg
│   ├── img.309.onepunch_man_13_15.jpg
│   ├── img.30.onepunch_man_2_11.jpg
│   ├── img.310.onepunch_man_13_16.jpg
│   ├── img.311.onepunch_man_13_17.jpg
│   ├── img.312.onepunch_man_13_18.jpg
│   ├── img.313.onepunch_man_13_19.jpg
│   ├── img.314.onepunch_man_13_20.jpg
│   ├── img.315.onepunch_man_13_21.jpg
│   ├── img.316.onepunch_man_13_22.jpg
│   ├── img.317.onepunch_man_13_23.jpg
│   ├── img.318.onepunch_man_13_24.jpg
│   ├── img.319.onepunch_man_13_25.jpg
│   ├── img.31.onepunch_man_2_12.jpg
│   ├── img.320.onepunch_man_13_26.jpg
│   ├── img.321.onepunch_man_14_1.jpg
│   ├── img.322.onepunch_man_14_2.jpg
│   ├── img.323.onepunch_man_14_3.jpg
│   ├── img.324.onepunch_man_14_4.jpg
│   ├── img.325.onepunch_man_14_5.jpg
│   ├── img.326.onepunch_man_14_6.jpg
│   ├── img.327.onepunch_man_14_7.jpg
│   ├── img.328.onepunch_man_14_8.jpg
│   ├── img.329.onepunch_man_14_9.jpg
│   ├── img.32.onepunch_man_2_13.jpg
│   ├── img.330.onepunch_man_14_10.jpg
│   ├── img.331.onepunch_man_14_11.jpg
│   ├── img.332.onepunch_man_14_12.jpg
│   ├── img.333.onepunch_man_14_13.jpg
│   ├── img.334.onepunch_man_14_14.jpg
│   ├── img.335.onepunch_man_14_15.jpg
│   ├── img.336.onepunch_man_14_16.jpg
│   ├── img.337.onepunch_man_14_17.jpg
│   ├── img.338.onepunch_man_14_18.jpg
│   ├── img.339.onepunch_man_14_19.jpg
│   ├── img.33.onepunch_man_2_14.jpg
│   ├── img.340.onepunch_man_14_20.jpg
│   ├── img.341.onepunch_man_14_21.jpg
│   ├── img.342.onepunch_man_14_22.jpg
│   ├── img.343.onepunch_man_14_23.jpg
│   ├── img.344.onepunch_man_15_1.jpg
│   ├── img.345.onepunch_man_15_2.jpg
│   ├── img.346.onepunch_man_15_3.jpg
│   ├── img.347.onepunch_man_15_4.jpg
│   ├── img.348.onepunch_man_15_5.jpg
│   ├── img.349.onepunch_man_15_6.jpg
│   ├── img.34.onepunch_man_2_15.jpg
│   ├── img.350.onepunch_man_15_7.jpg
│   ├── img.351.onepunch_man_15_8.jpg
│   ├── img.352.onepunch_man_15_9.jpg
│   ├── img.353.onepunch_man_15_10.jpg
│   ├── img.354.onepunch_man_15_11.jpg
│   ├── img.355.onepunch_man_15_12.jpg
│   ├── img.356.onepunch_man_15_13.jpg
│   ├── img.357.onepunch_man_15_14.jpg
│   ├── img.35.onepunch_man_2_16.jpg
│   ├── img.36.onepunch_man_2_17.jpg
│   ├── img.37.onepunch_man_3_1.jpg
│   ├── img.38.onepunch_man_3_2.jpg
│   ├── img.39.onepunch_man_3_3.jpg
│   ├── img.3.onepunch_man_1_3.jpg
│   ├── img.40.onepunch_man_3_4.jpg
│   ├── img.41.onepunch_man_3_5.jpg
│   ├── img.42.onepunch_man_3_6.jpg
│   ├── img.43.onepunch_man_3_7.jpg
│   ├── img.44.onepunch_man_3_8.jpg
│   ├── img.45.onepunch_man_3_9.jpg
│   ├── img.46.onepunch_man_3_10.jpg
│   ├── img.47.onepunch_man_3_11.jpg
│   ├── img.48.onepunch_man_3_12.jpg
│   ├── img.49.onepunch_man_3_13.jpg
│   ├── img.4.onepunch_man_1_4.jpg
│   ├── img.50.onepunch_man_3_14.jpg
│   ├── img.51.onepunch_man_3_15.jpg
│   ├── img.52.onepunch_man_3_16.jpg
│   ├── img.53.onepunch_man_3_17.jpg
│   ├── img.54.onepunch_man_3_18.jpg
│   ├── img.55.onepunch_man_3_19.jpg
│   ├── img.56.onepunch_man_3_20.jpg
│   ├── img.57.onepunch_man_3_21.jpg
│   ├── img.58.onepunch_man_4_1.jpg
│   ├── img.59.onepunch_man_4_2.jpg
│   ├── img.5.onepunch_man_1_5.jpg
│   ├── img.60.onepunch_man_4_3.jpg
│   ├── img.61.onepunch_man_4_4.jpg
│   ├── img.62.onepunch_man_4_5.jpg
│   ├── img.63.onepunch_man_4_6.jpg
│   ├── img.64.onepunch_man_4_7.jpg
│   ├── img.65.onepunch_man_4_8.jpg
│   ├── img.66.onepunch_man_4_9.jpg
│   ├── img.67.onepunch_man_4_10.jpg
│   ├── img.68.onepunch_man_4_11.jpg
│   ├── img.69.onepunch_man_4_12.jpg
│   ├── img.6.onepunch_man_1_6.jpg
│   ├── img.70.onepunch_man_4_13.jpg
│   ├── img.71.onepunch_man_4_14.jpg
│   ├── img.72.onepunch_man_4_15.jpg
│   ├── img.73.onepunch_man_4_16.jpg
│   ├── img.74.onepunch_man_4_17.jpg
│   ├── img.75.onepunch_man_4_18.jpg
│   ├── img.76.onepunch_man_4_19.jpg
│   ├── img.77.onepunch_man_4_20.jpg
│   ├── img.78.onepunch_man_4_21.jpg
│   ├── img.79.onepunch_man_5_1.jpg
│   ├── img.7.onepunch_man_1_7.jpg
│   ├── img.80.onepunch_man_5_2.jpg
│   ├── img.81.onepunch_man_5_3.jpg
│   ├── img.82.onepunch_man_5_4.jpg
│   ├── img.83.onepunch_man_5_5.jpg
│   ├── img.84.onepunch_man_5_6.jpg
│   ├── img.85.onepunch_man_5_7.jpg
│   ├── img.86.onepunch_man_5_8.jpg
│   ├── img.87.onepunch_man_5_9.jpg
│   ├── img.88.onepunch_man_5_10.jpg
│   ├── img.89.onepunch_man_5_11.jpg
│   ├── img.8.onepunch_man_1_8.jpg
│   ├── img.90.onepunch_man_5_12.jpg
│   ├── img.91.onepunch_man_5_13.jpg
│   ├── img.92.onepunch_man_5_14.jpg
│   ├── img.93.onepunch_man_5_15.jpg
│   ├── img.94.onepunch_man_5_16.jpg
│   ├── img.95.onepunch_man_5_17.jpg
│   ├── img.96.onepunch_man_5_18.jpg
│   ├── img.97.onepunch_man_5_19.jpg
│   ├── img.98.onepunch_man_5_20.jpg
│   ├── img.99.onepunch_man_5_21.jpg
│   └── img.9.onepunch_man_1_9.jpg
├── package.json
├── package-lock.json
└── smelted.package-lock.json

2 directories, 362 files
{"name":"one-punch-man-download","version":"1.0.0","lockfileVersion":3,"requires":true,"packages":{"":{"name":"one-punch-man-download","version":"1.0.0","license":"MIT","dependencies":{"puppeteer":"^21.6.1"}},"node_modules/@babel/code-frame":{"version":"7.23.5","resolved":"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz","integrity":"sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==","dependencies":{"@babel/highlight":"^7.23.4","chalk":"^2.4.2"},"engines":{"node":">=6.9.0"}},"node_modules/@babel/helper-validator-identifier":{"version":"7.22.20","resolved":"https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz","integrity":"sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==","engines":{"node":">=6.9.0"}},"node_modules/@babel/highlight":{"version":"7.23.4","resolved":"https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz","integrity":"sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==","dependencies":{"@babel/helper-validator-identifier":"^7.22.20","chalk":"^2.4.2","js-tokens":"^4.0.0"},"engines":{"node":">=6.9.0"}},"node_modules/@puppeteer/browsers":{"version":"1.9.0","resolved":"https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.0.tgz","integrity":"sha512-QwguOLy44YBGC8vuPP2nmpX4MUN2FzWbsnvZJtiCzecU3lHmVZkaC1tq6rToi9a200m8RzlVtDyxCS0UIDrxUg==","dependencies":{"debug":"4.3.4","extract-zip":"2.0.1","progress":"2.0.3","proxy-agent":"6.3.1","tar-fs":"3.0.4","unbzip2-stream":"1.4.3","yargs":"17.7.2"},"bin":{"browsers":"lib/cjs/main-cli.js"},"engines":{"node":">=16.3.0"}},"node_modules/@tootallnate/quickjs-emscripten":{"version":"0.23.0","resolved":"https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz","integrity":"sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="},"node_modules/@types/node":{"version":"20.10.5","resolved":"https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz","integrity":"sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==","optional":true,"dependencies":{"undici-types":"~5.26.4"}},"node_modules/@types/yauzl":{"version":"2.10.3","resolved":"https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz","integrity":"sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==","optional":true,"dependencies":{"@types/node":"*"}},"node_modules/agent-base":{"version":"7.1.0","resolved":"https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz","integrity":"sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==","dependencies":{"debug":"^4.3.4"},"engines":{"node":">= 14"}},"node_modules/ansi-regex":{"version":"5.0.1","resolved":"https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz","integrity":"sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==","engines":{"node":">=8"}},"node_modules/ansi-styles":{"version":"3.2.1","resolved":"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz","integrity":"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==","dependencies":{"color-convert":"^1.9.0"},"engines":{"node":">=4"}},"node_modules/argparse":{"version":"2.0.1","resolved":"https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz","integrity":"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="},"node_modules/ast-types":{"version":"0.13.4","resolved":"https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz","integrity":"sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==","dependencies":{"tslib":"^2.0.1"},"engines":{"node":">=4"}},"node_modules/b4a":{"version":"1.6.4","resolved":"https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz","integrity":"sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="},"node_modules/base64-js":{"version":"1.5.1","resolved":"https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz","integrity":"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==","funding":[{"type":"github","url":"https://github.com/sponsors/feross"},{"type":"patreon","url":"https://www.patreon.com/feross"},{"type":"consulting","url":"https://feross.org/support"}]},"node_modules/basic-ftp":{"version":"5.0.4","resolved":"https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz","integrity":"sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==","engines":{"node":">=10.0.0"}},"node_modules/buffer":{"version":"5.7.1","resolved":"https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz","integrity":"sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==","funding":[{"type":"github","url":"https://github.com/sponsors/feross"},{"type":"patreon","url":"https://www.patreon.com/feross"},{"type":"consulting","url":"https://feross.org/support"}],"dependencies":{"base64-js":"^1.3.1","ieee754":"^1.1.13"}},"node_modules/buffer-crc32":{"version":"0.2.13","resolved":"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz","integrity":"sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==","engines":{"node":"*"}},"node_modules/callsites":{"version":"3.1.0","resolved":"https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz","integrity":"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==","engines":{"node":">=6"}},"node_modules/chalk":{"version":"2.4.2","resolved":"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz","integrity":"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==","dependencies":{"ansi-styles":"^3.2.1","escape-string-regexp":"^1.0.5","supports-color":"^5.3.0"},"engines":{"node":">=4"}},"node_modules/chromium-bidi":{"version":"0.5.1","resolved":"https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.1.tgz","integrity":"sha512-dcCqOgq9fHKExc2R4JZs/oKbOghWpUNFAJODS8WKRtLhp3avtIH5UDCBrutdqZdh3pARogH8y1ObXm87emwb3g==","dependencies":{"mitt":"3.0.1","urlpattern-polyfill":"9.0.0"},"peerDependencies":{"devtools-protocol":"*"}},"node_modules/cliui":{"version":"8.0.1","resolved":"https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz","integrity":"sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==","dependencies":{"string-width":"^4.2.0","strip-ansi":"^6.0.1","wrap-ansi":"^7.0.0"},"engines":{"node":">=12"}},"node_modules/color-convert":{"version":"1.9.3","resolved":"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz","integrity":"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==","dependencies":{"color-name":"1.1.3"}},"node_modules/color-name":{"version":"1.1.3","resolved":"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz","integrity":"sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="},"node_modules/cosmiconfig":{"version":"8.3.6","resolved":"https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz","integrity":"sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==","dependencies":{"import-fresh":"^3.3.0","js-yaml":"^4.1.0","parse-json":"^5.2.0","path-type":"^4.0.0"},"engines":{"node":">=14"},"funding":{"url":"https://github.com/sponsors/d-fischer"},"peerDependencies":{"typescript":">=4.9.5"},"peerDependenciesMeta":{"typescript":{"optional":true}}},"node_modules/cross-fetch":{"version":"4.0.0","resolved":"https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz","integrity":"sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==","dependencies":{"node-fetch":"^2.6.12"}},"node_modules/data-uri-to-buffer":{"version":"6.0.1","resolved":"https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz","integrity":"sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==","engines":{"node":">= 14"}},"node_modules/debug":{"version":"4.3.4","resolved":"https://registry.npmjs.org/debug/-/debug-4.3.4.tgz","integrity":"sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==","dependencies":{"ms":"2.1.2"},"engines":{"node":">=6.0"},"peerDependenciesMeta":{"supports-color":{"optional":true}}},"node_modules/degenerator":{"version":"5.0.1","resolved":"https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz","integrity":"sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==","dependencies":{"ast-types":"^0.13.4","escodegen":"^2.1.0","esprima":"^4.0.1"},"engines":{"node":">= 14"}},"node_modules/devtools-protocol":{"version":"0.0.1203626","resolved":"https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1203626.tgz","integrity":"sha512-nEzHZteIUZfGCZtTiS1fRpC8UZmsfD1SiyPvaUNvS13dvKf666OAm8YTi0+Ca3n1nLEyu49Cy4+dPWpaHFJk9g=="},"node_modules/emoji-regex":{"version":"8.0.0","resolved":"https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz","integrity":"sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="},"node_modules/end-of-stream":{"version":"1.4.4","resolved":"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz","integrity":"sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==","dependencies":{"once":"^1.4.0"}},"node_modules/error-ex":{"version":"1.3.2","resolved":"https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz","integrity":"sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==","dependencies":{"is-arrayish":"^0.2.1"}},"node_modules/escalade":{"version":"3.1.1","resolved":"https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz","integrity":"sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==","engines":{"node":">=6"}},"node_modules/escape-string-regexp":{"version":"1.0.5","resolved":"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz","integrity":"sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==","engines":{"node":">=0.8.0"}},"node_modules/escodegen":{"version":"2.1.0","resolved":"https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz","integrity":"sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==","dependencies":{"esprima":"^4.0.1","estraverse":"^5.2.0","esutils":"^2.0.2"},"bin":{"escodegen":"bin/escodegen.js","esgenerate":"bin/esgenerate.js"},"engines":{"node":">=6.0"},"optionalDependencies":{"source-map":"~0.6.1"}},"node_modules/esprima":{"version":"4.0.1","resolved":"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz","integrity":"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==","bin":{"esparse":"bin/esparse.js","esvalidate":"bin/esvalidate.js"},"engines":{"node":">=4"}},"node_modules/estraverse":{"version":"5.3.0","resolved":"https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz","integrity":"sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==","engines":{"node":">=4.0"}},"node_modules/esutils":{"version":"2.0.3","resolved":"https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz","integrity":"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==","engines":{"node":">=0.10.0"}},"node_modules/extract-zip":{"version":"2.0.1","resolved":"https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz","integrity":"sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==","dependencies":{"debug":"^4.1.1","get-stream":"^5.1.0","yauzl":"^2.10.0"},"bin":{"extract-zip":"cli.js"},"engines":{"node":">= 10.17.0"},"optionalDependencies":{"@types/yauzl":"^2.9.1"}},"node_modules/fast-fifo":{"version":"1.3.2","resolved":"https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz","integrity":"sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="},"node_modules/fd-slicer":{"version":"1.1.0","resolved":"https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz","integrity":"sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==","dependencies":{"pend":"~1.2.0"}},"node_modules/fs-extra":{"version":"8.1.0","resolved":"https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz","integrity":"sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==","dependencies":{"graceful-fs":"^4.2.0","jsonfile":"^4.0.0","universalify":"^0.1.0"},"engines":{"node":">=6 <7 || >=8"}},"node_modules/get-caller-file":{"version":"2.0.5","resolved":"https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz","integrity":"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==","engines":{"node":"6.* || 8.* || >= 10.*"}},"node_modules/get-stream":{"version":"5.2.0","resolved":"https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz","integrity":"sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==","dependencies":{"pump":"^3.0.0"},"engines":{"node":">=8"},"funding":{"url":"https://github.com/sponsors/sindresorhus"}},"node_modules/get-uri":{"version":"6.0.2","resolved":"https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz","integrity":"sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==","dependencies":{"basic-ftp":"^5.0.2","data-uri-to-buffer":"^6.0.0","debug":"^4.3.4","fs-extra":"^8.1.0"},"engines":{"node":">= 14"}},"node_modules/graceful-fs":{"version":"4.2.11","resolved":"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz","integrity":"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="},"node_modules/has-flag":{"version":"3.0.0","resolved":"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","integrity":"sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==","engines":{"node":">=4"}},"node_modules/http-proxy-agent":{"version":"7.0.0","resolved":"https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz","integrity":"sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==","dependencies":{"agent-base":"^7.1.0","debug":"^4.3.4"},"engines":{"node":">= 14"}},"node_modules/https-proxy-agent":{"version":"7.0.2","resolved":"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz","integrity":"sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==","dependencies":{"agent-base":"^7.0.2","debug":"4"},"engines":{"node":">= 14"}},"node_modules/ieee754":{"version":"1.2.1","resolved":"https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz","integrity":"sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==","funding":[{"type":"github","url":"https://github.com/sponsors/feross"},{"type":"patreon","url":"https://www.patreon.com/feross"},{"type":"consulting","url":"https://feross.org/support"}]},"node_modules/import-fresh":{"version":"3.3.0","resolved":"https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz","integrity":"sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==","dependencies":{"parent-module":"^1.0.0","resolve-from":"^4.0.0"},"engines":{"node":">=6"},"funding":{"url":"https://github.com/sponsors/sindresorhus"}},"node_modules/ip":{"version":"1.1.8","resolved":"https://registry.npmjs.org/ip/-/ip-1.1.8.tgz","integrity":"sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="},"node_modules/is-arrayish":{"version":"0.2.1","resolved":"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz","integrity":"sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="},"node_modules/is-fullwidth-code-point":{"version":"3.0.0","resolved":"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz","integrity":"sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==","engines":{"node":">=8"}},"node_modules/js-tokens":{"version":"4.0.0","resolved":"https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz","integrity":"sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="},"node_modules/js-yaml":{"version":"4.1.0","resolved":"https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz","integrity":"sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==","dependencies":{"argparse":"^2.0.1"},"bin":{"js-yaml":"bin/js-yaml.js"}},"node_modules/json-parse-even-better-errors":{"version":"2.3.1","resolved":"https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz","integrity":"sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="},"node_modules/jsonfile":{"version":"4.0.0","resolved":"https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz","integrity":"sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==","optionalDependencies":{"graceful-fs":"^4.1.6"}},"node_modules/lines-and-columns":{"version":"1.2.4","resolved":"https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz","integrity":"sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="},"node_modules/lru-cache":{"version":"7.18.3","resolved":"https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz","integrity":"sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==","engines":{"node":">=12"}},"node_modules/mitt":{"version":"3.0.1","resolved":"https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz","integrity":"sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="},"node_modules/mkdirp-classic":{"version":"0.5.3","resolved":"https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz","integrity":"sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="},"node_modules/ms":{"version":"2.1.2","resolved":"https://registry.npmjs.org/ms/-/ms-2.1.2.tgz","integrity":"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="},"node_modules/netmask":{"version":"2.0.2","resolved":"https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz","integrity":"sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==","engines":{"node":">= 0.4.0"}},"node_modules/node-fetch":{"version":"2.7.0","resolved":"https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz","integrity":"sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==","dependencies":{"whatwg-url":"^5.0.0"},"engines":{"node":"4.x || >=6.0.0"},"peerDependencies":{"encoding":"^0.1.0"},"peerDependenciesMeta":{"encoding":{"optional":true}}},"node_modules/once":{"version":"1.4.0","resolved":"https://registry.npmjs.org/once/-/once-1.4.0.tgz","integrity":"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==","dependencies":{"wrappy":"1"}},"node_modules/pac-proxy-agent":{"version":"7.0.1","resolved":"https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz","integrity":"sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==","dependencies":{"@tootallnate/quickjs-emscripten":"^0.23.0","agent-base":"^7.0.2","debug":"^4.3.4","get-uri":"^6.0.1","http-proxy-agent":"^7.0.0","https-proxy-agent":"^7.0.2","pac-resolver":"^7.0.0","socks-proxy-agent":"^8.0.2"},"engines":{"node":">= 14"}},"node_modules/pac-resolver":{"version":"7.0.0","resolved":"https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz","integrity":"sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==","dependencies":{"degenerator":"^5.0.0","ip":"^1.1.8","netmask":"^2.0.2"},"engines":{"node":">= 14"}},"node_modules/parent-module":{"version":"1.0.1","resolved":"https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz","integrity":"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==","dependencies":{"callsites":"^3.0.0"},"engines":{"node":">=6"}},"node_modules/parse-json":{"version":"5.2.0","resolved":"https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz","integrity":"sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==","dependencies":{"@babel/code-frame":"^7.0.0","error-ex":"^1.3.1","json-parse-even-better-errors":"^2.3.0","lines-and-columns":"^1.1.6"},"engines":{"node":">=8"},"funding":{"url":"https://github.com/sponsors/sindresorhus"}},"node_modules/path-type":{"version":"4.0.0","resolved":"https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz","integrity":"sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==","engines":{"node":">=8"}},"node_modules/pend":{"version":"1.2.0","resolved":"https://registry.npmjs.org/pend/-/pend-1.2.0.tgz","integrity":"sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="},"node_modules/progress":{"version":"2.0.3","resolved":"https://registry.npmjs.org/progress/-/progress-2.0.3.tgz","integrity":"sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==","engines":{"node":">=0.4.0"}},"node_modules/proxy-agent":{"version":"6.3.1","resolved":"https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz","integrity":"sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==","dependencies":{"agent-base":"^7.0.2","debug":"^4.3.4","http-proxy-agent":"^7.0.0","https-proxy-agent":"^7.0.2","lru-cache":"^7.14.1","pac-proxy-agent":"^7.0.1","proxy-from-env":"^1.1.0","socks-proxy-agent":"^8.0.2"},"engines":{"node":">= 14"}},"node_modules/proxy-from-env":{"version":"1.1.0","resolved":"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz","integrity":"sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="},"node_modules/pump":{"version":"3.0.0","resolved":"https://registry.npmjs.org/pump/-/pump-3.0.0.tgz","integrity":"sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==","dependencies":{"end-of-stream":"^1.1.0","once":"^1.3.1"}},"node_modules/puppeteer":{"version":"21.6.1","resolved":"https://registry.npmjs.org/puppeteer/-/puppeteer-21.6.1.tgz","integrity":"sha512-O+pbc61oj8ln6m8EJKncrsQFmytgRyFYERtk190PeLbJn5JKpmmynn2p1PiFrlhCitAQXLJ0MOy7F0TeyCRqBg==","hasInstallScript":true,"dependencies":{"@puppeteer/browsers":"1.9.0","cosmiconfig":"8.3.6","puppeteer-core":"21.6.1"},"bin":{"puppeteer":"lib/esm/puppeteer/node/cli.js"},"engines":{"node":">=16.13.2"}},"node_modules/puppeteer-core":{"version":"21.6.1","resolved":"https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.6.1.tgz","integrity":"sha512-0chaaK/RL9S1U3bsyR4fUeUfoj51vNnjWvXgG6DcsyMjwYNpLcAThv187i1rZCo7QhJP0wZN8plQkjNyrq2h+A==","dependencies":{"@puppeteer/browsers":"1.9.0","chromium-bidi":"0.5.1","cross-fetch":"4.0.0","debug":"4.3.4","devtools-protocol":"0.0.1203626","ws":"8.15.1"},"engines":{"node":">=16.13.2"}},"node_modules/queue-tick":{"version":"1.0.1","resolved":"https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz","integrity":"sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="},"node_modules/require-directory":{"version":"2.1.1","resolved":"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz","integrity":"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==","engines":{"node":">=0.10.0"}},"node_modules/resolve-from":{"version":"4.0.0","resolved":"https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz","integrity":"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==","engines":{"node":">=4"}},"node_modules/smart-buffer":{"version":"4.2.0","resolved":"https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz","integrity":"sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==","engines":{"node":">= 6.0.0","npm":">= 3.0.0"}},"node_modules/socks":{"version":"2.7.1","resolved":"https://registry.npmjs.org/socks/-/socks-2.7.1.tgz","integrity":"sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==","dependencies":{"ip":"^2.0.0","smart-buffer":"^4.2.0"},"engines":{"node":">= 10.13.0","npm":">= 3.0.0"}},"node_modules/socks-proxy-agent":{"version":"8.0.2","resolved":"https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz","integrity":"sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==","dependencies":{"agent-base":"^7.0.2","debug":"^4.3.4","socks":"^2.7.1"},"engines":{"node":">= 14"}},"node_modules/socks/node_modules/ip":{"version":"2.0.0","resolved":"https://registry.npmjs.org/ip/-/ip-2.0.0.tgz","integrity":"sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="},"node_modules/source-map":{"version":"0.6.1","resolved":"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz","integrity":"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==","optional":true,"engines":{"node":">=0.10.0"}},"node_modules/streamx":{"version":"2.15.6","resolved":"https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz","integrity":"sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==","dependencies":{"fast-fifo":"^1.1.0","queue-tick":"^1.0.1"}},"node_modules/string-width":{"version":"4.2.3","resolved":"https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz","integrity":"sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==","dependencies":{"emoji-regex":"^8.0.0","is-fullwidth-code-point":"^3.0.0","strip-ansi":"^6.0.1"},"engines":{"node":">=8"}},"node_modules/strip-ansi":{"version":"6.0.1","resolved":"https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz","integrity":"sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==","dependencies":{"ansi-regex":"^5.0.1"},"engines":{"node":">=8"}},"node_modules/supports-color":{"version":"5.5.0","resolved":"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz","integrity":"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==","dependencies":{"has-flag":"^3.0.0"},"engines":{"node":">=4"}},"node_modules/tar-fs":{"version":"3.0.4","resolved":"https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz","integrity":"sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==","dependencies":{"mkdirp-classic":"^0.5.2","pump":"^3.0.0","tar-stream":"^3.1.5"}},"node_modules/tar-stream":{"version":"3.1.6","resolved":"https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz","integrity":"sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==","dependencies":{"b4a":"^1.6.4","fast-fifo":"^1.2.0","streamx":"^2.15.0"}},"node_modules/through":{"version":"2.3.8","resolved":"https://registry.npmjs.org/through/-/through-2.3.8.tgz","integrity":"sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="},"node_modules/tr46":{"version":"0.0.3","resolved":"https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz","integrity":"sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="},"node_modules/tslib":{"version":"2.6.2","resolved":"https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz","integrity":"sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="},"node_modules/unbzip2-stream":{"version":"1.4.3","resolved":"https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz","integrity":"sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==","dependencies":{"buffer":"^5.2.1","through":"^2.3.8"}},"node_modules/undici-types":{"version":"5.26.5","resolved":"https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz","integrity":"sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==","optional":true},"node_modules/universalify":{"version":"0.1.2","resolved":"https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz","integrity":"sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==","engines":{"node":">= 4.0.0"}},"node_modules/urlpattern-polyfill":{"version":"9.0.0","resolved":"https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz","integrity":"sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="},"node_modules/webidl-conversions":{"version":"3.0.1","resolved":"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz","integrity":"sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="},"node_modules/whatwg-url":{"version":"5.0.0","resolved":"https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz","integrity":"sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==","dependencies":{"tr46":"~0.0.3","webidl-conversions":"^3.0.0"}},"node_modules/wrap-ansi":{"version":"7.0.0","resolved":"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz","integrity":"sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==","dependencies":{"ansi-styles":"^4.0.0","string-width":"^4.1.0","strip-ansi":"^6.0.0"},"engines":{"node":">=10"},"funding":{"url":"https://github.com/chalk/wrap-ansi?sponsor=1"}},"node_modules/wrap-ansi/node_modules/ansi-styles":{"version":"4.3.0","resolved":"https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz","integrity":"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==","dependencies":{"color-convert":"^2.0.1"},"engines":{"node":">=8"},"funding":{"url":"https://github.com/chalk/ansi-styles?sponsor=1"}},"node_modules/wrap-ansi/node_modules/color-convert":{"version":"2.0.1","resolved":"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz","integrity":"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==","dependencies":{"color-name":"~1.1.4"},"engines":{"node":">=7.0.0"}},"node_modules/wrap-ansi/node_modules/color-name":{"version":"1.1.4","resolved":"https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz","integrity":"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="},"node_modules/wrappy":{"version":"1.0.2","resolved":"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz","integrity":"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="},"node_modules/ws":{"version":"8.15.1","resolved":"https://registry.npmjs.org/ws/-/ws-8.15.1.tgz","integrity":"sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==","engines":{"node":">=10.0.0"},"peerDependencies":{"bufferutil":"^4.0.1","utf-8-validate":">=5.0.2"},"peerDependenciesMeta":{"bufferutil":{"optional":true},"utf-8-validate":{"optional":true}}},"node_modules/y18n":{"version":"5.0.8","resolved":"https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz","integrity":"sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==","engines":{"node":">=10"}},"node_modules/yargs":{"version":"17.7.2","resolved":"https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz","integrity":"sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==","dependencies":{"cliui":"^8.0.1","escalade":"^3.1.1","get-caller-file":"^2.0.5","require-directory":"^2.1.1","string-width":"^4.2.3","y18n":"^5.0.5","yargs-parser":"^21.1.1"},"engines":{"node":">=12"}},"node_modules/yargs-parser":{"version":"21.1.1","resolved":"https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz","integrity":"sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==","engines":{"node":">=12"}},"node_modules/yauzl":{"version":"2.10.0","resolved":"https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz","integrity":"sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==","dependencies":{"buffer-crc32":"~0.2.3","fd-slicer":"~1.1.0"}}}}
{
"name": "one-punch-man-download",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"puppeteer": "^21.6.1"
}
}
const path = require('path');
const puppeteer = require('puppeteer');
const fs = require('fs');
const https = require('https');
const crypto = require('crypto');
async function downloadFileChain(imgArray, destinationDir, label, index=0) {
var img=imgArray.shift()
var filename="img."+(++index).toString()+"."+path.basename(img)+path.extname(destinationDir)
const file = fs.createWriteStream(path.join(destinationDir, label, filename))
const request = https.get(img, function(response) {
response.pipe(file);
file.on("finish", () => {
file.close();
console.log(`Download "${filename}" Completed`);
if(imgArray.length)downloadFileChain(imgArray, destinationDir, label, index)
});
});
}
async function downloadWebcomic(link, label, destinationDir){
const browserHook = await puppeteer.launch({headless: 'new'});
const pageHook = await browserHook.newPage();
await pageHook.goto(link);
await pageHook.setViewport({width: 1080, height: 1024});
var imgArray=[]
console.log("### downloading webcomic ###");
try{
do{
await pageHook.waitForSelector('img');
imgArray=imgArray.concat(await pageHook.evaluate(()=>{
return Array.from(
document.querySelectorAll("img")
).map(
(x)=>x.src
);
}));
console.log("### new url [", pageHook.url(),"] ###");
console.log(" url's count:", imgArray.length)
await pageHook.waitForSelector('a[rel="next"]');
}while(await pageHook.evaluate(()=>{
var links=Array.from(document.querySelectorAll('a[rel="next"]'));
if(links.length)links[0].click();
return links.length>0;
}));
}catch(e){
console.log(e)
}
await browserHook.close();
if(!fs.existsSync(path.join(destinationDir, label)))fs.mkdirSync(path.join(destinationDir, label));
fs.writeFileSync(path.join(destinationDir, label, "descriptor.json"), JSON.stringify(imgArray));
//downloadFileChain(imgArray, destinationDir, label)
}
module.exports = {downloadWebcomic, downloadFileChain}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment