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.
- package/.github/workflows/ci.yml +3 -23
- package/CLAUDE.md +53 -0
- package/eslint.config.js +10 -0
- package/index.js +4 -0
- package/lib/wait.js +50 -43
- package/lib/worker.js +18 -13
- package/package.json +14 -19
- package/test/base.test.js +60 -86
- package/test/bench.test.js +3 -3
- package/test/bundlers.test.js +8 -9
- package/test/commonjs-fallback.test.js +17 -22
- package/test/context.test.js +6 -6
- package/test/end.test.js +22 -27
- package/test/esm.test.mjs +8 -9
- package/test/event.test.js +10 -9
- package/test/helper.js +1 -10
- package/test/indexes.test.js +4 -4
- package/test/multibyte-chars.test.mjs +14 -13
- package/test/pkg/index.js +23 -23
- package/test/pkg/pkg.config.json +3 -4
- package/test/pkg/pkg.test.js +5 -6
- package/test/post-message.test.js +4 -5
- package/test/string-limit-2.test.js +24 -30
- package/test/string-limit.test.js +24 -29
- package/test/thread-management.test.js +34 -17
- package/test/transpiled.test.js +5 -6
- package/test/ts-native.test.mjs +35 -0
- package/test/ts-node-fallback.test.js +35 -0
- package/.taprc +0 -4
- package/test/never-drain.test.js +0 -57
- package/test/ts.test.ts +0 -33
package/test/bench.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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
|
-
|
|
36
|
+
done()
|
|
37
37
|
})
|
|
38
38
|
})
|
package/test/bundlers.test.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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
|
-
|
|
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
|
-
|
|
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('
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
assert.deepStrictEqual(stream.writableErrored, null)
|
|
24
23
|
stream.on('error', (err) => {
|
|
25
|
-
|
|
26
|
-
t.pass('error emitted')
|
|
24
|
+
assert.deepStrictEqual(stream.writableErrored, err)
|
|
27
25
|
})
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
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.
|
|
43
|
+
t.after(() => {
|
|
47
44
|
stream.end()
|
|
48
45
|
})
|
|
49
46
|
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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.
|
|
65
|
+
t.after(() => {
|
|
71
66
|
stream.end()
|
|
72
67
|
})
|
|
73
68
|
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
74
|
+
assert.strictEqual(strings, 'hello world\nsomething else\n')
|
|
80
75
|
})
|
package/test/context.test.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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.
|
|
15
|
+
t.after(() => stream.end())
|
|
16
16
|
stream.on('context', (ctx) => {
|
|
17
|
-
|
|
18
|
-
|
|
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('
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
48
|
-
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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 '
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
26
|
+
done()
|
|
28
27
|
})
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
assert.ok(stream.write('hello world\n'))
|
|
30
|
+
assert.ok(stream.write('something else\n'))
|
|
32
31
|
|
|
33
32
|
stream.end()
|
|
34
33
|
})
|
package/test/event.test.js
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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.
|
|
14
|
+
t.after(() => stream.end())
|
|
14
15
|
stream.on('socketError', function (a, b, c, n, error) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
}
|
package/test/indexes.test.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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 (
|
|
8
|
-
|
|
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 '
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
|
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
|
-
|
|
13
|
-
|
|
13
|
+
globalThis.__bundlerPathsOverrides = {
|
|
14
|
+
'thread-stream-worker': join(__dirname, '..', 'custom-worker.js')
|
|
15
|
+
}
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
'thread-stream-worker': join(__dirname, '..', 'custom-worker.js')
|
|
17
|
-
}
|
|
17
|
+
const dest = file()
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
process.
|
|
22
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
24
|
+
const stream = new ThreadStream({
|
|
25
|
+
filename: join(__dirname, '..', 'to-file.js'),
|
|
26
|
+
workerData: { dest },
|
|
27
|
+
sync: true
|
|
28
|
+
})
|
|
35
29
|
|
|
36
|
-
|
|
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()
|
package/test/pkg/pkg.config.json
CHANGED
package/test/pkg/pkg.test.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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('
|
|
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.
|
|
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
|
-
|
|
22
|
+
assert.strictEqual(confirmation, 'received: hello')
|
|
24
23
|
})
|