@adobe/data 0.9.53 → 0.9.55
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/README.md +1 -1
- 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/data-cache.js +26 -6
- package/dist/cache/data-cache.js.map +1 -1
- package/dist/cache/data-cache.test.js +12 -1
- package/dist/cache/data-cache.test.js.map +1 -1
- 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/cache/managed-array.js +72 -68
- package/dist/cache/managed-array.js.map +1 -1
- package/dist/ecs/archetype/create-archetype.js +131 -7
- package/dist/ecs/archetype/create-archetype.js.map +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/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/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/perftest/ecs1-perf.d.ts +54 -0
- package/dist/perftest/ecs1-perf.js +214 -0
- package/dist/perftest/ecs1-perf.js.map +1 -0
- package/dist/perftest/ecs2-perf.d.ts +5 -0
- package/dist/perftest/ecs2-perf.js +162 -0
- package/dist/perftest/ecs2-perf.js.map +1 -0
- package/dist/perftest/index.js +8 -3
- package/dist/perftest/index.js.map +1 -1
- package/dist/perftest/perf-test.d.ts +7 -0
- package/dist/perftest/perf-test.js +69 -7
- package/dist/perftest/perf-test.js.map +1 -1
- package/dist/perftest/typed-buffer-perf.d.ts +8 -0
- package/dist/perftest/typed-buffer-perf.js +133 -0
- package/dist/perftest/typed-buffer-perf.js.map +1 -0
- 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/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,162 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { Store } from "../ecs/store/index.js";
|
|
3
|
+
import { F32, True, U32 } from "../schema/index.js";
|
|
4
|
+
// Mirror of ecs1-perf.ts on the new ECS, using createStore directly so we
|
|
5
|
+
// measure raw column read/write cost — no plugin, no transactions, no undo
|
|
6
|
+
// machinery. The legacy suite also bypasses transactions, so this matches.
|
|
7
|
+
//
|
|
8
|
+
// Dropped vs ecs1: move_native (no .native typed-array view exposed) and
|
|
9
|
+
// move_wasm* (no custom WASM allocator yet). Add them back here when the
|
|
10
|
+
// new ECS gains those surfaces.
|
|
11
|
+
const storeSchema = Store.Schema.create({
|
|
12
|
+
components: {
|
|
13
|
+
color: U32.schema,
|
|
14
|
+
enabled: True.schema,
|
|
15
|
+
mass: F32.schema,
|
|
16
|
+
positionX: F32.schema,
|
|
17
|
+
positionY: F32.schema,
|
|
18
|
+
positionZ: F32.schema,
|
|
19
|
+
velocityX: F32.schema,
|
|
20
|
+
velocityY: F32.schema,
|
|
21
|
+
velocityZ: F32.schema,
|
|
22
|
+
visible: True.schema,
|
|
23
|
+
},
|
|
24
|
+
archetypes: {
|
|
25
|
+
VisibleEnabled: [
|
|
26
|
+
"color", "enabled", "mass",
|
|
27
|
+
"positionX", "positionY", "positionZ",
|
|
28
|
+
"velocityX", "velocityY", "velocityZ",
|
|
29
|
+
"visible",
|
|
30
|
+
],
|
|
31
|
+
InvisibleEnabled: [
|
|
32
|
+
"color", "enabled", "mass",
|
|
33
|
+
"positionX", "positionY", "positionZ",
|
|
34
|
+
"velocityX", "velocityY", "velocityZ",
|
|
35
|
+
],
|
|
36
|
+
VisibleDisabled: [
|
|
37
|
+
"color", "mass",
|
|
38
|
+
"positionX", "positionY", "positionZ",
|
|
39
|
+
"velocityX", "velocityY", "velocityZ",
|
|
40
|
+
"visible",
|
|
41
|
+
],
|
|
42
|
+
InvisibleDisabled: [
|
|
43
|
+
"color", "mass",
|
|
44
|
+
"positionX", "positionY", "positionZ",
|
|
45
|
+
"velocityX", "velocityY", "velocityZ",
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
// The Archetype.insert signatures differ by component-set type, so the
|
|
50
|
+
// archetype refs can't share a typed array. Cast at the call site — this
|
|
51
|
+
// perftest just needs to fill the rows.
|
|
52
|
+
function seedAll(store, count) {
|
|
53
|
+
const perTable = Math.ceil(count / 4);
|
|
54
|
+
const archetypes = [
|
|
55
|
+
store.archetypes.VisibleEnabled,
|
|
56
|
+
store.archetypes.VisibleDisabled,
|
|
57
|
+
store.archetypes.InvisibleEnabled,
|
|
58
|
+
store.archetypes.InvisibleDisabled,
|
|
59
|
+
];
|
|
60
|
+
for (let archIndex = 0; archIndex < archetypes.length; archIndex++) {
|
|
61
|
+
const arch = archetypes[archIndex];
|
|
62
|
+
for (let k = 0; k < perTable; k++) {
|
|
63
|
+
const i = archIndex + k * 4;
|
|
64
|
+
arch.insert({
|
|
65
|
+
color: 0xff00ff,
|
|
66
|
+
mass: 10,
|
|
67
|
+
positionX: i + 1,
|
|
68
|
+
positionY: i + 1,
|
|
69
|
+
positionZ: i + 1,
|
|
70
|
+
velocityX: -i,
|
|
71
|
+
velocityY: -i,
|
|
72
|
+
velocityZ: -i,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function seedSingle(store, count) {
|
|
78
|
+
const archetypes = [
|
|
79
|
+
store.archetypes.VisibleEnabled,
|
|
80
|
+
store.archetypes.VisibleDisabled,
|
|
81
|
+
store.archetypes.InvisibleEnabled,
|
|
82
|
+
store.archetypes.InvisibleDisabled,
|
|
83
|
+
];
|
|
84
|
+
for (let i = 0; i < count; i++) {
|
|
85
|
+
archetypes[i % 4].insert({
|
|
86
|
+
color: 0xff00ff,
|
|
87
|
+
mass: 10,
|
|
88
|
+
positionX: i + 1,
|
|
89
|
+
positionY: i + 1,
|
|
90
|
+
positionZ: i + 1,
|
|
91
|
+
velocityX: -i,
|
|
92
|
+
velocityY: -i,
|
|
93
|
+
velocityZ: -i,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const create = () => {
|
|
98
|
+
let count = 0;
|
|
99
|
+
const setup = async (n) => { count = n; };
|
|
100
|
+
const run = () => {
|
|
101
|
+
const store = Store.create(storeSchema);
|
|
102
|
+
seedSingle(store, count);
|
|
103
|
+
};
|
|
104
|
+
const cleanup = async () => { };
|
|
105
|
+
return { setup, run, cleanup, type: "create" };
|
|
106
|
+
};
|
|
107
|
+
const createMoveParticlesPerformanceTest = () => {
|
|
108
|
+
let store;
|
|
109
|
+
const setup = async (n) => {
|
|
110
|
+
store = Store.create(storeSchema);
|
|
111
|
+
seedAll(store, n);
|
|
112
|
+
};
|
|
113
|
+
const run = () => {
|
|
114
|
+
const archetypes = store.queryArchetypes([
|
|
115
|
+
"positionX", "positionY", "positionZ",
|
|
116
|
+
"velocityX", "velocityY", "velocityZ",
|
|
117
|
+
"visible", "enabled",
|
|
118
|
+
]);
|
|
119
|
+
for (const archetype of archetypes) {
|
|
120
|
+
const { columns, rowCount } = archetype;
|
|
121
|
+
const positionX = columns.positionX;
|
|
122
|
+
const positionY = columns.positionY;
|
|
123
|
+
const positionZ = columns.positionZ;
|
|
124
|
+
const velocityX = columns.velocityX;
|
|
125
|
+
const velocityY = columns.velocityY;
|
|
126
|
+
const velocityZ = columns.velocityZ;
|
|
127
|
+
for (let i = 0; i < rowCount; i++) {
|
|
128
|
+
positionX.set(i, positionX.get(i) + velocityX.get(i));
|
|
129
|
+
positionY.set(i, positionY.get(i) + velocityY.get(i));
|
|
130
|
+
positionZ.set(i, positionZ.get(i) + velocityZ.get(i));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const getVisibleEnabledPositions = () => {
|
|
135
|
+
const values = [];
|
|
136
|
+
const archetypes = store.queryArchetypes([
|
|
137
|
+
"positionX", "positionY", "positionZ",
|
|
138
|
+
"visible", "enabled",
|
|
139
|
+
]);
|
|
140
|
+
for (const archetype of archetypes) {
|
|
141
|
+
const { columns, rowCount } = archetype;
|
|
142
|
+
const positionX = columns.positionX;
|
|
143
|
+
const positionY = columns.positionY;
|
|
144
|
+
const positionZ = columns.positionZ;
|
|
145
|
+
for (let i = 0; i < rowCount; i++) {
|
|
146
|
+
values.push(positionX.get(i), positionY.get(i), positionZ.get(i));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return values;
|
|
150
|
+
};
|
|
151
|
+
const cleanup = async () => { };
|
|
152
|
+
// Lock N to 1M to match ecs1's move tests so cache pressure is the
|
|
153
|
+
// same on both sides — otherwise the auto-tuner picks different N
|
|
154
|
+
// based on cold-probe time and the comparison becomes about cache,
|
|
155
|
+
// not code. See ecs1-perf.ts for the matching note.
|
|
156
|
+
return { setup, run, cleanup, getVisibleEnabledPositions, type: "move", startN: 1_000_000 };
|
|
157
|
+
};
|
|
158
|
+
export const ecs2 = {
|
|
159
|
+
create: create(),
|
|
160
|
+
move_column: createMoveParticlesPerformanceTest(),
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=ecs2-perf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecs2-perf.js","sourceRoot":"","sources":["../../src/perftest/ecs2-perf.ts"],"names":[],"mappings":"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"}
|
package/dist/perftest/index.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
2
|
import * as vanilla_tests from "./vanilla-perf.js";
|
|
3
|
-
import * as
|
|
3
|
+
import * as horizon_tests from "./horizon-perf.js";
|
|
4
|
+
import * as ecs1_tests from "./ecs1-perf.js";
|
|
5
|
+
import * as ecs2_tests from "./ecs2-perf.js";
|
|
6
|
+
import * as typed_buffer_tests from "./typed-buffer-perf.js";
|
|
4
7
|
import { runTests } from "./perf-test.js";
|
|
5
8
|
export function run() {
|
|
6
9
|
runTests({
|
|
7
|
-
...
|
|
10
|
+
...ecs1_tests,
|
|
11
|
+
...ecs2_tests,
|
|
8
12
|
...vanilla_tests,
|
|
9
|
-
|
|
13
|
+
...horizon_tests,
|
|
14
|
+
...typed_buffer_tests,
|
|
10
15
|
});
|
|
11
16
|
}
|
|
12
17
|
if (typeof globalThis.process === "object" && import.meta.url === `file://${process?.argv[1]}`) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perftest/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perftest/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,aAAa,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,UAAU,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,kBAAkB,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,UAAU,GAAG;IACjB,QAAQ,CAAC;QACP,GAAG,UAAU;QACb,GAAG,UAAU;QACb,GAAG,aAAa;QAChB,GAAG,aAAa;QAChB,GAAG,kBAAkB;KACtB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/F,GAAG,EAAE,CAAC;AACR,CAAC"}
|
|
@@ -14,5 +14,12 @@ export interface PerformanceTest {
|
|
|
14
14
|
getVisibleEnabledPositions?: () => number[];
|
|
15
15
|
type: "create" | "move";
|
|
16
16
|
cleanup: () => Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Optional starting `n` for the auto-tuner. Tests whose per-iteration cost
|
|
19
|
+
* is known to be very high at the default `n` should set this lower so the
|
|
20
|
+
* harness doesn't waste a probe attempt at the default before scaling down.
|
|
21
|
+
* Auto-tune may still adjust this upward or downward as usual.
|
|
22
|
+
*/
|
|
23
|
+
startN?: number;
|
|
17
24
|
}
|
|
18
25
|
export declare function runTests(testSuites: Record<string, Record<string, PerformanceTest>>): Promise<void>;
|
|
@@ -55,16 +55,25 @@ export async function runTests(testSuites) {
|
|
|
55
55
|
}
|
|
56
56
|
// console.log(JSON.stringify(finalPositions));
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
// Auto-tune n so each measured iteration falls in TARGET_BAND.
|
|
59
|
+
// Tests already in band keep their starting n. Tests can override
|
|
60
|
+
// the seed via `startN` when they know their per-iter cost is far
|
|
61
|
+
// from the default.
|
|
62
|
+
const n = await tuneN(test, test.startN ?? 100_000);
|
|
63
|
+
garbageCollect();
|
|
64
|
+
// Warmup so V8 has fully optimized before any sample is recorded.
|
|
65
|
+
const warmupEnd = getTime() + WARMUP_MS;
|
|
66
|
+
while (getTime() < warmupEnd) {
|
|
67
|
+
test.run();
|
|
68
|
+
}
|
|
60
69
|
garbageCollect();
|
|
61
70
|
const baselineMemory = getMemory();
|
|
62
71
|
const timeStart = getTime();
|
|
63
72
|
// only run for 1 second
|
|
64
|
-
while (getTime() - timeStart <
|
|
73
|
+
while (getTime() - timeStart < 1000) {
|
|
65
74
|
const result = runOnce(test.run, test);
|
|
66
75
|
result.memoryKb -= baselineMemory;
|
|
67
|
-
testResults.push({ ...result, flops: n * typeToFlops[test.type] });
|
|
76
|
+
testResults.push({ ...result, flops: n * typeToFlops[test.type], n });
|
|
68
77
|
}
|
|
69
78
|
await test.cleanup();
|
|
70
79
|
garbageCollect();
|
|
@@ -86,6 +95,7 @@ export async function runTests(testSuites) {
|
|
|
86
95
|
const totalFlops = testResults.reduce((a, b) => a + b.flops, 0);
|
|
87
96
|
const averageFlopsPerSecond = (totalFlops * 1000) / totalTime;
|
|
88
97
|
tableValues[`${display(suite)}:${display(name)}`] = {
|
|
98
|
+
N: testResults[0]?.n ?? 0,
|
|
89
99
|
Passes: memoryKb.length,
|
|
90
100
|
// 'Mem Min (Mb)': Math.min(...memoryKb).toFixed(2),
|
|
91
101
|
// 'Mem Max (Mb)': Math.max(...memoryKb).toFixed(2),
|
|
@@ -113,12 +123,64 @@ export async function runTests(testSuites) {
|
|
|
113
123
|
}
|
|
114
124
|
}
|
|
115
125
|
}
|
|
126
|
+
// Browsers without cross-origin isolation clamp performance.now() to ~0.1ms
|
|
127
|
+
// resolution, so very fast operations register as 0ms. For move tests we
|
|
128
|
+
// inner-loop until the elapsed time exceeds this threshold and report the
|
|
129
|
+
// per-iteration average. Create tests are not inner-looped because some
|
|
130
|
+
// allocate WASM-backed memory that is not reclaimed between calls.
|
|
131
|
+
const MIN_SAMPLE_MS = 2;
|
|
132
|
+
// Target per-iteration time band. Tests faster than the lower bound get
|
|
133
|
+
// their n scaled up so each call does meaningful work and dominates
|
|
134
|
+
// timing-call overhead. Tests slower than the upper bound get their n
|
|
135
|
+
// scaled down so we collect enough samples within the 1s budget. Setting
|
|
136
|
+
// TARGET_MAX_MS conservatively (250ms) keeps moderate-cost tests
|
|
137
|
+
// (ecs1:create at ~65ms, horizon:create at ~200ms) at their original n;
|
|
138
|
+
// only pathologically slow tests get down-scaled.
|
|
139
|
+
const TARGET_MIN_MS = 0.5;
|
|
140
|
+
const TARGET_MAX_MS = 250;
|
|
141
|
+
const MIN_AUTO_N = 100;
|
|
142
|
+
const MAX_AUTO_N = 1_000_000;
|
|
143
|
+
const WARMUP_MS = 50;
|
|
144
|
+
async function tuneN(test, startN) {
|
|
145
|
+
let n = startN;
|
|
146
|
+
for (let attempt = 0; attempt < 4; attempt++) {
|
|
147
|
+
await test.setup(n);
|
|
148
|
+
const probe = runOnce(test.run, test);
|
|
149
|
+
const probeMs = Math.max(probe.timeMs, 0.001);
|
|
150
|
+
if (probeMs >= TARGET_MIN_MS && probeMs <= TARGET_MAX_MS) {
|
|
151
|
+
return n;
|
|
152
|
+
}
|
|
153
|
+
const target = (TARGET_MIN_MS + TARGET_MAX_MS) / 2;
|
|
154
|
+
const ratio = target / probeMs;
|
|
155
|
+
const scaled = Math.round(n * ratio);
|
|
156
|
+
const newN = Math.max(MIN_AUTO_N, Math.min(MAX_AUTO_N, scaled));
|
|
157
|
+
if (newN === n) {
|
|
158
|
+
return n;
|
|
159
|
+
}
|
|
160
|
+
await test.cleanup();
|
|
161
|
+
n = newN;
|
|
162
|
+
}
|
|
163
|
+
return n;
|
|
164
|
+
}
|
|
116
165
|
function runOnce(fn, test) {
|
|
117
166
|
const start = getTime();
|
|
118
|
-
|
|
119
|
-
|
|
167
|
+
let result;
|
|
168
|
+
let iterations = 0;
|
|
169
|
+
let now = start;
|
|
170
|
+
if (test.type === "move") {
|
|
171
|
+
do {
|
|
172
|
+
result = fn();
|
|
173
|
+
iterations++;
|
|
174
|
+
now = getTime();
|
|
175
|
+
} while (now - start < MIN_SAMPLE_MS);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
result = fn();
|
|
179
|
+
iterations = 1;
|
|
180
|
+
now = getTime();
|
|
181
|
+
}
|
|
120
182
|
const after = getMemory();
|
|
121
|
-
const timeMs =
|
|
183
|
+
const timeMs = (now - start) / iterations;
|
|
122
184
|
return { memoryKb: after, timeMs, result };
|
|
123
185
|
}
|
|
124
186
|
//# sourceMappingURL=perf-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perf-test.js","sourceRoot":"","sources":["../../src/perftest/perf-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"perf-test.js","sourceRoot":"","sources":["../../src/perftest/perf-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { createNumberBuffer } from "../typed-buffer/create-number-buffer.js";
|
|
3
|
+
import { createArrayBuffer } from "../typed-buffer/create-array-buffer.js";
|
|
4
|
+
import { createStructBuffer } from "../typed-buffer/create-struct-buffer.js";
|
|
5
|
+
import { F32 } from "../math/f32/index.js";
|
|
6
|
+
const Vec3Schema = {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
x: F32.schema,
|
|
10
|
+
y: F32.schema,
|
|
11
|
+
z: F32.schema,
|
|
12
|
+
},
|
|
13
|
+
required: ["x", "y", "z"],
|
|
14
|
+
};
|
|
15
|
+
// number buffer get+set sweep — direct typed-array baseline through TypedBuffer.
|
|
16
|
+
const numberBufferGetSet = () => {
|
|
17
|
+
let buffer;
|
|
18
|
+
let count = 0;
|
|
19
|
+
let sink = 0;
|
|
20
|
+
const setup = async (n) => {
|
|
21
|
+
count = n;
|
|
22
|
+
buffer = createNumberBuffer(F32.schema, n);
|
|
23
|
+
for (let i = 0; i < n; i++) {
|
|
24
|
+
buffer.set(i, i + 1);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const run = () => {
|
|
28
|
+
let total = 0;
|
|
29
|
+
for (let i = 0; i < count; i++) {
|
|
30
|
+
total += buffer.get(i);
|
|
31
|
+
}
|
|
32
|
+
sink ^= total | 0;
|
|
33
|
+
for (let i = 0; i < count; i++) {
|
|
34
|
+
buffer.set(i, buffer.get(i) + 1);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const cleanup = async () => { sink = 0; };
|
|
38
|
+
return { setup, run, cleanup, type: "move" };
|
|
39
|
+
};
|
|
40
|
+
// array buffer get+set with object payloads — non-typed-array baseline.
|
|
41
|
+
const arrayBufferGetSet = () => {
|
|
42
|
+
let buffer;
|
|
43
|
+
let count = 0;
|
|
44
|
+
let sink = 0;
|
|
45
|
+
const setup = async (n) => {
|
|
46
|
+
count = n;
|
|
47
|
+
buffer = createArrayBuffer(Vec3Schema, n);
|
|
48
|
+
for (let i = 0; i < n; i++) {
|
|
49
|
+
buffer.set(i, { x: i + 1, y: i + 1, z: i + 1 });
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const run = () => {
|
|
53
|
+
let total = 0;
|
|
54
|
+
for (let i = 0; i < count; i++) {
|
|
55
|
+
const v = buffer.get(i);
|
|
56
|
+
total += v.x + v.y + v.z;
|
|
57
|
+
}
|
|
58
|
+
sink ^= total | 0;
|
|
59
|
+
};
|
|
60
|
+
const cleanup = async () => { sink = 0; };
|
|
61
|
+
return { setup, run, cleanup, type: "move" };
|
|
62
|
+
};
|
|
63
|
+
// struct_get — read every element and accumulate a sink to defeat DCE.
|
|
64
|
+
const structBufferGet = () => {
|
|
65
|
+
let buffer;
|
|
66
|
+
let count = 0;
|
|
67
|
+
let sink = 0;
|
|
68
|
+
const setup = async (n) => {
|
|
69
|
+
count = n;
|
|
70
|
+
buffer = createStructBuffer(Vec3Schema, n);
|
|
71
|
+
for (let i = 0; i < n; i++) {
|
|
72
|
+
buffer.set(i, { x: i + 1, y: i + 2, z: i + 3 });
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const run = () => {
|
|
76
|
+
let total = 0;
|
|
77
|
+
for (let i = 0; i < count; i++) {
|
|
78
|
+
const v = buffer.get(i);
|
|
79
|
+
total += v.x + v.y + v.z;
|
|
80
|
+
}
|
|
81
|
+
sink ^= total | 0;
|
|
82
|
+
};
|
|
83
|
+
const cleanup = async () => { sink = 0; };
|
|
84
|
+
return { setup, run, cleanup, type: "move" };
|
|
85
|
+
};
|
|
86
|
+
// struct_set — write every element from a fixed literal.
|
|
87
|
+
const structBufferSet = () => {
|
|
88
|
+
let buffer;
|
|
89
|
+
let count = 0;
|
|
90
|
+
const literal = { x: 1, y: 2, z: 3 };
|
|
91
|
+
const setup = async (n) => {
|
|
92
|
+
count = n;
|
|
93
|
+
buffer = createStructBuffer(Vec3Schema, n);
|
|
94
|
+
};
|
|
95
|
+
const run = () => {
|
|
96
|
+
for (let i = 0; i < count; i++) {
|
|
97
|
+
buffer.set(i, literal);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const cleanup = async () => { };
|
|
101
|
+
return { setup, run, cleanup, type: "move" };
|
|
102
|
+
};
|
|
103
|
+
// struct_round_trip — get, mutate, set. Mirrors the per-frame ECS pattern.
|
|
104
|
+
const structBufferRoundTrip = () => {
|
|
105
|
+
let buffer;
|
|
106
|
+
let count = 0;
|
|
107
|
+
const setup = async (n) => {
|
|
108
|
+
count = n;
|
|
109
|
+
buffer = createStructBuffer(Vec3Schema, n);
|
|
110
|
+
for (let i = 0; i < n; i++) {
|
|
111
|
+
buffer.set(i, { x: i + 1, y: i + 1, z: i + 1 });
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const run = () => {
|
|
115
|
+
for (let i = 0; i < count; i++) {
|
|
116
|
+
const v = buffer.get(i);
|
|
117
|
+
v.x += 1;
|
|
118
|
+
v.y += 1;
|
|
119
|
+
v.z += 1;
|
|
120
|
+
buffer.set(i, v);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const cleanup = async () => { };
|
|
124
|
+
return { setup, run, cleanup, type: "move" };
|
|
125
|
+
};
|
|
126
|
+
export const typed_buffer = {
|
|
127
|
+
number_get_set: numberBufferGetSet(),
|
|
128
|
+
array_get: arrayBufferGetSet(),
|
|
129
|
+
struct_get: structBufferGet(),
|
|
130
|
+
struct_set: structBufferSet(),
|
|
131
|
+
struct_round_trip: structBufferRoundTrip(),
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=typed-buffer-perf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-buffer-perf.js","sourceRoot":"","sources":["../../src/perftest/typed-buffer-perf.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAI3C,MAAM,UAAU,GAAW;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,EAAE,GAAG,CAAC,MAAM;QACb,CAAC,EAAE,GAAG,CAAC,MAAM;QACb,CAAC,EAAE,GAAG,CAAC,MAAM;KAChB;IACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACnB,CAAC;AAIX,iFAAiF;AACjF,MAAM,kBAAkB,GAAG,GAAoB,EAAE;IAC7C,IAAI,MAA6C,CAAC;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,GAAoB,EAAE;IAC5C,IAAI,MAAqE,CAAC;IAC1E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,iBAAiB,CAA0B,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACL,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,eAAe,GAAG,GAAoB,EAAE;IAC1C,IAAI,MAAgE,CAAC;IACrE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACL,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,CAAC;YAChC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,yDAAyD;AACzD,MAAM,eAAe,GAAG,GAAoB,EAAE;IAC1C,IAAI,MAAgE,CAAC;IACrE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;IACL,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IAChD,IAAI,MAAgE,CAAC;IACrE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC9B,KAAK,GAAG,CAAC,CAAC;QACV,MAAM,GAAG,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACL,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAS,CAAC;YAChC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACT,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACT,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACT,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,CAAC;IACL,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,cAAc,EAAE,kBAAkB,EAAE;IACpC,SAAS,EAAE,iBAAiB,EAAE;IAC9B,UAAU,EAAE,eAAe,EAAE;IAC7B,UAAU,EAAE,eAAe,EAAE;IAC7B,iBAAiB,EAAE,qBAAqB,EAAE;CAC7C,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { Data } from "../../data.js";
|
|
1
2
|
import { Schema } from "../../schema/index.js";
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
type ParametersFromSchemas<P extends readonly Schema[]> = {
|
|
4
|
+
[K in keyof P]: P[K] extends Schema ? Schema.ToType<P[K]> : never;
|
|
5
|
+
};
|
|
6
|
+
export type Action<P extends readonly Schema[] = readonly Schema[]> = {
|
|
4
7
|
description: string;
|
|
5
|
-
|
|
6
|
-
execute:
|
|
8
|
+
parameters: P;
|
|
9
|
+
execute: (...input: ParametersFromSchemas<P>) => Promise<void | Data> | Data | void;
|
|
7
10
|
};
|
|
11
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Observe } from "../../observe/index.js";
|
|
2
2
|
import { Schema } from "../../schema/index.js";
|
|
3
|
+
import { Data } from "../../data.js";
|
|
3
4
|
import { AgenticService } from "./agentic-service.js";
|
|
4
5
|
/** State declaration: kind + schema for value + description */
|
|
5
6
|
type StateDeclaration<S extends Schema = Schema> = {
|
|
@@ -49,5 +50,8 @@ export type ImplementationFromDeclarations<D extends Declarations> = {
|
|
|
49
50
|
type: "link";
|
|
50
51
|
} ? AgenticService | Observe<AgenticService> : never;
|
|
51
52
|
};
|
|
52
|
-
type
|
|
53
|
+
type ParametersFromSchemas<P extends readonly Schema[]> = {
|
|
54
|
+
[K in keyof P]: P[K] extends Schema ? Schema.ToType<P[K]> : never;
|
|
55
|
+
};
|
|
56
|
+
type ExecuteFromParameters<P extends readonly Schema[]> = (...input: ParametersFromSchemas<P>) => Promise<void | Data> | Data | void;
|
|
53
57
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/service/agentic-service/create.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/service/agentic-service/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -404,7 +404,7 @@ describe("AgenticService.create", () => {
|
|
|
404
404
|
const actions = await Observe.toPromise(service.actions);
|
|
405
405
|
expect(actions).toHaveProperty("heal");
|
|
406
406
|
expect(actions.heal.description).toBe("Heal player");
|
|
407
|
-
expect(actions.heal.
|
|
407
|
+
expect(actions.heal.parameters).toEqual([{ type: "number" }]);
|
|
408
408
|
expect(typeof actions.heal.execute).toBe("function");
|
|
409
409
|
});
|
|
410
410
|
it("should omit disabled actions", async () => {
|