diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48e170e..a6c1c0f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: contents: read strategy: matrix: - node-version: [14, 16, 18] + node-version: [18, 20] os: [macos-latest, ubuntu-latest, windows-latest] exclude: - node-version: 14 @@ -59,30 +59,13 @@ jobs: with: path: node_modules key: node-modules-${{ hashFiles('package.json') }} - + - name: Install dependencies run: npm i --ignore-scripts - name: Run Tests run: npm run test-ci - - name: Coveralls Parallel - uses: coverallsapp/github-action@v2.1.2 - with: - github-token: ${{ secrets.github_token }} - parallel: true - flag-name: run-${{ matrix.node-version }}-${{ matrix.os }} - - coverage: - needs: test - runs-on: ubuntu-latest - steps: - - name: Coveralls Finished - uses: coverallsapp/github-action@v2.1.2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - parallel-finished: true - automerge: name: Automerge Dependabot PRs if: > diff --git a/.husky/.gitignore b/.husky/.gitignore deleted file mode 100644 index 31354ec..0000000 --- a/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 610c2a5..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npm test diff --git a/README.md b/README.md index 1748e8f..a9d7560 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # pino-abstract-transport [![npm version](https://img.shields.io/npm/v/pino-abstract-transport)](https://www.npmjs.com/package/pino-abstract-transport) [![Build Status](https://img.shields.io/github/workflow/status/pinojs/pino-abstract-transport/CI)](https://github.com/pinojs/pino-abstract-transport/actions) -[![Coverage Status](https://coveralls.io/repos/github/pinojs/pino-abstract-transport/badge.svg?branch=master)](https://coveralls.io/github/pinojs/pino-abstract-transport?branch=master) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/) Write Pino transports easily. diff --git a/package.json b/package.json index bb72d2b..5a524d4 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,8 @@ "description": "Write Pino transports easily", "main": "index.js", "scripts": { - "prepare": "husky install", - "test": "standard | snazzy && tap test/*.test.js && tsd", - "test-ci": "standard | snazzy && tap test/*.test.js --coverage-report=lcovonly && tsd" + "test": "standard | snazzy && c8 node --test test/base.test.js && tsd", + "test-ci": "npm test" }, "repository": { "type": "git", @@ -27,14 +26,18 @@ "split2": "^4.0.0" }, "devDependencies": { + "@fastify/pre-commit": "^2.1.0", + "@matteo.collina/tspl": "^0.1.1", "@types/node": "^20.1.0", - "husky": "^9.0.6", + "c8": "^9.1.0", "snazzy": "^9.0.0", "standard": "^17.0.0", - "tap": "^16.0.0", "tsd": "^0.30.0" }, "tsd": { "directory": "./test/types" - } + }, + "precommit": [ + "test" + ] } diff --git a/test/base.test.js b/test/base.test.js index e025525..d3a7204 100644 --- a/test/base.test.js +++ b/test/base.test.js @@ -3,11 +3,12 @@ const { once } = require('events') const { Transform, pipeline } = require('stream') -const { test } = require('tap') +const test = require('node:test') +const tspl = require('@matteo.collina/tspl') const build = require('../') -test('parse newlined delimited JSON', ({ same, plan }) => { - plan(2) +test('parse newlined delimited JSON', async (t) => { + const { deepEqual, completed } = tspl(t, { plan: 2 }) const expected = [{ level: 30, time: 1617955768092, @@ -25,17 +26,18 @@ test('parse newlined delimited JSON', ({ same, plan }) => { const stream = build(function (source) { source.on('data', function (line) { - same(expected.shift(), line) + deepEqual(line, expected.shift()) }) }) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('parse newlined delimited JSON', ({ same, plan }) => { - plan(2) +test('parse newlined delimited JSON', async (t) => { + const { deepEqual, completed } = tspl(t, { plan: 2 }) const expected = [{ level: 30, time: 1617955768092, @@ -53,57 +55,61 @@ test('parse newlined delimited JSON', ({ same, plan }) => { const stream = build(function (source) { source.on('data', function (line) { - same(expected.shift(), line) + deepEqual(line, expected.shift()) }) }, { parse: 'json' }) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('null support', ({ same, plan }) => { - plan(1) +test('null support', async (t) => { + const { deepEqual, completed } = tspl(t, { plan: 1 }) const stream = build(function (source) { source.on('unknown', function (line) { - same('null', line) + deepEqual(line, 'null') }) }) stream.write('null\n') stream.end() + await completed }) -test('broken json', ({ same, plan }) => { - plan(2) +test('broken json', async (t) => { + const { deepEqual, match, completed } = tspl(t, { plan: 2 }) const expected = '{ "truncated' const stream = build(function (source) { source.on('unknown', function (line, error) { - same(expected, line) - same(error.message, 'Unexpected end of JSON input') + deepEqual(line, expected) + match(error.message, /(Unexpected end of JSON input)|(Unterminated string in JSON)/) }) }) stream.write(expected + '\n') stream.end() + await completed }) -test('pure values', ({ same, ok, plan }) => { - plan(3) +test('pure values', async (t) => { + const { deepEqual, ok, completed } = tspl(t, { plan: 3 }) const stream = build(function (source) { source.on('data', function (line) { - same(line.data, 42) + deepEqual(42, line.data) ok(line.time) - same(new Date(line.time).getTime(), line.time) + deepEqual(line.time, new Date(line.time).getTime()) }) }) stream.write('42\n') stream.end() + await completed }) -test('support async iteration', ({ same, plan }) => { - plan(2) +test('support async iteration', async (t) => { + const { deepEqual, completed } = tspl(t, { plan: 2 }) const expected = [{ level: 30, time: 1617955768092, @@ -121,26 +127,29 @@ test('support async iteration', ({ same, plan }) => { const stream = build(async function (source) { for await (const line of source) { - same(expected.shift(), line) + deepEqual(line, expected.shift()) } }) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('rejecting errors the stream', async ({ same, plan }) => { +test('rejecting errors the stream', async (t) => { + const { deepEqual, completed } = tspl(t, { plan: 1 }) const stream = build(async function (source) { throw new Error('kaboom') }) const [err] = await once(stream, 'error') - same(err.message, 'kaboom') + deepEqual('kaboom', err.message) + await completed }) -test('set metadata', ({ same, plan, equal }) => { - plan(9) +test('set metadata', async (t) => { + const { deepEqual, equal, completed } = tspl(t, { plan: 9 }) const expected = [{ level: 30, @@ -160,21 +169,22 @@ test('set metadata', ({ same, plan, equal }) => { const stream = build(function (source) { source.on('data', function (line) { const obj = expected.shift() - same(this.lastLevel, obj.level) - same(this.lastTime, obj.time) - same(this.lastObj, obj) - same(obj, line) + deepEqual(obj.level, this.lastLevel) + deepEqual(obj.time, this.lastTime) + deepEqual(obj, this.lastObj) + deepEqual(line, obj) }) }, { metadata: true }) - equal(stream[Symbol.for('pino.metadata')], true) + equal(true, stream[Symbol.for('pino.metadata')]) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('parse lines', ({ same, plan, equal }) => { - plan(9) +test('parse lines', async (t) => { + const { deepEqual, equal, completed } = tspl(t, { plan: 9 }) const expected = [{ level: 30, @@ -194,21 +204,22 @@ test('parse lines', ({ same, plan, equal }) => { const stream = build(function (source) { source.on('data', function (line) { const obj = expected.shift() - same(this.lastLevel, obj.level) - same(this.lastTime, obj.time) - same(this.lastObj, obj) - same(JSON.stringify(obj), line) + deepEqual(obj.level, this.lastLevel) + deepEqual(obj.time, this.lastTime) + deepEqual(obj, this.lastObj) + deepEqual(line, JSON.stringify(obj)) }) }, { metadata: true, parse: 'lines' }) - equal(stream[Symbol.for('pino.metadata')], true) + equal(true, stream[Symbol.for('pino.metadata')]) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('custom parse line function', ({ same, plan, equal }) => { - plan(11) +test('custom parse line function', async (t) => { + const { deepEqual, equal, completed } = tspl(t, { plan: 11 }) const expected = [{ level: 30, @@ -228,29 +239,30 @@ test('custom parse line function', ({ same, plan, equal }) => { function parseLine (str) { const obj = JSON.parse(str) - same(expected[num], obj) + deepEqual(obj, expected[num]) return obj } const stream = build(function (source) { source.on('data', function (line) { const obj = expected[num] - same(this.lastLevel, obj.level) - same(this.lastTime, obj.time) - same(this.lastObj, obj) - same(obj, line) + deepEqual(obj.level, this.lastLevel) + deepEqual(obj.time, this.lastTime) + deepEqual(obj, this.lastObj) + deepEqual(line, obj) num++ }) }, { metadata: true, parseLine }) - equal(stream[Symbol.for('pino.metadata')], true) + equal(true, stream[Symbol.for('pino.metadata')]) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('set metadata (default)', ({ same, plan, equal }) => { - plan(9) +test('set metadata (default)', async (t) => { + const { deepEqual, equal, completed } = tspl(t, { plan: 9 }) const expected = [{ level: 30, @@ -270,21 +282,22 @@ test('set metadata (default)', ({ same, plan, equal }) => { const stream = build(function (source) { source.on('data', function (line) { const obj = expected.shift() - same(this.lastLevel, obj.level) - same(this.lastTime, obj.time) - same(this.lastObj, obj) - same(obj, line) + deepEqual(obj.level, this.lastLevel) + deepEqual(obj.time, this.lastTime) + deepEqual(obj, this.lastObj) + deepEqual(line, obj) }) }) - equal(stream[Symbol.for('pino.metadata')], true) + equal(true, stream[Symbol.for('pino.metadata')]) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('do not set metadata', ({ same, plan, equal }) => { - plan(9) +test('do not set metadata', async (t) => { + const { deepEqual, equal, completed } = tspl(t, { plan: 9 }) const expected = [{ level: 30, @@ -304,21 +317,22 @@ test('do not set metadata', ({ same, plan, equal }) => { const stream = build(function (source) { source.on('data', function (line) { const obj = expected.shift() - same(this.lastLevel, undefined) - same(this.lastTime, undefined) - same(this.lastObj, undefined) - same(obj, line) + deepEqual(undefined, this.lastLevel) + deepEqual(undefined, this.lastTime) + deepEqual(undefined, this.lastObj) + deepEqual(line, obj) }) }, { metadata: false }) - equal(stream[Symbol.for('pino.metadata')], undefined) + equal(undefined, stream[Symbol.for('pino.metadata')]) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('close logic', ({ same, plan, pass }) => { - plan(3) +test('close logic', async (t) => { + const { deepEqual, ok, completed } = tspl(t, { plan: 2 }) const expected = [{ level: 30, time: 1617955768092, @@ -336,11 +350,11 @@ test('close logic', ({ same, plan, pass }) => { const stream = build(function (source) { source.on('data', function (line) { - same(expected.shift(), line) + deepEqual(line, expected.shift()) }) }, { close (err, cb) { - pass('close called') + ok(true, 'close called') process.nextTick(cb, err) } }) @@ -348,10 +362,11 @@ test('close logic', ({ same, plan, pass }) => { const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('close with promises', ({ same, plan, pass }) => { - plan(3) +test('close with promises', async (t) => { + const { deepEqual, ok, completed } = tspl(t, { plan: 2 }) const expected = [{ level: 30, time: 1617955768092, @@ -369,21 +384,22 @@ test('close with promises', ({ same, plan, pass }) => { const stream = build(function (source) { source.on('data', function (line) { - same(expected.shift(), line) + deepEqual(line, expected.shift()) }) }, { async close () { - pass('close called') + ok(true, 'close called') } }) const lines = expected.map(JSON.stringify).join('\n') stream.write(lines) stream.end() + await completed }) -test('support Transform streams', ({ same, plan, error }) => { - plan(7) +test('support Transform streams', async (t) => { + const { deepEqual, ifError, completed } = tspl(t, { plan: 7 }) const expected1 = [{ level: 30, @@ -407,7 +423,7 @@ test('support Transform streams', ({ same, plan, error }) => { objectMode: true, autoDestroy: true, transform (chunk, enc, cb) { - same(expected1.shift(), chunk) + deepEqual(chunk, expected1.shift()) chunk.service = 'from transform' expected2.push(chunk) cb(null, JSON.stringify(chunk) + '\n') @@ -421,17 +437,18 @@ test('support Transform streams', ({ same, plan, error }) => { const stream2 = build(function (source) { source.on('data', function (line) { - same(expected2.shift(), line) + deepEqual(line, expected2.shift()) }) }) pipeline(stream1, stream2, function (err) { - error(err) - same(expected1, []) - same(expected2, []) + ifError(err) + deepEqual([], expected1) + deepEqual([], expected2) }) const lines = expected1.map(JSON.stringify).join('\n') stream1.write(lines) stream1.end() + await completed })