@typeonce/ritmo-math 0.12.0 → 0.13.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 (56) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  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/Random.d.ts +16 -6
  8. package/dist/Random.d.ts.map +1 -1
  9. package/dist/Random.js +13 -3
  10. package/dist/Random.js.map +1 -1
  11. package/dist/Scalar.d.ts +26 -7
  12. package/dist/Scalar.d.ts.map +1 -1
  13. package/dist/Scalar.js +6 -3
  14. package/dist/Scalar.js.map +1 -1
  15. package/dist/Size2.d.ts +15 -15
  16. package/dist/Size2.d.ts.map +1 -1
  17. package/dist/Size2.js +13 -5
  18. package/dist/Size2.js.map +1 -1
  19. package/dist/Vector2.d.ts +15 -15
  20. package/dist/Vector2.d.ts.map +1 -1
  21. package/dist/Vector2.js +13 -5
  22. package/dist/Vector2.js.map +1 -1
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +3 -3
  25. package/dist/internal/aabb.d.ts +9 -2
  26. package/dist/internal/aabb.d.ts.map +1 -1
  27. package/dist/internal/aabb.js +3 -1
  28. package/dist/internal/aabb.js.map +1 -1
  29. package/dist/internal/codec.d.ts +9 -0
  30. package/dist/internal/codec.d.ts.map +1 -0
  31. package/dist/internal/codec.js +16 -0
  32. package/dist/internal/codec.js.map +1 -0
  33. package/dist/internal/scalar.d.ts +3 -4
  34. package/dist/internal/scalar.d.ts.map +1 -1
  35. package/dist/internal/scalar.js +19 -12
  36. package/dist/internal/scalar.js.map +1 -1
  37. package/dist/internal/size2.d.ts +9 -2
  38. package/dist/internal/size2.d.ts.map +1 -1
  39. package/dist/internal/size2.js +3 -1
  40. package/dist/internal/size2.js.map +1 -1
  41. package/dist/internal/vector2.d.ts +9 -2
  42. package/dist/internal/vector2.d.ts.map +1 -1
  43. package/dist/internal/vector2.js +3 -1
  44. package/dist/internal/vector2.js.map +1 -1
  45. package/package.json +2 -2
  46. package/src/Aabb.ts +15 -16
  47. package/src/Random.ts +21 -7
  48. package/src/Scalar.ts +27 -7
  49. package/src/Size2.ts +15 -16
  50. package/src/Vector2.ts +15 -16
  51. package/src/index.ts +3 -3
  52. package/src/internal/aabb.ts +8 -2
  53. package/src/internal/codec.ts +21 -0
  54. package/src/internal/scalar.ts +24 -13
  55. package/src/internal/size2.ts +8 -2
  56. package/src/internal/vector2.ts +8 -2
package/dist/Vector2.js CHANGED
@@ -11,13 +11,20 @@ import * as internal from "./internal/vector2.js";
11
11
  */
12
12
  export const result = internal.result;
13
13
  /**
14
- * Validates untrusted input of any shape, for example a value read from a
15
- * save file. Descriptors built from this module use it when restoring
16
- * snapshots.
14
+ * The codec of `Vector2` (a Standard Schema, see `Descriptor.Codec`): give it to
15
+ * `Descriptor.ConstructedComponent(...)` so raw input and saves are validated.
16
+ * Its saved form is the raw shape, so it needs no `encode`. To put a `Vector2`
17
+ * inside your own object schema, use {@link is} with your library's guard
18
+ * schema (`Schema.declare`, `z.custom`).
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const Position = Descriptor.ConstructedComponent(Vector2.codec)("Game/Position")
23
+ * ```
17
24
  *
18
25
  * @category Construction
19
26
  */
20
- export const decode = internal.decode;
27
+ export const codec = internal.codec;
21
28
  /**
22
29
  * Validates one raw vector and returns `null` on failure.
23
30
  *
@@ -25,7 +32,8 @@ export const decode = internal.decode;
25
32
  */
26
33
  export const option = internal.option;
27
34
  /**
28
- * Checks whether one raw vector already satisfies the vector invariants.
35
+ * Whether any value is a valid `Vector2`: a guard, also for building a
36
+ * `Vector2` field in your own schema (`Schema.declare(Vector2.is)`).
29
37
  *
30
38
  * @category Construction
31
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAuDjD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAgD,QAAQ,CAAC,MAAM,CAAA;AAClF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAkE,QAAQ,CAAC,MAAM,CAAA;AACpG;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAiC,QAAQ,CAAC,MAAM,CAAA;AACnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,EAAE,GAAuC,QAAQ,CAAC,EAAE,CAAA;AACjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAA6B,QAAQ,CAAC,KAAK,CAAA;AAC7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkF,QAAQ,CAAC,UAAU,CAAA;AAC5H;;;;GAIG;AACH,MAAM,CAAC,MAAM,CAAC,GAAuC,QAAQ,CAAC,CAAC,CAAA;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,CAAC,GAAuC,QAAQ,CAAC,CAAC,CAAA;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAkB,QAAQ,CAAC,IAAI,CAAA;AAChD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAA+C,QAAQ,CAAC,GAAG,CAAA;AAC3E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA+C,QAAQ,CAAC,QAAQ,CAAA;AACrF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAwD,QAAQ,CAAC,KAAK,CAAA;AACxF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAA4C,QAAQ,CAAC,aAAa,CAAA;AAC5F;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAA4C,QAAQ,CAAC,MAAM,CAAA;AAC9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,SAAS,GAAgE,QAAQ,CAAC,SAAS,CAAA;AACxG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAiC,QAAQ,CAAC,eAAe,CAAA"}
1
+ {"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AA6CjD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAgD,QAAQ,CAAC,MAAM,CAAA;AAClF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,KAAK,GAAiC,QAAQ,CAAC,KAAK,CAAA;AACjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAiC,QAAQ,CAAC,MAAM,CAAA;AACnE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAAqC,QAAQ,CAAC,EAAE,CAAA;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAA6B,QAAQ,CAAC,KAAK,CAAA;AAC7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAkF,QAAQ,CAAC,UAAU,CAAA;AAC5H;;;;GAIG;AACH,MAAM,CAAC,MAAM,CAAC,GAAuC,QAAQ,CAAC,CAAC,CAAA;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,CAAC,GAAuC,QAAQ,CAAC,CAAC,CAAA;AAC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAkB,QAAQ,CAAC,IAAI,CAAA;AAChD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAA+C,QAAQ,CAAC,GAAG,CAAA;AAC3E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA+C,QAAQ,CAAC,QAAQ,CAAA;AACrF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAwD,QAAQ,CAAC,KAAK,CAAA;AACxF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAA4C,QAAQ,CAAC,aAAa,CAAA;AAC5F;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAA4C,QAAQ,CAAC,MAAM,CAAA;AAC9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,SAAS,GAAgE,QAAQ,CAAC,SAAS,CAAA;AACxG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAiC,QAAQ,CAAC,eAAe,CAAA"}
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@
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
10
  * `Box2` edges, `Collide2` swept circle collision, a `SpatialGrid` broad
package/dist/index.js CHANGED
@@ -2,9 +2,9 @@
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
10
  * `Box2` edges, `Collide2` swept circle collision, a `SpatialGrid` broad
@@ -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":"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"}
@@ -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":"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"}
@@ -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.13.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.13.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
  *
package/src/Random.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * integer.
4
4
  *
5
5
  * Keep the state in a resource, so a run replays exactly and saves with the
6
- * world: declare it with this module as its validator, start it with
6
+ * world: declare it with `Random.codec` as its schema, start it with
7
7
  * `seed`, and draw in systems through `draw` over its write cell, which writes
8
8
  * every draw back (rolled back with a failed system). Two generators made
9
9
  * from the same state draw the same sequence on every platform. `make` is for
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @example
13
13
  * ```ts
14
- * const Rng = Descriptor.ConstructedResource(Random)("Game/Rng")
14
+ * const Rng = Descriptor.ConstructedResource(Random.codec)("Game/Rng")
15
15
  * const runtime = Game.Runtime.make({ services, resources: { Rng: Random.seed(0x5eed) } })
16
16
  *
17
17
  * Game.System("Game/Spawn", { resources: { rng: Game.System.writeResource(Rng) } }, ({ resources }) => {
@@ -35,7 +35,9 @@
35
35
  */
36
36
  import type * as Brand from "@typeonce/ritmo/Brand"
37
37
  import type { WriteCell } from "@typeonce/ritmo/Query"
38
+ import type { StandardSchema } from "@typeonce/ritmo/Descriptor"
38
39
  import * as Result from "@typeonce/ritmo/Result"
40
+ import { codecOf } from "./internal/codec.ts"
39
41
 
40
42
  /**
41
43
  * A generator. Every draw advances `state`.
@@ -143,7 +145,7 @@ export const make = (state: number): Random => new Mulberry32(state)
143
145
 
144
146
  /**
145
147
  * A generator's state as a resource holds it: an unsigned 32-bit integer.
146
- * Only `seed`, `result`, and `decode` make one, so `draw` takes the cell of a
148
+ * Only `seed`, `result`, and `codec` make one, so `draw` takes the cell of a
147
149
  * random resource and nothing else.
148
150
  *
149
151
  * @category Resource
@@ -160,7 +162,7 @@ const isState = (value: unknown): value is State =>
160
162
  typeof value === "number" && Number.isInteger(value) && value >= 0 && value <= 0xffffffff
161
163
 
162
164
  /**
163
- * Validates a state, for `Descriptor.ConstructedResource(Random)` and saves.
165
+ * Validates a state, for game code that builds one from a number.
164
166
  *
165
167
  * @category Resource
166
168
  */
@@ -168,12 +170,24 @@ export const result = (raw: number): Result.Result<State, InvalidState> =>
168
170
  isState(raw) ? Result.success(raw) : Result.failure({ _tag: "InvalidRandomState", value: raw })
169
171
 
170
172
  /**
171
- * Validates a state read from untrusted data (a save).
173
+ * Whether any value is a generator state: a guard, also for building a
174
+ * state field in your own schema (`Schema.declare(Random.is)`).
172
175
  *
173
176
  * @category Resource
174
177
  */
175
- export const decode = (raw: unknown): Result.Result<State, InvalidState> =>
176
- isState(raw) ? Result.success(raw) : Result.failure({ _tag: "InvalidRandomState", value: raw })
178
+ export const is = (raw: unknown): raw is State => isState(raw)
179
+
180
+ /**
181
+ * The codec of a random resource's state (a Standard Schema, see
182
+ * `Descriptor.Codec`): `Descriptor.ConstructedResource(Random.codec)`. Its
183
+ * saved form is the number itself, so it needs no `encode`.
184
+ *
185
+ * @category Resource
186
+ */
187
+ export const codec: StandardSchema<number, State> = codecOf<number, State>(
188
+ (raw) => isState(raw) ? Result.success(raw) : Result.failure({ _tag: "InvalidRandomState", value: raw }),
189
+ "a generator state: an unsigned 32-bit integer"
190
+ )
177
191
 
178
192
  /**
179
193
  * The starting state for a seed, reduced to an unsigned 32-bit integer like