diff --git a/.changeset/pink-cameras-reflect.md b/.changeset/pink-cameras-reflect.md new file mode 100644 index 00000000000..b076410dcda --- /dev/null +++ b/.changeset/pink-cameras-reflect.md @@ -0,0 +1,5 @@ +--- +"fast-check": major +--- + +♻️ Switch to object spreading rather than `Object.assign` (#5300) diff --git a/packages/fast-check/src/arbitrary/string.ts b/packages/fast-check/src/arbitrary/string.ts index 065e5fd4ed0..fc38a152b29 100644 --- a/packages/fast-check/src/arbitrary/string.ts +++ b/packages/fast-check/src/arbitrary/string.ts @@ -35,8 +35,6 @@ export type StringConstraints = StringSharedConstraints & { unit?: 'grapheme' | 'grapheme-composite' | 'grapheme-ascii' | 'binary' | 'binary-ascii' | Arbitrary; }; -const safeObjectAssign = Object.assign; - /** @internal */ function extractUnitArbitrary(constraints: Pick): Arbitrary { if (typeof constraints.unit === 'object') { @@ -69,9 +67,6 @@ export function string(constraints: StringConstraints = {}): Arbitrary { const charArbitrary = extractUnitArbitrary(constraints); const unmapper = patternsToStringUnmapperFor(charArbitrary, constraints); const experimentalCustomSlices = createSlicesForString(charArbitrary, constraints); - // TODO - Move back to object spreading as soon as we bump support from es2017 to es2018+ - const enrichedConstraints: ArrayConstraintsInternal = safeObjectAssign(safeObjectAssign({}, constraints), { - experimentalCustomSlices, - }); + const enrichedConstraints: ArrayConstraintsInternal = { ...constraints, experimentalCustomSlices }; return array(charArbitrary, enrichedConstraints).map(patternsToStringMapper, unmapper); } diff --git a/packages/fast-check/src/arbitrary/webUrl.ts b/packages/fast-check/src/arbitrary/webUrl.ts index 1b6cc979632..0bb1dc7686e 100644 --- a/packages/fast-check/src/arbitrary/webUrl.ts +++ b/packages/fast-check/src/arbitrary/webUrl.ts @@ -12,8 +12,6 @@ import type { SizeForArbitrary } from './_internals/helpers/MaxLengthFromMinLeng import { relativeSizeToSize, resolveSize } from './_internals/helpers/MaxLengthFromMinLength'; import { webPath } from './webPath'; -const safeObjectAssign = Object.assign; - /** * Constraints to be applied on {@link webUrl} * @remarks Since 1.14.0 @@ -69,10 +67,7 @@ export function webUrl(constraints?: WebUrlConstraints): Arbitrary { c.authoritySettings !== undefined && c.authoritySettings.size !== undefined ? relativeSizeToSize(c.authoritySettings.size, resolvedSize) : resolvedSize; - // TODO - Move back to object spreading as soon as we bump support from es2017 to es2018+ - const resolvedAuthoritySettings = safeObjectAssign(safeObjectAssign({}, c.authoritySettings), { - size: resolvedAuthoritySettingsSize, - }); + const resolvedAuthoritySettings = { ...c.authoritySettings, size: resolvedAuthoritySettingsSize }; const validSchemes = c.validSchemes || ['http', 'https']; const schemeArb = constantFrom(...validSchemes); const authorityArb = webAuthority(resolvedAuthoritySettings); diff --git a/packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts b/packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts index f5b95522206..c077626a7a5 100644 --- a/packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts +++ b/packages/fast-check/src/check/arbitrary/definition/Arbitrary.ts @@ -3,8 +3,6 @@ import { Stream } from '../../../stream/Stream'; import { cloneMethod, hasCloneMethod } from '../../symbols'; import { Value } from './Value'; -const safeObjectAssign = Object.assign; - /** * Abstract class able to generate values on type `T` * @@ -201,11 +199,11 @@ class ChainArbitrary extends Arbitrary { : Stream.nil>() ).join( context.chainedArbitrary.shrink(value, context.chainedContext).map((dst) => { - // TODO - Move back to object spreading as soon as we bump support from es2017 to es2018+ - const newContext: ChainArbitraryContext = safeObjectAssign(safeObjectAssign({}, context), { + const newContext: ChainArbitraryContext = { + ...context, chainedContext: dst.context, stoppedForOriginal: true, - }); + }; return new Value(dst.value_, newContext); }), ); diff --git a/packages/fast-check/src/check/runner/Runner.ts b/packages/fast-check/src/check/runner/Runner.ts index e6378dcb552..f8fa67cf158 100644 --- a/packages/fast-check/src/check/runner/Runner.ts +++ b/packages/fast-check/src/check/runner/Runner.ts @@ -17,8 +17,6 @@ import type { IAsyncProperty } from '../property/AsyncProperty'; import type { IProperty } from '../property/Property'; import type { Value } from '../arbitrary/definition/Value'; -const safeObjectAssign = Object.assign; - /** @internal */ function runIt( property: IRawProperty, @@ -100,10 +98,10 @@ function check(rawProperty: IRawProperty, params?: Parameters): unkn throw new Error('Invalid property encountered, please use a valid property'); if (rawProperty.run == null) throw new Error('Invalid property encountered, please use a valid property not an arbitrary'); - const qParams: QualifiedParameters = QualifiedParameters.read( - // TODO - Move back to object spreading as soon as we bump support from es2017 to es2018+ - safeObjectAssign(safeObjectAssign({}, readConfigureGlobal() as Parameters), params), - ); + const qParams: QualifiedParameters = QualifiedParameters.read({ + ...(readConfigureGlobal() as Parameters), + ...params, + }); if (qParams.reporter !== null && qParams.asyncReporter !== null) throw new Error('Invalid parameters encountered, reporter and asyncReporter cannot be specified together'); if (qParams.asyncReporter !== null && !rawProperty.isAsync()) diff --git a/website/docs/migration/from-3.x-to-4.x.md b/website/docs/migration/from-3.x-to-4.x.md index e4c09ed41d2..f4f2b5ed7c1 100644 --- a/website/docs/migration/from-3.x-to-4.x.md +++ b/website/docs/migration/from-3.x-to-4.x.md @@ -15,7 +15,7 @@ Simple migration guide to fast-check v4 starting from fast-check v3 | ECMAScript specification | ES2020 | ES2017 | | TypeScript _(optional)_ | ≥5.0 | ≥4.1 | -Related pull requests: [#5577](https://github.com/dubzzz/fast-check/pull/5577), [#5605](https://github.com/dubzzz/fast-check/pull/5605), [#5617](https://github.com/dubzzz/fast-check/pull/5617), [#5634](https://github.com/dubzzz/fast-check/pull/5634) +Related pull requests: [#5577](https://github.com/dubzzz/fast-check/pull/5577), [#5605](https://github.com/dubzzz/fast-check/pull/5605), [#5617](https://github.com/dubzzz/fast-check/pull/5617), [#5634](https://github.com/dubzzz/fast-check/pull/5634), [#5635](https://github.com/dubzzz/fast-check/pull/5635) ## Update to latest v3.x