@xylabs/threads 4.0.2 → 4.0.4

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.
@@ -64,9 +64,7 @@ function createEventObservable(worker, workerTermination) {
64
64
  worker.addEventListener('message', messageHandler);
65
65
  worker.addEventListener('unhandledrejection', rejectionHandler);
66
66
  workerTermination.then(() => {
67
- const terminationEvent = {
68
- type: master_1.WorkerEventType.termination,
69
- };
67
+ const terminationEvent = { type: master_1.WorkerEventType.termination };
70
68
  worker.removeEventListener('message', messageHandler);
71
69
  worker.removeEventListener('unhandledrejection', rejectionHandler);
72
70
  observer.next(terminationEvent);
@@ -28,9 +28,7 @@ function deconstructTransfer(thing) {
28
28
  }
29
29
  function postFunctionInitMessage() {
30
30
  const initMessage = {
31
- exposed: {
32
- type: 'function',
33
- },
31
+ exposed: { type: 'function' },
34
32
  type: messages_1.WorkerMessageType.init,
35
33
  };
36
34
  implementation_1.default.postMessageToMaster(initMessage);
package/dist/index.d.ts CHANGED
@@ -2,6 +2,6 @@ export { registerSerializer } from './common';
2
2
  export * from './master/index';
3
3
  export { QueuedTask } from './master/pool';
4
4
  export { ExposedToThreadType as ExposedAs } from './master/spawn';
5
- export { DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation } from './serializers';
5
+ export { DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation, } from './serializers';
6
6
  export { Transfer, TransferDescriptor } from './transferable';
7
7
  export { expose } from './worker/index';
@@ -46,5 +46,5 @@ declare function PoolConstructor<ThreadType extends Thread>(spawnWorker: () => P
46
46
  export declare const Pool: typeof PoolConstructor & {
47
47
  EventType: typeof PoolEventType;
48
48
  };
49
- export { PoolEvent, PoolEventType, QueuedTask } from './pool-types';
49
+ export { PoolEvent, PoolEventType, QueuedTask, } from './pool-types';
50
50
  export { Thread } from './thread';
@@ -64,9 +64,7 @@ function createEventObservable(worker, workerTermination) {
64
64
  worker.addEventListener('message', messageHandler);
65
65
  worker.addEventListener('unhandledrejection', rejectionHandler);
66
66
  workerTermination.then(() => {
67
- const terminationEvent = {
68
- type: master_1.WorkerEventType.termination,
69
- };
67
+ const terminationEvent = { type: master_1.WorkerEventType.termination };
70
68
  worker.removeEventListener('message', messageHandler);
71
69
  worker.removeEventListener('unhandledrejection', rejectionHandler);
72
70
  observer.next(terminationEvent);
@@ -28,9 +28,7 @@ function deconstructTransfer(thing) {
28
28
  }
29
29
  function postFunctionInitMessage() {
30
30
  const initMessage = {
31
- exposed: {
32
- type: 'function',
33
- },
31
+ exposed: { type: 'function' },
34
32
  type: messages_1.WorkerMessageType.init,
35
33
  };
36
34
  implementation_1.default.postMessageToMaster(initMessage);
package/observable.js CHANGED
@@ -1 +1,2 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  module.exports = require('./dist/observable')
package/package.json CHANGED
@@ -1,26 +1,27 @@
1
1
  {
2
2
  "name": "@xylabs/threads",
3
- "version": "4.0.2",
3
+ "version": "4.0.4",
4
4
  "description": "Web workers & worker threads as simple as a function call",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/esm/index.js",
8
8
  "types": "dist/index.d.ts",
9
9
  "scripts": {
10
- "package-compile": "yarn build",
10
+ "package-compile": "echo COMPILE && yarn build-threads",
11
+ "package-build": "echo BUILD && yarn build-threads && echo BUILD_DONE",
11
12
  "clean": "rimraf ./dist ./dist-esm",
12
- "dev": "npm run clean && tsc -p tsconfig.json --watch",
13
- "build": "npm run clean && npm run build:cjs && npm run build:es",
13
+ "dev": "yarn clean && tsc -p tsconfig.json --watch",
14
+ "build-threads": "yarn clean && yarn build:cjs && yarn build:es",
14
15
  "build:cjs": "tsc -p tsconfig.json",
15
16
  "build:es": "tsc -p tsconfig-esm.json",
16
- "postbuild": "npm run bundle",
17
+ "postbuild": "yarn bundle",
17
18
  "bundle": "rollup -c -f umd --file=bundle/worker.js --name=threads --silent -- dist/esm/worker/bundle-entry.js",
18
- "test": "npm run test:library && npm run test:tooling && npm run test:puppeteer:basic && npm run test:puppeteer:webpack",
19
+ "test": "yarn test:library && yarn test:tooling && yarn test:puppeteer:basic && yarn test:puppeteer:webpack",
19
20
  "test:library": "cross-env TS_NODE_FILES=true ava ./test/**/*.test.ts",
20
21
  "test:tooling": "cross-env TS_NODE_FILES=true ava ./test-tooling/**/*.test.ts",
21
22
  "test:puppeteer:basic": "puppet-run --plugin=mocha --bundle=./test/workers/:workers/ --serve=./bundle/worker.js:/worker.js ./test/*.chromium*.ts",
22
23
  "test:puppeteer:webpack": "puppet-run --serve ./test-tooling/webpack/dist/app.web/0.worker.js --serve ./test-tooling/webpack/dist/app.web/1.worker.js --plugin=mocha ./test-tooling/webpack/webpack.chromium.mocha.ts",
23
- "prepare": "npm run build"
24
+ "prepare": "yarn build-threads"
24
25
  },
25
26
  "exports": {
26
27
  ".": {
@@ -84,7 +85,7 @@
84
85
  "worker_threads"
85
86
  ],
86
87
  "dependencies": {
87
- "@babel/types": "^7.25.2",
88
+ "@babel/types": "^7.25.4",
88
89
  "callsites-3-1-0": "npm:callsites@3.1.0",
89
90
  "debug": "^4.3.6",
90
91
  "is-observable-2-1-0": "npm:is-observable@2.1.0",
@@ -96,8 +97,9 @@
96
97
  "@types/chai": "^4.3.17",
97
98
  "@types/debug": "^4.1.12",
98
99
  "@types/execa": "^2.0.0",
99
- "@types/node": "^22.4.0",
100
+ "@types/node": "^22.5.0",
100
101
  "@types/webpack": "^5.28.5",
102
+ "@xylabs/ts-scripts-yarn3": "^4.0.7",
101
103
  "ava": "^6.1.3",
102
104
  "chai": "^5.1.1",
103
105
  "cross-env": "^7.0.3",
@@ -106,16 +108,16 @@
106
108
  "puppet-run": "^0.11.4",
107
109
  "puppet-run-plugin-mocha": "^0.1.1",
108
110
  "raw-loader": "^4.0.2",
109
- "rimraf": "^6.0.1",
110
- "rollup": "^4.20.0",
111
+ "rimraf": "^5.0.10",
112
+ "rollup": "^4.21.0",
111
113
  "threads-plugin": "^1.4.0",
112
114
  "tiny-worker": "^2.3.0",
113
115
  "ts-loader": "^9.5.1",
114
116
  "ts-node": "^10.9.2",
115
117
  "typescript": "^5.5.4",
116
- "undici-types": "^6.19.6",
118
+ "undici-types": "^6.19.8",
117
119
  "wavy": "^1.0.4",
118
- "webpack": "^5.93.0",
120
+ "webpack": "^5.94.0",
119
121
  "worker-plugin": "^5.0.1"
120
122
  },
121
123
  "optionalDependencies": {
package/register.js CHANGED
@@ -1 +1,2 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  require('./dist/master/register')
package/rollup.config.js CHANGED
@@ -1,4 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  const commonjs = require('@rollup/plugin-commonjs')
3
+ /* eslint-disable @typescript-eslint/no-require-imports */
2
4
  const { nodeResolve } = require('@rollup/plugin-node-resolve')
3
5
 
4
6
  module.exports = {
package/src/common.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type { JsonSerializable, Serializer, SerializerImplementation } from './serializers'
2
+ import type {
3
+ JsonSerializable, Serializer, SerializerImplementation,
4
+ } from './serializers'
3
5
  import { DefaultSerializer, extendSerializer } from './serializers'
4
6
 
5
7
  let registeredSerializer: Serializer<JsonSerializable> = DefaultSerializer
package/src/index.ts CHANGED
@@ -3,6 +3,8 @@ export { registerSerializer } from './common'
3
3
  export * from './master/index'
4
4
  export { QueuedTask } from './master/pool'
5
5
  export { ExposedToThreadType as ExposedAs } from './master/spawn'
6
- export { DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation } from './serializers'
6
+ export {
7
+ DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation,
8
+ } from './serializers'
7
9
  export { Transfer, TransferDescriptor } from './transferable'
8
10
  export { expose } from './worker/index'
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @stylistic/max-len */
1
2
  /* eslint-disable import-x/no-internal-modules */
2
3
  // tslint:disable max-classes-per-file
3
4
 
@@ -18,7 +18,9 @@ import { fileURLToPath } from 'node:url'
18
18
  import type { CallSite } from 'callsites-3-1-0'
19
19
  import getCallsites from 'callsites-3-1-0'
20
20
 
21
- import type { ImplementationExport, ThreadsWorkerOptions, WorkerImplementation } from '../types/master'
21
+ import type {
22
+ ImplementationExport, ThreadsWorkerOptions, WorkerImplementation,
23
+ } from '../types/master'
22
24
 
23
25
  interface WorkerGlobalScope {
24
26
  addEventListener(eventName: string, listener: (event: Event) => void): void
@@ -13,13 +13,16 @@ import { multicast, Observable } from 'observable-fns'
13
13
  import { deserialize, serialize } from '../common'
14
14
  import { ObservablePromise } from '../observable-promise'
15
15
  import { isTransferDescriptor } from '../transferable'
16
- import type { ModuleMethods, ModuleProxy, ProxyableFunction, Worker as WorkerType } from '../types/master'
16
+ import type {
17
+ ModuleMethods, ModuleProxy, ProxyableFunction, Worker as WorkerType,
18
+ } from '../types/master'
17
19
  import type {
18
20
  MasterJobCancelMessage,
19
21
  MasterJobRunMessage,
20
22
  WorkerJobErrorMessage,
21
23
  WorkerJobResultMessage,
22
- WorkerJobStartMessage } from '../types/messages'
24
+ WorkerJobStartMessage,
25
+ } from '../types/messages'
23
26
  import {
24
27
  MasterMessageType,
25
28
  WorkerMessageType,
@@ -8,11 +8,15 @@
8
8
  /* eslint-disable @typescript-eslint/no-namespace */
9
9
  /* eslint-disable @typescript-eslint/no-floating-promises */
10
10
  import DebugLogger from 'debug'
11
- import { multicast, Observable, Subject } from 'observable-fns'
11
+ import {
12
+ multicast, Observable, Subject,
13
+ } from 'observable-fns'
12
14
 
13
15
  import { allSettled } from '../ponyfills'
14
16
  import { defaultPoolSize } from './implementation'
15
- import type { PoolEvent, QueuedTask, TaskRunFunction, WorkerDescriptor } from './pool-types'
17
+ import type {
18
+ PoolEvent, QueuedTask, TaskRunFunction, WorkerDescriptor,
19
+ } from './pool-types'
16
20
  import { PoolEventType } from './pool-types'
17
21
  import { Thread } from './thread'
18
22
 
@@ -389,5 +393,7 @@ function PoolConstructor<ThreadType extends Thread>(spawnWorker: () => Promise<T
389
393
  */
390
394
  export const Pool = PoolConstructor as typeof PoolConstructor & { EventType: typeof PoolEventType }
391
395
 
392
- export { PoolEvent, PoolEventType, QueuedTask } from './pool-types'
396
+ export {
397
+ PoolEvent, PoolEventType, QueuedTask,
398
+ } from './pool-types'
393
399
  export { Thread } from './thread'
@@ -6,7 +6,9 @@ import { Observable } from 'observable-fns'
6
6
 
7
7
  import { deserialize } from '../common'
8
8
  import { createPromiseWithResolver } from '../promise'
9
- import { $errors, $events, $terminate, $worker } from '../symbols'
9
+ import {
10
+ $errors, $events, $terminate, $worker,
11
+ } from '../symbols'
10
12
  import type {
11
13
  FunctionThread,
12
14
  ModuleThread,
@@ -16,10 +18,9 @@ import type {
16
18
  WorkerEvent,
17
19
  WorkerInternalErrorEvent,
18
20
  WorkerMessageEvent,
19
- WorkerTerminationEvent } from '../types/master'
20
- import {
21
- WorkerEventType,
21
+ WorkerTerminationEvent,
22
22
  } from '../types/master'
23
+ import { WorkerEventType } from '../types/master'
23
24
  import type { WorkerInitMessage, WorkerUncaughtErrorMessage } from '../types/messages'
24
25
  import type { WorkerFunction, WorkerModule } from '../types/worker'
25
26
  import { createProxyFunction, createProxyModule } from './invocation-proxy'
@@ -94,9 +95,7 @@ function createEventObservable(worker: WorkerType, workerTermination: Promise<an
94
95
  worker.addEventListener('unhandledrejection', rejectionHandler)
95
96
 
96
97
  workerTermination.then(() => {
97
- const terminationEvent: WorkerTerminationEvent = {
98
- type: WorkerEventType.termination,
99
- }
98
+ const terminationEvent: WorkerTerminationEvent = { type: WorkerEventType.termination }
100
99
  worker.removeEventListener('message', messageHandler)
101
100
  worker.removeEventListener('unhandledrejection', rejectionHandler)
102
101
  observer.next(terminationEvent)
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable import-x/no-internal-modules */
2
2
  import type { Observable } from 'observable-fns'
3
3
 
4
- import { $errors, $events, $terminate } from '../symbols'
4
+ import {
5
+ $errors, $events, $terminate,
6
+ } from '../symbols'
5
7
  import type { Thread as ThreadType, WorkerEvent } from '../types/master'
6
8
 
7
9
  function fail(message: string): never {
@@ -7,7 +7,9 @@
7
7
  import type { Observable } from 'observable-fns'
8
8
 
9
9
  import type { ObservablePromise } from '../observable-promise'
10
- import type { $errors, $events, $terminate, $worker } from '../symbols'
10
+ import type {
11
+ $errors, $events, $terminate, $worker,
12
+ } from '../symbols'
11
13
  import type { TransferDescriptor } from '../transferable'
12
14
 
13
15
  interface ObservableLikeSubscription {
@@ -15,7 +15,8 @@ import type {
15
15
  WorkerJobErrorMessage,
16
16
  WorkerJobResultMessage,
17
17
  WorkerJobStartMessage,
18
- WorkerUncaughtErrorMessage } from '../types/messages'
18
+ WorkerUncaughtErrorMessage,
19
+ } from '../types/messages'
19
20
  import {
20
21
  MasterMessageType,
21
22
  WorkerMessageType,
@@ -52,9 +53,7 @@ function deconstructTransfer(thing: any) {
52
53
 
53
54
  function postFunctionInitMessage() {
54
55
  const initMessage: WorkerInitMessage = {
55
- exposed: {
56
- type: 'function',
57
- },
56
+ exposed: { type: 'function' },
58
57
  type: WorkerMessageType.init,
59
58
  }
60
59
  Implementation.postMessageToMaster(initMessage)
package/test/pool.test.ts CHANGED
@@ -6,7 +6,9 @@
6
6
  // eslint-disable import-x/no-internal-modules
7
7
  import test from 'ava'
8
8
 
9
- import { Pool, spawn, Worker } from '../src/index'
9
+ import {
10
+ Pool, spawn, Worker,
11
+ } from '../src/index'
10
12
  import type { QueuedTask } from '../src/master/pool'
11
13
  import { PoolEventType } from '../src/master/pool'
12
14
 
@@ -65,9 +67,7 @@ test.serial('thread pool basics work and events are emitted', async (t) => {
65
67
  type: Pool.EventType.taskCompleted,
66
68
  workerID: 1,
67
69
  },
68
- {
69
- type: Pool.EventType.taskQueueDrained,
70
- },
70
+ { type: Pool.EventType.taskQueueDrained },
71
71
  {
72
72
  remainingQueue: [],
73
73
  type: Pool.EventType.terminated,
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable import-x/no-internal-modules */
2
2
  import test from 'ava'
3
3
 
4
- import { registerSerializer, spawn, Thread, Worker } from '../src/index'
4
+ import {
5
+ registerSerializer, spawn, Thread, Worker,
6
+ } from '../src/index'
5
7
  import { Foo, fooSerializer } from './lib/serialization'
6
8
 
7
9
  registerSerializer(fooSerializer)
@@ -11,7 +11,9 @@ import '../src/master/register'
11
11
 
12
12
  import { expect } from 'chai'
13
13
 
14
- import { BlobWorker, spawn, Thread } from '..'
14
+ import {
15
+ BlobWorker, spawn, Thread,
16
+ } from '..'
15
17
 
16
18
  describe('threads in browser', function () {
17
19
  it('can spawn and terminate a thread', async function () {
@@ -4,7 +4,9 @@
4
4
  import test from 'ava'
5
5
  import type { Observable } from 'observable-fns'
6
6
 
7
- import { spawn, Thread, Worker } from '../src/index'
7
+ import {
8
+ spawn, Thread, Worker,
9
+ } from '../src/index'
8
10
  import type { Counter } from './workers/counter'
9
11
 
10
12
  test('can spawn and terminate a thread', async (t) => {
@@ -1,6 +1,8 @@
1
1
  import test from 'ava'
2
2
 
3
- import { spawn, Thread, Worker } from '../src/index'
3
+ import {
4
+ spawn, Thread, Worker,
5
+ } from '../src/index'
4
6
 
5
7
  test('can use worker returning an observable subject', async (t) => {
6
8
  const captured: Array<{ max: number; min: number }> = []
@@ -4,7 +4,9 @@
4
4
 
5
5
  import test from 'ava'
6
6
 
7
- import { spawn, Thread, Transfer, Worker } from '../src/index'
7
+ import {
8
+ spawn, Thread, Transfer, Worker,
9
+ } from '../src/index'
8
10
  import type { XorBuffer } from './workers/arraybuffer-xor'
9
11
 
10
12
  type SpyInit<Args extends any[], OriginalReturn, NewReturn> = (originalFn: (...args: Args) => OriginalReturn) => (...args: Args) => NewReturn
@@ -1,5 +1,7 @@
1
1
  /* eslint-disable no-restricted-imports */
2
- import { spawn, Thread, Worker } from '../..'
2
+ import {
3
+ spawn, Thread, Worker,
4
+ } from '../..'
3
5
 
4
6
  async function run() {
5
7
  const add = await spawn(new Worker('./worker.js'))
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable no-restricted-imports */
2
2
  /* eslint-disable @typescript-eslint/no-floating-promises */
3
- import { spawn, Thread, Worker } from '../..'
3
+ import {
4
+ spawn, Thread, Worker,
5
+ } from '../..'
4
6
 
5
7
  async function main() {
6
8
  const helloWorld = await spawn(new Worker('./workers/hello-world'))
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
 
3
- import { isWorkerRuntime, Pool, spawn, Worker } from '../../src/index'
3
+ import {
4
+ isWorkerRuntime, Pool, spawn, Worker,
5
+ } from '../../src/index'
4
6
 
5
7
  type AdditionWorker = (a: number, b: number) => number
6
8
  type HelloWorker = (text: string) => string
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  const path = require('node:path')
2
3
  const ThreadsPlugin = require('threads-plugin')
3
4
 
@@ -5,19 +6,13 @@ module.exports = {
5
6
  context: __dirname,
6
7
  devtool: false,
7
8
  entry: require.resolve('./app.ts'),
8
- externals: {
9
- 'tiny-worker': 'tiny-worker',
10
- },
9
+ externals: { 'tiny-worker': 'tiny-worker' },
11
10
  mode: 'development',
12
11
  module: {
13
12
  rules: [
14
13
  {
15
14
  loader: 'ts-loader',
16
- options: {
17
- compilerOptions: {
18
- module: 'esnext',
19
- },
20
- },
15
+ options: { compilerOptions: { module: 'esnext' } },
21
16
  test: /\.ts$/,
22
17
  },
23
18
  ],
@@ -29,8 +24,6 @@ module.exports = {
29
24
  path: path.resolve(__dirname, './dist/app.node'),
30
25
  },
31
26
  plugins: [new ThreadsPlugin()],
32
- resolve: {
33
- extensions: ['.js', '.ts'],
34
- },
27
+ resolve: { extensions: ['.js', '.ts'] },
35
28
  target: 'node',
36
29
  }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-require-imports */
1
2
  const path = require('node:path')
2
3
  const ThreadsPlugin = require('threads-plugin')
3
4
 
@@ -10,11 +11,7 @@ module.exports = {
10
11
  rules: [
11
12
  {
12
13
  loader: 'ts-loader',
13
- options: {
14
- compilerOptions: {
15
- module: 'esnext',
16
- },
17
- },
14
+ options: { compilerOptions: { module: 'esnext' } },
18
15
  test: /\.ts$/,
19
16
  },
20
17
  ],
@@ -26,8 +23,6 @@ module.exports = {
26
23
  path: path.resolve(__dirname, './dist/app.web'),
27
24
  },
28
25
  plugins: [new ThreadsPlugin()],
29
- resolve: {
30
- extensions: ['.js', '.ts'],
31
- },
26
+ resolve: { extensions: ['.js', '.ts'] },
32
27
  target: 'web',
33
28
  }
package/worker.js CHANGED
@@ -1 +1,2 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
1
2
  module.exports = require('./dist/worker/index')