effect-app 4.0.0-beta.133 → 4.0.0-beta.135

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,20 @@
1
1
  # @effect-app/prelude
2
2
 
3
+ ## 4.0.0-beta.135
4
+
5
+ ### Patch Changes
6
+
7
+ - c7bbc41: fix - class should check type side
8
+
9
+ ## 4.0.0-beta.134
10
+
11
+ ### Patch Changes
12
+
13
+ - 9d3495e: Preserve field-level schema decode errors for relaxed Class and TaggedClass declarations so decode failures report nested constraints (for example min-length violations) instead of only a generic class-type mismatch.
14
+ - f353d48: Rename the Class/TaggedClass relaxed declaration option to `strict` (default `false`) and apply it to `Class`, `TaggedClass`, `ExtendedClass`, and `ExtendedTaggedClass`.
15
+
16
+ When `strict: true`, class decoding keeps strict class-level declaration behavior; by default, decoding remains relaxed and preserves field-level schema errors.
17
+
3
18
  ## 4.0.0-beta.133
4
19
 
5
20
  ### Patch Changes
@@ -15,6 +15,9 @@ type HasFields<Fields extends S.Struct.Fields> = {
15
15
  } | {
16
16
  readonly from: HasFields<Fields>;
17
17
  };
18
+ type ClassOptions = {
19
+ readonly strict?: boolean;
20
+ };
18
21
  export type Class<Self, S extends S.Top & {
19
22
  readonly fields: S.Struct.Fields;
20
23
  }, Inherited> = EnhancedClass<Self, S, Inherited>;
@@ -37,7 +40,7 @@ export type Class<Self, S extends S.Top & {
37
40
  * Schema.encodeUnknownSync(A)({ a: "hello" }) // { a: "hello" }
38
41
  * ```
39
42
  */
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>, {}>;
43
+ export declare const Class: <Self = never>(identifier: string) => <Fields extends S.Struct.Fields>(fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>, options?: ClassOptions) => [Self] extends [never] ? MissingSelfGeneric<"Class"> : EnhancedClass<Self, S.Struct<Fields>, {}>;
41
44
  /**
42
45
  * Like `Schema.TaggedClass`, but the resulting class accepts plain objects
43
46
  * matching the struct schema during encoding.
@@ -54,17 +57,17 @@ export declare const Class: <Self = never>(identifier: string) => <Fields extend
54
57
  * Schema.encodeUnknownSync(Circle)({ _tag: "Circle", radius: 5 })
55
58
  * ```
56
59
  */
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<{
60
+ 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>, options?: ClassOptions) => [Self] extends [never] ? MissingSelfGeneric<"TaggedClass"> : EnhancedClass<Self, S.Struct<{
58
61
  readonly _tag: S.tag<Tag>;
59
62
  } & Fields>, {}>;
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>, {}>;
63
+ export declare const ExtendedClass: <Self, _SelfFrom>(identifier: string) => <Fields extends S.Struct.Fields>(fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>, options?: ClassOptions) => EnhancedClass<Self, S.Struct<Fields>, {}>;
61
64
  export interface EnhancedTaggedClass<Self, Tag extends string, Fields extends S.Struct.Fields, SelfFrom> extends EnhancedClass<Self, S.Struct<Fields> & {
62
65
  readonly Encoded: SelfFrom;
63
66
  }, {}> {
64
67
  readonly _tag: Tag;
65
68
  }
66
- export declare const ExtendedTaggedClass: <Self, SelfFrom>(identifier?: string) => <Tag extends string, Fields extends S.Struct.Fields>(tag: Tag, fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>) => EnhancedTaggedClass<Self, Tag, {
69
+ export declare const ExtendedTaggedClass: <Self, SelfFrom>(identifier?: string) => <Tag extends string, Fields extends S.Struct.Fields>(tag: Tag, fieldsOr: Fields | HasFields<Fields>, annotations?: ClassAnnotations<Self>, options?: ClassOptions) => EnhancedTaggedClass<Self, Tag, {
67
70
  readonly _tag: S.tag<Tag>;
68
71
  } & Fields, SelfFrom>;
69
72
  export {};
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY2hlbWEvQ2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUE7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd4QyxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFN0UsTUFBTSxXQUFXLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUc7SUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO0NBQUUsRUFBRSxTQUFTLENBQzFHLFNBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztJQUV6Qzs7T0FFRztJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sVUFBVSxDQUFDLEtBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFBO0NBQ2xFO0FBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLFNBQVMsTUFBTSxFQUFFLE1BQU0sU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUN0RSx1REFBdUQsS0FBSyxZQUFZLE1BQU0sWUFBWSxDQUFBO0FBRTVGLEtBQUssU0FBUyxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSTtJQUMvQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtDQUN4QixHQUFHO0lBQ0YsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDakMsQ0FBQTtBQUVELE1BQU0sTUFBTSxLQUFLLENBQUMs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
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3MuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TY2hlbWEvQ2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxLQUFLLENBQUMsTUFBTSxlQUFlLENBQUE7QUFFbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd4QyxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFFN0UsTUFBTSxXQUFXLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUc7SUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO0NBQUUsRUFBRSxTQUFTLENBQzFHLFNBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQztJQUV6Qzs7T0FFRztJQUNILFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sVUFBVSxDQUFDLEtBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFBO0NBQ2xFO0FBQ0QsS0FBSyxrQkFBa0IsQ0FBQyxLQUFLLFNBQVMsTUFBTSxFQUFFLE1BQU0sU0FBUyxNQUFNLEdBQUcsRUFBRSxJQUN0RSx1REFBdUQsS0FBSyxZQUFZLE1BQU0sWUFBWSxDQUFBO0FBRTVGLEtBQUssU0FBUyxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSTtJQUMvQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQTtDQUN4QixHQUFHO0lBQ0YsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDakMsQ0FBQTtBQUVELEtBQUssWUFBWSxHQUFHO0lBQ2xCLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUE7Q0FDMUIsQ0FBQTtBQUVELE1BQU0sTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHO0lBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQTtDQUFFLEVBQUUsU0FBUyxJQUFJLGFBQWEsQ0FDeEcsSUFBSSxFQUNKLENBQUMsRUFDRCxTQUFTLENBQ1YsQ0FBQTtBQXdDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsZUFBTyxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFDdkYsUUFBUSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQ3BDLFdBQVcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUNwQyxPQUFPLENBQUMsRUFBRSxZQUFZLEtBQ25CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FDckQsYUFBYSxDQUNiLElBQUksRUFDSixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNoQixFQUFFLENBbUNILENBQUE7QUFNSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxlQUFPLE1BQU0sV0FBVyxFQUFFLENBQUMsSUFBSSxHQUFHLEtBQUssRUFDckMsVUFBVSxDQUFDLEVBQUUsTUFBTSxLQUNoQixDQUFDLEdBQUcsU0FBUyxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUN0RCxHQUFHLEVBQUUsR0FBRyxFQUNSLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxXQUFXLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFDcEMsT0FBTyxDQUFDLEVBQUUsWUFBWSxLQUNuQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEdBQzNELGFBQWEsQ0FDYixJQUFJLEVBQ0osQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtDQUFFLEdBQUcsTUFBTSxDQUFDLEVBQ2hELEVBQUUsQ0E2QkgsQ0FBQTtBQU1ILGVBQU8sTUFBTSxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xHLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxXQUFXLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFDcEMsT0FBTyxDQUFDLEVBQUUsWUFBWSxLQUNuQixhQUFhLENBQ2hCLElBQUksRUFDSixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUNoQixFQUFFLENBQ1ksQ0FBQTtBQU1oQixNQUFNLFdBQVcsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FDckcsU0FDRSxhQUFhLENBQ1gsSUFBSSxFQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUc7SUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQTtDQUFFLEVBQ2pELEVBQUUsQ0FDSDtJQUVILFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFBO0NBQ25CO0FBRUQsZUFBTyxNQUFNLG1CQUFtQixFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFDL0MsVUFBVSxDQUFDLEVBQUUsTUFBTSxLQUNoQixDQUFDLEdBQUcsU0FBUyxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUN0RCxHQUFHLEVBQUUsR0FBRyxFQUNSLFFBQVEsRUFBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUNwQyxXQUFXLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFDcEMsT0FBTyxDQUFDLEVBQUUsWUFBWSxLQUNuQixtQkFBbUIsQ0FDdEIsSUFBSSxFQUNKLEdBQUcsRUFDSDtJQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtDQUFFLEdBQUcsTUFBTSxFQUN0QyxRQUFRLENBQ1ksQ0FBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../src/Schema/Class.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../src/Schema/Class.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Effect, Option, Schema, SchemaAST, SchemaIssue } from "effect";
3
3
  import * as S from "effect/Schema";
4
+ import * as SchemaParser from "effect/SchemaParser";
4
5
  import { copyOrigin } from "../utils.js";
5
6
  import { concurrencyUnbounded } from "./ext.js";
6
7
  /**
@@ -9,16 +10,19 @@ import { concurrencyUnbounded } from "./ext.js";
9
10
  */
10
11
  function makeRelaxedDeclaration(ast, fields, cls) {
11
12
  const structSchema = Schema.Struct(fields);
12
- const isStructValue = Schema.is(structSchema);
13
+ const decodeStruct = SchemaParser.decodeUnknownEffect(S.toType(structSchema));
13
14
  const existingParseOptions = ast.annotations?.["parseOptions"];
14
15
  const annotations = {
15
16
  ...ast.annotations,
16
17
  parseOptions: { ...existingParseOptions, concurrency: "unbounded" }
17
18
  };
18
- return new SchemaAST.Declaration(ast.typeParameters, () => (input, self) => {
19
- if (input instanceof cls || isStructValue(input)) {
19
+ return new SchemaAST.Declaration(ast.typeParameters, () => (input, self, options) => {
20
+ if (input instanceof cls) {
20
21
  return Effect.succeed(input);
21
22
  }
23
+ if (input !== null && typeof input === "object") {
24
+ return decodeStruct(input, options);
25
+ }
22
26
  return Effect.fail(new SchemaIssue.InvalidType(self, Option.some(input)));
23
27
  }, annotations, ast.checks, ast.encoding, ast.context);
24
28
  }
@@ -44,7 +48,8 @@ function makeRelaxedDeclaration(ast, fields, cls) {
44
48
  * Schema.encodeUnknownSync(A)({ a: "hello" }) // { a: "hello" }
45
49
  * ```
46
50
  */
47
- export const Class = (identifier) => (fields, annotations) => {
51
+ export const Class = (identifier) => (fields, annotations, options) => {
52
+ const relaxed = !(options?.strict ?? false);
48
53
  // Build the original Schema.Class
49
54
  const Base = S.Class(identifier)(fields, annotations);
50
55
  // Get the original ast getter from the base class
@@ -68,7 +73,7 @@ export const Class = (identifier) => (fields, annotations) => {
68
73
  // Call the original getter with `this` bound to the actual user class,
69
74
  // so getClassSchema(this) creates a schema that uses `new this(...)`.
70
75
  const originalAst = originalAstDescriptor.get.call(this);
71
- cached = makeRelaxedDeclaration(originalAst, Base.fields, this);
76
+ cached = relaxed ? makeRelaxedDeclaration(originalAst, Base.fields, this) : originalAst;
72
77
  astCache.set(this, cached);
73
78
  return cached;
74
79
  }
@@ -96,7 +101,8 @@ export const Class = (identifier) => (fields, annotations) => {
96
101
  * Schema.encodeUnknownSync(Circle)({ _tag: "Circle", radius: 5 })
97
102
  * ```
98
103
  */
99
- export const TaggedClass = (identifier) => (tag, fields, annotations) => {
104
+ export const TaggedClass = (identifier) => (tag, fields, annotations, options) => {
105
+ const relaxed = !(options?.strict ?? false);
100
106
  const Base = S.TaggedClass(identifier)(tag, fields, annotations);
101
107
  const originalAstDescriptor = Object.getOwnPropertyDescriptor(Base, "ast");
102
108
  const astCache = new WeakMap();
@@ -115,7 +121,7 @@ export const TaggedClass = (identifier) => (tag, fields, annotations) => {
115
121
  if (cached !== undefined)
116
122
  return cached;
117
123
  const originalAst = originalAstDescriptor.get.call(this);
118
- cached = makeRelaxedDeclaration(originalAst, Base.fields, this);
124
+ cached = relaxed ? makeRelaxedDeclaration(originalAst, Base.fields, this) : originalAst;
119
125
  astCache.set(this, cached);
120
126
  return cached;
121
127
  }
@@ -129,4 +135,4 @@ export const TaggedClass = (identifier) => (tag, fields, annotations) => {
129
135
  // ---------------------------------------------------------------------------
130
136
  export const ExtendedClass = Class;
131
137
  export const ExtendedTaggedClass = TaggedClass;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL0NsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN2RSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQTJCL0M7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDN0IsR0FBMEIsRUFDMUIsTUFBNEIsRUFDNUIsR0FBUTtJQUVSLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUM3QyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxjQUFjLENBQXVDLENBQUE7SUFDcEcsTUFBTSxXQUFXLEdBQUc7UUFDbEIsR0FBRyxHQUFHLENBQUMsV0FBVztRQUNsQixZQUFZLEVBQUUsRUFBRSxHQUFHLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxXQUFvQixFQUFFO0tBQzdFLENBQUE7SUFDRCxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FDOUIsR0FBRyxDQUFDLGNBQWMsRUFDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFjLEVBQUUsSUFBMkIsRUFBRSxFQUFFO1FBQ3BELElBQUksS0FBSyxZQUFZLEdBQUcsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDOUIsQ0FB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
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvU2NoZW1hL0NsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN2RSxPQUFPLEtBQUssQ0FBQyxNQUFNLGVBQWUsQ0FBQTtBQUNsQyxPQUFPLEtBQUssWUFBWSxNQUFNLHFCQUFxQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBK0IvQzs7O0dBR0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixHQUEwQixFQUMxQixNQUE0QixFQUM1QixHQUFRO0lBRVIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO0lBQzdFLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsQ0FBdUMsQ0FBQTtJQUNwRyxNQUFNLFdBQVcsR0FBRztRQUNsQixHQUFHLEdBQUcsQ0FBQyxXQUFXO1FBQ2xCLFlBQVksRUFBRSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFdBQW9CLEVBQUU7S0FDN0UsQ0FBQTtJQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsV0FBVyxDQUM5QixHQUFHLENBQUMsY0FBYyxFQUNsQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQWMsRUFBRSxJQUEyQixFQUFFLE9BQStCLEVBQUUsRUFBRTtRQUNyRixJQUFJLEtBQUssWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN6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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-app",
3
- "version": "4.0.0-beta.133",
3
+ "version": "4.0.0-beta.135",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { Effect, Option, Schema, SchemaAST, SchemaIssue } from "effect"
3
3
  import * as S from "effect/Schema"
4
+ import * as SchemaParser from "effect/SchemaParser"
4
5
  import { copyOrigin } from "../utils.js"
5
6
  import { concurrencyUnbounded } from "./ext.js"
6
7
 
@@ -23,6 +24,10 @@ type HasFields<Fields extends S.Struct.Fields> = {
23
24
  readonly from: HasFields<Fields>
24
25
  }
25
26
 
27
+ type ClassOptions = {
28
+ readonly strict?: boolean
29
+ }
30
+
26
31
  export type Class<Self, S extends S.Top & { readonly fields: S.Struct.Fields }, Inherited> = EnhancedClass<
27
32
  Self,
28
33
  S,
@@ -39,7 +44,7 @@ function makeRelaxedDeclaration(
39
44
  cls: any
40
45
  ): SchemaAST.Declaration {
41
46
  const structSchema = Schema.Struct(fields)
42
- const isStructValue = Schema.is(structSchema)
47
+ const decodeStruct = SchemaParser.decodeUnknownEffect(S.toType(structSchema))
43
48
  const existingParseOptions = ast.annotations?.["parseOptions"] as SchemaAST.ParseOptions | undefined
44
49
  const annotations = {
45
50
  ...ast.annotations,
@@ -47,10 +52,13 @@ function makeRelaxedDeclaration(
47
52
  }
48
53
  return new SchemaAST.Declaration(
49
54
  ast.typeParameters,
50
- () => (input: unknown, self: SchemaAST.Declaration) => {
51
- if (input instanceof cls || isStructValue(input)) {
55
+ () => (input: unknown, self: SchemaAST.Declaration, options: SchemaAST.ParseOptions) => {
56
+ if (input instanceof cls) {
52
57
  return Effect.succeed(input)
53
58
  }
59
+ if (input !== null && typeof input === "object") {
60
+ return decodeStruct(input, options)
61
+ }
54
62
  return Effect.fail(new SchemaIssue.InvalidType(self, Option.some(input)))
55
63
  },
56
64
  annotations,
@@ -85,13 +93,15 @@ function makeRelaxedDeclaration(
85
93
  */
86
94
  export const Class: <Self = never>(identifier: string) => <Fields extends S.Struct.Fields>(
87
95
  fieldsOr: Fields | HasFields<Fields>,
88
- annotations?: ClassAnnotations<Self>
96
+ annotations?: ClassAnnotations<Self>,
97
+ options?: ClassOptions
89
98
  ) => [Self] extends [never] ? MissingSelfGeneric<"Class">
90
99
  : EnhancedClass<
91
100
  Self,
92
101
  S.Struct<Fields>,
93
102
  {}
94
- > = (identifier) => (fields, annotations) => {
103
+ > = (identifier) => (fields, annotations, options) => {
104
+ const relaxed = !(options?.strict ?? false)
95
105
  // Build the original Schema.Class
96
106
  const Base = (S.Class as any)(identifier)(fields, annotations)
97
107
  // Get the original ast getter from the base class
@@ -116,7 +126,7 @@ export const Class: <Self = never>(identifier: string) => <Fields extends S.Stru
116
126
  // Call the original getter with `this` bound to the actual user class,
117
127
  // so getClassSchema(this) creates a schema that uses `new this(...)`.
118
128
  const originalAst = originalAstDescriptor.get!.call(this) as SchemaAST.Declaration
119
- cached = makeRelaxedDeclaration(originalAst, Base.fields, this)
129
+ cached = relaxed ? makeRelaxedDeclaration(originalAst, Base.fields, this) : originalAst
120
130
  astCache.set(this, cached)
121
131
  return cached
122
132
  }
@@ -151,13 +161,15 @@ export const TaggedClass: <Self = never>(
151
161
  ) => <Tag extends string, Fields extends S.Struct.Fields>(
152
162
  tag: Tag,
153
163
  fieldsOr: Fields | HasFields<Fields>,
154
- annotations?: ClassAnnotations<Self>
164
+ annotations?: ClassAnnotations<Self>,
165
+ options?: ClassOptions
155
166
  ) => [Self] extends [never] ? MissingSelfGeneric<"TaggedClass">
156
167
  : EnhancedClass<
157
168
  Self,
158
169
  S.Struct<{ readonly _tag: S.tag<Tag> } & Fields>,
159
170
  {}
160
- > = (identifier) => (tag, fields, annotations) => {
171
+ > = (identifier) => (tag, fields, annotations, options) => {
172
+ const relaxed = !(options?.strict ?? false)
161
173
  const Base = (S.TaggedClass as any)(identifier)(tag, fields, annotations)
162
174
  const originalAstDescriptor = Object.getOwnPropertyDescriptor(Base, "ast")!
163
175
  const astCache = new WeakMap<any, SchemaAST.Declaration>()
@@ -176,7 +188,7 @@ export const TaggedClass: <Self = never>(
176
188
  let cached = astCache.get(this)
177
189
  if (cached !== undefined) return cached
178
190
  const originalAst = originalAstDescriptor.get!.call(this) as SchemaAST.Declaration
179
- cached = makeRelaxedDeclaration(originalAst, Base.fields, this)
191
+ cached = relaxed ? makeRelaxedDeclaration(originalAst, Base.fields, this) : originalAst
180
192
  astCache.set(this, cached)
181
193
  return cached
182
194
  }
@@ -192,7 +204,8 @@ export const TaggedClass: <Self = never>(
192
204
 
193
205
  export const ExtendedClass: <Self, _SelfFrom>(identifier: string) => <Fields extends S.Struct.Fields>(
194
206
  fieldsOr: Fields | HasFields<Fields>,
195
- annotations?: ClassAnnotations<Self>
207
+ annotations?: ClassAnnotations<Self>,
208
+ options?: ClassOptions
196
209
  ) => EnhancedClass<
197
210
  Self,
198
211
  S.Struct<Fields>,
@@ -219,7 +232,8 @@ export const ExtendedTaggedClass: <Self, SelfFrom>(
219
232
  ) => <Tag extends string, Fields extends S.Struct.Fields>(
220
233
  tag: Tag,
221
234
  fieldsOr: Fields | HasFields<Fields>,
222
- annotations?: ClassAnnotations<Self>
235
+ annotations?: ClassAnnotations<Self>,
236
+ options?: ClassOptions
223
237
  ) => EnhancedTaggedClass<
224
238
  Self,
225
239
  Tag,
@@ -1,7 +1,7 @@
1
1
  import { Option, Predicate, Schema, SchemaGetter } from "effect"
2
2
  import { InvalidStateError, LoginError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, ServiceUnavailableError, UnauthorizedError, ValidationError } from "effect-app/client/errors"
3
3
  import * as AppSchema from "effect-app/Schema"
4
- import { Class, TaggedClass } from "effect-app/Schema/Class"
4
+ import { Class, ExtendedClass, ExtendedTaggedClass, TaggedClass } from "effect-app/Schema/Class"
5
5
  import { flattenNestedAnyOf, flattenSimpleAllOf, specialJsonSchemaDocument } from "effect-app/Schema/SpecialJsonSchema"
6
6
  import { deduplicateOpenApiSchemas } from "effect-app/Schema/SpecialOpenApi"
7
7
  import * as S from "effect/Schema"
@@ -131,6 +131,21 @@ describe("TaggedClass constructor", () => {
131
131
  expect((decoded as Circle)._tag).toBe("Circle")
132
132
  })
133
133
 
134
+ it("S.decodeSync(S.toType(X)) should report n length schema error", () => {
135
+ class X extends TaggedClass<X>()("X", { n: S.String.pipe(S.check(S.isMinLength(3))) }) {}
136
+
137
+ try {
138
+ S.decodeSync(S.toType(X))({ _tag: "X", n: "a" /* not length 3 */ })
139
+ expect.fail("expected decode to fail with a SchemaError")
140
+ } catch (error) {
141
+ expect(error).toBeInstanceOf(Error)
142
+ if (error instanceof Error) {
143
+ expect(error.message).toContain("n")
144
+ expect(error.message.toLowerCase()).toContain("length")
145
+ }
146
+ }
147
+ })
148
+
134
149
  it("exposes fields, identifier", () => {
135
150
  class Circle extends TaggedClass<Circle>()("Circle", { radius: S.Number }) {}
136
151
 
@@ -140,6 +155,38 @@ describe("TaggedClass constructor", () => {
140
155
  })
141
156
  })
142
157
 
158
+ describe("strict declaration option", () => {
159
+ it("Class strict: true keeps class-level expected errors", () => {
160
+ class X extends Class<X>("X")({ n: S.String.pipe(S.check(S.isMinLength(3))) }, undefined, { strict: true }) {}
161
+
162
+ expect(() => S.decodeSync(S.toType(X))({ n: "a" })).toThrow("Expected X")
163
+ })
164
+
165
+ it("TaggedClass strict: true keeps class-level expected errors", () => {
166
+ class X extends TaggedClass<X>()("X", { n: S.String.pipe(S.check(S.isMinLength(3))) }, undefined, {
167
+ strict: true
168
+ }) {}
169
+
170
+ expect(() => S.decodeSync(S.toType(X))({ _tag: "X", n: "a" })).toThrow("Expected X")
171
+ })
172
+
173
+ it("ExtendedClass strict: true keeps class-level expected errors", () => {
174
+ class X extends ExtendedClass<X, never>("X")({ n: S.String.pipe(S.check(S.isMinLength(3))) }, undefined, {
175
+ strict: true
176
+ }) {}
177
+
178
+ expect(() => S.decodeSync(S.toType(X))({ n: "a" })).toThrow("Expected X")
179
+ })
180
+
181
+ it("ExtendedTaggedClass strict: true keeps class-level expected errors", () => {
182
+ class X extends ExtendedTaggedClass<X, never>()("X", { n: S.String.pipe(S.check(S.isMinLength(3))) }, undefined, {
183
+ strict: true
184
+ }) {}
185
+
186
+ expect(() => S.decodeSync(S.toType(X))({ _tag: "X", n: "a" })).toThrow("Expected X")
187
+ })
188
+ })
189
+
143
190
  describe("Class.copy", () => {
144
191
  it("creates a new instance with updated fields", () => {
145
192
  class A extends Class<A>("A")({ a: S.String, b: S.Number }) {}