effect-app 4.0.0-beta.323 → 4.0.0-beta.325
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/CHANGELOG.md +12 -0
- package/dist/Schema/email.d.ts.map +1 -1
- package/dist/Schema/email.js +7 -2
- package/dist/Schema/numbers.d.ts +0 -1
- package/dist/Schema/numbers.d.ts.map +1 -1
- package/dist/Schema/numbers.js +13 -3
- package/dist/Schema/phoneNumber.d.ts.map +1 -1
- package/dist/Schema/phoneNumber.js +6 -2
- package/package.json +1 -1
- package/src/Schema/email.ts +6 -1
- package/src/Schema/numbers.ts +12 -2
- package/src/Schema/phoneNumber.ts +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @effect-app/prelude
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.325
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- f233f3d: `PositiveNumber` and `NonNegativeNumber` bound native Arbitrary generation to at most 1,000,000 (`arbitraryConstraint` on their existing checks), so generated fixtures no longer overflow derived totals to `Infinity`. Validation and JSON Schema output are unchanged.
|
|
8
|
+
|
|
9
|
+
## 4.0.0-beta.324
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- a0075b8: `Email` and `PhoneNumber` carry native `arbitraryConstraint` patterns, so `effect/unstable/arbitrary` (and `generateFromSchema`) can sample them instead of exhausting rejection sampling on their `refine` guards.
|
|
14
|
+
|
|
3
15
|
## 4.0.0-beta.323
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/Schema/email.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAAG;AAEvF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,CAAA;AAEvC,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/Schema/email.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAAG;AAEvF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,CAAA;AAEvC,eAAO,MAAM,KAAK,2BAmBf,CAAA"}
|
package/dist/Schema/email.js
CHANGED
|
@@ -9,6 +9,11 @@ export const Email = S
|
|
|
9
9
|
}), S.check(S.isMinLength(3), /* a@b */ S.isMaxLength(998)), S.refine(isValidEmail, {
|
|
10
10
|
identifier: "Email",
|
|
11
11
|
description: "an email according to RFC 5322",
|
|
12
|
-
jsonSchema: { format: "email", minLength: 3, maxLength: 998 }
|
|
12
|
+
jsonSchema: { format: "email", minLength: 3, maxLength: 998 },
|
|
13
|
+
// Native Arbitrary cannot invert `isValidEmail`; without a constraint, rejection sampling
|
|
14
|
+
// discards (almost) every random string.
|
|
15
|
+
arbitraryConstraint: {
|
|
16
|
+
patterns: [{ source: "^[a-z]{3,10}@[a-z]{3,10}\\.(?:com|net|org|de)$", flags: "" }]
|
|
17
|
+
}
|
|
13
18
|
}));
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL2VtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNwRCxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQVNsQyxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztLQUNuQixNQUFNO0tBQ04sSUFBSSxDQUNILENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDVCxLQUFLLEVBQUUsT0FBTztJQUNkLFdBQVcsRUFBRSxnQ0FBZ0M7SUFDN0MsTUFBTSxFQUFFLE9BQU87Q0FDaEIsQ0FBQyxFQUNGLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN2RCxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQXlDLEVBQUU7SUFDbEQsVUFBVSxFQUFFLE9BQU87SUFDbkIsV0FBVyxFQUFFLGdDQUFnQztJQUM3QyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtJQUM3RCwwRkFBMEY7SUFDMUYseUNBQXlDO0lBQ3pDLG1CQUFtQixFQUFFO1FBQ25CLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGdEQUFnRCxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztLQUNwRjtDQUNGLENBQUMsQ0FDSCxDQUFBIn0=
|
package/dist/Schema/numbers.d.ts
CHANGED
|
@@ -33,7 +33,6 @@ export declare const Int: IntSchema;
|
|
|
33
33
|
export interface PositiveNumberBrand extends Simplify<B.Brand<"PositiveNumber"> & NonNegativeNumberBrand> {
|
|
34
34
|
}
|
|
35
35
|
export type PositiveNumber = number & PositiveNumberBrand;
|
|
36
|
-
/** Positive finite number. `.withConstructorDefault` => `1` (construction-only). */
|
|
37
36
|
export interface PositiveNumberSchema extends BrandedSchema<S.Finite, PositiveNumber> {
|
|
38
37
|
(i: number, options?: SchemaAST.ParseOptions): PositiveNumber;
|
|
39
38
|
readonly withConstructorDefault: S.withConstructorDefault<BrandedSchema<S.Finite, PositiveNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../src/Schema/numbers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../src/Schema/numbers.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema/numbers.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { extendM } from "effect-app/utils";
|
|
12
12
|
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as Order from "effect/Order";
|
|
13
14
|
import * as S from "effect/Schema";
|
|
14
15
|
import { fromBrand, nominal } from "./brand.js";
|
|
15
16
|
import { withDefaultMake } from "./ext.js";
|
|
@@ -40,7 +41,14 @@ export const Int = extendM(S.Int.pipe(fromBrand(nominal(), { identifier: "Int",
|
|
|
40
41
|
*/
|
|
41
42
|
withConstructorDefault: s.pipe(S.withConstructorDefault(Effect.sync(() => s(0))))
|
|
42
43
|
}));
|
|
43
|
-
|
|
44
|
+
/** Positive finite number. `.withConstructorDefault` => `1` (construction-only). */
|
|
45
|
+
// Generation-only: native Arbitrary otherwise samples up to Number.MAX_VALUE, so derived totals
|
|
46
|
+
// (amount x weight, sums) overflow to Infinity. Validation and JSON Schema are unaffected.
|
|
47
|
+
const realisticMaximum = 1_000_000;
|
|
48
|
+
export const PositiveNumber = extendM(S.Finite.pipe(S.check(S.isGreaterThan(0, {
|
|
49
|
+
// the full constraint: annotations replace the check default, which carries `order` + `minimum`
|
|
50
|
+
arbitraryConstraint: { order: Order.Number, minimum: 0, exclusiveMinimum: true, maximum: realisticMaximum }
|
|
51
|
+
})), fromBrand(nominal(), {
|
|
44
52
|
identifier: "PositiveNumber",
|
|
45
53
|
jsonSchema: {}
|
|
46
54
|
}), withDefaultMake), (s) => ({
|
|
@@ -53,7 +61,9 @@ export const PositiveNumber = extendM(S.Finite.pipe(S.check(S.isGreaterThan(0)),
|
|
|
53
61
|
}));
|
|
54
62
|
export const NonNegativeNumber = extendM(S
|
|
55
63
|
.Finite
|
|
56
|
-
.pipe(S.check(S.isGreaterThanOrEqualTo(0
|
|
64
|
+
.pipe(S.check(S.isGreaterThanOrEqualTo(0, {
|
|
65
|
+
arbitraryConstraint: { order: Order.Number, minimum: 0, maximum: realisticMaximum }
|
|
66
|
+
})), fromBrand(nominal(), {
|
|
57
67
|
identifier: "NonNegativeNumber",
|
|
58
68
|
jsonSchema: {}
|
|
59
69
|
}), withDefaultMake), (s) => ({
|
|
@@ -68,4 +78,4 @@ export const NonNegativeNumber = extendM(S
|
|
|
68
78
|
export const NonNegativeDecimal = NonNegativeNumber;
|
|
69
79
|
/** @deprecated Not an actual decimal */
|
|
70
80
|
export const PositiveDecimal = PositiveNumber;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY2hlbWEvbnVtYmVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFDSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxlQUFlLENBQUE7QUFDdkMsT0FBTyxLQUFLLEtBQUssTUFBTSxjQUFjLENBQUE7QUFDckMsT0FBTyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUE7QUFHbEMsT0FBTyxFQUFzQixTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFZMUMsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFzQixPQUFPLENBQ25ELENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzQixTQUFTLENBQWMsT0FBTyxFQUFlLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUM3RixlQUFlLENBQ2hCLEVBQ0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDTjs7OztPQUlHO0lBQ0gsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2xGLENBQUMsQ0FDSCxDQUFBO0FBU0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUF5QixPQUFPLENBQ3pELENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFD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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phoneNumber.d.ts","sourceRoot":"","sources":["../../src/Schema/phoneNumber.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,mBAAmB,CAAC;CAAG;AACnG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,CAAA;AAEnD,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"phoneNumber.d.ts","sourceRoot":"","sources":["../../src/Schema/phoneNumber.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,WAAW,gBAAiB,SAAQ,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,mBAAmB,CAAC;CAAG;AACnG,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,CAAA;AAEnD,eAAO,MAAM,WAAW,oGAkBrB,CAAA"}
|
|
@@ -10,6 +10,10 @@ export const PhoneNumber = S
|
|
|
10
10
|
}), S.refine(isValidPhone, {
|
|
11
11
|
identifier: "PhoneNumber",
|
|
12
12
|
description: "a phone number with at least 7 digits",
|
|
13
|
-
jsonSchema: { format: "phone" }
|
|
13
|
+
jsonSchema: { format: "phone" },
|
|
14
|
+
// Native Arbitrary cannot invert `isValidPhone`; steer sampling to digit-only numbers (>= 7 digits).
|
|
15
|
+
arbitraryConstraint: {
|
|
16
|
+
patterns: [{ source: "^\\+?[1-9][0-9]{6,11}$", flags: "" }]
|
|
17
|
+
}
|
|
14
18
|
}), withDefaultMake);
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmVOdW1iZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL3Bob25lTnVtYmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUNwRCxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUVsQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBTzFDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDO0tBQ3pCLE1BQU07S0FDTixJQUFJLENBQ0gsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNULEtBQUssRUFBRSxhQUFhO0lBQ3BCLFdBQVcsRUFBRSx1Q0FBdUM7SUFDcEQsTUFBTSxFQUFFLE9BQU87Q0FDaEIsQ0FBQyxFQUNGLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBK0MsRUFBRTtJQUN4RCxVQUFVLEVBQUUsYUFBYTtJQUN6QixXQUFXLEVBQUUsdUNBQXVDO0lBQ3BELFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7SUFDL0IscUdBQXFHO0lBQ3JHLG1CQUFtQixFQUFFO1FBQ25CLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztLQUM1RDtDQUNGLENBQUMsRUFDRixlQUFlLENBQ2hCLENBQUEifQ==
|
package/package.json
CHANGED
package/src/Schema/email.ts
CHANGED
|
@@ -21,6 +21,11 @@ export const Email = S
|
|
|
21
21
|
S.refine(isValidEmail as Refinement<string, Email>, {
|
|
22
22
|
identifier: "Email",
|
|
23
23
|
description: "an email according to RFC 5322",
|
|
24
|
-
jsonSchema: { format: "email", minLength: 3, maxLength: 998 }
|
|
24
|
+
jsonSchema: { format: "email", minLength: 3, maxLength: 998 },
|
|
25
|
+
// Native Arbitrary cannot invert `isValidEmail`; without a constraint, rejection sampling
|
|
26
|
+
// discards (almost) every random string.
|
|
27
|
+
arbitraryConstraint: {
|
|
28
|
+
patterns: [{ source: "^[a-z]{3,10}@[a-z]{3,10}\\.(?:com|net|org|de)$", flags: "" }]
|
|
29
|
+
}
|
|
25
30
|
})
|
|
26
31
|
)
|
package/src/Schema/numbers.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { extendM } from "effect-app/utils"
|
|
12
12
|
import * as Effect from "effect/Effect"
|
|
13
|
+
import * as Order from "effect/Order"
|
|
13
14
|
import * as S from "effect/Schema"
|
|
14
15
|
import type { Simplify } from "effect/Types"
|
|
15
16
|
import type * as SchemaAST from "../SchemaAST.ts"
|
|
@@ -90,13 +91,20 @@ export const Int: IntSchema = extendM(
|
|
|
90
91
|
export interface PositiveNumberBrand extends Simplify<B.Brand<"PositiveNumber"> & NonNegativeNumberBrand> {}
|
|
91
92
|
export type PositiveNumber = number & PositiveNumberBrand
|
|
92
93
|
/** Positive finite number. `.withConstructorDefault` => `1` (construction-only). */
|
|
94
|
+
// Generation-only: native Arbitrary otherwise samples up to Number.MAX_VALUE, so derived totals
|
|
95
|
+
// (amount x weight, sums) overflow to Infinity. Validation and JSON Schema are unaffected.
|
|
96
|
+
const realisticMaximum = 1_000_000
|
|
97
|
+
|
|
93
98
|
export interface PositiveNumberSchema extends BrandedSchema<S.Finite, PositiveNumber> {
|
|
94
99
|
(i: number, options?: SchemaAST.ParseOptions): PositiveNumber
|
|
95
100
|
readonly withConstructorDefault: S.withConstructorDefault<BrandedSchema<S.Finite, PositiveNumber>>
|
|
96
101
|
}
|
|
97
102
|
export const PositiveNumber: PositiveNumberSchema = extendM(
|
|
98
103
|
S.Finite.pipe(
|
|
99
|
-
S.check(S.isGreaterThan(0
|
|
104
|
+
S.check(S.isGreaterThan(0, {
|
|
105
|
+
// the full constraint: annotations replace the check default, which carries `order` + `minimum`
|
|
106
|
+
arbitraryConstraint: { order: Order.Number, minimum: 0, exclusiveMinimum: true, maximum: realisticMaximum }
|
|
107
|
+
})),
|
|
100
108
|
fromBrand<PositiveNumber>(nominal<PositiveNumber>(), {
|
|
101
109
|
identifier: "PositiveNumber",
|
|
102
110
|
jsonSchema: {}
|
|
@@ -124,7 +132,9 @@ export const NonNegativeNumber: NonNegativeNumberSchema = extendM(
|
|
|
124
132
|
S
|
|
125
133
|
.Finite
|
|
126
134
|
.pipe(
|
|
127
|
-
S.check(S.isGreaterThanOrEqualTo(0
|
|
135
|
+
S.check(S.isGreaterThanOrEqualTo(0, {
|
|
136
|
+
arbitraryConstraint: { order: Order.Number, minimum: 0, maximum: realisticMaximum }
|
|
137
|
+
})),
|
|
128
138
|
fromBrand<NonNegativeNumber>(nominal<NonNegativeNumber>(), {
|
|
129
139
|
identifier: "NonNegativeNumber",
|
|
130
140
|
jsonSchema: {}
|
|
@@ -20,7 +20,11 @@ export const PhoneNumber = S
|
|
|
20
20
|
S.refine(isValidPhone as Refinement<string, PhoneNumber>, {
|
|
21
21
|
identifier: "PhoneNumber",
|
|
22
22
|
description: "a phone number with at least 7 digits",
|
|
23
|
-
jsonSchema: { format: "phone" }
|
|
23
|
+
jsonSchema: { format: "phone" },
|
|
24
|
+
// Native Arbitrary cannot invert `isValidPhone`; steer sampling to digit-only numbers (>= 7 digits).
|
|
25
|
+
arbitraryConstraint: {
|
|
26
|
+
patterns: [{ source: "^\\+?[1-9][0-9]{6,11}$", flags: "" }]
|
|
27
|
+
}
|
|
24
28
|
}),
|
|
25
29
|
withDefaultMake
|
|
26
30
|
)
|