@adobe/data 0.9.54 → 0.9.56
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/dist/cache/blob-store.browser.test.d.ts +1 -0
- package/dist/cache/blob-store.browser.test.js +122 -0
- package/dist/cache/blob-store.browser.test.js.map +1 -0
- package/dist/cache/data-cache.browser.test.d.ts +1 -0
- package/dist/cache/data-cache.browser.test.js +41 -0
- package/dist/cache/data-cache.browser.test.js.map +1 -0
- package/dist/cache/expiring-data-cache.browser.test.d.ts +1 -0
- package/dist/cache/expiring-data-cache.browser.test.js +42 -0
- package/dist/cache/expiring-data-cache.browser.test.js.map +1 -0
- package/dist/cache/functions/functions.browser.test.d.ts +1 -0
- package/dist/cache/functions/functions.browser.test.js +72 -0
- package/dist/cache/functions/functions.browser.test.js.map +1 -0
- package/dist/data.d.ts +1 -1
- package/dist/ecs/database/public/create-database-scheduler.browser.test.d.ts +1 -0
- package/dist/ecs/database/public/create-database-scheduler.browser.test.js +67 -0
- package/dist/ecs/database/public/create-database-scheduler.browser.test.js.map +1 -0
- package/dist/ecs/database/public/create-database.test.js +5 -1
- package/dist/ecs/database/public/create-database.test.js.map +1 -1
- package/dist/ecs/database/transactional-store/coalesce-actions.js +15 -41
- package/dist/ecs/database/transactional-store/coalesce-actions.js.map +1 -1
- package/dist/ecs/database/transactional-store/coalesce-actions.test.js +30 -1
- package/dist/ecs/database/transactional-store/coalesce-actions.test.js.map +1 -1
- package/dist/ecs/persistence-service/create-storage-persistence-service.browser.test.d.ts +1 -0
- package/dist/ecs/persistence-service/create-storage-persistence-service.browser.test.js +52 -0
- package/dist/ecs/persistence-service/create-storage-persistence-service.browser.test.js.map +1 -0
- package/dist/functions/serialization/serialize-to-storage.browser.test.d.ts +1 -0
- package/dist/functions/serialization/serialize-to-storage.browser.test.js +161 -0
- package/dist/functions/serialization/serialize-to-storage.browser.test.js.map +1 -0
- package/dist/internal/typed-array/get-byte-size.d.ts +1 -1
- package/dist/is-data.d.ts +1 -1
- package/dist/math/aabb/face/all.d.ts +2 -0
- package/dist/math/aabb/face/all.js +10 -0
- package/dist/math/aabb/face/all.js.map +1 -0
- package/dist/math/aabb/face/face.d.ts +4 -0
- package/dist/math/aabb/face/face.js +3 -0
- package/dist/math/aabb/face/face.js.map +1 -0
- package/dist/math/aabb/face/from-position.d.ts +9 -0
- package/dist/math/aabb/face/from-position.js +32 -0
- package/dist/math/aabb/face/from-position.js.map +1 -0
- package/dist/math/aabb/face/from-position.test.d.ts +1 -0
- package/dist/math/aabb/face/from-position.test.js +21 -0
- package/dist/math/aabb/face/from-position.test.js.map +1 -0
- package/dist/math/aabb/face/get-adjacent.d.ts +3 -0
- package/dist/math/aabb/face/get-adjacent.js +24 -0
- package/dist/math/aabb/face/get-adjacent.js.map +1 -0
- package/dist/math/aabb/face/get-adjacent.test.d.ts +1 -0
- package/dist/math/aabb/face/get-adjacent.test.js +27 -0
- package/dist/math/aabb/face/get-adjacent.test.js.map +1 -0
- package/dist/math/aabb/face/get-faces.d.ts +3 -0
- package/dist/math/aabb/face/get-faces.js +11 -0
- package/dist/math/aabb/face/get-faces.js.map +1 -0
- package/dist/math/aabb/face/get-faces.test.d.ts +1 -0
- package/dist/math/aabb/face/get-faces.test.js +16 -0
- package/dist/math/aabb/face/get-faces.test.js.map +1 -0
- package/dist/math/aabb/face/get-name.d.ts +3 -0
- package/dist/math/aabb/face/get-name.js +7 -0
- package/dist/math/aabb/face/get-name.js.map +1 -0
- package/dist/math/aabb/face/get-name.test.d.ts +1 -0
- package/dist/math/aabb/face/get-name.test.js +13 -0
- package/dist/math/aabb/face/get-name.test.js.map +1 -0
- package/dist/math/aabb/face/get-normal.d.ts +4 -0
- package/dist/math/aabb/face/get-normal.js +11 -0
- package/dist/math/aabb/face/get-normal.js.map +1 -0
- package/dist/math/aabb/face/get-normal.test.d.ts +1 -0
- package/dist/math/aabb/face/get-normal.test.js +13 -0
- package/dist/math/aabb/face/get-normal.test.js.map +1 -0
- package/dist/math/aabb/face/get-opposite.d.ts +3 -0
- package/dist/math/aabb/face/get-opposite.js +27 -0
- package/dist/math/aabb/face/get-opposite.js.map +1 -0
- package/dist/math/aabb/face/get-opposite.test.d.ts +1 -0
- package/dist/math/aabb/face/get-opposite.test.js +20 -0
- package/dist/math/aabb/face/get-opposite.test.js.map +1 -0
- package/dist/math/aabb/face/internals.d.ts +6 -0
- package/dist/math/aabb/face/internals.js +34 -0
- package/dist/math/aabb/face/internals.js.map +1 -0
- package/dist/math/aabb/face/is-adjacent.d.ts +3 -0
- package/dist/math/aabb/face/is-adjacent.js +7 -0
- package/dist/math/aabb/face/is-adjacent.js.map +1 -0
- package/dist/math/aabb/face/is-adjacent.test.d.ts +1 -0
- package/dist/math/aabb/face/is-adjacent.test.js +15 -0
- package/dist/math/aabb/face/is-adjacent.test.js.map +1 -0
- package/dist/math/aabb/face/is-opposite.d.ts +3 -0
- package/dist/math/aabb/face/is-opposite.js +7 -0
- package/dist/math/aabb/face/is-opposite.js.map +1 -0
- package/dist/math/aabb/face/is-opposite.test.d.ts +1 -0
- package/dist/math/aabb/face/is-opposite.test.js +15 -0
- package/dist/math/aabb/face/is-opposite.test.js.map +1 -0
- package/dist/math/aabb/face/neg-x.d.ts +2 -0
- package/dist/math/aabb/face/neg-x.js +4 -0
- package/dist/math/aabb/face/neg-x.js.map +1 -0
- package/dist/math/aabb/face/neg-y.d.ts +2 -0
- package/dist/math/aabb/face/neg-y.js +4 -0
- package/dist/math/aabb/face/neg-y.js.map +1 -0
- package/dist/math/aabb/face/neg-z.d.ts +2 -0
- package/dist/math/aabb/face/neg-z.js +4 -0
- package/dist/math/aabb/face/neg-z.js.map +1 -0
- package/dist/math/aabb/face/none.d.ts +2 -0
- package/dist/math/aabb/face/none.js +4 -0
- package/dist/math/aabb/face/none.js.map +1 -0
- package/dist/math/aabb/face/pos-x.d.ts +2 -0
- package/dist/math/aabb/face/pos-x.js +4 -0
- package/dist/math/aabb/face/pos-x.js.map +1 -0
- package/dist/math/aabb/face/pos-y.d.ts +2 -0
- package/dist/math/aabb/face/pos-y.js +4 -0
- package/dist/math/aabb/face/pos-y.js.map +1 -0
- package/dist/math/aabb/face/pos-z.d.ts +2 -0
- package/dist/math/aabb/face/pos-z.js +4 -0
- package/dist/math/aabb/face/pos-z.js.map +1 -0
- package/dist/math/aabb/face/public.d.ts +16 -1
- package/dist/math/aabb/face/public.js +16 -1
- package/dist/math/aabb/face/public.js.map +1 -1
- package/dist/math/aabb/public.d.ts +1 -1
- package/dist/math/aabb/public.js +1 -1
- package/dist/math/aabb/public.js.map +1 -1
- package/dist/service/agentic-service/action.d.ts +8 -4
- package/dist/service/agentic-service/create.d.ts +5 -1
- package/dist/service/agentic-service/create.js +1 -1
- package/dist/service/agentic-service/create.js.map +1 -1
- package/dist/service/agentic-service/create.test.js +1 -1
- package/dist/service/agentic-service/create.test.js.map +1 -1
- package/dist/service/agentic-service/create.type-test.js +23 -0
- package/dist/service/agentic-service/create.type-test.js.map +1 -1
- package/dist/service/async-data-service/create-lazy.test.js.map +1 -1
- package/dist/service/async-data-service/is-valid.d.ts +1 -1
- package/dist/test-setup.d.ts +1 -0
- package/dist/test-setup.js +90 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
|
+
import { serializeToStorage, deserializeFromStorage } from "./serialize-to-storage.js";
|
|
4
|
+
import { createBlobStore } from "../../cache/blob-store.js";
|
|
5
|
+
describe("serializeToStorage", () => {
|
|
6
|
+
let mockStorage;
|
|
7
|
+
let testBlobStore;
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
mockStorage = {
|
|
10
|
+
setItem: vi.fn(),
|
|
11
|
+
getItem: vi.fn(),
|
|
12
|
+
removeItem: vi.fn(),
|
|
13
|
+
clear: vi.fn(),
|
|
14
|
+
length: 0,
|
|
15
|
+
key: vi.fn(),
|
|
16
|
+
};
|
|
17
|
+
testBlobStore = await createBlobStore();
|
|
18
|
+
vi.clearAllMocks();
|
|
19
|
+
});
|
|
20
|
+
it("should serialize data to storage with blob references", async () => {
|
|
21
|
+
const data = {
|
|
22
|
+
message: "hello world",
|
|
23
|
+
numbers: new Uint8Array([1, 2, 3, 4, 5]),
|
|
24
|
+
coordinates: new Float32Array([10.5, 20.3])
|
|
25
|
+
};
|
|
26
|
+
// Use the real blobStore to get actual references
|
|
27
|
+
await serializeToStorage(data, "test-id", mockStorage);
|
|
28
|
+
expect(mockStorage.setItem).toHaveBeenCalledWith("test-id", expect.any(String));
|
|
29
|
+
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
30
|
+
expect(storedData).toHaveProperty("json");
|
|
31
|
+
expect(storedData).toHaveProperty("binary");
|
|
32
|
+
expect(storedData.json).toHaveProperty("localBlobRef");
|
|
33
|
+
expect(storedData.binary).toHaveProperty("localBlobRef");
|
|
34
|
+
});
|
|
35
|
+
it("should use sessionStorage by default", async () => {
|
|
36
|
+
const data = { test: "data" };
|
|
37
|
+
await serializeToStorage(data, "test-id");
|
|
38
|
+
// This test verifies the function doesn't throw when using default storage
|
|
39
|
+
// The actual storage interaction would be with the real sessionStorage
|
|
40
|
+
expect(true).toBe(true); // Placeholder assertion
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe("deserializeFromStorage", () => {
|
|
44
|
+
let mockStorage;
|
|
45
|
+
let testBlobStore;
|
|
46
|
+
beforeEach(async () => {
|
|
47
|
+
mockStorage = {
|
|
48
|
+
setItem: vi.fn(),
|
|
49
|
+
getItem: vi.fn(),
|
|
50
|
+
removeItem: vi.fn(),
|
|
51
|
+
clear: vi.fn(),
|
|
52
|
+
length: 0,
|
|
53
|
+
key: vi.fn(),
|
|
54
|
+
};
|
|
55
|
+
testBlobStore = await createBlobStore();
|
|
56
|
+
vi.clearAllMocks();
|
|
57
|
+
});
|
|
58
|
+
it("should deserialize data from storage", async () => {
|
|
59
|
+
const originalData = {
|
|
60
|
+
message: "hello world",
|
|
61
|
+
numbers: new Uint8Array([1, 2, 3, 4, 5]),
|
|
62
|
+
coordinates: new Float32Array([10.5, 20.3])
|
|
63
|
+
};
|
|
64
|
+
// First serialize the data to get real blob references
|
|
65
|
+
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
66
|
+
// Get the stored data
|
|
67
|
+
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
68
|
+
// Mock the getItem to return our stored data
|
|
69
|
+
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
70
|
+
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
71
|
+
expect(mockStorage.getItem).toHaveBeenCalledWith("test-id");
|
|
72
|
+
expect(result).not.toBeNull();
|
|
73
|
+
expect(result).toEqual(originalData);
|
|
74
|
+
});
|
|
75
|
+
it("should return null when no data exists", async () => {
|
|
76
|
+
mockStorage.getItem.mockReturnValue(null);
|
|
77
|
+
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
78
|
+
expect(result).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
it("should return null when blob retrieval fails", async () => {
|
|
81
|
+
// Create invalid blob references
|
|
82
|
+
const invalidRefs = {
|
|
83
|
+
json: { localBlobRef: "invalid-hash" },
|
|
84
|
+
binary: { localBlobRef: "invalid-hash" }
|
|
85
|
+
};
|
|
86
|
+
mockStorage.getItem.mockReturnValue(JSON.stringify(invalidRefs));
|
|
87
|
+
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
88
|
+
expect(result).toBeNull();
|
|
89
|
+
});
|
|
90
|
+
it("should use sessionStorage by default", async () => {
|
|
91
|
+
// For this test, we need to mock the real sessionStorage since the function uses it by default
|
|
92
|
+
const originalSessionStorage = globalThis.sessionStorage;
|
|
93
|
+
const mockSessionStorage = {
|
|
94
|
+
getItem: vi.fn().mockReturnValue(null),
|
|
95
|
+
setItem: vi.fn(),
|
|
96
|
+
removeItem: vi.fn(),
|
|
97
|
+
clear: vi.fn(),
|
|
98
|
+
length: 0,
|
|
99
|
+
key: vi.fn(),
|
|
100
|
+
};
|
|
101
|
+
Object.defineProperty(globalThis, 'sessionStorage', {
|
|
102
|
+
value: mockSessionStorage,
|
|
103
|
+
writable: true,
|
|
104
|
+
});
|
|
105
|
+
try {
|
|
106
|
+
await deserializeFromStorage("test-id");
|
|
107
|
+
expect(mockSessionStorage.getItem).toHaveBeenCalledWith("test-id");
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
Object.defineProperty(globalThis, 'sessionStorage', {
|
|
111
|
+
value: originalSessionStorage,
|
|
112
|
+
writable: true,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
it("should handle complex nested data with all typed arrays", async () => {
|
|
117
|
+
const originalData = {
|
|
118
|
+
user: {
|
|
119
|
+
name: "John Doe",
|
|
120
|
+
scores: new Uint16Array([95, 87, 92, 88]),
|
|
121
|
+
coordinates: new Float32Array([10.5, 20.3, 30.7])
|
|
122
|
+
},
|
|
123
|
+
metadata: {
|
|
124
|
+
timestamp: 1234567890,
|
|
125
|
+
flags: new Uint8Array([1, 0, 1, 1, 0]),
|
|
126
|
+
measurements: new Float64Array([1.23456789, 2.34567890, 3.45678901])
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
// First serialize the data to get real blob references
|
|
130
|
+
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
131
|
+
// Get the stored data
|
|
132
|
+
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
133
|
+
// Mock the getItem to return our stored data
|
|
134
|
+
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
135
|
+
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
136
|
+
expect(result).not.toBeNull();
|
|
137
|
+
expect(result).toEqual(originalData);
|
|
138
|
+
});
|
|
139
|
+
it("should handle all supported typed arrays", async () => {
|
|
140
|
+
const originalData = {
|
|
141
|
+
uint8Array: new Uint8Array([1, 2, 3, 4, 5]),
|
|
142
|
+
uint16Array: new Uint16Array([1000, 2000, 3000]),
|
|
143
|
+
uint32Array: new Uint32Array([1000000, 2000000]),
|
|
144
|
+
int8Array: new Int8Array([-1, -2, -3]),
|
|
145
|
+
int16Array: new Int16Array([-1000, -2000]),
|
|
146
|
+
int32Array: new Int32Array([-1000000, -2000000]),
|
|
147
|
+
float32Array: new Float32Array([1.5, 2.5, 3.5]),
|
|
148
|
+
float64Array: new Float64Array([1.123456789, 2.987654321])
|
|
149
|
+
};
|
|
150
|
+
// First serialize the data to get real blob references
|
|
151
|
+
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
152
|
+
// Get the stored data
|
|
153
|
+
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
154
|
+
// Mock the getItem to return our stored data
|
|
155
|
+
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
156
|
+
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
157
|
+
expect(result).not.toBeNull();
|
|
158
|
+
expect(result).toEqual(originalData);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=serialize-to-storage.browser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize-to-storage.browser.test.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-storage.browser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { TypedArrayConstructor } from "../../types/typed-array-constructer.js";
|
|
2
|
-
export declare const getByteSize: (typedArrayConstructor: TypedArrayConstructor) =>
|
|
2
|
+
export declare const getByteSize: (typedArrayConstructor: TypedArrayConstructor) => 1 | 2 | 4 | 8;
|
package/dist/is-data.d.ts
CHANGED
|
@@ -6,5 +6,5 @@ export type IsFullyReadonly<T> = EqualReadonly<T, Readonly<T>>;
|
|
|
6
6
|
export type IsData<T> = [
|
|
7
7
|
T
|
|
8
8
|
] extends [Primitive] ? true : T extends ReadonlyArray<infer U> ? EqualReadonly<T, ReadonlyArray<U>> extends true ? IsData<U> : false : T extends object ? IsFullyReadonly<T> extends true ? {
|
|
9
|
-
[K in keyof T]-?: IsData<T[K]
|
|
9
|
+
[K in keyof T]-?: IsData<Exclude<T[K], undefined>>;
|
|
10
10
|
}[keyof T] extends false ? false : true : false : false;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { NEG_X } from "./neg-x.js";
|
|
3
|
+
import { NEG_Y } from "./neg-y.js";
|
|
4
|
+
import { NEG_Z } from "./neg-z.js";
|
|
5
|
+
import { POS_X } from "./pos-x.js";
|
|
6
|
+
import { POS_Y } from "./pos-y.js";
|
|
7
|
+
import { POS_Z } from "./pos-z.js";
|
|
8
|
+
/** All six single-face bits */
|
|
9
|
+
export const ALL = POS_Z | POS_X | NEG_Z | NEG_X | POS_Y | NEG_Y;
|
|
10
|
+
//# sourceMappingURL=all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/all.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"face.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/face.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAOvD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Vec3 } from "../../vec3/index.js";
|
|
2
|
+
import { Aabb } from "../index.js";
|
|
3
|
+
import type { Face } from "./face.js";
|
|
4
|
+
/**
|
|
5
|
+
* Single-face bit closest to `position` in normalized box space (unit cube centered on origin by default).
|
|
6
|
+
* @param position World position of the sample point
|
|
7
|
+
* @param aabb Bounds used to compute the box center (defaults to unit cube)
|
|
8
|
+
*/
|
|
9
|
+
export declare const fromPosition: (position: Vec3, aabb?: Aabb) => Face;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { Aabb } from "../index.js";
|
|
3
|
+
import { NEG_X } from "./neg-x.js";
|
|
4
|
+
import { NEG_Y } from "./neg-y.js";
|
|
5
|
+
import { NEG_Z } from "./neg-z.js";
|
|
6
|
+
import { POS_X } from "./pos-x.js";
|
|
7
|
+
import { POS_Y } from "./pos-y.js";
|
|
8
|
+
import { POS_Z } from "./pos-z.js";
|
|
9
|
+
/**
|
|
10
|
+
* Single-face bit closest to `position` in normalized box space (unit cube centered on origin by default).
|
|
11
|
+
* @param position World position of the sample point
|
|
12
|
+
* @param aabb Bounds used to compute the box center (defaults to unit cube)
|
|
13
|
+
*/
|
|
14
|
+
export const fromPosition = (position, aabb = Aabb.unit) => {
|
|
15
|
+
const aabbCenter = Aabb.center(aabb);
|
|
16
|
+
const localPos = [
|
|
17
|
+
position[0] - aabbCenter[0],
|
|
18
|
+
position[1] - aabbCenter[1],
|
|
19
|
+
position[2] - aabbCenter[2],
|
|
20
|
+
];
|
|
21
|
+
const absX = Math.abs(localPos[0]);
|
|
22
|
+
const absY = Math.abs(localPos[1]);
|
|
23
|
+
const absZ = Math.abs(localPos[2]);
|
|
24
|
+
if (absX >= absY && absX >= absZ) {
|
|
25
|
+
return localPos[0] > 0 ? POS_X : NEG_X;
|
|
26
|
+
}
|
|
27
|
+
if (absY >= absZ) {
|
|
28
|
+
return localPos[1] > 0 ? POS_Y : NEG_Y;
|
|
29
|
+
}
|
|
30
|
+
return localPos[2] > 0 ? POS_Z : NEG_Z;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=from-position.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-position.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/from-position.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAc,EAAE,OAAa,IAAI,CAAC,IAAI,EAAQ,EAAE;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG;QACb,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;QAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;KAC9B,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACf,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { fromPosition } from "./from-position.js";
|
|
4
|
+
import { NEG_X } from "./neg-x.js";
|
|
5
|
+
import { NEG_Y } from "./neg-y.js";
|
|
6
|
+
import { NEG_Z } from "./neg-z.js";
|
|
7
|
+
import { POS_X } from "./pos-x.js";
|
|
8
|
+
import { POS_Y } from "./pos-y.js";
|
|
9
|
+
import { POS_Z } from "./pos-z.js";
|
|
10
|
+
describe("fromPosition", () => {
|
|
11
|
+
it("selects the dominant-axis face on a unit cube", () => {
|
|
12
|
+
const aabb = { min: [-1, -1, -1], max: [1, 1, 1] };
|
|
13
|
+
expect(fromPosition([1, 0, 0], aabb)).toBe(POS_X);
|
|
14
|
+
expect(fromPosition([-1, 0, 0], aabb)).toBe(NEG_X);
|
|
15
|
+
expect(fromPosition([0, 1, 0], aabb)).toBe(POS_Y);
|
|
16
|
+
expect(fromPosition([0, -1, 0], aabb)).toBe(NEG_Y);
|
|
17
|
+
expect(fromPosition([0, 0, 1], aabb)).toBe(POS_Z);
|
|
18
|
+
expect(fromPosition([0, 0, -1], aabb)).toBe(NEG_Z);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=from-position.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-position.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/from-position.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC;QACrE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { NEG_X } from "./neg-x.js";
|
|
3
|
+
import { NEG_Y } from "./neg-y.js";
|
|
4
|
+
import { NEG_Z } from "./neg-z.js";
|
|
5
|
+
import { POS_X } from "./pos-x.js";
|
|
6
|
+
import { POS_Y } from "./pos-y.js";
|
|
7
|
+
import { POS_Z } from "./pos-z.js";
|
|
8
|
+
/** Single-face bits that share an edge with `face` */
|
|
9
|
+
export const getAdjacent = (face) => {
|
|
10
|
+
switch (face) {
|
|
11
|
+
case POS_Z:
|
|
12
|
+
case NEG_Z:
|
|
13
|
+
return [POS_X, NEG_X, POS_Y, NEG_Y];
|
|
14
|
+
case POS_X:
|
|
15
|
+
case NEG_X:
|
|
16
|
+
return [POS_Z, NEG_Z, POS_Y, NEG_Y];
|
|
17
|
+
case POS_Y:
|
|
18
|
+
case NEG_Y:
|
|
19
|
+
return [POS_Z, NEG_Z, POS_X, NEG_X];
|
|
20
|
+
default:
|
|
21
|
+
throw new Error(`Invalid face index: ${face}`);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=get-adjacent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-adjacent.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-adjacent.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAmB,EAAE;IACvD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACN,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACN,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACN,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC;YACI,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { getAdjacent } from "./get-adjacent.js";
|
|
4
|
+
import { NEG_X } from "./neg-x.js";
|
|
5
|
+
import { NEG_Y } from "./neg-y.js";
|
|
6
|
+
import { NEG_Z } from "./neg-z.js";
|
|
7
|
+
import { POS_X } from "./pos-x.js";
|
|
8
|
+
import { POS_Y } from "./pos-y.js";
|
|
9
|
+
import { POS_Z } from "./pos-z.js";
|
|
10
|
+
describe("getAdjacent", () => {
|
|
11
|
+
it("returns four edge neighbors for ±Z", () => {
|
|
12
|
+
expect(getAdjacent(POS_Z)).toEqual([POS_X, NEG_X, POS_Y, NEG_Y]);
|
|
13
|
+
expect(getAdjacent(NEG_Z)).toEqual([POS_X, NEG_X, POS_Y, NEG_Y]);
|
|
14
|
+
});
|
|
15
|
+
it("returns four edge neighbors for ±X", () => {
|
|
16
|
+
expect(getAdjacent(POS_X)).toEqual([POS_Z, NEG_Z, POS_Y, NEG_Y]);
|
|
17
|
+
expect(getAdjacent(NEG_X)).toEqual([POS_Z, NEG_Z, POS_Y, NEG_Y]);
|
|
18
|
+
});
|
|
19
|
+
it("returns four edge neighbors for ±Y", () => {
|
|
20
|
+
expect(getAdjacent(POS_Y)).toEqual([POS_Z, NEG_Z, POS_X, NEG_X]);
|
|
21
|
+
expect(getAdjacent(NEG_Y)).toEqual([POS_Z, NEG_Z, POS_X, NEG_X]);
|
|
22
|
+
});
|
|
23
|
+
it("throws for invalid face index", () => {
|
|
24
|
+
expect(() => getAdjacent(6)).toThrow("Invalid face index: 6");
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=get-adjacent.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-adjacent.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-adjacent.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { FACES } from "./internals.js";
|
|
3
|
+
/** Yields each single-face bit set in `face` */
|
|
4
|
+
export function* getFaces(face) {
|
|
5
|
+
for (const f of FACES) {
|
|
6
|
+
if (face & f) {
|
|
7
|
+
yield f;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=get-faces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-faces.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-faces.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,gDAAgD;AAChD,MAAM,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAU;IAChC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,CAAC;QACZ,CAAC;IACL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { getFaces } from "./get-faces.js";
|
|
4
|
+
import { NEG_X } from "./neg-x.js";
|
|
5
|
+
import { POS_X } from "./pos-x.js";
|
|
6
|
+
import { POS_Z } from "./pos-z.js";
|
|
7
|
+
describe("getFaces", () => {
|
|
8
|
+
it("yields each set single-face bit", () => {
|
|
9
|
+
const mask = POS_Z | POS_X;
|
|
10
|
+
expect([...getFaces(mask)]).toEqual([POS_Z, POS_X]);
|
|
11
|
+
});
|
|
12
|
+
it("yields NEG_X when only that bit is set", () => {
|
|
13
|
+
expect([...getFaces(NEG_X)]).toEqual([NEG_X]);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=get-faces.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-faces.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-faces.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;QAC3B,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { FACE_NAMES } from "./internals.js";
|
|
3
|
+
/** AABB face direction name for debugging/logging */
|
|
4
|
+
export const getName = (face) => {
|
|
5
|
+
return FACE_NAMES.get(face) ?? `Unknown(${face})`;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=get-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-name.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-name.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,qDAAqD;AACrD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAU,EAAE;IAC1C,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC;AACtD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { getName } from "./get-name.js";
|
|
4
|
+
import { POS_Z } from "./pos-z.js";
|
|
5
|
+
describe("getName", () => {
|
|
6
|
+
it("returns label for known face bit", () => {
|
|
7
|
+
expect(getName(POS_Z)).toBe("POS_Z");
|
|
8
|
+
});
|
|
9
|
+
it("returns unknown placeholder for invalid value", () => {
|
|
10
|
+
expect(getName(99)).toBe("Unknown(99)");
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=get-name.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-name.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-name.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,OAAO,CAAC,EAAS,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { FACE_NORMALS } from "./internals.js";
|
|
3
|
+
/** Outward unit normal for a single-face bit */
|
|
4
|
+
export const getNormal = (face) => {
|
|
5
|
+
const normal = FACE_NORMALS.get(face);
|
|
6
|
+
if (normal === undefined) {
|
|
7
|
+
throw new Error(`Invalid face index: ${face}`);
|
|
8
|
+
}
|
|
9
|
+
return normal;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=get-normal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-normal.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-normal.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAIvD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,gDAAgD;AAChD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAU,EAAQ,EAAE;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { getNormal } from "./get-normal.js";
|
|
4
|
+
import { POS_Z } from "./pos-z.js";
|
|
5
|
+
describe("getNormal", () => {
|
|
6
|
+
it("returns outward unit normal for a valid face", () => {
|
|
7
|
+
expect(getNormal(POS_Z)).toEqual([0, 0, 1]);
|
|
8
|
+
});
|
|
9
|
+
it("throws for invalid face index", () => {
|
|
10
|
+
expect(() => getNormal(6)).toThrow("Invalid face index: 6");
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=get-normal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-normal.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-normal.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { NEG_X } from "./neg-x.js";
|
|
3
|
+
import { NEG_Y } from "./neg-y.js";
|
|
4
|
+
import { NEG_Z } from "./neg-z.js";
|
|
5
|
+
import { POS_X } from "./pos-x.js";
|
|
6
|
+
import { POS_Y } from "./pos-y.js";
|
|
7
|
+
import { POS_Z } from "./pos-z.js";
|
|
8
|
+
/** Opposite single-face bit */
|
|
9
|
+
export const getOpposite = (face) => {
|
|
10
|
+
switch (face) {
|
|
11
|
+
case POS_Z:
|
|
12
|
+
return NEG_Z;
|
|
13
|
+
case NEG_Z:
|
|
14
|
+
return POS_Z;
|
|
15
|
+
case POS_X:
|
|
16
|
+
return NEG_X;
|
|
17
|
+
case NEG_X:
|
|
18
|
+
return POS_X;
|
|
19
|
+
case POS_Y:
|
|
20
|
+
return NEG_Y;
|
|
21
|
+
case NEG_Y:
|
|
22
|
+
return POS_Y;
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(`Invalid face index: ${face}`);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=get-opposite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-opposite.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-opposite.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAU,EAAQ,EAAE;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB,KAAK,KAAK;YACN,OAAO,KAAK,CAAC;QACjB;YACI,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it, expect } from "vitest";
|
|
3
|
+
import { getOpposite } from "./get-opposite.js";
|
|
4
|
+
import { NEG_X } from "./neg-x.js";
|
|
5
|
+
import { NEG_Y } from "./neg-y.js";
|
|
6
|
+
import { NEG_Z } from "./neg-z.js";
|
|
7
|
+
import { POS_X } from "./pos-x.js";
|
|
8
|
+
import { POS_Y } from "./pos-y.js";
|
|
9
|
+
import { POS_Z } from "./pos-z.js";
|
|
10
|
+
describe("getOpposite", () => {
|
|
11
|
+
it("maps each axis to its opposite", () => {
|
|
12
|
+
expect(getOpposite(POS_Z)).toBe(NEG_Z);
|
|
13
|
+
expect(getOpposite(POS_X)).toBe(NEG_X);
|
|
14
|
+
expect(getOpposite(POS_Y)).toBe(NEG_Y);
|
|
15
|
+
});
|
|
16
|
+
it("throws for invalid face index", () => {
|
|
17
|
+
expect(() => getOpposite(6)).toThrow("Invalid face index: 6");
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=get-opposite.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-opposite.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/get-opposite.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Ordered single-face bits for iteration */
|
|
2
|
+
export declare const FACES: readonly [number, number, number, number, number, number];
|
|
3
|
+
/** Outward unit normal per single-face bit */
|
|
4
|
+
export declare const FACE_NORMALS: Map<number, readonly [number, number, number]>;
|
|
5
|
+
/** Debug labels per single-face bit */
|
|
6
|
+
export declare const FACE_NAMES: Map<number, string>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { NEG_X } from "./neg-x.js";
|
|
3
|
+
import { NEG_Y } from "./neg-y.js";
|
|
4
|
+
import { NEG_Z } from "./neg-z.js";
|
|
5
|
+
import { POS_X } from "./pos-x.js";
|
|
6
|
+
import { POS_Y } from "./pos-y.js";
|
|
7
|
+
import { POS_Z } from "./pos-z.js";
|
|
8
|
+
/** Ordered single-face bits for iteration */
|
|
9
|
+
export const FACES = [POS_Z, POS_X, NEG_Z, NEG_X, POS_Y, NEG_Y];
|
|
10
|
+
const NORMAL_POS_Z = [0, 0, 1];
|
|
11
|
+
const NORMAL_NEG_Z = [0, 0, -1];
|
|
12
|
+
const NORMAL_POS_X = [1, 0, 0];
|
|
13
|
+
const NORMAL_NEG_X = [-1, 0, 0];
|
|
14
|
+
const NORMAL_POS_Y = [0, 1, 0];
|
|
15
|
+
const NORMAL_NEG_Y = [0, -1, 0];
|
|
16
|
+
/** Outward unit normal per single-face bit */
|
|
17
|
+
export const FACE_NORMALS = new Map([
|
|
18
|
+
[POS_Z, NORMAL_POS_Z],
|
|
19
|
+
[NEG_Z, NORMAL_NEG_Z],
|
|
20
|
+
[POS_X, NORMAL_POS_X],
|
|
21
|
+
[NEG_X, NORMAL_NEG_X],
|
|
22
|
+
[POS_Y, NORMAL_POS_Y],
|
|
23
|
+
[NEG_Y, NORMAL_NEG_Y],
|
|
24
|
+
]);
|
|
25
|
+
/** Debug labels per single-face bit */
|
|
26
|
+
export const FACE_NAMES = new Map([
|
|
27
|
+
[POS_Z, "POS_Z"],
|
|
28
|
+
[POS_X, "POS_X"],
|
|
29
|
+
[NEG_Z, "NEG_Z"],
|
|
30
|
+
[NEG_X, "NEG_X"],
|
|
31
|
+
[POS_Y, "POS_Y"],
|
|
32
|
+
[NEG_Y, "NEG_Y"],
|
|
33
|
+
]);
|
|
34
|
+
//# sourceMappingURL=internals.js.map
|