Skip to content

Commit

Permalink
extend spinner
Browse files Browse the repository at this point in the history
* rename "logger" to "spinner" everywhere
* Add spinner.update(text) method
* add logger and move info and warm from printer to it
  • Loading branch information
BuZZ-T committed Apr 7, 2022
1 parent dceca15 commit c83cb17
Show file tree
Hide file tree
Showing 29 changed files with 9,616 additions and 369 deletions.
20 changes: 10 additions & 10 deletions api.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { mocked } from 'ts-jest/utils'

import { fetchChromiumTags, fetchBranchPosition, fetchChromeUrl, fetchChromeZipFile, fetchLocalStore } from './api'
import type { IOSSettings } from './interfaces/os.interfaces'
import { logger, Spinner } from './log/spinner'
import { spinner, Spinner } from './log/spinner'

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
const fetch = require('node-fetch')
Expand All @@ -25,21 +25,21 @@ jest.mock('./log/progress')

describe('api', () => {

let loggerMock: MaybeMockedDeep<Spinner>
let spinnerMock: MaybeMockedDeep<Spinner>
let fetchMock: MaybeMocked<typeof fetch>

beforeAll(() => {
fetchMock = mocked(fetch)
loggerMock = mocked(logger, true)
spinnerMock = mocked(spinner, true)
})

beforeEach(() => {
onMock.mockReset()
fetchMock.mockClear()

loggerMock.start.mockClear()
loggerMock.success.mockClear()
loggerMock.error.mockClear()
spinnerMock.start.mockClear()
spinnerMock.success.mockClear()
spinnerMock.error.mockClear()
})

describe('fetchLocalStore', () => {
Expand Down Expand Up @@ -110,8 +110,8 @@ describe('api', () => {

expect(await fetchBranchPosition('any-version')).toEqual(3)
expect(fetch).toHaveBeenLastCalledWith('https://omahaproxy.appspot.com/deps.json?version=any-version')
expect(loggerMock.success).toHaveBeenCalledTimes(1)
expect(loggerMock.error).toHaveBeenCalledTimes(0)
expect(spinnerMock.success).toHaveBeenCalledTimes(1)
expect(spinnerMock.error).toHaveBeenCalledTimes(0)

})

Expand All @@ -134,8 +134,8 @@ describe('api', () => {
})

expect(await fetchBranchPosition('any-version')).toEqual(undefined)
expect(loggerMock.error).toHaveBeenCalledTimes(1)
expect(loggerMock.success).toHaveBeenCalledTimes(0)
expect(spinnerMock.error).toHaveBeenCalledTimes(1)
expect(spinnerMock.success).toHaveBeenCalledTimes(0)
})
})

Expand Down
10 changes: 5 additions & 5 deletions api.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Response as NodeFetchResponse } from 'node-fetch'

import { RESOLVE_VERSION } from './commons/constants'
import { RESOLVE_VERSION } from './commons/loggerTexts'
import type { IMetadataResponse } from './interfaces/interfaces'
import type { IOSSettings } from './interfaces/os.interfaces'
import type { IListStore } from './interfaces/store.interfaces'
import { logger } from './log/spinner'
import { spinner } from './log/spinner'

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
const fetch = require('node-fetch')
Expand Down Expand Up @@ -39,17 +39,17 @@ export async function fetchChromiumTags(): Promise<string> {
}

export async function fetchBranchPosition(version: string): Promise<string> {
logger.start(RESOLVE_VERSION)
spinner.start(RESOLVE_VERSION)

return fetch(`https://omahaproxy.appspot.com/deps.json?version=${version}`)
.then(checkStatus)
.then(toJson)
.then((response: { chromium_base_position?: string }) => response.chromium_base_position)
.then((resolvedVersion: string | undefined) => {
if (resolvedVersion) {
logger.success()
spinner.success()
} else {
logger.error()
spinner.error()
}
return resolvedVersion
})
Expand Down
2 changes: 1 addition & 1 deletion commons/constants.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

import type { TextFunction } from '../interfaces/interfaces'
import { READ_CONFIG } from './constants'
import { READ_CONFIG } from './loggerTexts'

describe('constants', () => {

Expand Down
25 changes: 0 additions & 25 deletions commons/constants.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,9 @@
import type { IConfigOptions } from '../interfaces/config.interfaces'
import type { LoggerConfig } from '../interfaces/interfaces'
import type { IChromeFullConfig, IChromeSingleConfig } from '../interfaces/interfaces'
import { ComparableVersion } from './ComparableVersion'

export const LOAD_CONFIG: LoggerConfig = {
start: 'Downloading local storage file',
success: 'localstore.json file downloaded successfully!',
fail: 'Error downloading localstore.json',
}

export const READ_CONFIG: LoggerConfig = {
start: 'Reading local storage file from filesystem',
success: 'Successfully loaded localstore.json from filesystem',
fail: reason => `Error loading localstore.json from filesystem: ${reason}`,
}

export const LOCAL_STORE_FILE = 'localstore.json'

export const RESOLVE_VERSION: LoggerConfig = {
start: 'Resolving version to branch position...',
success: 'Version resolved!',
fail: 'Error resolving version!',
}

export const SEARCH_BINARY: LoggerConfig = {
start: 'Searching for binary...',
success: 'Binary found.',
fail: 'No binary found!',
}

export const DEFAULT_CONFIG_OPTIONS: IConfigOptions = {
min: '0',
max: '10000',
Expand Down
37 changes: 37 additions & 0 deletions commons/loggerTexts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { LogConfig, LoggerConfig, TextFunction } from '../interfaces/interfaces'

export const LOAD_CONFIG: LoggerConfig = {
start: 'Downloading local storage file',
success: 'localstore.json file downloaded successfully!',
fail: 'Error downloading localstore.json',
}

export const DOWNLOAD_ZIP: LogConfig<TextFunction, string> = {
start: 'Downloading binary...',
success: downloadPath => `Successfully downloaded to "${downloadPath}.zip"`,
fail: 'Failed to download binary',
}

export const EXTRACT_ZIP: LogConfig<TextFunction, string> = {
start: 'Downloading binary...',
success: downloadPath => `Successfully downloaded and extracted to "${downloadPath}"`,
fail: 'Failed to download binary',
}

export const READ_CONFIG: LogConfig<string, TextFunction> = {
start: 'Reading local storage file from filesystem',
success: 'Successfully loaded localstore.json from filesystem',
fail: reason => `Error loading localstore.json from filesystem: ${reason}`,
}

export const RESOLVE_VERSION: LoggerConfig = {
start: 'Resolving version to branch position...',
success: 'Version resolved!',
fail: 'Error resolving version!',
}

export const SEARCH_BINARY: LoggerConfig = {
start: 'Searching for binary...',
success: 'Binary found.',
fail: 'No binary found!',
}
6 changes: 3 additions & 3 deletions config/config.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@ import { ComparableVersion } from '../commons/ComparableVersion'
import { DEFAULT_CONFIG_OPTIONS } from '../commons/constants'
import type { IChromeConfigWrapper, IStoreConfigWrapper, IExportConfigWrapper } from '../interfaces/interfaces'
import type { OS } from '../interfaces/os.interfaces'
import { Spinner, logger } from '../log/spinner'
import { Logger, logger } from '../log/logger'
import { createChromeFullConfig, createChromeOptions, createImportConfig, createExportConfig, createChromeSingleConfig } from '../test/test.utils'
import { readConfig } from './config'

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
const program = require('commander')

jest.mock('commander')
jest.mock('../log/spinner')
jest.mock('../log/logger')

describe('config', () => {

let programMock: MaybeMockedDeep<typeof program>
let loggerMock: MaybeMockedDeep<Spinner>
let loggerMock: MaybeMockedDeep<Logger>

describe('readConfig', () => {

Expand Down
2 changes: 1 addition & 1 deletion config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { ComparableVersion } from '../commons/ComparableVersion'
import { DEFAULT_CONFIG_OPTIONS } from '../commons/constants'
import type { IConfigOptions } from '../interfaces/config.interfaces'
import type { ConfigWrapper, IChromeSingleConfig } from '../interfaces/interfaces'
import { logger } from '../log/spinner'
import { logger } from '../log/logger'
/* eslint-disable-next-line import/no-namespace */
import * as packageJson from '../package.json'
import { mapOS } from '../utils'
Expand Down
6 changes: 3 additions & 3 deletions download.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import { ComparableVersion } from './commons/ComparableVersion'
import { MappedVersion } from './commons/MappedVersion'
import { downloadChromium } from './download'
import { NoChromiumDownloadError } from './errors'
import { Logger, logger } from './log/logger'
import { progress } from './log/progress'
import { logger } from './log/spinner'
import { loadStore } from './store/loadStore'
import { Store } from './store/Store'
import { createChromeFullConfig, createStore, createGetChromeDownloadUrlReturn, MkdirWithOptions, StatsWithoutOptions, createChromeSingleConfig } from './test/test.utils'
Expand All @@ -36,7 +36,7 @@ jest.mock('unzipper')

jest.mock('./api')
jest.mock('./log/progress')
jest.mock('./log/spinner')
jest.mock('./log/logger')
jest.mock('./log/printer')
jest.mock('./store/loadStore')
jest.mock('./versions')
Expand All @@ -53,7 +53,7 @@ describe('download', () => {

let progressConstructorMock: MaybeMocked<typeof Progress>
let progressMock: MaybeMockedDeep<typeof progress>
let loggerMock: MaybeMockedDeep<typeof logger>
let loggerMock: MaybeMockedDeep<Logger>

let unzipperMock: MaybeMockedDeep<typeof unzipper>

Expand Down
12 changes: 8 additions & 4 deletions download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ import { promisify } from 'util'

import { fetchChromeZipFile } from './api'
import { DEFAULT_FULL_CONFIG, DEFAULT_SINGLE_CONFIG } from './commons/constants'
import { DOWNLOAD_ZIP, EXTRACT_ZIP } from './commons/loggerTexts'
import { NoChromiumDownloadError } from './errors'
import type { IChromeConfig } from './interfaces/interfaces'
import { logger } from './log/logger'
import { progress } from './log/progress'
import { logger } from './log/spinner'
import { loadStore } from './store/loadStore'
import { isChromeSingleConfig } from './utils/typeguards'
import { getChromeDownloadUrl, loadVersions, mapVersions } from './versions'
Expand Down Expand Up @@ -87,14 +88,17 @@ export async function downloadChromium(additionalConfig?: Partial<IChromeConfig>

new Progress(zipFileResponse, { throttle: 100 }).on('progress', (p: { progress: number, total: number }) => {
if (isFirstProgress) {

const progressConfig = config.autoUnzip ? EXTRACT_ZIP : DOWNLOAD_ZIP

progress.start({
barLength: 40,
steps: Math.round(p.total / 1024 / 1024),
unit: 'MB',
showNumeric: true,
start: 'Downloading binary...',
success: `Successfully downloaded ${config.autoUnzip ? 'and extracted ' : ''}to "${downloadPath}${config.autoUnzip ? '' : '.zip'}"`,
fail: 'Failed to download binary',
start: progressConfig.start,
success: progressConfig.success(downloadPath),
fail: progressConfig.fail,
})
isFirstProgress = false
} else {
Expand Down
49 changes: 0 additions & 49 deletions files

This file was deleted.

7 changes: 7 additions & 0 deletions interfaces/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,13 @@ export interface LoggerConfig {
fail: string | TextFunction
}

// TODO: name
export interface LogConfig<Success extends string | TextFunction, Fail extends string | TextFunction> extends LoggerConfig {
start: string
success: Success
fail: Fail
}

export interface ProgressConfig {
start: string
success: string
Expand Down
24 changes: 12 additions & 12 deletions jest.config.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
runner: 'groups',
collectCoverageFrom: [
"*.ts",
"**/*.ts",
"!<rootDir>/node_modules/",
"!<rootDir>/start-local.ts",
"!public_api.ts",
"!<rootDir>/test/*",
"!public_api.ts"
],
preset: 'ts-jest',
testEnvironment: 'node',
runner: 'groups',
collectCoverageFrom: [
'*.ts',
'**/*.ts',
'!<rootDir>/start-local.ts',
'!public_api.ts',
'!<rootDir>/test/*',
'!public_api.ts',
'!<rootDir>/examples/*'
],
}
Loading

0 comments on commit c83cb17

Please sign in to comment.