From 623922703d81315d2a2d599a252903b9273be7e4 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sat, 1 Dec 2018 09:39:12 -0500 Subject: [PATCH 01/18] Adding Mocha unit tests, closes issue #62 --- package-lock.json | 338 +++++++++++++++++++++++++++++++++++++++------- package.json | 10 +- test/setup.js | 35 +++++ test/test.js | 69 ++++++++++ yarn.lock | 189 +++++++++++++++++++++++++- 5 files changed, 586 insertions(+), 55 deletions(-) create mode 100644 test/setup.js create mode 100644 test/test.js diff --git a/package-lock.json b/package-lock.json index 43dfedc..64f42a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "create-evergreen-app", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1028,7 +1028,7 @@ }, "ansi-escapes": { "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, @@ -1226,7 +1226,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -1241,6 +1241,12 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1249,7 +1255,7 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -1377,7 +1383,7 @@ "dependencies": { "jsesc": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true } @@ -1715,7 +1721,7 @@ }, "bignumber.js": { "version": "2.4.0", - "resolved": "http://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=", "dev": true }, @@ -1866,6 +1872,12 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserify-aes": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -2033,7 +2045,7 @@ }, "cacache": { "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { @@ -2167,6 +2179,29 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -2184,6 +2219,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "check-types": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", @@ -2192,7 +2233,7 @@ }, "cheerio": { "version": "0.19.0", - "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.19.0.tgz", "integrity": "sha1-dy5wFfLuKZZQltcepBdbdas1SSU=", "dev": true, "requires": { @@ -2948,7 +2989,7 @@ }, "css-color-names": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -3305,7 +3346,7 @@ }, "d": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { @@ -3354,6 +3395,15 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -3524,6 +3574,12 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -3602,7 +3658,7 @@ "dependencies": { "domelementtype": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", "dev": true } @@ -3801,7 +3857,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -4145,7 +4201,7 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, @@ -4185,7 +4241,7 @@ "dependencies": { "get-stream": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true } @@ -4649,7 +4705,7 @@ }, "file-type": { "version": "3.9.0", - "resolved": "http://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "dev": true }, @@ -4943,7 +4999,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -4951,14 +5007,14 @@ } }, "fs-extra": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-write-stream-atomic": { @@ -5526,9 +5582,15 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-stream": { "version": "2.3.1", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, "requires": { @@ -5610,7 +5672,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -5623,7 +5685,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -5635,6 +5697,12 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "gzip-size": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.0.0.tgz", @@ -5647,7 +5715,7 @@ }, "handle-thing": { "version": "1.2.5", - "resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "dev": true }, @@ -5966,7 +6034,7 @@ }, "htmlparser2": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { @@ -5989,7 +6057,7 @@ }, "entities": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", "dev": true } @@ -6149,7 +6217,7 @@ }, "image-size": { "version": "0.4.0", - "resolved": "http://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.4.0.tgz", "integrity": "sha1-1LTh9hlS5MvBzqmmsMkV/stwdRA=", "dev": true }, @@ -6323,6 +6391,15 @@ } } }, + "intercept-stdout": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", + "integrity": "sha1-Emq/H65sUJpCipjGGmMVWQQq6f0=", + "dev": true, + "requires": { + "lodash.toarray": "^3.0.0" + } + }, "internal-ip": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", @@ -7018,9 +7095,9 @@ } }, "jsonfile": { - "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -7034,7 +7111,7 @@ }, "jsontoxml": { "version": "0.0.11", - "resolved": "http://registry.npmjs.org/jsontoxml/-/jsontoxml-0.0.11.tgz", + "resolved": "https://registry.npmjs.org/jsontoxml/-/jsontoxml-0.0.11.tgz", "integrity": "sha1-Nzq1sgcL43N6X7PjL9G3uBhwyqQ=", "dev": true }, @@ -7185,7 +7262,7 @@ }, "kew": { "version": "0.7.0", - "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, @@ -7659,6 +7736,24 @@ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, + "lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -7683,6 +7778,29 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -7726,6 +7844,17 @@ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", "dev": true }, + "lodash.toarray": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", + "integrity": "sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk=", + "dev": true, + "requires": { + "lodash._arraycopy": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -8081,7 +8210,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -8317,6 +8446,77 @@ } } }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -8455,7 +8655,7 @@ }, "next-tick": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, @@ -8900,7 +9100,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -8918,7 +9118,7 @@ }, "p-is-promise": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "dev": true }, @@ -9124,7 +9324,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -9152,6 +9352,12 @@ "integrity": "sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==", "dev": true }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pbkdf2": { "version": "3.0.17", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -9200,6 +9406,26 @@ "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", "dev": true }, + "fs-extra": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "progress": { "version": "1.1.8", "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz", @@ -9479,7 +9705,7 @@ "dependencies": { "color": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/color/-/color-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "dev": true, "requires": { @@ -9514,7 +9740,7 @@ "dependencies": { "color": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/color/-/color-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", "dev": true, "requires": { @@ -11231,7 +11457,7 @@ "dependencies": { "css-select": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { @@ -11262,7 +11488,7 @@ }, "htmlparser2": { "version": "3.3.0", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { @@ -11402,7 +11628,7 @@ }, "require-uncached": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { @@ -11607,7 +11833,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -12088,7 +12314,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -12476,7 +12702,7 @@ "dependencies": { "ansi-escape-sequences": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz", "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=", "dev": true, "requires": { @@ -12494,7 +12720,7 @@ }, "byte-size": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/byte-size/-/byte-size-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-3.0.0.tgz", "integrity": "sha1-QG+eI2aqXav2NnLrKR17sJSV2nU=", "dev": true }, @@ -12675,7 +12901,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -12690,7 +12916,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -13119,6 +13345,12 @@ "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-is": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", @@ -13324,6 +13556,12 @@ "viewport-dimensions": "^0.2.0" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14268,7 +14506,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, diff --git a/package.json b/package.json index 7a044a3..27f3cdf 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,8 @@ "lint": "eslint \"*.js\" \"./src/**/*.js\"", "serve": "npm run build && ws", "start": "npm run develop", - "test": "rimraf ./reports && karma start" + "test": "rimraf ./reports && karma start", + "test-install": "mocha --timeout 2000" }, "dependencies": { "@polymer/lit-element": "^0.6.1" @@ -54,6 +55,8 @@ "@webcomponents/webcomponentsjs": "^2.1.3", "babel-loader": "^8.0.2", "babel-plugin-transform-builtin-classes": "^0.6.1", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", "css-loader": "^1.0.0", "css-to-string-loader": "^0.1.3", "cssnano": "^4.1.0", @@ -61,7 +64,9 @@ "eslint-loader": "^2.1.1", "favicons-webpack-plugin": "0.0.9", "file-loader": "^2.0.0", + "fs-extra": "^7.0.1", "html-webpack-plugin": "^3.2.0", + "intercept-stdout": "^0.1.2", "istanbul-instrumenter-loader": "^3.0.1", "jasmine": "^3.2.0", "jasmine-core": "^3.2.1", @@ -74,6 +79,7 @@ "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^3.0.5", "local-web-server": "^2.6.0", + "mocha": "^5.2.0", "postcss-cssnext": "^3.1.0", "postcss-loader": "^3.0.0", "puppeteer": "^0.11.0", @@ -84,4 +90,4 @@ "webpack-dev-server": "^3.1.9", "webpack-merge": "^4.1.4" } -} \ No newline at end of file +} diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 0000000..520b5a3 --- /dev/null +++ b/test/setup.js @@ -0,0 +1,35 @@ +const os = require('os'); +const { spawn } = require('child_process'); + +module.exports = class Setup { + constructor(enableStdOut) { + this.enableStdOut = enableStdOut; // debugging tests + } + + run(args) { + return new Promise(async (resolve, reject) => { + const command = os.platform() === 'win32' ? 'npm.cmd' : 'node'; + const npm = spawn(command, args); + let err = ''; + + npm.on('close', code => { + if (code !== 0) { + reject(err); + return; + } + resolve(); + }); + npm.stderr.on('data', (data) => { + err = data.toString('utf8'); + if (this.enableStdOut) { + console.log(err); // eslint-disable-line + } + }); + npm.stdout.on('data', (data) => { + if (this.enableStdOut) { + console.log(data.toString('utf8')); // eslint-disable-line + } + }); + }); + } +}; \ No newline at end of file diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..360f2f8 --- /dev/null +++ b/test/test.js @@ -0,0 +1,69 @@ +const expect = require('chai').expect; +const chai = require('chai').use(require('chai-as-promised')); +const should = chai.should(); // eslint-disable-line +const fs = require('fs-extra'); +const path = require('path'); +const TestSetup = require('./setup'); +const exampleApp = 'my-app'; +let setup; + +before(() => { + setup = new TestSetup(); +}); + +describe('after running script without application name', function () { + it('should display the missing application name error', async function () { + await setup.run(['tasks/cea-install.js'], true).catch((err) => { + expect(err).to.be.equal('Missing Project Directory! Please specifiy the application name e.g. create-evergreen-app my-app\n'); + }); + }); +}); + +describe('after running script with new application name', function () { + this.timeout(60000); + before(async () => { + await setup.run(['tasks/cea-install.js', exampleApp]); + }); + + it('should create the target directory', async function () { + const targetExists = await fs.pathExists(exampleApp); + + expect(targetExists).to.be.true; + }); + it('should install dependencies', async function () { + const modulesDir = path.join(exampleApp, 'node_modules'); + const modules = [ + 'webpack', + '@polymer', + '@babel' + ]; + + return Promise.all(modules.map(async mod => { + return fs.pathExists(path.join(modulesDir, mod)).should.eventually.equal(true); + })); + }); + it('should copy project files', async function () { + const copyBlacklist = ['tasks/']; + const packageFiles = require(path.join(__dirname, '..', 'package.json')).files; + const files = packageFiles.filter((file) => { + if (copyBlacklist.indexOf(file) < 0) { + return file; + } + }); + + return Promise.all(files.map(async file => { + return await fs.pathExists(path.join(exampleApp, file)).should.eventually.equal(true); + })); + }); +}); + +describe('after running script with pre-existing application of the same name', function () { + after(async () => { + await fs.remove(exampleApp); + }); + it('should display an error', async function () { + await setup.run(['tasks/cea-install.js', 'my-app']).catch((err) => { + expect(err).to.be.equal('my-app already exists, existing project detected? Delete my-app to try again or run from a different directory.\n'); + }); + }); +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7155c34..64c034a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -914,6 +914,11 @@ assert@^1.1.1: dependencies: util "0.10.3" +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1278,6 +1283,11 @@ brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" resolved "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1499,6 +1509,25 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + chalk@^1.1.3: version "1.1.3" resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1521,6 +1550,11 @@ chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + check-types@^7.3.0: version "7.4.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" @@ -1766,6 +1800,11 @@ command-line-usage@^5.0.5: table-layout "^0.4.3" typical "^2.6.1" +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + commander@2.17.x, commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -2221,7 +2260,7 @@ debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.3, debug@^2.6. dependencies: ms "2.0.0" -debug@=3.1.0, debug@~3.1.0: +debug@3.1.0, debug@=3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -2253,6 +2292,13 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + deep-equal@^1.0.1, deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2371,6 +2417,11 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + diffie-hellman@^5.0.0: version "5.0.3" resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2674,7 +2725,7 @@ escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3198,6 +3249,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -3249,6 +3309,11 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + get-stream@^2.0.0: version "2.3.1" resolved "http://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -3277,6 +3342,18 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -3332,6 +3409,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + gzip-size@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.0.0.tgz#a55ecd99222f4c48fd8c01c625ce3b349d0a0e80" @@ -3450,6 +3532,11 @@ hasha@^2.2.0: is-stream "^1.0.1" pinkie-promise "^2.0.0" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= + he@1.2.x: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -3728,6 +3815,13 @@ inquirer@^6.1.0: strip-ansi "^4.0.0" through "^2.3.6" +intercept-stdout@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/intercept-stdout/-/intercept-stdout-0.1.2.tgz#126abf1fae6c509a428a98c61a631559042ae9fd" + integrity sha1-Emq/H65sUJpCipjGGmMVWQQq6f0= + dependencies: + lodash.toarray "^3.0.0" + internal-ip@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" @@ -4227,6 +4321,13 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -4601,6 +4702,21 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -4617,6 +4733,25 @@ lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4646,6 +4781,15 @@ lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" +lodash.toarray@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-3.0.2.tgz#2b204f0fa4f51c285c6f00c81d1cea5a23041179" + integrity sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk= + dependencies: + lodash._arraycopy "^3.0.0" + lodash._basevalues "^3.0.0" + lodash.keys "^3.0.0" + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -4980,7 +5124,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -5039,6 +5183,23 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@ dependencies: minimist "0.0.8" +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== + dependencies: + browser-stdout "1.3.1" + commander "2.15.1" + debug "3.1.0" + diff "3.5.0" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.5" + he "1.1.1" + minimatch "3.0.4" + mkdirp "0.5.1" + supports-color "5.4.0" + morgan@^1.6.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -5625,6 +5786,11 @@ path-to-regexp@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7298,6 +7464,13 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -7531,6 +7704,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-is@^1.6.16, type-is@~1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" @@ -7640,6 +7818,11 @@ units-css@^0.4.0: isnumeric "^0.2.0" viewport-dimensions "^0.2.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" From 6f6d4a2b9790c640b2440d7df53cf76e689b0d6b Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sat, 1 Dec 2018 09:43:33 -0500 Subject: [PATCH 02/18] removing unnecessary dependency --- package-lock.json | 89 +++++++++++------------------------------------ package.json | 1 - yarn.lock | 50 -------------------------- 3 files changed, 21 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index 64f42a0..e88a76b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5076,12 +5076,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5096,17 +5098,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5223,7 +5228,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5235,6 +5241,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5249,6 +5256,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5256,12 +5264,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5280,6 +5290,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5360,7 +5371,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5372,6 +5384,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5493,6 +5506,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6391,15 +6405,6 @@ } } }, - "intercept-stdout": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/intercept-stdout/-/intercept-stdout-0.1.2.tgz", - "integrity": "sha1-Emq/H65sUJpCipjGGmMVWQQq6f0=", - "dev": true, - "requires": { - "lodash.toarray": "^3.0.0" - } - }, "internal-ip": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", @@ -7736,24 +7741,6 @@ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, - "lodash._arraycopy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -7778,29 +7765,6 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -7844,17 +7808,6 @@ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", "dev": true }, - "lodash.toarray": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-3.0.2.tgz", - "integrity": "sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk=", - "dev": true, - "requires": { - "lodash._arraycopy": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", diff --git a/package.json b/package.json index 27f3cdf..75af616 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "file-loader": "^2.0.0", "fs-extra": "^7.0.1", "html-webpack-plugin": "^3.2.0", - "intercept-stdout": "^0.1.2", "istanbul-instrumenter-loader": "^3.0.1", "jasmine": "^3.2.0", "jasmine-core": "^3.2.1", diff --git a/yarn.lock b/yarn.lock index 64c034a..fb2bee6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3815,13 +3815,6 @@ inquirer@^6.1.0: strip-ansi "^4.0.0" through "^2.3.6" -intercept-stdout@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/intercept-stdout/-/intercept-stdout-0.1.2.tgz#126abf1fae6c509a428a98c61a631559042ae9fd" - integrity sha1-Emq/H65sUJpCipjGGmMVWQQq6f0= - dependencies: - lodash.toarray "^3.0.0" - internal-ip@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" @@ -4702,21 +4695,6 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -4733,25 +4711,6 @@ lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4781,15 +4740,6 @@ lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" -lodash.toarray@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-3.0.2.tgz#2b204f0fa4f51c285c6f00c81d1cea5a23041179" - integrity sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk= - dependencies: - lodash._arraycopy "^3.0.0" - lodash._basevalues "^3.0.0" - lodash.keys "^3.0.0" - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" From 9e0fe5cb118333fcf9374f3ac8a08a03846bc3bb Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sat, 1 Dec 2018 09:59:16 -0500 Subject: [PATCH 03/18] Adding lambdas where possible --- test/test.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/test.js b/test/test.js index 360f2f8..9288909 100644 --- a/test/test.js +++ b/test/test.js @@ -11,8 +11,8 @@ before(() => { setup = new TestSetup(); }); -describe('after running script without application name', function () { - it('should display the missing application name error', async function () { +describe('after running script without application name', () => { + it('should display the missing application name error', async () => { await setup.run(['tasks/cea-install.js'], true).catch((err) => { expect(err).to.be.equal('Missing Project Directory! Please specifiy the application name e.g. create-evergreen-app my-app\n'); }); @@ -25,12 +25,12 @@ describe('after running script with new application name', function () { await setup.run(['tasks/cea-install.js', exampleApp]); }); - it('should create the target directory', async function () { + it('should create the target directory', async () => { const targetExists = await fs.pathExists(exampleApp); expect(targetExists).to.be.true; }); - it('should install dependencies', async function () { + it('should install dependencies', async () => { const modulesDir = path.join(exampleApp, 'node_modules'); const modules = [ 'webpack', @@ -39,10 +39,10 @@ describe('after running script with new application name', function () { ]; return Promise.all(modules.map(async mod => { - return fs.pathExists(path.join(modulesDir, mod)).should.eventually.equal(true); + return await fs.pathExists(path.join(modulesDir, mod)).should.eventually.equal(true); })); }); - it('should copy project files', async function () { + it('should copy project files', async () => { const copyBlacklist = ['tasks/']; const packageFiles = require(path.join(__dirname, '..', 'package.json')).files; const files = packageFiles.filter((file) => { @@ -57,12 +57,12 @@ describe('after running script with new application name', function () { }); }); -describe('after running script with pre-existing application of the same name', function () { +describe('after running script with pre-existing application of the same name', () => { after(async () => { await fs.remove(exampleApp); }); - it('should display an error', async function () { - await setup.run(['tasks/cea-install.js', 'my-app']).catch((err) => { + it('should display an error', async () => { + await setup.run(['tasks/cea-install.js', exampleApp]).catch((err) => { expect(err).to.be.equal('my-app already exists, existing project detected? Delete my-app to try again or run from a different directory.\n'); }); }); From 2617e7c1686a6c6f52b88d118f734a8d536de4b9 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sun, 2 Dec 2018 05:28:22 -0500 Subject: [PATCH 04/18] Resolving issue #45 optional yarn install --- package.json | 4 +- tasks/cea-install.js | 39 +++++++++++++------ test/test.js | 90 +++++++++++++++++++++++++------------------- yarn.lock | 2 +- 4 files changed, 84 insertions(+), 51 deletions(-) diff --git a/package.json b/package.json index 75af616..8c0ae0d 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,9 @@ "test-install": "mocha --timeout 2000" }, "dependencies": { - "@polymer/lit-element": "^0.6.1" + "@polymer/lit-element": "^0.6.1", + "chalk": "^2.4.1", + "commander": "^2.19.0" }, "devDependencies": { "@babel/core": "^7.1.0", diff --git a/tasks/cea-install.js b/tasks/cea-install.js index e06187a..b10fa93 100755 --- a/tasks/cea-install.js +++ b/tasks/cea-install.js @@ -7,6 +7,9 @@ const fs = require('fs'); const os = require('os'); const path = require('path'); const { spawn } = require('child_process'); +const chalk = require('chalk'); +const commander = require('commander'); +const templatePkg = require(path.join(__dirname, '..', 'package.json')); let TARGET_DIR; @@ -14,33 +17,46 @@ console.log('-------------------------------------------------------'); console.log('Welcome to Create Evergreen App ♻️'); console.log('-------------------------------------------------------'); +const program = new commander.Command(templatePkg.name) + .version(templatePkg.version) + .arguments('') + .usage(`${chalk.green('')} [options]`) + .action(name => { + TARGET_DIR = name; + }) + .option('--yarn') + .parse(process.argv); + +if (program.yarn) { + console.log('Yarn Enabled'); +} + // Check target application directory/name is included in args // warn if directory is present, else create new target directory -const checkTargetDir = async appDir => { - if (!appDir) { +const checkTargetDir = async () => { + if (typeof TARGET_DIR === 'undefined') { console.error( - 'Missing Project Directory! Please specifiy the application name e.g. create-evergreen-app my-app' + `Missing Project Directory! Please specifiy the application name e.g. ${chalk.green('create-evergreen-app my-app')}` ); + console.log(); + console.log(`Run ${chalk.green('create-evergreen-app --help')} for available options`); process.exit(1); // eslint-disable-line no-process-exit } - const targetExists = await fs.existsSync(appDir); + const targetExists = await fs.existsSync(TARGET_DIR); if (targetExists) { console.error( - `${appDir} already exists, existing project detected? Delete ${appDir} to try again or run from a different directory.` + `${TARGET_DIR} already exists, existing project detected? Delete ${appDir} to try again or run from a different directory.` ); process.exit(1); // eslint-disable-line no-process-exit } - await fs.mkdirSync(appDir); - - return appDir; + return await fs.mkdirSync(TARGET_DIR); }; // Create new package.json const npmInit = async () => { - const templatePkg = require(path.join(__dirname, '..', 'package.json')); const appPkg = { name: TARGET_DIR, version: '0.1.0', @@ -111,7 +127,8 @@ const createGitIgnore = () => { // Install npm dependencies const install = () => { return new Promise((resolve, reject) => { - const command = os.platform() === 'win32' ? 'npm.cmd' : 'npm'; + const pkgMng = program.yarn ? 'yarn' : 'npm'; // default to npm + const command = os.platform() === 'win32' ? `${pkgMng}.cmd` : pkgMng; const args = ['install', '--save', '--save-exact', '--loglevel', 'error']; const process = spawn(command, args, { stdio: 'inherit' }); @@ -130,7 +147,7 @@ const install = () => { const run = async () => { try { console.log('Preparing project directory...'); - TARGET_DIR = await checkTargetDir(process.argv[2]); + await checkTargetDir(); console.log('Initializing npm dependencies...'); npmInit(); diff --git a/test/test.js b/test/test.js index 9288909..2fe2000 100644 --- a/test/test.js +++ b/test/test.js @@ -11,59 +11,73 @@ before(() => { setup = new TestSetup(); }); -describe('after running script without application name', () => { - it('should display the missing application name error', async () => { - await setup.run(['tasks/cea-install.js'], true).catch((err) => { - expect(err).to.be.equal('Missing Project Directory! Please specifiy the application name e.g. create-evergreen-app my-app\n'); +const testInstall = packageManager => { + describe(`after running script using ${packageManager} with new application name`, function () { + this.timeout(60000); + before(async () => { + const pkgMng = packageManager === 'yarn' ? '--yarn' : ''; + + await setup.run(['tasks/cea-install.js', exampleApp, pkgMng]); }); - }); -}); -describe('after running script with new application name', function () { - this.timeout(60000); - before(async () => { - await setup.run(['tasks/cea-install.js', exampleApp]); - }); + // Only remove test install after first run, save for next test + if (packageManager !== 'yarn') { + after(async () => { + await fs.remove(exampleApp); + }); + } - it('should create the target directory', async () => { - const targetExists = await fs.pathExists(exampleApp); + it('should create the target directory', async () => { + const targetExists = await fs.pathExists(exampleApp); - expect(targetExists).to.be.true; - }); - it('should install dependencies', async () => { - const modulesDir = path.join(exampleApp, 'node_modules'); - const modules = [ - 'webpack', - '@polymer', - '@babel' - ]; + expect(targetExists).to.be.true; + }); + it('should install dependencies', async () => { + const modulesDir = path.join(exampleApp, 'node_modules'); + const modules = [ + 'webpack', + '@polymer', + '@babel' + ]; - return Promise.all(modules.map(async mod => { - return await fs.pathExists(path.join(modulesDir, mod)).should.eventually.equal(true); - })); - }); - it('should copy project files', async () => { - const copyBlacklist = ['tasks/']; - const packageFiles = require(path.join(__dirname, '..', 'package.json')).files; - const files = packageFiles.filter((file) => { - if (copyBlacklist.indexOf(file) < 0) { - return file; - } + return Promise.all(modules.map(async mod => { + return await fs.pathExists(path.join(modulesDir, mod)).should.eventually.equal(true); + })); }); + it('should copy project files', async () => { + const copyBlacklist = ['tasks/']; + const packageFiles = require(path.join(__dirname, '..', 'package.json')).files; + const files = packageFiles.filter((file) => { + if (copyBlacklist.indexOf(file) < 0) { + return file; + } + }); - return Promise.all(files.map(async file => { - return await fs.pathExists(path.join(exampleApp, file)).should.eventually.equal(true); - })); + return Promise.all(files.map(async file => { + return await fs.pathExists(path.join(exampleApp, file)).should.eventually.equal(true); + })); + }); + }); +}; + +describe('after running script without application name', () => { + it('should display the missing application name error', async () => { + await setup.run(['tasks/cea-install.js'], true).catch((err) => { + expect(err).to.be.equal('Missing Project Directory! Please specifiy the application name e.g. create-evergreen-app my-app\n'); + }); }); }); +testInstall('npm'); +testInstall('yarn'); + describe('after running script with pre-existing application of the same name', () => { after(async () => { await fs.remove(exampleApp); }); it('should display an error', async () => { await setup.run(['tasks/cea-install.js', exampleApp]).catch((err) => { - expect(err).to.be.equal('my-app already exists, existing project detected? Delete my-app to try again or run from a different directory.\n'); + expect(err).to.be.equal(`${exampleApp} already exists, existing project detected? Delete my-app to try again or run from a different directory.\n`); }); }); -}); \ No newline at end of file +}); diff --git a/yarn.lock b/yarn.lock index fb2bee6..fa543c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1809,7 +1809,7 @@ commander@2.17.x, commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" -commander@^2.18.0: +commander@^2.18.0, commander@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" From 5747732a76b0dc3458f9949111986e5005e66c2e Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sun, 2 Dec 2018 05:35:32 -0500 Subject: [PATCH 05/18] Moving new dependencies to dev --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8c0ae0d..0605bdc 100644 --- a/package.json +++ b/package.json @@ -47,9 +47,7 @@ "test-install": "mocha --timeout 2000" }, "dependencies": { - "@polymer/lit-element": "^0.6.1", - "chalk": "^2.4.1", - "commander": "^2.19.0" + "@polymer/lit-element": "^0.6.1" }, "devDependencies": { "@babel/core": "^7.1.0", @@ -59,6 +57,8 @@ "babel-plugin-transform-builtin-classes": "^0.6.1", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", + "chalk": "^2.4.1", + "commander": "^2.19.0", "css-loader": "^1.0.0", "css-to-string-loader": "^0.1.3", "cssnano": "^4.1.0", From 42ab5554cce6e5011427bfda3645b5c2a81138e9 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Sun, 2 Dec 2018 05:50:22 -0500 Subject: [PATCH 06/18] missing target_dir output in targetExists error --- tasks/cea-install.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/cea-install.js b/tasks/cea-install.js index b10fa93..e513576 100755 --- a/tasks/cea-install.js +++ b/tasks/cea-install.js @@ -47,7 +47,7 @@ const checkTargetDir = async () => { if (targetExists) { console.error( - `${TARGET_DIR} already exists, existing project detected? Delete ${appDir} to try again or run from a different directory.` + `${TARGET_DIR} already exists, existing project detected? Delete ${TARGET_DIR} to try again or run from a different directory.` ); process.exit(1); // eslint-disable-line no-process-exit } From 506e6b8cdb2efcf121bf1226a475b7f2d91e1f50 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Fri, 7 Dec 2018 10:19:20 -0500 Subject: [PATCH 07/18] Adding Missing Manifest, closes #66 --- package-lock.json | 69 +++++++++++++++++++++++++++++++++++----- package.json | 3 +- webpack.config.common.js | 9 ++++-- yarn.lock | 38 +++++++++++++++++++--- 4 files changed, 103 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43dfedc..d4d9960 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "create-evergreen-app", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5020,12 +5020,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5040,17 +5042,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5167,7 +5172,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5179,6 +5185,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5193,6 +5200,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5200,12 +5208,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -5224,6 +5234,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -5304,7 +5315,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -5316,6 +5328,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -5437,6 +5450,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -13324,6 +13338,12 @@ "viewport-dimensions": "^0.2.0" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -14077,6 +14097,39 @@ "uuid": "^3.1.0" } }, + "webpack-manifest-plugin": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", + "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", + "dev": true, + "requires": { + "fs-extra": "^7.0.0", + "lodash": ">=3.5 <5", + "tapable": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + } + } + }, "webpack-merge": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", diff --git a/package.json b/package.json index 7a044a3..6f79f7e 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "webpack-bundle-analyzer": "^3.0.2", "webpack-cli": "^3.1.0", "webpack-dev-server": "^3.1.9", + "webpack-manifest-plugin": "^2.0.4", "webpack-merge": "^4.1.4" } -} \ No newline at end of file +} diff --git a/webpack.config.common.js b/webpack.config.common.js index c787fa8..d061825 100644 --- a/webpack.config.common.js +++ b/webpack.config.common.js @@ -1,4 +1,5 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); +const ManifestPlugin = require('webpack-manifest-plugin'); const path = require('path'); module.exports = { @@ -12,7 +13,7 @@ module.exports = { path: path.join(__dirname, 'public'), filename: '[name].[chunkhash].bundle.js' }, - + module: { rules: [{ test: /\.js$/, @@ -34,12 +35,14 @@ module.exports = { }, plugins: [ - new HtmlWebpackPlugin({ template: './index.html', chunksSortMode: 'dependency' + }), + new ManifestPlugin({ + fileName: 'manifest.json', + publicPath: '/' }) - ] }; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7155c34..0b4c26d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3198,6 +3198,15 @@ fs-extra@^1.0.0: jsonfile "^2.1.0" klaw "^1.0.0" +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -4227,6 +4236,13 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -4650,14 +4666,14 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.11.1, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + lodash@^3.2.0: version "3.10.1" resolved "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" -lodash@^4.0.0, lodash@^4.11.1, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - lodash@~2.4.1: version "2.4.2" resolved "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e" @@ -7640,6 +7656,11 @@ units-css@^0.4.0: isnumeric "^0.2.0" viewport-dimensions "^0.2.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -7905,6 +7926,15 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" +webpack-manifest-plugin@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz#e4ca2999b09557716b8ba4475fb79fab5986f0cd" + integrity sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg== + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + tapable "^1.0.0" + webpack-merge@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" From 64bba0da73fd08a99ed8a0c87b41011ebd1a98aa Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Fri, 7 Dec 2018 10:59:04 -0500 Subject: [PATCH 08/18] Fixing conflicting icon manifest --- src/components/header/header.js | 2 +- webpack.config.common.js | 6 ++++-- webpack.config.prod.js | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/header/header.js b/src/components/header/header.js index 7cdba0a..de12c84 100644 --- a/src/components/header/header.js +++ b/src/components/header/header.js @@ -11,7 +11,7 @@ class HeaderComponent extends LitElement {
-   +  

Welcome to Create Evergreen App!

diff --git a/webpack.config.common.js b/webpack.config.common.js index d061825..71c0745 100644 --- a/webpack.config.common.js +++ b/webpack.config.common.js @@ -1,6 +1,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const ManifestPlugin = require('webpack-manifest-plugin'); const path = require('path'); +const publicPath = '/'; module.exports = { context: path.resolve('./src'), @@ -11,7 +12,8 @@ module.exports = { output: { path: path.join(__dirname, 'public'), - filename: '[name].[chunkhash].bundle.js' + filename: 'js/[name].[chunkhash].bundle.js', + publicPath }, module: { @@ -41,7 +43,7 @@ module.exports = { }), new ManifestPlugin({ fileName: 'manifest.json', - publicPath: '/' + publicPath }) ] diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 6409c76..d428330 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -4,7 +4,7 @@ const FaviconsWebpackPlugin = require('favicons-webpack-plugin'); const webpackMerge = require('webpack-merge'); module.exports = webpackMerge(commonConfig, { - + mode: 'production', performance: { @@ -15,7 +15,7 @@ module.exports = webpackMerge(commonConfig, { new FaviconsWebpackPlugin({ logo: './favicon.png', emitStats: true, - prefix: '/', + prefix: 'icons/', statsFilename: 'icons/stats.json', inject: true, title: 'Create Evergreen App', @@ -39,5 +39,5 @@ module.exports = webpackMerge(commonConfig, { openAnalyzer: false }) ] - + }); \ No newline at end of file From edee57a799cdaf6bcff77358f99e9c551da7c428 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Wed, 9 Jan 2019 18:38:03 -0500 Subject: [PATCH 09/18] Adding Dockerfile, closes #68 --- Dockerfile | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3d4f148 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +# Modified Brett Fisher's node-docker-good-defaults https://github.com/BretFisher/node-docker-good-defaults/blob/master/Dockerfile +FROM node:10 + +# set our node environment, either development or production +# defaults to production, compose overrides this to development on build and run +ARG NODE_ENV=production +ENV NODE_ENV $NODE_ENV + +# default to port 8000 for node, and 9229 and 9230 (tests) for debug +ARG PORT=8000 +ENV PORT $PORT +EXPOSE $PORT 9229 9230 + +RUN npm i npm@latest -g + +# install dependencies first, in a different location for easier app bind mounting for local development +WORKDIR /opt +COPY package.json package-lock.json* ./ +RUN npm install && \ + npm install --only=dev && \ + npm cache clean --force +ENV PATH /opt/node_modules/.bin:$PATH + +WORKDIR /opt/app +COPY . /opt/app +RUN echo "node_modules" > .eslintignore + +# the official node image provides an unprivileged user as a security best practice +# https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user +RUN chown -R node /opt/app +USER node + +RUN npm run build + +# use `docker run --init in production` +# so that signals are passed properly. +CMD [ "ws" ] \ No newline at end of file From 800fe1d7f234a88e7e05c581b725de1b75926835 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Wed, 9 Jan 2019 18:39:35 -0500 Subject: [PATCH 10/18] Adding Dockerfile to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 7a044a3..45858fb 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ ".editorconfig", ".eslintrc", ".gitattributes", + "Dockerfile", "yarn.lock", "package-lock.json", "babel.config.js", From f17baa75ad8a53c9e2a5c66c5607670639329eea Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Thu, 10 Jan 2019 02:37:01 -0500 Subject: [PATCH 11/18] Adjusting for puppeteer --- Dockerfile | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3d4f148..bae3ad4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Modified Brett Fisher's node-docker-good-defaults https://github.com/BretFisher/node-docker-good-defaults/blob/master/Dockerfile -FROM node:10 +FROM thegreenhouse/nodejs-dev:0.4.0 # set our node environment, either development or production # defaults to production, compose overrides this to development on build and run @@ -25,11 +25,6 @@ WORKDIR /opt/app COPY . /opt/app RUN echo "node_modules" > .eslintignore -# the official node image provides an unprivileged user as a security best practice -# https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user -RUN chown -R node /opt/app -USER node - RUN npm run build # use `docker run --init in production` From b17c0aef3e2d7ebf750603ddbd36c8f35d88fec9 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Tue, 22 Jan 2019 22:00:44 -0500 Subject: [PATCH 12/18] Adding Docker guide to readme --- README.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dd3b01b..9e2bc30 100644 --- a/README.md +++ b/README.md @@ -128,4 +128,28 @@ For convenience, Create Evergreen App comes with the dependencies needed to run - For information on adding more browsers, see [the Karma docs](http://karma-runner.github.io/3.0/config/browsers.html). - For more information on testing in general, see [our wiki!](https://github.com/ProjectEvergreen/create-evergreen-app/wiki). -> Chrome headless is enabled by default since it is the most portable between local and continuous integration environments. \ No newline at end of file +> Chrome headless is enabled by default since it is the most portable between local and continuous integration environments. + +#### Docker + +Create Evergreen App comes Docker-ready with a built in Dockerfile + +To build and tag a docker image with any image/release name for your app: + +```bash +$ docker build -t imagename:releasename . +``` + +To run the docker image: + +```bash +$ docker run imagename:releasename +``` + +You can access the app in your browser at http://172.17.0.2:8000 (your container's IP at port 8000) + +To test the docker image: + +```bash +$ docker run --init imagename:releasename npm run test +``` \ No newline at end of file From 1b7cdd6dc2509ed3949aec621d7395b1f79df2d8 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Tue, 22 Jan 2019 22:04:01 -0500 Subject: [PATCH 13/18] Adding Docker init flag note --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e2bc30..3ec4715 100644 --- a/README.md +++ b/README.md @@ -143,11 +143,13 @@ $ docker build -t imagename:releasename . To run the docker image: ```bash -$ docker run imagename:releasename +$ docker run --init imagename:releasename ``` You can access the app in your browser at http://172.17.0.2:8000 (your container's IP at port 8000) +**Note** Use the `--init` flag so that the signals are passed correctly. + To test the docker image: ```bash From bfb998c245b249e7f9597d20d3587a82d7943222 Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Wed, 30 Jan 2019 20:27:30 -0500 Subject: [PATCH 14/18] Updating README and Dockerfile for development/testing --- Dockerfile | 4 ++-- README.md | 38 +++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index bae3ad4..57366d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,10 +6,10 @@ FROM thegreenhouse/nodejs-dev:0.4.0 ARG NODE_ENV=production ENV NODE_ENV $NODE_ENV -# default to port 8000 for node, and 9229 and 9230 (tests) for debug +# default to port 8000 for prod, 1981 for dev, and 9876 for testing ARG PORT=8000 ENV PORT $PORT -EXPOSE $PORT 9229 9230 +EXPOSE $PORT 1981 9876 RUN npm i npm@latest -g diff --git a/README.md b/README.md index 3ec4715..8591670 100644 --- a/README.md +++ b/README.md @@ -140,18 +140,46 @@ To build and tag a docker image with any image/release name for your app: $ docker build -t imagename:releasename . ``` -To run the docker image: +To run the docker image in production: ```bash -$ docker run --init imagename:releasename +$ docker run --init --name mycontainer imagename:releasename ``` -You can access the app in your browser at http://172.17.0.2:8000 (your container's IP at port 8000) +**Note** Use the `--init` flag so that the exit signals are passed correctly. -**Note** Use the `--init` flag so that the signals are passed correctly. +Which should display something like: + +``` +Serving at http://e899fd0ef42c:8000, http://127.0.0.1:8000, http://172.17.0.2:8000 +``` + +You will need to access your app using the container's IP and port(yours will be different, but it's the third URL shown above). + +Otherwise, you can get your container `IPAddress` with: + +``` +docker inspect mycontainer +``` + +#### Docker Development + +You can run your application's webpack-dev-server within a container by modifiying the webpack.config.develop.js with your container's IP address(yours will be different, see above) + +``` +host: '172.17.0.2', +``` + +You can mount and run your application's `src` folder so that your changes are immediately reflected within a running container with: + +``` +docker run --init --name mycontainer -v "$(pwd)"/src:/opt/app/src imagename:releasename npm run develop +``` + +#### Docker Testing To test the docker image: ```bash -$ docker run --init imagename:releasename npm run test +$ docker run --init imagename:releasename npm test ``` \ No newline at end of file From 5f6f13a0388e1027ff6fae336f86037d05389c6e Mon Sep 17 00:00:00 2001 From: HutchGrant Date: Wed, 30 Jan 2019 21:01:33 -0500 Subject: [PATCH 15/18] Fixing manifest and publicPath --- src/index.html | 8 ++++---- webpack.config.common.js | 9 +-------- webpack.config.develop.js | 10 ++++++++-- webpack.config.prod.js | 1 - 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/index.html b/src/index.html index 4326331..30b376a 100644 --- a/src/index.html +++ b/src/index.html @@ -10,7 +10,7 @@ - + @@ -25,13 +25,13 @@ - + - +