thread-stream 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const { join } = require('path')
5
5
  const ThreadStream = require('..')
6
6
  const { file } = require('./helper')
@@ -13,7 +13,7 @@ for (let i = 0; i < 10; i++) {
13
13
  str += 'hello'
14
14
  }
15
15
 
16
- test('base', function (t) {
16
+ test('base', function (t, done) {
17
17
  const dest = file()
18
18
  const stream = new ThreadStream({
19
19
  filename: join(__dirname, 'to-file.js'),
@@ -33,6 +33,6 @@ test('base', function (t) {
33
33
  }
34
34
  benchThreadStream()
35
35
  stream.on('finish', function () {
36
- t.end()
36
+ done()
37
37
  })
38
38
  })
@@ -1,13 +1,12 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { file } = require('./helper')
6
7
  const ThreadStream = require('..')
7
8
 
8
- test('bundlers support with .js file', function (t) {
9
- t.plan(1)
10
-
9
+ test('bundlers support with .js file', function (t, done) {
11
10
  globalThis.__bundlerPathsOverrides = {
12
11
  'thread-stream-worker': join(__dirname, 'custom-worker.js')
13
12
  }
@@ -26,15 +25,14 @@ test('bundlers support with .js file', function (t) {
26
25
 
27
26
  stream.worker.removeAllListeners('message')
28
27
  stream.worker.once('message', message => {
29
- t.equal(message.code, 'CUSTOM-WORKER-CALLED')
28
+ assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED')
29
+ done()
30
30
  })
31
31
 
32
32
  stream.end()
33
33
  })
34
34
 
35
- test('bundlers support with .mjs file', function (t) {
36
- t.plan(1)
37
-
35
+ test('bundlers support with .mjs file', function (t, done) {
38
36
  globalThis.__bundlerPathsOverrides = {
39
37
  'thread-stream-worker': join(__dirname, 'custom-worker.js')
40
38
  }
@@ -53,7 +51,8 @@ test('bundlers support with .mjs file', function (t) {
53
51
 
54
52
  stream.worker.removeAllListeners('message')
55
53
  stream.worker.once('message', message => {
56
- t.equal(message.code, 'CUSTOM-WORKER-CALLED')
54
+ assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED')
55
+ done()
57
56
  })
58
57
 
59
58
  stream.end()
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { MessageChannel } = require('worker_threads')
6
7
  const { once } = require('events')
@@ -8,11 +9,9 @@ const ThreadStream = require('..')
8
9
 
9
10
  const isYarnPnp = process.versions.pnp !== undefined
10
11
 
11
- test('yarn module resolution', { skip: !isYarnPnp }, t => {
12
- t.plan(6)
13
-
12
+ test('yarn module resolution', { skip: !isYarnPnp }, (t, done) => {
14
13
  const modulePath = require.resolve('pino-elasticsearch')
15
- t.match(modulePath, /.*\.zip.*/)
14
+ assert.match(modulePath, /.*\.zip.*/)
16
15
 
17
16
  const stream = new ThreadStream({
18
17
  filename: modulePath,
@@ -20,20 +19,18 @@ test('yarn module resolution', { skip: !isYarnPnp }, t => {
20
19
  sync: true
21
20
  })
22
21
 
23
- t.same(stream.writableErrored, null)
22
+ assert.deepStrictEqual(stream.writableErrored, null)
24
23
  stream.on('error', (err) => {
25
- t.same(stream.writableErrored, err)
26
- t.pass('error emitted')
24
+ assert.deepStrictEqual(stream.writableErrored, err)
27
25
  })
28
26
 
29
- t.ok(stream.write('hello world\n'))
30
- t.ok(stream.writable)
27
+ assert.ok(stream.write('hello world\n'))
28
+ assert.ok(stream.writable)
31
29
  stream.end()
30
+ done()
32
31
  })
33
32
 
34
33
  test('yarn module resolution for directories with special characters', { skip: !isYarnPnp }, async t => {
35
- t.plan(3)
36
-
37
34
  const { port1, port2 } = new MessageChannel()
38
35
  const stream = new ThreadStream({
39
36
  filename: join(__dirname, 'dir with spaces', 'test-package.zip', 'worker.js'),
@@ -43,21 +40,19 @@ test('yarn module resolution for directories with special characters', { skip: !
43
40
  },
44
41
  sync: false
45
42
  })
46
- t.teardown(() => {
43
+ t.after(() => {
47
44
  stream.end()
48
45
  })
49
46
 
50
- t.ok(stream.write('hello world\n'))
51
- t.ok(stream.write('something else\n'))
47
+ assert.ok(stream.write('hello world\n'))
48
+ assert.ok(stream.write('something else\n'))
52
49
 
53
50
  const [strings] = await once(port2, 'message')
54
51
 
55
- t.equal(strings, 'hello world\nsomething else\n')
52
+ assert.strictEqual(strings, 'hello world\nsomething else\n')
56
53
  })
57
54
 
58
55
  test('yarn module resolution for typescript commonjs modules', { skip: !isYarnPnp }, async t => {
59
- t.plan(3)
60
-
61
56
  const { port1, port2 } = new MessageChannel()
62
57
  const stream = new ThreadStream({
63
58
  filename: join(__dirname, 'ts-commonjs-default-export.zip', 'worker.js'),
@@ -67,14 +62,14 @@ test('yarn module resolution for typescript commonjs modules', { skip: !isYarnPn
67
62
  },
68
63
  sync: false
69
64
  })
70
- t.teardown(() => {
65
+ t.after(() => {
71
66
  stream.end()
72
67
  })
73
68
 
74
- t.ok(stream.write('hello world\n'))
75
- t.ok(stream.write('something else\n'))
69
+ assert.ok(stream.write('hello world\n'))
70
+ assert.ok(stream.write('something else\n'))
76
71
 
77
72
  const [strings] = await once(port2, 'message')
78
73
 
79
- t.equal(strings, 'hello world\nsomething else\n')
74
+ assert.strictEqual(strings, 'hello world\nsomething else\n')
80
75
  })
@@ -1,21 +1,21 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const ThreadStream = require('..')
6
7
  const { version } = require('../package.json')
7
- require('why-is-node-running')
8
8
 
9
- test('get context', (t) => {
9
+ test('get context', (t, done) => {
10
10
  const stream = new ThreadStream({
11
11
  filename: join(__dirname, 'get-context.js'),
12
12
  workerData: {},
13
13
  sync: true
14
14
  })
15
- t.on('end', () => stream.end())
15
+ t.after(() => stream.end())
16
16
  stream.on('context', (ctx) => {
17
- t.same(ctx.threadStreamVersion, version)
18
- t.end()
17
+ assert.deepStrictEqual(ctx.threadStreamVersion, version)
18
+ done()
19
19
  })
20
20
  stream.write('hello')
21
21
  })
package/test/end.test.js CHANGED
@@ -1,14 +1,13 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { readFile } = require('fs')
6
7
  const { file } = require('./helper')
7
8
  const ThreadStream = require('..')
8
9
 
9
- test('destroy support', function (t) {
10
- t.plan(7)
11
-
10
+ test('destroy support', function (t, done) {
12
11
  const dest = file()
13
12
  const stream = new ThreadStream({
14
13
  filename: join(__dirname, 'to-file-on-destroy.js'),
@@ -17,25 +16,22 @@ test('destroy support', function (t) {
17
16
  })
18
17
 
19
18
  stream.on('close', () => {
20
- t.notOk(stream.writable)
21
- t.pass('close emitted')
19
+ assert.ok(!stream.writable)
20
+ readFile(dest, 'utf8', (err, data) => {
21
+ assert.ifError(err)
22
+ assert.strictEqual(data, 'hello world\nsomething else\n')
23
+ done()
24
+ })
22
25
  })
23
26
 
24
- t.ok(stream.write('hello world\n'))
25
- t.ok(stream.write('something else\n'))
26
- t.ok(stream.writable)
27
+ assert.ok(stream.write('hello world\n'))
28
+ assert.ok(stream.write('something else\n'))
29
+ assert.ok(stream.writable)
27
30
 
28
31
  stream.end()
29
-
30
- readFile(dest, 'utf8', (err, data) => {
31
- t.error(err)
32
- t.equal(data, 'hello world\nsomething else\n')
33
- })
34
32
  })
35
33
 
36
- test('synchronous _final support', function (t) {
37
- t.plan(7)
38
-
34
+ test('synchronous _final support', function (t, done) {
39
35
  const dest = file()
40
36
  const stream = new ThreadStream({
41
37
  filename: join(__dirname, 'to-file-on-final.js'),
@@ -44,18 +40,17 @@ test('synchronous _final support', function (t) {
44
40
  })
45
41
 
46
42
  stream.on('close', () => {
47
- t.notOk(stream.writable)
48
- t.pass('close emitted')
43
+ assert.ok(!stream.writable)
44
+ readFile(dest, 'utf8', (err, data) => {
45
+ assert.ifError(err)
46
+ assert.strictEqual(data, 'hello world\nsomething else\n')
47
+ done()
48
+ })
49
49
  })
50
50
 
51
- t.ok(stream.write('hello world\n'))
52
- t.ok(stream.write('something else\n'))
53
- t.ok(stream.writable)
51
+ assert.ok(stream.write('hello world\n'))
52
+ assert.ok(stream.write('something else\n'))
53
+ assert.ok(stream.writable)
54
54
 
55
55
  stream.end()
56
-
57
- readFile(dest, 'utf8', (err, data) => {
58
- t.error(err)
59
- t.equal(data, 'hello world\nsomething else\n')
60
- })
61
56
  })
package/test/esm.test.mjs CHANGED
@@ -1,4 +1,5 @@
1
- import { test } from 'tap'
1
+ import { test } from 'node:test'
2
+ import assert from 'node:assert'
2
3
  import { readFile } from 'fs'
3
4
  import ThreadStream from '../index.js'
4
5
  import { join } from 'desm'
@@ -6,9 +7,7 @@ import { pathToFileURL } from 'url'
6
7
  import { file } from './helper.js'
7
8
 
8
9
  function basic (text, filename) {
9
- test(text, function (t) {
10
- t.plan(5)
11
-
10
+ test(text, function (t, done) {
12
11
  const dest = file()
13
12
  const stream = new ThreadStream({
14
13
  filename,
@@ -18,17 +17,17 @@ function basic (text, filename) {
18
17
 
19
18
  stream.on('finish', () => {
20
19
  readFile(dest, 'utf8', (err, data) => {
21
- t.error(err)
22
- t.equal(data, 'hello world\nsomething else\n')
20
+ assert.ifError(err)
21
+ assert.strictEqual(data, 'hello world\nsomething else\n')
23
22
  })
24
23
  })
25
24
 
26
25
  stream.on('close', () => {
27
- t.pass('close emitted')
26
+ done()
28
27
  })
29
28
 
30
- t.ok(stream.write('hello world\n'))
31
- t.ok(stream.write('something else\n'))
29
+ assert.ok(stream.write('hello world\n'))
30
+ assert.ok(stream.write('something else\n'))
32
31
 
33
32
  stream.end()
34
33
  })
@@ -1,23 +1,24 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const ThreadStream = require('..')
6
7
 
7
- test('event propagate', t => {
8
+ test('event propagate', (t, done) => {
8
9
  const stream = new ThreadStream({
9
10
  filename: join(__dirname, 'emit-event.js'),
10
11
  workerData: {},
11
12
  sync: true
12
13
  })
13
- t.on('end', () => stream.end())
14
+ t.after(() => stream.end())
14
15
  stream.on('socketError', function (a, b, c, n, error) {
15
- t.same(a, 'list')
16
- t.same(b, 'of')
17
- t.same(c, 'args')
18
- t.same(n, 123)
19
- t.same(error, new Error('unable to write data to the TCP socket'))
20
- t.end()
16
+ assert.deepStrictEqual(a, 'list')
17
+ assert.deepStrictEqual(b, 'of')
18
+ assert.deepStrictEqual(c, 'args')
19
+ assert.deepStrictEqual(n, 123)
20
+ assert.deepStrictEqual(error, new Error('unable to write data to the TCP socket'))
21
+ done()
21
22
  })
22
23
  stream.write('hello')
23
24
  })
package/test/helper.js CHANGED
@@ -3,7 +3,6 @@
3
3
  const { join } = require('path')
4
4
  const { tmpdir } = require('os')
5
5
  const { unlinkSync } = require('fs')
6
- const t = require('tap')
7
6
 
8
7
  const files = []
9
8
  let count = 0
@@ -15,21 +14,13 @@ function file () {
15
14
  }
16
15
 
17
16
  process.on('beforeExit', () => {
18
- t.comment('unlink files')
19
17
  for (const file of files) {
20
18
  try {
21
- t.comment(`unliking ${file}`)
22
19
  unlinkSync(file)
23
20
  } catch (e) {
24
- console.log(e)
21
+ // ignore cleanup errors
25
22
  }
26
23
  }
27
- t.comment('unlink completed')
28
24
  })
29
25
 
30
26
  module.exports.file = file
31
-
32
- if (process.env.SKIP_PROCESS_EXIT_CHECK !== 'true') {
33
- const why = require('why-is-node-running')
34
- setInterval(why, 10000).unref()
35
- }
@@ -1,11 +1,11 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const indexes = require('../lib/indexes')
5
6
 
6
7
  for (const index of Object.keys(indexes)) {
7
- test(`${index} is lock free`, function (t) {
8
- t.equal(Atomics.isLockFree(indexes[index]), true)
9
- t.end()
8
+ test(`${index} is lock free`, function () {
9
+ assert.strictEqual(Atomics.isLockFree(indexes[index]), true)
10
10
  })
11
11
  }
@@ -1,11 +1,11 @@
1
- import { test } from 'tap'
1
+ import { test } from 'node:test'
2
+ import assert from 'node:assert'
2
3
  import { readFile } from 'fs'
3
4
  import ThreadStream from '../index.js'
4
5
  import { join } from 'desm'
5
6
  import { file } from './helper.js'
6
7
 
7
- test('break up utf8 multibyte (sync)', (t) => {
8
- t.plan(2)
8
+ test('break up utf8 multibyte (sync)', (t, done) => {
9
9
  const longString = '\u03A3'.repeat(16)
10
10
 
11
11
  const dest = file()
@@ -18,8 +18,9 @@ test('break up utf8 multibyte (sync)', (t) => {
18
18
 
19
19
  stream.on('finish', () => {
20
20
  readFile(dest, 'utf8', (err, data) => {
21
- t.error(err)
22
- t.equal(data, longString)
21
+ assert.ifError(err)
22
+ assert.strictEqual(data, longString)
23
+ done()
23
24
  })
24
25
  })
25
26
 
@@ -27,8 +28,7 @@ test('break up utf8 multibyte (sync)', (t) => {
27
28
  stream.end()
28
29
  })
29
30
 
30
- test('break up utf8 multibyte (async)', (t) => {
31
- t.plan(2)
31
+ test('break up utf8 multibyte (async)', (t, done) => {
32
32
  const longString = '\u03A3'.repeat(16)
33
33
 
34
34
  const dest = file()
@@ -41,8 +41,9 @@ test('break up utf8 multibyte (async)', (t) => {
41
41
 
42
42
  stream.on('finish', () => {
43
43
  readFile(dest, 'utf8', (err, data) => {
44
- t.error(err)
45
- t.equal(data, longString)
44
+ assert.ifError(err)
45
+ assert.strictEqual(data, longString)
46
+ done()
46
47
  })
47
48
  })
48
49
 
@@ -50,8 +51,7 @@ test('break up utf8 multibyte (async)', (t) => {
50
51
  stream.end()
51
52
  })
52
53
 
53
- test('break up utf8 multibyte several times bigger than write buffer', (t) => {
54
- t.plan(2)
54
+ test('break up utf8 multibyte several times bigger than write buffer', (t, done) => {
55
55
  const longString = '\u03A3'.repeat(32)
56
56
 
57
57
  const dest = file()
@@ -64,8 +64,9 @@ test('break up utf8 multibyte several times bigger than write buffer', (t) => {
64
64
 
65
65
  stream.on('finish', () => {
66
66
  readFile(dest, 'utf8', (err, data) => {
67
- t.error(err)
68
- t.equal(data, longString)
67
+ assert.ifError(err)
68
+ assert.strictEqual(data, longString)
69
+ done()
69
70
  })
70
71
  })
71
72
 
package/test/pkg/index.js CHANGED
@@ -1,37 +1,37 @@
1
1
  'use strict'
2
2
 
3
3
  /**
4
- * This file is packaged using pkg in order to test if worker.js works in that context
4
+ * This file is packaged using pkg in order to test if worker.js works in that context.
5
+ * Note: We can't use node:test here because it crashes inside pkg bundles due to V8 internals.
5
6
  */
6
7
 
7
- const { test } = require('tap')
8
+ const assert = require('node:assert')
8
9
  const { join } = require('path')
9
10
  const { file } = require('../helper')
10
11
  const ThreadStream = require('../..')
11
12
 
12
- test('bundlers support with .js file', function (t) {
13
- t.plan(1)
13
+ globalThis.__bundlerPathsOverrides = {
14
+ 'thread-stream-worker': join(__dirname, '..', 'custom-worker.js')
15
+ }
14
16
 
15
- globalThis.__bundlerPathsOverrides = {
16
- 'thread-stream-worker': join(__dirname, '..', 'custom-worker.js')
17
- }
17
+ const dest = file()
18
18
 
19
- const dest = file()
20
-
21
- process.on('uncaughtException', (error) => {
22
- console.log(error)
23
- })
24
-
25
- const stream = new ThreadStream({
26
- filename: join(__dirname, '..', 'to-file.js'),
27
- workerData: { dest },
28
- sync: true
29
- })
19
+ process.on('uncaughtException', (error) => {
20
+ console.error(error)
21
+ process.exit(1)
22
+ })
30
23
 
31
- stream.worker.removeAllListeners('message')
32
- stream.worker.once('message', (message) => {
33
- t.equal(message.code, 'CUSTOM-WORKER-CALLED')
34
- })
24
+ const stream = new ThreadStream({
25
+ filename: join(__dirname, '..', 'to-file.js'),
26
+ workerData: { dest },
27
+ sync: true
28
+ })
35
29
 
36
- stream.end()
30
+ stream.worker.removeAllListeners('message')
31
+ stream.worker.once('message', (message) => {
32
+ assert.strictEqual(message.code, 'CUSTOM-WORKER-CALLED')
33
+ console.log('pkg test passed')
34
+ process.exit(0)
37
35
  })
36
+
37
+ stream.end()
@@ -5,10 +5,9 @@
5
5
  "../to-file.js"
6
6
  ],
7
7
  "targets": [
8
- "node14",
9
- "node16",
10
- "node18",
11
- "node20"
8
+ "node20",
9
+ "node22",
10
+ "node24"
12
11
  ],
13
12
  "outputPath": "test/pkg"
14
13
  }
@@ -1,6 +1,7 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const config = require('./pkg.config.json')
5
6
  const { promisify } = require('util')
6
7
  const { unlink } = require('fs/promises')
@@ -8,7 +9,7 @@ const { join } = require('path')
8
9
  const { platform } = require('process')
9
10
  const exec = promisify(require('child_process').exec)
10
11
 
11
- test('worker test when packaged into executable using pkg', async (t) => {
12
+ test('worker test when packaged into executable using pkg', async () => {
12
13
  const packageName = 'index'
13
14
 
14
15
  // package the app into several node versions, check config for more info
@@ -19,7 +20,7 @@ test('worker test when packaged into executable using pkg', async (t) => {
19
20
  const { stderr } = await exec(`npx pkg ${filePath} --config ${configPath}`)
20
21
 
21
22
  // there should be no error when packaging
22
- t.equal(stderr, '')
23
+ assert.strictEqual(stderr, '')
23
24
 
24
25
  // pkg outputs files in the following format by default: {filename}-{node version}
25
26
  for (const target of config.pkg.targets) {
@@ -36,11 +37,9 @@ test('worker test when packaged into executable using pkg', async (t) => {
36
37
  const { stderr } = await exec(executablePath)
37
38
 
38
39
  // check if there were no errors
39
- t.equal(stderr, '')
40
+ assert.strictEqual(stderr, '')
40
41
 
41
42
  // clean up afterwards
42
43
  await unlink(executablePath)
43
44
  }
44
-
45
- t.end()
46
45
  })
@@ -1,24 +1,23 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
+ const assert = require('node:assert')
4
5
  const { join } = require('path')
5
6
  const { once } = require('events')
6
7
  const { MessageChannel } = require('worker_threads')
7
8
  const ThreadStream = require('..')
8
9
 
9
10
  test('message events emitted on the stream are posted to the worker', async function (t) {
10
- t.plan(1)
11
-
12
11
  const { port1, port2 } = new MessageChannel()
13
12
  const stream = new ThreadStream({
14
13
  filename: join(__dirname, 'on-message.js'),
15
14
  sync: false
16
15
  })
17
- t.teardown(() => {
16
+ t.after(() => {
18
17
  stream.end()
19
18
  })
20
19
 
21
20
  stream.emit('message', { text: 'hello', takeThisPortPlease: port1 }, [port1])
22
21
  const [confirmation] = await once(port2, 'message')
23
- t.equal(confirmation, 'received: hello')
22
+ assert.strictEqual(confirmation, 'received: hello')
24
23
  })