diff --git a/CHANGELOG.md b/CHANGELOG.md index e953f2d..fda8da6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,14 @@ # Changelog -## 3.1.0 (23.01.2020) +## 3.2.2 (03.02.2020) +* Support ZombieBox 2.6 +* Better logging and output + +## 3.2.1 (23.01.2020) * Implement `setPlaybackRate`, `getPlaybackRate` and `EVENT_RATE_CHANGE` on `StatefulVideo`. * Fail to `ERROR` state when no audio and video tracks can be played in current media file, particularly when they are DRM protected and proper `DRMClient` was not attached. -## 3.1.0 (16.01.2020) +## 3.2.0 (16.01.2020) * Implement `StatefulVideo` model with PlayReady DRM support. * Update ExoPlayer to 2.11.1 and other native components to their newest versions. diff --git a/index.js b/index.js index 8d26674..81ce5da 100644 --- a/index.js +++ b/index.js @@ -3,8 +3,9 @@ const fse = require('fs-extra'); const klaw = require('klaw'); const path = require('path'); const sharp = require('sharp'); -const chalk = require('chalk'); -const {AbstractPlatform, Application} = require('zombiebox'); +const {AbstractPlatform, Application, logger: zbLogger} = require('zombiebox'); + +const logger = zbLogger.createChild('Android'); /** @@ -76,7 +77,7 @@ class PlatformAndroid extends AbstractPlatform { /** * @override */ - async buildApp(application, distDir) { + async pack(application, distDir) { /** * @param {number} len * @return {string} @@ -92,26 +93,26 @@ class PlatformAndroid extends AbstractPlatform { const buildDir = path.join(distDir, 'src'); if (config.storeRelease) { - console.warn(chalk.yellow('Building unsigned release apk. It will not install unless signed.')); + logger.warn('Building unsigned release apk. It will not install unless signed.'); if (config.webViewDebug) { - console.warn(chalk.red('Building release with debug enabled')); + logger.warn('Building release with debug enabled'); } } if (!config.namespace) { config.namespace = buildConfig.project.name; - console.warn(chalk.yellow(`Namespace not set, using "${config.namespace}"`)); + logger.warn(`Namespace not set, using "${config.namespace}"`); } if (config.namespace.startsWith('test')) { config.namespace = createRandomString(); - console.warn(chalk.yellow(`Namespace could not start with "test", using ${config.namespace}`)); + logger.warn(`Namespace could not start with "test", using ${config.namespace}`); } if (!config.versionName) { config.versionName = application.getAppVersion(); - console.warn(chalk.yellow(`Version name not set, using "${config.versionName}"`)); + logger.warn(`Version name not set, using "${config.versionName}"`); } if (!config.versionCode && config.storeRelease) { @@ -120,25 +121,24 @@ class PlatformAndroid extends AbstractPlatform { if (!config.appId) { if (config.storeRelease) { - console.error(chalk.red(`Application id not set`)); - return Promise.reject(); + throw new Error(`Application id is required for store release`); } config.appId = `com.zombiebox.${config.namespace}.${createRandomString()}`; - console.warn(chalk.yellow(`Application id not set, using "${config.appId}"`)); + logger.warn(`Application id not set, using "${config.appId}"`); } - + logger.debug(`Cleaning ${buildDir}`); await fse.emptyDir(buildDir); await this._cloneSources(buildDir); await this._applyBuildConfig(config, buildDir); await this._copyResources(application, config, buildDir); await this._markDebugBuild(config, buildDir); - const zbBuildWarnings = await this._compileZbApplication(application, distDir, config, buildDir); + await this._copyZbApplication(config, distDir, buildDir); await this._compileApk(config, buildDir, config.namespace); - await this._copyApk(config, buildDir, distDir); + const apkPath = await this._copyApk(config, buildDir, distDir); - return zbBuildWarnings; + logger.output(`apk assembled: ${apkPath}`); } /** @@ -178,7 +178,9 @@ class PlatformAndroid extends AbstractPlatform { } } - return `${config.namespace} {\n\t${properties.join('\n\t')}\n}`; + const flavor = `${config.namespace} {\n\t${properties.join('\n\t')}\n}`; + logger.debug(`Application flavor: \n${flavor}`); + return flavor; } /** @@ -206,7 +208,7 @@ class PlatformAndroid extends AbstractPlatform { */ async _copyResources(application, config, buildDir) { if (!config.resPath) { - console.warn(chalk.yellow('No resources set, will use default zb resources')); + logger.warn('No resources set, will use default zb resources'); return; } @@ -219,7 +221,7 @@ class PlatformAndroid extends AbstractPlatform { const bannerPath = path.join(resPath, 'drawable', 'banner.png'); if (!await fse.pathExists(bannerPath)) { - console.warn(chalk.yellow('Banner image is not set. Will fall back to zb image')); + logger.warn('Banner image is not set. Will fall back to zb image'); const fallbackBanner = path.join(buildDir, 'app', 'src', 'main', 'res', 'drawable', 'banner.png'); const targetBannerPath = path.join(targetResPath, 'drawable', 'banner.png'); @@ -228,27 +230,19 @@ class PlatformAndroid extends AbstractPlatform { } /** - * @param {Application} application - * @param {string} distDir * @param {Object} config + * @param {string} distDir * @param {string} buildDir * @return {Promise} * @protected */ - async _compileZbApplication(application, distDir, config, buildDir) { - let zbAppPath; + async _copyZbApplication(config, distDir, buildDir) { if (config.useBundledHTML) { - zbAppPath = path.join(buildDir, 'app', 'src', config.namespace, 'assets', 'html', 'index.html'); - } else { - zbAppPath = path.join(buildDir, 'index.html'); + const zbAppPath = path.join(distDir, 'index.html'); + const distAppPath = path.join(buildDir, 'app', 'src', config.namespace, 'assets', 'html', 'index.html'); + await fse.ensureDir(path.dirname(distAppPath)); + await fse.copy(zbAppPath, distAppPath); } - - const buildHelper = application.getBuildHelper(); - - await fse.ensureDir(path.dirname(zbAppPath)); - const warnings = await buildHelper.writeIndexHTML(zbAppPath); - await buildHelper.copyStaticFiles(distDir); - return warnings; } /** @@ -263,6 +257,7 @@ class PlatformAndroid extends AbstractPlatform { return; } + logger.verbose(`Applying debug overlay to app icon`); const overlay = path.join(buildDir, 'app', 'src', 'main', 'res', 'drawable', 'debug.png'); const baseResourcesPath = path.join(buildDir, 'app', 'src', config.namespace, 'res'); @@ -301,12 +296,12 @@ class PlatformAndroid extends AbstractPlatform { const buildType = config.storeRelease ? 'Release' : 'Debug'; - console.log(chalk.green(`Compiling ${flavor} ${buildType} apk`)); + logger.info(`Compiling ${flavor} ${buildType} apk`); const capitalize = (string) => string.charAt(0).toUpperCase() + string.slice(1); const runGradle = async (args) => { - console.log(chalk.yellow('Running', `gradle ${args[0]}`)); + logger.debug(`Running gradle ${args[0]}`); await new Promise((resolve, reject) => { const gradleProcess = childProcess.execFile( @@ -318,7 +313,9 @@ class PlatformAndroid extends AbstractPlatform { (error) => error ? reject(error) : resolve() ); - gradleProcess.stdout.pipe(process.stdout); + if (zbLogger.levels[logger.level] >= zbLogger.levels.verbose) { + gradleProcess.stdout.pipe(process.stdout); + } gradleProcess.stderr.pipe(process.stderr); }); }; @@ -331,7 +328,7 @@ class PlatformAndroid extends AbstractPlatform { * @param {Object} config * @param {string} buildDir * @param {string} distDir - * @return {Promise} + * @return {Promise} * @protected */ async _copyApk(config, buildDir, distDir) { @@ -355,8 +352,10 @@ class PlatformAndroid extends AbstractPlatform { if (config.storeRelease && await fse.exists(releaseBuild)) { await fse.copy(releaseBuild, releaseTarget); + return releaseTarget; } else if (await fse.exists(debugBuild)) { await fse.copy(debugBuild, debugTarget); + return debugTarget; } } } diff --git a/lib/input.js b/lib/input.js index 8efda1b..3feab70 100644 --- a/lib/input.js +++ b/lib/input.js @@ -8,7 +8,7 @@ */ import AbstractInput from 'zb/device/abstract-input'; import UnsupportedFeature from 'zb/device/errors/unsupported-feature'; -import Keys from 'zb/device/input/keys'; +import Key from 'zb/device/input/key'; import Info from './info'; @@ -105,12 +105,12 @@ export default class Input extends AbstractInput { _createKeysMap() { const map = {}; - map[37] = Keys.LEFT; - map[38] = Keys.UP; - map[39] = Keys.RIGHT; - map[40] = Keys.DOWN; + map[37] = Key.LEFT; + map[38] = Key.UP; + map[39] = Key.RIGHT; + map[40] = Key.DOWN; - map[13] = Keys.ENTER; + map[13] = Key.ENTER; return map; } @@ -122,20 +122,20 @@ export default class Input extends AbstractInput { if (this._info.isSonyBravia()) { switch (event.key) { case 'ColorF0Red': - return Keys.RED; + return Key.RED; case 'ColorF1Green': - return Keys.GREEN; + return Key.GREEN; case 'ColorF2Yellow': - return Keys.YELLOW; + return Key.YELLOW; case 'ColorF3Blue': - return Keys.BLUE; + return Key.BLUE; case 'Info': - return Keys.INFO; + return Key.INFO; case 'MediaPlay': - return Keys.PLAY; + return Key.PLAY; case 'MediaPlayPause': - return Keys.PAUSE; + return Key.PAUSE; } } @@ -148,37 +148,37 @@ export default class Input extends AbstractInput { _createKeysMapForSonyBravia() { const zero = 48; - this._map[zero + 0] = Keys.DIGIT_0; - this._map[zero + 1] = Keys.DIGIT_1; - this._map[zero + 2] = Keys.DIGIT_2; - this._map[zero + 3] = Keys.DIGIT_3; - this._map[zero + 4] = Keys.DIGIT_4; - this._map[zero + 5] = Keys.DIGIT_5; - this._map[zero + 6] = Keys.DIGIT_6; - this._map[zero + 7] = Keys.DIGIT_7; - this._map[zero + 8] = Keys.DIGIT_8; - this._map[zero + 9] = Keys.DIGIT_9; + this._map[zero + 0] = Key.DIGIT_0; + this._map[zero + 1] = Key.DIGIT_1; + this._map[zero + 2] = Key.DIGIT_2; + this._map[zero + 3] = Key.DIGIT_3; + this._map[zero + 4] = Key.DIGIT_4; + this._map[zero + 5] = Key.DIGIT_5; + this._map[zero + 6] = Key.DIGIT_6; + this._map[zero + 7] = Key.DIGIT_7; + this._map[zero + 8] = Key.DIGIT_8; + this._map[zero + 9] = Key.DIGIT_9; - this._map[33] = Keys.PAGE_UP; - this._map[34] = Keys.PAGE_DOWN; + this._map[33] = Key.PAGE_UP; + this._map[34] = Key.PAGE_DOWN; // Bravia 2015 has separate Play and Pause keys, but they have the same keycode. // They can be identified by key property in _keyboardEventToKeyCode - this._map[179] = Keys.PLAY_PAUSE; + this._map[179] = Key.PLAY_PAUSE; - this._map[178] = Keys.STOP; - this._map[227] = Keys.REW; - this._map[228] = Keys.FWD; - this._map[176] = Keys.NEXT_CHAPTER; - this._map[177] = Keys.PREV_CHAPTER; + this._map[178] = Key.STOP; + this._map[227] = Key.REW; + this._map[228] = Key.FWD; + this._map[176] = Key.NEXT_CHAPTER; + this._map[177] = Key.PREV_CHAPTER; - this._map[27] = Keys.EXIT; + this._map[27] = Key.EXIT; } /** * @private */ _createKeysMapForNexus() { - this._map[179] = Keys.PLAY_PAUSE; + this._map[179] = Key.PLAY_PAUSE; } } diff --git a/package-lock.json b/package-lock.json index acb1d5d..5a8d10a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "zombiebox-platform-android-tv", - "version": "3.2.1", + "version": "3.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -85,7 +85,8 @@ "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true }, "acorn": { "version": "7.1.0", @@ -129,6 +130,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" @@ -389,14 +391,14 @@ } }, "browserslist": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.5.tgz", - "integrity": "sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg==", + "version": "4.8.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz", + "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001022", - "electron-to-chromium": "^1.3.338", - "node-releases": "^1.1.46" + "caniuse-lite": "^1.0.30001023", + "electron-to-chromium": "^1.3.341", + "node-releases": "^1.1.47" } }, "buffer": { @@ -428,15 +430,16 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001022", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz", - "integrity": "sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A==", + "version": "1.0.30001023", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001023.tgz", + "integrity": "sha512-C5TDMiYG11EOhVOA62W1p3UsJ2z4DsHtMBQtjzp3ZsUglcQn62WOUgW0y795c7A5uZ+GCEIvzkMatLIlAsbNTA==", "dev": true }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -591,6 +594,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -609,6 +613,55 @@ "simple-swizzle": "^0.2.2" } }, + "colornames": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", + "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "colorspace": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", + "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", + "dev": true, + "requires": { + "color": "3.0.x", + "text-hex": "1.0.x" + }, + "dependencies": { + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, "comment-parser": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.2.tgz", @@ -867,6 +920,17 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, + "diagnostics": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", + "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", + "dev": true, + "requires": { + "colorspace": "1.1.x", + "enabled": "1.0.x", + "kuler": "1.0.x" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -883,9 +947,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.340", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz", - "integrity": "sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww==", + "version": "1.3.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.344.tgz", + "integrity": "sha512-tvbx2Wl8WBR+ym3u492D0L6/jH+8NoQXqe46+QhbWH3voVPauGuZYeb1QAXYoOAWuiP2dbSvlBx0kQ1F3hu/Mw==", "dev": true }, "emoji-regex": { @@ -894,6 +958,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "enabled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", + "dev": true, + "requires": { + "env-variable": "0.0.x" + } + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -908,6 +981,12 @@ "once": "^1.4.0" } }, + "env-variable": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", + "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -926,9 +1005,9 @@ } }, "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", @@ -1187,9 +1266,9 @@ "dev": true }, "eslint-plugin-import": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.0.tgz", - "integrity": "sha512-NK42oA0mUc8Ngn4kONOPsPB1XhbUvNHqF+g307dPV28aknPoiNnKLFd9em4nkswwepdF5ouieqv5Th/63U7YJQ==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -1255,15 +1334,14 @@ } }, "eslint-plugin-jsdoc": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-20.3.1.tgz", - "integrity": "sha512-JQ25OXvseVm84pX2mcVvKtGwrZDeAxgFUkq11f/pJpbGJMANYcLaMAUuW7U3cGhapWh+Gj04At/enAt26dpOeg==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-21.0.0.tgz", + "integrity": "sha512-CdLGe2oyw5YAX9rxq9bVz7H2PK+r8PVwdGuvYGMBstpbVD/66yUAgRFQRsJwAsRKLmReo58Lw1jFdNcxdOc4eg==", "requires": { "comment-parser": "^0.7.2", "debug": "^4.1.1", "jsdoctypeparser": "^6.1.0", "lodash": "^4.17.15", - "object.entries-ponyfill": "^1.0.1", "regextras": "^0.7.0", "semver": "^6.3.0", "spdx-expression-parse": "^3.0.0" @@ -1418,6 +1496,18 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "fecha": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", + "dev": true + }, "figures": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", @@ -1510,9 +1600,9 @@ "dev": true }, "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz", + "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==", "dev": true, "requires": { "debug": "^3.0.0" @@ -1760,7 +1850,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-symbols": { "version": "1.0.1", @@ -2066,6 +2157,12 @@ "has": "^1.0.3" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", @@ -2165,6 +2262,15 @@ "graceful-fs": "^4.1.11" } }, + "kuler": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", + "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "dev": true, + "requires": { + "colornames": "^1.1.1" + } + }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", @@ -2266,6 +2372,19 @@ "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", "dev": true }, + "logform": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", + "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "dev": true, + "requires": { + "colors": "^1.2.1", + "fast-safe-stringify": "^2.0.4", + "fecha": "^2.3.3", + "ms": "^2.1.1", + "triple-beam": "^1.3.0" + } + }, "mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -2510,11 +2629,6 @@ "object-keys": "^1.0.11" } }, - "object.entries-ponyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz", - "integrity": "sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY=" - }, "object.values": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", @@ -2550,6 +2664,12 @@ "wrappy": "1" } }, + "one-time": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", + "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", + "dev": true + }, "onetime": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", @@ -3862,6 +3982,12 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -3929,6 +4055,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -4033,6 +4160,12 @@ } } }, + "text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4075,6 +4208,12 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", + "dev": true + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -4218,6 +4357,46 @@ "string-width": "^1.0.2 || 2" } }, + "winston": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", + "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", + "dev": true, + "requires": { + "async": "^2.6.1", + "diagnostics": "^1.1.1", + "is-stream": "^1.1.0", + "logform": "^2.1.1", + "one-time": "0.0.4", + "readable-stream": "^3.1.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.3.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", + "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "winston-transport": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", + "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", + "dev": true, + "requires": { + "readable-stream": "^2.3.6", + "triple-beam": "^1.2.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -4509,9 +4688,9 @@ } }, "zombiebox": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/zombiebox/-/zombiebox-2.5.0.tgz", - "integrity": "sha512-NDELq+9NFJXN9mF0c2LGsXCxR8019ElJ25ZkdtUTX9eKOA1c+jk5nNl27fpqik8XAPcx16pKNjDEDi7Sz/NQJg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/zombiebox/-/zombiebox-2.6.1.tgz", + "integrity": "sha512-MQA0Kipwe/dYaT8m7sH//YlFsvSC7J8l803dUEioqXZ+XWYqmEGMLgb5JYvsN43mfgcEpD/+O/UbbXaP9n4jmw==", "dev": true, "requires": { "archiver": "^3.1.1", @@ -4533,17 +4712,18 @@ "postcss-preset-env": "^6.7.0", "postcss-url": "^9.0.0", "postcss-values-parser": "^3.0.5", - "semver": "^7.1.1", + "semver": "^7.1.2", "send": "^0.17.1", "serve-static": "1.14.1", + "winston": "^3.2.1", "yargs": "^15.1.0", "zb-log-server": "0.0.6" }, "dependencies": { "semver": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.1.tgz", - "integrity": "sha512-WfuG+fl6eh3eZ2qAf6goB7nhiCd7NPXhmyFxigB/TOkQyeLP8w8GsVehvtGNtnNmyboz4TgeK40B1Kbql/8c5A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.1.2.tgz", + "integrity": "sha512-BJs9T/H8sEVHbeigqzIEo57Iu/3DG6c4QoqTfbQB3BPA4zgzAomh/Fk9E7QtjWQ8mx2dgA9YCfSF4y9k9bHNpQ==", "dev": true } } diff --git a/package.json b/package.json index 7d34918..08e1c04 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "zombiebox-platform-android-tv", "description": "ZombieBox platform for Android TV", - "version": "3.2.1", + "version": "3.2.2", "license": "MIT", "author": "Interfaced (http://interfaced.tv)", "homepage": "https://github.com/interfaced/zombiebox-platform-android-tv", @@ -33,23 +33,22 @@ "lint": "eslint ." }, "dependencies": { - "chalk": "^3.0.0", "eslint-import-resolver-zombiebox": "^1.0.1", - "eslint-plugin-jsdoc": "^20.3.1", + "eslint-plugin-jsdoc": "^21.0.0", "fs-extra": "^8.1.0", "klaw": "^3.0.0", "sharp": "^0.24.0" }, "peerDependencies": { - "zombiebox": "^2.5.0" + "zombiebox": "^2.6.1" }, "devDependencies": { "eslint": "^6.8.0", "eslint-config-interfaced": "^2.0.0", "eslint-plugin-header": "^3.0.0", - "eslint-plugin-import": "^2.20.0", + "eslint-plugin-import": "^2.20.1", "eslint-plugin-interfaced": "^2.0.0", "eslint-plugin-node": "^11.0.0", - "zombiebox": "^2.5.0" + "zombiebox": "^2.6.1" } }