
Security News
CVE Volume Surges Past 48,000 in 2025 as WordPress Plugin Ecosystem Drives Growth
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.
@fast-check/worker
Advanced tools
Provide built-ins to run predicates directly within dedicated workers
@fast-check/worker
Provide built-ins to run predicates directly within dedicated workers
fast-check alone is great but what if it led your code into an infinite and synchronous loop for such inputs? In such case, it would neither be able to shrink the issue, nor to report any for you as the single threaded philosophy at the root of JavaScript will prevent it from anything except waiting for the main thread to come back.
This package tends to provide a way to run easily your properties within dedicated workers automatically spawed by it.
Here are some of the changes you will have to do:
fc.property by property coming from propertyFor(<path-to-file>)fc.assert by assert coming from @fast-check/worker for automatic cleaning of the workers as the test endspropertyFor and assert without any external framework for test, it and others, the separation of the property from the assertion would be useless as the check for main thread is fully handled within @fast-check/worker itself so no hoisting needing in such caseimport { test } from '@jest/globals';
import fc from 'fast-check';
import { isMainThread } from 'node:worker_threads';
import { assert, propertyFor } from '@fast-check/worker';
const property = propertyFor(new URL(import.meta.url)); // or propertyFor(pathToFileURL(__filename)) in commonjs
const p1 = property(fc.nat(), fc.nat(), (start, end) => {
// starting a possibly infinite loop
for (let i = start; i !== end; ++i) {
// doing stuff...
}
});
if (isMainThread) {
test('should assess p1', async () => {
await assert(p1, { timeout: 1000 });
});
}
Refer to the tests defined test/main.spec.ts for a living example of how you can use this package with a test runner such as Jest.
The builder of properties propertyFor accepts a second parameter to customize how the workers will behave. By default, workers will be shared across properties. In case you want a more isolation between your runs, you can use:
const property = propertyFor(new URL(import.meta.url), { isolationLevel: 'predicate' });
// Other values:
// - "file": Re-use workers cross properties (default)
// - "property": Re-use workers for each run of the predicate. Not shared across properties!
// - "predicate": One worker per run of the predicate
By default, workers will receive the generated values from their parent thread. In some cases, such sending is made impossible as the generated values include non-serializable pieces. In such cases, you can opt-in to generate the values directly within the workers by using:
const property = propertyFor(new URL(import.meta.url), { randomSource: 'worker' });
// Other values:
// - "main-thread": The main thread will be responsible to generate the random values and send them to the worker thread. It unfortunately cannot send any value that cannot be serialized between threads. (default)
// - "worker": The worker is responsible to generate its own values based on the instructions provided by the main thread. Switching to a worker mode allows to support non-serializable values, unfortunately it drops all shrinking. capabilities.
(1): worker_threads alone would only require Node ≥10.5.0, but our usage of require(node:*) forces us to request at least Node ≥14.18.0
(2): this package targets ES2020 specification which is quite well supported (more than 94%) by any Node ≥14.5.0
(3): this package requires a version of node able to understand package.json#exports, supported by any Node ≥12.17.0
FAQs
Provide built-ins to run predicates directly within dedicated workers
We found that @fast-check/worker demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.

Security News
Socket CEO Feross Aboukhadijeh joins Insecure Agents to discuss CVE remediation and why supply chain attacks require a different security approach.

Security News
Tailwind Labs laid off 75% of its engineering team after revenue dropped 80%, as LLMs redirect traffic away from documentation where developers discover paid products.