@effect-app/infra 1.17.1 → 1.18.0

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 CHANGED
@@ -1,5 +1,18 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 1.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8b3b2be: dx: add test/vitest
8
+ - 190b139: update packages
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies [190b139]
13
+ - effect-app@1.17.0
14
+ - @effect-app/infra-adapters@1.11.2
15
+
3
16
  ## 1.17.1
4
17
 
5
18
  ### Patch Changes
package/_cjs/test.cjs ADDED
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ createRandomInstance: true,
8
+ createRandomInstanceI: true
9
+ };
10
+ exports.createRandomInstanceI = exports.createRandomInstance = void 0;
11
+ var _test = require("@effect-app/infra/test.arbs");
12
+ var _schema = require("@effect/schema");
13
+ var _effectApp = require("effect-app");
14
+ var _utils = require("effect-app/utils");
15
+ var _testArbs = require("./test.arbs.cjs");
16
+ Object.keys(_testArbs).forEach(function (key) {
17
+ if (key === "default" || key === "__esModule") return;
18
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
19
+ if (key in exports && exports[key] === _testArbs[key]) return;
20
+ Object.defineProperty(exports, key, {
21
+ enumerable: true,
22
+ get: function () {
23
+ return _testArbs[key];
24
+ }
25
+ });
26
+ });
27
+ const isPropertySignature = u => _effectApp.Predicate.hasProperty(u, _effectApp.S.PropertySignatureTypeId);
28
+ const defaults = fields => {
29
+ const keys = Object.keys(fields);
30
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+ const out = {};
32
+ for (const key of keys) {
33
+ const field = fields[key];
34
+ if (isPropertySignature(field)) {
35
+ const ast = field.ast;
36
+ const defaultValue = ast._tag === "PropertySignatureDeclaration" ? ast.defaultValue : ast.to.defaultValue;
37
+ if (defaultValue !== undefined) {
38
+ out[key] = defaultValue();
39
+ }
40
+ }
41
+ }
42
+ return out;
43
+ };
44
+ /**
45
+ * Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
46
+ */
47
+ const createRandomInstance = s => {
48
+ const gen = (0, _test.generate)(_schema.Arbitrary.make(s));
49
+ return overrides => {
50
+ const v = {
51
+ ...gen.value,
52
+ ...defaults(s.fields)
53
+ };
54
+ return overrides ? (0, _utils.copy)(v, overrides) : v;
55
+ };
56
+ };
57
+ /**
58
+ * Like `createRandomInstance`, but takes encoded values rather than decoded ones.
59
+ */
60
+ exports.createRandomInstance = createRandomInstance;
61
+ const createRandomInstanceI = s => {
62
+ const gen = (0, _test.generate)(_schema.Arbitrary.make(s));
63
+ const encode = _effectApp.S.encodeSync(s);
64
+ const decode = _effectApp.S.decodeSync(s);
65
+ return overrides => {
66
+ const v = {
67
+ ...gen.value,
68
+ ...defaults(s.fields)
69
+ };
70
+ if (!overrides) return v;
71
+ return decode({
72
+ ...encode(v),
73
+ ...overrides
74
+ });
75
+ };
76
+ };
77
+ exports.createRandomInstanceI = createRandomInstanceI;
78
+ //# sourceMappingURL=test.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.cjs","names":["_test","require","_schema","_effectApp","_utils","_testArbs","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","isPropertySignature","u","Predicate","hasProperty","S","PropertySignatureTypeId","defaults","fields","out","field","ast","defaultValue","_tag","to","undefined","createRandomInstance","s","gen","generate","Arbitrary","make","overrides","v","value","copy","createRandomInstanceI","encode","encodeSync","decode","decodeSync"],"sources":["../src/test.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AA+CA,IAAAI,SAAA,GAAAJ,OAAA;AAAAK,MAAA,CAAAC,IAAA,CAAAF,SAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,SAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,SAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AA7CA,MAAMS,mBAAmB,GAAIC,CAAU,IACrCC,oBAAS,CAACC,WAAW,CAACF,CAAC,EAAEG,YAAC,CAACC,uBAAuB,CAAC;AAErD,MAAMC,QAAQ,GAAIC,MAAuB,IAAI;EAC3C,MAAMlB,IAAI,GAAGD,MAAM,CAACC,IAAI,CAACkB,MAAM,CAAC;EAChC;EACA,MAAMC,GAAG,GAAwB,EAAE;EACnC,KAAK,MAAMjB,GAAG,IAAIF,IAAI,EAAE;IACtB,MAAMoB,KAAK,GAAGF,MAAM,CAAChB,GAAG,CAAC;IACzB,IAAIS,mBAAmB,CAACS,KAAK,CAAC,EAAE;MAC9B,MAAMC,GAAG,GAAGD,KAAK,CAACC,GAAG;MACrB,MAAMC,YAAY,GAAGD,GAAG,CAACE,IAAI,KAAK,8BAA8B,GAAGF,GAAG,CAACC,YAAY,GAAGD,GAAG,CAACG,EAAE,CAACF,YAAY;MACzG,IAAIA,YAAY,KAAKG,SAAS,EAAE;QAC9BN,GAAG,CAACjB,GAAG,CAAC,GAAGoB,YAAY,EAAE;MAC3B;IACF;EACF;EACA,OAAOH,GAAG;AACZ,CAAC;AAED;;;AAGO,MAAMO,oBAAoB,GAA4BC,CAAkD,IAAI;EACjH,MAAMC,GAAG,GAAG,IAAAC,cAAQ,EAACC,iBAAS,CAACC,IAAI,CAACJ,CAAC,CAAC,CAAC;EACvC,OAAQK,SAAsB,IAAI;IAChC,MAAMC,CAAC,GAAG;MAAE,GAAGL,GAAG,CAACM,KAAK;MAAE,GAAGjB,QAAQ,CAACU,CAAC,CAACT,MAAM;IAAC,CAAE;IACjD,OAAOc,SAAS,GAAG,IAAAG,WAAI,EAACF,CAAC,EAAED,SAAS,CAAC,GAAGC,CAAC;EAC3C,CAAC;AACH,CAAC;AAED;;;AAAA1B,OAAA,CAAAmB,oBAAA,GAAAA,oBAAA;AAGO,MAAMU,qBAAqB,GAAyBT,CAAsD,IAAI;EACnH,MAAMC,GAAG,GAAG,IAAAC,cAAQ,EAACC,iBAAS,CAACC,IAAI,CAACJ,CAAC,CAAC,CAAC;EACvC,MAAMU,MAAM,GAAGtB,YAAC,CAACuB,UAAU,CAACX,CAAC,CAAC;EAC9B,MAAMY,MAAM,GAAGxB,YAAC,CAACyB,UAAU,CAACb,CAAC,CAAC;EAC9B,OAAQK,SAAsB,IAAI;IAChC,MAAMC,CAAC,GAAG;MAAE,GAAGL,GAAG,CAACM,KAAK;MAAE,GAAGjB,QAAQ,CAACU,CAAC,CAACT,MAAM;IAAC,CAAE;IACjD,IAAI,CAACc,SAAS,EAAE,OAAOC,CAAC;IACxB,OAAOM,MAAM,CAAC;MAAE,GAAGF,MAAM,CAACJ,CAAC,CAAC;MAAE,GAAGD;IAAS,CAAE,CAAC;EAC/C,CAAC;AACH,CAAC;AAAAzB,OAAA,CAAA6B,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _vitest = require("@effect/vitest");
7
+ Object.keys(_vitest).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _vitest[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _vitest[key];
14
+ }
15
+ });
16
+ });
17
+ var _test = require("./test.cjs");
18
+ Object.keys(_test).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _test[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _test[key];
25
+ }
26
+ });
27
+ });
28
+ //# sourceMappingURL=vitest.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.cjs","names":["_vitest","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_test"],"sources":["../src/vitest.ts"],"sourcesContent":[null],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,KAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,KAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,KAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,KAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;;;;;;qBAkBf,EAAG,iBAAiB,eAAc,EAAG,sBACnC;;;qBAKF,EAAG,iBACJ,eAAc,EAAG,sBACrB;;;;;;yBAaoB,EAAG,iBAAiB;;;yBAe1C,EAAI,iBAAgB;;;;;;;;;;;;;;AAnD5B,qBAAa,oBAAqB,SAAQ,yBASxC;CAAG;;;;;;;qBAMU,EAAG,iBAAiB,eAAc,EAAG,sBACnC;;;qBAKF,EAAG,iBACJ,eAAc,EAAG,sBACrB;;;;;;;;;;yBAaoB,EAAG,iBAAiB;;;yBAe1C,EAAI,iBAAgB;;;;;;;;;;;;;;;;;AAxC5B;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAgBlC;IAEA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAUhE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,eAAO,MAAM,cAAc,QAAS,cAAc;;;;;;;;;CAkBhD,CAAA;AAKF,yBAAiB,oBAAoB,CAAC;IACpC,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACnF"}
1
+ {"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../src/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;;;;;;uBAkBZ,iBAAiB,iBAAiB,sBACnC;;;uBAKC,iBACJ,iBAAiB,sBACrB;;;;;;2BAauB,iBAAiB;;;2BAetC,iBAAgB;;;;;;;;;;;;;;AAnD5B,qBAAa,oBAAqB,SAAQ,yBASxC;CAAG;;;;;;;uBAMa,iBAAiB,iBAAiB,sBACnC;;;uBAKC,iBACJ,iBAAiB,sBACrB;;;;;;;;;;2BAauB,iBAAiB;;;2BAetC,iBAAgB;;;;;;;;;;;;;;;;;AAxC5B;;;GAGG;AACH,qBAAa,cAAe,SAAQ,mBAgBlC;IAEA,MAAM,CAAC,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAUhE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc;;;;;;CASrD;AAED,eAAO,MAAM,cAAc,QAAS,cAAc;;;;;;;;;CAkBhD,CAAA;AAKF,yBAAiB,oBAAoB,CAAC;IACpC,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAAG;CACzF;AACD,yBAAiB,cAAc,CAAC;IAC9B,UAAiB,IAAK,SAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;KAAG;CACnF"}
package/dist/test.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { S } from "effect-app";
2
+ /**
3
+ * Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
4
+ */
5
+ export declare const createRandomInstance: <A extends object, I, R>(s: S.Schema<A, I, R> & {
6
+ fields: S.Struct.Fields;
7
+ }) => (overrides?: Partial<A>) => A;
8
+ /**
9
+ * Like `createRandomInstance`, but takes encoded values rather than decoded ones.
10
+ */
11
+ export declare const createRandomInstanceI: <A extends object, I>(s: S.Schema<A, I, never> & {
12
+ fields: S.Struct.Fields;
13
+ }) => (overrides?: Partial<I>) => A;
14
+ export * from "./test.arbs.js";
15
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,CAAC,EAAE,MAAM,YAAY,CAAA;AAuBzC;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;CAAE,kBAEzF,OAAO,CAAC,CAAC,CAAC,MAI/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;CAAE,kBAI3F,OAAO,CAAC,CAAC,CAAC,MAK/B,CAAA;AAED,cAAc,gBAAgB,CAAA"}
package/dist/test.js ADDED
@@ -0,0 +1,47 @@
1
+ import { generate } from "@effect-app/infra/test.arbs";
2
+ import { Arbitrary } from "@effect/schema";
3
+ import { Predicate, S } from "effect-app";
4
+ import { copy } from "effect-app/utils";
5
+ const isPropertySignature = (u) => Predicate.hasProperty(u, S.PropertySignatureTypeId);
6
+ const defaults = (fields) => {
7
+ const keys = Object.keys(fields);
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ const out = {};
10
+ for (const key of keys) {
11
+ const field = fields[key];
12
+ if (isPropertySignature(field)) {
13
+ const ast = field.ast;
14
+ const defaultValue = ast._tag === "PropertySignatureDeclaration" ? ast.defaultValue : ast.to.defaultValue;
15
+ if (defaultValue !== undefined) {
16
+ out[key] = defaultValue();
17
+ }
18
+ }
19
+ }
20
+ return out;
21
+ };
22
+ /**
23
+ * Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
24
+ */
25
+ export const createRandomInstance = (s) => {
26
+ const gen = generate(Arbitrary.make(s));
27
+ return (overrides) => {
28
+ const v = { ...gen.value, ...defaults(s.fields) };
29
+ return overrides ? copy(v, overrides) : v;
30
+ };
31
+ };
32
+ /**
33
+ * Like `createRandomInstance`, but takes encoded values rather than decoded ones.
34
+ */
35
+ export const createRandomInstanceI = (s) => {
36
+ const gen = generate(Arbitrary.make(s));
37
+ const encode = S.encodeSync(s);
38
+ const decode = S.decodeSync(s);
39
+ return (overrides) => {
40
+ const v = { ...gen.value, ...defaults(s.fields) };
41
+ if (!overrides)
42
+ return v;
43
+ return decode({ ...encode(v), ...overrides });
44
+ };
45
+ };
46
+ export * from "./test.arbs.js";
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXZDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFVLEVBQThCLEVBQUUsQ0FDckUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUE7QUFFckQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUF1QixFQUFFLEVBQUU7SUFDM0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNoQyw4REFBOEQ7SUFDOUQsTUFBTSxHQUFHLEdBQXdCLEVBQUUsQ0FBQTtJQUNuQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN6QixJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQTtZQUNyQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQTtZQUN6RyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUF5QixDQUFrRCxFQUFFLEVBQUU7SUFDakgsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxPQUFPLENBQUMsU0FBc0IsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1FBQ2pELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFzQixDQUFzRCxFQUFFLEVBQUU7SUFDbkgsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDOUIsT0FBTyxDQUFDLFNBQXNCLEVBQUUsRUFBRTtRQUNoQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtRQUNqRCxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3hCLE9BQU8sTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQy9DLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVELGNBQWMsZ0JBQWdCLENBQUEifQ==
@@ -0,0 +1,3 @@
1
+ export * from "@effect/vitest";
2
+ export * from "./test.js";
3
+ //# sourceMappingURL=vitest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.d.ts","sourceRoot":"","sources":["../src/vitest.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA"}
package/dist/vitest.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "@effect/vitest";
2
+ export * from "./test.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZpdGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFBO0FBQzlCLGNBQWMsV0FBVyxDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "1.17.1",
3
+ "version": "1.18.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -19,15 +19,15 @@
19
19
  "pure-rand": "6.1.0",
20
20
  "redlock": "^4.2.0",
21
21
  "@effect-app/core": "1.10.1",
22
- "@effect-app/infra-adapters": "1.11.1",
23
- "effect-app": "1.16.1",
22
+ "@effect-app/infra-adapters": "1.11.2",
23
+ "effect-app": "1.17.0",
24
24
  "@effect-app/schema": "1.12.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@babel/cli": "^7.25.6",
28
28
  "@sentry/node": "^8.32.0",
29
29
  "@types/express": "^5.0.0",
30
- "@types/node": "~22.7.3",
30
+ "@types/node": "~22.7.4",
31
31
  "@types/proper-lockfile": "^4.1.4",
32
32
  "@types/redis": "^2.8.32",
33
33
  "@types/redlock": "^4.0.7",
@@ -44,6 +44,7 @@
44
44
  "express": "^4.21.0",
45
45
  "@effect/platform": "^0.66.2",
46
46
  "@effect/schema": "^0.74.1",
47
+ "@effect/vitest": "^0.10.5",
47
48
  "effect": "^3.8.4"
48
49
  },
49
50
  "typesVersions": {
package/src/test.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { generate } from "@effect-app/infra/test.arbs"
2
+ import { Arbitrary } from "@effect/schema"
3
+ import type { PropertySignature } from "@effect/schema/Schema"
4
+ import { Predicate, S } from "effect-app"
5
+ import { copy } from "effect-app/utils"
6
+
7
+ const isPropertySignature = (u: unknown): u is PropertySignature.All =>
8
+ Predicate.hasProperty(u, S.PropertySignatureTypeId)
9
+
10
+ const defaults = (fields: S.Struct.Fields) => {
11
+ const keys = Object.keys(fields)
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ const out: Record<string, any> = {}
14
+ for (const key of keys) {
15
+ const field = fields[key]
16
+ if (isPropertySignature(field)) {
17
+ const ast = field.ast
18
+ const defaultValue = ast._tag === "PropertySignatureDeclaration" ? ast.defaultValue : ast.to.defaultValue
19
+ if (defaultValue !== undefined) {
20
+ out[key] = defaultValue()
21
+ }
22
+ }
23
+ }
24
+ return out
25
+ }
26
+
27
+ /**
28
+ * Given the schema for an object-like structure, creates a function that generates random instances of that object with some values provided.
29
+ */
30
+ export const createRandomInstance = <A extends object, I, R>(s: S.Schema<A, I, R> & { fields: S.Struct.Fields }) => {
31
+ const gen = generate(Arbitrary.make(s))
32
+ return (overrides?: Partial<A>) => {
33
+ const v = { ...gen.value, ...defaults(s.fields) }
34
+ return overrides ? copy(v, overrides) : v
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Like `createRandomInstance`, but takes encoded values rather than decoded ones.
40
+ */
41
+ export const createRandomInstanceI = <A extends object, I>(s: S.Schema<A, I, never> & { fields: S.Struct.Fields }) => {
42
+ const gen = generate(Arbitrary.make(s))
43
+ const encode = S.encodeSync(s)
44
+ const decode = S.decodeSync(s)
45
+ return (overrides?: Partial<I>) => {
46
+ const v = { ...gen.value, ...defaults(s.fields) }
47
+ if (!overrides) return v
48
+ return decode({ ...encode(v), ...overrides })
49
+ }
50
+ }
51
+
52
+ export * from "./test.arbs.js"
package/src/vitest.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "@effect/vitest"
2
+ export * from "./test.js"