diff --git a/examples/plugin/wpackio.project.js b/examples/plugin/wpackio.project.js index 733aacf73..6e65a1a75 100644 --- a/examples/plugin/wpackio.project.js +++ b/examples/plugin/wpackio.project.js @@ -77,4 +77,21 @@ module.exports = { ...defaults, plugins: ['react-hot-loader/babel'], }), + // Files that you want to copy to your ultimate theme/plugin package + // Supports glob matching from minimatch + // @link + packageFiles: [ + 'inc/**', + 'vendor/**', + 'dist/**', + '*.php', + '*.md', + 'readme.txt', + 'languages/**', + 'layouts/**', + 'LICENSE', + '*.css', + ], + // Path to package directory, relative to the root + packageDirPath: 'package', }; diff --git a/examples/plugin/yarn.lock b/examples/plugin/yarn.lock index 25aeacf65..2e43a18f9 100644 --- a/examples/plugin/yarn.lock +++ b/examples/plugin/yarn.lock @@ -666,6 +666,13 @@ typed-styles "^0.0.5" warning "^3.0.0" +"@types/archiver@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@types/archiver/-/archiver-2.1.2.tgz#e84960d4872570d7c826589cd57f2c076bf198c5" + integrity sha512-UGcGgeMoGpFh97pQkzR+cgSrJDjVmO+CZ2N+WDI7i0QCOJE+PocpfHEEtePhlttULdbfOrzNi0yexg66E52Prw== + dependencies: + "@types/glob" "*" + "@types/browser-sync@^0.0.42": version "0.0.42" resolved "https://registry.yarnpkg.com/@types/browser-sync/-/browser-sync-0.0.42.tgz#cb048a6bd444f3c6b4a830f542f5724eeb5123d0" @@ -692,6 +699,26 @@ dependencies: "@types/node" "*" +"@types/cp-file@*": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/cp-file/-/cp-file-4.2.0.tgz#2b12186b50dad407b11021284627bdf4adb87a87" + integrity sha512-nkd9c0L2aWfsDFrkpxfGJ5bCKeiAv6lccbH9vxKeWYw9YuyqskjtRTrBEBAiea9R08OSiboQ4ssmwAVJMHmHHA== + +"@types/cpy@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/cpy/-/cpy-5.1.0.tgz#ced20cbae8528031ae5478f1d0fe4bca2518eda7" + integrity sha512-NU7IrYOZx+K2YCo7muReOj6FIxEWdWXCN7hgRhQ+h2lgpeLy27si9ZzdDwWCW+Q1RP9B1lDTJ368FPFSOp1ZqA== + dependencies: + "@types/cp-file" "*" + "@types/glob" "*" + +"@types/del@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/del/-/del-3.0.1.tgz#4712da8c119873cbbf533ad8dbf1baac5940ac5d" + integrity sha512-y6qRq6raBuu965clKgx6FHuiPu3oHdtmzMPXi8Uahsjdq1L6DL5fS/aY5/s71YwM7k6K1QIWvem5vNwlnNGIkQ== + dependencies: + "@types/glob" "*" + "@types/events@*": version "1.2.0" resolved "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" @@ -722,6 +749,15 @@ version "2.1.1" resolved "https://registry.yarnpkg.com/@types/find-up/-/find-up-2.1.1.tgz#1cd2d240f1ad1f48d32346074724dc3107248a11" +"@types/glob@*": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + "@types/gradient-string@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@types/gradient-string/-/gradient-string-1.1.0.tgz#821e31a05d0663d3c733d2afa3e45c8189bb2fa7" @@ -747,6 +783,13 @@ version "1.5.3" resolved "https://registry.yarnpkg.com/@types/loglevel/-/loglevel-1.5.3.tgz#adfce55383edc5998a2170ad581b3e23d6adb5b8" +"@types/make-dir@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/make-dir/-/make-dir-1.0.3.tgz#91fb52cefd07b0755d2373bcd46229765197ca3e" + integrity sha512-bFRvlvUdPwxj47K2yVh7OBL8Mu8h//5k/hQJkz0iAZAlxhnIDydFezGA96zehtnRfrZDuIyPd+RC2kmBGtcs0w== + dependencies: + "@types/node" "*" + "@types/memory-fs@*": version "0.3.2" resolved "https://registry.yarnpkg.com/@types/memory-fs/-/memory-fs-0.3.2.tgz#5d4753f9b390cb077c8c8af97bc96463399ceccd" @@ -763,6 +806,11 @@ version "2.0.0" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.0.tgz#5a7306e367c539b9f6543499de8dd519fac37a8b" +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + "@types/node@*", "@types/node@^10.11.3": version "10.12.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.2.tgz#d77f9faa027cadad9c912cd47f4f8b07b0fb0864" @@ -1080,13 +1128,16 @@ "@types/webpack-env" "^1.13.6" "@wpackio/scripts@file:../../packages/scripts": - version "2.4.0" + version "2.5.0" dependencies: "@babel/core" "^7.1.0" "@babel/preset-flow" "^7.0.0" "@babel/preset-typescript" "^7.1.0" + "@types/archiver" "^2.1.2" "@types/browser-sync" "^0.0.42" "@types/camelcase" "^4.1.0" + "@types/cpy" "^5.1.0" + "@types/del" "^3.0.1" "@types/execa" "^0.9.0" "@types/figlet" "^1.2.0" "@types/figures" "^2.0.0" @@ -1095,6 +1146,7 @@ "@types/handlebars" "^4.0.39" "@types/inquirer" "^0.0.43" "@types/log-symbols" "^2.0.0" + "@types/make-dir" "^1.0.3" "@types/node" "^10.11.3" "@types/ora" "^1.3.4" "@types/update-notifier" "^2.2.0" @@ -1104,6 +1156,7 @@ "@types/webpack-env" "^1.13.6" "@types/webpack-hot-middleware" "^2.16.4" "@wpackio/babel-preset-base" "^2.4.0" + archiver "^3.0.0" autoprefixer "^9.1.5" babel-loader "^8.0.2" boxen "^2.0.0" @@ -1112,7 +1165,9 @@ chalk "^2.4.1" clean-webpack-plugin "^0.1.19" commander "^2.18.0" + cpy "^7.0.1" css-loader "^1.0.0" + del "^3.0.0" dev-ip "^1.0.1" execa "^1.0.0" figlet "^1.2.0" @@ -1123,6 +1178,7 @@ handlebars "^4.0.12" inquirer "^6.2.0" log-symbols "^2.2.0" + make-dir "^1.3.0" mini-css-extract-plugin "^0.4.3" optimize-css-assets-webpack-plugin "^5.0.1" ora "^3.0.0" @@ -1259,6 +1315,37 @@ aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" +archiver-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.0.0.tgz#5639818a8b5d89d0ffc51b72c39283cf4fea14a1" + integrity sha512-JRBgcVvDX4Mwu2RBF8bBaHcQCSxab7afsxAPYDQ5W+19quIPP5CfKE7Ql+UHs9wYvwsaNR8oDuhtf5iqrKmzww== + dependencies: + glob "^7.0.0" + graceful-fs "^4.1.0" + lazystream "^1.0.0" + lodash.assign "^4.2.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.toarray "^4.4.0" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.0.0.tgz#50b2628cf032adcbf35d35d111b5324db95bfb69" + integrity sha512-5QeR6Xc5hSA9X1rbQfcuQ6VZuUXOaEdB65Dhmk9duuRJHYif/ZyJfuyJqsQrj34PFjU5emv5/MmfgA8un06onw== + dependencies: + archiver-utils "^2.0.0" + async "^2.0.0" + buffer-crc32 "^0.2.1" + glob "^7.0.0" + readable-stream "^2.0.0" + tar-stream "^1.5.0" + zip-stream "^2.0.1" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -1384,7 +1471,7 @@ async@1.5.2: version "1.5.2" resolved "http://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.5.0: +async@^2.0.0, async@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -1504,6 +1591,14 @@ binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -1716,6 +1811,29 @@ bs-snippet-injector@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz#61b5393f11f52559ed120693100343b6edb04dd5" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@^0.2.1: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1732,6 +1850,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -2054,6 +2180,16 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" +compress-commons@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" + integrity sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8= + dependencies: + buffer-crc32 "^0.2.1" + crc32-stream "^2.0.0" + normalize-path "^2.0.0" + readable-stream "^2.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2159,6 +2295,42 @@ cosmiconfig@^5.0.0: js-yaml "^3.9.0" parse-json "^4.0.0" +cp-file@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.0.0.tgz#f38477ece100b403fcf780fd34d030486beb693e" + integrity sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg== + dependencies: + graceful-fs "^4.1.2" + make-dir "^1.0.0" + nested-error-stacks "^2.0.0" + pify "^3.0.0" + safe-buffer "^5.0.1" + +cpy@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cpy/-/cpy-7.0.1.tgz#d817e4d81bd7f0f25ff812796c5f1392dc0fb485" + integrity sha512-Zo52tXKLJcgy/baacn6KaNoRAakkl2wb+R4u6qJ4wlD0uchncwRQcIk66PlGlkzuToCJO6A6PWX27Tdwc8LU2g== + dependencies: + arrify "^1.0.1" + cp-file "^6.0.0" + globby "^8.0.1" + nested-error-stacks "^2.0.0" + +crc32-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" + integrity sha1-483TtN8xaN10494/u8t7KX/pCPQ= + dependencies: + crc "^3.4.4" + readable-stream "^2.0.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2486,6 +2658,18 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -3144,6 +3328,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -3308,7 +3497,7 @@ globals@^11.1.0: version "11.8.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" -globby@8.0.1: +globby@8.0.1, globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" dependencies: @@ -3320,6 +3509,17 @@ globby@8.0.1: pify "^3.0.0" slash "^1.0.0" +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + globule@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" @@ -3344,6 +3544,11 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +graceful-fs@^4.1.0: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.14" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.14.tgz#1b6e8362ef8c5ecb5da799901f39297e3054773a" @@ -3874,6 +4079,18 @@ is-obj@^1.0.0: version "1.0.1" resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" @@ -4108,6 +4325,13 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4175,6 +4399,21 @@ lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.get@^4.0: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -4187,6 +4426,11 @@ lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4199,6 +4443,16 @@ lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -4237,7 +4491,7 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" -make-dir@^1.0.0: +make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: @@ -4530,6 +4784,11 @@ neo-async@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" +nested-error-stacks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" + integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -4653,12 +4912,17 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -4888,6 +5152,11 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5712,7 +5981,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -5959,7 +6228,7 @@ rgba-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -6557,6 +6826,19 @@ tapable@^1.0.0, tapable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" +tar-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -6648,6 +6930,11 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -7254,3 +7541,12 @@ yargs@^7.0.0: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +zip-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.0.1.tgz#48a062488afe91dda42f823700fae589753ccd34" + integrity sha512-c+eUhhkDpaK87G/py74wvWLtz2kzMPNCCkUApkun50ssE0oQliIQzWpTnwjB+MTKVIf2tGzIgHyqW/Y+W77ecQ== + dependencies: + archiver-utils "^2.0.0" + compress-commons "^1.2.0" + readable-stream "^2.0.0" diff --git a/packages/scripts/__tests__/config/getProjectAndServerConfig.spec.ts b/packages/scripts/__tests__/config/getProjectAndServerConfig.spec.ts index 4d0e7f200..33c8b0bc6 100644 --- a/packages/scripts/__tests__/config/getProjectAndServerConfig.spec.ts +++ b/packages/scripts/__tests__/config/getProjectAndServerConfig.spec.ts @@ -1,5 +1,10 @@ import path from 'path'; -import { getProjectAndServerConfig } from '../../src/config/getProjectAndServerConfig'; +import { + getProjectAndServerConfig, + validateProjectConfig, + validateServerConfig, +} from '../../src/config/getProjectAndServerConfig'; +import { ProjectConfig } from '../../src/config/project.config.default'; const pathToDummyRight = path.resolve( __dirname, @@ -89,3 +94,76 @@ describe('getProjectAndServerConfig', () => { ); }); }); + +// tslint:disable:no-object-literal-type-assertion +describe('validateProjectConfig', () => { + test('validates appName', () => { + expect(() => { + validateProjectConfig({ + appName: 'adasd-asdasd', + } as ProjectConfig); + }).toThrow('must be in camelCase'); + expect(() => { + validateProjectConfig({} as ProjectConfig); + }).toThrow('must be present'); + }); + test('validates files', () => { + expect(() => { + validateProjectConfig({ + appName: 'fooBar', + files: {}, + } as ProjectConfig); + }).toThrow('must be an array'); + expect(() => { + validateProjectConfig(({ + appName: 'fooBar', + files: [ + { + foo: 'bar', + }, + ], + } as unknown) as ProjectConfig); + }).toThrow('must have objects with'); + expect(() => { + validateProjectConfig(({ + appName: 'fooBar', + files: ['foo'], + } as unknown) as ProjectConfig); + }).toThrow('must have objects with'); + expect(() => { + validateProjectConfig(({ + appName: 'fooBar', + files: [ + { + name: 'foo', + }, + ], + } as unknown) as ProjectConfig); + }).toThrow('must have objects with'); + }); + test('validates packageDirPath', () => { + expect(() => { + validateProjectConfig(({ + appName: 'adasdAsdasd', + files: [{ name: 'foo', entry: './src/js.js' }], + } as unknown) as ProjectConfig); + }).toThrow('It defines the path to package output directory'); + expect(() => { + validateProjectConfig(({ + appName: 'adasdAsdasd', + files: [{ name: 'foo', entry: './src/js.js' }], + packageDirPath: '', + } as unknown) as ProjectConfig); + }).toThrow('It defines the path to package output directory'); + }); + test('validates packageFiles', () => { + expect(() => { + validateProjectConfig(({ + appName: 'adasdAsdasd', + files: [{ name: 'foo', entry: './src/js.js' }], + packageDirPath: 'package', + packageFiles: [], + } as unknown) as ProjectConfig); + }).toThrow('must be valid glob patterns'); + }); +}); diff --git a/packages/scripts/__tests__/helpers/dummyConfigRight.js b/packages/scripts/__tests__/helpers/dummyConfigRight.js index fb9f747f9..f4c9837b3 100644 --- a/packages/scripts/__tests__/helpers/dummyConfigRight.js +++ b/packages/scripts/__tests__/helpers/dummyConfigRight.js @@ -9,4 +9,6 @@ module.exports = { }, ], foo: 'bar', + packageDirPath: 'package', + packageFiles: ['**/*.js'], }; diff --git a/packages/scripts/__tests__/helpers/dummyPCRight.js b/packages/scripts/__tests__/helpers/dummyPCRight.js index 1c7896528..b8a478e09 100644 --- a/packages/scripts/__tests__/helpers/dummyPCRight.js +++ b/packages/scripts/__tests__/helpers/dummyPCRight.js @@ -8,4 +8,6 @@ module.exports = { name: 'app', }, ], + packageDirPath: 'package', + packageFiles: ['**/*.js'], }; diff --git a/packages/scripts/__tests__/helpers/wpackio.project.js b/packages/scripts/__tests__/helpers/wpackio.project.js index 1c7896528..b8a478e09 100644 --- a/packages/scripts/__tests__/helpers/wpackio.project.js +++ b/packages/scripts/__tests__/helpers/wpackio.project.js @@ -8,4 +8,6 @@ module.exports = { name: 'app', }, ], + packageDirPath: 'package', + packageFiles: ['**/*.js'], }; diff --git a/packages/scripts/package.json b/packages/scripts/package.json index eac4e9325..551e76284 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -22,8 +22,11 @@ "@babel/core": "^7.1.0", "@babel/preset-flow": "^7.0.0", "@babel/preset-typescript": "^7.1.0", + "@types/archiver": "^2.1.2", "@types/browser-sync": "^0.0.42", "@types/camelcase": "^4.1.0", + "@types/cpy": "^5.1.0", + "@types/del": "^3.0.1", "@types/execa": "^0.9.0", "@types/figlet": "^1.2.0", "@types/figures": "^2.0.0", @@ -32,6 +35,7 @@ "@types/handlebars": "^4.0.39", "@types/inquirer": "^0.0.43", "@types/log-symbols": "^2.0.0", + "@types/make-dir": "^1.0.3", "@types/node": "^10.11.3", "@types/ora": "^1.3.4", "@types/update-notifier": "^2.2.0", @@ -41,6 +45,7 @@ "@types/webpack-env": "^1.13.6", "@types/webpack-hot-middleware": "^2.16.4", "@wpackio/babel-preset-base": "^2.4.0", + "archiver": "^3.0.0", "autoprefixer": "^9.1.5", "babel-loader": "^8.0.2", "boxen": "^2.0.0", @@ -49,7 +54,9 @@ "chalk": "^2.4.1", "clean-webpack-plugin": "^0.1.19", "commander": "^2.18.0", + "cpy": "^7.0.1", "css-loader": "^1.0.0", + "del": "^3.0.0", "dev-ip": "^1.0.1", "execa": "^1.0.0", "figlet": "^1.2.0", @@ -60,6 +67,7 @@ "handlebars": "^4.0.12", "inquirer": "^6.2.0", "log-symbols": "^2.2.0", + "make-dir": "^1.3.0", "mini-css-extract-plugin": "^0.4.3", "optimize-css-assets-webpack-plugin": "^5.0.1", "ora": "^3.0.0", diff --git a/packages/scripts/src/bin/build.ts b/packages/scripts/src/bin/build.ts index bd9ece56b..8f169d3ae 100644 --- a/packages/scripts/src/bin/build.ts +++ b/packages/scripts/src/bin/build.ts @@ -2,7 +2,6 @@ import chalk from 'chalk'; import logSymbols from 'log-symbols'; import ora from 'ora'; import path from 'path'; -import PrettyError from 'pretty-error'; import { getProjectAndServerConfig } from '../config/getProjectAndServerConfig'; import { Build } from '../scripts/Build'; import { ProgramOptions } from './index'; @@ -26,8 +25,6 @@ export function build(options: ProgramOptions | undefined): void { spinner: 'dots', color: 'yellow', }); - // For error handling - const pe = new PrettyError(); // Set process.env.NODE_ENV to production process.env.NODE_ENV = 'production'; // Set process.env.BABEL_ENV to production diff --git a/packages/scripts/src/bin/index.ts b/packages/scripts/src/bin/index.ts index 50b9e9aa1..ba0cf3f26 100755 --- a/packages/scripts/src/bin/index.ts +++ b/packages/scripts/src/bin/index.ts @@ -6,6 +6,7 @@ import clearConsole from 'react-dev-utils/clearConsole'; import updateNotifier from 'update-notifier'; import { bootstrap } from './bootstrap'; import { build } from './build'; +import { pack } from './pack'; import { serve } from './serve'; import { bulletSymbol, contextHelp, printIntro } from './utils'; @@ -97,6 +98,24 @@ program build(options); }); +// Pack the script +program + .command('pack') + .description('Create distributable archive (.zip) file.') + .option('-c, --context [path]', contextHelp) + .option( + '-p, --project-config [path]', + 'Path to project config. If it differs from ./wpackio.project.js' + ) + .option( + '-s, --server-config [path]', + 'Path to server config. If it differs from ./wpackio.server.js' + ) + .action((options: ProgramOptions | undefined) => { + isValidCommand = true; + pack(options); + }); + // Init the project program .command('bootstrap') diff --git a/packages/scripts/src/bin/pack.ts b/packages/scripts/src/bin/pack.ts new file mode 100644 index 000000000..020da602e --- /dev/null +++ b/packages/scripts/src/bin/pack.ts @@ -0,0 +1,102 @@ +import chalk from 'chalk'; +import logSymbols from 'log-symbols'; +import ora from 'ora'; +import path from 'path'; +import { getProjectAndServerConfig } from '../config/getProjectAndServerConfig'; +import { Callbacks, Pack } from '../scripts/Pack'; +import { ProgramOptions } from './index'; +import { + endPackInfo, + getFileCopyProgress, + prettyPrintError, + resolveCWD, + watchEllipsis, + wpackLogoSmall, +} from './utils'; + +/** + * Start the `wpackio-scripts build` command. + * + * @param options Option as received from CLI. + */ +export function pack(options: ProgramOptions | undefined): void { + // For spinner + const spinText = `${wpackLogoSmall}: creating distributable zip file${watchEllipsis}`; + const spinner = ora({ + text: spinText, + spinner: 'dots', + color: 'yellow', + }); + // Get project and server config JSONs. + const cwd = resolveCWD(options); + const relCwd = path.relative(process.cwd(), cwd); + console.log( + `${logSymbols.success} startup: ${chalk.cyan( + relCwd === '' ? '.' : relCwd + )}` + ); + try { + const { + projectConfig, + serverConfig, + projectConfigPath, + serverConfigPath, + } = getProjectAndServerConfig(cwd, options); + console.log( + `${logSymbols.success} project config: ${chalk.cyan( + path.relative(cwd, projectConfigPath) + )}` + ); + console.log( + `${logSymbols.success} server config: ${chalk.cyan( + path.relative(cwd, serverConfigPath) + )}` + ); + // Start the webpack/browserSync server + spinner.start(); + const packer = new Pack( + projectConfig, + { + onMkDirPackage: p => { + spinner.succeed( + `created directory ${path.relative(cwd, p)}` + ); + spinner.start(spinText); + }, + onClean: paths => { + let sucText = `package directory is already clean`; + if (paths.length) { + sucText = `deleted ${paths.length} old files`; + } + spinner.succeed(sucText); + spinner.start(spinText); + }, + onMkDirSlug: p => { + spinner.succeed( + `created package directory ${path.relative(cwd, p)}` + ); + spinner.start(spinText); + }, + onBeforeCopy: () => { + spinner.text = getFileCopyProgress(); + }, + onCopyProgress: progress => { + spinner.text = getFileCopyProgress(progress); + }, + onCopy: () => { + spinner.succeed(); + spinner.start(`creating zip archive of the package`); + }, + onZip: result => { + spinner.succeed(`done creating zip archive of the package`); + endPackInfo(result); + }, + }, + cwd + ); + } catch (e) { + spinner.stop(); + prettyPrintError(e, 'could not start webpack compiler.'); + process.exit(1); + } +} diff --git a/packages/scripts/src/bin/utils.ts b/packages/scripts/src/bin/utils.ts index 7d6946a9f..e1984b35d 100644 --- a/packages/scripts/src/bin/utils.ts +++ b/packages/scripts/src/bin/utils.ts @@ -1,5 +1,6 @@ import boxen from 'boxen'; import chalk from 'chalk'; +import { ProgressData } from 'cpy'; import figlet from 'figlet'; import figures from 'figures'; import findUp from 'find-up'; @@ -8,6 +9,7 @@ import logSymbols from 'log-symbols'; import path from 'path'; import PrettyError from 'pretty-error'; import { WpackioError } from '../errors/WpackioError'; +import { ArchiveResolve } from '../scripts/Pack'; let isYarnCache: boolean | null = null; @@ -233,4 +235,58 @@ export function prettyPrintError( const pe = new PrettyError(); console.error(pe.render(e)); } + console.log('\n\n\n'); +} + +export function getFileCopyProgress(progress?: ProgressData): string { + let done = 0; + let totalFiles = 0; + let filesDone = 0; + let size = 0; + if (progress) { + done = Math.round( + (progress.completedFiles / progress.totalFiles) * 100 + ); + totalFiles = progress.totalFiles; + filesDone = progress.completedFiles; + size = progress.completedSize; + } + const pbDoneLength = Math.floor((done / 100) * 20); + + const pbDone = chalk.green('='.repeat(pbDoneLength)); + const pbDoing = chalk.dim('-'.repeat(20 - pbDoneLength)); + + return `copying files to packages [${pbDone}${pbDoing}] ${chalk.yellow( + done.toString() + )}% ${chalk.magenta(filesDone.toString())}${chalk.dim('/')}${chalk.cyan( + totalFiles.toString() + )} File ${chalk.blue((size / 1024).toFixed(2))}KB`; +} + +export function endPackInfo(results: ArchiveResolve): void { + console.log('\n'); + const msg = `${wpackLogoSmall} package and archive was ${chalk.green( + 'successful' + )}. + +We have created ${chalk.magenta('.zip')} archive file for you +to distribute directly or work through CI/CD server. + + ${bulletSymbol} Zip Location: ${chalk.blue(results.relPath)}. + ${bulletSymbol} File Size: ${chalk.blue( + (results.size / 1024).toFixed(2) + )} KB. + ${bulletSymbol} For more info, visit: ${wpackLink}. + +To spread the ${chalk.red(figures.heart)} please tweet.`; + + console.log( + boxen(msg, { + padding: 1, + borderColor: 'cyan', + align: 'left', + float: 'left', + borderStyle: 'round', + }) + ); } diff --git a/packages/scripts/src/config/project.config.default.ts b/packages/scripts/src/config/project.config.default.ts index 5e1d9cf4a..51ec37e69 100644 --- a/packages/scripts/src/config/project.config.default.ts +++ b/packages/scripts/src/config/project.config.default.ts @@ -87,7 +87,9 @@ export interface ProjectConfig { alias?: webpack.Resolve['alias']; errorOverlay?: boolean; optimizeSplitChunks: boolean; - watch?: string; + watch?: string | string[]; + packageFiles: string[]; + packageDirPath: string; } /** @@ -149,4 +151,21 @@ export const projectConfigDefault: ProjectConfig = { optimizeSplitChunks: true, // Usually PHP and other files to watch and reload when changed watch: 'inc/**/*.php', + // Files that you want to copy to your ultimate theme/plugin package + // Supports glob matching from minimatch + // @link + packageFiles: [ + 'inc/**', + 'vendor/**', + 'dist/**', + '*.php', + '*.md', + 'readme.txt', + 'languages/**', + 'layouts/**', + 'LICENSE', + '*.css', + ], + // Path to package directory, relative to the root + packageDirPath: 'package', }; diff --git a/packages/scripts/src/scripts/Pack.ts b/packages/scripts/src/scripts/Pack.ts new file mode 100644 index 000000000..4c1f8dbbc --- /dev/null +++ b/packages/scripts/src/scripts/Pack.ts @@ -0,0 +1,131 @@ +import archiver from 'archiver'; +import cpy from 'cpy'; +import del from 'del'; +import fs from 'fs'; +import makeDir from 'make-dir'; +import path from 'path'; +import { ProjectConfig } from '../config/project.config.default'; + +export interface Callbacks { + onMkDirPackage(path: string): void; + onClean(paths: string[]): void; + onMkDirSlug(path: string): void; + onCopy(): void; + onBeforeCopy(): void; + onCopyProgress(progress: cpy.ProgressData): void; + onZip(result: ArchiveResolve): void; +} + +export interface ArchiveResolve { + size: number; + path: string; + relPath: string; +} + +export class Pack { + private projectConfig: ProjectConfig; + private packageSlugPath: string; + private packageDirPath: string; + private packageZipPath: string; + private cwd: string; + private callbacks: Callbacks; + + constructor( + projectConfig: ProjectConfig, + callbacks: Callbacks, + cwd: string + ) { + this.projectConfig = projectConfig; + this.cwd = cwd; + this.callbacks = callbacks; + this.packageDirPath = path.resolve( + this.cwd, + projectConfig.packageDirPath + ); + this.packageSlugPath = path.resolve( + this.cwd, + this.packageDirPath, + projectConfig.slug + ); + this.packageZipPath = path.resolve( + this.cwd, + this.packageDirPath, + `${this.projectConfig.slug}.zip` + ); + } + + public async pack(): Promise { + // First make the directory if needed + const packagePath = await this.mkDirPackage(); + this.callbacks.onMkDirPackage(packagePath); + // Clean up + const cleanUps = await this.clean(); + this.callbacks.onClean(cleanUps); + // Create copy to (slug) directory + const slugPath = await this.mkDirPackageSlug(); + this.callbacks.onMkDirSlug(slugPath); + // Copy files + this.callbacks.onBeforeCopy(); + await this.copy(); + this.callbacks.onCopy(); + // Zip + const result = await this.zip(); + this.callbacks.onZip(result); + } + + private async mkDirPackage(): Promise { + return makeDir(this.packageDirPath); + } + + private async clean(): Promise { + return del(`${this.packageDirPath}/**`); + } + + private async mkDirPackageSlug(): Promise { + return makeDir(this.packageSlugPath); + } + + private async copy(): Promise { + return cpy(this.projectConfig.packageFiles, this.packageSlugPath).on( + 'progress', + this.callbacks.onCopyProgress + ); + } + + private async zip(): Promise { + return new Promise((resolve, reject) => { + // Create the stream + const output = fs.createWriteStream(this.packageZipPath); + // Create archiver object + const archive = archiver('zip', { + zlib: { level: 9 }, + }); + + // Resolve when output is closed + output.on('close', () => { + resolve({ + size: archive.pointer(), + path: `${this.packageZipPath}`, + relPath: path.relative(this.cwd, this.packageZipPath), + }); + }); + + // Reject on blocking errors and warnings + archive.on('error', err => { + reject(err); + }); + + // Pipe archive to the file + archive.pipe(output); + + // Append the directory + archive.directory( + `${this.packageSlugPath}/`, + this.projectConfig.slug + ); + + // finalize + archive.finalize(); + }); + } +} diff --git a/packages/scripts/src/scripts/Server.ts b/packages/scripts/src/scripts/Server.ts index c7d22f735..bb49073e6 100644 --- a/packages/scripts/src/scripts/Server.ts +++ b/packages/scripts/src/scripts/Server.ts @@ -164,7 +164,10 @@ export class Server { // Watch for user defined files, when it changes, reload // When that change, reload if (this.projectConfig.watch) { - bs.watch(this.projectConfig.watch).on('change', bs.reload); + bs.watch(this.projectConfig.watch as string).on( + 'change', + bs.reload + ); } // We don't need to watch for manifest, because if user is changing // Config, then she does need to restart. It won't be picked up diff --git a/packages/scripts/templates/wpackio.project.js.hbs b/packages/scripts/templates/wpackio.project.js.hbs index 8b133915e..c3f5af110 100644 --- a/packages/scripts/templates/wpackio.project.js.hbs +++ b/packages/scripts/templates/wpackio.project.js.hbs @@ -65,4 +65,21 @@ module.exports = { optimizeSplitChunks: true, // Usually PHP and other files to watch and reload when changed watch: '{{watch}}', + // Files that you want to copy to your ultimate theme/plugin package + // Supports glob matching from minimatch + // @link + packageFiles: [ + 'inc/**', + 'vendor/**', + 'dist/**', + '*.php', + '*.md', + 'readme.txt', + 'languages/**', + 'layouts/**', + 'LICENSE', + '*.css', + ], + // Path to package directory, relative to the root + packageDirPath: 'package', }; diff --git a/yarn.lock b/yarn.lock index 33858515f..b4a86a4eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1312,6 +1312,13 @@ version "1.1.2" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" +"@types/archiver@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@types/archiver/-/archiver-2.1.2.tgz#e84960d4872570d7c826589cd57f2c076bf198c5" + integrity sha512-UGcGgeMoGpFh97pQkzR+cgSrJDjVmO+CZ2N+WDI7i0QCOJE+PocpfHEEtePhlttULdbfOrzNi0yexg66E52Prw== + dependencies: + "@types/glob" "*" + "@types/browser-sync@^0.0.42": version "0.0.42" resolved "https://registry.yarnpkg.com/@types/browser-sync/-/browser-sync-0.0.42.tgz#cb048a6bd444f3c6b4a830f542f5724eeb5123d0" @@ -1344,6 +1351,26 @@ dependencies: "@types/node" "*" +"@types/cp-file@*": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@types/cp-file/-/cp-file-4.2.0.tgz#2b12186b50dad407b11021284627bdf4adb87a87" + integrity sha512-nkd9c0L2aWfsDFrkpxfGJ5bCKeiAv6lccbH9vxKeWYw9YuyqskjtRTrBEBAiea9R08OSiboQ4ssmwAVJMHmHHA== + +"@types/cpy@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/cpy/-/cpy-5.1.0.tgz#ced20cbae8528031ae5478f1d0fe4bca2518eda7" + integrity sha512-NU7IrYOZx+K2YCo7muReOj6FIxEWdWXCN7hgRhQ+h2lgpeLy27si9ZzdDwWCW+Q1RP9B1lDTJ368FPFSOp1ZqA== + dependencies: + "@types/cp-file" "*" + "@types/glob" "*" + +"@types/del@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/del/-/del-3.0.1.tgz#4712da8c119873cbbf533ad8dbf1baac5940ac5d" + integrity sha512-y6qRq6raBuu965clKgx6FHuiPu3oHdtmzMPXi8Uahsjdq1L6DL5fS/aY5/s71YwM7k6K1QIWvem5vNwlnNGIkQ== + dependencies: + "@types/glob" "*" + "@types/events@*": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" @@ -1411,6 +1438,13 @@ version "1.5.3" resolved "https://registry.yarnpkg.com/@types/loglevel/-/loglevel-1.5.3.tgz#adfce55383edc5998a2170ad581b3e23d6adb5b8" +"@types/make-dir@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/make-dir/-/make-dir-1.0.3.tgz#91fb52cefd07b0755d2373bcd46229765197ca3e" + integrity sha512-bFRvlvUdPwxj47K2yVh7OBL8Mu8h//5k/hQJkz0iAZAlxhnIDydFezGA96zehtnRfrZDuIyPd+RC2kmBGtcs0w== + dependencies: + "@types/node" "*" + "@types/memory-fs@*": version "0.3.2" resolved "https://registry.yarnpkg.com/@types/memory-fs/-/memory-fs-0.3.2.tgz#5d4753f9b390cb077c8c8af97bc96463399ceccd" @@ -1937,6 +1971,37 @@ aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" +archiver-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.0.0.tgz#5639818a8b5d89d0ffc51b72c39283cf4fea14a1" + integrity sha512-JRBgcVvDX4Mwu2RBF8bBaHcQCSxab7afsxAPYDQ5W+19quIPP5CfKE7Ql+UHs9wYvwsaNR8oDuhtf5iqrKmzww== + dependencies: + glob "^7.0.0" + graceful-fs "^4.1.0" + lazystream "^1.0.0" + lodash.assign "^4.2.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.toarray "^4.4.0" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.0.0.tgz#50b2628cf032adcbf35d35d111b5324db95bfb69" + integrity sha512-5QeR6Xc5hSA9X1rbQfcuQ6VZuUXOaEdB65Dhmk9duuRJHYif/ZyJfuyJqsQrj34PFjU5emv5/MmfgA8un06onw== + dependencies: + archiver-utils "^2.0.0" + async "^2.0.0" + buffer-crc32 "^0.2.1" + glob "^7.0.0" + readable-stream "^2.0.0" + tar-stream "^1.5.0" + zip-stream "^2.0.1" + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -2100,7 +2165,7 @@ async@1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.4, async@^2.5.0: +async@^2.0.0, async@^2.1.4, async@^2.5.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -2371,6 +2436,14 @@ binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + blob@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" @@ -2592,6 +2665,11 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" +buffer-crc32@^0.2.1: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -2612,6 +2690,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -3066,6 +3152,16 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" +compress-commons@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" + integrity sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8= + dependencies: + buffer-crc32 "^0.2.1" + crc32-stream "^2.0.0" + normalize-path "^2.0.0" + readable-stream "^2.0.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -3261,6 +3357,42 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.0.2: js-yaml "^3.9.0" parse-json "^4.0.0" +cp-file@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.0.0.tgz#f38477ece100b403fcf780fd34d030486beb693e" + integrity sha512-OtHMgPugkgwHlbph25wlMKd358lZNhX1Y2viUpPoFmlBPlEiPIRhztYWha11grbGPnlM+urp5saVmwsChCIOEg== + dependencies: + graceful-fs "^4.1.2" + make-dir "^1.0.0" + nested-error-stacks "^2.0.0" + pify "^3.0.0" + safe-buffer "^5.0.1" + +cpy@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cpy/-/cpy-7.0.1.tgz#d817e4d81bd7f0f25ff812796c5f1392dc0fb485" + integrity sha512-Zo52tXKLJcgy/baacn6KaNoRAakkl2wb+R4u6qJ4wlD0uchncwRQcIk66PlGlkzuToCJO6A6PWX27Tdwc8LU2g== + dependencies: + arrify "^1.0.1" + cp-file "^6.0.0" + globby "^8.0.1" + nested-error-stacks "^2.0.0" + +crc32-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" + integrity sha1-483TtN8xaN10494/u8t7KX/pCPQ= + dependencies: + crc "^3.4.4" + readable-stream "^2.0.0" + +crc@^3.4.4: + version "3.8.0" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" + integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== + dependencies: + buffer "^5.1.0" + create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -3667,6 +3799,7 @@ del@^2.0.2: del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -4693,6 +4826,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" @@ -4977,6 +5115,11 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +graceful-fs@^4.1.0: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -6287,6 +6430,13 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -6433,7 +6583,7 @@ lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash.assign@^4.0.3, lodash.assign@^4.0.6: +lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -6445,6 +6595,21 @@ lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.get@^4.0, lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -6457,6 +6622,11 @@ lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6482,6 +6652,16 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -6530,7 +6710,7 @@ lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.3: pseudomap "^1.0.2" yallist "^2.1.2" -make-dir@^1.0.0: +make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: @@ -6916,6 +7096,11 @@ neo-async@^2.5.0: version "2.5.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" +nested-error-stacks@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" + integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -7059,6 +7244,11 @@ normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -8365,7 +8555,7 @@ read@1, read@~1.0.1: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: version "2.3.6" resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -9436,6 +9626,19 @@ tapable@^1.0.0, tapable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c" +tar-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + tar@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" @@ -9571,6 +9774,11 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -10410,3 +10618,12 @@ yargs@^4.8.1: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +zip-stream@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.0.1.tgz#48a062488afe91dda42f823700fae589753ccd34" + integrity sha512-c+eUhhkDpaK87G/py74wvWLtz2kzMPNCCkUApkun50ssE0oQliIQzWpTnwjB+MTKVIf2tGzIgHyqW/Y+W77ecQ== + dependencies: + archiver-utils "^2.0.0" + compress-commons "^1.2.0" + readable-stream "^2.0.0"