effect-app 4.0.0-beta.5 → 4.0.0-beta.52
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 +243 -0
- package/dist/Config.d.ts +7 -0
- package/dist/Config.d.ts.map +1 -0
- package/dist/Config.js +6 -0
- package/dist/ConfigProvider.d.ts +39 -0
- package/dist/ConfigProvider.d.ts.map +1 -0
- package/dist/ConfigProvider.js +42 -0
- package/dist/Effect.d.ts.map +1 -1
- package/dist/Effect.js +3 -2
- package/dist/Operations.d.ts +51 -15
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Pure.d.ts.map +1 -1
- package/dist/Pure.js +11 -11
- package/dist/Schema/Class.d.ts +39 -1
- package/dist/Schema/Class.d.ts.map +1 -1
- package/dist/Schema/Class.js +89 -12
- package/dist/Schema/SpecialJsonSchema.d.ts +40 -0
- package/dist/Schema/SpecialJsonSchema.d.ts.map +1 -0
- package/dist/Schema/SpecialJsonSchema.js +199 -0
- package/dist/Schema/SpecialOpenApi.d.ts +30 -0
- package/dist/Schema/SpecialOpenApi.d.ts.map +1 -0
- package/dist/Schema/SpecialOpenApi.js +120 -0
- package/dist/Schema/brand.d.ts +8 -5
- package/dist/Schema/brand.d.ts.map +1 -1
- package/dist/Schema/brand.js +1 -1
- package/dist/Schema/email.d.ts.map +1 -1
- package/dist/Schema/email.js +4 -3
- package/dist/Schema/ext.d.ts +177 -44
- package/dist/Schema/ext.d.ts.map +1 -1
- package/dist/Schema/ext.js +144 -35
- package/dist/Schema/moreStrings.d.ts.map +1 -1
- package/dist/Schema/moreStrings.js +6 -4
- package/dist/Schema/numbers.d.ts +8 -8
- package/dist/Schema/numbers.js +2 -2
- package/dist/Schema/phoneNumber.d.ts.map +1 -1
- package/dist/Schema/phoneNumber.js +3 -2
- package/dist/Schema.d.ts +21 -54
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +43 -64
- package/dist/ServiceMap.d.ts +3 -3
- package/dist/ServiceMap.d.ts.map +1 -1
- package/dist/ServiceMap.js +1 -1
- package/dist/client/apiClientFactory.d.ts +1 -1
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/apiClientFactory.js +8 -9
- package/dist/client/errors.d.ts +8 -0
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +34 -10
- package/dist/client/makeClient.d.ts +13 -12
- package/dist/client/makeClient.d.ts.map +1 -1
- package/dist/client/makeClient.js +7 -15
- package/dist/http/Request.d.ts.map +1 -1
- package/dist/http/Request.js +5 -5
- package/dist/ids.d.ts +1 -1
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/utils.d.ts +18 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +24 -5
- package/package.json +24 -12
- package/src/Config.ts +14 -0
- package/src/ConfigProvider.ts +48 -0
- package/src/Effect.ts +3 -2
- package/src/Pure.ts +12 -13
- package/src/Schema/Class.ts +114 -16
- package/src/Schema/SpecialJsonSchema.ts +216 -0
- package/src/Schema/SpecialOpenApi.ts +126 -0
- package/src/Schema/brand.ts +13 -7
- package/src/Schema/email.ts +4 -2
- package/src/Schema/ext.ts +213 -56
- package/src/Schema/moreStrings.ts +10 -6
- package/src/Schema/numbers.ts +2 -2
- package/src/Schema/phoneNumber.ts +3 -1
- package/src/Schema.ts +79 -103
- package/src/ServiceMap.ts +7 -6
- package/src/client/apiClientFactory.ts +12 -15
- package/src/client/errors.ts +45 -12
- package/src/client/makeClient.ts +33 -26
- package/src/http/Request.ts +7 -4
- package/src/ids.ts +1 -1
- package/src/index.ts +2 -1
- package/src/utils.ts +26 -4
- package/test/dist/moreStrings.test.d.ts.map +1 -0
- package/test/dist/rpc.test.d.ts.map +1 -1
- package/test/dist/special.test.d.ts.map +1 -0
- package/test/moreStrings.test.ts +17 -0
- package/test/rpc.test.ts +26 -5
- package/test/schema.test.ts +292 -1
- package/test/special.test.ts +525 -0
- package/test/utils.test.ts +1 -1
- package/tsconfig.base.json +0 -1
- package/tsconfig.json +0 -1
- package/dist/Struct.d.ts +0 -44
- package/dist/Struct.d.ts.map +0 -1
- package/dist/Struct.js +0 -29
- package/src/Struct.ts +0 -54
package/dist/Pure.js
CHANGED
|
@@ -51,29 +51,29 @@ export function makeService(_) {
|
|
|
51
51
|
}
|
|
52
52
|
export const PureEnvEnv = Symbol();
|
|
53
53
|
export function get() {
|
|
54
|
-
return castTag().
|
|
54
|
+
return (castTag()).useSync((_) => _.env.state);
|
|
55
55
|
}
|
|
56
56
|
export function set(s) {
|
|
57
|
-
return castTag().
|
|
57
|
+
return (castTag()).useSync((_) => {
|
|
58
58
|
_.env.state = s;
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
export function log(w) {
|
|
62
|
-
return castTag().
|
|
62
|
+
return (castTag()).useSync((_) => {
|
|
63
63
|
_.env.log = Chunk.append(_.env.log, w);
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
export function logMany(w) {
|
|
67
|
-
return castTag().
|
|
67
|
+
return (castTag()).useSync((_) => {
|
|
68
68
|
_.env.log = Chunk.appendAll(_.env.log, Chunk.fromIterable(w));
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
export function runAll(self, s) {
|
|
72
72
|
const a = Effect
|
|
73
|
-
.flatMap(self, (x) => castTag()
|
|
74
|
-
.
|
|
75
|
-
.pipe(Effect.
|
|
76
|
-
.pipe(Effect.catch((err) => tagg.
|
|
73
|
+
.flatMap(self, (x) => (castTag())
|
|
74
|
+
.useSync(({ env: _ }) => ({ log: _.log, state: _.state }))
|
|
75
|
+
.pipe(Effect.map(({ log, state }) => tuple(log, Result.succeed(tuple(state, x))))))
|
|
76
|
+
.pipe(Effect.catch((err) => tagg.useSync((env) => tuple(env.env.log, Result.fail(err)))));
|
|
77
77
|
return Effect.provide(a, Layer.succeed(tagg, { env: makePureEnv(s) }));
|
|
78
78
|
}
|
|
79
79
|
export function runResult(self, s) {
|
|
@@ -89,7 +89,7 @@ export function runA(self, s) {
|
|
|
89
89
|
return Effect.map(runAll(self, s), ([log, r]) => tuple(log, Result.map(r, ([, a]) => a)));
|
|
90
90
|
}
|
|
91
91
|
export function modify(mod) {
|
|
92
|
-
return castTag().
|
|
92
|
+
return (castTag()).useSync((_) => {
|
|
93
93
|
const [s, a] = mod(_.env.state);
|
|
94
94
|
_.env.state = s;
|
|
95
95
|
return a;
|
|
@@ -97,7 +97,7 @@ export function modify(mod) {
|
|
|
97
97
|
}
|
|
98
98
|
export function modifyM(mod) {
|
|
99
99
|
// return serviceWithEffect(_ => Ref.modifyM_(_.state, mod))
|
|
100
|
-
return Effect.flatMap(castTag().
|
|
100
|
+
return Effect.flatMap((castTag()).useSync((_) => _), (_) => Effect.map(mod(_.env.state), ([s, a]) => {
|
|
101
101
|
_.env.state = s;
|
|
102
102
|
return a;
|
|
103
103
|
}));
|
|
@@ -284,4 +284,4 @@ export function updateWithEffect(upd) {
|
|
|
284
284
|
// abc,
|
|
285
285
|
// { a: 1 }
|
|
286
286
|
// )
|
|
287
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9QdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDckMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU3QyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNuQixNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNuQixNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQWtCbEIsTUFBTSxXQUFXO0lBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBVTtJQUNiLENBQUMsRUFBRSxDQUFDLENBQWlCO0lBQ3JCLENBQUMsRUFBRSxDQUFDLENBQVc7SUFDZixLQUFLLENBQUk7SUFDVCxHQUFHLENBQWdCO0lBRTVCLFlBQVksQ0FBSztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFLLENBQUE7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBZSxDQUFLO0lBQzdDLE9BQU8sSUFBSSxXQUFXLENBQVcsQ0FBQyxDQUFDLENBQUE7QUFDckMsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUFPO0lBTVAsK0RBQStEO0lBQy9ELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUlELDRDQUE0QztBQUU1QyxNQUFNLFVBQVUsS0FBSyxDQUNuQixHQUErQixFQUMvQixNQUE0RCxFQUM1RCxNQUE2QztJQUU3QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNyRyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBMkIsTUFBNEQ7SUFDekcsT0FBTyxDQUNMLEdBQStCLEVBQy9CLE1BQTZDLEVBQzdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FDbEIsR0FBK0IsRUFDL0IsTUFBNkMsRUFDN0MsTUFBNkM7SUFFN0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ2pFLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUF1QixNQUE2QztJQUNyRixPQUFPLENBQ0wsR0FBK0IsRUFDL0IsTUFBNkMsRUFDN0MsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ2hDLENBQUM7QUFFRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUEwQyxTQUFTLENBQUMsQ0FBQTtBQUNuRixTQUFTLE9BQU87SUFDZCxPQUFPLElBQTZFLENBQUE7QUFDdEYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUdsQyxNQUFNLE9BQWdCLG9CQUFvQjtDQUl6QztBQU9ELE1BQU0sT0FBZ0IsYUFBMEIsU0FBUSxvQkFBd0M7Q0FBRztBQUVuRyxNQUFNLFVBQVUsV0FBVyxDQUErQixDQUFzQjtJQUM5RSxPQUFPLENBQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUE7QUFLbEMsTUFBTSxVQUFVLEdBQUc7SUFDakIsT0FBUSxPQUFPLEVBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFJLENBQUk7SUFDekIsT0FBUSxPQUFPLEVBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUlELE1BQU0sVUFBVSxHQUFHLENBQUksQ0FBSTtJQUN6QixPQUFRLE9BQU8sRUFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUMxRCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUksQ0FBYztJQUN2QyxPQUFRLE9BQU8sRUFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUMxRCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixJQUFnRCxFQUNoRCxDQUFLO0lBTUwsTUFBTSxDQUFDLEdBQUcsTUFBTTtTQUNiLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNsQixPQUFPLEVBQXNCO1NBQzNCLEdBQUcsQ0FDRixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FDekU7U0FDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM3QyxNQUFNLENBQUMsR0FBRyxDQUNSLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckUsQ0FDRixDQUFDO1NBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFFLElBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUcsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQWEsQ0FBQyxDQUFRLEVBQUUsQ0FBUSxDQUFRLENBQUE7QUFDekcsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQ3ZCLElBQWdELEVBQ2hELENBQUs7SUFFTCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pGLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUNyQixJQUFnRCxFQUNoRCxDQUFLO0lBRUwsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUNuQixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUNmLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDaEcsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixJQUFnRCxFQUNoRCxDQUFLO0lBRUwsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2xFLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUNsQixJQUFnRCxFQUNoRCxDQUFLO0lBRUwsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzNGLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixHQUFnQztJQUVoQyxPQUFRLE9BQU8sRUFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtRQUN0RCxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQVEsQ0FBQTtRQUN0QixPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUMsQ0FBUSxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQ3JCLEdBQXdFO0lBRXhFLDREQUE0RDtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLE9BQU8sRUFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQ1QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7UUFDM0MsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBUSxDQUFBO1FBQ3RCLE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQyxDQUFDLENBQ0UsQ0FBQTtBQUNWLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFTLEdBQWtCO0lBQ25ELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hCLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNwQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLEdBQXdGO0lBRXhGLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3hFLENBQUM7QUFNRCxtRkFBbUY7QUFDbkYsMkVBQTJFO0FBQzNFLElBQUk7QUFFSixrR0FBa0c7QUFDbEcsK0VBQStFO0FBQy9FLElBQUk7QUFFSixnRkFBZ0Y7QUFDaEYsd0dBQXdHO0FBQ3hHLElBQUk7QUFFSix3R0FBd0c7QUFDeEcsMkVBQTJFO0FBQzNFLElBQUk7QUFFSixrRUFBa0U7QUFDbEUsOENBQThDO0FBQzlDLGdHQUFnRztBQUNoRyxJQUFJO0FBRUoseUVBQXlFO0FBQ3pFLCtCQUErQjtBQUMvQixJQUFJO0FBRUosc0NBQXNDO0FBQ3RDLDZEQUE2RDtBQUM3RCxvRUFBb0U7QUFDcEUsaUdBQWlHO0FBQ2pHLGlFQUFpRTtBQUNqRSwwQkFBMEI7QUFDMUIsb0VBQW9FO0FBQ3BFLE1BQU07QUFDTiw2Q0FBNkM7QUFDN0MsMENBQTBDO0FBQzFDLG9CQUFvQjtBQUNwQixrR0FBa0c7QUFDbEcsTUFBTTtBQUVOLHNCQUFzQjtBQUN0QixXQUFXO0FBQ1gsV0FBVztBQUNYLFVBQVU7QUFDVixNQUFNO0FBRU4sOEVBQThFO0FBQzlFLDhCQUE4QjtBQUM5QixpQkFBaUI7QUFDakIsZ0RBQWdEO0FBQ2hELHNHQUFzRztBQUN0RyxlQUFlO0FBQ2YsTUFBTTtBQUVOLDBHQUEwRztBQUMxRyw4QkFBOEI7QUFDOUIsaUJBQWlCO0FBQ2pCLG1FQUFtRTtBQUNuRSxnREFBZ0Q7QUFDaEQsMEhBQTBIO0FBQzFILGVBQWU7QUFDZixNQUFNO0FBRU4sOENBQThDO0FBQzlDLHdEQUF3RDtBQUN4RCxNQUFNO0FBRU4sMEVBQTBFO0FBQzFFLHFFQUFxRTtBQUNyRSxNQUFNO0FBRU4sd0VBQXdFO0FBRXhFLHlEQUF5RDtBQUN6RCx3REFBd0Q7QUFDeEQsWUFBWTtBQUNaLGlJQUFpSTtBQUNqSSwrQkFBK0I7QUFDL0Isc0RBQXNEO0FBQ3RELDZEQUE2RDtBQUM3RCx1R0FBdUc7QUFDdkcsZUFBZTtBQUNmLFlBQVk7QUFDWiwyQkFBMkI7QUFDM0IsK0ZBQStGO0FBQy9GLFVBQVU7QUFDVixrQkFBa0I7QUFDbEIsZUFBZTtBQUNmLCtCQUErQjtBQUMvQiwrRUFBK0U7QUFDL0UsWUFBWTtBQUNaLCtFQUErRTtBQUMvRSxNQUFNO0FBRU4sNERBQTREO0FBQzVELHdEQUF3RDtBQUN4RCxZQUFZO0FBQ1osUUFBUTtBQUNSLDhFQUE4RTtBQUM5RSxNQUFNO0FBRU4sdURBQXVEO0FBQ3ZELHdEQUF3RDtBQUN4RCxZQUFZO0FBQ1osUUFBUTtBQUNSLGdGQUFnRjtBQUNoRixNQUFNO0FBRU4sYUFBYTtBQUNiLGtCQUFrQjtBQUVsQixZQUFZO0FBQ1osWUFBWTtBQUNaLGlCQUFpQjtBQUNqQixjQUFjO0FBQ2QsWUFBWTtBQUNaLGlCQUFpQjtBQUVqQixjQUFjO0FBQ2QsZUFBZTtBQUNmLGNBQWM7QUFDZCxjQUFjO0FBQ2QsTUFBTTtBQUNOLElBQUk7QUFFSixpRUFBaUU7QUFFakUsdUVBQXVFO0FBRXZFLGlKQUFpSjtBQUNqSiwyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLHFIQUFxSDtBQUNySCwwQ0FBMEM7QUFDMUMsSUFBSTtBQUVKLGtKQUFrSjtBQUNsSiwyQ0FBMkM7QUFDM0MsSUFBSTtBQUVKLG9HQUFvRztBQUNwRywwQ0FBMEM7QUFDMUMsSUFBSTtBQUVKLHNFQUFzRTtBQUV0RSwwR0FBMEc7QUFDMUcsaUNBQWlDO0FBQ2pDLHNDQUFzQztBQUN0QyxrREFBa0Q7QUFDbEQseUNBQXlDO0FBQ3pDLE1BQU07QUFFTixnQ0FBZ0M7QUFDaEMsZ0RBQWdEO0FBQ2hELGtEQUFrRDtBQUNsRCx5Q0FBeUM7QUFFekMsTUFBTTtBQUNOLElBQUk7QUFFSiwrRkFBK0Y7QUFFL0YsOElBQThJO0FBQzlJLElBQUk7QUFFSiwrRUFBK0U7QUFFL0Usc0JBQXNCO0FBQ3RCLHNCQUFzQjtBQUN0QixxQkFBcUI7QUFDckIsdUNBQXVDO0FBQ3ZDLDJCQUEyQjtBQUMzQiw0QkFBNEI7QUFFNUIsMkJBQTJCO0FBQzNCLElBQUk7QUFFSix3QkFBd0I7QUFDeEIsc0NBQXNDO0FBQ3RDLG1CQUFtQjtBQUNuQixzQ0FBc0M7QUFDdEMsa0NBQWtDO0FBQ2xDLGtDQUFrQztBQUNsQywwQ0FBMEM7QUFDMUMsS0FBSztBQUVMLGtDQUFrQztBQUNsQyxRQUFRO0FBQ1IsbUNBQW1DO0FBQ25DLGFBQWE7QUFDYixTQUFTO0FBQ1QsTUFBTTtBQUNOLDZDQUE2QztBQUM3Qyw4Q0FBOEM7QUFDOUMsV0FBVztBQUNYLFVBQVU7QUFDVixJQUFJO0FBQ0osd0JBQXdCO0FBQ3hCLHlEQUF5RDtBQUV6RCxxQkFBcUI7QUFFckIsNkJBQTZCO0FBQzdCLDZCQUE2QjtBQUM3QixJQUFJO0FBQ0osNEJBQTRCO0FBQzVCLFNBQVM7QUFDVCxhQUFhO0FBQ2IsSUFBSSJ9
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9QdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDckMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU3QyxNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNuQixNQUFNLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNuQixNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQWtCbEIsTUFBTSxXQUFXO0lBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBVTtJQUNiLENBQUMsRUFBRSxDQUFDLENBQWlCO0lBQ3JCLENBQUMsRUFBRSxDQUFDLENBQVc7SUFDZixLQUFLLENBQUk7SUFDVCxHQUFHLENBQWdCO0lBRTVCLFlBQVksQ0FBSztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFLLENBQUE7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBZSxDQUFLO0lBQzdDLE9BQU8sSUFBSSxXQUFXLENBQVcsQ0FBQyxDQUFDLENBQUE7QUFDckMsQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUFPO0lBTVAsK0RBQStEO0lBQy9ELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUlELDRDQUE0QztBQUU1QyxNQUFNLFVBQVUsS0FBSyxDQUNuQixHQUErQixFQUMvQixNQUE0RCxFQUM1RCxNQUE2QztJQUU3QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxD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
|
package/dist/Schema/Class.d.ts
CHANGED
|
@@ -15,8 +15,46 @@ type HasFields<Fields extends Struct.Fields> = {
|
|
|
15
15
|
} | {
|
|
16
16
|
readonly from: HasFields<Fields>;
|
|
17
17
|
};
|
|
18
|
+
export type Class<Self, S extends S.Top & {
|
|
19
|
+
readonly fields: Struct.Fields;
|
|
20
|
+
}, Inherited> = S.Class<Self, S, Inherited>;
|
|
21
|
+
/**
|
|
22
|
+
* Like `Schema.Class`, but the resulting class accepts plain objects matching
|
|
23
|
+
* the struct schema during encoding — not only `instanceof` or type-id
|
|
24
|
+
* checks.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { Schema } from "effect"
|
|
29
|
+
* import { Class } from "./Class.js"
|
|
30
|
+
*
|
|
31
|
+
* class A extends Class<A>("A")({ a: Schema.String }) {}
|
|
32
|
+
*
|
|
33
|
+
* // Construction works as normal:
|
|
34
|
+
* new A({ a: "hello" })
|
|
35
|
+
*
|
|
36
|
+
* // Encoding accepts plain objects:
|
|
37
|
+
* Schema.encodeUnknownSync(A)({ a: "hello" }) // { a: "hello" }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
18
40
|
export declare const Class: <Self = never>(identifier: string) => <Fields extends S.Struct.Fields>(fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>) => [Self] extends [never] ? MissingSelfGeneric<"Class"> : EnhancedClass<Self, S.Struct<Fields>, {}>;
|
|
19
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Like `Schema.TaggedClass`, but the resulting class accepts plain objects
|
|
43
|
+
* matching the struct schema during encoding.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { Schema } from "effect"
|
|
48
|
+
* import { TaggedClass } from "./Class.js"
|
|
49
|
+
*
|
|
50
|
+
* class Circle extends TaggedClass<Circle>()("Circle", {
|
|
51
|
+
* radius: Schema.Number
|
|
52
|
+
* }) {}
|
|
53
|
+
*
|
|
54
|
+
* Schema.encodeUnknownSync(Circle)({ _tag: "Circle", radius: 5 })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const TaggedClass: <Self = never>(identifier?: string) => <Tag extends string, Fields extends S.Struct.Fields>(tag: Tag, fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>) => [Self] extends [never] ? MissingSelfGeneric<"TaggedClass"> : EnhancedClass<Self, S.Struct<{
|
|
20
58
|
readonly _tag: S.tag<Tag>;
|
|
21
59
|
} & Fields>, {}>;
|
|
22
60
|
export declare const ExtendedClass: <Self, _SelfFrom>(identifier: string) => <Fields extends S.Struct.Fields>(fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>) => EnhancedClass<Self, S.Struct<Fields>, {}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../src/Schema/Class.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAElC,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7E,MAAM,WAAW,aAAa,CAAC,IAAI,EAAE,OAAO,SAAS,CAAC,CAAC,GAAG,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAA;CAAE,EAAE,SAAS,CACxG,SAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,4BAA4B,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;CAE3G;AACD,KAAK,kBAAkB,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,SAAS,MAAM,GAAG,EAAE,IACtE,uDAAuD,KAAK,YAAY,MAAM,YAAY,CAAA;AAE5F,MAAM,WAAW,eAAe,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../src/Schema/Class.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema/Class.js
CHANGED
|
@@ -1,28 +1,105 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { pipe, Struct as Struct2 } from "effect";
|
|
2
|
+
import { Effect, Option, pipe, Schema, SchemaAST, SchemaIssue, Struct as Struct2 } from "effect";
|
|
3
3
|
import * as S from "effect/Schema";
|
|
4
|
+
/**
|
|
5
|
+
* Build a modified Declaration that accepts struct-matching values during
|
|
6
|
+
* encoding, given the original Declaration and the class's fields.
|
|
7
|
+
*/
|
|
8
|
+
function makeRelaxedDeclaration(ast, fields, cls) {
|
|
9
|
+
const structSchema = Schema.Struct(fields);
|
|
10
|
+
const isStructValue = Schema.is(structSchema);
|
|
11
|
+
return new SchemaAST.Declaration(ast.typeParameters, () => (input, self) => {
|
|
12
|
+
if (input instanceof cls || isStructValue(input)) {
|
|
13
|
+
return Effect.succeed(input);
|
|
14
|
+
}
|
|
15
|
+
return Effect.fail(new SchemaIssue.InvalidType(self, Option.some(input)));
|
|
16
|
+
}, ast.annotations, ast.checks, ast.encoding, ast.context);
|
|
17
|
+
}
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Class — like Schema.Class but with relaxed encoding
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/**
|
|
22
|
+
* Like `Schema.Class`, but the resulting class accepts plain objects matching
|
|
23
|
+
* the struct schema during encoding — not only `instanceof` or type-id
|
|
24
|
+
* checks.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { Schema } from "effect"
|
|
29
|
+
* import { Class } from "./Class.js"
|
|
30
|
+
*
|
|
31
|
+
* class A extends Class<A>("A")({ a: Schema.String }) {}
|
|
32
|
+
*
|
|
33
|
+
* // Construction works as normal:
|
|
34
|
+
* new A({ a: "hello" })
|
|
35
|
+
*
|
|
36
|
+
* // Encoding accepts plain objects:
|
|
37
|
+
* Schema.encodeUnknownSync(A)({ a: "hello" }) // { a: "hello" }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
4
40
|
export const Class = (identifier) => (fields, annotations) => {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
41
|
+
// Build the original Schema.Class
|
|
42
|
+
const Base = S.Class(identifier)(fields, annotations);
|
|
43
|
+
// Get the original ast getter from the base class
|
|
44
|
+
const originalAstDescriptor = Object.getOwnPropertyDescriptor(Base, "ast");
|
|
45
|
+
// Cache per-class to avoid recomputing
|
|
46
|
+
const astCache = new WeakMap();
|
|
47
|
+
return class extends Base {
|
|
48
|
+
static get ast() {
|
|
49
|
+
let cached = astCache.get(this);
|
|
50
|
+
if (cached !== undefined)
|
|
51
|
+
return cached;
|
|
52
|
+
// Call the original getter with `this` bound to the actual user class,
|
|
53
|
+
// so getClassSchema(this) creates a schema that uses `new this(...)`.
|
|
54
|
+
const originalAst = originalAstDescriptor.get.call(this);
|
|
55
|
+
cached = makeRelaxedDeclaration(originalAst, Base.fields, this);
|
|
56
|
+
astCache.set(this, cached);
|
|
57
|
+
return cached;
|
|
9
58
|
}
|
|
10
|
-
// static readonly include = include(fields)
|
|
11
59
|
static pick = (...selection) => pipe(this["fields"], Struct2.pick(selection));
|
|
12
60
|
static omit = (...selection) => pipe(this["fields"], Struct2.omit(selection));
|
|
13
61
|
};
|
|
14
62
|
};
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// TaggedClass — like Schema.TaggedClass but with relaxed encoding
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* Like `Schema.TaggedClass`, but the resulting class accepts plain objects
|
|
68
|
+
* matching the struct schema during encoding.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* import { Schema } from "effect"
|
|
73
|
+
* import { TaggedClass } from "./Class.js"
|
|
74
|
+
*
|
|
75
|
+
* class Circle extends TaggedClass<Circle>()("Circle", {
|
|
76
|
+
* radius: Schema.Number
|
|
77
|
+
* }) {}
|
|
78
|
+
*
|
|
79
|
+
* Schema.encodeUnknownSync(Circle)({ _tag: "Circle", radius: 5 })
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
15
82
|
export const TaggedClass = (identifier) => (tag, fields, annotations) => {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
83
|
+
const Base = S.TaggedClass(identifier)(tag, fields, annotations);
|
|
84
|
+
const originalAstDescriptor = Object.getOwnPropertyDescriptor(Base, "ast");
|
|
85
|
+
const astCache = new WeakMap();
|
|
86
|
+
return class extends Base {
|
|
87
|
+
static get ast() {
|
|
88
|
+
let cached = astCache.get(this);
|
|
89
|
+
if (cached !== undefined)
|
|
90
|
+
return cached;
|
|
91
|
+
const originalAst = originalAstDescriptor.get.call(this);
|
|
92
|
+
cached = makeRelaxedDeclaration(originalAst, Base.fields, this);
|
|
93
|
+
astCache.set(this, cached);
|
|
94
|
+
return cached;
|
|
20
95
|
}
|
|
21
|
-
// static readonly include = include(fields)
|
|
22
96
|
static pick = (...selection) => pipe(this["fields"], Struct2.pick(selection));
|
|
23
97
|
static omit = (...selection) => pipe(this["fields"], Struct2.omit(selection));
|
|
24
98
|
};
|
|
25
99
|
};
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// ExtendedClass — like Class but with extra type parameter for hierarchies
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
26
103
|
export const ExtendedClass = Class;
|
|
27
104
|
export const ExtendedTaggedClass = TaggedClass;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL0NsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUVoRyxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQXdCbEM7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsR0FBMEIsRUFDMUIsTUFBNEIsRUFDNUIsR0FBUTtJQUVSLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUM3QyxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FDOUIsR0FBRyxDQUFDLGNBQWMsRUFDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFjLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQ3BELElBQUksS0FBSyxZQUFZLEdBQUcsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDOUIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzNFLENBQUMsRUFDRCxHQUFHLENBQUMsV0FBVyxFQUNmLEdBQUcsQ0FBQyxNQUFNLEVBQ1YsR0FBRyxDQUFDLFFBQVEsRUFDWixHQUFHLENBQUMsT0FBTyxDQUNaLENBQUE7QUFDSCxDQUFDO0FBRUQsOEVBQThF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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecialJsonSchema — A variant of Schema.toJsonSchemaDocument that deduplicates
|
|
3
|
+
* references sharing the same identifier when they produce identical
|
|
4
|
+
* representations (based on a string fingerprint).
|
|
5
|
+
*
|
|
6
|
+
* Without this, two different AST nodes that have the same identifier and
|
|
7
|
+
* resolve to the same JSON Schema representation can end up as separate $defs
|
|
8
|
+
* entries (e.g. "X" and "X1"). This converter collapses them into one.
|
|
9
|
+
*/
|
|
10
|
+
import { type JsonSchema, type Schema } from "effect";
|
|
11
|
+
/**
|
|
12
|
+
* Converts a schema to a JSON Schema Document (draft-2020-12), with an
|
|
13
|
+
* extra deduplication pass that collapses references sharing the same
|
|
14
|
+
* base identifier when their representations are identical.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { Schema, SchemaGetter, Option, Predicate } from "effect"
|
|
19
|
+
* import { specialJsonSchemaDocument } from "./SpecialJsonSchema.js"
|
|
20
|
+
*
|
|
21
|
+
* const X = Schema.String.annotate({ title: "X", identifier: "X" })
|
|
22
|
+
*
|
|
23
|
+
* const s = Schema.Struct({
|
|
24
|
+
* a: Schema.NullOr(X).pipe(
|
|
25
|
+
* Schema.encodeTo(Schema.optionalKey(X), {
|
|
26
|
+
* decode: SchemaGetter.transformOptional(Option.orElseSome(() => null)),
|
|
27
|
+
* encode: SchemaGetter.transformOptional(Option.filter(Predicate.isNotNull))
|
|
28
|
+
* })
|
|
29
|
+
* ),
|
|
30
|
+
* b: Schema.NullOr(X),
|
|
31
|
+
* c: X
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* // Without dedup: $defs would contain both "X" and "X1" (identical).
|
|
35
|
+
* // With specialJsonSchemaDocument: only "X" is emitted.
|
|
36
|
+
* const doc = specialJsonSchemaDocument(s)
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function specialJsonSchemaDocument(schema: Schema.Top, options?: Schema.ToJsonSchemaOptions): JsonSchema.Document<"draft-2020-12">;
|
|
40
|
+
//# sourceMappingURL=SpecialJsonSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecialJsonSchema.d.ts","sourceRoot":"","sources":["../../src/Schema/SpecialJsonSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,MAAM,EAAwB,MAAM,QAAQ,CAAA;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,CAAC,GAAG,EAClB,OAAO,CAAC,EAAE,MAAM,CAAC,mBAAmB,GACnC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAStC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecialJsonSchema — A variant of Schema.toJsonSchemaDocument that deduplicates
|
|
3
|
+
* references sharing the same identifier when they produce identical
|
|
4
|
+
* representations (based on a string fingerprint).
|
|
5
|
+
*
|
|
6
|
+
* Without this, two different AST nodes that have the same identifier and
|
|
7
|
+
* resolve to the same JSON Schema representation can end up as separate $defs
|
|
8
|
+
* entries (e.g. "X" and "X1"). This converter collapses them into one.
|
|
9
|
+
*/
|
|
10
|
+
import { Formatter, SchemaRepresentation } from "effect";
|
|
11
|
+
/**
|
|
12
|
+
* Converts a schema to a JSON Schema Document (draft-2020-12), with an
|
|
13
|
+
* extra deduplication pass that collapses references sharing the same
|
|
14
|
+
* base identifier when their representations are identical.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { Schema, SchemaGetter, Option, Predicate } from "effect"
|
|
19
|
+
* import { specialJsonSchemaDocument } from "./SpecialJsonSchema.js"
|
|
20
|
+
*
|
|
21
|
+
* const X = Schema.String.annotate({ title: "X", identifier: "X" })
|
|
22
|
+
*
|
|
23
|
+
* const s = Schema.Struct({
|
|
24
|
+
* a: Schema.NullOr(X).pipe(
|
|
25
|
+
* Schema.encodeTo(Schema.optionalKey(X), {
|
|
26
|
+
* decode: SchemaGetter.transformOptional(Option.orElseSome(() => null)),
|
|
27
|
+
* encode: SchemaGetter.transformOptional(Option.filter(Predicate.isNotNull))
|
|
28
|
+
* })
|
|
29
|
+
* ),
|
|
30
|
+
* b: Schema.NullOr(X),
|
|
31
|
+
* c: X
|
|
32
|
+
* })
|
|
33
|
+
*
|
|
34
|
+
* // Without dedup: $defs would contain both "X" and "X1" (identical).
|
|
35
|
+
* // With specialJsonSchemaDocument: only "X" is emitted.
|
|
36
|
+
* const doc = specialJsonSchemaDocument(s)
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function specialJsonSchemaDocument(schema, options) {
|
|
40
|
+
const doc = SchemaRepresentation.fromAST(schema.ast);
|
|
41
|
+
const deduped = deduplicateReferences(doc);
|
|
42
|
+
const jd = SchemaRepresentation.toJsonSchemaDocument(deduped, options);
|
|
43
|
+
return {
|
|
44
|
+
dialect: "draft-2020-12",
|
|
45
|
+
schema: jd.schema,
|
|
46
|
+
definitions: jd.definitions
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Deduplicates references in a Document: when multiple $ref keys share
|
|
51
|
+
* the same base identifier (e.g. "X" and "X1") and their representations
|
|
52
|
+
* are identical (by string fingerprint), the duplicates are collapsed into
|
|
53
|
+
* the first entry found for that identifier.
|
|
54
|
+
*/
|
|
55
|
+
function deduplicateReferences(doc) {
|
|
56
|
+
const refs = doc.references;
|
|
57
|
+
const refKeys = Object.keys(refs);
|
|
58
|
+
if (refKeys.length === 0)
|
|
59
|
+
return doc;
|
|
60
|
+
// Group references by base identifier (strip trailing digits added by gen())
|
|
61
|
+
const identifierGroups = new Map();
|
|
62
|
+
for (const key of refKeys) {
|
|
63
|
+
const base = getBaseIdentifier(key);
|
|
64
|
+
const fingerprint = Formatter.format(refs[key]);
|
|
65
|
+
const group = identifierGroups.get(base);
|
|
66
|
+
if (group === undefined) {
|
|
67
|
+
identifierGroups.set(base, [{ key, fingerprint }]);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
group.push({ key, fingerprint });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Build a mapping from duplicate keys to their canonical key
|
|
74
|
+
const remapping = new Map();
|
|
75
|
+
for (const [, group] of identifierGroups) {
|
|
76
|
+
const seen = new Map(); // fingerprint -> canonical key
|
|
77
|
+
for (const entry of group) {
|
|
78
|
+
const canonical = seen.get(entry.fingerprint);
|
|
79
|
+
if (canonical !== undefined) {
|
|
80
|
+
remapping.set(entry.key, canonical);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
seen.set(entry.fingerprint, entry.key);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (remapping.size === 0)
|
|
88
|
+
return doc;
|
|
89
|
+
// Build new references, excluding duplicates
|
|
90
|
+
const newRefs = {};
|
|
91
|
+
for (const key of refKeys) {
|
|
92
|
+
if (!remapping.has(key)) {
|
|
93
|
+
newRefs[key] = refs[key];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Rewrite $ref pointers throughout the document
|
|
97
|
+
const newRepresentation = rewriteRefs(doc.representation, remapping);
|
|
98
|
+
const rewrittenRefs = {};
|
|
99
|
+
for (const [key, rep] of Object.entries(newRefs)) {
|
|
100
|
+
rewrittenRefs[key] = rewriteRefs(rep, remapping);
|
|
101
|
+
}
|
|
102
|
+
return { representation: newRepresentation, references: rewrittenRefs };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Extracts the base identifier from a reference key by stripping trailing
|
|
106
|
+
* digits appended by the gen() function during fromASTs.
|
|
107
|
+
* E.g. "X1" -> "X", "X" -> "X", "MyType2" -> "MyType"
|
|
108
|
+
*/
|
|
109
|
+
function getBaseIdentifier(key) {
|
|
110
|
+
const match = key.match(/^(.+?)(\d+)$/);
|
|
111
|
+
return match ? match[1] : key;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Recursively rewrites $ref pointers in a Representation tree.
|
|
115
|
+
*/
|
|
116
|
+
function rewriteRefs(rep, remapping) {
|
|
117
|
+
switch (rep._tag) {
|
|
118
|
+
case "Reference": {
|
|
119
|
+
const target = remapping.get(rep.$ref);
|
|
120
|
+
return target !== undefined ? { ...rep, $ref: target } : rep;
|
|
121
|
+
}
|
|
122
|
+
case "Declaration":
|
|
123
|
+
return {
|
|
124
|
+
...rep,
|
|
125
|
+
typeParameters: rep.typeParameters.map((tp) => rewriteRefs(tp, remapping)),
|
|
126
|
+
encodedSchema: rewriteRefs(rep.encodedSchema, remapping)
|
|
127
|
+
};
|
|
128
|
+
case "Suspend":
|
|
129
|
+
return {
|
|
130
|
+
...rep,
|
|
131
|
+
thunk: rewriteRefs(rep.thunk, remapping)
|
|
132
|
+
};
|
|
133
|
+
case "Arrays":
|
|
134
|
+
return {
|
|
135
|
+
...rep,
|
|
136
|
+
elements: rep.elements.map((e) => ({ ...e, type: rewriteRefs(e.type, remapping) })),
|
|
137
|
+
rest: rep.rest.map((r) => rewriteRefs(r, remapping))
|
|
138
|
+
};
|
|
139
|
+
case "Objects":
|
|
140
|
+
return {
|
|
141
|
+
...rep,
|
|
142
|
+
propertySignatures: rep.propertySignatures.map((ps) => ({
|
|
143
|
+
...ps,
|
|
144
|
+
type: rewriteRefs(ps.type, remapping)
|
|
145
|
+
})),
|
|
146
|
+
indexSignatures: rep.indexSignatures.map((is) => ({
|
|
147
|
+
...is,
|
|
148
|
+
parameter: rewriteRefs(is.parameter, remapping),
|
|
149
|
+
type: rewriteRefs(is.type, remapping)
|
|
150
|
+
})),
|
|
151
|
+
checks: rewriteChecks(rep.checks, remapping)
|
|
152
|
+
};
|
|
153
|
+
case "Union":
|
|
154
|
+
return {
|
|
155
|
+
...rep,
|
|
156
|
+
types: rep.types.map((t) => rewriteRefs(t, remapping))
|
|
157
|
+
};
|
|
158
|
+
case "TemplateLiteral":
|
|
159
|
+
return {
|
|
160
|
+
...rep,
|
|
161
|
+
parts: rep.parts.map((p) => rewriteRefs(p, remapping))
|
|
162
|
+
};
|
|
163
|
+
case "String": {
|
|
164
|
+
if (rep.contentSchema !== undefined) {
|
|
165
|
+
return {
|
|
166
|
+
...rep,
|
|
167
|
+
contentSchema: rewriteRefs(rep.contentSchema, remapping)
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return rep;
|
|
171
|
+
}
|
|
172
|
+
default:
|
|
173
|
+
// Leaf nodes: Null, Undefined, Void, Never, Unknown, Any, Boolean,
|
|
174
|
+
// Symbol, Number, BigInt, Literal, UniqueSymbol, ObjectKeyword, Enum
|
|
175
|
+
return rep;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
179
|
+
function rewriteChecks(checks, remapping) {
|
|
180
|
+
return checks.map((c) => {
|
|
181
|
+
switch (c._tag) {
|
|
182
|
+
case "Filter": {
|
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
184
|
+
const meta = c.meta;
|
|
185
|
+
if (meta && meta._tag === "isPropertyNames" && meta.propertyNames) {
|
|
186
|
+
return {
|
|
187
|
+
...c,
|
|
188
|
+
meta: { ...meta, propertyNames: rewriteRefs(meta.propertyNames, remapping) }
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
return c;
|
|
192
|
+
}
|
|
193
|
+
case "FilterGroup":
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
195
|
+
return { ...c, checks: rewriteChecks(c.checks, remapping) };
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BlY2lhbEpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL1NwZWNpYWxKc29uU2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBZ0Msb0JBQW9CLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFdEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsTUFBa0IsRUFDbEIsT0FBb0M7SUFFcEMsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwRCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxQyxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdEUsT0FBTztRQUNMLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTTtRQUNqQixXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVc7S0FDNUIsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMscUJBQXFCLENBQzVCLEdBQWtDO0lBRWxDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUE7SUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFBO0lBRXBDLDZFQUE2RTtJQUM3RSxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFBO0lBQ3ZGLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdB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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecialOpenApi — Deduplicates `components/schemas` entries in an OpenAPI spec.
|
|
3
|
+
*
|
|
4
|
+
* When `OpenApi.fromApi` generates the spec, different AST nodes sharing the
|
|
5
|
+
* same identifier can produce duplicate entries (e.g. "X" and "X1") in
|
|
6
|
+
* `components.schemas`. This module provides a transform function that
|
|
7
|
+
* collapses those duplicates and rewrites all `$ref` pointers accordingly.
|
|
8
|
+
*
|
|
9
|
+
* Usage with the OpenApi `Transform` annotation:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { OpenApi } from "effect/unstable"
|
|
13
|
+
* import { deduplicateOpenApiSchemas } from "./SpecialOpenApi.js"
|
|
14
|
+
*
|
|
15
|
+
* const api = HttpApi.make("myApi")
|
|
16
|
+
* .pipe(HttpApi.annotateContext(OpenApi.annotations({ transform: deduplicateOpenApiSchemas })))
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Deduplicates `components.schemas` entries in an OpenAPI spec.
|
|
21
|
+
*
|
|
22
|
+
* Entries sharing the same base identifier (e.g. "X" and "X1") whose JSON
|
|
23
|
+
* representations are identical are collapsed into a single canonical entry,
|
|
24
|
+
* and all `$ref` pointers throughout the spec are rewritten to point to
|
|
25
|
+
* the canonical key.
|
|
26
|
+
*
|
|
27
|
+
* Designed to be used as the `transform` option in `OpenApi.annotations`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function deduplicateOpenApiSchemas(spec: Record<string, any>): Record<string, any>;
|
|
30
|
+
//# sourceMappingURL=SpecialOpenApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecialOpenApi.d.ts","sourceRoot":"","sources":["../../src/Schema/SpecialOpenApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAqDrB"}
|