@sachitv/safe-math-ts 0.1.0 → 0.2.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/esm/_dnt.test_shims.d.ts.map +1 -0
  4. package/esm/examples/attitude_interpolation_and_cache.test.d.ts.map +1 -0
  5. package/esm/examples/camera_projection.test.d.ts.map +1 -0
  6. package/esm/examples/cookbook_constant_accel_loop.test.d.ts.map +1 -0
  7. package/esm/examples/distinct_frame_guard.test.d.ts.map +1 -0
  8. package/esm/examples/end_to_end_projection_chain.test.d.ts.map +1 -0
  9. package/esm/examples/mat4_pose_decomposition.test.d.ts.map +1 -0
  10. package/esm/examples/normal_matrix_failure_recovery.test.d.ts.map +1 -0
  11. package/esm/examples/normal_matrix_perpendicularity.test.d.ts.map +1 -0
  12. package/esm/examples/physics_units_kinematics.test.d.ts.map +1 -0
  13. package/esm/examples/projection_edge_behavior.test.d.ts.map +1 -0
  14. package/esm/examples/quat_from_rotation_matrix.test.d.ts.map +1 -0
  15. package/esm/examples/quaternion_nlerp_vs_slerp.test.d.ts.map +1 -0
  16. package/esm/examples/rendering_normals_reflection.test.d.ts.map +1 -0
  17. package/esm/examples/robotics_pose_chain.test.d.ts.map +1 -0
  18. package/esm/examples/safe_api_failure_modes.test.d.ts.map +1 -0
  19. package/esm/examples/safe_vs_unsafe_apis.test.d.ts.map +1 -0
  20. package/esm/examples/sensor_extrinsics_chain.test.d.ts.map +1 -0
  21. package/esm/examples/transform_order_matters.test.d.ts.map +1 -0
  22. package/esm/examples/transform_point_vs_direction.test.d.ts.map +1 -0
  23. package/esm/examples/transform_round_trip.test.d.ts.map +1 -0
  24. package/esm/src/geometry3d/matrix4.d.ts +6 -2
  25. package/esm/src/geometry3d/matrix4.d.ts.map +1 -1
  26. package/esm/src/geometry3d/matrix4.js +21 -3
  27. package/esm/src/geometry3d/mod.d.ts +1 -1
  28. package/esm/src/geometry3d/mod.d.ts.map +1 -1
  29. package/esm/src/geometry3d/mod.js +1 -1
  30. package/esm/src/geometry3d/quaternion.d.ts +43 -2
  31. package/esm/src/geometry3d/quaternion.d.ts.map +1 -1
  32. package/esm/src/geometry3d/quaternion.js +121 -1
  33. package/esm/src/geometry3d/types.d.ts +35 -11
  34. package/esm/src/geometry3d/types.d.ts.map +1 -1
  35. package/esm/src/units.d.ts +43 -27
  36. package/esm/src/units.d.ts.map +1 -1
  37. package/esm/tests/assert.d.ts.map +1 -0
  38. package/esm/tests/matrix4.test.d.ts.map +1 -0
  39. package/esm/tests/quaternion.test.d.ts.map +1 -0
  40. package/esm/tests/type_safety.test.d.ts.map +1 -0
  41. package/esm/tests/units.test.d.ts.map +1 -0
  42. package/esm/tests/vector3.test.d.ts.map +1 -0
  43. package/esm/vitest-deno-shim.mjs +3 -0
  44. package/package.json +15 -6
  45. package/test_runner.cjs +215 -0
  46. package/vitest.browser.config.ts +24 -0
  47. package/vitest.cloudflare.config.ts +21 -0
  48. package/wrangler.toml +2 -0
@@ -1,5 +1,8 @@
1
1
  import { type NoInfer, type UnitExpr } from '../units.js';
2
- import type { Delta3, Dir3, FrameTag, Quaternion } from './types.js';
2
+ import type { Delta3, Dir3, FrameTag, LinearMat4, Mat4, Quaternion } from './types.js';
3
+ type DistinctFramePair<ToFrame extends string, FromFrame extends string> = [
4
+ ToFrame
5
+ ] extends [FromFrame] ? ([FromFrame] extends [ToFrame] ? never : unknown) : unknown;
3
6
  /** Axis composition order for Euler rotations. */
4
7
  export type EulerOrder = 'XYZ' | 'XZY' | 'YXZ' | 'YZX' | 'ZXY' | 'ZYX';
5
8
  /**
@@ -15,7 +18,15 @@ export type EulerOrder = 'XYZ' | 'XZY' | 'YXZ' | 'YZX' | 'ZXY' | 'ZYX';
15
18
  * @param w Quaternion w component.
16
19
  * @returns Quaternion in `<ToFrame, FromFrame>` order.
17
20
  */
18
- export declare const quat: <ToFrame extends string, FromFrame extends string>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame>, x: number, y: number, z: number, w: number) => Quaternion<ToFrame, FromFrame>;
21
+ export declare const quat: <ToFrame extends string, FromFrame extends string>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame> & DistinctFramePair<ToFrame, FromFrame>, x: number, y: number, z: number, w: number) => Quaternion<ToFrame, FromFrame>;
22
+ /** Returns the x component of a quaternion. */
23
+ export declare const quatX: <ToFrame extends string, FromFrame extends string>(value: Quaternion<ToFrame, FromFrame>) => number;
24
+ /** Returns the y component of a quaternion. */
25
+ export declare const quatY: <ToFrame extends string, FromFrame extends string>(value: Quaternion<ToFrame, FromFrame>) => number;
26
+ /** Returns the z component of a quaternion. */
27
+ export declare const quatZ: <ToFrame extends string, FromFrame extends string>(value: Quaternion<ToFrame, FromFrame>) => number;
28
+ /** Returns the w component of a quaternion. */
29
+ export declare const quatW: <ToFrame extends string, FromFrame extends string>(value: Quaternion<ToFrame, FromFrame>) => number;
19
30
  /**
20
31
  * Returns identity quaternion for a frame.
21
32
  *
@@ -127,6 +138,35 @@ export declare function rotateVec3ByQuat<Unit extends UnitExpr, ToFrame extends
127
138
  * @returns Rotated direction in `ToFrame`.
128
139
  */
129
140
  export declare function rotateVec3ByQuat<ToFrame extends string, FromFrame extends string>(rotation: Quaternion<ToFrame, FromFrame>, value: Dir3<NoInfer<FromFrame>>): Dir3<ToFrame>;
141
+ /**
142
+ * Builds quaternion from a matrix rotation basis.
143
+ *
144
+ * Accepts either a linear matrix or the linear part of an affine matrix.
145
+ * Unsafe variant performs no orthonormality validation.
146
+ *
147
+ * @param toFrameTag Destination frame token.
148
+ * @param fromFrameTag Source frame token.
149
+ * @param matrix Rotation matrix in `<ToFrame, FromFrame>` order.
150
+ * @returns Quaternion in `<ToFrame, FromFrame>` order.
151
+ */
152
+ export declare function quatFromRotationMatrixUnsafe<ToFrame extends string, FromFrame extends string>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame>, matrix: LinearMat4<NoInfer<ToFrame>, NoInfer<FromFrame>>): Quaternion<ToFrame, FromFrame>;
153
+ /** Overload accepting an affine matrix and using its upper-left 3x3 basis. */
154
+ export declare function quatFromRotationMatrixUnsafe<ToFrame extends string, FromFrame extends string, TranslationUnit extends UnitExpr>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame>, matrix: Mat4<NoInfer<ToFrame>, NoInfer<FromFrame>, TranslationUnit>): Quaternion<ToFrame, FromFrame>;
155
+ /**
156
+ * Builds quaternion from a matrix rotation basis.
157
+ *
158
+ * Accepts either a linear matrix or the linear part of an affine matrix.
159
+ * Throws when the matrix basis is not orthonormal right-handed rotation.
160
+ *
161
+ * @param toFrameTag Destination frame token.
162
+ * @param fromFrameTag Source frame token.
163
+ * @param matrix Rotation matrix in `<ToFrame, FromFrame>` order.
164
+ * @returns Quaternion in `<ToFrame, FromFrame>` order.
165
+ * @throws {Error} When matrix is not a valid finite rotation matrix.
166
+ */
167
+ export declare function quatFromRotationMatrix<ToFrame extends string, FromFrame extends string>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame>, matrix: LinearMat4<NoInfer<ToFrame>, NoInfer<FromFrame>>): Quaternion<ToFrame, FromFrame>;
168
+ /** Overload accepting an affine matrix and validating its upper-left 3x3 basis. */
169
+ export declare function quatFromRotationMatrix<ToFrame extends string, FromFrame extends string, TranslationUnit extends UnitExpr>(toFrameTag: FrameTag<ToFrame>, fromFrameTag: FrameTag<FromFrame>, matrix: Mat4<NoInfer<ToFrame>, NoInfer<FromFrame>, TranslationUnit>): Quaternion<ToFrame, FromFrame>;
130
170
  /**
131
171
  * Creates a quaternion from axis-angle representation.
132
172
  *
@@ -218,4 +258,5 @@ export declare const quatSlerpUnsafe: <ToFrame extends string, FromFrame extends
218
258
  * @returns Interpolated normalized quaternion.
219
259
  */
220
260
  export declare const quatSlerp: <ToFrame extends string, FromFrame extends string>(start: Quaternion<ToFrame, FromFrame>, end: Quaternion<NoInfer<ToFrame>, NoInfer<FromFrame>>, t: number) => Quaternion<ToFrame, FromFrame>;
261
+ export {};
221
262
  //# sourceMappingURL=quaternion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quaternion.d.ts","sourceRoot":"","sources":["../../../src/src/geometry3d/quaternion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quaternion.d.ts","sourceRoot":"","sources":["../../../src/src/geometry3d/quaternion.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import { normalizeVec3, normalizeVec3Unsafe } from './vector3.js';
2
2
  const NEAR_ZERO = 1e-14;
3
+ const ROTATION_MATRIX_TOLERANCE = 1e-8;
4
+ const assertDistinctFrames = (toFrame, fromFrame) => {
5
+ if (toFrame === fromFrame) {
6
+ throw new Error('toFrameTag and fromFrameTag must be different');
7
+ }
8
+ };
3
9
  /**
4
10
  * Casts a raw number into a branded quantity.
5
11
  *
@@ -16,7 +22,24 @@ const asQuantity = (value) => value;
16
22
  * @param w Quaternion w component.
17
23
  * @returns Branded quaternion.
18
24
  */
19
- const asQuaternion = (x, y, z, w) => [x, y, z, w];
25
+ const asQuaternion = (x, y, z, w) => {
26
+ const value = [x, y, z, w];
27
+ Object.defineProperties(value, {
28
+ x: {
29
+ get: () => value[0],
30
+ },
31
+ y: {
32
+ get: () => value[1],
33
+ },
34
+ z: {
35
+ get: () => value[2],
36
+ },
37
+ w: {
38
+ get: () => value[3],
39
+ },
40
+ });
41
+ return value;
42
+ };
20
43
  /**
21
44
  * Constructs a frame-aware quaternion.
22
45
  *
@@ -31,10 +54,19 @@ const asQuaternion = (x, y, z, w) => [x, y, z, w];
31
54
  * @returns Quaternion in `<ToFrame, FromFrame>` order.
32
55
  */
33
56
  export const quat = (toFrameTag, fromFrameTag, x, y, z, w) => {
57
+ assertDistinctFrames(toFrameTag, fromFrameTag);
34
58
  void toFrameTag;
35
59
  void fromFrameTag;
36
60
  return asQuaternion(x, y, z, w);
37
61
  };
62
+ /** Returns the x component of a quaternion. */
63
+ export const quatX = (value) => value[0];
64
+ /** Returns the y component of a quaternion. */
65
+ export const quatY = (value) => value[1];
66
+ /** Returns the z component of a quaternion. */
67
+ export const quatZ = (value) => value[2];
68
+ /** Returns the w component of a quaternion. */
69
+ export const quatW = (value) => value[3];
38
70
  /**
39
71
  * Returns identity quaternion for a frame.
40
72
  *
@@ -189,6 +221,94 @@ export function rotateVec3ByQuat(rotation, value) {
189
221
  quatNormalize(rotation);
190
222
  return rotateVec3ByQuatUnsafe(rotation, value);
191
223
  }
224
+ const isNear = (a, b, tolerance) => Math.abs(a - b) <= tolerance;
225
+ const dot3 = (ax, ay, az, bx, by, bz) => ax * bx + ay * by + az * bz;
226
+ const lengthSquared3 = (x, y, z) => dot3(x, y, z, x, y, z);
227
+ const det3 = (m00, m01, m02, m10, m11, m12, m20, m21, m22) => m00 * (m11 * m22 - m12 * m21) -
228
+ m01 * (m10 * m22 - m12 * m20) +
229
+ m02 * (m10 * m21 - m11 * m20);
230
+ const assertValidRotationBasis = (m00, m01, m02, m10, m11, m12, m20, m21, m22) => {
231
+ const entries = [m00, m01, m02, m10, m11, m12, m20, m21, m22];
232
+ if (!entries.every(Number.isFinite)) {
233
+ throw new Error('Rotation matrix contains non-finite values');
234
+ }
235
+ const col0LengthSquared = lengthSquared3(m00, m10, m20);
236
+ const col1LengthSquared = lengthSquared3(m01, m11, m21);
237
+ const col2LengthSquared = lengthSquared3(m02, m12, m22);
238
+ const col01Dot = dot3(m00, m10, m20, m01, m11, m21);
239
+ const col02Dot = dot3(m00, m10, m20, m02, m12, m22);
240
+ const col12Dot = dot3(m01, m11, m21, m02, m12, m22);
241
+ const determinant = det3(m00, m01, m02, m10, m11, m12, m20, m21, m22);
242
+ if (!isNear(col0LengthSquared, 1, ROTATION_MATRIX_TOLERANCE) ||
243
+ !isNear(col1LengthSquared, 1, ROTATION_MATRIX_TOLERANCE) ||
244
+ !isNear(col2LengthSquared, 1, ROTATION_MATRIX_TOLERANCE) ||
245
+ Math.abs(col01Dot) > ROTATION_MATRIX_TOLERANCE ||
246
+ Math.abs(col02Dot) > ROTATION_MATRIX_TOLERANCE ||
247
+ Math.abs(col12Dot) > ROTATION_MATRIX_TOLERANCE ||
248
+ !isNear(determinant, 1, ROTATION_MATRIX_TOLERANCE)) {
249
+ throw new Error('Input matrix is not a valid rotation matrix');
250
+ }
251
+ };
252
+ export function quatFromRotationMatrixUnsafe(toFrameTag, fromFrameTag, matrix) {
253
+ void toFrameTag;
254
+ void fromFrameTag;
255
+ const m00 = matrix[0];
256
+ const m10 = matrix[1];
257
+ const m20 = matrix[2];
258
+ const m01 = matrix[4];
259
+ const m11 = matrix[5];
260
+ const m21 = matrix[6];
261
+ const m02 = matrix[8];
262
+ const m12 = matrix[9];
263
+ const m22 = matrix[10];
264
+ const trace = m00 + m11 + m22;
265
+ let x = 0;
266
+ let y = 0;
267
+ let z = 0;
268
+ let w = 1;
269
+ if (trace > 0) {
270
+ const s = Math.sqrt(trace + 1) * 2;
271
+ w = 0.25 * s;
272
+ x = (m21 - m12) / s;
273
+ y = (m02 - m20) / s;
274
+ z = (m10 - m01) / s;
275
+ }
276
+ else if (m00 > m11 && m00 > m22) {
277
+ const s = Math.sqrt(1 + m00 - m11 - m22) * 2;
278
+ w = (m21 - m12) / s;
279
+ x = 0.25 * s;
280
+ y = (m01 + m10) / s;
281
+ z = (m02 + m20) / s;
282
+ }
283
+ else if (m11 > m22) {
284
+ const s = Math.sqrt(1 + m11 - m00 - m22) * 2;
285
+ w = (m02 - m20) / s;
286
+ x = (m01 + m10) / s;
287
+ y = 0.25 * s;
288
+ z = (m12 + m21) / s;
289
+ }
290
+ else {
291
+ const s = Math.sqrt(1 + m22 - m00 - m11) * 2;
292
+ w = (m10 - m01) / s;
293
+ x = (m02 + m20) / s;
294
+ y = (m12 + m21) / s;
295
+ z = 0.25 * s;
296
+ }
297
+ return quatNormalizeUnsafe(asQuaternion(x, y, z, w));
298
+ }
299
+ export function quatFromRotationMatrix(toFrameTag, fromFrameTag, matrix) {
300
+ const m00 = matrix[0];
301
+ const m10 = matrix[1];
302
+ const m20 = matrix[2];
303
+ const m01 = matrix[4];
304
+ const m11 = matrix[5];
305
+ const m21 = matrix[6];
306
+ const m02 = matrix[8];
307
+ const m12 = matrix[9];
308
+ const m22 = matrix[10];
309
+ assertValidRotationBasis(m00, m01, m02, m10, m11, m12, m20, m21, m22);
310
+ return quatFromRotationMatrixUnsafe(toFrameTag, fromFrameTag, matrix);
311
+ }
192
312
  /**
193
313
  * Creates a quaternion from axis-angle representation.
194
314
  *
@@ -1,13 +1,22 @@
1
1
  import type { Dimensionless, Quantity, UnitExpr } from '../units.js';
2
- declare const frameTagBrand: unique symbol;
3
- declare const vecBrand: unique symbol;
4
- declare const pointBrand: unique symbol;
5
- declare const dirBrand: unique symbol;
6
- declare const deltaBrand: unique symbol;
7
- declare const quatBrand: unique symbol;
8
- declare const matBrand: unique symbol;
9
- declare const linearMatBrand: unique symbol;
10
- declare const projectionMatBrand: unique symbol;
2
+ /** Internal nominal brand symbol for `FrameTag`. */
3
+ export declare const frameTagBrand: unique symbol;
4
+ /** Internal nominal brand symbol for shared vector tuples. */
5
+ export declare const vecBrand: unique symbol;
6
+ /** Internal nominal brand symbol for `Point3`. */
7
+ export declare const pointBrand: unique symbol;
8
+ /** Internal nominal brand symbol for `Dir3`. */
9
+ export declare const dirBrand: unique symbol;
10
+ /** Internal nominal brand symbol for `Delta3`. */
11
+ export declare const deltaBrand: unique symbol;
12
+ /** Internal nominal brand symbol for `Quaternion`. */
13
+ export declare const quatBrand: unique symbol;
14
+ /** Internal nominal brand symbol for `Mat4`. */
15
+ export declare const matBrand: unique symbol;
16
+ /** Internal nominal brand symbol for `LinearMat4`. */
17
+ export declare const linearMatBrand: unique symbol;
18
+ /** Internal nominal brand symbol for `ProjectionMat4`. */
19
+ export declare const projectionMatBrand: unique symbol;
11
20
  /** Compile-time token for explicitly declaring frames. */
12
21
  export type FrameTag<Frame extends string> = string & {
13
22
  readonly [frameTagBrand]: Frame;
@@ -20,7 +29,7 @@ export type FrameTag<Frame extends string> = string & {
20
29
  */
21
30
  export declare const frame: <Frame extends string>(name: Frame) => FrameTag<Frame>;
22
31
  /** Shared raw 3D tuple used by point/direction/displacement variants. */
23
- type Vec3Base<Unit extends UnitExpr, Frame extends string> = readonly [
32
+ export type Vec3Base<Unit extends UnitExpr, Frame extends string> = readonly [
24
33
  Quantity<Unit>,
25
34
  Quantity<Unit>,
26
35
  Quantity<Unit>
@@ -71,6 +80,11 @@ export type Quaternion<ToFrame extends string, FromFrame extends string> = reado
71
80
  number,
72
81
  number
73
82
  ] & {
83
+ readonly x: number;
84
+ readonly y: number;
85
+ readonly z: number;
86
+ readonly w: number;
87
+ } & {
74
88
  readonly [quatBrand]: {
75
89
  readonly toFrame: ToFrame;
76
90
  readonly fromFrame: FromFrame;
@@ -84,6 +98,14 @@ export type Quaternion<ToFrame extends string, FromFrame extends string> = reado
84
98
  * `[m00,m10,m20,m30, m01,m11,m21,m31, m02,m12,m22,m32, m03,m13,m23,m33]`.
85
99
  * The transform APIs multiply points/directions as column vectors on the right,
86
100
  * so `m03/m13/m23` live at indices 12/13/14.
101
+ *
102
+ * Instance helpers:
103
+ * - `translation()` returns the translation column as `Delta3<TranslationUnit, ToFrame>`.
104
+ * - `quat()` extracts orientation from the upper-left 3x3 block and validates that
105
+ * block is a finite orthonormal right-handed rotation basis.
106
+ *
107
+ * `quat()` throws when called on non-rigid/non-rotation linear parts (for example,
108
+ * non-uniform scale or shear matrices).
87
109
  */
88
110
  export type Mat4<ToFrame extends string, FromFrame extends string, TranslationUnit extends UnitExpr> = readonly [
89
111
  number,
@@ -103,6 +125,9 @@ export type Mat4<ToFrame extends string, FromFrame extends string, TranslationUn
103
125
  number,
104
126
  number
105
127
  ] & {
128
+ readonly translation: () => Delta3<TranslationUnit, ToFrame>;
129
+ readonly quat: () => Quaternion<ToFrame, FromFrame>;
130
+ } & {
106
131
  readonly [matBrand]: {
107
132
  readonly translationUnit: TranslationUnit;
108
133
  readonly toFrame: ToFrame;
@@ -147,5 +172,4 @@ export type ProjectionMat4<ToFrame extends string, FromFrame extends string, Dep
147
172
  readonly fromFrame: FromFrame;
148
173
  };
149
174
  };
150
- export {};
151
175
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/geometry3d/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/geometry3d/types.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,22 @@
1
- declare const quantityBrand: unique symbol;
2
- declare const unitTagBrand: unique symbol;
3
- declare const unitExprBrand: unique symbol;
4
- type Count = readonly unknown[];
5
- type UnitExponent<Numerator extends Count = Count, Denominator extends Count = Count> = {
1
+ /** Internal nominal brand symbol for `Quantity`. */
2
+ export declare const quantityBrand: unique symbol;
3
+ /** Internal nominal brand symbol for `UnitTag`. */
4
+ export declare const unitTagBrand: unique symbol;
5
+ /** Internal nominal brand symbol for `UnitExpr` factor maps. */
6
+ export declare const unitExprBrand: unique symbol;
7
+ /** Type-level tuple counter used for exponent arithmetic. */
8
+ export type Count = readonly unknown[];
9
+ /** Rational exponent represented as numerator/denominator tuple lengths. */
10
+ export type UnitExponent<Numerator extends Count = Count, Denominator extends Count = Count> = {
6
11
  readonly num: readonly [...Numerator];
7
12
  readonly den: readonly [...Denominator];
8
13
  };
9
- type UnitMap = {
14
+ /** Map of unit token to its rational exponent. */
15
+ export type UnitMap = {
10
16
  readonly [Token: string]: UnitExponent;
11
17
  };
12
- type EmptyUnitMap = Record<never, UnitExponent>;
18
+ /** Empty unit-factor map used by `none`. */
19
+ export type EmptyUnitMap = Record<never, UnitExponent>;
13
20
  /**
14
21
  * Internal normalized unit representation used only at the type level.
15
22
  *
@@ -17,7 +24,7 @@ type EmptyUnitMap = Record<never, UnitExponent>;
17
24
  * - `m/s^2` => `{ factors: { m: { num: [..1], den: [] }, s: { num: [], den: [..2] } } }`
18
25
  * - `none` => `{ factors: {} }`
19
26
  */
20
- type UnitParts<Factors extends UnitMap = EmptyUnitMap> = {
27
+ export type UnitParts<Factors extends UnitMap = EmptyUnitMap> = {
21
28
  readonly factors: Factors;
22
29
  readonly [unitExprBrand]: Extract<keyof Factors, string>;
23
30
  };
@@ -29,7 +36,7 @@ type UnitParts<Factors extends UnitMap = EmptyUnitMap> = {
29
36
  * loses type distinctiveness. Avoid passing non-literal or malformed strings
30
37
  * to `unit()`.
31
38
  */
32
- type UnknownUnit = UnitParts<UnitMap>;
39
+ export type UnknownUnit = UnitParts<UnitMap>;
33
40
  /** Normalized compile-time unit representation. */
34
41
  export type UnitExpr = UnknownUnit;
35
42
  /** Canonical dimensionless unit representation. */
@@ -38,33 +45,40 @@ export type Dimensionless = UnitFromString<'none'>;
38
45
  export type NoInfer<ValueType> = [
39
46
  ValueType
40
47
  ][ValueType extends unknown ? 0 : never];
41
- type ZeroExponent = UnitExponent<[], []>;
42
- type IsUnknownMap<Factors extends UnitMap> = string extends keyof Factors ? true : false;
43
- type CancelCounts<Numerator extends Count, Denominator extends Count> = Numerator extends readonly [unknown, ...infer NumTail extends unknown[]] ? Denominator extends readonly [unknown, ...infer DenTail extends unknown[]] ? CancelCounts<NumTail, DenTail> : [Numerator, Denominator] : [Numerator, Denominator];
44
- type ExponentFor<Factors extends UnitMap, Token extends string> = Token extends keyof Factors ? Factors[Token] : ZeroExponent;
45
- type IsZeroExponent<Exponent extends UnitExponent> = Exponent['num'] extends readonly [] ? Exponent['den'] extends readonly [] ? true : false : false;
46
- type NormalizeMap<Factors extends UnitMap> = {
48
+ /** Zero exponent helper (`x^0`). */
49
+ export type ZeroExponent = UnitExponent<[], []>;
50
+ /** Detects unresolved unit maps that lost token specificity. */
51
+ export type IsUnknownMap<Factors extends UnitMap> = string extends keyof Factors ? true : false;
52
+ /** Cancels numerator/denominator tuple counts elementwise. */
53
+ export type CancelCounts<Numerator extends Count, Denominator extends Count> = Numerator extends readonly [unknown, ...infer NumTail extends unknown[]] ? Denominator extends readonly [unknown, ...infer DenTail extends unknown[]] ? CancelCounts<NumTail, DenTail> : [Numerator, Denominator] : [Numerator, Denominator];
54
+ /** Returns exponent for a token or zero when missing. */
55
+ export type ExponentFor<Factors extends UnitMap, Token extends string> = Token extends keyof Factors ? Factors[Token] : ZeroExponent;
56
+ /** Predicate for zero exponent. */
57
+ export type IsZeroExponent<Exponent extends UnitExponent> = Exponent['num'] extends readonly [] ? Exponent['den'] extends readonly [] ? true : false : false;
58
+ /** Removes zero-exponent entries from a factor map. */
59
+ export type NormalizeMap<Factors extends UnitMap> = {
47
60
  readonly [Token in keyof Factors as Token extends string ? IsZeroExponent<Factors[Token]> extends true ? never : Token : never]: Factors[Token];
48
61
  };
49
62
  /** Normalizes a full `UnitExpr` object. */
50
- type NormalizeUnit<Unit extends UnitExpr> = IsUnknownMap<Unit['factors']> extends true ? UnknownUnit : UnitParts<NormalizeMap<Unit['factors']>>;
51
- type IsNaturalNumberText<Value extends string> = Value extends '' ? false : Value extends `-${string}` ? false : Value extends `${string}.${string}` ? false : Value extends `${string}e${string}` | `${string}E${string}` ? false : true;
63
+ export type NormalizeUnit<Unit extends UnitExpr> = IsUnknownMap<Unit['factors']> extends true ? UnknownUnit : UnitParts<NormalizeMap<Unit['factors']>>;
64
+ /** Checks whether a string literal is an unsigned integer text form. */
65
+ export type IsNaturalNumberText<Value extends string> = Value extends '' ? false : Value extends `-${string}` ? false : Value extends `${string}.${string}` ? false : Value extends `${string}e${string}` | `${string}E${string}` ? false : true;
52
66
  /**
53
67
  * Parses a natural-number literal string (`'2'`) into its number literal (`2`).
54
68
  *
55
69
  * Returns `null` for negative/decimal/exponential forms so callers can
56
70
  * safely fall back to opaque token handling for invalid exponents.
57
71
  */
58
- type ParseNat<Value extends string> = IsNaturalNumberText<Value> extends true ? Value extends `${infer Parsed extends number}` ? `${Parsed}` extends Value ? Parsed : null : null : null;
72
+ export type ParseNat<Value extends string> = IsNaturalNumberText<Value> extends true ? Value extends `${infer Parsed extends number}` ? `${Parsed}` extends Value ? Parsed : null : null : null;
59
73
  /** Builds `Count` tuple entries (`s^2` -> [unknown, unknown]). */
60
- type RepeatCount<Count extends number, Output extends unknown[] = []> = Output['length'] extends Count ? Output : RepeatCount<Count, [...Output, unknown]>;
74
+ export type RepeatCount<Count extends number, Output extends unknown[] = []> = Output['length'] extends Count ? Output : RepeatCount<Count, [...Output, unknown]>;
61
75
  /**
62
76
  * Parses one factor token:
63
77
  * - `none` => dimensionless
64
78
  * - `m` => m^1
65
79
  * - `s^2` => s^2
66
80
  */
67
- type ParseFactor<Factor extends string> = string extends Factor ? UnknownUnit : Factor extends '' ? UnknownUnit : Factor extends 'none' ? UnitParts<EmptyUnitMap> : Factor extends `${infer Base}^${infer ExponentText}` ? Base extends '' ? UnknownUnit : ParseNat<ExponentText> extends infer Exponent extends number ? UnitParts<{
81
+ export type ParseFactor<Factor extends string> = string extends Factor ? UnknownUnit : Factor extends '' ? UnknownUnit : Factor extends 'none' ? UnitParts<EmptyUnitMap> : Factor extends `${infer Base}^${infer ExponentText}` ? Base extends '' ? UnknownUnit : ParseNat<ExponentText> extends infer Exponent extends number ? UnitParts<{
68
82
  readonly [Token in Base]: UnitExponent<RepeatCount<Exponent>, []>;
69
83
  }> : UnitParts<{
70
84
  readonly [Token in Factor]: UnitExponent<[unknown], []>;
@@ -77,7 +91,7 @@ type ParseFactor<Factor extends string> = string extends Factor ? UnknownUnit :
77
91
  * Example:
78
92
  * - `m/s^2` -> ['m', '/', 's^2']
79
93
  */
80
- type TakeTerm<Source extends string, Current extends string = ''> = string extends Source ? [Source, '', ''] : Source extends `${infer Character}${infer Rest}` ? Character extends '*' | '/' ? [Current, Character, Rest] : TakeTerm<Rest, `${Current}${Character}`> : [Current, '', ''];
94
+ export type TakeTerm<Source extends string, Current extends string = ''> = string extends Source ? [Source, '', ''] : Source extends `${infer Character}${infer Rest}` ? Character extends '*' | '/' ? [Current, Character, Rest] : TakeTerm<Rest, `${Current}${Character}`> : [Current, '', ''];
81
95
  /** Type-level unit multiplication helper. */
82
96
  export type MulUnit<LeftUnit extends UnitExpr, RightUnit extends UnitExpr> = IsUnknownMap<LeftUnit['factors']> extends true ? UnknownUnit : IsUnknownMap<RightUnit['factors']> extends true ? UnknownUnit : UnitParts<NormalizeMap<{
83
97
  readonly [Token in keyof LeftUnit['factors'] | keyof RightUnit['factors'] as Token extends string ? Token : never]: CancelCounts<[
@@ -104,9 +118,12 @@ export type DivUnit<LeftUnit extends UnitExpr, RightUnit extends UnitExpr> = IsU
104
118
  infer Denominator extends Count
105
119
  ] ? UnitExponent<Numerator, Denominator> : never;
106
120
  }>>;
107
- type HalfCount<Source extends Count, Output extends unknown[] = []> = Source extends readonly [unknown, unknown, ...infer Tail extends unknown[]] ? HalfCount<Tail, [...Output, unknown]> : Source extends readonly [] ? Output : never;
108
- type HalfFactor<Factor extends UnitExponent> = UnitExponent<HalfCount<Factor['num']>, HalfCount<Factor['den']>>;
109
- type HasInvalidHalf<Factors extends UnitMap> = true extends {
121
+ /** Halves a tuple length; returns `never` for odd lengths. */
122
+ export type HalfCount<Source extends Count, Output extends unknown[] = []> = Source extends readonly [unknown, unknown, ...infer Tail extends unknown[]] ? HalfCount<Tail, [...Output, unknown]> : Source extends readonly [] ? Output : never;
123
+ /** Halves both exponent numerator and denominator tuple counts. */
124
+ export type HalfFactor<Factor extends UnitExponent> = UnitExponent<HalfCount<Factor['num']>, HalfCount<Factor['den']>>;
125
+ /** Detects whether any factor has an odd exponent component. */
126
+ export type HasInvalidHalf<Factors extends UnitMap> = true extends {
110
127
  [Token in keyof Factors]: HalfCount<Factors[Token]['num']> extends never ? true : HalfCount<Factors[Token]['den']> extends never ? true : false;
111
128
  }[keyof Factors] ? true : false;
112
129
  /** Type-level square-root helper for normalized unit expressions. */
@@ -119,13 +136,13 @@ export type SqrtUnit<Unit extends UnitExpr> = NormalizeUnit<Unit> extends infer
119
136
  * 2. Apply pending operator to accumulated unit
120
137
  * 3. Continue until no operator remains
121
138
  */
122
- type ParseUnitTail<Accumulated extends UnitExpr, Operator extends string, Rest extends string> = Operator extends '' ? NormalizeUnit<Accumulated> : TakeTerm<Rest> extends [
139
+ export type ParseUnitTail<Accumulated extends UnitExpr, Operator extends string, Rest extends string> = Operator extends '' ? NormalizeUnit<Accumulated> : TakeTerm<Rest> extends [
123
140
  infer NextFactor extends string,
124
141
  infer NextOperator extends string,
125
142
  infer NextRest extends string
126
143
  ] ? ParseFactor<NextFactor> extends infer NextUnit extends UnitExpr ? ParseUnitTail<Operator extends '*' ? MulUnit<Accumulated, NextUnit> : Operator extends '/' ? DivUnit<Accumulated, NextUnit> : Accumulated, NextOperator, NextRest> : never : never;
127
144
  /** Parses the first factor, then delegates to `ParseUnitTail`. */
128
- type ParseUnitExpr<Expr extends string> = TakeTerm<Expr> extends [
145
+ export type ParseUnitExpr<Expr extends string> = TakeTerm<Expr> extends [
129
146
  infer FirstFactor extends string,
130
147
  infer FirstOperator extends string,
131
148
  infer Rest extends string
@@ -346,5 +363,4 @@ export declare const sum: <Unit extends UnitExpr>(values: readonly Quantity<Unit
346
363
  * @returns Arithmetic mean in the same unit.
347
364
  */
348
365
  export declare const average: <Unit extends UnitExpr>(values: readonly [Quantity<Unit>, ...Quantity<Unit>[]]) => Quantity<Unit>;
349
- export {};
350
366
  //# sourceMappingURL=units.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/src/units.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/src/units.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/tests/assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEpD,0CAA0C;AAC1C,eAAO,MAAM,MAAM,GACjB,WAAW,OAAO,EAClB,gBAA4B,KAC3B,IAIF,CAAC;AAgDF,gDAAgD;AAChD,eAAO,MAAM,YAAY,GAAI,UAAU,EAAE,YAAY,EACnD,QAAQ,UAAU,EAClB,UAAU,YAAY,EACtB,gBAAuC,KACtC,IAQF,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,MAAM,EACd,UAAU,MAAM,EAChB,kBAAiB,EACjB,gBAAqD,KACpD,IAMF,CAAC;AAEF,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,KAAK,MAAM,EACX,KAAK,MAAM,EACX,kBAAa,EACb,gBAAyC,KACxC,IAMF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC3C,kBAAoB,KACnB,IAIF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,SAAS,MAAM,EAAE,EACzB,UAAU,SAAS,MAAM,EAAE,EAC3B,kBAAoB,KACnB,IAmBF,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,YAAY,GACvB,IAAI,MAAM,OAAO,EACjB,YAAY,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,EAC3C,kBAAkB,MAAM,KACvB,IA2BF,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,GAAI,IAAI,SAAS,QAAQ,EACtD,OAAO,QAAQ,CAAC,IAAI,CAAC,EACrB,QAAQ,QAAQ,CAAC,IAAI,CAAC,KACrB,IAEF,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix4.test.d.ts","sourceRoot":"","sources":["../../src/tests/matrix4.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quaternion.test.d.ts","sourceRoot":"","sources":["../../src/tests/quaternion.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_safety.test.d.ts","sourceRoot":"","sources":["../../src/tests/type_safety.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.test.d.ts","sourceRoot":"","sources":["../../src/tests/units.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector3.test.d.ts","sourceRoot":"","sources":["../../src/tests/vector3.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { test } from 'vitest';
2
+ export const Deno = { test };
3
+ export const dntGlobalThis = globalThis;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sachitv/safe-math-ts",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "A zero-dependency Deno/TypeScript 3D math library with strict compile-time safety.",
5
5
  "homepage": "https://github.com/sachitv/safe-math-ts",
6
6
  "repository": {
@@ -18,7 +18,9 @@
18
18
  "types": "./esm/mod.d.ts"
19
19
  }
20
20
  },
21
- "scripts": {},
21
+ "scripts": {
22
+ "test": "node test_runner.cjs"
23
+ },
22
24
  "engines": {
23
25
  "node": ">=22"
24
26
  },
@@ -26,9 +28,16 @@
26
28
  "publishConfig": {
27
29
  "access": "public"
28
30
  },
29
- "type": "module",
30
31
  "devDependencies": {
31
- "@types/node": "^20.9.0"
32
+ "@types/node": "^20.9.0",
33
+ "picocolors": "^1.0.0",
34
+ "@deno/shim-deno": "~0.18.0",
35
+ "vitest": "^3.0.0",
36
+ "@vitest/browser": "^3.0.0",
37
+ "playwright": "^1.50.0",
38
+ "@cloudflare/vitest-pool-workers": "^0.12.18",
39
+ "wrangler": "^3.101.0"
32
40
  },
33
- "_generatedBy": "dnt@dev"
34
- }
41
+ "_generatedBy": "dnt@dev",
42
+ "type": "module"
43
+ }