diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..6c5755ad --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,22 @@ +{ + "env": { "node": true, "jest": true }, + "parser": "@typescript-eslint/parser", + "parserOptions": { "ecmaVersion": 2020, "sourceType": "module" }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:import/typescript", + "plugin:prettier/recommended", + "prettier/@typescript-eslint" + ], + "plugins": ["@typescript-eslint", "jest"], + "rules": { + "camelcase": "off", + "require-atomic-updates": "off", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/camelcase": "off" + } +} \ No newline at end of file diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index ddf56014..ad9d4ea2 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -1,5 +1,19 @@ name: Main workflow -on: [push, pull_request] +on: + pull_request: + branches: + - master + - develop + - verbose + paths-ignore: + - '**.md' + push: + branches: + - master + - develop + - verbose + paths-ignore: + - '**.md' jobs: run: name: Run @@ -20,11 +34,14 @@ jobs: with: node-version: 12.x - - name: Cache node modules - uses: actions/cache@preview - id: cache + - name: Get npm cache directory + id: npm-cache + run: echo "::set-output name=dir::$(npm config get cache)" + + - name: Install dependencies + uses: actions/cache@v1 with: - path: node_modules + path: ${{ steps.npm-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- @@ -33,12 +50,18 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' run: npm install + - name: Prettier Format Check + run: npm run format-check + + - name: ESLint Check + run: npm run lint + - name: Run tests run: npm test - name: Send Coverage continue-on-error: true - timeout-minutes: 2 + timeout-minutes: 1 run: curl -s https://codecov.io/bash | bash -s -- -t ${{secrets.CODECOV_TOKEN}} -f coverage/clover.xml -n github-actions-codecov-${{ matrix.operating-system }}-php${{ matrix.php-versions }} - name: Setup PHP with extensions and custom config diff --git a/__tests__/coverage.test.ts b/__tests__/coverage.test.ts index 4add6dba..6d74bc9a 100644 --- a/__tests__/coverage.test.ts +++ b/__tests__/coverage.test.ts @@ -1,6 +1,4 @@ -import * as config from '../src/config'; import * as coverage from '../src/coverage'; -import * as extensions from '../src/coverage'; jest.mock('../src/extensions', () => ({ addExtension: jest.fn().mockImplementation(extension => { @@ -24,40 +22,44 @@ describe('Config tests', () => { }); it('checking addCoverage with PCOV on linux', async () => { - let linux: string = await coverage.addCoverage('pcov', '7.4', 'linux'); + const linux: string = await coverage.addCoverage('pcov', '7.4', 'linux'); expect(linux).toContain('addExtension pcov'); expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file'); expect(linux).toContain('sudo phpdismod -v 7.4 xdebug'); }); it('checking addCoverage with PCOV on darwin', async () => { - let darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin'); + const darwin: string = await coverage.addCoverage('pcov', '7.4', 'darwin'); expect(darwin).toContain('addExtension pcov'); }); it('checking addCoverage with Xdebug on windows', async () => { - let win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32'); + const win32: string = await coverage.addCoverage('xdebug', '7.3', 'win32'); expect(win32).toContain('addExtension xdebug'); }); it('checking addCoverage with Xdebug on linux', async () => { - let linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux'); + const linux: string = await coverage.addCoverage('xdebug', '7.4', 'linux'); expect(linux).toContain('addExtension xdebug'); }); it('checking addCoverage with Xdebug on darwin', async () => { - let darwin: string = await coverage.addCoverage('xdebug', '7.4', 'darwin'); + const darwin: string = await coverage.addCoverage( + 'xdebug', + '7.4', + 'darwin' + ); expect(darwin).toContain('addExtension xdebug'); }); it('checking disableCoverage windows', async () => { - let win32 = await coverage.addCoverage('none', '7.4', 'win32'); + const win32 = await coverage.addCoverage('none', '7.4', 'win32'); expect(win32).toContain('Disable-PhpExtension xdebug'); expect(win32).toContain('Disable-PhpExtension pcov'); }); it('checking disableCoverage on linux', async () => { - let linux: string = await coverage.addCoverage('none', '7.4', 'linux'); + const linux: string = await coverage.addCoverage('none', '7.4', 'linux'); expect(linux).toContain('sudo phpdismod -v 7.4 xdebug'); expect(linux).toContain('sudo phpdismod -v 7.4 pcov'); expect(linux).toContain('sudo sed -i "/xdebug/d" $ini_file'); @@ -65,7 +67,7 @@ describe('Config tests', () => { }); it('checking disableCoverage on darwin', async () => { - let darwin: string = await coverage.addCoverage('none', '7.4', 'darwin'); + const darwin: string = await coverage.addCoverage('none', '7.4', 'darwin'); expect(darwin).toContain('sudo sed -i \'\' "/xdebug/d" $ini_file'); expect(darwin).toContain('sudo sed -i \'\' "/pcov/d" $ini_file'); }); diff --git a/__tests__/extensions.test.ts b/__tests__/extensions.test.ts index 0fe63b5c..d9e310cd 100644 --- a/__tests__/extensions.test.ts +++ b/__tests__/extensions.test.ts @@ -10,7 +10,7 @@ describe('Extension tests', () => { expect(win32).toContain('Install-PhpExtension xdebug'); expect(win32).toContain('Install-PhpExtension pcov'); win32 = await extensions.addExtension('xdebug, pcov', '7.4', 'win32'); - const extension_url: string = + const extension_url = 'https://xdebug.org/files/php_xdebug-2.8.0-7.4-vc15.dll'; expect(win32).toContain( 'Invoke-WebRequest -Uri ' + diff --git a/__tests__/install.test.ts b/__tests__/install.test.ts index d6093bf8..bbd93a49 100644 --- a/__tests__/install.test.ts +++ b/__tests__/install.test.ts @@ -10,11 +10,11 @@ jest.mock('../src/install', () => ({ version: string, os_version: string ): Promise => { - let extension_csv: string = process.env['extension-csv'] || ''; - let ini_values_csv: string = process.env['ini-values-csv'] || ''; - let coverage_driver: string = process.env['coverage'] || ''; + const extension_csv: string = process.env['extension-csv'] || ''; + const ini_values_csv: string = process.env['ini-values-csv'] || ''; + const coverage_driver: string = process.env['coverage'] || ''; - let script: string = 'initial script'; + let script = 'initial script ' + filename + version + os_version; if (extension_csv) { script += 'install extensions'; } @@ -30,19 +30,20 @@ jest.mock('../src/install', () => ({ ), run: jest.fn().mockImplementation( async (): Promise => { - let os_version: string = process.env['RUNNER_OS'] || ''; - let version: string = process.env['php-version'] || ''; - let script: string = ''; + const os_version: string = process.env['RUNNER_OS'] || ''; + const version: string = process.env['php-version'] || ''; + let script = ''; switch (os_version) { case 'darwin': script = await install.build(os_version + '.sh', version, os_version); script += 'sh script.sh ' + version + ' ' + __dirname; break; - case 'linux': - let pecl: string = process.env['pecl'] || ''; + case 'linux': { + const pecl: string = process.env['pecl'] || ''; script = await install.build(os_version + '.sh', version, os_version); script += 'sh script.sh ' + version + ' ' + pecl + ' ' + __dirname; break; + } case 'win32': script = await install.build(os_version + '.sh', version, os_version); script += @@ -72,7 +73,7 @@ function setEnv( extension_csv: string, ini_values_csv: string, coverage_driver: string, - pecl: any + pecl: string ): void { process.env['php-version'] = version; process.env['RUNNER_OS'] = os; @@ -116,7 +117,7 @@ describe('Install', () => { expect(script).toContain('set coverage driver'); expect(script).toContain('sh script.sh 7.3 true'); - setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', true); + setEnv('7.3', 'linux', 'a, b', 'a=b', 'x', 'true'); // @ts-ignore script = await install.run(); expect(script).toContain('initial script'); diff --git a/__tests__/utils.test.ts b/__tests__/utils.test.ts index 4778f639..e17a77a8 100644 --- a/__tests__/utils.test.ts +++ b/__tests__/utils.test.ts @@ -27,28 +27,35 @@ describe('Utils tests', () => { }); it('checking asyncForEach', async () => { - let array: Array = [1, 2, 3, 4]; - let sum: number = 0; - await utils.asyncForEach(array, function(num: number): void { - sum += num; + const array: Array = ['a', 'b', 'c']; + let concat = ''; + await utils.asyncForEach(array, async function(str: string): Promise { + concat += str; }); - expect(sum).toBe(10); + expect(concat).toBe('abc'); + }); + + it('checking asyncForEach', async () => { + expect(await utils.color('error')).toBe('31'); + expect(await utils.color('success')).toBe('32'); + expect(await utils.color('any')).toBe('32'); + expect(await utils.color('warning')).toBe('33'); }); it('checking readScripts', async () => { - let rc: string = fs.readFileSync( + const rc: string = fs.readFileSync( path.join(__dirname, '../src/scripts/7.4.sh'), 'utf8' ); - let darwin: string = fs.readFileSync( + const darwin: string = fs.readFileSync( path.join(__dirname, '../src/scripts/darwin.sh'), 'utf8' ); - let linux: string = fs.readFileSync( + const linux: string = fs.readFileSync( path.join(__dirname, '../src/scripts/linux.sh'), 'utf8' ); - let win32: string = fs.readFileSync( + const win32: string = fs.readFileSync( path.join(__dirname, '../src/scripts/win32.ps1'), 'utf8' ); @@ -64,11 +71,11 @@ describe('Utils tests', () => { }); it('checking writeScripts', async () => { - let testString: string = 'sudo apt-get install php'; - let runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || ''; - let script_path: string = path.join(runner_dir, 'test.sh'); + const testString = 'sudo apt-get install php'; + const runner_dir: string = process.env['RUNNER_TOOL_CACHE'] || ''; + const script_path: string = path.join(runner_dir, 'test.sh'); await utils.writeScript('test.sh', testString); - await fs.readFile(script_path, function(error: any, data: Buffer) { + await fs.readFile(script_path, function(error: Error | null, data: Buffer) { expect(testString).toBe(data.toString()); }); await cleanup(script_path); @@ -97,7 +104,7 @@ describe('Utils tests', () => { }); it('checking log', async () => { - let message: string = 'Test message'; + const message = 'Test message'; let warning_log: string = await utils.log(message, 'win32', 'warning'); expect(warning_log).toEqual('printf "\\033[33;1m' + message + ' \\033[0m"'); diff --git a/lib/config.js b/lib/config.js index 2244356d..a9e507d5 100644 --- a/lib/config.js +++ b/lib/config.js @@ -17,6 +17,47 @@ var __importStar = (this && this.__importStar) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const utils = __importStar(require("./utils")); +/** + * Add script to set custom ini values for unix + * + * @param ini_values_csv + */ +function addINIValuesUnix(ini_values_csv) { + return __awaiter(this, void 0, void 0, function* () { + const ini_values = yield utils.INIArray(ini_values_csv); + let script = '\n'; + yield utils.asyncForEach(ini_values, function (line) { + return __awaiter(this, void 0, void 0, function* () { + script += + (yield utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; + }); + }); + return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script; + }); +} +exports.addINIValuesUnix = addINIValuesUnix; +/** + * Add script to set custom ini values for windows + * + * @param ini_values_csv + */ +function addINIValuesWindows(ini_values_csv) { + return __awaiter(this, void 0, void 0, function* () { + const ini_values = yield utils.INIArray(ini_values_csv); + let script = '\n'; + yield utils.asyncForEach(ini_values, function (line) { + return __awaiter(this, void 0, void 0, function* () { + script += + (yield utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; + }); + }); + return ('Add-Content C:\\tools\\php\\php.ini "' + + ini_values.join('\n') + + '"' + + script); + }); +} +exports.addINIValuesWindows = addINIValuesWindows; /** * Function to add custom ini values * @@ -50,44 +91,3 @@ function addINIValues(ini_values_csv, os_version, no_step = false) { }); } exports.addINIValues = addINIValues; -/** - * Add script to set custom ini values for unix - * - * @param ini_values_csv - */ -function addINIValuesUnix(ini_values_csv) { - return __awaiter(this, void 0, void 0, function* () { - let ini_values = yield utils.INIArray(ini_values_csv); - let script = '\n'; - yield utils.asyncForEach(ini_values, function (line) { - return __awaiter(this, void 0, void 0, function* () { - script += - (yield utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; - }); - }); - return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script; - }); -} -exports.addINIValuesUnix = addINIValuesUnix; -/** - * Add script to set custom ini values for windows - * - * @param ini_values_csv - */ -function addINIValuesWindows(ini_values_csv) { - return __awaiter(this, void 0, void 0, function* () { - let ini_values = yield utils.INIArray(ini_values_csv); - let script = '\n'; - yield utils.asyncForEach(ini_values, function (line) { - return __awaiter(this, void 0, void 0, function* () { - script += - (yield utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; - }); - }); - return ('Add-Content C:\\tools\\php\\php.ini "' + - ini_values.join('\n') + - '"' + - script); - }); -} -exports.addINIValuesWindows = addINIValuesWindows; diff --git a/lib/coverage.js b/lib/coverage.js index 64eb59d8..3306ee51 100644 --- a/lib/coverage.js +++ b/lib/coverage.js @@ -19,30 +19,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); const utils = __importStar(require("./utils")); const extensions = __importStar(require("./extensions")); const config = __importStar(require("./config")); -/** - * Function to set coverage driver - * - * @param coverage_driver - * @param version - * @param os_version - */ -function addCoverage(coverage_driver, version, os_version) { - return __awaiter(this, void 0, void 0, function* () { - coverage_driver.toLowerCase(); - let script = '\n' + (yield utils.stepLog('Setup Coverage', os_version)); - switch (coverage_driver) { - case 'pcov': - return script + (yield addCoveragePCOV(version, os_version)); - case 'xdebug': - return script + (yield addCoverageXdebug(version, os_version)); - case 'none': - return script + (yield disableCoverage(version, os_version)); - default: - return ''; - } - }); -} -exports.addCoverage = addCoverage; /** * Function to setup Xdebug * @@ -149,3 +125,27 @@ function disableCoverage(version, os_version) { }); } exports.disableCoverage = disableCoverage; +/** + * Function to set coverage driver + * + * @param coverage_driver + * @param version + * @param os_version + */ +function addCoverage(coverage_driver, version, os_version) { + return __awaiter(this, void 0, void 0, function* () { + coverage_driver.toLowerCase(); + const script = '\n' + (yield utils.stepLog('Setup Coverage', os_version)); + switch (coverage_driver) { + case 'pcov': + return script + (yield addCoveragePCOV(version, os_version)); + case 'xdebug': + return script + (yield addCoverageXdebug(version, os_version)); + case 'none': + return script + (yield disableCoverage(version, os_version)); + default: + return ''; + } + }); +} +exports.addCoverage = addCoverage; diff --git a/lib/extensions.js b/lib/extensions.js index 422d6898..d63d7c75 100644 --- a/lib/extensions.js +++ b/lib/extensions.js @@ -18,41 +18,6 @@ var __importStar = (this && this.__importStar) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const path = __importStar(require("path")); const utils = __importStar(require("./utils")); -/** - * Install and enable extensions - * - * @param extension_csv - * @param version - * @param os_version - * @param log_prefix - */ -function addExtension(extension_csv, version, os_version, no_step = false) { - return __awaiter(this, void 0, void 0, function* () { - let script = '\n'; - switch (no_step) { - case true: - script += - (yield utils.stepLog('Setup Extensions', os_version)) + - (yield utils.suppressOutput(os_version)); - break; - case false: - default: - script += yield utils.stepLog('Setup Extensions', os_version); - break; - } - switch (os_version) { - case 'win32': - return script + (yield addExtensionWindows(extension_csv, version)); - case 'darwin': - return script + (yield addExtensionDarwin(extension_csv, version)); - case 'linux': - return script + (yield addExtensionLinux(extension_csv, version)); - default: - return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error'); - } - }); -} -exports.addExtension = addExtension; /** * Install and enable extensions for darwin * @@ -61,7 +26,7 @@ exports.addExtension = addExtension; */ function addExtensionDarwin(extension_csv, version) { return __awaiter(this, void 0, void 0, function* () { - let extensions = yield utils.extensionArray(extension_csv); + const extensions = yield utils.extensionArray(extension_csv); let script = '\n'; yield utils.asyncForEach(extensions, function (extension) { return __awaiter(this, void 0, void 0, function* () { @@ -97,7 +62,7 @@ exports.addExtensionDarwin = addExtensionDarwin; */ function addExtensionWindows(extension_csv, version) { return __awaiter(this, void 0, void 0, function* () { - let extensions = yield utils.extensionArray(extension_csv); + const extensions = yield utils.extensionArray(extension_csv); let script = '\n'; yield utils.asyncForEach(extensions, function (extension) { return __awaiter(this, void 0, void 0, function* () { @@ -105,7 +70,7 @@ function addExtensionWindows(extension_csv, version) { // add script to enable extension is already installed along with php let install_command = ''; switch (version + extension) { - case '7.4xdebug': + case '7.4xdebug': { const extension_url = 'https://xdebug.org/files/php_xdebug-2.8.0-7.4-vc15.dll'; install_command = 'Invoke-WebRequest -Uri ' + @@ -113,6 +78,7 @@ function addExtensionWindows(extension_csv, version) { ' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll\n'; install_command += 'Enable-PhpExtension xdebug'; break; + } case '7.2xdebug': default: install_command = 'Install-PhpExtension ' + extension; @@ -139,7 +105,7 @@ exports.addExtensionWindows = addExtensionWindows; */ function addExtensionLinux(extension_csv, version) { return __awaiter(this, void 0, void 0, function* () { - let extensions = yield utils.extensionArray(extension_csv); + const extensions = yield utils.extensionArray(extension_csv); let script = '\n'; yield utils.asyncForEach(extensions, function (extension) { return __awaiter(this, void 0, void 0, function* () { @@ -190,3 +156,38 @@ function addExtensionLinux(extension_csv, version) { }); } exports.addExtensionLinux = addExtensionLinux; +/** + * Install and enable extensions + * + * @param extension_csv + * @param version + * @param os_version + * @param log_prefix + */ +function addExtension(extension_csv, version, os_version, no_step = false) { + return __awaiter(this, void 0, void 0, function* () { + let script = '\n'; + switch (no_step) { + case true: + script += + (yield utils.stepLog('Setup Extensions', os_version)) + + (yield utils.suppressOutput(os_version)); + break; + case false: + default: + script += yield utils.stepLog('Setup Extensions', os_version); + break; + } + switch (os_version) { + case 'win32': + return script + (yield addExtensionWindows(extension_csv, version)); + case 'darwin': + return script + (yield addExtensionDarwin(extension_csv, version)); + case 'linux': + return script + (yield addExtensionLinux(extension_csv, version)); + default: + return yield utils.log('Platform ' + os_version + ' is not supported', os_version, 'error'); + } + }); +} +exports.addExtension = addExtension; diff --git a/lib/install.js b/lib/install.js index 80873c91..b5a86c20 100644 --- a/lib/install.js +++ b/lib/install.js @@ -32,9 +32,9 @@ const utils = __importStar(require("./utils")); function build(filename, version, os_version) { return __awaiter(this, void 0, void 0, function* () { // taking inputs - let extension_csv = yield utils.getInput('extension-csv', false); - let ini_values_csv = yield utils.getInput('ini-values-csv', false); - let coverage_driver = yield utils.getInput('coverage', false); + const extension_csv = yield utils.getInput('extension-csv', false); + const ini_values_csv = yield utils.getInput('ini-values-csv', false); + const coverage_driver = yield utils.getInput('coverage', false); let script = yield utils.readScript(filename, version, os_version); if (extension_csv) { script += yield extensions.addExtension(extension_csv, version, os_version); @@ -55,8 +55,8 @@ exports.build = build; function run() { return __awaiter(this, void 0, void 0, function* () { try { - let os_version = process.platform; - let version = yield utils.getInput('php-version', true); + const os_version = process.platform; + const version = yield utils.getInput('php-version', true); // check the os version and run the respective script let script_path = ''; switch (os_version) { @@ -64,11 +64,12 @@ function run() { script_path = yield build(os_version + '.sh', version, os_version); yield exec_1.exec('sh ' + script_path + ' ' + version + ' ' + __dirname); break; - case 'linux': - let pecl = yield utils.getInput('pecl', false); + case 'linux': { + const pecl = yield utils.getInput('pecl', false); script_path = yield build(os_version + '.sh', version, os_version); yield exec_1.exec('sh ' + script_path + ' ' + version + ' ' + pecl); break; + } case 'win32': script_path = yield build('win32.ps1', version, os_version); yield exec_1.exec('pwsh ' + script_path + ' -version ' + version + ' -dir ' + __dirname); diff --git a/lib/utils.js b/lib/utils.js index dc066d10..e8721ba2 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -27,7 +27,7 @@ const core = __importStar(require("@actions/core")); */ function getInput(name, mandatory) { return __awaiter(this, void 0, void 0, function* () { - let input = process.env[name]; + const input = process.env[name]; switch (input) { case '': case undefined: @@ -53,6 +53,90 @@ function asyncForEach(array, callback) { }); } exports.asyncForEach = asyncForEach; +/** + * Get color index + * + * @param type + */ +function color(type) { + return __awaiter(this, void 0, void 0, function* () { + switch (type) { + case 'error': + return '31'; + default: + case 'success': + return '32'; + case 'warning': + return '33'; + } + }); +} +exports.color = color; +/** + * Log to console + * + * @param message + * @param os_version + * @param log_type + * @param prefix + */ +function log(message, os_version, log_type) { + return __awaiter(this, void 0, void 0, function* () { + switch (os_version) { + case 'win32': + return ('printf "\\033[' + + (yield color(log_type)) + + ';1m' + + message + + ' \\033[0m"'); + case 'linux': + case 'darwin': + default: + return ('echo "\\033[' + (yield color(log_type)) + ';1m' + message + '\\033[0m"'); + } + }); +} +exports.log = log; +/** + * Function to log a step + * + * @param message + * @param os_version + */ +function stepLog(message, os_version) { + return __awaiter(this, void 0, void 0, function* () { + switch (os_version) { + case 'win32': + return 'Step-Log "' + message + '"'; + case 'linux': + case 'darwin': + return 'step_log "' + message + '"'; + default: + return yield log('Platform ' + os_version + ' is not supported', os_version, 'error'); + } + }); +} +exports.stepLog = stepLog; +/** + * Function to log a result + * @param mark + * @param subject + * @param message + */ +function addLog(mark, subject, message, os_version) { + return __awaiter(this, void 0, void 0, function* () { + switch (os_version) { + case 'win32': + return 'Add-Log "' + mark + '" "' + subject + '" "' + message + '"'; + case 'linux': + case 'darwin': + return 'add_log "' + mark + '" "' + subject + '" "' + message + '"'; + default: + return yield log('Platform ' + os_version + ' is not supported', os_version, 'error'); + } + }); +} +exports.addLog = addLog; /** * Read the scripts * @@ -87,8 +171,8 @@ exports.readScript = readScript; */ function writeScript(filename, script) { return __awaiter(this, void 0, void 0, function* () { - let runner_dir = yield getInput('RUNNER_TOOL_CACHE', false); - let script_path = path.join(runner_dir, filename); + const runner_dir = yield getInput('RUNNER_TOOL_CACHE', false); + const script_path = path.join(runner_dir, filename); fs.writeFileSync(script_path, script, { mode: 0o755 }); return script_path; }); @@ -136,72 +220,6 @@ function INIArray(ini_values_csv) { }); } exports.INIArray = INIArray; -/** - * Function to log a step - * - * @param message - * @param os_version - */ -function stepLog(message, os_version) { - return __awaiter(this, void 0, void 0, function* () { - switch (os_version) { - case 'win32': - return 'Step-Log "' + message + '"'; - case 'linux': - case 'darwin': - return 'step_log "' + message + '"'; - default: - return yield log('Platform ' + os_version + ' is not supported', os_version, 'error'); - } - }); -} -exports.stepLog = stepLog; -/** - * Function to log a result - * @param mark - * @param subject - * @param message - */ -function addLog(mark, subject, message, os_version) { - return __awaiter(this, void 0, void 0, function* () { - switch (os_version) { - case 'win32': - return 'Add-Log "' + mark + '" "' + subject + '" "' + message + '"'; - case 'linux': - case 'darwin': - return 'add_log "' + mark + '" "' + subject + '" "' + message + '"'; - default: - return yield log('Platform ' + os_version + ' is not supported', os_version, 'error'); - } - }); -} -exports.addLog = addLog; -/** - * Log to console - * - * @param message - * @param os_version - * @param log_type - * @param prefix - */ -function log(message, os_version, log_type) { - return __awaiter(this, void 0, void 0, function* () { - const color = { - error: '31', - success: '32', - warning: '33' - }; - switch (os_version) { - case 'win32': - return ('printf "\\033[' + color[log_type] + ';1m' + message + ' \\033[0m"'); - case 'linux': - case 'darwin': - default: - return 'echo "\\033[' + color[log_type] + ';1m' + message + '\\033[0m"'; - } - }); -} -exports.log = log; /** * Function to get prefix required to load an extension. * @@ -209,7 +227,7 @@ exports.log = log; */ function getExtensionPrefix(extension) { return __awaiter(this, void 0, void 0, function* () { - let zend = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; + const zend = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; switch (zend.indexOf(extension)) { case 0: case 1: diff --git a/package-lock.json b/package-lock.json index 2175030f..21661b02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -475,6 +475,12 @@ "@babel/types": "^7.3.0" } }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", @@ -509,6 +515,12 @@ "jest-diff": "^24.3.0" } }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", + "dev": true + }, "@types/node": { "version": "12.12.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.11.tgz", @@ -542,6 +554,80 @@ "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.8.0.tgz", + "integrity": "sha512-ohqul5s6XEB0AzPWZCuJF5Fd6qC0b4+l5BGEnrlpmvXxvyymb8yw8Bs4YMF8usNAeuCJK87eFIHy8g8GFvOtGA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.8.0", + "eslint-utils": "^1.4.3", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.8.0.tgz", + "integrity": "sha512-jZ05E4SxCbbXseQGXOKf3ESKcsGxT8Ucpkp1jiVp55MGhOvZB2twmWKf894PAuVQTCgbPbJz9ZbRDqtUWzP8xA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.8.0", + "eslint-scope": "^5.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.8.0.tgz", + "integrity": "sha512-NseXWzhkucq+JM2HgqAAoKEzGQMb5LuTRjFPLQzGIdLthXMNUfuiskbl7QSykvWW6mvzCtYbw1fYWGa2EIaekw==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.8.0", + "@typescript-eslint/typescript-estree": "2.8.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.8.0.tgz", + "integrity": "sha512-ksvjBDTdbAQ04cR5JyFSDX113k66FxH1tAXmi+dj6hufsl/G0eMc/f1GgLjEVPkYClDbRKv+rnBFuE5EusomUw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "abab": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", @@ -572,6 +658,12 @@ } } }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", @@ -654,6 +746,16 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1036,6 +1138,12 @@ "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1065,6 +1173,21 @@ } } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -1135,6 +1258,12 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -1324,6 +1453,15 @@ "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -1423,12 +1561,431 @@ } } }, + "eslint": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.0.tgz", + "integrity": "sha512-dQpj+PaHKHfXHQ2Imcw5d853PTvkUGbHk/MR68KQUl98EgKDCdh4vLRH1ZxhqeQjQFJeg8fgN0UwmNhN3l8dDQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz", + "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + } + } + }, + "eslint-plugin-jest": { + "version": "23.0.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.0.4.tgz", + "integrity": "sha512-OaP8hhT8chJNodUPvLJ6vl8gnalcsU/Ww1t9oR3HnGdEWjm/DdCCUXLOral+IPGAeWu/EwgVQCK/QtxALpH1Yw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^2.5.0" + } + }, + "eslint-plugin-prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz", + "integrity": "sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + } + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -1544,6 +2101,17 @@ } } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1621,6 +2189,12 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -1642,6 +2216,24 @@ "bser": "^2.0.0" } }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1675,6 +2267,34 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -1738,7 +2358,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2153,7 +2774,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2209,6 +2831,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2252,12 +2875,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -2267,6 +2892,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2317,6 +2948,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2470,6 +3110,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -2557,6 +3203,84 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "inquirer": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", + "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -2670,6 +3394,12 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -2682,6 +3412,15 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2711,6 +3450,12 @@ "isobject": "^3.0.1" } }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -3427,6 +4172,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -3533,6 +4284,12 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3632,6 +4389,12 @@ "mime-db": "1.42.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -3691,6 +4454,12 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -3873,6 +4642,18 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3882,6 +4663,15 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "opencollective-postinstall": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", @@ -3920,6 +4710,12 @@ "word-wrap": "~1.2.3" } }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "p-each-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", @@ -3965,6 +4761,23 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -4083,6 +4896,15 @@ "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-format": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", @@ -4095,6 +4917,12 @@ "react-is": "^16.8.4" } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "prompts": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", @@ -4241,6 +5069,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4367,6 +5201,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4388,12 +5232,30 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", "dev": true }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4518,6 +5380,17 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4842,6 +5715,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -4857,6 +5736,18 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", @@ -4869,12 +5760,33 @@ "require-main-filename": "^2.0.0" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "throat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -4983,6 +5895,21 @@ } } }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5119,6 +6046,12 @@ "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -5234,6 +6167,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "write-file-atomic": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", diff --git a/package.json b/package.json index 1e5ffe96..c49963ee 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "main": "lib/setup-php.js", "scripts": { "build": "tsc", + "lint": "eslint **/*.ts --cache", "format": "prettier --write **/*.ts", "format-check": "prettier --check **/*.ts", "test": "jest" @@ -29,6 +30,13 @@ "devDependencies": { "@types/jest": "^24.0.21", "@types/node": "^12.12.0", + "@typescript-eslint/eslint-plugin": "^2.7.0", + "@typescript-eslint/parser": "^2.7.0", + "eslint": "^6.6.0", + "eslint-config-prettier": "^6.5.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jest": "^23.0.3", + "eslint-plugin-prettier": "^3.1.1", "husky": "^3.0.9", "jest": "^24.9.0", "jest-circus": "^24.9.0", diff --git a/src/config.ts b/src/config.ts index 3fb84c09..a8cfe4af 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,5 +1,44 @@ import * as utils from './utils'; +/** + * Add script to set custom ini values for unix + * + * @param ini_values_csv + */ +export async function addINIValuesUnix( + ini_values_csv: string +): Promise { + const ini_values: Array = await utils.INIArray(ini_values_csv); + let script = '\n'; + await utils.asyncForEach(ini_values, async function(line: string) { + script += + (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; + }); + return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script; +} + +/** + * Add script to set custom ini values for windows + * + * @param ini_values_csv + */ +export async function addINIValuesWindows( + ini_values_csv: string +): Promise { + const ini_values: Array = await utils.INIArray(ini_values_csv); + let script = '\n'; + await utils.asyncForEach(ini_values, async function(line: string) { + script += + (await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; + }); + return ( + 'Add-Content C:\\tools\\php\\php.ini "' + + ini_values.join('\n') + + '"' + + script + ); +} + /** * Function to add custom ini values * @@ -11,7 +50,7 @@ export async function addINIValues( os_version: string, no_step = false ): Promise { - let script: string = '\n'; + let script = '\n'; switch (no_step) { case true: script += @@ -38,42 +77,3 @@ export async function addINIValues( ); } } - -/** - * Add script to set custom ini values for unix - * - * @param ini_values_csv - */ -export async function addINIValuesUnix( - ini_values_csv: string -): Promise { - let ini_values: Array = await utils.INIArray(ini_values_csv); - let script: string = '\n'; - await utils.asyncForEach(ini_values, async function(line: string) { - script += - (await utils.addLog('$tick', line, 'Added to php.ini', 'linux')) + '\n'; - }); - return 'echo "' + ini_values.join('\n') + '" >> $ini_file' + script; -} - -/** - * Add script to set custom ini values for windows - * - * @param ini_values_csv - */ -export async function addINIValuesWindows( - ini_values_csv: string -): Promise { - let ini_values: Array = await utils.INIArray(ini_values_csv); - let script: string = '\n'; - await utils.asyncForEach(ini_values, async function(line: string) { - script += - (await utils.addLog('$tick', line, 'Added to php.ini', 'win32')) + '\n'; - }); - return ( - 'Add-Content C:\\tools\\php\\php.ini "' + - ini_values.join('\n') + - '"' + - script - ); -} diff --git a/src/coverage.ts b/src/coverage.ts index aa356d26..5087eac2 100644 --- a/src/coverage.ts +++ b/src/coverage.ts @@ -2,40 +2,16 @@ import * as utils from './utils'; import * as extensions from './extensions'; import * as config from './config'; -/** - * Function to set coverage driver - * - * @param coverage_driver - * @param version - * @param os_version - */ -export async function addCoverage( - coverage_driver: string, - version: string, - os_version: string -): Promise { - coverage_driver.toLowerCase(); - let script: string = - '\n' + (await utils.stepLog('Setup Coverage', os_version)); - switch (coverage_driver) { - case 'pcov': - return script + (await addCoveragePCOV(version, os_version)); - case 'xdebug': - return script + (await addCoverageXdebug(version, os_version)); - case 'none': - return script + (await disableCoverage(version, os_version)); - default: - return ''; - } -} - /** * Function to setup Xdebug * * @param version * @param os_version */ -export async function addCoverageXdebug(version: string, os_version: string) { +export async function addCoverageXdebug( + version: string, + os_version: string +): Promise { return ( (await extensions.addExtension('xdebug', version, os_version, true)) + (await utils.suppressOutput(os_version)) + @@ -55,8 +31,11 @@ export async function addCoverageXdebug(version: string, os_version: string) { * @param version * @param os_version */ -export async function addCoveragePCOV(version: string, os_version: string) { - let script: string = '\n'; +export async function addCoveragePCOV( + version: string, + os_version: string +): Promise { + let script = '\n'; switch (version) { default: script += @@ -115,8 +94,11 @@ export async function addCoveragePCOV(version: string, os_version: string) { * @param version * @param os_version */ -export async function disableCoverage(version: string, os_version: string) { - let script: string = '\n'; +export async function disableCoverage( + version: string, + os_version: string +): Promise { + let script = '\n'; switch (os_version) { case 'linux': script += @@ -154,3 +136,30 @@ export async function disableCoverage(version: string, os_version: string) { return script; } + +/** + * Function to set coverage driver + * + * @param coverage_driver + * @param version + * @param os_version + */ +export async function addCoverage( + coverage_driver: string, + version: string, + os_version: string +): Promise { + coverage_driver.toLowerCase(); + const script: string = + '\n' + (await utils.stepLog('Setup Coverage', os_version)); + switch (coverage_driver) { + case 'pcov': + return script + (await addCoveragePCOV(version, os_version)); + case 'xdebug': + return script + (await addCoverageXdebug(version, os_version)); + case 'none': + return script + (await disableCoverage(version, os_version)); + default: + return ''; + } +} diff --git a/src/extensions.ts b/src/extensions.ts index 43942a2b..ef5ffdcd 100644 --- a/src/extensions.ts +++ b/src/extensions.ts @@ -1,49 +1,6 @@ import * as path from 'path'; import * as utils from './utils'; -/** - * Install and enable extensions - * - * @param extension_csv - * @param version - * @param os_version - * @param log_prefix - */ -export async function addExtension( - extension_csv: string, - version: string, - os_version: string, - no_step = false -): Promise { - let script: string = '\n'; - switch (no_step) { - case true: - script += - (await utils.stepLog('Setup Extensions', os_version)) + - (await utils.suppressOutput(os_version)); - break; - case false: - default: - script += await utils.stepLog('Setup Extensions', os_version); - break; - } - - switch (os_version) { - case 'win32': - return script + (await addExtensionWindows(extension_csv, version)); - case 'darwin': - return script + (await addExtensionDarwin(extension_csv, version)); - case 'linux': - return script + (await addExtensionLinux(extension_csv, version)); - default: - return await utils.log( - 'Platform ' + os_version + ' is not supported', - os_version, - 'error' - ); - } -} - /** * Install and enable extensions for darwin * @@ -54,12 +11,12 @@ export async function addExtensionDarwin( extension_csv: string, version: string ): Promise { - let extensions: Array = await utils.extensionArray(extension_csv); - let script: string = '\n'; + const extensions: Array = await utils.extensionArray(extension_csv); + let script = '\n'; await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - let install_command: string = ''; + let install_command = ''; switch (version + extension) { case '5.6xdebug': install_command = 'sudo pecl install xdebug-2.5.5 >/dev/null 2>&1'; @@ -89,16 +46,16 @@ export async function addExtensionWindows( extension_csv: string, version: string ): Promise { - let extensions: Array = await utils.extensionArray(extension_csv); - let script: string = '\n'; + const extensions: Array = await utils.extensionArray(extension_csv); + let script = '\n'; await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - let install_command: string = ''; + let install_command = ''; switch (version + extension) { - case '7.4xdebug': - const extension_url: string = + case '7.4xdebug': { + const extension_url = 'https://xdebug.org/files/php_xdebug-2.8.0-7.4-vc15.dll'; install_command = 'Invoke-WebRequest -Uri ' + @@ -106,6 +63,7 @@ export async function addExtensionWindows( ' -OutFile C:\\tools\\php\\ext\\php_xdebug.dll\n'; install_command += 'Enable-PhpExtension xdebug'; break; + } case '7.2xdebug': default: install_command = 'Install-PhpExtension ' + extension; @@ -132,13 +90,13 @@ export async function addExtensionLinux( extension_csv: string, version: string ): Promise { - let extensions: Array = await utils.extensionArray(extension_csv); - let script: string = '\n'; + const extensions: Array = await utils.extensionArray(extension_csv); + let script = '\n'; await utils.asyncForEach(extensions, async function(extension: string) { extension = extension.toLowerCase(); // add script to enable extension is already installed along with php - let install_command: string = ''; + let install_command = ''; switch (version + extension) { case '7.2phalcon3': case '7.3phalcon3': @@ -180,3 +138,46 @@ export async function addExtensionLinux( }); return script; } + +/** + * Install and enable extensions + * + * @param extension_csv + * @param version + * @param os_version + * @param log_prefix + */ +export async function addExtension( + extension_csv: string, + version: string, + os_version: string, + no_step = false +): Promise { + let script = '\n'; + switch (no_step) { + case true: + script += + (await utils.stepLog('Setup Extensions', os_version)) + + (await utils.suppressOutput(os_version)); + break; + case false: + default: + script += await utils.stepLog('Setup Extensions', os_version); + break; + } + + switch (os_version) { + case 'win32': + return script + (await addExtensionWindows(extension_csv, version)); + case 'darwin': + return script + (await addExtensionDarwin(extension_csv, version)); + case 'linux': + return script + (await addExtensionLinux(extension_csv, version)); + default: + return await utils.log( + 'Platform ' + os_version + ' is not supported', + os_version, + 'error' + ); + } +} diff --git a/src/install.ts b/src/install.ts index 9425b7ac..3d9a45e3 100644 --- a/src/install.ts +++ b/src/install.ts @@ -18,9 +18,9 @@ export async function build( os_version: string ): Promise { // taking inputs - let extension_csv: string = await utils.getInput('extension-csv', false); - let ini_values_csv: string = await utils.getInput('ini-values-csv', false); - let coverage_driver: string = await utils.getInput('coverage', false); + const extension_csv: string = await utils.getInput('extension-csv', false); + const ini_values_csv: string = await utils.getInput('ini-values-csv', false); + const coverage_driver: string = await utils.getInput('coverage', false); let script: string = await utils.readScript(filename, version, os_version); if (extension_csv) { @@ -39,22 +39,23 @@ export async function build( /** * Run the script */ -export async function run() { +export async function run(): Promise { try { - let os_version: string = process.platform; - let version: string = await utils.getInput('php-version', true); + const os_version: string = process.platform; + const version: string = await utils.getInput('php-version', true); // check the os version and run the respective script - let script_path: string = ''; + let script_path = ''; switch (os_version) { case 'darwin': script_path = await build(os_version + '.sh', version, os_version); await exec('sh ' + script_path + ' ' + version + ' ' + __dirname); break; - case 'linux': - let pecl: string = await utils.getInput('pecl', false); + case 'linux': { + const pecl: string = await utils.getInput('pecl', false); script_path = await build(os_version + '.sh', version, os_version); await exec('sh ' + script_path + ' ' + version + ' ' + pecl); break; + } case 'win32': script_path = await build('win32.ps1', version, os_version); await exec( diff --git a/src/utils.ts b/src/utils.ts index 5342e44f..b85ce27f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -12,7 +12,7 @@ export async function getInput( name: string, mandatory: boolean ): Promise { - let input = process.env[name]; + const input = process.env[name]; switch (input) { case '': case undefined: @@ -30,111 +30,67 @@ export async function getInput( * @param callback */ export async function asyncForEach( - array: Array, - callback: any -): Promise { - for (let index: number = 0; index < array.length; index++) { + array: Array, + callback: ( + element: string, + index: number, + array: Array + ) => Promise +): Promise { + for (let index = 0; index < array.length; index++) { await callback(array[index], index, array); } } /** - * Read the scripts + * Get color index * - * @param filename - * @param version - * @param os_version + * @param type */ -export async function readScript( - filename: string, - version: string, - os_version: string +export async function color(type: string): Promise { + switch (type) { + case 'error': + return '31'; + default: + case 'success': + return '32'; + case 'warning': + return '33'; + } +} + +/** + * Log to console + * + * @param message + * @param os_version + * @param log_type + * @param prefix + */ +export async function log( + message: string, + os_version: string, + log_type: string ): Promise { switch (os_version) { - case 'darwin': - switch (version) { - case '7.4': - return fs.readFileSync( - path.join(__dirname, '../src/scripts/7.4.sh'), - 'utf8' - ); - } - return fs.readFileSync( - path.join(__dirname, '../src/scripts/' + filename), - 'utf8' - ); - case 'linux': case 'win32': - return fs.readFileSync( - path.join(__dirname, '../src/scripts/' + filename), - 'utf8' + return ( + 'printf "\\033[' + + (await color(log_type)) + + ';1m' + + message + + ' \\033[0m"' ); + + case 'linux': + case 'darwin': default: - return await log( - 'Platform ' + os_version + ' is not supported', - os_version, - 'error' + return ( + 'echo "\\033[' + (await color(log_type)) + ';1m' + message + '\\033[0m"' ); } } -/** - * Write final script which runs - * - * @param filename - * @param version - * @param script - */ -export async function writeScript( - filename: string, - script: string -): Promise { - let runner_dir: string = await getInput('RUNNER_TOOL_CACHE', false); - let script_path: string = path.join(runner_dir, filename); - fs.writeFileSync(script_path, script, {mode: 0o755}); - return script_path; -} - -/** - * Function to break extension csv into an array - * - * @param extension_csv - */ -export async function extensionArray( - extension_csv: string -): Promise> { - switch (extension_csv) { - case '': - case ' ': - return []; - default: - return extension_csv.split(',').map(function(extension: string) { - return extension - .trim() - .replace('php-', '') - .replace('php_', ''); - }); - } -} - -/** - * Function to break ini values csv into an array - * - * @param ini_values_csv - * @constructor - */ -export async function INIArray(ini_values_csv: string): Promise> { - switch (ini_values_csv) { - case '': - case ' ': - return []; - default: - return ini_values_csv.split(',').map(function(ini_value: string) { - return ini_value.trim(); - }); - } -} - /** * Function to log a step * @@ -188,34 +144,99 @@ export async function addLog( } /** - * Log to console + * Read the scripts * - * @param message + * @param filename + * @param version * @param os_version - * @param log_type - * @param prefix */ -export async function log( - message: string, - os_version: string, - log_type: string +export async function readScript( + filename: string, + version: string, + os_version: string ): Promise { - const color: any = { - error: '31', - success: '32', - warning: '33' - }; - switch (os_version) { - case 'win32': - return ( - 'printf "\\033[' + color[log_type] + ';1m' + message + ' \\033[0m"' - ); - - case 'linux': case 'darwin': + switch (version) { + case '7.4': + return fs.readFileSync( + path.join(__dirname, '../src/scripts/7.4.sh'), + 'utf8' + ); + } + return fs.readFileSync( + path.join(__dirname, '../src/scripts/' + filename), + 'utf8' + ); + case 'linux': + case 'win32': + return fs.readFileSync( + path.join(__dirname, '../src/scripts/' + filename), + 'utf8' + ); default: - return 'echo "\\033[' + color[log_type] + ';1m' + message + '\\033[0m"'; + return await log( + 'Platform ' + os_version + ' is not supported', + os_version, + 'error' + ); + } +} + +/** + * Write final script which runs + * + * @param filename + * @param version + * @param script + */ +export async function writeScript( + filename: string, + script: string +): Promise { + const runner_dir: string = await getInput('RUNNER_TOOL_CACHE', false); + const script_path: string = path.join(runner_dir, filename); + fs.writeFileSync(script_path, script, {mode: 0o755}); + return script_path; +} + +/** + * Function to break extension csv into an array + * + * @param extension_csv + */ +export async function extensionArray( + extension_csv: string +): Promise> { + switch (extension_csv) { + case '': + case ' ': + return []; + default: + return extension_csv.split(',').map(function(extension: string) { + return extension + .trim() + .replace('php-', '') + .replace('php_', ''); + }); + } +} + +/** + * Function to break ini values csv into an array + * + * @param ini_values_csv + * @constructor + */ +export async function INIArray(ini_values_csv: string): Promise> { + switch (ini_values_csv) { + case '': + case ' ': + return []; + default: + return ini_values_csv.split(',').map(function(ini_value: string) { + return ini_value.trim(); + }); } } @@ -225,7 +246,7 @@ export async function log( * @param extension */ export async function getExtensionPrefix(extension: string): Promise { - let zend: Array = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; + const zend: Array = ['xdebug', 'opcache', 'ioncube', 'eaccelerator']; switch (zend.indexOf(extension)) { case 0: case 1: