@typeonce/ritmo-math 0.11.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.
- package/CHANGELOG.md +22 -0
- package/README.md +1 -1
- package/dist/Aabb.d.ts +15 -15
- package/dist/Aabb.d.ts.map +1 -1
- package/dist/Aabb.js +13 -5
- package/dist/Aabb.js.map +1 -1
- package/dist/Random.d.ts +16 -6
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +13 -3
- package/dist/Random.js.map +1 -1
- package/dist/Scalar.d.ts +26 -7
- package/dist/Scalar.d.ts.map +1 -1
- package/dist/Scalar.js +6 -3
- package/dist/Scalar.js.map +1 -1
- package/dist/Size2.d.ts +15 -15
- package/dist/Size2.d.ts.map +1 -1
- package/dist/Size2.js +13 -5
- package/dist/Size2.js.map +1 -1
- package/dist/Vector2.d.ts +15 -15
- package/dist/Vector2.d.ts.map +1 -1
- package/dist/Vector2.js +13 -5
- package/dist/Vector2.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/internal/aabb.d.ts +9 -2
- package/dist/internal/aabb.d.ts.map +1 -1
- package/dist/internal/aabb.js +3 -1
- package/dist/internal/aabb.js.map +1 -1
- package/dist/internal/codec.d.ts +9 -0
- package/dist/internal/codec.d.ts.map +1 -0
- package/dist/internal/codec.js +16 -0
- package/dist/internal/codec.js.map +1 -0
- package/dist/internal/scalar.d.ts +3 -4
- package/dist/internal/scalar.d.ts.map +1 -1
- package/dist/internal/scalar.js +19 -12
- package/dist/internal/scalar.js.map +1 -1
- package/dist/internal/size2.d.ts +9 -2
- package/dist/internal/size2.d.ts.map +1 -1
- package/dist/internal/size2.js +3 -1
- package/dist/internal/size2.js.map +1 -1
- package/dist/internal/vector2.d.ts +9 -2
- package/dist/internal/vector2.d.ts.map +1 -1
- package/dist/internal/vector2.js +3 -1
- package/dist/internal/vector2.js.map +1 -1
- package/package.json +2 -2
- package/src/Aabb.ts +15 -16
- package/src/Random.ts +21 -7
- package/src/Scalar.ts +27 -7
- package/src/Size2.ts +15 -16
- package/src/Vector2.ts +15 -16
- package/src/index.ts +3 -3
- package/src/internal/aabb.ts +8 -2
- package/src/internal/codec.ts +21 -0
- package/src/internal/scalar.ts +24 -13
- package/src/internal/size2.ts +8 -2
- 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
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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
|
*/
|
package/dist/Vector2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"
|
|
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,
|
|
6
|
-
* `Descriptor.ConstructedComponent(
|
|
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,
|
|
6
|
-
* `Descriptor.ConstructedComponent(
|
|
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/internal/aabb.d.ts
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/internal/aabb.js
CHANGED
|
@@ -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) =>
|
|
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":"AAAA,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,
|
|
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:
|
|
5
|
-
export declare const NonNegative:
|
|
6
|
-
export declare const Positive:
|
|
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,
|
|
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"}
|
package/dist/internal/scalar.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import * as Brand from "@typeonce/ritmo/Brand";
|
|
2
1
|
import * as Result from "@typeonce/ritmo/Result";
|
|
3
|
-
|
|
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
|
|
10
|
-
const finite =
|
|
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
|
|
22
|
-
const finite =
|
|
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":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scalar.js","sourceRoot":"","sources":["../../src/internal/scalar.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/size2.d.ts
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/internal/size2.js
CHANGED
|
@@ -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) =>
|
|
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,
|
|
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:
|
|
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
|
-
|
|
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":"
|
|
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"}
|
package/dist/internal/vector2.js
CHANGED
|
@@ -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) =>
|
|
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":"AAAA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAEhC,MAAM,IAAI,GAAG,CAAC,CAAgB,EAAE,CAAgB,EAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAoB,CAAA;AAEnG,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAgB,EAAiD,EAAE;IACxF,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACrC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,GAAG,EAAE,iBAAiB;YACtB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YACxB,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YACxB,KAAK,EAAE;gBACL,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,CAAC,EAAE,GAAG,CAAC,CAAC;aACT;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAgB,EAA0B,EAAE;IACjE,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,
|
|
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.
|
|
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.
|
|
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
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
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
|
|
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
|
-
*
|
|
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:
|
|
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
|
|
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 `
|
|
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
|
|
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
|
-
*
|
|
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
|
|
176
|
-
|
|
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
|