@typeonce/ritmo-math 0.12.0 → 0.14.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +3 -3
  3. package/dist/Aabb.d.ts +15 -15
  4. package/dist/Aabb.d.ts.map +1 -1
  5. package/dist/Aabb.js +13 -5
  6. package/dist/Aabb.js.map +1 -1
  7. package/dist/Collide2.d.ts +48 -14
  8. package/dist/Collide2.d.ts.map +1 -1
  9. package/dist/Collide2.js +140 -17
  10. package/dist/Collide2.js.map +1 -1
  11. package/dist/Random.d.ts +16 -6
  12. package/dist/Random.d.ts.map +1 -1
  13. package/dist/Random.js +13 -3
  14. package/dist/Random.js.map +1 -1
  15. package/dist/Scalar.d.ts +26 -7
  16. package/dist/Scalar.d.ts.map +1 -1
  17. package/dist/Scalar.js +6 -3
  18. package/dist/Scalar.js.map +1 -1
  19. package/dist/Segment2.d.ts +56 -0
  20. package/dist/Segment2.d.ts.map +1 -0
  21. package/dist/Segment2.js +32 -0
  22. package/dist/Segment2.js.map +1 -0
  23. package/dist/Size2.d.ts +15 -15
  24. package/dist/Size2.d.ts.map +1 -1
  25. package/dist/Size2.js +13 -5
  26. package/dist/Size2.js.map +1 -1
  27. package/dist/Vector2.d.ts +15 -15
  28. package/dist/Vector2.d.ts.map +1 -1
  29. package/dist/Vector2.js +13 -5
  30. package/dist/Vector2.js.map +1 -1
  31. package/dist/index.d.ts +6 -4
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +6 -4
  34. package/dist/index.js.map +1 -1
  35. package/dist/internal/aabb.d.ts +9 -2
  36. package/dist/internal/aabb.d.ts.map +1 -1
  37. package/dist/internal/aabb.js +3 -1
  38. package/dist/internal/aabb.js.map +1 -1
  39. package/dist/internal/codec.d.ts +9 -0
  40. package/dist/internal/codec.d.ts.map +1 -0
  41. package/dist/internal/codec.js +16 -0
  42. package/dist/internal/codec.js.map +1 -0
  43. package/dist/internal/scalar.d.ts +3 -4
  44. package/dist/internal/scalar.d.ts.map +1 -1
  45. package/dist/internal/scalar.js +19 -12
  46. package/dist/internal/scalar.js.map +1 -1
  47. package/dist/internal/size2.d.ts +9 -2
  48. package/dist/internal/size2.d.ts.map +1 -1
  49. package/dist/internal/size2.js +3 -1
  50. package/dist/internal/size2.js.map +1 -1
  51. package/dist/internal/vector2.d.ts +9 -2
  52. package/dist/internal/vector2.d.ts.map +1 -1
  53. package/dist/internal/vector2.js +3 -1
  54. package/dist/internal/vector2.js.map +1 -1
  55. package/package.json +2 -2
  56. package/src/Aabb.ts +15 -16
  57. package/src/Collide2.ts +153 -22
  58. package/src/Random.ts +21 -7
  59. package/src/Scalar.ts +27 -7
  60. package/src/Segment2.ts +71 -0
  61. package/src/Size2.ts +15 -16
  62. package/src/Vector2.ts +15 -16
  63. package/src/index.ts +6 -4
  64. package/src/internal/aabb.ts +8 -2
  65. package/src/internal/codec.ts +21 -0
  66. package/src/internal/scalar.ts +24 -13
  67. package/src/internal/size2.ts +8 -2
  68. package/src/internal/vector2.ts +8 -2
package/dist/index.js CHANGED
@@ -2,12 +2,13 @@
2
2
  * Math for game code.
3
3
  *
4
4
  * Validated values (`Scalar`, `Vector2`, `Size2`, `Aabb`) expose
5
- * Result-returning constructors, so they plug into
6
- * `Descriptor.ConstructedComponent(...)` / `ConstructedResource(...)` and are
7
- * validated once at the boundary. `InputAxis` normalizes directional input.
5
+ * Result-returning constructors, a guard (`is`), and one `codec` each, so
6
+ * they plug into `Descriptor.ConstructedComponent(Vector2.codec)` /
7
+ * `ConstructedResource(Random.codec)` and are validated once at the boundary. `InputAxis` normalizes directional input.
8
8
  *
9
9
  * Hot-path helpers work on plain numbers every frame: `Vec2` arithmetic,
10
- * `Box2` edges, `Collide2` swept circle collision, a `SpatialGrid` broad
10
+ * `Box2` edges, `Segment2` walls at any angle, `Collide2` swept circle
11
+ * collision against both, a `SpatialGrid` broad
11
12
  * phase, a `FlowField` for finding the way around walls, and a deterministic
12
13
  * `Random` whose state is one integer.
13
14
  *
@@ -23,6 +24,7 @@ export * as InputAxis from "./InputAxis.js";
23
24
  export * as Ops from "./Ops.js";
24
25
  export * as Random from "./Random.js";
25
26
  export * as Scalar from "./Scalar.js";
27
+ export * as Segment2 from "./Segment2.js";
26
28
  export * as Size2 from "./Size2.js";
27
29
  export * as SpatialGrid from "./SpatialGrid.js";
28
30
  export * as Vec2 from "./Vec2.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
@@ -5,7 +5,7 @@ import type * as Aabb from "../Aabb.ts";
5
5
  import type * as Scalar from "../Scalar.ts";
6
6
  export declare const result: (raw: Aabb.Raw) => Result.Result<Aabb.Aabb, Aabb.Error>;
7
7
  export declare const option: (raw: Aabb.Raw) => Aabb.Aabb | null;
8
- export declare const is: (raw: Aabb.Raw) => raw is Aabb.Raw & Aabb.Aabb;
8
+ export declare const is: (raw: unknown) => raw is Aabb.Aabb;
9
9
  export declare const position: (aabb: Aabb.Aabb) => Vector2.Vector2;
10
10
  export declare const size: (aabb: Aabb.Aabb) => Size2.Size2;
11
11
  export declare const left: (aabb: Aabb.Aabb) => Scalar.Finite;
@@ -16,5 +16,12 @@ export declare const intersects: (first: Aabb.Aabb, second: Aabb.Aabb) => boolea
16
16
  export declare const overlapsHorizontally: (first: Aabb.Aabb, second: Aabb.Aabb) => boolean;
17
17
  export declare const overlapsVertically: (first: Aabb.Aabb, second: Aabb.Aabb) => boolean;
18
18
  export declare const translate: (aabb: Aabb.Aabb, delta: Vector2.Vector2) => Aabb.Aabb;
19
- export declare const decode: (raw: unknown) => Result.Result<Aabb.Aabb, Aabb.Error | Aabb.DecodeError>;
19
+ /** Untrusted input without the raw shape. */
20
+ type Malformed = {
21
+ readonly tag: "Aabb/Malformed";
22
+ readonly input: unknown;
23
+ };
24
+ export declare const decode: (raw: unknown) => Result.Result<Aabb.Aabb, Aabb.Error | Malformed>;
25
+ export declare const codec: import("@typeonce/ritmo/Descriptor").StandardSchema<Aabb.Raw, Aabb.Aabb>;
26
+ export {};
20
27
  //# sourceMappingURL=aabb.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aabb.d.ts","sourceRoot":"","sources":["../../src/internal/aabb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAO3C,eAAO,MAAM,MAAM,QAAS,IAAI,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAoBzE,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,IAAI,CAAC,GAAG,KAAG,IAAI,CAAC,IAAI,GAAG,IAGlD,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,IAAI,CAAC,GAAG,KAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAsB,CAAA;AAEhF,eAAO,MAAM,QAAQ,SAAU,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,OAAwB,CAAA;AAC3E,eAAO,MAAM,IAAI,SAAU,IAAI,CAAC,IAAI,KAAG,KAAK,CAAC,KAAkB,CAAA;AAE/D,eAAO,MAAM,IAAI,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACc,CAAA;AAE5D,eAAO,MAAM,KAAK,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACa,CAAA;AAE5D,eAAO,MAAM,GAAG,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACgB,CAAA;AAE7D,eAAO,MAAM,MAAM,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACa,CAAA;AAE7D,eAAO,MAAM,UAAU,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OAE4B,CAAA;AAE7F,eAAO,MAAM,oBAAoB,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OACf,CAAA;AAE5D,eAAO,MAAM,kBAAkB,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OACb,CAAA;AAE5D,eAAO,MAAM,SAAS,SAAU,IAAI,CAAC,IAAI,SAAS,OAAO,CAAC,OAAO,KAAG,IAAI,CAAC,IACrB,CAAA;AAEpD,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAM3F,CAAA"}
1
+ {"version":3,"file":"aabb.d.ts","sourceRoot":"","sources":["../../src/internal/aabb.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAO3C,eAAO,MAAM,MAAM,QAAS,IAAI,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAoBzE,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,IAAI,CAAC,GAAG,KAAG,IAAI,CAAC,IAAI,GAAG,IAGlD,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,OAAO,KAAG,GAAG,IAAI,IAAI,CAAC,IAAsB,CAAA;AAEpE,eAAO,MAAM,QAAQ,SAAU,IAAI,CAAC,IAAI,KAAG,OAAO,CAAC,OAAwB,CAAA;AAC3E,eAAO,MAAM,IAAI,SAAU,IAAI,CAAC,IAAI,KAAG,KAAK,CAAC,KAAkB,CAAA;AAE/D,eAAO,MAAM,IAAI,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACc,CAAA;AAE5D,eAAO,MAAM,KAAK,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACa,CAAA;AAE5D,eAAO,MAAM,GAAG,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACgB,CAAA;AAE7D,eAAO,MAAM,MAAM,SAAU,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MACa,CAAA;AAE7D,eAAO,MAAM,UAAU,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OAE4B,CAAA;AAE7F,eAAO,MAAM,oBAAoB,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OACf,CAAA;AAE5D,eAAO,MAAM,kBAAkB,UAAW,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,KAAG,OACb,CAAA;AAE5D,eAAO,MAAM,SAAS,SAAU,IAAI,CAAC,IAAI,SAAS,OAAO,CAAC,OAAO,KAAG,IAAI,CAAC,IACrB,CAAA;AAEpD,6CAA6C;AAC7C,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5E,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAMpF,CAAA;AAED,eAAO,MAAM,KAAK,0EAAmH,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { codecOf } from "./codec.js";
1
2
  import * as Result from "@typeonce/ritmo/Result";
2
3
  import * as Size2 from "../Size2.js";
3
4
  import * as Vector2 from "../Vector2.js";
@@ -27,7 +28,7 @@ export const option = (raw) => {
27
28
  const next = result(raw);
28
29
  return next.ok ? next.value : null;
29
30
  };
30
- export const is = (raw) => result(raw).ok;
31
+ export const is = (raw) => decode(raw).ok;
31
32
  export const position = (aabb) => aabb.position;
32
33
  export const size = (aabb) => aabb.size;
33
34
  export const left = (aabb) => (aabb.position.x - aabb.size.width * 0.5);
@@ -47,4 +48,5 @@ export const decode = (raw) => {
47
48
  ? result({ position, size })
48
49
  : Result.failure({ tag: "Aabb/Malformed", input: raw });
49
50
  };
51
+ export const codec = codecOf(decode, "a box { x, y, width, height } of finite numbers with a non-negative size");
50
52
  //# sourceMappingURL=aabb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aabb.js","sourceRoot":"","sources":["../../src/internal/aabb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aabb.js","sourceRoot":"","sources":["../../src/internal/aabb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AAE3D,MAAM,IAAI,GAAG,CAAC,QAAyB,EAAE,IAAiB,EAAa,EAAE,CACvE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAc,CAAA;AAEnC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAa,EAAwC,EAAE;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,sBAAsB;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,kBAAkB;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAa,EAAoB,EAAE;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACpC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAY,EAAoB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;AAEpE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAe,EAAmB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAA;AAC3E,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAe,EAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA;AAE/D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAe,EAAiB,EAAE,CACrD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAkB,CAAA;AAE5D,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAe,EAAiB,EAAE,CACtD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAkB,CAAA;AAE5D,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,IAAe,EAAiB,EAAE,CACpD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAkB,CAAA;AAE7D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAe,EAAiB,EAAE,CACvD,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAkB,CAAA;AAE7D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAgB,EAAE,MAAiB,EAAW,EAAE,CACzE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK;IACzF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAA;AAE7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAE,MAAiB,EAAW,EAAE,CACnF,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAE,MAAiB,EAAW,EAAE,CACjF,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAe,EAAE,KAAsB,EAAa,EAAE,CAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AAKpD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAY,EAAoD,EAAE;IACvF,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;IACzG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAA8B,CAAA;IACzD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;QACnD,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAsB,MAAM,EAAE,0EAA0E,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { StandardSchema } from "@typeonce/ritmo/Descriptor";
2
+ import type * as Result from "@typeonce/ritmo/Result";
3
+ /**
4
+ * The codec of one math type, from its decode: a Standard Schema whose saved
5
+ * form is the raw shape. The value is already plain data, so it needs no
6
+ * `encode`.
7
+ */
8
+ export declare const codecOf: <Raw, Value>(decode: (raw: unknown) => Result.Result<Value, unknown>, expected: string) => StandardSchema<Raw, Value>;
9
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAErD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,EAAE,KAAK,UACxB,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,YAC7C,MAAM,KACf,cAAc,CAAC,GAAG,EAAE,KAAK,CAS1B,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The codec of one math type, from its decode: a Standard Schema whose saved
3
+ * form is the raw shape. The value is already plain data, so it needs no
4
+ * `encode`.
5
+ */
6
+ export const codecOf = (decode, expected) => ({
7
+ "~standard": {
8
+ version: 1,
9
+ vendor: "ritmo-math",
10
+ validate: (raw) => {
11
+ const value = decode(raw);
12
+ return value.ok ? { value: value.value } : { issues: [{ message: `Expected ${expected}` }] };
13
+ }
14
+ }
15
+ });
16
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/internal/codec.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAuD,EACvD,QAAgB,EACY,EAAE,CAAC,CAAC;IAChC,WAAW,EAAE;QACX,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YACzB,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAA;QAC9F,CAAC;KACF;CACF,CAAC,CAAA"}
@@ -1,9 +1,8 @@
1
- import * as Brand from "@typeonce/ritmo/Brand";
2
1
  import * as Result from "@typeonce/ritmo/Result";
3
2
  import type * as Scalar from "../Scalar.ts";
4
- export declare const Finite: Brand.Constructor<Scalar.Finite, number, Scalar.Error>;
5
- export declare const NonNegative: Brand.Constructor<Scalar.NonNegative, number, Scalar.Error>;
6
- export declare const Positive: Brand.Constructor<Scalar.Positive, number, Scalar.Error>;
3
+ export declare const Finite: Scalar.Constructor<Scalar.Finite>;
4
+ export declare const NonNegative: Scalar.Constructor<Scalar.NonNegative>;
5
+ export declare const Positive: Scalar.Constructor<Scalar.Positive>;
7
6
  export declare const clamp: (value: number, min: number, max: number) => Scalar.Finite;
8
7
  export declare const lerp: (start: number, end: number, amount: number) => Scalar.Finite;
9
8
  export declare const approach: (current: Scalar.Finite, target: Scalar.Finite, maxDelta: Scalar.NonNegative) => Scalar.Finite;
@@ -1 +1 @@
1
- {"version":3,"file":"scalar.d.ts","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,uBAAuB,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAuC3C,eAAO,MAAM,MAAM,wDAAc,CAAA;AACjC,eAAO,MAAM,WAAW,6DAAmB,CAAA;AAC3C,eAAO,MAAM,QAAQ,0DAAgB,CAAA;AAErC,eAAO,MAAM,KAAK,UAAW,MAAM,OAAO,MAAM,OAAO,MAAM,KAAG,MAAM,CAAC,MACjB,CAAA;AAEtD,eAAO,MAAM,IAAI,UAAW,MAAM,OAAO,MAAM,UAAU,MAAM,KAAG,MAAM,CAAC,MACtB,CAAA;AAEnD,eAAO,MAAM,QAAQ,YACV,MAAM,CAAC,MAAM,UACd,MAAM,CAAC,MAAM,YACX,MAAM,CAAC,WAAW,KAC3B,MAAM,CAAC,MAMT,CAAA;AAED,eAAO,MAAM,WAAW,UACf,MAAM,OACR,MAAM,SACJ,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAUxD,CAAA;AAED,eAAO,MAAM,KAAK,UACT,MAAM,cACD,MAAM,YACR,MAAM,eACH,MAAM,aACR,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAOxD,CAAA"}
1
+ {"version":3,"file":"scalar.d.ts","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAiB3C,eAAO,MAAM,MAAM,mCAQlB,CAAA;AAED,eAAO,MAAM,WAAW,wCAYQ,CAAA;AAEhC,eAAO,MAAM,QAAQ,qCAYQ,CAAA;AAE7B,eAAO,MAAM,KAAK,UAAW,MAAM,OAAO,MAAM,OAAO,MAAM,KAAG,MAAM,CAAC,MACjB,CAAA;AAEtD,eAAO,MAAM,IAAI,UAAW,MAAM,OAAO,MAAM,UAAU,MAAM,KAAG,MAAM,CAAC,MACtB,CAAA;AAEnD,eAAO,MAAM,QAAQ,YACV,MAAM,CAAC,MAAM,UACd,MAAM,CAAC,MAAM,YACX,MAAM,CAAC,WAAW,KAC3B,MAAM,CAAC,MAMT,CAAA;AAED,eAAO,MAAM,WAAW,UACf,MAAM,OACR,MAAM,SACJ,MAAM,KACZ,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAUxD,CAAA;AAED,eAAO,MAAM,KAAK,UACT,MAAM,cACD,MAAM,YACR,MAAM,eACH,MAAM,aACR,MAAM,KAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAOxD,CAAA"}
@@ -1,13 +1,23 @@
1
- import * as Brand from "@typeonce/ritmo/Brand";
2
1
  import * as Result from "@typeonce/ritmo/Result";
3
- const finiteBrand = Brand.refine((value) => Number.isFinite(value)
2
+ import { codecOf } from "./codec.js";
3
+ // A branded number's constructors, guard, and codec, from its check.
4
+ const refine = (validate, expected) => ({
5
+ result: validate,
6
+ option: (raw) => {
7
+ const result = validate(raw);
8
+ return result.ok ? result.value : null;
9
+ },
10
+ is: (raw) => typeof raw === "number" && validate(raw).ok,
11
+ codec: codecOf((raw) => typeof raw === "number" ? validate(raw) : Result.failure(raw), expected)
12
+ });
13
+ export const Finite = refine((value) => Number.isFinite(value)
4
14
  ? Result.success(value)
5
15
  : Result.failure({
6
16
  tag: "Scalar/NotFinite",
7
17
  value
8
- }));
9
- const nonNegativeBrand = Brand.refine((value) => {
10
- const finite = finiteBrand.result(value);
18
+ }), "a finite number");
19
+ export const NonNegative = refine((value) => {
20
+ const finite = Finite.result(value);
11
21
  if (!finite.ok) {
12
22
  return finite;
13
23
  }
@@ -17,9 +27,9 @@ const nonNegativeBrand = Brand.refine((value) => {
17
27
  tag: "Scalar/Negative",
18
28
  value
19
29
  });
20
- });
21
- const positiveBrand = Brand.refine((value) => {
22
- const finite = finiteBrand.result(value);
30
+ }, "a finite number, 0 or more");
31
+ export const Positive = refine((value) => {
32
+ const finite = Finite.result(value);
23
33
  if (!finite.ok) {
24
34
  return finite;
25
35
  }
@@ -29,10 +39,7 @@ const positiveBrand = Brand.refine((value) => {
29
39
  tag: "Scalar/NonPositive",
30
40
  value
31
41
  });
32
- });
33
- export const Finite = finiteBrand;
34
- export const NonNegative = nonNegativeBrand;
35
- export const Positive = positiveBrand;
42
+ }, "a finite number above 0");
36
43
  export const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
37
44
  export const lerp = (start, end, amount) => (start + (end - start) * amount);
38
45
  export const approach = (current, target, maxDelta) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,qEAAqE;AACrE,MAAM,MAAM,GAAG,CACb,QAA6D,EAC7D,QAAgB,EACW,EAAE,CAAC,CAAC;IAC/B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACxC,CAAC;IACD,EAAE,EAAE,CAAC,GAAG,EAAgB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;IACtE,KAAK,EAAE,OAAO,CAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;CAChH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAgB,CAAC,KAAK,EAAE,EAAE,CACpD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;IACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAsB,CAAC;IACxC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACb,GAAG,EAAE,kBAAkB;QACvB,KAAK;KACN,CAAC,EACN,iBAAiB,CAClB,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAqB,CAAC,KAAK,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,KAAK,IAAI,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAA2B,CAAC;QAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACb,GAAG,EAAE,iBAAiB;YACtB,KAAK;SACN,CAAC,CAAA;AACR,CAAC,EAAE,4BAA4B,CAAC,CAAA;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAkB,CAAC,KAAK,EAAE,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAwB,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACb,GAAG,EAAE,oBAAoB;YACzB,KAAK;SACN,CAAC,CAAA;AACR,CAAC,EAAE,yBAAyB,CAAC,CAAA;AAE7B,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW,EAAiB,EAAE,CAC9E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAkB,CAAA;AAEtD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,MAAc,EAAiB,EAAE,CAChF,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,MAAM,CAAkB,CAAA;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAsB,EACtB,MAAqB,EACrB,QAA4B,EACb,EAAE;IACjB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAkB,CAAA;IAC9D,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAkB,CAAA;AAC9D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAa,EACb,GAAW,EACX,KAAa,EAC4C,EAAE;IAC3D,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,kBAAkB;YACvB,KAAK;YACL,GAAG;SACJ,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAkB,CAAC,CAAA;AAC3E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,KAAa,EACb,UAAkB,EAClB,QAAgB,EAChB,WAAmB,EACnB,SAAiB,EACwC,EAAE;IAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;IACvD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA"}
@@ -3,7 +3,7 @@ import * as Scalar from "../Scalar.ts";
3
3
  import type * as Size2 from "../Size2.ts";
4
4
  export declare const result: (raw: Size2.Raw) => Result.Result<Size2.Size2, Size2.Error>;
5
5
  export declare const option: (raw: Size2.Raw) => Size2.Size2 | null;
6
- export declare const is: (raw: Size2.Raw) => raw is Size2.Raw & Size2.Size2;
6
+ export declare const is: (raw: unknown) => raw is Size2.Size2;
7
7
  export declare const toRaw: (size: Size2.Size2) => Size2.Raw;
8
8
  export declare const width: (size: Size2.Size2) => Scalar.NonNegative;
9
9
  export declare const height: (size: Size2.Size2) => Scalar.NonNegative;
@@ -11,5 +11,12 @@ export declare const height: (size: Size2.Size2) => Scalar.NonNegative;
11
11
  * Shape check for untrusted input; values are validated by `result`.
12
12
  */
13
13
  export declare const isRawShape: (raw: unknown) => raw is Size2.Raw;
14
- export declare const decode: (raw: unknown) => Result.Result<Size2.Size2, Size2.Error | Size2.DecodeError>;
14
+ /** Untrusted input without the raw shape. */
15
+ type Malformed = {
16
+ readonly tag: "Size2/Malformed";
17
+ readonly input: unknown;
18
+ };
19
+ export declare const decode: (raw: unknown) => Result.Result<Size2.Size2, Size2.Error | Malformed>;
20
+ export declare const codec: import("@typeonce/ritmo/Descriptor").StandardSchema<Size2.Raw, Size2.Size2>;
21
+ export {};
15
22
  //# sourceMappingURL=size2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"size2.d.ts","sourceRoot":"","sources":["../../src/internal/size2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AAKzC,eAAO,MAAM,MAAM,QAAS,KAAK,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAgB7E,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,KAAK,CAAC,GAAG,KAAG,KAAK,CAAC,KAAK,GAAG,IAGrD,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,KAAK,CAAC,GAAG,KAAG,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAuB,CAAA;AAEpF,eAAO,MAAM,KAAK,SAAU,KAAK,CAAC,KAAK,KAAG,KAAK,CAAC,GAG9C,CAAA;AAEF,eAAO,MAAM,KAAK,SAAU,KAAK,CAAC,KAAK,KAAG,MAAM,CAAC,WAAyB,CAAA;AAC1E,eAAO,MAAM,MAAM,SAAU,KAAK,CAAC,KAAK,KAAG,MAAM,CAAC,WAA0B,CAAA;AAE5E;;GAEG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,GAAG,IAAI,KAAK,CAAC,GACqH,CAAA;AAE5K,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,CACR,CAAA"}
1
+ {"version":3,"file":"size2.d.ts","sourceRoot":"","sources":["../../src/internal/size2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AAKzC,eAAO,MAAM,MAAM,QAAS,KAAK,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAgB7E,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,KAAK,CAAC,GAAG,KAAG,KAAK,CAAC,KAAK,GAAG,IAGrD,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,OAAO,KAAG,GAAG,IAAI,KAAK,CAAC,KAAuB,CAAA;AAEtE,eAAO,MAAM,KAAK,SAAU,KAAK,CAAC,KAAK,KAAG,KAAK,CAAC,GAG9C,CAAA;AAEF,eAAO,MAAM,KAAK,SAAU,KAAK,CAAC,KAAK,KAAG,MAAM,CAAC,WAAyB,CAAA;AAC1E,eAAO,MAAM,MAAM,SAAU,KAAK,CAAC,KAAK,KAAG,MAAM,CAAC,WAA0B,CAAA;AAE5E;;GAEG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,GAAG,IAAI,KAAK,CAAC,GACqH,CAAA;AAE5K,6CAA6C;AAC7C,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAE7E,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,SAAS,CACA,CAAA;AAExF,eAAO,MAAM,KAAK,6EAAqG,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { codecOf } from "./codec.js";
1
2
  import * as Result from "@typeonce/ritmo/Result";
2
3
  import * as Scalar from "../Scalar.js";
3
4
  const make = (width, height) => ({ width, height });
@@ -21,7 +22,7 @@ export const option = (raw) => {
21
22
  const next = result(raw);
22
23
  return next.ok ? next.value : null;
23
24
  };
24
- export const is = (raw) => result(raw).ok;
25
+ export const is = (raw) => decode(raw).ok;
25
26
  export const toRaw = (size) => ({
26
27
  width: size.width,
27
28
  height: size.height
@@ -33,4 +34,5 @@ export const height = (size) => size.height;
33
34
  */
34
35
  export const isRawShape = (raw) => typeof raw === "object" && raw !== null && typeof raw["width"] === "number" && typeof raw["height"] === "number";
35
36
  export const decode = (raw) => isRawShape(raw) ? result(raw) : Result.failure({ tag: "Size2/Malformed", input: raw });
37
+ export const codec = codecOf(decode, "a size { width, height } of non-negative finite numbers");
36
38
  //# sourceMappingURL=size2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"size2.js","sourceRoot":"","sources":["../../src/internal/size2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAGtC,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAE,MAA0B,EAAe,EAAE,CAClF,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAgB,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAA2C,EAAE;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;YACpC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;YACvC,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAAsB,EAAE;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACpC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAc,EAAkC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;AAEpF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAa,EAAE,CAAC,CAAC;IACtD,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAsB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAiB,EAAsB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;AAE5E;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAoB,EAAE,CAC3D,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAQ,GAA+B,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,GAA+B,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAA;AAE5K,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAY,EAA+D,EAAE,CAClG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"size2.js","sourceRoot":"","sources":["../../src/internal/size2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAGtC,MAAM,IAAI,GAAG,CAAC,KAAyB,EAAE,MAA0B,EAAe,EAAE,CAClF,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAgB,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAA2C,EAAE;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;YACpC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;YACvC,KAAK,EAAE;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAAsB,EAAE;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACpC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAY,EAAsB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;AAEtE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAa,EAAE,CAAC,CAAC;IACtD,KAAK,EAAE,IAAI,CAAC,KAAK;IACjB,MAAM,EAAE,IAAI,CAAC,MAAM;CACpB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAiB,EAAsB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAA;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAiB,EAAsB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAA;AAE5E;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAoB,EAAE,CAC3D,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,OAAQ,GAA+B,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAQ,GAA+B,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAA;AAK5K,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAY,EAAuD,EAAE,CAC1F,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AAExF,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAyB,MAAM,EAAE,yDAAyD,CAAC,CAAA"}
@@ -3,7 +3,7 @@ import * as Scalar from "../Scalar.ts";
3
3
  import type * as Vector2 from "../Vector2.ts";
4
4
  export declare const result: (raw: Vector2.Raw) => Result.Result<Vector2.Vector2, Vector2.Error>;
5
5
  export declare const option: (raw: Vector2.Raw) => Vector2.Vector2 | null;
6
- export declare const is: (raw: Vector2.Raw) => raw is Vector2.Raw & Vector2.Vector2;
6
+ export declare const is: (raw: unknown) => raw is Vector2.Vector2;
7
7
  export declare const toRaw: (vector: Vector2.Vector2) => Vector2.Raw;
8
8
  export declare const components: (vector: Vector2.Vector2) => {
9
9
  x: Scalar.Finite;
@@ -28,5 +28,12 @@ export declare const normalizeXYOrZero: (x: number, y: number) => {
28
28
  * Shape check for untrusted input; values are validated by `result`.
29
29
  */
30
30
  export declare const isRawShape: (raw: unknown) => raw is Vector2.Raw;
31
- export declare const decode: (raw: unknown) => Result.Result<Vector2.Vector2, Vector2.Error | Vector2.DecodeError>;
31
+ /** Untrusted input without the raw shape. */
32
+ type Malformed = {
33
+ readonly tag: "Vector2/Malformed";
34
+ readonly input: unknown;
35
+ };
36
+ export declare const decode: (raw: unknown) => Result.Result<Vector2.Vector2, Vector2.Error | Malformed>;
37
+ export declare const codec: import("@typeonce/ritmo/Descriptor").StandardSchema<Vector2.Raw, Vector2.Vector2>;
38
+ export {};
32
39
  //# sourceMappingURL=vector2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vector2.d.ts","sourceRoot":"","sources":["../../src/internal/vector2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAK7C,eAAO,MAAM,MAAM,QAAS,OAAO,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAgBrF,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,OAAO,CAAC,GAAG,KAAG,OAAO,CAAC,OAAO,GAAG,IAG3D,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,OAAO,CAAC,GAAG,KAAG,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,OAAyB,CAAA;AAE5F,eAAO,MAAM,KAAK,WAAY,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,GAGtD,CAAA;AAEF,eAAO,MAAM,UAAU,WAAY,OAAO,CAAC,OAAO;IAChD,CAAC;IACD,CAAC;CACD,CAAA;AAEF,eAAO,MAAM,CAAC,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,MAAkB,CAAA;AACrE,eAAO,MAAM,CAAC,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,MAAkB,CAAA;AAErE,eAAO,MAAM,IAAI,QAAO,OAAO,CAAC,OAAuD,CAAA;AAEvF,eAAO,MAAM,GAAG,SAAU,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OACI,CAAA;AAEhF,eAAO,MAAM,QAAQ,SAAU,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OACD,CAAA;AAEhF,eAAO,MAAM,KAAK,WAAY,OAAO,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,KAAG,OAAO,CAAC,OACG,CAAA;AAElF,eAAO,MAAM,aAAa,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,WACI,CAAA;AAEnE,eAAO,MAAM,MAAM,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,WACA,CAAA;AAExD,eAAO,MAAM,SAAS,WACZ,OAAO,CAAC,OAAO,KACtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAevD,CAAA;AAED,eAAO,MAAM,eAAe,WAAY,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OAGjE,CAAA;AAED,eAAO,MAAM,iBAAiB,MAAO,MAAM,KAAK,MAAM,KAAG;IACvD,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAgBxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,GAAG,IAAI,OAAO,CAAC,GAC0G,CAAA;AAEnK,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CACd,CAAA"}
1
+ {"version":3,"file":"vector2.d.ts","sourceRoot":"","sources":["../../src/internal/vector2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAK7C,eAAO,MAAM,MAAM,QAAS,OAAO,CAAC,GAAG,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAgBrF,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,OAAO,CAAC,GAAG,KAAG,OAAO,CAAC,OAAO,GAAG,IAG3D,CAAA;AAED,eAAO,MAAM,EAAE,QAAS,OAAO,KAAG,GAAG,IAAI,OAAO,CAAC,OAAyB,CAAA;AAE1E,eAAO,MAAM,KAAK,WAAY,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,GAGtD,CAAA;AAEF,eAAO,MAAM,UAAU,WAAY,OAAO,CAAC,OAAO;IAChD,CAAC;IACD,CAAC;CACD,CAAA;AAEF,eAAO,MAAM,CAAC,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,MAAkB,CAAA;AACrE,eAAO,MAAM,CAAC,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,MAAkB,CAAA;AAErE,eAAO,MAAM,IAAI,QAAO,OAAO,CAAC,OAAuD,CAAA;AAEvF,eAAO,MAAM,GAAG,SAAU,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OACI,CAAA;AAEhF,eAAO,MAAM,QAAQ,SAAU,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OACD,CAAA;AAEhF,eAAO,MAAM,KAAK,WAAY,OAAO,CAAC,OAAO,UAAU,MAAM,CAAC,MAAM,KAAG,OAAO,CAAC,OACG,CAAA;AAElF,eAAO,MAAM,aAAa,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,WACI,CAAA;AAEnE,eAAO,MAAM,MAAM,WAAY,OAAO,CAAC,OAAO,KAAG,MAAM,CAAC,WACA,CAAA;AAExD,eAAO,MAAM,SAAS,WACZ,OAAO,CAAC,OAAO,KACtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAevD,CAAA;AAED,eAAO,MAAM,eAAe,WAAY,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,OAGjE,CAAA;AAED,eAAO,MAAM,iBAAiB,MAAO,MAAM,KAAK,MAAM,KAAG;IACvD,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAgBxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,QAAS,OAAO,KAAG,GAAG,IAAI,OAAO,CAAC,GAC0G,CAAA;AAEnK,6CAA6C;AAC7C,KAAK,SAAS,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAA;AAE/E,eAAO,MAAM,MAAM,QAAS,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,CACJ,CAAA;AAE1F,eAAO,MAAM,KAAK,mFAAuF,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { codecOf } from "./codec.js";
1
2
  import * as Result from "@typeonce/ritmo/Result";
2
3
  import * as Scalar from "../Scalar.js";
3
4
  import * as Ops from "../Ops.js";
@@ -22,7 +23,7 @@ export const option = (raw) => {
22
23
  const next = result(raw);
23
24
  return next.ok ? next.value : null;
24
25
  };
25
- export const is = (raw) => result(raw).ok;
26
+ export const is = (raw) => decode(raw).ok;
26
27
  export const toRaw = (vector) => ({
27
28
  x: vector.x,
28
29
  y: vector.y
@@ -73,4 +74,5 @@ export const normalizeXYOrZero = (x, y) => {
73
74
  */
74
75
  export const isRawShape = (raw) => typeof raw === "object" && raw !== null && typeof raw["x"] === "number" && typeof raw["y"] === "number";
75
76
  export const decode = (raw) => isRawShape(raw) ? result(raw) : Result.failure({ tag: "Vector2/Malformed", input: raw });
77
+ export const codec = codecOf(decode, "a vector { x, y } of finite numbers");
76
78
  //# sourceMappingURL=vector2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vector2.js","sourceRoot":"","sources":["../../src/internal/vector2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vector2.js","sourceRoot":"","sources":["../../src/internal/vector2.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeonce/ritmo-math",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "Validated math values and hot-path game helpers (collision, spatial grid, flow field, random) for Ritmo games",
5
5
  "author": "Sandro Maglione",
6
6
  "license": "MIT",
@@ -47,7 +47,7 @@
47
47
  "provenance": true
48
48
  },
49
49
  "dependencies": {
50
- "@typeonce/ritmo": "^0.12.0"
50
+ "@typeonce/ritmo": "^0.14.0"
51
51
  },
52
52
  "engines": {
53
53
  "node": ">=20"
package/src/Aabb.ts CHANGED
@@ -35,6 +35,7 @@
35
35
  * Immutable geometry helpers for translation and overlap checks.
36
36
  */
37
37
  import type * as Brand from "@typeonce/ritmo/Brand"
38
+ import type { StandardSchema } from "@typeonce/ritmo/Descriptor"
38
39
  import * as internal from "./internal/aabb.ts"
39
40
  import type * as Result from "@typeonce/ritmo/Result"
40
41
  import type * as Scalar from "./Scalar.ts"
@@ -70,16 +71,6 @@ export type Error =
70
71
  | { readonly tag: "Aabb/InvalidPosition"; readonly error: Vector2.Error; readonly input: Raw }
71
72
  | { readonly tag: "Aabb/InvalidSize"; readonly error: Size2.Error; readonly input: Raw }
72
73
 
73
- /**
74
- * Failure produced by `decode` when the input does not have the raw shape.
75
- *
76
- * @category AABB Types
77
- */
78
- export type DecodeError = {
79
- readonly tag: "Aabb/Malformed"
80
- readonly input: unknown
81
- }
82
-
83
74
  /**
84
75
  * Validates one raw AABB and returns an explicit result.
85
76
  *
@@ -95,13 +86,20 @@ export type DecodeError = {
95
86
  */
96
87
  export const result: (raw: Raw) => Result.Result<Aabb, Error> = internal.result
97
88
  /**
98
- * Validates untrusted input of any shape, for example a value read from a
99
- * save file. Descriptors built from this module use it when restoring
100
- * snapshots.
89
+ * The codec of `Aabb` (a Standard Schema, see `Descriptor.Codec`): give it to
90
+ * `Descriptor.ConstructedComponent(...)` so raw input and saves are validated.
91
+ * Its saved form is the raw shape, so it needs no `encode`. To put a `Aabb`
92
+ * inside your own object schema, use {@link is} with your library's guard
93
+ * schema (`Schema.declare`, `z.custom`).
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const Position = Descriptor.ConstructedComponent(Aabb.codec)("Game/Position")
98
+ * ```
101
99
  *
102
100
  * @category Construction
103
101
  */
104
- export const decode: (raw: unknown) => Result.Result<Aabb, Error | DecodeError> = internal.decode
102
+ export const codec: StandardSchema<Raw, Aabb> = internal.codec
105
103
  /**
106
104
  * Validates one raw AABB and returns `null` on failure.
107
105
  *
@@ -109,11 +107,12 @@ export const decode: (raw: unknown) => Result.Result<Aabb, Error | DecodeError>
109
107
  */
110
108
  export const option: (raw: Raw) => Aabb | null = internal.option
111
109
  /**
112
- * Checks whether one raw value already satisfies the AABB invariants.
110
+ * Whether any value is a valid `Aabb`: a guard, also for building a
111
+ * `Aabb` field in your own schema (`Schema.declare(Aabb.is)`).
113
112
  *
114
113
  * @category Construction
115
114
  */
116
- export const is: (raw: Raw) => raw is Raw & Aabb = internal.is
115
+ export const is: (raw: unknown) => raw is Aabb = internal.is
117
116
  /**
118
117
  * Reads the center position of one AABB.
119
118
  *