diff --git a/package-lock.json b/package-lock.json index 24bfce65e..ac487c011 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,10 @@ "name": "4chan-X", "license": "MIT", "devDependencies": { + "@rollup/pluginutils": "^5.0.2", "chrome-webstore-upload": "^0.4.4", "coffeescript": "=1.12.7", + "decaffeinate": "^8.1.3", "esprima": "^4.0.1", "font-awesome": "=4.7.0", "jshint": "^2.13.4", @@ -16,10 +18,477 @@ "lodash.template": "^4.5.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^7.1.0", - "request": "^2.88.2" + "request": "^2.88.2", + "rollup": "^3.17.2" }, "engines": { - "node": ">=0.10" + "node": ">=14.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@codemod/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@codemod/core/-/core-2.2.0.tgz", + "integrity": "sha512-H2Qa+hbHFf05xl4YpmvCoczgozQohl+cNiLlCDOmnwcSAgnurZCMRbAR7ppkXjoZ9LRosw3OyY9MTpiKhngWIg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.12", + "@babel/generator": "^7.20.14", + "@codemod/parser": "^1.4.0", + "is-ci-cli": "^2.2.0", + "recast": "^0.19.0", + "resolve": "^1.12.0" + } + }, + "node_modules/@codemod/parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@codemod/parser/-/parser-1.4.0.tgz", + "integrity": "sha512-Qi7PVgvA+RzM8Zzx0BnhH4CnWuwvD4A3/QJZGSJLELxJZwQVI3dT0o/7WLD9lLAkdz0n2Rep/REpfVdTNap/dg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.15" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@resugar/codemod-declarations-block-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@resugar/codemod-declarations-block-scope/-/codemod-declarations-block-scope-1.0.3.tgz", + "integrity": "sha512-jnoNiz/PY4zZXPaLIeiKkGX6xau83Vn2lJRffIKuTPRMRTegFD2G7MmjxgZx9htJ/H9huqKJIhhqfj4VbuaDbA==", + "dev": true + }, + "node_modules/@resugar/codemod-functions-arrow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/codemod-functions-arrow/-/codemod-functions-arrow-1.0.2.tgz", + "integrity": "sha512-6dfHOEIxZw6sc0auiDpELDRYGFfVhrJwc6xN4JxpGE9vc3Hg954svu8MhedSV7VTVSClLv4CE0RvUOD+09DAuw==", + "dev": true, + "dependencies": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "node_modules/@resugar/codemod-modules-commonjs": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@resugar/codemod-modules-commonjs/-/codemod-modules-commonjs-1.0.5.tgz", + "integrity": "sha512-A1lBMZWNEUFpmSGgTRzEaRUOWxZ/aNjil2ekCfjiITRJ3UrvsSF7PIPgv5waKzsgimtiQ0Wm+fcqFko0itZ21A==", + "dev": true, + "dependencies": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "node_modules/@resugar/codemod-objects-concise": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-concise/-/codemod-objects-concise-1.0.2.tgz", + "integrity": "sha512-Qf/zKkBzfGg1Q+2HSrssPllKYrwLxuDF/p39pz10keJtAhkYEcCbWcaHJRr5TgV9Pl9qnzzMImP9TG6KBwx7eA==", + "dev": true + }, + "node_modules/@resugar/codemod-objects-destructuring": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-destructuring/-/codemod-objects-destructuring-1.0.1.tgz", + "integrity": "sha512-xvJ1YAsV3/eSgL7BaSXRNnnz3B8f+dv+KNpi/07RF46L5ah3E8TLb2Ge/IgJB9lz/mhTDfB+pmFem9J3ndfN6w==", + "dev": true + }, + "node_modules/@resugar/codemod-objects-shorthand": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-shorthand/-/codemod-objects-shorthand-1.0.1.tgz", + "integrity": "sha512-1QZxpc2cX1DgxAWPDrp4l9VD1d+RZrqOXcXuckQmEIHr5TeSOhdBs2r3zFEbijxCTKD7fWsFgkas7LKh+KqGvQ==", + "dev": true, + "dependencies": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "node_modules/@resugar/codemod-strings-template": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-strings-template/-/codemod-strings-template-1.0.1.tgz", + "integrity": "sha512-ruVwOE67lmFGiyVr8I60l5lEDi0xKk1FYXyTGKMZdiiM2+W+L/qquOEqZmxOPA/xDNc5JG9VZXQ+4TZH9HqYxw==", + "dev": true + }, + "node_modules/@resugar/helper-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/helper-comments/-/helper-comments-1.0.2.tgz", + "integrity": "sha512-AXXKDyRcTN3naXhfvu/2mWX5OTc4RqlJIERCfnFs+M2VrawqoZU+oFS3L4ZsdP+/4rcofMCs9CMsYKc4S40PPQ==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@sindresorhus/is": { @@ -55,6 +524,12 @@ "@types/responselike": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.0", "dev": true, @@ -81,6 +556,27 @@ "@types/node": "*" } }, + "node_modules/add-variable-declarations": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/add-variable-declarations/-/add-variable-declarations-4.0.7.tgz", + "integrity": "sha512-SMjwvYGKrpk8CIN5K4LYpR54k9XpNmUdZLXOCvQvSvYnYTsvprouAuktct+ysSn1v2YVjQy4Du6JxwGhRV7Y1g==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.1", + "@codemod/parser": "^1.0.3", + "magic-string": "^0.25.3" + } + }, + "node_modules/add-variable-declarations/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/ajv": { "version": "6.12.6", "dev": true, @@ -96,6 +592,24 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "dev": true, @@ -117,11 +631,29 @@ "node": ">=0.8" } }, + "node_modules/ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "dev": true, "license": "MIT" }, + "node_modules/automatic-semicolon-insertion": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/automatic-semicolon-insertion/-/automatic-semicolon-insertion-3.0.6.tgz", + "integrity": "sha512-M/+n8XFfrGzjgjXm+zzaCEy9nqiM+YkxQUN/P8Kfdu2i9FPvix7ece4B9kBN8Ca76UYiBJRQ+5u9DlLa7ownsA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.4" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "dev": true, @@ -157,6 +689,34 @@ "concat-map": "0.0.1" } }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/cacheable-lookup": { "version": "5.0.4", "dev": true, @@ -182,11 +742,41 @@ "node": ">=8" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/caseless": { "version": "0.12.0", "dev": true, "license": "Apache-2.0" }, + "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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chrome-webstore-upload": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/chrome-webstore-upload/-/chrome-webstore-upload-0.4.4.tgz", @@ -199,6 +789,12 @@ "node": ">=10.19.0" } }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "node_modules/cli": { "version": "1.0.1", "dev": true, @@ -219,6 +815,12 @@ "mimic-response": "^1.0.0" } }, + "node_modules/coffee-lex": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/coffee-lex/-/coffee-lex-9.3.2.tgz", + "integrity": "sha512-lft4PwdLuqh3q50uR+yU5rpBKif1asJsXFPQ8AHDLs9woru6ENJ7jUVLGHk8cuCktvPFxaIzNeES9bNuSd89RA==", + "dev": true + }, "node_modules/coffeescript": { "version": "1.12.7", "dev": true, @@ -231,6 +833,21 @@ "node": ">=0.8.0" } }, + "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==", + "dev": true, + "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==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "dev": true, @@ -254,11 +871,31 @@ "date-now": "^0.1.4" } }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "node_modules/core-util-is": { "version": "1.0.2", "dev": true, "license": "MIT" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/dashdash": { "version": "1.14.1", "dev": true, @@ -274,6 +911,102 @@ "version": "0.1.4", "dev": true }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decaffeinate": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/decaffeinate/-/decaffeinate-8.1.3.tgz", + "integrity": "sha512-5IOmQ5Ym7tlurUeSJWDwCncbdl9w5SE+XnZXzONY5ZoVDjetlnJIs3cvOKzJNbtSJJo8GNteH3jBa274mkDhpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.6", + "@codemod/core": "^2.0.1", + "@codemod/parser": "^1.2.1", + "@resugar/codemod-declarations-block-scope": "^1.0.3", + "@resugar/codemod-functions-arrow": "^1.0.2", + "@resugar/codemod-modules-commonjs": "^1.0.5", + "@resugar/codemod-objects-concise": "^1.0.2", + "@resugar/codemod-objects-destructuring": "^1.0.1", + "@resugar/codemod-objects-shorthand": "^1.0.1", + "@resugar/codemod-strings-template": "^1.0.1", + "add-variable-declarations": "^4.0.7", + "automatic-semicolon-insertion": "^3.0.2", + "coffee-lex": "^9.3.2", + "decaffeinate-coffeescript": "1.12.7-patch.4", + "decaffeinate-coffeescript2": "2.2.1-patch.6", + "decaffeinate-parser": "^23.0.1", + "detect-indent": "^4.0.0", + "is-ci-cli": "^2.2.0", + "lines-and-columns": "^2.0.3", + "magic-string": "^0.26.2", + "mz": "^2.7.0", + "tslib": "^2.4.0" + }, + "bin": { + "decaffeinate": "bin/decaffeinate" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/decaffeinate-coffeescript": { + "version": "1.12.7-patch.4", + "resolved": "https://registry.npmjs.org/decaffeinate-coffeescript/-/decaffeinate-coffeescript-1.12.7-patch.4.tgz", + "integrity": "sha512-VLVyuAahCJMskqpbgcyg7MrxIVeooPDWoU8atvotH+OgLdIIJlKzFFHZoJCTaMdSxqtbCkli7dFzCeqnTixp5Q==", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/decaffeinate-coffeescript2": { + "version": "2.2.1-patch.6", + "resolved": "https://registry.npmjs.org/decaffeinate-coffeescript2/-/decaffeinate-coffeescript2-2.2.1-patch.6.tgz", + "integrity": "sha512-R9QhWXDmRGs/uSPliv5n3FALNQwHYlkf6lhP5ZZ0QQ8NqZZJNfqLuiiSwe2t2/o6hHmIEkRSfQL/Ex1SEhSAHg==", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/decaffeinate-parser": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/decaffeinate-parser/-/decaffeinate-parser-23.0.1.tgz", + "integrity": "sha512-H0fuEdP2GWDhFIg4Ejlx2Loz6/yqEvWR3i2+mU8TNJkkJ9txd/4TEIdLcdMmBd9vw3eeBs0HHH+Yj8QbRO5aZQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.4", + "@codemod/parser": "^1.2.1", + "coffee-lex": "^9.3.1", + "decaffeinate-coffeescript": "^1.12.7-patch.4", + "decaffeinate-coffeescript2": "^2.2.1-patch.6", + "lines-and-columns": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/decompress-response": { "version": "6.0.0", "dev": true, @@ -315,6 +1048,18 @@ "node": ">=0.4.0" } }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dom-serializer": { "version": "0.2.2", "dev": true, @@ -372,6 +1117,12 @@ "safer-buffer": "^2.1.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.308", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz", + "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==", + "dev": true + }, "node_modules/end-of-stream": { "version": "1.4.4", "dev": true, @@ -385,6 +1136,24 @@ "dev": true, "license": "BSD-like" }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -398,6 +1167,12 @@ "node": ">=4" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/exit": { "version": "0.1.2", "dev": true, @@ -462,6 +1237,35 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-stream": { "version": "5.2.0", "dev": true, @@ -503,6 +1307,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/got": { "version": "11.5.2", "dev": true, @@ -548,6 +1361,27 @@ "node": ">=6" } }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/htmlparser2": { "version": "3.8.3", "dev": true, @@ -610,6 +1444,59 @@ "dev": true, "license": "ISC" }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci-cli": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-ci-cli/-/is-ci-cli-2.2.0.tgz", + "integrity": "sha512-Xg97ZGDzU0a9gPTAli+TNegMk+PI3x0KLRYCfBa2LAboF1YyuA03Gwdc9vpu3VRNU+lFFNkvXnIQuJ0PgB120Q==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "is-ci": "^2.0.0" + }, + "bin": { + "is-ci": "cli.js", + "is-ci-cli": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "dev": true, @@ -620,16 +1507,40 @@ "dev": true, "license": "MIT" }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "node_modules/isstream": { "version": "0.1.2", "dev": true, "license": "MIT" }, + "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==", + "dev": true + }, "node_modules/jsbn": { "version": "0.1.1", "dev": true, "license": "MIT" }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/jshint": { "version": "2.13.4", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz", @@ -667,6 +1578,18 @@ "dev": true, "license": "ISC" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsprim": { "version": "1.4.1", "dev": true, @@ -736,6 +1659,15 @@ "immediate": "~3.0.5" } }, + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/linkify-it": { "version": "3.0.2", "dev": true, @@ -781,6 +1713,27 @@ "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -857,6 +1810,29 @@ "node": "*" } }, + "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==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, "node_modules/normalize-url": { "version": "4.5.0", "dev": true, @@ -873,6 +1849,15 @@ "node": "*" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/once": { "version": "1.4.0", "dev": true, @@ -902,11 +1887,53 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "node_modules/performance-now": { "version": "2.1.0", "dev": true, "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -964,6 +1991,33 @@ "string_decoder": "~0.10.x" } }, + "node_modules/recast": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.19.1.tgz", + "integrity": "sha512-8FCjrBxjeEU2O6I+2hyHyBFH1siJbMBLwIRvVr1T3FD2cL754sOaJDsJ/8h3xYltasbJ8jqWRIhMuDGBSiSbjw==", + "dev": true, + "dependencies": { + "ast-types": "0.13.3", + "esprima": "~4.0.0", + "private": "^0.1.8", + "source-map": "~0.6.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -996,6 +2050,23 @@ "node": ">= 6" } }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-alpn": { "version": "1.0.0", "dev": true, @@ -1009,6 +2080,22 @@ "lowercase-keys": "^2.0.0" } }, + "node_modules/rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "dev": true, @@ -1019,12 +2106,58 @@ "dev": true, "license": "MIT" }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, "node_modules/sshpk": { "version": "1.16.1", "dev": true, @@ -1065,6 +2198,60 @@ "node": ">=0.8.0" } }, + "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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "dev": true, @@ -1077,6 +2264,12 @@ "node": ">=0.8" } }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "dev": true, @@ -1098,6 +2291,32 @@ "dev": true, "license": "MIT" }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "dev": true, @@ -1132,13 +2351,403 @@ "extsprintf": "^1.2.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "dev": true, "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", + "dev": true + }, + "@babel/core": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", + "dev": true, + "requires": { + "@babel/types": "^7.21.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", + "dev": true + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.21.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@codemod/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@codemod/core/-/core-2.2.0.tgz", + "integrity": "sha512-H2Qa+hbHFf05xl4YpmvCoczgozQohl+cNiLlCDOmnwcSAgnurZCMRbAR7ppkXjoZ9LRosw3OyY9MTpiKhngWIg==", + "dev": true, + "requires": { + "@babel/core": "^7.20.12", + "@babel/generator": "^7.20.14", + "@codemod/parser": "^1.4.0", + "is-ci-cli": "^2.2.0", + "recast": "^0.19.0", + "resolve": "^1.12.0" + } + }, + "@codemod/parser": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@codemod/parser/-/parser-1.4.0.tgz", + "integrity": "sha512-Qi7PVgvA+RzM8Zzx0BnhH4CnWuwvD4A3/QJZGSJLELxJZwQVI3dT0o/7WLD9lLAkdz0n2Rep/REpfVdTNap/dg==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.15" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@resugar/codemod-declarations-block-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@resugar/codemod-declarations-block-scope/-/codemod-declarations-block-scope-1.0.3.tgz", + "integrity": "sha512-jnoNiz/PY4zZXPaLIeiKkGX6xau83Vn2lJRffIKuTPRMRTegFD2G7MmjxgZx9htJ/H9huqKJIhhqfj4VbuaDbA==", + "dev": true + }, + "@resugar/codemod-functions-arrow": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/codemod-functions-arrow/-/codemod-functions-arrow-1.0.2.tgz", + "integrity": "sha512-6dfHOEIxZw6sc0auiDpELDRYGFfVhrJwc6xN4JxpGE9vc3Hg954svu8MhedSV7VTVSClLv4CE0RvUOD+09DAuw==", + "dev": true, + "requires": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "@resugar/codemod-modules-commonjs": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@resugar/codemod-modules-commonjs/-/codemod-modules-commonjs-1.0.5.tgz", + "integrity": "sha512-A1lBMZWNEUFpmSGgTRzEaRUOWxZ/aNjil2ekCfjiITRJ3UrvsSF7PIPgv5waKzsgimtiQ0Wm+fcqFko0itZ21A==", + "dev": true, + "requires": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "@resugar/codemod-objects-concise": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-concise/-/codemod-objects-concise-1.0.2.tgz", + "integrity": "sha512-Qf/zKkBzfGg1Q+2HSrssPllKYrwLxuDF/p39pz10keJtAhkYEcCbWcaHJRr5TgV9Pl9qnzzMImP9TG6KBwx7eA==", + "dev": true + }, + "@resugar/codemod-objects-destructuring": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-destructuring/-/codemod-objects-destructuring-1.0.1.tgz", + "integrity": "sha512-xvJ1YAsV3/eSgL7BaSXRNnnz3B8f+dv+KNpi/07RF46L5ah3E8TLb2Ge/IgJB9lz/mhTDfB+pmFem9J3ndfN6w==", + "dev": true + }, + "@resugar/codemod-objects-shorthand": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-objects-shorthand/-/codemod-objects-shorthand-1.0.1.tgz", + "integrity": "sha512-1QZxpc2cX1DgxAWPDrp4l9VD1d+RZrqOXcXuckQmEIHr5TeSOhdBs2r3zFEbijxCTKD7fWsFgkas7LKh+KqGvQ==", + "dev": true, + "requires": { + "@resugar/helper-comments": "^1.0.0" + } + }, + "@resugar/codemod-strings-template": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@resugar/codemod-strings-template/-/codemod-strings-template-1.0.1.tgz", + "integrity": "sha512-ruVwOE67lmFGiyVr8I60l5lEDi0xKk1FYXyTGKMZdiiM2+W+L/qquOEqZmxOPA/xDNc5JG9VZXQ+4TZH9HqYxw==", + "dev": true + }, + "@resugar/helper-comments": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@resugar/helper-comments/-/helper-comments-1.0.2.tgz", + "integrity": "sha512-AXXKDyRcTN3naXhfvu/2mWX5OTc4RqlJIERCfnFs+M2VrawqoZU+oFS3L4ZsdP+/4rcofMCs9CMsYKc4S40PPQ==", + "dev": true + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, "@sindresorhus/is": { "version": "3.1.2", "dev": true @@ -1160,6 +2769,12 @@ "@types/responselike": "*" } }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, "@types/http-cache-semantics": { "version": "4.0.0", "dev": true @@ -1182,6 +2797,29 @@ "@types/node": "*" } }, + "add-variable-declarations": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/add-variable-declarations/-/add-variable-declarations-4.0.7.tgz", + "integrity": "sha512-SMjwvYGKrpk8CIN5K4LYpR54k9XpNmUdZLXOCvQvSvYnYTsvprouAuktct+ysSn1v2YVjQy4Du6JxwGhRV7Y1g==", + "dev": true, + "requires": { + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.1", + "@codemod/parser": "^1.0.3", + "magic-string": "^0.25.3" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, "ajv": { "version": "6.12.6", "dev": true, @@ -1192,6 +2830,21 @@ "uri-js": "^4.2.2" } }, + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, "argparse": { "version": "2.0.1", "dev": true @@ -1207,10 +2860,25 @@ "version": "1.0.0", "dev": true }, + "ast-types": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.3.tgz", + "integrity": "sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA==", + "dev": true + }, "asynckit": { "version": "0.4.0", "dev": true }, + "automatic-semicolon-insertion": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/automatic-semicolon-insertion/-/automatic-semicolon-insertion-3.0.6.tgz", + "integrity": "sha512-M/+n8XFfrGzjgjXm+zzaCEy9nqiM+YkxQUN/P8Kfdu2i9FPvix7ece4B9kBN8Ca76UYiBJRQ+5u9DlLa7ownsA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.4" + } + }, "aws-sign2": { "version": "0.7.0", "dev": true @@ -1238,6 +2906,18 @@ "concat-map": "0.0.1" } }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, "cacheable-lookup": { "version": "5.0.4", "dev": true @@ -1255,10 +2935,27 @@ "responselike": "^2.0.0" } }, + "caniuse-lite": { + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", + "dev": true + }, "caseless": { "version": "0.12.0", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "chrome-webstore-upload": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/chrome-webstore-upload/-/chrome-webstore-upload-0.4.4.tgz", @@ -1268,6 +2965,12 @@ "got": "11.5.2" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "cli": { "version": "1.0.1", "dev": true, @@ -1283,10 +2986,31 @@ "mimic-response": "^1.0.0" } }, + "coffee-lex": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/coffee-lex/-/coffee-lex-9.3.2.tgz", + "integrity": "sha512-lft4PwdLuqh3q50uR+yU5rpBKif1asJsXFPQ8AHDLs9woru6ENJ7jUVLGHk8cuCktvPFxaIzNeES9bNuSd89RA==", + "dev": true + }, "coffeescript": { "version": "1.12.7", "dev": true }, + "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==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "dev": true, @@ -1305,10 +3029,27 @@ "date-now": "^0.1.4" } }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "dev": true }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "dashdash": { "version": "1.14.1", "dev": true, @@ -1320,6 +3061,71 @@ "version": "0.1.4", "dev": true }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decaffeinate": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/decaffeinate/-/decaffeinate-8.1.3.tgz", + "integrity": "sha512-5IOmQ5Ym7tlurUeSJWDwCncbdl9w5SE+XnZXzONY5ZoVDjetlnJIs3cvOKzJNbtSJJo8GNteH3jBa274mkDhpw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.6", + "@codemod/core": "^2.0.1", + "@codemod/parser": "^1.2.1", + "@resugar/codemod-declarations-block-scope": "^1.0.3", + "@resugar/codemod-functions-arrow": "^1.0.2", + "@resugar/codemod-modules-commonjs": "^1.0.5", + "@resugar/codemod-objects-concise": "^1.0.2", + "@resugar/codemod-objects-destructuring": "^1.0.1", + "@resugar/codemod-objects-shorthand": "^1.0.1", + "@resugar/codemod-strings-template": "^1.0.1", + "add-variable-declarations": "^4.0.7", + "automatic-semicolon-insertion": "^3.0.2", + "coffee-lex": "^9.3.2", + "decaffeinate-coffeescript": "1.12.7-patch.4", + "decaffeinate-coffeescript2": "2.2.1-patch.6", + "decaffeinate-parser": "^23.0.1", + "detect-indent": "^4.0.0", + "is-ci-cli": "^2.2.0", + "lines-and-columns": "^2.0.3", + "magic-string": "^0.26.2", + "mz": "^2.7.0", + "tslib": "^2.4.0" + } + }, + "decaffeinate-coffeescript": { + "version": "1.12.7-patch.4", + "resolved": "https://registry.npmjs.org/decaffeinate-coffeescript/-/decaffeinate-coffeescript-1.12.7-patch.4.tgz", + "integrity": "sha512-VLVyuAahCJMskqpbgcyg7MrxIVeooPDWoU8atvotH+OgLdIIJlKzFFHZoJCTaMdSxqtbCkli7dFzCeqnTixp5Q==", + "dev": true + }, + "decaffeinate-coffeescript2": { + "version": "2.2.1-patch.6", + "resolved": "https://registry.npmjs.org/decaffeinate-coffeescript2/-/decaffeinate-coffeescript2-2.2.1-patch.6.tgz", + "integrity": "sha512-R9QhWXDmRGs/uSPliv5n3FALNQwHYlkf6lhP5ZZ0QQ8NqZZJNfqLuiiSwe2t2/o6hHmIEkRSfQL/Ex1SEhSAHg==", + "dev": true + }, + "decaffeinate-parser": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/decaffeinate-parser/-/decaffeinate-parser-23.0.1.tgz", + "integrity": "sha512-H0fuEdP2GWDhFIg4Ejlx2Loz6/yqEvWR3i2+mU8TNJkkJ9txd/4TEIdLcdMmBd9vw3eeBs0HHH+Yj8QbRO5aZQ==", + "dev": true, + "requires": { + "@babel/types": "^7.18.4", + "@codemod/parser": "^1.2.1", + "coffee-lex": "^9.3.1", + "decaffeinate-coffeescript": "^1.12.7-patch.4", + "decaffeinate-coffeescript2": "^2.2.1-patch.6", + "lines-and-columns": "^2.0.3" + } + }, "decompress-response": { "version": "6.0.0", "dev": true, @@ -1341,6 +3147,15 @@ "version": "1.0.0", "dev": true }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, "dom-serializer": { "version": "0.2.2", "dev": true, @@ -1386,6 +3201,12 @@ "safer-buffer": "^2.1.0" } }, + "electron-to-chromium": { + "version": "1.4.308", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.308.tgz", + "integrity": "sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==", + "dev": true + }, "end-of-stream": { "version": "1.4.4", "dev": true, @@ -1397,12 +3218,30 @@ "version": "1.0.0", "dev": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "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==", + "dev": true + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "exit": { "version": "0.1.2", "dev": true @@ -1444,6 +3283,25 @@ "version": "1.0.0", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, "get-stream": { "version": "5.2.0", "dev": true, @@ -1470,6 +3328,12 @@ "path-is-absolute": "^1.0.0" } }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, "got": { "version": "11.5.2", "dev": true, @@ -1499,6 +3363,21 @@ "har-schema": "^2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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==", + "dev": true + }, "htmlparser2": { "version": "3.8.3", "dev": true, @@ -1547,6 +3426,40 @@ "version": "2.0.4", "dev": true }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-ci-cli": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-ci-cli/-/is-ci-cli-2.2.0.tgz", + "integrity": "sha512-Xg97ZGDzU0a9gPTAli+TNegMk+PI3x0KLRYCfBa2LAboF1YyuA03Gwdc9vpu3VRNU+lFFNkvXnIQuJ0PgB120Q==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "is-ci": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, "is-typedarray": { "version": "1.0.0", "dev": true @@ -1555,14 +3468,32 @@ "version": "0.0.1", "dev": true }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "isstream": { "version": "0.1.2", "dev": true }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "jsbn": { "version": "0.1.1", "dev": true }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "jshint": { "version": "2.13.4", "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.13.4.tgz", @@ -1594,6 +3525,12 @@ "version": "5.0.1", "dev": true }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, "jsprim": { "version": "1.4.1", "dev": true, @@ -1656,6 +3593,12 @@ "immediate": "~3.0.5" } }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, "linkify-it": { "version": "3.0.2", "dev": true, @@ -1694,6 +3637,24 @@ "version": "2.0.0", "dev": true }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -1746,6 +3707,29 @@ "brace-expansion": "^1.1.7" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, "normalize-url": { "version": "4.5.0", "dev": true @@ -1754,6 +3738,12 @@ "version": "0.9.0", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "once": { "version": "1.4.0", "dev": true, @@ -1773,10 +3763,40 @@ "version": "1.0.1", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, "performance-now": { "version": "2.1.0", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "dev": true @@ -1815,6 +3835,27 @@ "string_decoder": "~0.10.x" } }, + "recast": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.19.1.tgz", + "integrity": "sha512-8FCjrBxjeEU2O6I+2hyHyBFH1siJbMBLwIRvVr1T3FD2cL754sOaJDsJ/8h3xYltasbJ8jqWRIhMuDGBSiSbjw==", + "dev": true, + "requires": { + "ast-types": "0.13.3", + "esprima": "~4.0.0", + "private": "^0.1.8", + "source-map": "~0.6.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -1843,6 +3884,17 @@ "uuid": "^3.3.2" } }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "resolve-alpn": { "version": "1.0.0", "dev": true @@ -1854,6 +3906,15 @@ "lowercase-keys": "^2.0.0" } }, + "rollup": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.17.2.tgz", + "integrity": "sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, "safe-buffer": { "version": "5.1.2", "dev": true @@ -1862,12 +3923,45 @@ "version": "2.1.2", "dev": true }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "sshpk": { "version": "1.16.1", "dev": true, @@ -1891,6 +3985,45 @@ "version": "1.0.4", "dev": true }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, "tough-cookie": { "version": "2.5.0", "dev": true, @@ -1899,6 +4032,12 @@ "punycode": "^2.1.1" } }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "dev": true, @@ -1914,6 +4053,16 @@ "version": "1.0.6", "dev": true }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "dev": true, @@ -1938,9 +4087,24 @@ "extsprintf": "^1.2.0" } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "wrappy": { "version": "1.0.2", "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } } diff --git a/package.json b/package.json index 7b6c271a9..d28238ca1 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,7 @@ "https://www.sushigirl.us/*", "https://tvch.moe/*" ], - "matches_extra": [ - ], + "matches_extra": [], "exclude_matches": [ "*://www.4chan.org/advertise", "*://www.4chan.org/advertise?*", @@ -102,8 +101,10 @@ } }, "devDependencies": { + "@rollup/pluginutils": "^5.0.2", "chrome-webstore-upload": "^0.4.4", "coffeescript": "=1.12.7", + "decaffeinate": "^8.1.3", "esprima": "^4.0.1", "font-awesome": "=4.7.0", "jshint": "^2.13.4", @@ -111,7 +112,8 @@ "lodash.template": "^4.5.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^7.1.0", - "request": "^2.88.2" + "request": "^2.88.2", + "rollup": "^3.17.2" }, "repository": { "type": "git", @@ -129,6 +131,7 @@ "license": "MIT", "readmeFilename": "README.md", "engines": { - "node": ">=0.10" - } + "node": ">=14.0.0" + }, + "type": "module" } diff --git a/src/Archive/Redirect.coffee b/src/Archive/Redirect.coffee index cfdbc84f9..1663c24c4 100644 --- a/src/Archive/Redirect.coffee +++ b/src/Archive/Redirect.coffee @@ -1,11 +1,8 @@ +import archives from './archives.js'; + Redirect = - archives: - ```<%= - JSON.stringify(readJSON('archives.json'), null, 2) - .replace(/\n {2,}(?!{)/g, ' ') - .replace(/\n/g, '\n ') - .replace(/`/g, '\\`') - %>``` + # TODO check + archives: archives init: -> @selectArchives() diff --git a/src/Archive/archives.json b/src/Archive/archives.js similarity index 98% rename from src/Archive/archives.json rename to src/Archive/archives.js index 6cade6eb8..23a7cd49a 100644 --- a/src/Archive/archives.json +++ b/src/Archive/archives.js @@ -1,4 +1,4 @@ -[{ +const archives = [{ "uid": 3, "name": "4plebs", "domain": "archive.4plebs.org", @@ -99,4 +99,6 @@ "boards": ["bant", "c", "con", "e", "i", "n", "news", "out", "p", "pw", "qst", "toy", "vip", "vp", "vt", "w", "wg", "wsr"], "files": ["bant", "c", "e", "i", "n", "news", "out", "p", "pw", "qst", "toy", "vip", "vp", "vt", "w", "wg", "wsr"], "reports": true -}] +}]; + +export default archives; diff --git a/src/Filtering/Filter.coffee b/src/Filtering/Filter.coffee index bcbd0e360..e5713e24d 100644 --- a/src/Filtering/Filter.coffee +++ b/src/Filtering/Filter.coffee @@ -290,7 +290,7 @@ Filter = $('span', notice.el).textContent = "#{notice.filters.length} MD5s filtered." else msg = $.el 'div', - `<%= html('MD5 filtered. [show] [undo]') %>` + `{innerHTML: "MD5 filtered. [show] [undo]"}` notice = Filter.quickFilterMD5.notice = new Notice 'info', msg, undefined, -> delete Filter.quickFilterMD5.notice notice.filters = [filter] diff --git a/src/Filtering/ThreadHiding.coffee b/src/Filtering/ThreadHiding.coffee index bee113adf..63b303a8f 100644 --- a/src/Filtering/ThreadHiding.coffee +++ b/src/Filtering/ThreadHiding.coffee @@ -139,7 +139,7 @@ ThreadHiding = a = $.el 'a', className: "#{type}-thread-button" href: 'javascript:;' - $.extend a, `<%= html('') %>` + $.extend a, `{innerHTML: ""}` a.dataset.fullID = thread.fullID $.on a, 'click', ThreadHiding.toggle a diff --git a/src/General/Header.coffee b/src/General/Header.coffee index be9f7b804..7da629693 100644 --- a/src/General/Header.coffee +++ b/src/General/Header.coffee @@ -11,7 +11,7 @@ Header = menuButton = $.el 'span', className: 'menu-button' - $.extend menuButton, `<%= html('') %>` + $.extend menuButton, `{innerHTML: ""}` box = UI.checkbox @@ -142,16 +142,7 @@ Header = setBoardList: -> Header.boardList = boardList = $.el 'span', id: 'board-list' - $.extend boardList, `<%= html( - '' + - '' - ) %>` + $.extend boardList, `{innerHTML: ""}` btn = $('.hide-board-list-button', boardList) $.on btn, 'click', Header.toggleBoardList @@ -546,12 +537,9 @@ Header = # but it'll still work if status is 'default'. return + # TODO meta el = $.el 'span', - `<%= html( - meta.name + ' needs your permission to show desktop notifications. ' + - '[FAQ]
' + - ' or ' - ) %>` + `{innerHTML: "meta.name needs your permission to show desktop notifications. [FAQ]
or "}` [authorize, disable] = $$ 'button', el $.on authorize, 'click', -> Notification.requestPermission (status) -> diff --git a/src/General/Index.coffee b/src/General/Index.coffee index 81ea11648..52cee8cfa 100644 --- a/src/General/Index.coffee +++ b/src/General/Index.coffee @@ -1,3 +1,6 @@ +import NavLinksPage from './Index/NavLinks.html' +import PageListPage from './Index/PageList.html' + Index = showHiddenThreads: false changed: {} @@ -85,7 +88,7 @@ Index = # Navigation links at top of index @navLinks = $.el 'div', className: 'navLinks json-index' - $.extend @navLinks, `<%= readHTML('NavLinks.html') %>` + $.extend @navLinks, `{innerHTML: NavLinksPage}` $('.cataloglink a', @navLinks).href = CatalogLinks.catalog() $('.archlistlink', @navLinks).hidden = true unless BoardConfig.isArchived(g.BOARD.ID) $.on $('#index-last-refresh a', @navLinks), 'click', @cb.refreshFront @@ -134,7 +137,7 @@ Index = # Page list @pagelist = $.el 'div', className: 'pagelist json-index' - $.extend @pagelist, `<%= readHTML('PageList.html') %>` + $.extend @pagelist, `{innerHTML: PageList}` $('.cataloglink a', @pagelist).href = CatalogLinks.catalog() $.on @pagelist, 'click', @cb.pageNav @@ -188,7 +191,7 @@ Index = threadIDs = Index.threadsOnPage pageNum Index.buildStructure threadIDs - + endNotice: do -> notify = false reset = -> notify = false @@ -206,7 +209,7 @@ Index = el: $.el 'a', href: 'javascript:;' className: 'has-shortcut-text' - , `<%= html('Shift+click') %>` + , `{innerHTML: "Shift+click"}` order: 20 open: ({thread}) -> return false if Conf['Index Mode'] isnt 'catalog' diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee index e7a01fba2..181c8e969 100644 --- a/src/General/Settings.coffee +++ b/src/General/Settings.coffee @@ -1,3 +1,10 @@ +import SettingsPage from './Settings/Settings.html' +import FilterGuidePage from './Settings/Filter-guide.html' +import SaucePage from './Settings/Sauce.html' +import AdvancedPage from './Settings/Advanced.html' +import KeybindsPage from './Settings/Keybinds.html' +import FilterSelectPage from './Settings/Filter-select.html' + Settings = init: -> # 4chan X settings link @@ -43,8 +50,7 @@ Settings = Settings.dialog = dialog = $.el 'div', id: 'overlay' - , - `<%= readHTML('Settings.html') %>` + , `{ innerHTML: SettingsPage }` $.on $('.export', dialog), 'click', Settings.export $.on $('.import', dialog), 'click', Settings.import @@ -112,16 +118,16 @@ Settings = $.onExists doc, '.adg-rects > .desktop', (ad) -> $.onExists ad, 'iframe', -> url = Redirect.to 'thread', {boardID: 'qa', threadID: 362590} cb $.el 'li', - `<%= html( + `{ innerHTML: 'To protect yourself from malicious ads,' + ' you should block ads on 4chan.' - ) %>` + }` main: (section) -> warnings = $.el 'fieldset', hidden: true , - `<%= html('Warnings') %>` + `{innerHTML: 'Warnings'}` addWarning = (item) -> $.add $('ul', warnings), item warnings.hidden = false @@ -136,7 +142,7 @@ Settings = for key, arr of obj when arr instanceof Array description = arr[1] div = $.el 'div', - `<%= html(': ${description}') %>` + `{innerHTML: ': ${description}'}` div.dataset.name = key input = $ 'input', div $.on input, 'change', $.cb.checked @@ -154,11 +160,11 @@ Settings = for keyFS, obj of Config.main fs = $.el 'fieldset', - `<%= html('${keyFS}') %>` + `{innerHTML: '${keyFS}'}` addCheckboxes fs, obj if keyFS is 'Posting and Captchas' $.add fs, $.el 'p', - `<%= html('For more info on captcha options and issues, see the captcha FAQ.') %>` + `{innerHTML: 'For more info on captcha options and issues, see the captcha FAQ.'}` $.add section, fs addCheckboxes $('div[data-name="JSON Index"] > .suboption-list', section), Config.Index @@ -177,7 +183,7 @@ Settings = return div = $.el 'div', - `<%= html(': Clear manually-hidden threads and posts on all boards. Reload the page to apply.') %>` + `{innerHTML: ': Clear manually-hidden threads and posts on all boards. Reload the page to apply.'}` button = $ 'button', div $.get {hiddenThreads: $.dict(), hiddenPosts: $.dict()}, ({hiddenThreads, hiddenPosts}) -> hiddenNum = 0 @@ -565,7 +571,7 @@ Settings = window.location.reload() filter: (section) -> - $.extend section, `<%= readHTML('Filter-select.html') %>` + $.extend section, `{ innerHTML: FilterSelectPage }` select = $ 'select', section $.on select, 'change', Settings.selectFilter Settings.selectFilter.call select @@ -585,12 +591,12 @@ Settings = $.add div, ta return filterTypes = Object.keys(Config.filter).filter((x) -> x isnt 'general').map (x, i) -> - `<%= html('?{i}{,}${x}') %>` - $.extend div, `<%= readHTML('Filter-guide.html') %>` + `{innerHTML: '?{i}{,}${x}'}` + $.extend div, `{ innerHTML: FilterGuidePage }` $('.warning', div).hidden = Conf['Filter'] sauce: (section) -> - $.extend section, `<%= readHTML('Sauce.html') %>` + $.extend section, `{ innerHTML: SaucePage }` $('.warning', section).hidden = Conf['Sauce'] ta = $ 'textarea', section $.get 'sauces', Conf['sauces'], (item) -> @@ -599,7 +605,7 @@ Settings = $.on ta, 'change', $.cb.value advanced: (section) -> - $.extend section, `<%= readHTML('Advanced.html') %>` + $.extend section, `{ innerHTML: AdvancedPage }` warning.hidden = Conf[warning.dataset.feature] for warning in $$ '.warning', section inputs = $.dict() @@ -748,7 +754,7 @@ Settings = textContent: archive[1] } - $.extend td, `<%= html('') %>` + $.extend td, `{innerHTML: ''}` select = td.firstElementChild if not (select.disabled = length is 1) # XXX GM can't into datasets @@ -811,7 +817,7 @@ Settings = $.cb.checked.call @ keybinds: (section) -> - $.extend section, `<%= readHTML('Keybinds.html') %>` + $.extend section, `{ innerHTML: KeybindsPage }` $('.warning', section).hidden = Conf['Keybinds'] tbody = $ 'tbody', section @@ -819,7 +825,7 @@ Settings = inputs = $.dict() for key, arr of Config.hotkeys tr = $.el 'tr', - `<%= html('${arr[1]}') %>` + `{innerHTML: '${arr[1]}'}` input = $ 'input', tr input.name = key input.spellcheck = false diff --git a/src/Images/Gallery.coffee b/src/Images/Gallery.coffee index 2867ddaed..4127f6dce 100644 --- a/src/Images/Gallery.coffee +++ b/src/Images/Gallery.coffee @@ -1,3 +1,5 @@ +import galleryPage from './Gallery/Gallery.html' + Gallery = init: -> return if not (@enabled = Conf['Gallery'] and g.VIEW in ['index', 'thread']) @@ -43,7 +45,7 @@ Gallery = nodes.el = dialog = $.el 'div', id: 'a-gallery' - $.extend dialog, `<%= readHTML('Gallery.html') %>` + $.extend dialog, {innerHTML: galleryPage } nodes[key] = $ value, dialog for key, value of { buttons: '.gal-buttons' @@ -404,7 +406,7 @@ Gallery = createSubEntries: -> subEntries = (Gallery.menu.createSubEntry item for item in ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']) - delayLabel = $.el 'label', `<%= html('Slide Delay: ') %>` + delayLabel = $.el 'label', `{innerHTML: 'Slide Delay: '}` delayInput = delayLabel.firstElementChild delayInput.value = Gallery.delay $.on delayInput, 'change', Gallery.cb.setDelay diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee index d73846b29..19aa0f23b 100644 --- a/src/Images/ImageExpand.coffee +++ b/src/Images/ImageExpand.coffee @@ -12,7 +12,7 @@ ImageExpand = Header.addShortcut 'expand-all', @EAI, 520 $.on d, 'scroll visibilitychange', @cb.playVideos @videoControls = $.el 'span', className: 'video-controls' - $.extend @videoControls, `<%= html(' contract') %>` + $.extend @videoControls, `{innerHTML: " contract"}` Callbacks.Post.push name: 'Image Expansion' diff --git a/src/Images/Metadata.coffee b/src/Images/Metadata.coffee index 2c98cf36a..9da1933e3 100644 --- a/src/Images/Metadata.coffee +++ b/src/Images/Metadata.coffee @@ -15,7 +15,7 @@ Metadata = className: 'webm-title' el.dataset.index = i $.extend el, - `<%= html('') %>` + `{innerHTML: ""}` $.add file.text, [$.tn(' '), el] $.one el.lastElementChild, 'mouseover focus', Metadata.load if el.children.length is 1 return diff --git a/src/Images/Volume.coffee b/src/Images/Volume.coffee index b14af11d0..2979090f0 100644 --- a/src/Images/Volume.coffee +++ b/src/Images/Volume.coffee @@ -29,7 +29,7 @@ Volume = volumeEntry = $.el 'label', title: 'Default volume for videos.' $.extend volumeEntry, - `<%= html(' Volume') %>` + `{innerHTML: " Volume"}` @inputs = unmute: unmuteEntry.firstElementChild diff --git a/src/Linkification/Embedding.coffee b/src/Linkification/Embedding.coffee index 985b52498..308a26efb 100644 --- a/src/Linkification/Embedding.coffee +++ b/src/Linkification/Embedding.coffee @@ -1,3 +1,5 @@ +import EmbeddingPage from './Ebedding/embedding.html' + Embedding = init: -> return unless g.VIEW in ['index', 'thread', 'archive'] and Conf['Linkify'] and (Conf['Embedding'] or Conf['Link Title'] or Conf['Cover Preview']) @@ -6,7 +8,7 @@ Embedding = if Conf['Embedding'] and g.VIEW isnt 'archive' @dialog = UI.dialog 'embedding', - `<%= readHTML('Embed.html') %>` + `{ innerHTML: EmbeddingPage }` @media = $ '#media-embed', @dialog $.one d, '4chanXInitFinished', @ready $.on d, 'IndexRefreshInternal', -> @@ -62,7 +64,7 @@ Embedding = className: 'embedder' href: 'javascript:;' , - `<%= html('(unembed)') %>` + `{innerHTML: '(unembed)'}` embed.dataset[name] = value for name, value of {key, uid, options, href} @@ -223,7 +225,7 @@ Embedding = regExp: /^[^?#]+\.(?:gif|png|jpg|jpeg|bmp|webp)(?::\w+)?(?:[?#]|$)/i style: '' el: (a) -> - $.el 'div', `<%= html('') %>` + $.el 'div', `{innerHTML: ''}` , key: 'video' regExp: /^[^?#]+\.(?:og[gv]|webm|mp4)(?:[?#]|$)/i diff --git a/src/Menu/DeleteLink.coffee b/src/Menu/DeleteLink.coffee index fba4beeb9..779e8d0c3 100644 --- a/src/Menu/DeleteLink.coffee +++ b/src/Menu/DeleteLink.coffee @@ -93,7 +93,7 @@ DeleteLink = link.textContent = DeleteLink.linkText fileOnly if resDoc.title is '4chan - Banned' # Ban/warn check - el = $.el 'span', `<%= html('You can't delete posts because you are banned.') %>` + el = $.el 'span', `{innerHTML: "You can't delete posts because you are banned."}` new Notice 'warning', el, 20 else if msg = resDoc.getElementById 'errmsg' # error! new Notice 'warning', msg.textContent, 20 diff --git a/src/Menu/Menu.coffee b/src/Menu/Menu.coffee index 50ff0f29c..1c99d1aee 100644 --- a/src/Menu/Menu.coffee +++ b/src/Menu/Menu.coffee @@ -6,7 +6,7 @@ Menu = className: 'menu-button' href: 'javascript:;' - $.extend @button, `<%= html('') %>` + $.extend @button, `{innerHTML: ""}` @menu = new UI.Menu 'post' Callbacks.Post.push diff --git a/src/Miscellaneous/FileInfo.coffee b/src/Miscellaneous/FileInfo.coffee index a7f613785..90cb88f6d 100644 --- a/src/Miscellaneous/FileInfo.coffee +++ b/src/Miscellaneous/FileInfo.coffee @@ -29,9 +29,9 @@ FileInfo = output.push if $.hasOwn(FileInfo.formatters, c) FileInfo.formatters[c].call post else - `<%= html('${s}') %>` + `{innerHTML: E(s)}` '' - $.extend outputNode, `<%= html('@{output}') %>` + $.extend outputNode, `{innerHTML: E.cat(output)}` for a in $$ '.download-button', outputNode $.on a, 'click', ImageCommon.download for a in $$ '.quick-filter-md5', outputNode @@ -39,25 +39,25 @@ FileInfo = return formatters: - t: -> `<%= html('${this.file.url.match(/[^\/]*$/)[0]}') %>` - T: -> `<%= html('&{FileInfo.formatters.t.call(this)}') %>` - l: -> `<%= html('&{FileInfo.formatters.n.call(this)}') %>` - L: -> `<%= html('&{FileInfo.formatters.N.call(this)}') %>` + t: -> `{innerHTML: E(this.file.url.match(/[^/]*$/)[0])}` + T: -> `{innerHTML: "" + (FileInfo.formatters.t.call(this)).innerHTML + ""}` + l: -> `{innerHTML: "" + (FileInfo.formatters.n.call(this)).innerHTML + ""}` + L: -> `{innerHTML: "" + (FileInfo.formatters.N.call(this)).innerHTML + ""}` n: -> fullname = @file.name shortname = SW.yotsuba.Build.shortFilename @file.name, @isReply if fullname is shortname - `<%= html('${fullname}') %>` + `{innerHTML: E(fullname)}` else - `<%= html('${shortname}${fullname}') %>` - N: -> `<%= html('${this.file.name}') %>` - d: -> `<%= html('') %>` - f: -> `<%= html('') %>` - p: -> `<%= html('?{this.file.isSpoiler}{Spoiler, }') %>` - s: -> `<%= html('${this.file.size}') %>` - B: -> `<%= html('${Math.round(this.file.sizeInBytes)} Bytes') %>` - K: -> `<%= html('${Math.round(this.file.sizeInBytes/1024)} KB') %>` - M: -> `<%= html('${Math.round(this.file.sizeInBytes/1048576*100)/100} MB') %>` - r: -> `<%= html('${this.file.dimensions || "PDF"}') %>` - g: -> `<%= html('?{this.file.tag}{, ${this.file.tag}}{}') %>` - '%': -> `<%= html('%') %>` + `{innerHTML: "" + E(shortname) + "" + E(fullname) + ""}` + N: -> `{innerHTML: E(this.file.name)}` + d: -> `{innerHTML: ""}` + f: -> `{innerHTML: ""}` + p: -> `{innerHTML: ((this.file.isSpoiler) ? "Spoiler, " : "")}` + s: -> `{innerHTML: E(this.file.size)}` + B: -> `{innerHTML: E(Math.round(this.file.sizeInBytes)) + " Bytes"}` + K: -> `{innerHTML: E(Math.round(this.file.sizeInBytes/1024)) + " KB"}` + M: -> `{innerHTML: E(Math.round(this.file.sizeInBytes/1048576*100)/100) + " MB"}` + r: -> `{innerHTML: E(this.file.dimensions || "PDF")}` + g: -> `{innerHTML: ((this.file.tag) ? ", " + E(this.file.tag) : "")}` + '%': -> `{innerHTML: "%"}` diff --git a/src/Miscellaneous/ModContact.coffee b/src/Miscellaneous/ModContact.coffee index 42c65e257..1cfd3d248 100644 --- a/src/Miscellaneous/ModContact.coffee +++ b/src/Miscellaneous/ModContact.coffee @@ -16,19 +16,13 @@ ModContact = $.add @nodes.post, moveNote template: (capcode) -> - `<%= html( - 'feedback&{ModContact.specific[capcode]()}' - ) %>` + `{innerHTML: "feedback" + (ModContact.specific[capcode]()).innerHTML}` specific: - Mod: -> `<%= html(' IRC') %>` + Mod: -> `{innerHTML: " IRC"}` Manager: -> ModContact.specific.Mod() - Developer: -> `<%= html(' github') %>` - Admin: -> `<%= html(' twitter') %>` + Developer: -> `{innerHTML: " github"}` + Admin: -> `{innerHTML: " twitter"}` moveNote: - qa: `<%= html( - 'Moving a thread to /qa/ does not imply mods will read it. If you wish to contact mods, use ' + - 'feedback or ' + - 'IRC.' - ) %>` + qa: `{innerHTML: "Moving a thread to /qa/ does not imply mods will read it. If you wish to contact mods, use feedback (https://www.4chan.org/feedback) or IRC (https://www.4chan-x.net/4chan-irc.html)."}` diff --git a/src/Miscellaneous/PSA.coffee b/src/Miscellaneous/PSA.coffee index 5adbcd913..415d5525e 100644 --- a/src/Miscellaneous/PSA.coffee +++ b/src/Miscellaneous/PSA.coffee @@ -1,13 +1,13 @@ PSA = init: -> if g.SITE.software is 'yotsuba' and g.BOARD.ID is 'qa' - announcement = <%= html('Stay in touch with your /qa/ friends!') %> + announcement = {innerHTML: "Stay in touch with your /qa/ friends!"} el = $.el 'div', {className: 'fcx-announcement'}, announcement $.onExists doc, '.boardBanner', (banner) -> $.after banner, el if 'samachan.org' of Conf['siteProperties'] and 'samachan' not in Conf['PSAseen'] el = $.el 'span', - <%= html('Looking for a new home?
Some former Samachan users are regrouping on SushiChan.

(a message from 4chan X)') %> + {innerHTML: "Looking for a new home?
Some former Samachan users are regrouping on SushiChan.

(a message from 4chan X)"} Main.ready -> new Notice 'info', el Conf['PSAseen'].push('samachan') diff --git a/src/Miscellaneous/PassMessage.coffee b/src/Miscellaneous/PassMessage.coffee index 8426e23e8..64299e98c 100644 --- a/src/Miscellaneous/PassMessage.coffee +++ b/src/Miscellaneous/PassMessage.coffee @@ -1,10 +1,12 @@ +import PassMessagePage from './PassMessage/PassMessage.html'; + PassMessage = init: -> return if Conf['passMessageClosed'] msg = $.el 'div', className: 'box-outer top-box' , - `<%= readHTML('PassMessage.html') %>` + `{ innerHTML: PassMessagePage }` msg.style.cssText = 'padding-bottom: 0;' close = $ 'a', msg $.on close, 'click', -> diff --git a/src/Miscellaneous/PostJumper.coffee b/src/Miscellaneous/PostJumper.coffee index df61b4be9..97c97d5c7 100644 --- a/src/Miscellaneous/PostJumper.coffee +++ b/src/Miscellaneous/PostJumper.coffee @@ -56,7 +56,7 @@ PostJumper = classNext = 'next' span = $.el 'span', className: 'postJumper' - $.extend span, `<%= html('${charPrev}${charNext}') %>` + $.extend span, `{innerHTML: "" + E(charPrev) + "" + E(charNext) + ""}` span scroll: (fromJumper, toJumper) -> diff --git a/src/Miscellaneous/Report.coffee b/src/Miscellaneous/Report.coffee index c0ca047d2..0ed1c7161 100644 --- a/src/Miscellaneous/Report.coffee +++ b/src/Miscellaneous/Report.coffee @@ -1,3 +1,5 @@ +import ReportPage from './ArchiveReport.html'; + Report = init: -> return if not (match = location.search.match /\bno=(\d+)/) @@ -35,7 +37,7 @@ Report = id: 'archive-report' hidden: true , - `<%= readHTML('ArchiveReport.html') %>` + `{ innerHTML: ReportPage }` enabled = $ '#archive-report-enabled', fieldset reason = $ '#archive-report-reason', fieldset submit = $ '#archive-report-submit', fieldset diff --git a/src/Monitoring/Favicon.coffee b/src/Monitoring/Favicon.coffee index be88d2599..2b5e97605 100644 --- a/src/Monitoring/Favicon.coffee +++ b/src/Monitoring/Favicon.coffee @@ -1,3 +1,43 @@ +import ferongr_unreadDead from './Favicon/ferongr.unreadDead.png'; +import ferongr_unreadDeadY from './Favicon/ferongr.unreadDeadY.png'; +import ferongr_unreadSFW from './Favicon/ferongr.unreadSFW.png'; +import ferongr_unreadSFWY from './Favicon/ferongr.unreadSFWY.png'; +import ferongr_unreadNSFW from './Favicon/ferongr.unreadNSFW.png'; +import ferongr_unreadNSFWY from './Favicon/ferongr.unreadNSFWY.png'; +import xat_unreadDead from './Favicon/xat-.unreadDead.png'; +import xat_unreadDeadY from './Favicon/xat-.unreadDeadY.png'; +import xat_unreadSFW from './Favicon/xat-.unreadSFW.png'; +import xat_unreadSFWY from './Favicon/xat-.unreadSFWY.png'; +import xat_unreadNSFW from './Favicon/xat-.unreadNSFW.png'; +import xat_unreadNSFWY from './Favicon/xat-.unreadNSFWY.png'; +import Mayhem_unreadDead from './Favicon/Mayhem.unreadDead.png'; +import Mayhem_unreadDeadY from './Favicon/Mayhem.unreadDeadY.png'; +import Mayhem_unreadSFW from './Favicon/Mayhem.unreadSFW.png'; +import Mayhem_unreadSFWY from './Favicon/Mayhem.unreadSFWY.png'; +import Mayhem_unreadNSFW from './Favicon/Mayhem.unreadNSFW.png'; +import Mayhem_unreadNSFWY from './Favicon/Mayhem.unreadNSFWY.png'; +import 4chanJS_unreadDead from './Favicon/4chanJS.unreadDead.png'; +import 4chanJS_unreadDeadY from './Favicon/4chanJS.unreadDeadY.png'; +import 4chanJS_unreadSFW from './Favicon/4chanJS.unreadSFW.png'; +import 4chanJS_unreadSFWY from './Favicon/4chanJS.unreadSFWY.png'; +import 4chanJS_unreadNSFW from './Favicon/4chanJS.unreadNSFW.png'; +import 4chanJS_unreadNSFWY from './Favicon/4chanJS.unreadNSFWY.png'; +import Original_unreadDead from './Favicon/Original.unreadDead.png'; +import Original_unreadDeadY from './Favicon/Original.unreadDeadY.png'; +import Original_unreadSFW from './Favicon/Original.unreadSFW.png'; +import Original_unreadSFWY from './Favicon/Original.unreadSFWY.png'; +import Original_unreadNSFW from './Favicon/Original.unreadNSFW.png'; +import Original_unreadNSFWY from './Favicon/Original.unreadNSFWY.png'; +import Metro_unreadDead from './Favicon/Metro.unreadDead.png'; +import Metro_unreadDeadY from './Favicon/Metro.unreadDeadY.png'; +import Metro_unreadSFW from './Favicon/Metro.unreadSFW.png'; +import Metro_unreadSFWY from './Favicon/Metro.unreadSFWY.png'; +import Metro_unreadNSFW from './Favicon/Metro.unreadNSFW.png'; +import Metro_unreadNSFWY from './Favicon/Metro.unreadNSFWY.png'; +import dead from './Favicon/dead.gif'; +import empty from './Favicon/empty.gif'; + + Favicon = init: -> $.asap (-> d.head and (Favicon.el = $ 'link[rel="shortcut icon"]', d.head)), Favicon.initAsap @@ -21,52 +61,52 @@ Favicon = switch: -> items = { ferongr: [ - '<%= readBase64("ferongr.unreadDead.png") %>' - '<%= readBase64("ferongr.unreadDeadY.png") %>' - '<%= readBase64("ferongr.unreadSFW.png") %>' - '<%= readBase64("ferongr.unreadSFWY.png") %>' - '<%= readBase64("ferongr.unreadNSFW.png") %>' - '<%= readBase64("ferongr.unreadNSFWY.png") %>' + ferongr_unreadDead, + ferongr_unreadDeadY, + ferongr_unreadSFW, + ferongr_unreadSFWY, + ferongr_unreadNSFW, + ferongr_unreadNSFWY, ] 'xat-': [ - '<%= readBase64("xat-.unreadDead.png") %>' - '<%= readBase64("xat-.unreadDeadY.png") %>' - '<%= readBase64("xat-.unreadSFW.png") %>' - '<%= readBase64("xat-.unreadSFWY.png") %>' - '<%= readBase64("xat-.unreadNSFW.png") %>' - '<%= readBase64("xat-.unreadNSFWY.png") %>' + xat_unreadDead, + xat_unreadDeadY, + xat_unreadSFW, + xat_unreadSFWY, + xat_unreadNSFW, + xat_unreadNSFWY, ] Mayhem: [ - '<%= readBase64("Mayhem.unreadDead.png") %>' - '<%= readBase64("Mayhem.unreadDeadY.png") %>' - '<%= readBase64("Mayhem.unreadSFW.png") %>' - '<%= readBase64("Mayhem.unreadSFWY.png") %>' - '<%= readBase64("Mayhem.unreadNSFW.png") %>' - '<%= readBase64("Mayhem.unreadNSFWY.png") %>' + Mayhem_unreadDead, + Mayhem_unreadDeadY, + Mayhem_unreadSFW, + Mayhem_unreadSFWY, + Mayhem_unreadNSFW, + Mayhem_unreadNSFWY, ] '4chanJS': [ - '<%= readBase64("4chanJS.unreadDead.png") %>' - '<%= readBase64("4chanJS.unreadDeadY.png") %>' - '<%= readBase64("4chanJS.unreadSFW.png") %>' - '<%= readBase64("4chanJS.unreadSFWY.png") %>' - '<%= readBase64("4chanJS.unreadNSFW.png") %>' - '<%= readBase64("4chanJS.unreadNSFWY.png") %>' + 4chanJS_unreadDead, + 4chanJS_unreadDeadY, + 4chanJS_unreadSFW, + 4chanJS_unreadSFWY, + 4chanJS_unreadNSFW, + 4chanJS_unreadNSFWY, ] Original: [ - '<%= readBase64("Original.unreadDead.png") %>' - '<%= readBase64("Original.unreadDeadY.png") %>' - '<%= readBase64("Original.unreadSFW.png") %>' - '<%= readBase64("Original.unreadSFWY.png") %>' - '<%= readBase64("Original.unreadNSFW.png") %>' - '<%= readBase64("Original.unreadNSFWY.png") %>' + Original_unreadDead, + Original_unreadDeadY, + Original_unreadSFW, + Original_unreadSFWY, + Original_unreadNSFW, + Original_unreadNSFWY, ] 'Metro': [ - '<%= readBase64("Metro.unreadDead.png") %>' - '<%= readBase64("Metro.unreadDeadY.png") %>' - '<%= readBase64("Metro.unreadSFW.png") %>' - '<%= readBase64("Metro.unreadSFWY.png") %>' - '<%= readBase64("Metro.unreadNSFW.png") %>' - '<%= readBase64("Metro.unreadNSFWY.png") %>' + Metro_unreadDead, + Metro_unreadDeadY, + Metro_unreadSFW, + Metro_unreadSFWY, + Metro_unreadNSFW, + Metro_unreadNSFWY, ] } items = $.getOwn(items, Conf['favicon']) @@ -90,5 +130,6 @@ Favicon = SFW: '//s.4cdn.org/image/favicon-ws.ico' NSFW: '//s.4cdn.org/image/favicon.ico' + # TODO dead: 'data:image/gif;base64,<%= readBase64("dead.gif") %>' logo: 'data:image/png;base64,<%= readBase64("/src/meta/icon128.png") %>' diff --git a/src/Monitoring/ReplyPruning.coffee b/src/Monitoring/ReplyPruning.coffee index 8be5983b4..7ec8c911f 100644 --- a/src/Monitoring/ReplyPruning.coffee +++ b/src/Monitoring/ReplyPruning.coffee @@ -16,7 +16,7 @@ ReplyPruning = el = $.el 'span', title: 'Maximum number of replies to show.' , - `<%= html(' ') %>` + `{innerHTML: " "}` $.prepend el, label @inputs = diff --git a/src/Monitoring/ThreadStats.coffee b/src/Monitoring/ThreadStats.coffee index 4f5f58c44..c06b01ad6 100644 --- a/src/Monitoring/ThreadStats.coffee +++ b/src/Monitoring/ThreadStats.coffee @@ -9,11 +9,7 @@ ThreadStats = if Conf['Page Count in Stats'] @[if g.SITE.isPrunedByAge?(g.BOARD) then 'showPurgePos' else 'showPage'] = true - statsHTML = `<%= html( - '? / ?' + - '?{Conf["IP Count in Stats"] && g.SITE.hasIPCount}{ / ?}' + - '?{Conf["Page Count in Stats"]}{ / ?}' - ) %>` + statsHTML = `{innerHTML: "? / ?" + ((Conf["IP Count in Stats"] && g.SITE.hasIPCount) ? " / ?" : "") + ((Conf["Page Count in Stats"]) ? " / ?" : "")}` statsTitle = 'Posts / Files' statsTitle += ' / IPs' if Conf['IP Count in Stats'] and g.SITE.hasIPCount statsTitle += (if @showPurgePos then ' / Purge Position' else ' / Page') if Conf['Page Count in Stats'] @@ -27,7 +23,7 @@ ThreadStats = else @dialog = sc = UI.dialog 'thread-stats', - `<%= html('
&{statsHTML}
') %>` + `{innerHTML: "
" + (statsHTML).innerHTML + "
"}` $.addClass doc, 'float' $.ready -> $.add d.body, sc diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee index fcee0a8e6..119db1cd9 100644 --- a/src/Monitoring/ThreadUpdater.coffee +++ b/src/Monitoring/ThreadUpdater.coffee @@ -1,3 +1,5 @@ +import Beep from './ThreadUpdater/beep.wav' + ThreadUpdater = init: -> return if g.VIEW isnt 'thread' or !Conf['Thread Updater'] @@ -12,11 +14,11 @@ ThreadUpdater = if Conf['Updater and Stats in Header'] @dialog = sc = $.el 'span', id: 'updater' - $.extend sc, `<%= html('') %>` + $.extend sc, `{innerHTML: ''}` Header.addShortcut 'updater', sc, 100 else @dialog = sc = UI.dialog 'updater', - `<%= html('
') %>` + `{innerHTML: '
'}` $.addClass doc, 'float' $.ready -> $.add d.body, sc @@ -31,7 +33,7 @@ ThreadUpdater = updateLink = $.el 'span', className: 'brackets-wrap updatelink' - $.extend updateLink, `<%= html('Update') %>` + $.extend updateLink, `{innerHTML: 'Update'}` Main.ready -> ($.add navLinksBot, [$.tn(' '), updateLink] if (navLinksBot = $ '.navLinksBot')) $.on updateLink.firstElementChild, 'click', @update @@ -50,7 +52,7 @@ ThreadUpdater = subEntries.push el: el @settings = $.el 'span', - `<%= html('Interval') %>` + `{innerHTML: 'Interval'}` $.on @settings, 'click', @intervalShortcut @@ -65,7 +67,7 @@ ThreadUpdater = Callbacks.Thread.push name: 'Thread Updater' cb: @node - + node: -> ThreadUpdater.thread = @ ThreadUpdater.root = @nodes.root diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 00e0caf61..85393692b 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -1,3 +1,5 @@ +import ThreadWatcherPage from './ThreadWatcher/ThreadWatcher.html' + ThreadWatcher = init: -> return if not (@enabled = Conf['Thread Watcher']) @@ -11,7 +13,7 @@ ThreadWatcher = @db = new DataBoard 'watchedThreads', @refresh, true @dbLM = new DataBoard 'watcherLastModified', null, true - @dialog = UI.dialog 'thread-watcher', `<%= readHTML('ThreadWatcher.html') %>` + @dialog = UI.dialog 'thread-watcher', `{ innerHTML: ThreadWatcherPage }` @status = $ '#watcher-status', @dialog @list = @dialog.lastElementChild @refreshButton = $ '.refresh', @dialog @@ -50,7 +52,7 @@ ThreadWatcher = el: $.el 'a', href: 'javascript:;' className: 'has-shortcut-text' - , `<%= html('Alt+click') %>` + , `{innerHTML: 'Alt+click'}` order: 6 open: ({thread}) -> return false if Conf['Index Mode'] isnt 'catalog' diff --git a/src/Posting/Captcha.v2.coffee b/src/Posting/Captcha.v2.coffee index de27a3d53..a29722efb 100644 --- a/src/Posting/Captcha.v2.coffee +++ b/src/Posting/Captcha.v2.coffee @@ -12,9 +12,9 @@ Captcha.v2 = $.on d, 'CaptchaCount', @count.bind(@) root = $.el 'div', className: 'captcha-root' - $.extend root, `<%= html( + $.extend root, `{ innerHTML: '
' - ) %>` + }` counter = $ '.captcha-counter > a', root @nodes = {root, counter} @count() diff --git a/src/Posting/PassLink.coffee b/src/Posting/PassLink.coffee index 3111a6d56..cee7ee076 100644 --- a/src/Posting/PassLink.coffee +++ b/src/Posting/PassLink.coffee @@ -8,7 +8,7 @@ PassLink = passLink = $.el 'span', className: 'brackets-wrap pass-link-container' - $.extend passLink, `<%= html('4chan Pass') %>` + $.extend passLink, `{innerHTML: "4chan Pass"}` $.on passLink.firstElementChild, 'click', -> window.open "//sys.#{location.hostname.split('.')[1]}.org/auth", Date.now() diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index 1e2911b4c..1d64e54d0 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -1,3 +1,5 @@ +import QuickReplyPage from './QR/QuickReply.html' + QR = mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'] @@ -72,7 +74,7 @@ QR = if (origToggle = $.id 'togglePostFormLink') link = $.el 'h1', className: "qr-link-container" - $.extend link, `<%= html('?{g.VIEW === "thread"}{Reply to Thread}{Start a Thread}') %>` + $.extend link, `{innerHTML: '?{g.VIEW === "thread"}{Reply to Thread}{Start a Thread}'}` QR.link = link.firstElementChild $.on link.firstChild, 'click', -> @@ -85,7 +87,7 @@ QR = if g.VIEW is 'thread' linkBot = $.el 'div', className: "brackets-wrap qr-link-container-bottom" - $.extend linkBot, `<%= html('Reply to Thread') %>` + $.extend linkBot, `{innerHTML: 'Reply to Thread'}` $.on linkBot.firstElementChild, 'click', -> QR.open() @@ -243,10 +245,10 @@ QR = connectionError: -> $.el 'span', - `<%= html( + `{ innerHTML: 'Connection error while posting. ' + '[More info]' - ) %>` + }` notifications: [] @@ -369,7 +371,7 @@ QR = openError: -> div = $.el 'div' - $.extend div, `<%= html('Could not open file. [More info]') %>` + $.extend div, `{ innerHTML: 'Could not open file. [More info]'}` QR.error div setFile: (e) -> @@ -496,7 +498,7 @@ QR = dialog: -> QR.nodes = nodes = el: dialog = UI.dialog 'qr', - `<%= readHTML('QuickReply.html') %>` + `{ innerHTML: QuickReplyPage }` setNode = (name, query) -> nodes[name] = $ query, dialog diff --git a/src/Posting/QR.post.coffee b/src/Posting/QR.post.coffee index a658a82a2..b3177aeb2 100644 --- a/src/Posting/QR.post.coffee +++ b/src/Posting/QR.post.coffee @@ -4,7 +4,7 @@ QR.post = class className: 'qr-preview' draggable: true href: 'javascript:;' - $.extend el, `<%= html('') %>` + $.extend el, `{innerHTML: ''}` @nodes = el: el @@ -185,7 +185,7 @@ QR.post = class error: (className, message, link) -> div = $.el 'div', {className} - $.extend div, `<%= html('${message}?{link}{ [More info]}
[delete post] [delete all]') %>` + $.extend div, `{innerHTML: '${message}?{link}{ [More info]}
[delete post] [delete all]'}` (@errors or= []).push div [rm, rmAll] = $$ 'a', div $.on div, 'click', => diff --git a/src/Quotelinks/QuoteThreading.coffee b/src/Quotelinks/QuoteThreading.coffee index 52352d07f..4efb83807 100644 --- a/src/Quotelinks/QuoteThreading.coffee +++ b/src/Quotelinks/QuoteThreading.coffee @@ -7,12 +7,12 @@ QuoteThreading = return unless Conf['Quote Threading'] and g.VIEW is 'thread' @controls = $.el 'label', - `<%= html(' Threading') %>` + `{innerHTML: " Threading"}` @threadNewLink = $.el 'span', className: 'brackets-wrap threadnewlink' hidden: true - $.extend @threadNewLink, `<%= html('Thread New Posts') %>` + $.extend @threadNewLink, `{innerHTML: "Thread New Posts"}` @input = $('input', @controls) @input.checked = Conf['Thread Quotes'] diff --git a/src/Quotelinks/QuoteYou.coffee b/src/Quotelinks/QuoteYou.coffee index e0d9836b8..b4f97ee75 100644 --- a/src/Quotelinks/QuoteYou.coffee +++ b/src/Quotelinks/QuoteYou.coffee @@ -59,7 +59,7 @@ QuoteYou = label = $.el 'label', className: 'toggle-you' , - `<%= html(' You') %>` + `{innerHTML: ' You'}` input = $ 'input', label $.on input, 'change', QuoteYou.menu.toggle Menu.menu?.addEntry diff --git a/src/classes/Fetcher.coffee b/src/classes/Fetcher.coffee index 1031fb856..cc9d045d9 100644 --- a/src/classes/Fetcher.coffee +++ b/src/classes/Fetcher.coffee @@ -149,10 +149,10 @@ class Fetcher greentext = text[0] is '>' text = text.replace /(\[\/?[a-z]+):lit(\])/g, '$1$2' text = for text2, j in text.split /(>>(?:>\/[a-z\d]+\/)?\d+)/g - `<%= html('?{j % 2}{${text2}}{${text2}}') %>` - text = `<%= html('?{greentext}{@{text}}{@{text}}') %>` + `{innerHTML: ((j % 2) ? "" + E(text2) + "" : E(text2))}` + text = `{innerHTML: ((greentext) ? "" + E.cat(text) + "" : E.cat(text))}` text - comment = `<%= html('@{comment}') %>` + comment = `{innerHTML: E.cat(comment)}` @threadID = +data.thread_num o = @@ -220,24 +220,24 @@ class Fetcher @insert post archiveTags: - '\n': `<%= html('
') %>` - '[b]': `<%= html('') %>` - '[/b]': `<%= html('') %>` - '[spoiler]': `<%= html('') %>` - '[/spoiler]': `<%= html('') %>` - '[code]': `<%= html('
') %>`
-    '[/code]':    `<%= html('
') %>` - '[moot]': `<%= html('
') %>` - '[/moot]': `<%= html('
') %>` - '[banned]': `<%= html('') %>` - '[/banned]': `<%= html('') %>` - '[fortune]': (text) -> `<%= html('') %>` - '[/fortune]': `<%= html('') %>` - '[i]': `<%= html('') %>` - '[/i]': `<%= html('') %>` - '[red]': `<%= html('') %>` - '[/red]': `<%= html('') %>` - '[green]': `<%= html('') %>` - '[/green]': `<%= html('') %>` - '[blue]': `<%= html('') %>` - '[/blue]': `<%= html('') %>` + '\n': `{innerHTML: "
"}` + '[b]': `{innerHTML: ""}` + '[/b]': `{innerHTML: ""}` + '[spoiler]': `{innerHTML: ""}` + '[/spoiler]': `{innerHTML: ""}` + '[code]': `{innerHTML: "
"}`
+    '[/code]':    `{innerHTML: "
"}` + '[moot]': `{innerHTML: "
"}` + '[/moot]': `{innerHTML: "
"}` + '[banned]': `{innerHTML: ""}` + '[/banned]': `{innerHTML: ""}` + '[fortune]': (text) -> `{innerHTML: ""}` + '[/fortune]': `{innerHTML: ""}` + '[i]': `{innerHTML: ""}` + '[/i]': `{innerHTML: ""}` + '[red]': `{innerHTML: ""}` + '[/red]': `{innerHTML: ""}` + '[green]': `{innerHTML: ""}` + '[/green]': `{innerHTML: ""}` + '[blue]': `{innerHTML: ""}` + '[/blue]': `{innerHTML: ""}` diff --git a/src/classes/Notice.coffee b/src/classes/Notice.coffee index bbebab5f6..ddbcb22f9 100644 --- a/src/classes/Notice.coffee +++ b/src/classes/Notice.coffee @@ -1,7 +1,7 @@ class Notice constructor: (type, content, @timeout, @onclose) -> @el = $.el 'div', - `<%= html('
') %>` + `{innerHTML: "
"}` @el.style.opacity = 0 @setType type $.on @el.firstElementChild, 'click', @close diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 4de0545c3..b4dda3856 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -1,3 +1,6 @@ +import userCss from './user.css' +import banners from './banners.js' + Config = main: 'Miscellaneous': @@ -878,7 +881,7 @@ Config = favicon: 'ferongr' - usercss: `<%= JSON.stringify(read('user.css')) %>` + usercss: userCss hotkeys: # QR & Options @@ -1168,7 +1171,7 @@ Config = hiddenPSAList: [{}] - knownBanners: '<%= readJSON("banners.json").join(",") %>' + knownBanners: banners.join(',') passMessageClosed: false diff --git a/src/config/banners.js b/src/config/banners.js new file mode 100644 index 000000000..9cf65d742 --- /dev/null +++ b/src/config/banners.js @@ -0,0 +1,2 @@ +const banners = ["0.jpg", "1.jpg", "2.jpg", "4.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg", "12.jpg", "13.jpg", "14.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg", "21.jpg", "22.jpg", "24.jpg", "25.jpg", "26.jpg", "28.jpg", "29.jpg", "33.jpg", "38.jpg", "39.jpg", "43.jpg", "44.jpg", "45.jpg", "46.jpg", "47.jpg", "52.jpg", "54.jpg", "57.jpg", "59.jpg", "60.jpg", "61.jpg", "64.jpg", "66.jpg", "67.jpg", "69.jpg", "71.jpg", "72.jpg", "76.jpg", "77.jpg", "81.jpg", "82.jpg", "83.jpg", "84.jpg", "88.jpg", "90.jpg", "91.jpg", "96.jpg", "98.jpg", "99.jpg", "100.jpg", "104.jpg", "106.jpg", "116.jpg", "119.jpg", "137.jpg", "140.jpg", "148.jpg", "149.jpg", "150.jpg", "154.jpg", "156.jpg", "157.jpg", "158.jpg", "159.jpg", "161.jpg", "162.jpg", "164.jpg", "165.jpg", "166.jpg", "167.jpg", "168.jpg", "169.jpg", "170.jpg", "171.jpg", "172.jpg", "173.jpg", "174.jpg", "175.jpg", "176.jpg", "178.jpg", "179.jpg", "180.jpg", "181.jpg", "182.jpg", "183.jpg", "186.jpg", "189.jpg", "190.jpg", "192.jpg", "193.jpg", "194.jpg", "197.jpg", "198.jpg", "200.jpg", "201.jpg", "202.jpg", "203.jpg", "205.jpg", "206.jpg", "207.jpg", "208.jpg", "210.jpg", "213.jpg", "214.jpg", "215.jpg", "216.jpg", "218.jpg", "219.jpg", "220.jpg", "221.jpg", "222.jpg", "223.jpg", "224.jpg", "227.jpg", "0.png", "1.png", "2.png", "3.png", "5.png", "6.png", "9.png", "10.png", "11.png", "12.png", "14.png", "16.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "26.png", "27.png", "28.png", "29.png", "30.png", "31.png", "32.png", "33.png", "34.png", "37.png", "39.png", "40.png", "41.png", "42.png", "43.png", "44.png", "45.png", "48.png", "49.png", "50.png", "51.png", "52.png", "53.png", "57.png", "58.png", "59.png", "64.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png", "72.png", "76.png", "78.png", "79.png", "81.png", "82.png", "85.png", "86.png", "87.png", "89.png", "95.png", "98.png", "100.png", "101.png", "102.png", "105.png", "106.png", "107.png", "109.png", "110.png", "111.png", "112.png", "113.png", "114.png", "115.png", "116.png", "118.png", "119.png", "120.png", "121.png", "122.png", "123.png", "126.png", "128.png", "130.png", "134.png", "136.png", "138.png", "139.png", "140.png", "142.png", "145.png", "146.png", "149.png", "150.png", "151.png", "152.png", "153.png", "154.png", "155.png", "156.png", "157.png", "158.png", "159.png", "160.png", "163.png", "164.png", "165.png", "166.png", "167.png", "168.png", "169.png", "170.png", "171.png", "172.png", "173.png", "174.png", "178.png", "179.png", "180.png", "181.png", "182.png", "184.png", "186.png", "188.png", "190.png", "192.png", "193.png", "194.png", "195.png", "196.png", "197.png", "198.png", "200.png", "202.png", "203.png", "205.png", "206.png", "207.png", "209.png", "212.png", "213.png", "214.png", "216.png", "217.png", "218.png", "219.png", "220.png", "221.png", "222.png", "223.png", "224.png", "225.png", "226.png", "229.png", "231.png", "232.png", "233.png", "234.png", "235.png", "237.png", "238.png", "239.png", "240.png", "241.png", "242.png", "244.png", "245.png", "246.png", "247.png", "248.png", "249.png", "250.png", "253.png", "254.png", "255.png", "256.png", "257.png", "258.png", "259.png", "260.png", "262.png", "268.png", "0.gif", "1.gif", "2.gif", "3.gif", "4.gif", "5.gif", "6.gif", "7.gif", "8.gif", "9.gif", "10.gif", "12.gif", "13.gif", "14.gif", "15.gif", "16.gif", "18.gif", "19.gif", "20.gif", "21.gif", "22.gif", "23.gif", "24.gif", "28.gif", "29.gif", "30.gif", "33.gif", "34.gif", "35.gif", "36.gif", "37.gif", "39.gif", "40.gif", "42.gif", "44.gif", "45.gif", "46.gif", "48.gif", "50.gif", "52.gif", "54.gif", "55.gif", "57.gif", "58.gif", "59.gif", "60.gif", "61.gif", "63.gif", "64.gif", "66.gif", "67.gif", "68.gif", "69.gif", "70.gif", "72.gif", "73.gif", "75.gif", "76.gif", "77.gif", "78.gif", "80.gif", "81.gif", "82.gif", "83.gif", "86.gif", "87.gif", "88.gif", "92.gif", "93.gif", "94.gif", "95.gif", "96.gif", "97.gif", "98.gif", "99.gif", "100.gif", "101.gif", "102.gif", "103.gif", "104.gif", "105.gif", "106.gif", "108.gif", "109.gif", "110.gif", "111.gif", "112.gif", "113.gif", "115.gif", "116.gif", "117.gif", "118.gif", "119.gif", "120.gif", "122.gif", "123.gif", "124.gif", "127.gif", "129.gif", "130.gif", "131.gif", "134.gif", "135.gif", "136.gif", "138.gif", "139.gif", "141.gif", "144.gif", "146.gif", "148.gif", "149.gif", "153.gif", "154.gif", "155.gif", "157.gif", "158.gif", "159.gif", "160.gif", "161.gif", "162.gif", "164.gif", "166.gif", "167.gif", "168.gif", "169.gif", "170.gif", "171.gif", "172.gif", "173.gif", "174.gif", "175.gif", "176.gif", "177.gif", "178.gif", "181.gif", "182.gif", "183.gif", "185.gif", "186.gif", "187.gif", "188.gif", "189.gif", "190.gif", "191.gif", "192.gif", "193.gif", "195.gif", "196.gif", "197.gif", "200.gif", "201.gif", "202.gif", "203.gif", "204.gif", "205.gif", "206.gif", "207.gif", "208.gif", "209.gif", "210.gif", "211.gif", "212.gif", "213.gif", "214.gif", "215.gif", "216.gif", "217.gif", "219.gif", "220.gif", "221.gif", "222.gif", "224.gif", "225.gif", "226.gif", "227.gif", "228.gif", "230.gif", "232.gif", "233.gif", "234.gif", "235.gif", "238.gif", "240.gif", "241.gif", "243.gif", "244.gif", "245.gif", "246.gif", "247.gif", "249.gif", "250.gif", "251.gif", "253.gif"]; +export default banners; diff --git a/src/config/banners.json b/src/config/banners.json deleted file mode 100644 index 785cc8306..000000000 --- a/src/config/banners.json +++ /dev/null @@ -1 +0,0 @@ -["0.jpg", "1.jpg", "2.jpg", "4.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpg", "12.jpg", "13.jpg", "14.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg", "21.jpg", "22.jpg", "24.jpg", "25.jpg", "26.jpg", "28.jpg", "29.jpg", "33.jpg", "38.jpg", "39.jpg", "43.jpg", "44.jpg", "45.jpg", "46.jpg", "47.jpg", "52.jpg", "54.jpg", "57.jpg", "59.jpg", "60.jpg", "61.jpg", "64.jpg", "66.jpg", "67.jpg", "69.jpg", "71.jpg", "72.jpg", "76.jpg", "77.jpg", "81.jpg", "82.jpg", "83.jpg", "84.jpg", "88.jpg", "90.jpg", "91.jpg", "96.jpg", "98.jpg", "99.jpg", "100.jpg", "104.jpg", "106.jpg", "116.jpg", "119.jpg", "137.jpg", "140.jpg", "148.jpg", "149.jpg", "150.jpg", "154.jpg", "156.jpg", "157.jpg", "158.jpg", "159.jpg", "161.jpg", "162.jpg", "164.jpg", "165.jpg", "166.jpg", "167.jpg", "168.jpg", "169.jpg", "170.jpg", "171.jpg", "172.jpg", "173.jpg", "174.jpg", "175.jpg", "176.jpg", "178.jpg", "179.jpg", "180.jpg", "181.jpg", "182.jpg", "183.jpg", "186.jpg", "189.jpg", "190.jpg", "192.jpg", "193.jpg", "194.jpg", "197.jpg", "198.jpg", "200.jpg", "201.jpg", "202.jpg", "203.jpg", "205.jpg", "206.jpg", "207.jpg", "208.jpg", "210.jpg", "213.jpg", "214.jpg", "215.jpg", "216.jpg", "218.jpg", "219.jpg", "220.jpg", "221.jpg", "222.jpg", "223.jpg", "224.jpg", "227.jpg", "0.png", "1.png", "2.png", "3.png", "5.png", "6.png", "9.png", "10.png", "11.png", "12.png", "14.png", "16.png", "19.png", "20.png", "21.png", "22.png", "23.png", "24.png", "26.png", "27.png", "28.png", "29.png", "30.png", "31.png", "32.png", "33.png", "34.png", "37.png", "39.png", "40.png", "41.png", "42.png", "43.png", "44.png", "45.png", "48.png", "49.png", "50.png", "51.png", "52.png", "53.png", "57.png", "58.png", "59.png", "64.png", "66.png", "67.png", "68.png", "69.png", "70.png", "71.png", "72.png", "76.png", "78.png", "79.png", "81.png", "82.png", "85.png", "86.png", "87.png", "89.png", "95.png", "98.png", "100.png", "101.png", "102.png", "105.png", "106.png", "107.png", "109.png", "110.png", "111.png", "112.png", "113.png", "114.png", "115.png", "116.png", "118.png", "119.png", "120.png", "121.png", "122.png", "123.png", "126.png", "128.png", "130.png", "134.png", "136.png", "138.png", "139.png", "140.png", "142.png", "145.png", "146.png", "149.png", "150.png", "151.png", "152.png", "153.png", "154.png", "155.png", "156.png", "157.png", "158.png", "159.png", "160.png", "163.png", "164.png", "165.png", "166.png", "167.png", "168.png", "169.png", "170.png", "171.png", "172.png", "173.png", "174.png", "178.png", "179.png", "180.png", "181.png", "182.png", "184.png", "186.png", "188.png", "190.png", "192.png", "193.png", "194.png", "195.png", "196.png", "197.png", "198.png", "200.png", "202.png", "203.png", "205.png", "206.png", "207.png", "209.png", "212.png", "213.png", "214.png", "216.png", "217.png", "218.png", "219.png", "220.png", "221.png", "222.png", "223.png", "224.png", "225.png", "226.png", "229.png", "231.png", "232.png", "233.png", "234.png", "235.png", "237.png", "238.png", "239.png", "240.png", "241.png", "242.png", "244.png", "245.png", "246.png", "247.png", "248.png", "249.png", "250.png", "253.png", "254.png", "255.png", "256.png", "257.png", "258.png", "259.png", "260.png", "262.png", "268.png", "0.gif", "1.gif", "2.gif", "3.gif", "4.gif", "5.gif", "6.gif", "7.gif", "8.gif", "9.gif", "10.gif", "12.gif", "13.gif", "14.gif", "15.gif", "16.gif", "18.gif", "19.gif", "20.gif", "21.gif", "22.gif", "23.gif", "24.gif", "28.gif", "29.gif", "30.gif", "33.gif", "34.gif", "35.gif", "36.gif", "37.gif", "39.gif", "40.gif", "42.gif", "44.gif", "45.gif", "46.gif", "48.gif", "50.gif", "52.gif", "54.gif", "55.gif", "57.gif", "58.gif", "59.gif", "60.gif", "61.gif", "63.gif", "64.gif", "66.gif", "67.gif", "68.gif", "69.gif", "70.gif", "72.gif", "73.gif", "75.gif", "76.gif", "77.gif", "78.gif", "80.gif", "81.gif", "82.gif", "83.gif", "86.gif", "87.gif", "88.gif", "92.gif", "93.gif", "94.gif", "95.gif", "96.gif", "97.gif", "98.gif", "99.gif", "100.gif", "101.gif", "102.gif", "103.gif", "104.gif", "105.gif", "106.gif", "108.gif", "109.gif", "110.gif", "111.gif", "112.gif", "113.gif", "115.gif", "116.gif", "117.gif", "118.gif", "119.gif", "120.gif", "122.gif", "123.gif", "124.gif", "127.gif", "129.gif", "130.gif", "131.gif", "134.gif", "135.gif", "136.gif", "138.gif", "139.gif", "141.gif", "144.gif", "146.gif", "148.gif", "149.gif", "153.gif", "154.gif", "155.gif", "157.gif", "158.gif", "159.gif", "160.gif", "161.gif", "162.gif", "164.gif", "166.gif", "167.gif", "168.gif", "169.gif", "170.gif", "171.gif", "172.gif", "173.gif", "174.gif", "175.gif", "176.gif", "177.gif", "178.gif", "181.gif", "182.gif", "183.gif", "185.gif", "186.gif", "187.gif", "188.gif", "189.gif", "190.gif", "191.gif", "192.gif", "193.gif", "195.gif", "196.gif", "197.gif", "200.gif", "201.gif", "202.gif", "203.gif", "204.gif", "205.gif", "206.gif", "207.gif", "208.gif", "209.gif", "210.gif", "211.gif", "212.gif", "213.gif", "214.gif", "215.gif", "216.gif", "217.gif", "219.gif", "220.gif", "221.gif", "222.gif", "224.gif", "225.gif", "226.gif", "227.gif", "228.gif", "230.gif", "232.gif", "233.gif", "234.gif", "235.gif", "238.gif", "240.gif", "241.gif", "243.gif", "244.gif", "245.gif", "246.gif", "247.gif", "249.gif", "250.gif", "251.gif", "253.gif"] \ No newline at end of file diff --git a/src/main/Main.coffee b/src/main/Main.coffee index cc0ef0aef..9065d0984 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -330,7 +330,7 @@ Main = if g.SITE.isIncomplete?() msg = $.el 'div', - `<%= html('The page didn't load completely.
Some features may not work unless you reload.') %>` + `{innerHTML: 'The page didn't load completely.
Some features may not work unless you reload.'}` $.on $('a', msg), 'click', -> location.reload() new Notice 'warning', msg @@ -518,7 +518,7 @@ Main = unless nodes[i] (cb() if cb) return - setTimeout softTask, 0 + setTimeout softTask, 0 softTask() @@ -547,7 +547,7 @@ Main = return div = $.el 'div', - `<%= html('${errors.length} errors occurred.&{Main.reportLink(errors)} [show]') %>` + `{innerHTML: '${errors.length} errors occurred.&{Main.reportLink(errors)} [show]'}` $.on div.lastElementChild, 'click', -> [@textContent, logs.hidden] = if @textContent is 'show' then ( ['hide', false] @@ -565,7 +565,7 @@ Main = parseError: (data, reportLink) -> c.error data.message, data.error.stack message = $.el 'div', - `<%= html('${data.message}?{reportLink}{&{reportLink}}') %>` + `{innerHTML: '${data.message}?{reportLink}{&{reportLink}}'}` error = $.el 'div', textContent: "#{data.error.name or 'Error'}: #{data.error.message or 'see console for details'}" lines = data.error.stack?.match(/\d+(?=:\d+\)?$)/mg)?.join().replace(/^/, ' at ') or '' @@ -595,7 +595,7 @@ Main = addDetails '\n`' + data.html + '`' if data.html details = details.replace /file:\/{3}.+\//g, '' # Remove local file paths url = '<%= meta.newIssue %>'.replace('%title', encodeURIComponent title).replace('%details', encodeURIComponent details) - `<%= html(' [report]') %>` + `{innerHTML: ' [report]'}` isThisPageLegit: -> # not 404 error page or similar. diff --git a/src/platform/$.coffee b/src/platform/$.coffee index 342d16a3d..7c2c4646e 100644 --- a/src/platform/$.coffee +++ b/src/platform/$.coffee @@ -552,7 +552,7 @@ $.crxWorking = -> return true unless $.crxWarningShown msg = $.el 'div', - `<%= html('4chan X seems to have been updated. You will need to reload the page.') %>` + `{innerHTML: '4chan X seems to have been updated. You will need to reload the page.'}` $.on $('a', msg), 'click', -> location.reload() new Notice 'warning', msg $.crxWarningShown = true diff --git a/src/site/SW.yotsuba.Build.coffee b/src/site/SW.yotsuba.Build.coffee index a13534dc8..3d282ee17 100644 --- a/src/site/SW.yotsuba.Build.coffee +++ b/src/site/SW.yotsuba.Build.coffee @@ -1,3 +1,9 @@ +import PostInfoPage from './SW.yotsuba.Build/PostInfo.html' +import FilePage from './SW.yotsuba.Build/File.html' +import PostPage from './SW.yotsuba.Build/Post.html' +import CatalogThreadPage from './SW.yotsuba.Build/CatalogThread.html' +import CatalogReplyPage from './SW.yotsuba.Build/CatalogReply.html' + Build = staticPath: '//s.4cdn.org/image/' gifIcon: if window.devicePixelRatio >= 2 then '@2x.gif' else '.gif' @@ -145,7 +151,7 @@ Build = else "#{url}#q#{ID}" - postInfo = `<%= readHTML('PostInfo.html') %>` + postInfo = { innerHTML: PostInfoPage } ### File Info ### @@ -155,13 +161,13 @@ Build = shortFilename = Build.shortFilename file.name fileThumb = if file.isSpoiler then Build.spoilerThumb(boardID) else file.thumbURL.replace(protocol, '') - fileBlock = `<%= readHTML('File.html') %>` + fileBlock = { innerHTML: FilePage } ### Whole Post ### postClass = if o.isReply then 'reply' else 'op' - wholePost = `<%= readHTML('Post.html') %>` + wholePost = `{ innerHTML: PostPage }` container = $.el 'div', className: "postContainer #{postClass}Container" @@ -238,7 +244,7 @@ Build = postCount = data.replies + 1 fileCount = data.images + !!data.ext - container = $.el 'div', `<%= readHTML('CatalogThread.html') %>` + container = $.el 'div', { innerHTML: CatalogThreadPage } $.before thread.OP.nodes.info, [container.childNodes...] for br in $$('br', thread.OP.nodes.comment) when br.previousSibling and br.previousSibling.nodeName is 'BR' @@ -266,6 +272,6 @@ Build = link = Build.postURL thread.board.ID, thread.ID, data.no $.el 'div', {className: 'catalog-reply'}, - `<%= readHTML('CatalogReply.html') %>` + `{ innerHTML: CatalogReplyPage }` SW.yotsuba.Build = Build diff --git a/tools/rollup-plugin-inline-file.js b/tools/rollup-plugin-inline-file.js new file mode 100644 index 000000000..df9b9c5f3 --- /dev/null +++ b/tools/rollup-plugin-inline-file.js @@ -0,0 +1,29 @@ +import { createFilter } from "rollup-pluginutils"; + +export default function inlineFile(opts = {}) { + if (!opts.include) { + throw Error("include option should be specified"); + } + + if (opts.transformer && typeof opts.transformer !== 'function') { + throw new Error('If transformer is given, it must be a function'); + } + + const filter = createFilter(opts.include, opts.exclude); + + return { + name: "inlineFile", + + transform(code, id) { + if (filter(id)) { + if (opts.transformer) { + code = opts.transformer(code); + } + return { + code: `export default ${JSON.stringify(code)};`, + map: { mappings: "" } + }; + } + } + }; +} \ No newline at end of file diff --git a/tools/rollup.js b/tools/rollup.js new file mode 100644 index 000000000..4758a3cbc --- /dev/null +++ b/tools/rollup.js @@ -0,0 +1,16 @@ +import { rollup } from "rollup"; +import inlineFile from "./rollup-plugin-inline-file"; + +rollup({ + entry: "main.js", + plugins: [ + inlineFile({ + include: ["**/*.html", "**/*.css"], + }), + inlineFile({ + include: ["**/*.png", "**/*.gif"], + // base64 encode + transformer: btoa + }) + ] +}); \ No newline at end of file