transform @wdio/logger into ESM
This commit is contained in:
parent
7addacb3f4
commit
62023041e8
13 changed files with 1362 additions and 117 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -69,6 +69,7 @@ tests/typings/**/dist
|
|||
devtools.d.ts
|
||||
!.eslintrc.js
|
||||
!jest.config.js
|
||||
!vitest.config.ts
|
||||
packages/**/package-lock.json
|
||||
.DS_Store
|
||||
|
||||
|
|
|
|||
1320
package-lock.json
generated
1320
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -79,6 +79,7 @@
|
|||
"@typescript-eslint/parser": "^5.22.0",
|
||||
"@typescript-eslint/utils": "^5.14.0",
|
||||
"aws-sdk": "^2.1127.0",
|
||||
"c8": "^7.11.2",
|
||||
"camelcase": "^6.3.0",
|
||||
"cheerio": "^1.0.0-rc.10",
|
||||
"copyfiles": "^2.4.1",
|
||||
|
|
@ -104,6 +105,7 @@
|
|||
"ts-jest": "^28.0.1",
|
||||
"ts-node": "^10.7.0",
|
||||
"typescript": "^4.6.2",
|
||||
"url-join": "^4.0.1"
|
||||
"url-join": "^4.0.1",
|
||||
"vitest": "^0.12.4"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
const chalkMock = {}
|
||||
chalkMock.cyanBright = jest.fn().mockImplementation((msg) => `cyanBright ${msg}`)
|
||||
chalkMock.greenBright = jest.fn().mockImplementation((msg) => `greenBright ${msg}`)
|
||||
chalkMock.whiteBright = jest.fn().mockImplementation((msg) => `whiteBright ${msg}`)
|
||||
chalkMock.redBright = jest.fn().mockImplementation((msg) => `redBright ${msg}`)
|
||||
chalkMock.cyan = jest.fn().mockImplementation((msg) => `cyan ${msg}`)
|
||||
chalkMock.blue = jest.fn().mockImplementation((msg) => `blue ${msg}`)
|
||||
chalkMock.grey = jest.fn().mockImplementation((msg) => `grey ${msg}`)
|
||||
chalkMock.green = jest.fn().mockImplementation((msg) => `green ${msg}`)
|
||||
chalkMock.red = jest.fn().mockImplementation((...msg) => `red ${msg.join(' ')}`)
|
||||
chalkMock.gray = jest.fn().mockImplementation((...msg) => `gray ${msg.join(' ')}`)
|
||||
chalkMock.black = jest.fn().mockImplementation((msg) => `black ${msg}`)
|
||||
chalkMock.white = chalkMock
|
||||
chalkMock.yellow = jest.fn().mockImplementation((...msg) => `yellow ${msg.join(' ')}`)
|
||||
chalkMock.magenta = jest.fn().mockImplementation((msg) => `magenta ${msg}`)
|
||||
chalkMock.bgGreen = jest.fn().mockImplementation((msg) => `bgGreen ${msg}`)
|
||||
chalkMock.dim = jest.fn().mockImplementation((msg) => `dim ${msg}`)
|
||||
chalkMock.supportsColor = { hasBasic: true }
|
||||
chalkMock.bgYellow = chalkMock
|
||||
chalkMock.bgRed = chalkMock
|
||||
chalkMock.bold = function (msg) { return `bold ${msg}` }
|
||||
chalkMock.bold.__proto__ = chalkMock
|
||||
|
||||
export default chalkMock
|
||||
|
|
@ -5,7 +5,20 @@
|
|||
"author": "Christian Bromann <mail@bromann.dev>",
|
||||
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-logger",
|
||||
"license": "MIT",
|
||||
"main": "./build/node",
|
||||
"main": "./build/index.cjs.js",
|
||||
"type": "module",
|
||||
"module": "./build/index.js",
|
||||
"exports": {
|
||||
".": [
|
||||
{
|
||||
"import": "./build/index.js",
|
||||
"require": "./build/index.cjs.js"
|
||||
},
|
||||
"./build/index.cjs.js"
|
||||
]
|
||||
},
|
||||
"types": "./build/index.d.ts",
|
||||
"typeScriptVersion": "3.8.3",
|
||||
"engines": {
|
||||
"node": "^16.13 || >=18"
|
||||
},
|
||||
|
|
@ -21,8 +34,6 @@
|
|||
"bugs": {
|
||||
"url": "https://github.com/webdriverio/webdriverio/issues"
|
||||
},
|
||||
"types": "./build/node.d.ts",
|
||||
"typeScriptVersion": "3.8.3",
|
||||
"dependencies": {
|
||||
"chalk": "^4.0.0",
|
||||
"loglevel": "^1.6.0",
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
/* istanbul ignore file */
|
||||
|
||||
import type log from 'loglevel'
|
||||
|
||||
/**
|
||||
* environment check to allow to use this package in a web context
|
||||
*/
|
||||
// By default, import the web code using a literal require, so that in webpack
|
||||
// contexts, it will always be bundled
|
||||
let mode = require('./web').default
|
||||
let mode = await import('./web.js') as any
|
||||
|
||||
// Then, if we're in a Node.js context, require the node version of this module
|
||||
// using a variable, so that it will _not_ be included in a bundle, either
|
||||
// during compilation or execution
|
||||
if (typeof process !== 'undefined' && typeof process.release !== 'undefined' && process.release.name === 'node') {
|
||||
const nodeMode = './node'
|
||||
mode = require(nodeMode).default
|
||||
const nodeMode = './node.js'
|
||||
mode = await import(nodeMode)
|
||||
}
|
||||
|
||||
// The net result will be that in a Node context, we'll have required both
|
||||
// files but will use the correct one, and in the web context, we'll have only
|
||||
// required the web file, thus ensuring that the Node file and related
|
||||
// dependencies will not be bundled inadvertently.
|
||||
export default mode
|
||||
export default mode.default as (name: string) => log.Logger
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import fs from 'fs'
|
||||
import fs from 'node:fs'
|
||||
|
||||
import log from 'loglevel'
|
||||
import util from 'util'
|
||||
import chalk, { Color } from 'chalk'
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"env": {
|
||||
"jest": true
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
const mock = () => logMock
|
||||
mock.setLevel = jest.fn()
|
||||
mock.setLogLevelsConfig = jest.fn()
|
||||
mock.waitForBuffer = jest.fn()
|
||||
export const logMock = {
|
||||
error: jest.fn(),
|
||||
debug: jest.fn(),
|
||||
warn: jest.fn(),
|
||||
info: jest.fn(),
|
||||
trace: jest.fn()
|
||||
}
|
||||
|
||||
export default mock
|
||||
15
packages/wdio-logger/tests/__mocks__/@wdio/logger.ts
Normal file
15
packages/wdio-logger/tests/__mocks__/@wdio/logger.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { vi } from 'vitest'
|
||||
|
||||
const mock = () => logMock
|
||||
mock.setLevel = vi.fn()
|
||||
mock.setLogLevelsConfig = vi.fn()
|
||||
mock.waitForBuffer = vi.fn()
|
||||
export const logMock = {
|
||||
error: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
info: vi.fn(),
|
||||
trace: vi.fn()
|
||||
}
|
||||
|
||||
export default mock
|
||||
26
packages/wdio-logger/tests/__mocks__/chalk.ts
Normal file
26
packages/wdio-logger/tests/__mocks__/chalk.ts
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import { vi } from 'vitest'
|
||||
|
||||
const chalkMock: any = {}
|
||||
chalkMock.cyanBright = vi.fn().mockImplementation((msg) => `cyanBright ${msg}`)
|
||||
chalkMock.greenBright = vi.fn().mockImplementation((msg) => `greenBright ${msg}`)
|
||||
chalkMock.whiteBright = vi.fn().mockImplementation((msg) => `whiteBright ${msg}`)
|
||||
chalkMock.redBright = vi.fn().mockImplementation((msg) => `redBright ${msg}`)
|
||||
chalkMock.cyan = vi.fn().mockImplementation((msg) => `cyan ${msg}`)
|
||||
chalkMock.blue = vi.fn().mockImplementation((msg) => `blue ${msg}`)
|
||||
chalkMock.grey = vi.fn().mockImplementation((msg) => `grey ${msg}`)
|
||||
chalkMock.green = vi.fn().mockImplementation((msg) => `green ${msg}`)
|
||||
chalkMock.red = vi.fn().mockImplementation((...msg: string[]) => `red ${msg.join(' ')}`)
|
||||
chalkMock.gray = vi.fn().mockImplementation((...msg: string[]) => `gray ${msg.join(' ')}`)
|
||||
chalkMock.black = vi.fn().mockImplementation((msg) => `black ${msg}`)
|
||||
chalkMock.white = chalkMock
|
||||
chalkMock.yellow = vi.fn().mockImplementation((...msg: string[]) => `yellow ${msg.join(' ')}`)
|
||||
chalkMock.magenta = vi.fn().mockImplementation((msg) => `magenta ${msg}`)
|
||||
chalkMock.bgGreen = vi.fn().mockImplementation((msg) => `bgGreen ${msg}`)
|
||||
chalkMock.dim = vi.fn().mockImplementation((msg) => `dim ${msg}`)
|
||||
chalkMock.supportsColor = { hasBasic: true }
|
||||
chalkMock.bgYellow = chalkMock
|
||||
chalkMock.bgRed = chalkMock
|
||||
chalkMock.bold = function (msg: string) { return `bold ${msg}` }
|
||||
chalkMock.bold.__proto__ = chalkMock
|
||||
|
||||
export default chalkMock
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
import fs from 'fs'
|
||||
import fs from 'node:fs'
|
||||
import { it, describe, expect, vi, afterEach, beforeEach, afterAll } from 'vitest'
|
||||
|
||||
import nodeLogger from '../src/node'
|
||||
import nodeLogger2 from '../build/node'
|
||||
|
||||
import type log from 'loglevel'
|
||||
|
||||
jest.useFakeTimers('legacy')
|
||||
vi.useFakeTimers()
|
||||
vi.mock('chalk', () => import('./__mocks__/chalk'))
|
||||
|
||||
describe('wdio-logger node', () => {
|
||||
describe('log level', () => {
|
||||
|
|
@ -134,10 +137,10 @@ describe('wdio-logger node', () => {
|
|||
})
|
||||
|
||||
describe('logFile', () => {
|
||||
const write = jest.fn(logText => logText)
|
||||
const logInfoSpy = jest.spyOn(fs, 'createWriteStream')
|
||||
const logCacheAddSpy = jest.spyOn(Set.prototype, 'add')
|
||||
const logCacheForEachSpy = jest.spyOn(Set.prototype, 'forEach')
|
||||
const write = vi.fn(logText => logText)
|
||||
const logInfoSpy = vi.spyOn(fs, 'createWriteStream')
|
||||
const logCacheAddSpy = vi.spyOn(Set.prototype, 'add')
|
||||
const logCacheForEachSpy = vi.spyOn(Set.prototype, 'forEach')
|
||||
let writableBuffer: any = null
|
||||
logInfoSpy.mockImplementation((path: fs.PathLike): fs.WriteStream => ({
|
||||
path: path as string,
|
||||
|
|
@ -148,9 +151,14 @@ describe('wdio-logger node', () => {
|
|||
// @ts-ignore
|
||||
return writableBuffer
|
||||
},
|
||||
end: () => {}
|
||||
// @ts-expect-error
|
||||
end: vi.fn()
|
||||
}))
|
||||
|
||||
beforeEach(() => {
|
||||
logCacheAddSpy.mockClear()
|
||||
})
|
||||
|
||||
it('should be possible to add to cache', () => {
|
||||
const log = nodeLogger('test-logFile1')
|
||||
log.info('foo')
|
||||
|
|
@ -271,9 +279,9 @@ describe('wdio-logger node', () => {
|
|||
writableBuffer = ['bar']
|
||||
|
||||
const waitPromise = nodeLogger.waitForBuffer()
|
||||
jest.advanceTimersByTime(30)
|
||||
vi.advanceTimersByTime(30)
|
||||
writableBuffer = []
|
||||
jest.advanceTimersByTime(30)
|
||||
vi.advanceTimersByTime(30)
|
||||
expect(await waitPromise).toBe(undefined)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
15
vitest.config.ts
Normal file
15
vitest.config.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { defineConfig } from 'vite'
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
include: ['packages/wdio-logger/**/*.test.ts'],
|
||||
coverage: {
|
||||
enabled: true,
|
||||
exclude: ['**/build/**', '**/*.test.ts'],
|
||||
lines: 90,
|
||||
functions: 90,
|
||||
branches: 90,
|
||||
statements: 90
|
||||
}
|
||||
}
|
||||
})
|
||||
Loading…
Reference in a new issue