From f22b3137513b30483384bd49187a70ef750a46d7 Mon Sep 17 00:00:00 2001 From: eight Date: Thu, 13 Feb 2020 00:06:03 +0800 Subject: [PATCH] Refactor: rewrite build script --- .eslintrc.yml | 9 + package-lock.json | 560 ++++++++++++++++++++++++++++++ package.json | 22 +- tools/.eslintrc | 9 - tools/build-vendor.js | 141 ++++++++ tools/update-codemirror-themes.js | 39 --- tools/update-libraries.js | 129 ------- tools/update-versions.js | 70 ---- 8 files changed, 725 insertions(+), 254 deletions(-) delete mode 100644 tools/.eslintrc create mode 100644 tools/build-vendor.js delete mode 100644 tools/update-codemirror-themes.js delete mode 100644 tools/update-libraries.js delete mode 100644 tools/update-versions.js diff --git a/.eslintrc.yml b/.eslintrc.yml index bc2145c8..87af0074 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -211,3 +211,12 @@ rules: wrap-iife: [2, inside] yield-star-spacing: [2, {before: true, after: false}] yoda: [2, never] + +overrides: + - files: [tools/*] + env: + node: true + browser: false + webextensions: false + parserOptions: + ecmaVersion: 2017 diff --git a/package-lock.json b/package-lock.json index 64c54923..e8f4578a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -676,6 +676,33 @@ "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", "dev": true }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true + }, + "agentkeepalive": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.0.tgz", + "integrity": "sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", @@ -789,6 +816,12 @@ } } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "archiver": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", @@ -1370,6 +1403,47 @@ "safe-json-stringify": "~1" } }, + "cacache": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-14.0.0.tgz", + "integrity": "sha512-+Nr/BnA/tjAUXza9gH8F+FSP+1HvWqCKt4c95dQr4EDVJVafbzmPZpLKCkLYexs6vSd2B/1TOXrAoNnqVPfvRA==", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "tar": "^6.0.0", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", + "dev": true + } + } + }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -2092,6 +2166,12 @@ } } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "chrome-launcher": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.12.0.tgz", @@ -2151,6 +2231,12 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cli-boxes": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", @@ -2367,6 +2453,20 @@ "xdg-basedir": "^4.0.0" } }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -2633,6 +2733,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "detect-indent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", @@ -2662,6 +2768,12 @@ } } }, + "docopt": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", + "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -2765,6 +2877,16 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -2791,6 +2913,12 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2872,6 +3000,27 @@ "event-emitter": "~0.3.5" } }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, "es6-set": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", @@ -3712,6 +3861,12 @@ "pend": "~1.2.0" } }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, "figures": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", @@ -3974,6 +4129,27 @@ } } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4153,6 +4329,18 @@ "type-fest": "^0.8.1" } }, + "globalyzer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz", + "integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==", + "dev": true + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", @@ -4315,6 +4503,22 @@ } } }, + "http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-Z2EICWNJou7Tr9Bd2M2UqDJq3A9F2ePG9w3lIpjoyuSyXFP9QbniJVu3XQYytuw5ebmG7dXSXO9PgAjJG8DDKA==", + "dev": true + }, + "http-proxy-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-3.0.0.tgz", + "integrity": "sha512-uGuJaBWQWDQCJI5ip0d/VTYZW0nRrlLWXA4A7P1jrsa+f77rW2yXz315oBt6zGCF6l8C2tlMxY7ffULCj+5FhA==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -4326,6 +4530,25 @@ "sshpk": "^1.7.0" } }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4341,6 +4564,12 @@ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4369,6 +4598,18 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4424,6 +4665,12 @@ "integrity": "sha512-JzF8q2BeZA1ZkE3XROwRpoMQ9ObMgTtp0JH8EXewlbkikuOj2GPLIpUipdO+VL8QsTr2teAJD02EFGGL5cO7uw==", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, "is-absolute": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", @@ -4577,6 +4824,12 @@ "is-path-inside": "^3.0.1" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "is-mergeable-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", @@ -5123,6 +5376,23 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "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" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, "lz-string-unsafe": { "version": "1.4.4-fork-1", "resolved": "https://registry.npmjs.org/lz-string-unsafe/-/lz-string-unsafe-1.4.4-fork-1.tgz", @@ -5146,6 +5416,29 @@ } } }, + "make-fetch-happen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-7.1.1.tgz", + "integrity": "sha512-7fNjiOXNZhNGQzG5P15nU97aZQtzPU2GVgVd7pnqnl5gnpLzMAD8bAe5YG4iW2s0PTqaZy9xGv4Wfqe872kRNQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.0", + "cacache": "^14.0.0", + "http-cache-semantics": "^4.0.3", + "http-proxy-agent": "^3.0.0", + "https-proxy-agent": "^4.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.1.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^7.0.1" + } + }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -5259,6 +5552,74 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.2.1.tgz", + "integrity": "sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-pipeline": "^1.2.2", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", + "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -5304,6 +5665,20 @@ "dev": true, "optional": true }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -5783,6 +6158,15 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5990,6 +6374,22 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, "psl": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", @@ -6299,6 +6699,21 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -6308,6 +6723,15 @@ "is-promise": "^2.1.0" } }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, "rx-lite": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", @@ -6478,6 +6902,30 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, + "shx": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.2.tgz", + "integrity": "sha512-aS0mWtW3T2sHAenrSrip2XGv39O9dXIFUqxAEWHEOS1ePtGIBavdPJY1kE2IHl14V/4iCbUiNDPGdyYTtmhSoA==", + "dev": true, + "requires": { + "es6-object-assign": "^1.0.3", + "minimist": "^1.2.0", + "shelljs": "^0.8.1" + }, + "dependencies": { + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, "sign-addon": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-2.0.4.tgz", @@ -6535,6 +6983,12 @@ } } }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -6663,6 +7117,37 @@ } } }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, "sonic-boom": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.6.tgz", @@ -6758,6 +7243,16 @@ "tweetnacl": "~0.14.0" } }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -6982,6 +7477,15 @@ "has-flag": "^3.0.0" } }, + "sync-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sync-version/-/sync-version-1.0.1.tgz", + "integrity": "sha1-Y6aglKmigcUqgA1obqu5ZgH4igs=", + "dev": true, + "requires": { + "docopt": "^0.6.2" + } + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -7050,6 +7554,28 @@ } } }, + "tar": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.1.tgz", + "integrity": "sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==", + "dev": true, + "requires": { + "chownr": "^1.1.3", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.3.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", + "dev": true + } + } + }, "tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", @@ -7101,6 +7627,16 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "tiny-glob": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz", + "integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==", + "dev": true, + "requires": { + "globalyzer": "^0.1.0", + "globrex": "^0.1.1" + } + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -7284,6 +7820,24 @@ "set-value": "^2.0.1" } }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -7775,6 +8329,12 @@ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs": { "version": "15.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.0.2.tgz", diff --git a/package.json b/package.json index 0ef22026..4157f6f1 100644 --- a/package.json +++ b/package.json @@ -15,22 +15,30 @@ "jsonlint": "^1.6.3", "less-bundle": "github:openstyles/less-bundle#v0.1.0", "lz-string-unsafe": "^1.4.4-fork-1", + "make-fetch-happen": "^7.1.1", "semver-bundle": "^0.1.1", + "shx": "^0.3.2", "stylelint-bundle": "^8.0.0", "stylus-lang-bundle": "^0.54.5", + "sync-version": "^1.0.1", + "tiny-glob": "^0.2.6", "usercss-meta": "^0.9.0", + "uuid": "^3.4.0", "web-ext": "^4.0.0", "webext-tx-fix": "^0.3.3" }, "scripts": { - "lint": "eslint **/*.js --cache || exit 0", - "update": "npm run update-main", + "lint": "eslint \"**/*.js\" --cache", + "test": "npm run lint && web-ext lint", "update-locales": "tx pull --all && webext-tx-fix", - "update-main": "npm run update-versions && npm run update-vendor", "update-transifex": "tx push -s", - "update-vendor": "node tools/update-libraries.js && node tools/update-codemirror-themes.js", - "update-versions": "node tools/update-versions", - "zip": "npm run update-versions && node tools/zip.js", - "start": "web-ext run" + "build-vendor": "shx rm -rf vendor/* && node tools/build-vendor", + "zip": "node tools/zip.js", + "start": "web-ext run", + "preversion": "npm test", + "version": "sync-version manifest.json && git add ." + }, + "engines": { + "node": ">=10.0.0" } } diff --git a/tools/.eslintrc b/tools/.eslintrc deleted file mode 100644 index 1a20dc34..00000000 --- a/tools/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -# https://github.com/eslint/eslint/blob/master/docs/rules/README.md - -parserOptions: - ecmaVersion: 2017 - -env: - browser: true - es6: true - node: true diff --git a/tools/build-vendor.js b/tools/build-vendor.js new file mode 100644 index 00000000..69c867f8 --- /dev/null +++ b/tools/build-vendor.js @@ -0,0 +1,141 @@ +/* eslint-env node */ +'use strict'; +const path = require('path'); + +const endent = require('endent'); +const fetch = require('make-fetch-happen'); +const fse = require('fs-extra'); +const glob = require('tiny-glob'); + +const files = { + 'codemirror': [ + 'addon/comment/comment.js', + 'addon/dialog', + 'addon/edit/closebrackets.js', + 'addon/edit/matchbrackets.js', + 'addon/fold/brace-fold.js', + 'addon/fold/comment-fold.js', + 'addon/fold/foldcode.js', + 'addon/fold/foldgutter.*', + 'addon/fold/indent-fold.js', + 'addon/hint/css-hint.js', + 'addon/hint/show-hint.*', + 'addon/lint/css-lint.js', + 'addon/lint/json-lint.js', + 'addon/lint/lint.*', + 'addon/scroll/annotatescrollbar.js', + 'addon/search/matchesonscrollbar.*', + 'addon/search/searchcursor.js', + 'addon/selection/active-line.js', + 'theme' + ], + 'jsonlint': [ + 'lib/jsonlint.js → jsonlint.js' + ], + 'less-bundle': [ + 'dist/less.min.js → less.min.js' + ], + 'lz-string-unsafe': [ + 'lz-string-unsafe.min.js' + ], + 'semver-bundle': [ + 'dist/semver.js → semver.js' + ], + 'stylelint-bundle': [ + 'stylelint-bundle.min.js' + ], + 'stylus-lang-bundle': [ + 'stylus.min.js' + ], + 'usercss-meta': [ + 'dist/usercss-meta.min.js → usercss-meta.min.js' + ], + 'db-to-cloud': [ + 'dist/db-to-cloud.min.js → db-to-cloud.min.js' + ], + 'uuid': [ + 'https://bundle.run/uuid@{VERSION}/v4.js → uuid.min.js' + ] +}; + +main().catch(console.error); + +async function main() { + for (const pkg in files) { + console.log('\x1b[32m%s\x1b[0m', `Building ${pkg}...`); + // other files + const [fetched, copied] = await buildFiles(pkg, files[pkg]); + // README + await fse.outputFile(`vendor/${pkg}/README.md`, generateReadme(pkg, fetched, copied)); + // LICENSE + await fse.copy(`node_modules/${pkg}/LICENSE`, `vendor/${pkg}/LICENSE`); + } + console.log('\x1b[32m%s\x1b[0m', 'updating codemirror themes list...'); + await fse.outputFile('edit/codemirror-themes.js', await generateThemeList()); +} + +async function generateThemeList() { + const themes = (await fse.readdir('vendor/codemirror/theme')) + .filter(name => name.endsWith('.css')) + .map(name => name.replace('.css', '')) + .sort(); + return endent` + /* exported CODEMIRROR_THEMES */ + // this file is generated by update-codemirror-themes.js + 'use strict'; + + const CODEMIRROR_THEMES = ${JSON.stringify(themes, null, 2)}; + `.replace(/"/g, "'") + '\n'; +} + +async function buildFiles(pkg, patterns) { + const fetchedFiles = []; + const copiedFiles = []; + for (let pattern of patterns) { + pattern = pattern.replace('{VERSION}', require(`${pkg}/package.json`).version); + const [src, dest] = pattern.split(/\s*→\s*/); + if (src.startsWith('http')) { + const content = await (await fetch(src)).text(); + fse.outputFile(`vendor/${pkg}/${dest}`, content); + fetchedFiles.push([src, dest]); + } else { + for (const file of glob(`node_modules/${pkg}/${src}`)) { + if (!dest) { + await fse.copy(file, path.join('vendor', path.relative('node_modules', file))); + } else { + await fse.copy(file, dest); + } + copiedFiles.push([path.relative(`node_modules/${pkg}`, file), dest]); + } + } + } + return [fetchedFiles, copiedFiles]; +} + +function generateReadme(lib, fetched, copied) { + const pkg = require(`${lib}/package.json`); + let txt = `## ${pkg.name} v${pkg.version}\n\n`; + if (fetched.length) { + txt += `Following files are downloaded from HTTP:\n\n${generateList(fetched)}\n\n`; + } + if (copied.length) { + txt += `Following files are copied from npm (node_modules):\n\n${generateList(copied)}\n`; + } + return txt; +} + +function generateList(list) { + return list.map(([src, dest]) => { + if (dest) { + return `* ${dest}: ${src}`; + } + return `* ${src}`; + }).join('\n'); +} + +// Rename CodeMirror$1 -> CodeMirror for development purposes +// FIXME: is this a workaround for old version of codemirror? +// function renameCodeMirrorVariable(filePath) { + // const file = fs.readFileSync(filePath, 'utf8'); + // fs.writeFileSync(filePath, file.replace(/CodeMirror\$1/g, 'CodeMirror')); +// } diff --git a/tools/update-codemirror-themes.js b/tools/update-codemirror-themes.js deleted file mode 100644 index 94f1b4e4..00000000 --- a/tools/update-codemirror-themes.js +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const fs = require('fs-extra'); -const path = require('path'); -const endent = require('endent'); - -// Update theme names list in codemirror-editing-hook.js -async function getThemes() { - const p = path.join(__dirname, '..', 'vendor/codemirror/theme/'); - const files = await fs.readdir(p); - return files - .filter(name => name.endsWith('.css')) - .map(name => name.replace('.css', '')) - .sort(); -} - -async function updateHook(themes) { - const fileName = path.join(__dirname, '..', 'edit/codemirror-themes.js'); - fs.writeFile(fileName, endent` - /* exported CODEMIRROR_THEMES */ - // this file is generated by update-codemirror-themes.js - 'use strict'; - - const CODEMIRROR_THEMES = ${JSON.stringify(themes, null, 2)}; - `.replace(/"/g, "'") + '\n'); -} - -function exit(err) { - if (err) { - console.error(err); - } - process.exit(err ? 1 : 0); -} - -getThemes() - .then(themes => updateHook(themes)) - .then(() => console.log('\x1b[32m%s\x1b[0m', 'codemirror themes list updated')) - .catch(exit); diff --git a/tools/update-libraries.js b/tools/update-libraries.js deleted file mode 100644 index 434eae5d..00000000 --- a/tools/update-libraries.js +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const fs = require('fs-extra'); -const path = require('path'); - -const root = path.join(__dirname, '..'); - -const files = { - 'codemirror': [ - '*', // only update existing vendor files - 'theme' // update all theme files - ], - 'jsonlint': [ - 'lib/jsonlint.js → jsonlint.js' - ], - 'less-bundle': [ - 'dist/less.min.js → less.min.js' - ], - 'lz-string-unsafe': [ - 'lz-string-unsafe.min.js' - ], - 'semver-bundle': [ - 'dist/semver.js → semver.js' - ], - 'stylelint-bundle': [ - 'stylelint-bundle.min.js' - ], - 'stylus-lang-bundle': [ - 'stylus.min.js' - ], - 'usercss-meta': [ - 'dist/usercss-meta.min.js → usercss-meta.min.js' - ], - 'db-to-cloud': [ - 'dist/db-to-cloud.min.js → db-to-cloud.min.js' - ] -}; - -async function updateReadme(lib) { - const pkg = await fs.readJson(`${root}/node_modules/${lib}/package.json`); - const file = `${root}/vendor/${lib}/README.md`; - const txt = await fs.readFile(file, 'utf8'); - return fs.writeFile(file, txt.replace(/\b([v@])[\d.]+[-\w]*\b/g, `$1${pkg.version}`)); -} - -function isFolder(fileOrFolder) { - const stat = fs.statSync(fileOrFolder); - return stat.isDirectory(); -} - -// Rename CodeMirror$1 -> CodeMirror for development purposes -function renameCodeMirrorVariable(filePath) { - const file = fs.readFileSync(filePath, 'utf8'); - fs.writeFileSync(filePath, file.replace(/CodeMirror\$1/g, 'CodeMirror')); -} - -function updateExisting(lib) { - const libRoot = `${root}/node_modules/`; - const vendorRoot = `${root}/vendor/`; - const folders = [lib]; - - const process = function () { - if (folders.length) { - const folder = folders.shift(); - const folderRoot = `${vendorRoot}${folder}`; - const entries = fs.readdirSync(folderRoot); - entries.forEach(entry => { - if (entry !== 'README.md' && entry !== 'LICENSE') { - // Ignore README.md & LICENSE files - const entryPath = `${folderRoot}/${entry}`; - try { - if (fs.existsSync(entryPath)) { - if (isFolder(entryPath)) { - folders.push(`${folder}/${entry}`); - } else { - fs.copySync(`${libRoot}${folder}/${entry}`, entryPath); - // Remove $1 from "CodeMirror$1" in codemirror.js - if (entry === 'codemirror.js') { - renameCodeMirrorVariable(entryPath); - } - } - } - } catch (err) { - // Show error in case file exists in vendor, but not in node_modules - console.log('\x1b[36m%s\x1b[0m', `"${entryPath}" doesn't exist!`); - } - } - }); - } - if (folders.length) { - process(); - } - }; - - process(); -} - -async function copy(lib, folder) { - const [src, dest] = folder.split(/\s*→\s*/); - try { - if (folder === '*') { - updateExisting(lib); - } else { - await fs.copy(`${root}/node_modules/${lib}/${src}`, `${root}/vendor/${lib}/${dest || src}`); - } - } catch (err) { - exit(err); - } -} - -function exit(err) { - if (err) { - console.error(err); - } - process.exit(err ? 1 : 0); -} - -Object.keys(files).forEach(lib => { - updateReadme(lib); - files[lib].forEach(folder => { - if (folder === '*') { - updateExisting(lib); - } else { - copy(lib, folder); - } - }); - console.log('\x1b[32m%s\x1b[0m', `${lib} files updated`); -}); diff --git a/tools/update-versions.js b/tools/update-versions.js deleted file mode 100644 index d5ca1d6d..00000000 --- a/tools/update-versions.js +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env node -'use strict'; - -const fs = require('fs-extra'); -const path = require('path'); -const root = path.join(__dirname, '..'); - -const good = '\x1b[32m%s\x1b[0m'; -const warn = '\x1b[36m%s\x1b[0m'; - -function exit(err) { - if (err) { - console.error(err); - } - process.exit(err ? 1 : 0); -} - -function verToArray(v) { - return v.replace('v', '').split('.').map(Number); -} - -// Simple compare function since we can't require semverCompare here -function compare(v1, v2) { - if (v1 === v2) { - return 0; - } - const [maj1, min1, pat1] = verToArray(v1); - const [maj2, min2, pat2] = verToArray(v2); - const majMatch = maj1 === maj2; - const minMatch = min1 === min2; - if ( - maj1 > maj2 || - majMatch && min1 > min2 || - majMatch && minMatch && pat1 > pat2 - ) { - return 1; - } - return -1; -} - -async function updateVersions() { - const regexp = /"([v\d.]+)"/; - const manifest = await fs.readFile(`${root}/manifest.json`, 'utf8'); - const pkg = await fs.readFile(`${root}/package.json`, 'utf8'); - const manifestVersion = manifest.match(regexp); - const pkgVersion = pkg.match(regexp); - if (manifestVersion && pkgVersion) { - const result = compare(manifestVersion[1], pkgVersion[1]); - let match, version, file, str; - if (result === 0) { - return console.log(good, 'Manifest & package versions match'); - } else if (result > 0) { - match = pkgVersion; - version = manifestVersion[1]; - file = 'package.json'; - str = pkg; - } else { - match = manifestVersion; - version = pkgVersion[1]; - file = 'manifest.json'; - str = manifest; - } - console.log(warn, `Updating ${file} to ${version}`); - str = str.slice(0, match.index + 1) + version + str.slice(match.index + match[1].length + 1); - return fs.writeFile(`${root}/${file}`, str); - } - throw Error(`Error reading ${manifestVersion ? '' : 'manifest.json'} ${pkgVersion ? '' : 'package.json'}`); -} - -updateVersions().catch(err => exit(err));