@effect-app/infra 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 +15 -0
- package/dist/arbs.d.ts.map +1 -1
- package/dist/arbs.js +5 -2
- package/package.json +2 -2
- package/src/arbs.ts +5 -1
- package/test/arbs-magnitude.test.ts +21 -0
- package/test/arbs.test.ts +21 -0
- package/test/dist/arbs-magnitude.test.d.ts.map +1 -0
- package/test/dist/arbs.test.d.ts.map +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.325
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [f233f3d]
|
|
8
|
+
- effect-app@4.0.0-beta.325
|
|
9
|
+
|
|
10
|
+
## 4.0.0-beta.324
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- a0075b8: `generateFromSchema` advances its seed on every call, so successive samples differ (deterministic across runs) instead of always returning the same value.
|
|
15
|
+
- Updated dependencies [a0075b8]
|
|
16
|
+
- effect-app@4.0.0-beta.324
|
|
17
|
+
|
|
3
18
|
## 4.0.0-beta.323
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
package/dist/arbs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arbs.d.ts","sourceRoot":"","sources":["../src/arbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,SAAS,MAAM,YAAY,CAAA;AAUvC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,sBAEtD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAE3D;
|
|
1
|
+
{"version":3,"file":"arbs.d.ts","sourceRoot":"","sources":["../src/arbs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,CAAC,MAAM,mBAAmB,CAAA;AAG3C,OAAO,KAAK,SAAS,MAAM,YAAY,CAAA;AAUvC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,sBAEtD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAE3D;AAMD,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;;EASnE"}
|
package/dist/arbs.js
CHANGED
|
@@ -16,12 +16,15 @@ export function generate(arb) {
|
|
|
16
16
|
export function generateFromArbitrary(arb) {
|
|
17
17
|
return generate(arb(FastCheck));
|
|
18
18
|
}
|
|
19
|
+
// Advance the seed per call: deterministic across runs, but successive calls yield different
|
|
20
|
+
// samples (like `generate` advancing its shared fast-check Random).
|
|
21
|
+
let schemaSamples = 0;
|
|
19
22
|
export function generateFromSchema(schema) {
|
|
20
|
-
const samples = Effect.runSync(Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed }));
|
|
23
|
+
const samples = Effect.runSync(Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed: seed + schemaSamples++ }));
|
|
21
24
|
const value = samples[0];
|
|
22
25
|
if (value === undefined) {
|
|
23
26
|
throw new Error("failed to sample schema");
|
|
24
27
|
}
|
|
25
28
|
return { value };
|
|
26
29
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcmJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUU1QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRTNDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUNBQXFDLENBQUE7QUFDaEUsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUE7QUFFbkUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0FBQ2QsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBRTNCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUVmLE1BQU0sVUFBVSxRQUFRLENBQUksR0FBMkI7SUFDckQsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFJLEdBQW1CO0lBQzFELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0FBQ2pDLENBQUM7QUFFRCw2RkFBNkY7QUFDN0Ysb0VBQW9FO0FBQ3BFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtBQUVyQixNQUFNLFVBQVUsa0JBQWtCLENBQXlCLE1BQVM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDNUIsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FDN0YsQ0FBQTtJQUNELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN4QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQTtBQUNsQixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.325",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"proper-lockfile": "^4.1.2",
|
|
17
17
|
"pure-rand": "8.4.0",
|
|
18
18
|
"query-string": "^9.4.0",
|
|
19
|
-
"effect-app": "4.0.0-beta.
|
|
19
|
+
"effect-app": "4.0.0-beta.325"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@azure/cosmos": "^4.9.3",
|
package/src/arbs.ts
CHANGED
|
@@ -23,9 +23,13 @@ export function generateFromArbitrary<T>(arb: S.Arbitrary<T>) {
|
|
|
23
23
|
return generate(arb(FastCheck))
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
// Advance the seed per call: deterministic across runs, but successive calls yield different
|
|
27
|
+
// samples (like `generate` advancing its shared fast-check Random).
|
|
28
|
+
let schemaSamples = 0
|
|
29
|
+
|
|
26
30
|
export function generateFromSchema<S extends S.Constraint>(schema: S) {
|
|
27
31
|
const samples = Effect.runSync(
|
|
28
|
-
Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed })
|
|
32
|
+
Arbitrary.sampleEffect(Arbitrary.schema(schema), { count: 1, seed: seed + schemaSamples++ })
|
|
29
33
|
)
|
|
30
34
|
const value = samples[0]
|
|
31
35
|
if (value === undefined) {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest"
|
|
2
|
+
import * as S from "effect-app/Schema"
|
|
3
|
+
import { generateFromSchema } from "../src/arbs.js"
|
|
4
|
+
|
|
5
|
+
describe("generateFromSchema number magnitudes", () => {
|
|
6
|
+
it("keeps PositiveNumber and NonNegativeNumber samples realistic", () => {
|
|
7
|
+
const schema = S.Struct({ amount: S.PositiveNumber, weight: S.NonNegativeNumber })
|
|
8
|
+
for (let i = 0; i < 200; i++) {
|
|
9
|
+
const { amount, weight } = generateFromSchema(schema).value
|
|
10
|
+
expect(amount).toBeGreaterThan(0)
|
|
11
|
+
expect(weight).toBeGreaterThanOrEqual(0)
|
|
12
|
+
expect(Math.max(amount, weight)).toBeLessThanOrEqual(1_000_000)
|
|
13
|
+
expect(Number.isFinite(amount * weight)).toBe(true)
|
|
14
|
+
}
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it("does not change the JSON Schema of the number schemas", () => {
|
|
18
|
+
expect(S.toJsonSchemaDocument(S.PositiveNumber).schema).not.toHaveProperty("maximum")
|
|
19
|
+
expect(S.toJsonSchemaDocument(S.NonNegativeNumber).schema).not.toHaveProperty("maximum")
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest"
|
|
2
|
+
import * as S from "effect-app/Schema"
|
|
3
|
+
import { generateFromSchema } from "../src/arbs.js"
|
|
4
|
+
|
|
5
|
+
describe("generateFromSchema", () => {
|
|
6
|
+
it("yields a new sample on each call", () => {
|
|
7
|
+
const schema = S.Struct({ id: S.NonEmptyString255, amount: S.Finite })
|
|
8
|
+
const samples = Array.from({ length: 5 }, () => generateFromSchema(schema).value)
|
|
9
|
+
for (const sample of samples) {
|
|
10
|
+
expect(S.is(schema)(sample)).toBe(true)
|
|
11
|
+
}
|
|
12
|
+
expect(new Set(samples.map((sample) => JSON.stringify(sample))).size).toBeGreaterThan(1)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it("samples refined strings that native generation cannot invert (Email, PhoneNumber)", () => {
|
|
16
|
+
const schema = S.Struct({ email: S.Email, phone: S.PhoneNumber })
|
|
17
|
+
for (let i = 0; i < 10; i++) {
|
|
18
|
+
expect(S.is(schema)(generateFromSchema(schema).value)).toBe(true)
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbs-magnitude.test.d.ts","sourceRoot":"","sources":["../arbs-magnitude.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbs.test.d.ts","sourceRoot":"","sources":["../arbs.test.ts"],"names":[],"mappings":""}
|