@adobe/data 0.1.2
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 +310 -0
- package/assembly/index.d.ts +30 -0
- package/assembly/index.js +18 -0
- package/assembly/index.wasm +0 -0
- package/assembly/index.wasm.map +1 -0
- package/assembly-test/assembly.test.d.ts +1 -0
- package/assembly-test/assembly.test.js +29 -0
- package/assembly-test/assembly.test.js.map +1 -0
- package/cache/async-cache.d.ts +15 -0
- package/cache/async-cache.js +23 -0
- package/cache/async-cache.js.map +1 -0
- package/cache/blob-store.d.ts +94 -0
- package/cache/blob-store.js +191 -0
- package/cache/blob-store.js.map +1 -0
- package/cache/blob-store.test.d.ts +1 -0
- package/cache/blob-store.test.js +142 -0
- package/cache/blob-store.test.js.map +1 -0
- package/cache/data-cache.d.ts +38 -0
- package/cache/data-cache.js +96 -0
- package/cache/data-cache.js.map +1 -0
- package/cache/data-cache.test.d.ts +1 -0
- package/cache/data-cache.test.js +50 -0
- package/cache/data-cache.test.js.map +1 -0
- package/cache/expiring-data-cache.d.ts +6 -0
- package/cache/expiring-data-cache.js +49 -0
- package/cache/expiring-data-cache.js.map +1 -0
- package/cache/expiring-data-cache.test.d.ts +1 -0
- package/cache/expiring-data-cache.test.js +62 -0
- package/cache/expiring-data-cache.test.js.map +1 -0
- package/cache/fallback-async-cache.d.ts +7 -0
- package/cache/fallback-async-cache.js +22 -0
- package/cache/fallback-async-cache.js.map +1 -0
- package/cache/functions/bind-functions.d.ts +6 -0
- package/cache/functions/bind-functions.js +33 -0
- package/cache/functions/bind-functions.js.map +1 -0
- package/cache/functions/functions.test.d.ts +1 -0
- package/cache/functions/functions.test.js +79 -0
- package/cache/functions/functions.test.js.map +1 -0
- package/cache/functions/get-cached.d.ts +11 -0
- package/cache/functions/get-cached.js +49 -0
- package/cache/functions/get-cached.js.map +1 -0
- package/cache/functions/get-cached.test.d.ts +1 -0
- package/cache/functions/get-cached.test.js +96 -0
- package/cache/functions/get-cached.test.js.map +1 -0
- package/cache/functions/hashing/blob-to-hash.d.ts +4 -0
- package/cache/functions/hashing/blob-to-hash.js +44 -0
- package/cache/functions/hashing/blob-to-hash.js.map +1 -0
- package/cache/functions/hashing/buffer-to-hash.d.ts +4 -0
- package/cache/functions/hashing/buffer-to-hash.js +33 -0
- package/cache/functions/hashing/buffer-to-hash.js.map +1 -0
- package/cache/functions/hashing/hashing.test.d.ts +1 -0
- package/cache/functions/hashing/hashing.test.js +95 -0
- package/cache/functions/hashing/hashing.test.js.map +1 -0
- package/cache/functions/hashing/index.d.ts +4 -0
- package/cache/functions/hashing/index.js +26 -0
- package/cache/functions/hashing/index.js.map +1 -0
- package/cache/functions/hashing/json-to-hash.d.ts +4 -0
- package/cache/functions/hashing/json-to-hash.js +29 -0
- package/cache/functions/hashing/json-to-hash.js.map +1 -0
- package/cache/functions/hashing/string-to-hash.d.ts +4 -0
- package/cache/functions/hashing/string-to-hash.js +37 -0
- package/cache/functions/hashing/string-to-hash.js.map +1 -0
- package/cache/functions/index.d.ts +5 -0
- package/cache/functions/index.js +29 -0
- package/cache/functions/index.js.map +1 -0
- package/cache/functions/memoize.d.ts +12 -0
- package/cache/functions/memoize.js +48 -0
- package/cache/functions/memoize.js.map +1 -0
- package/cache/functions/omit.d.ts +1 -0
- package/cache/functions/omit.js +29 -0
- package/cache/functions/omit.js.map +1 -0
- package/cache/functions/prevent-parallel-execution.d.ts +7 -0
- package/cache/functions/prevent-parallel-execution.js +25 -0
- package/cache/functions/prevent-parallel-execution.js.map +1 -0
- package/cache/functions/types.d.ts +1 -0
- package/cache/functions/types.js +23 -0
- package/cache/functions/types.js.map +1 -0
- package/cache/get-persistent-cache.d.ts +12 -0
- package/cache/get-persistent-cache.js +23 -0
- package/cache/get-persistent-cache.js.map +1 -0
- package/cache/index.d.ts +3 -0
- package/cache/index.js +25 -0
- package/cache/index.js.map +1 -0
- package/cache/managed-array.d.ts +23 -0
- package/cache/managed-array.js +160 -0
- package/cache/managed-array.js.map +1 -0
- package/cache/managed-async-cache.browser.test.d.ts +1 -0
- package/cache/managed-async-cache.browser.test.js +50 -0
- package/cache/managed-async-cache.browser.test.js.map +1 -0
- package/cache/managed-async-cache.d.ts +4 -0
- package/cache/managed-async-cache.js +45 -0
- package/cache/managed-async-cache.js.map +1 -0
- package/cache/memory-allocator.d.ts +23 -0
- package/cache/memory-allocator.js +94 -0
- package/cache/memory-allocator.js.map +1 -0
- package/cache/memory-async-cache.d.ts +6 -0
- package/cache/memory-async-cache.js +23 -0
- package/cache/memory-async-cache.js.map +1 -0
- package/core/data.d.ts +22 -0
- package/core/data.js +52 -0
- package/core/data.js.map +1 -0
- package/core/data.test.d.ts +1 -0
- package/core/data.test.js +48 -0
- package/core/data.test.js.map +1 -0
- package/core/functions/array-equals.d.ts +1 -0
- package/core/functions/array-equals.js +34 -0
- package/core/functions/array-equals.js.map +1 -0
- package/core/functions/deep-merge.d.ts +31 -0
- package/core/functions/deep-merge.js +51 -0
- package/core/functions/deep-merge.js.map +1 -0
- package/core/functions/deep-merge.test.d.ts +1 -0
- package/core/functions/deep-merge.test.js +94 -0
- package/core/functions/deep-merge.test.js.map +1 -0
- package/core/functions/index.d.ts +4 -0
- package/core/functions/index.js +26 -0
- package/core/functions/index.js.map +1 -0
- package/core/functions/is-async-generator.d.ts +1 -0
- package/core/functions/is-async-generator.js +25 -0
- package/core/functions/is-async-generator.js.map +1 -0
- package/core/functions/is-promise.d.ts +1 -0
- package/core/functions/is-promise.js +26 -0
- package/core/functions/is-promise.js.map +1 -0
- package/core/functions/with-validation.d.ts +5 -0
- package/core/functions/with-validation.js +38 -0
- package/core/functions/with-validation.js.map +1 -0
- package/core/functions/with-validation.test.d.ts +1 -0
- package/core/functions/with-validation.test.js +96 -0
- package/core/functions/with-validation.test.js.map +1 -0
- package/core/index.d.ts +3 -0
- package/core/index.js +25 -0
- package/core/index.js.map +1 -0
- package/core/schema.d.ts +86 -0
- package/core/schema.js +33 -0
- package/core/schema.js.map +1 -0
- package/core/schema.test.d.ts +1 -0
- package/core/schema.test.js +16 -0
- package/core/schema.test.js.map +1 -0
- package/ecs/action-ecs/action-ecs.d.ts +19 -0
- package/ecs/action-ecs/action-ecs.js +203 -0
- package/ecs/action-ecs/action-ecs.js.map +1 -0
- package/ecs/action-ecs/action-ecs.test.d.ts +1 -0
- package/ecs/action-ecs/action-ecs.test.js +362 -0
- package/ecs/action-ecs/action-ecs.test.js.map +1 -0
- package/ecs/action-ecs/action-types.d.ts +106 -0
- package/ecs/action-ecs/action-types.js +19 -0
- package/ecs/action-ecs/action-types.js.map +1 -0
- package/ecs/action-ecs/index.d.ts +2 -0
- package/ecs/action-ecs/index.js +23 -0
- package/ecs/action-ecs/index.js.map +1 -0
- package/ecs/core-ecs/core-ecs-serialization.test.d.ts +1 -0
- package/ecs/core-ecs/core-ecs-serialization.test.js +230 -0
- package/ecs/core-ecs/core-ecs-serialization.test.js.map +1 -0
- package/ecs/core-ecs/core-ecs-types.d.ts +141 -0
- package/ecs/core-ecs/core-ecs-types.js +23 -0
- package/ecs/core-ecs/core-ecs-types.js.map +1 -0
- package/ecs/core-ecs/core-ecs.d.ts +7 -0
- package/ecs/core-ecs/core-ecs.js +492 -0
- package/ecs/core-ecs/core-ecs.js.map +1 -0
- package/ecs/core-ecs/core-ecs.test.d.ts +1 -0
- package/ecs/core-ecs/core-ecs.test.js +404 -0
- package/ecs/core-ecs/core-ecs.test.js.map +1 -0
- package/ecs/core-ecs/index.d.ts +1 -0
- package/ecs/core-ecs/index.js +2 -0
- package/ecs/core-ecs/index.js.map +1 -0
- package/ecs/ecs/ecs-types.d.ts +132 -0
- package/ecs/ecs/ecs-types.js +23 -0
- package/ecs/ecs/ecs-types.js.map +1 -0
- package/ecs/ecs/ecs-where-functions.d.ts +6 -0
- package/ecs/ecs/ecs-where-functions.js +91 -0
- package/ecs/ecs/ecs-where-functions.js.map +1 -0
- package/ecs/ecs/ecs.d.ts +13 -0
- package/ecs/ecs/ecs.js +177 -0
- package/ecs/ecs/ecs.js.map +1 -0
- package/ecs/ecs/ecs.test.d.ts +1 -0
- package/ecs/ecs/ecs.test.js +399 -0
- package/ecs/ecs/ecs.test.js.map +1 -0
- package/ecs/ecs/index.d.ts +3 -0
- package/ecs/ecs/index.js +3 -0
- package/ecs/ecs/index.js.map +1 -0
- package/ecs/index.d.ts +4 -0
- package/ecs/index.js +26 -0
- package/ecs/index.js.map +1 -0
- package/ecs/transaction-ecs/index.d.ts +2 -0
- package/ecs/transaction-ecs/index.js +24 -0
- package/ecs/transaction-ecs/index.js.map +1 -0
- package/ecs/transaction-ecs/transaction-ecs.d.ts +11 -0
- package/ecs/transaction-ecs/transaction-ecs.js +184 -0
- package/ecs/transaction-ecs/transaction-ecs.js.map +1 -0
- package/ecs/transaction-ecs/transaction-ecs.test.d.ts +1 -0
- package/ecs/transaction-ecs/transaction-ecs.test.js +599 -0
- package/ecs/transaction-ecs/transaction-ecs.test.js.map +1 -0
- package/ecs/transaction-ecs/transaction-types.d.ts +135 -0
- package/ecs/transaction-ecs/transaction-types.js +2 -0
- package/ecs/transaction-ecs/transaction-types.js.map +1 -0
- package/ecs/transaction-ecs/transactions.d.ts +5 -0
- package/ecs/transaction-ecs/transactions.js +158 -0
- package/ecs/transaction-ecs/transactions.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +23 -0
- package/index.js.map +1 -0
- package/observe/create-observable-event.d.ts +10 -0
- package/observe/create-observable-event.js +22 -0
- package/observe/create-observable-event.js.map +1 -0
- package/observe/create-observable-state.d.ts +7 -0
- package/observe/create-observable-state.js +27 -0
- package/observe/create-observable-state.js.map +1 -0
- package/observe/create-persisted-state.d.ts +11 -0
- package/observe/create-persisted-state.js +31 -0
- package/observe/create-persisted-state.js.map +1 -0
- package/observe/create-persisted-state.test.d.ts +1 -0
- package/observe/create-persisted-state.test.js +124 -0
- package/observe/create-persisted-state.test.js.map +1 -0
- package/observe/from-array.d.ts +5 -0
- package/observe/from-array.js +30 -0
- package/observe/from-array.js.map +1 -0
- package/observe/from-constant.d.ts +5 -0
- package/observe/from-constant.js +12 -0
- package/observe/from-constant.js.map +1 -0
- package/observe/from-element-id.d.ts +7 -0
- package/observe/from-element-id.js +70 -0
- package/observe/from-element-id.js.map +1 -0
- package/observe/from-element-properties-and-events.d.ts +2 -0
- package/observe/from-element-properties-and-events.js +18 -0
- package/observe/from-element-properties-and-events.js.map +1 -0
- package/observe/from-element-property.d.ts +11 -0
- package/observe/from-element-property.js +60 -0
- package/observe/from-element-property.js.map +1 -0
- package/observe/from-promise-with-error.d.ts +7 -0
- package/observe/from-promise-with-error.js +27 -0
- package/observe/from-promise-with-error.js.map +1 -0
- package/observe/from-promise.d.ts +6 -0
- package/observe/from-promise.js +22 -0
- package/observe/from-promise.js.map +1 -0
- package/observe/from-properties.d.ts +10 -0
- package/observe/from-properties.js +33 -0
- package/observe/from-properties.js.map +1 -0
- package/observe/index.d.ts +27 -0
- package/observe/index.js +49 -0
- package/observe/index.js.map +1 -0
- package/observe/observe.test.d.ts +7 -0
- package/observe/observe.test.js +417 -0
- package/observe/observe.test.js.map +1 -0
- package/observe/to-promise.d.ts +8 -0
- package/observe/to-promise.js +18 -0
- package/observe/to-promise.js.map +1 -0
- package/observe/to-properties.d.ts +11 -0
- package/observe/to-properties.js +9 -0
- package/observe/to-properties.js.map +1 -0
- package/observe/types.d.ts +17 -0
- package/observe/types.js +2 -0
- package/observe/types.js.map +1 -0
- package/observe/with-async-map.d.ts +6 -0
- package/observe/with-async-map.js +12 -0
- package/observe/with-async-map.js.map +1 -0
- package/observe/with-cache.d.ts +6 -0
- package/observe/with-cache.js +33 -0
- package/observe/with-cache.js.map +1 -0
- package/observe/with-copy.d.ts +5 -0
- package/observe/with-copy.js +10 -0
- package/observe/with-copy.js.map +1 -0
- package/observe/with-deduplicate-data.d.ts +7 -0
- package/observe/with-deduplicate-data.js +18 -0
- package/observe/with-deduplicate-data.js.map +1 -0
- package/observe/with-deduplicate.d.ts +6 -0
- package/observe/with-deduplicate.js +19 -0
- package/observe/with-deduplicate.js.map +1 -0
- package/observe/with-default.d.ts +6 -0
- package/observe/with-default.js +21 -0
- package/observe/with-default.js.map +1 -0
- package/observe/with-map-data.d.ts +7 -0
- package/observe/with-map-data.js +32 -0
- package/observe/with-map-data.js.map +1 -0
- package/observe/with-map.d.ts +5 -0
- package/observe/with-map.js +11 -0
- package/observe/with-map.js.map +1 -0
- package/observe/with-optional.d.ts +5 -0
- package/observe/with-optional.js +20 -0
- package/observe/with-optional.js.map +1 -0
- package/observe/with-unwrap.d.ts +5 -0
- package/observe/with-unwrap.js +26 -0
- package/observe/with-unwrap.js.map +1 -0
- package/package.json +105 -0
- package/perftest/ecs-perf.d.ts +49 -0
- package/perftest/ecs-perf.js +230 -0
- package/perftest/ecs-perf.js.map +1 -0
- package/perftest/helper-functions.d.ts +1 -0
- package/perftest/helper-functions.js +31 -0
- package/perftest/helper-functions.js.map +1 -0
- package/perftest/horizon-perf.d.ts +22 -0
- package/perftest/horizon-perf.js +126 -0
- package/perftest/horizon-perf.js.map +1 -0
- package/perftest/index.d.ts +1 -0
- package/perftest/index.js +35 -0
- package/perftest/index.js.map +1 -0
- package/perftest/perf-test.d.ts +18 -0
- package/perftest/perf-test.js +124 -0
- package/perftest/perf-test.js.map +1 -0
- package/perftest/vanilla-perf.d.ts +38 -0
- package/perftest/vanilla-perf.js +128 -0
- package/perftest/vanilla-perf.js.map +1 -0
- package/schemas/index.d.ts +1 -0
- package/schemas/index.js +23 -0
- package/schemas/index.js.map +1 -0
- package/schemas/schemas.d.ts +45 -0
- package/schemas/schemas.js +39 -0
- package/schemas/schemas.js.map +1 -0
- package/service/add-observable-actions.d.ts +29 -0
- package/service/add-observable-actions.js +108 -0
- package/service/add-observable-actions.js.map +1 -0
- package/service/index.d.ts +4 -0
- package/service/index.js +26 -0
- package/service/index.js.map +1 -0
- package/service/progressive-result.d.ts +96 -0
- package/service/progressive-result.js +99 -0
- package/service/progressive-result.js.map +1 -0
- package/service/sequential-action.d.ts +18 -0
- package/service/sequential-action.js +45 -0
- package/service/sequential-action.js.map +1 -0
- package/service/service.d.ts +4 -0
- package/service/service.js +26 -0
- package/service/service.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +23 -0
- package/types/index.js.map +1 -0
- package/types/types.d.ts +61 -0
- package/types/types.js +27 -0
- package/types/types.js.map +1 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new Observe function on a data value which will be cached such that
|
|
3
|
+
* observers will never be notified consecutively of equivalent values.
|
|
4
|
+
*/
|
|
5
|
+
export function withDeduplicate(observable) {
|
|
6
|
+
return (observer) => {
|
|
7
|
+
let notified = false;
|
|
8
|
+
let lastValue = undefined;
|
|
9
|
+
return observable((value) => {
|
|
10
|
+
const notify = !notified || lastValue !== value;
|
|
11
|
+
if (notify) {
|
|
12
|
+
notified = true;
|
|
13
|
+
lastValue = value;
|
|
14
|
+
observer(value);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=with-deduplicate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-deduplicate.js","sourceRoot":"","sources":["../../src/observe/with-deduplicate.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAI,UAAsB;IACvD,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAAkB,SAAS,CAAC;QACzC,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,CAAC,QAAQ,IAAI,SAAS,KAAK,KAAK,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,GAAG,KAAK,CAAC;gBAClB,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Observe } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new observable that will use a defaultValue whenever the observed
|
|
4
|
+
* value is undefined and will always respond synchronously when called.
|
|
5
|
+
*/
|
|
6
|
+
export declare const withDefault: <T>(defaultValue: T) => (observable: Observe<T | undefined>) => Observe<T>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new observable that will use a defaultValue whenever the observed
|
|
3
|
+
* value is undefined and will always respond synchronously when called.
|
|
4
|
+
*/
|
|
5
|
+
export const withDefault = (defaultValue) => (observable) => {
|
|
6
|
+
return (observer) => {
|
|
7
|
+
let notified = false;
|
|
8
|
+
const notify = (value) => {
|
|
9
|
+
notified = true;
|
|
10
|
+
observer(value === undefined ? defaultValue : value);
|
|
11
|
+
};
|
|
12
|
+
const unobserverInternal = observable((value) => {
|
|
13
|
+
notify(value);
|
|
14
|
+
});
|
|
15
|
+
if (!notified) {
|
|
16
|
+
notify();
|
|
17
|
+
}
|
|
18
|
+
return unobserverInternal;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=with-default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-default.js","sourceRoot":"","sources":["../../src/observe/with-default.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GACtB,CAAI,YAAe,EAAE,EAAE,CACrB,CAAC,UAAkC,EAAc,EAAE;IACjD,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,QAAQ,GAAG,KAAgB,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,KAAS,EAAE,EAAE;YAC3B,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;QACX,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Data } from "../index.js";
|
|
2
|
+
import { Observe } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A higher order observable that maps to a specific data value, deduplicates the data, and copies the data.
|
|
5
|
+
* withMapData(observable, map) = withCopy(withDeduplicateData(withMap(observable, map)))
|
|
6
|
+
*/
|
|
7
|
+
export declare function withMapData<T, U extends Data>(observable: Observe<T>, map: (value: T) => U): Observe<U>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
import { withCopy } from "./with-copy.js";
|
|
23
|
+
import { withDeduplicateData } from "./with-deduplicate-data.js";
|
|
24
|
+
import { withMap } from "./with-map.js";
|
|
25
|
+
/**
|
|
26
|
+
* A higher order observable that maps to a specific data value, deduplicates the data, and copies the data.
|
|
27
|
+
* withMapData(observable, map) = withCopy(withDeduplicateData(withMap(observable, map)))
|
|
28
|
+
*/
|
|
29
|
+
export function withMapData(observable, map) {
|
|
30
|
+
return withCopy(withDeduplicateData(withMap(observable, map)));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=with-map-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-map-data.js","sourceRoot":"","sources":["../../src/observe/with-map-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AAIX,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,UAAsB,EACtB,GAAoB;IAEpB,OAAO,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Observe } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new Observe function that converts the original observe functions notify values into a new value at each notification.
|
|
4
|
+
*/
|
|
5
|
+
export declare function withMap<T, U>(observable: Observe<T>, map: (value: T) => U): Observe<U>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new Observe function that converts the original observe functions notify values into a new value at each notification.
|
|
3
|
+
*/
|
|
4
|
+
export function withMap(observable, map) {
|
|
5
|
+
return (observer) => {
|
|
6
|
+
return observable((value) => {
|
|
7
|
+
observer(map(value));
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=with-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-map.js","sourceRoot":"","sources":["../../src/observe/with-map.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,UAAsB,EACtB,GAAoB;IAEpB,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,OAAO,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a new Observe function that may be undefined but will always yield a result or undefined synchronously when called.
|
|
3
|
+
*/
|
|
4
|
+
export const withOptional = (observable) => {
|
|
5
|
+
return (observer) => {
|
|
6
|
+
let notified = false;
|
|
7
|
+
const notify = (value) => {
|
|
8
|
+
notified = true;
|
|
9
|
+
observer(value);
|
|
10
|
+
};
|
|
11
|
+
const unobserverInternal = observable((value) => {
|
|
12
|
+
notify(value);
|
|
13
|
+
});
|
|
14
|
+
if (!notified) {
|
|
15
|
+
notify();
|
|
16
|
+
}
|
|
17
|
+
return unobserverInternal;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=with-optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-optional.js","sourceRoot":"","sources":["../../src/observe/with-optional.ts"],"names":[],"mappings":"AAuBA;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,UAAsB,EACE,EAAE;IAC1B,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,QAAQ,GAAG,KAAgB,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,KAAS,EAAE,EAAE;YAC3B,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9C,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,CAAC;QACX,CAAC;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unwraps a nested observable to provide a single observable with the inner observable's values.
|
|
3
|
+
*/
|
|
4
|
+
export function withUnwrap(observable) {
|
|
5
|
+
return (observer) => {
|
|
6
|
+
let currentUnsubscribe = null; // Track the current subscription
|
|
7
|
+
const unsubscribe = observable((innerObservable) => {
|
|
8
|
+
// Unsubscribe from the current inner observable before subscribing to the new one
|
|
9
|
+
if (currentUnsubscribe) {
|
|
10
|
+
currentUnsubscribe();
|
|
11
|
+
}
|
|
12
|
+
// Subscribe to the new inner observable and update the currentUnsubscribe
|
|
13
|
+
currentUnsubscribe = innerObservable((value) => {
|
|
14
|
+
observer(value);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
// Return a new unsubscribe function that unsubscribes from both the outer and current inner observables
|
|
18
|
+
return () => {
|
|
19
|
+
unsubscribe(); // Unsubscribe from the outer observable
|
|
20
|
+
if (currentUnsubscribe) {
|
|
21
|
+
currentUnsubscribe(); // Ensure we unsubscribe from the current inner observable
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=with-unwrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-unwrap.js","sourceRoot":"","sources":["../../src/observe/with-unwrap.ts"],"names":[],"mappings":"AAuBA;;GAEG;AAEH,MAAM,UAAU,UAAU,CACxB,UAA+B;IAE/B,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,kBAAkB,GAAqB,IAAI,CAAC,CAAC,iCAAiC;QAElF,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,eAAe,EAAE,EAAE;YACjD,kFAAkF;YAClF,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,EAAE,CAAC;YACvB,CAAC;YAED,0EAA0E;YAC1E,kBAAkB,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7C,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,wGAAwG;QACxG,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC,CAAC,wCAAwC;YACvD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,EAAE,CAAC,CAAC,0DAA0D;YAClF,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@adobe/data",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Adobe data oriented programming library",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": true,
|
|
7
|
+
"private": false,
|
|
8
|
+
"packageManager": "pnpm@8.6.2+sha256.c6da9e00697e334b6193c034a5d1508e4c8605b12f249736b13f31139f4f0d73",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./core/index.js",
|
|
12
|
+
"types": "./core/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./cache": {
|
|
15
|
+
"import": "./cache/index.js",
|
|
16
|
+
"types": "./cache/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./schemas": {
|
|
19
|
+
"import": "./schemas/index.js",
|
|
20
|
+
"types": "./schemas/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./types": {
|
|
23
|
+
"import": "./types/index.js",
|
|
24
|
+
"types": "./types/index.d.ts"
|
|
25
|
+
},
|
|
26
|
+
"./observe": {
|
|
27
|
+
"import": "./observe/index.js",
|
|
28
|
+
"types": "./observe/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./ecs": {
|
|
31
|
+
"import": "./ecs/index.js",
|
|
32
|
+
"types": "./ecs/index.d.ts"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@assemblyscript/loader": "^0.27.30",
|
|
37
|
+
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
38
|
+
"@types/uuid": "^10.0.0",
|
|
39
|
+
"@typescript-eslint/eslint-plugin": "^5.59.2",
|
|
40
|
+
"@typescript-eslint/parser": "^5.59.2",
|
|
41
|
+
"@vitest/browser": "^1.6.0",
|
|
42
|
+
"assemblyscript": "^0.27.30",
|
|
43
|
+
"eslint": "^8.56.0",
|
|
44
|
+
"eslint-config-airbnb-typescript": "^17.1.0",
|
|
45
|
+
"eslint-config-prettier": "^8.6.0",
|
|
46
|
+
"eslint-formatter-pretty": "^5.0.0",
|
|
47
|
+
"eslint-plugin-header": "^3.1.1",
|
|
48
|
+
"eslint-plugin-import": "^2.27.5",
|
|
49
|
+
"eslint-plugin-lit": "^1.11.0",
|
|
50
|
+
"eslint-plugin-lit-a11y": "^4.1.2",
|
|
51
|
+
"eslint-plugin-notice": "0.9.10",
|
|
52
|
+
"eslint-plugin-prettier": "^5.1.3",
|
|
53
|
+
"glob": "^11.0.0",
|
|
54
|
+
"jsdom": "^24.1.0",
|
|
55
|
+
"lint-staged": "^13.2.2",
|
|
56
|
+
"nodemon": "^3.1.7",
|
|
57
|
+
"npm-run-all": "^4.1.5",
|
|
58
|
+
"playwright": "^1.46.1",
|
|
59
|
+
"prettier": "^3.2.5",
|
|
60
|
+
"prettier-package-json": "^2.8.0",
|
|
61
|
+
"pretty-quick": "^4.0.0",
|
|
62
|
+
"riteway": "v8.0.0-RC4",
|
|
63
|
+
"stylelint": "^16.2.1",
|
|
64
|
+
"stylelint-config-standard": "^36.0.0",
|
|
65
|
+
"typedoc": "^0.26.7",
|
|
66
|
+
"typescript": "^5.3.3",
|
|
67
|
+
"uuid": "^10.0.0",
|
|
68
|
+
"vite": "^5.1.1",
|
|
69
|
+
"vitest": "^1.6.0",
|
|
70
|
+
"webdriverio": "^9.0.9"
|
|
71
|
+
},
|
|
72
|
+
"lint-staged": {
|
|
73
|
+
"*.ts": "pnpm lint:ts && pnpm lint:css",
|
|
74
|
+
"*.css": "pnpm lint:css",
|
|
75
|
+
"package.json": "pnpm lint:packagejson"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@cfworker/json-schema": "^4.1.1"
|
|
79
|
+
},
|
|
80
|
+
"scripts": {
|
|
81
|
+
"build": "pnpm build-assembly && run-p build:*",
|
|
82
|
+
"build:code": "pnpm copy && tsc -b",
|
|
83
|
+
"build:apidocs": "typedoc",
|
|
84
|
+
"build-assembly": "run-p asbuild:release",
|
|
85
|
+
"clean": "rm -rf dist build node_modules",
|
|
86
|
+
"copy": "mkdir -p dist && cp README.md dist && sed '/publish\":/d' package.json > dist/package.json",
|
|
87
|
+
"deploy-docs": "pnpm build && ./scripts/deploy-docs.sh",
|
|
88
|
+
"dev": "run-p dev:*",
|
|
89
|
+
"dev:build": "pnpm copy && tsc -b -w --preserveWatchOutput",
|
|
90
|
+
"dev:test": "pnpm test",
|
|
91
|
+
"dev:apidocs": "nodemon -w README.md -w dist -x typedoc --delay 100",
|
|
92
|
+
"dev:assembly": "nodemon -w assembly -e ts -x pnpm run asbuild:release --delay 100",
|
|
93
|
+
"lint": "pnpm eslint .",
|
|
94
|
+
"lint-fix": "pnpm eslint . --fix",
|
|
95
|
+
"debug": "vitest --inspect-brk --no-file-parallelism --test-timeout 1000000",
|
|
96
|
+
"link": "pnpm build && cd dist && ln -sf ../node_modules node_modules && pnpm link --global",
|
|
97
|
+
"bump": "pnpm version patch --no-git-tag-version && git commit -am 'bumped patch version' && pnpm run publish",
|
|
98
|
+
"pre-commit": "lint-staged",
|
|
99
|
+
"perftest": "node dist/perftest/index.js",
|
|
100
|
+
"test": "vitest",
|
|
101
|
+
"asbuild:debug": "asc assembly/index.ts -o dist/assembly/index.wasm --target debug --enable simd && echo built dist/assembly/index.wasm",
|
|
102
|
+
"asbuild:release": "asc assembly/index.ts -o dist/assembly/index.wasm --target release --enable simd --optimize && echo built dist/assembly/index.wasm",
|
|
103
|
+
"start": "npx serve ."
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export declare const ec2s: {
|
|
2
|
+
create: {
|
|
3
|
+
setup: (n: number) => Promise<void>;
|
|
4
|
+
run: () => void;
|
|
5
|
+
cleanup: () => Promise<void>;
|
|
6
|
+
type: "create";
|
|
7
|
+
};
|
|
8
|
+
create_batch: {
|
|
9
|
+
setup: (n: number) => Promise<void>;
|
|
10
|
+
run: () => void;
|
|
11
|
+
cleanup: () => Promise<void>;
|
|
12
|
+
type: "create";
|
|
13
|
+
};
|
|
14
|
+
move_column: {
|
|
15
|
+
setup: (n: number) => Promise<void>;
|
|
16
|
+
run: () => void;
|
|
17
|
+
cleanup: () => Promise<void>;
|
|
18
|
+
getVisibleEnabledPositions: () => number[];
|
|
19
|
+
type: "move";
|
|
20
|
+
};
|
|
21
|
+
move_native: {
|
|
22
|
+
setup: (n: number) => Promise<void>;
|
|
23
|
+
run: () => void;
|
|
24
|
+
cleanup: () => Promise<void>;
|
|
25
|
+
getVisibleEnabledPositions: () => number[];
|
|
26
|
+
type: "move";
|
|
27
|
+
};
|
|
28
|
+
move_wasm: {
|
|
29
|
+
setup: (n: number) => Promise<void>;
|
|
30
|
+
run: () => void;
|
|
31
|
+
cleanup: () => Promise<void>;
|
|
32
|
+
getVisibleEnabledPositions: () => number[];
|
|
33
|
+
type: "move";
|
|
34
|
+
};
|
|
35
|
+
move_wasm_simd4: {
|
|
36
|
+
setup: (n: number) => Promise<void>;
|
|
37
|
+
run: () => void;
|
|
38
|
+
cleanup: () => Promise<void>;
|
|
39
|
+
getVisibleEnabledPositions: () => number[];
|
|
40
|
+
type: "move";
|
|
41
|
+
};
|
|
42
|
+
move_wasm_simd4_unrolled: {
|
|
43
|
+
setup: (n: number) => Promise<void>;
|
|
44
|
+
run: () => void;
|
|
45
|
+
cleanup: () => Promise<void>;
|
|
46
|
+
getVisibleEnabledPositions: () => number[];
|
|
47
|
+
type: "move";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
import { createECS } from "../ecs/index.js";
|
|
23
|
+
import { Float32Schema, TrueSchema, Uint32Schema } from "../schemas/schemas.js";
|
|
24
|
+
import * as assembly from "../../dist/assembly/index.js";
|
|
25
|
+
import { createWasmMemoryAllocator } from "../cache/memory-allocator.js";
|
|
26
|
+
// const COUNT = 1_000_000;
|
|
27
|
+
// const SIZEOF_F32 = 4;
|
|
28
|
+
// const SIZEOF_BOOLEAN = 1;
|
|
29
|
+
// const OBJECT_OVERHEAD = 16;
|
|
30
|
+
// // Expected 50 Mb
|
|
31
|
+
// const EXPECTED_MEMORY = (8 * SIZEOF_F32 + 2 * SIZEOF_BOOLEAN + OBJECT_OVERHEAD) * COUNT;
|
|
32
|
+
function createECSWithParticles(count, batch = true) {
|
|
33
|
+
const ecs = createECS({
|
|
34
|
+
allocator: createWasmMemoryAllocator(assembly.memory),
|
|
35
|
+
})
|
|
36
|
+
.withComponents({
|
|
37
|
+
color: Uint32Schema,
|
|
38
|
+
enabled: TrueSchema,
|
|
39
|
+
mass: Float32Schema,
|
|
40
|
+
positionX: Float32Schema,
|
|
41
|
+
positionY: Float32Schema,
|
|
42
|
+
positionZ: Float32Schema,
|
|
43
|
+
velocityX: Float32Schema,
|
|
44
|
+
velocityY: Float32Schema,
|
|
45
|
+
velocityZ: Float32Schema,
|
|
46
|
+
visible: TrueSchema,
|
|
47
|
+
})
|
|
48
|
+
.withArchetypes({
|
|
49
|
+
VisibleEnabled: [
|
|
50
|
+
"id",
|
|
51
|
+
"color",
|
|
52
|
+
"enabled",
|
|
53
|
+
"mass",
|
|
54
|
+
"positionX",
|
|
55
|
+
"positionY",
|
|
56
|
+
"positionZ",
|
|
57
|
+
"velocityX",
|
|
58
|
+
"velocityY",
|
|
59
|
+
"velocityZ",
|
|
60
|
+
"visible",
|
|
61
|
+
],
|
|
62
|
+
InvisibleEnabled: [
|
|
63
|
+
"id",
|
|
64
|
+
"color",
|
|
65
|
+
"enabled",
|
|
66
|
+
"mass",
|
|
67
|
+
"positionX",
|
|
68
|
+
"positionY",
|
|
69
|
+
"positionZ",
|
|
70
|
+
"velocityX",
|
|
71
|
+
"velocityY",
|
|
72
|
+
"velocityZ",
|
|
73
|
+
],
|
|
74
|
+
VisibleDisabled: [
|
|
75
|
+
"id",
|
|
76
|
+
"color",
|
|
77
|
+
"mass",
|
|
78
|
+
"positionX",
|
|
79
|
+
"positionY",
|
|
80
|
+
"positionZ",
|
|
81
|
+
"velocityX",
|
|
82
|
+
"velocityY",
|
|
83
|
+
"velocityZ",
|
|
84
|
+
"visible",
|
|
85
|
+
],
|
|
86
|
+
InvisibleDisabled: [
|
|
87
|
+
"id",
|
|
88
|
+
"color",
|
|
89
|
+
"mass",
|
|
90
|
+
"positionX",
|
|
91
|
+
"positionY",
|
|
92
|
+
"positionZ",
|
|
93
|
+
"velocityX",
|
|
94
|
+
"velocityY",
|
|
95
|
+
"velocityZ",
|
|
96
|
+
]
|
|
97
|
+
});
|
|
98
|
+
const particle_archetypes = [
|
|
99
|
+
ecs.archetypes.VisibleEnabled,
|
|
100
|
+
ecs.archetypes.VisibleDisabled,
|
|
101
|
+
ecs.archetypes.InvisibleEnabled,
|
|
102
|
+
ecs.archetypes.InvisibleDisabled,
|
|
103
|
+
];
|
|
104
|
+
if (batch) {
|
|
105
|
+
const particle_count_per_table = Math.ceil(count / 4);
|
|
106
|
+
const particle_tables = particle_archetypes.map(archetype => ecs.createBatch(archetype, particle_count_per_table));
|
|
107
|
+
for (let tableIndex = 0; tableIndex < particle_tables.length; tableIndex++) {
|
|
108
|
+
const table = particle_tables[tableIndex];
|
|
109
|
+
const positionX = table.columns.positionX.native;
|
|
110
|
+
const positionY = table.columns.positionY.native;
|
|
111
|
+
const positionZ = table.columns.positionZ.native;
|
|
112
|
+
const velocityX = table.columns.velocityX.native;
|
|
113
|
+
const velocityY = table.columns.velocityY.native;
|
|
114
|
+
const velocityZ = table.columns.velocityZ.native;
|
|
115
|
+
const color = table.columns.color.native;
|
|
116
|
+
const mass = table.columns.mass.native;
|
|
117
|
+
for (let k = 0; k < particle_count_per_table; k++) {
|
|
118
|
+
const i = tableIndex + k * 4;
|
|
119
|
+
color[k] = 0xff00ff;
|
|
120
|
+
mass[k] = 10;
|
|
121
|
+
positionX[k] = i + 1;
|
|
122
|
+
positionY[k] = i + 1;
|
|
123
|
+
positionZ[k] = i + 1;
|
|
124
|
+
velocityX[k] = -i;
|
|
125
|
+
velocityY[k] = -i;
|
|
126
|
+
velocityZ[k] = -i;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
for (let i = 0; i < count; i++) {
|
|
132
|
+
ecs.createEntity(particle_archetypes[i % 4], {
|
|
133
|
+
color: 0xff00ff,
|
|
134
|
+
mass: 10,
|
|
135
|
+
positionX: i + 1,
|
|
136
|
+
positionY: i + 1,
|
|
137
|
+
positionZ: i + 1,
|
|
138
|
+
velocityX: -i,
|
|
139
|
+
velocityY: -i,
|
|
140
|
+
velocityZ: -i,
|
|
141
|
+
visible: (i >> 0) % 2 === 0 ? true : false,
|
|
142
|
+
enabled: (i >> 1) % 2 === 0 ? true : false,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return ecs;
|
|
147
|
+
}
|
|
148
|
+
const create = (batch) => {
|
|
149
|
+
let count = 0;
|
|
150
|
+
const setup = async (n) => {
|
|
151
|
+
count = n;
|
|
152
|
+
};
|
|
153
|
+
const run = () => {
|
|
154
|
+
createECSWithParticles(count, batch);
|
|
155
|
+
};
|
|
156
|
+
const cleanup = async () => { };
|
|
157
|
+
return { setup, run: run, cleanup, type: "create" };
|
|
158
|
+
};
|
|
159
|
+
function addManagedArrays(a, b, rows, addWasm) {
|
|
160
|
+
const aptr = a.native.byteOffset.valueOf();
|
|
161
|
+
const bptr = b.native.byteOffset.valueOf();
|
|
162
|
+
addWasm(aptr, bptr, rows);
|
|
163
|
+
}
|
|
164
|
+
function createMoveParticlesPerformanceTest(options) {
|
|
165
|
+
let ecs;
|
|
166
|
+
const setup = async (n) => {
|
|
167
|
+
ecs = createECSWithParticles(n);
|
|
168
|
+
};
|
|
169
|
+
const run = () => {
|
|
170
|
+
let total = 0;
|
|
171
|
+
const addWasm = typeof options.mode === "function" ? options.mode : null;
|
|
172
|
+
for (const table of ecs.getTables(ecs.archetypes.VisibleEnabled, {
|
|
173
|
+
mode: "write",
|
|
174
|
+
})) {
|
|
175
|
+
const { rows, columns } = table;
|
|
176
|
+
total += rows;
|
|
177
|
+
if (addWasm) {
|
|
178
|
+
addManagedArrays(columns.positionX, columns.velocityX, rows, addWasm);
|
|
179
|
+
addManagedArrays(columns.positionY, columns.velocityY, rows, addWasm);
|
|
180
|
+
addManagedArrays(columns.positionZ, columns.velocityZ, rows, addWasm);
|
|
181
|
+
}
|
|
182
|
+
else if (options.mode === "column") {
|
|
183
|
+
const { positionX, positionY, positionZ, velocityX, velocityY, velocityZ, } = columns;
|
|
184
|
+
for (let i = 0; i < rows; i++) {
|
|
185
|
+
positionX.set(i, positionX.get(i) + velocityX.get(i));
|
|
186
|
+
positionY.set(i, positionY.get(i) + velocityY.get(i));
|
|
187
|
+
positionZ.set(i, positionZ.get(i) + velocityZ.get(i));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else if (options.mode === "native") {
|
|
191
|
+
const positionX = columns.positionX.native;
|
|
192
|
+
const positionY = columns.positionY.native;
|
|
193
|
+
const positionZ = columns.positionZ.native;
|
|
194
|
+
const velocityX = columns.velocityX.native;
|
|
195
|
+
const velocityY = columns.velocityY.native;
|
|
196
|
+
const velocityZ = columns.velocityZ.native;
|
|
197
|
+
for (let i = 0; i < rows; i++) {
|
|
198
|
+
positionX[i] += velocityX[i];
|
|
199
|
+
positionY[i] += velocityY[i];
|
|
200
|
+
positionZ[i] += velocityZ[i];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const getVisibleEnabledPositions = () => {
|
|
206
|
+
const values = [];
|
|
207
|
+
for (const table of ecs.getTables(ecs.archetypes.VisibleEnabled, {
|
|
208
|
+
mode: "read",
|
|
209
|
+
})) {
|
|
210
|
+
const { rows, columns } = table;
|
|
211
|
+
const { positionX, positionY, positionZ } = columns;
|
|
212
|
+
for (let i = 0; i < rows; i++) {
|
|
213
|
+
values.push(positionX.get(i), positionY.get(i), positionZ.get(i));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return values;
|
|
217
|
+
};
|
|
218
|
+
const cleanup = async () => { };
|
|
219
|
+
return { setup, run: run, cleanup, getVisibleEnabledPositions, type: "move" };
|
|
220
|
+
}
|
|
221
|
+
export const ec2s = {
|
|
222
|
+
create: create(false),
|
|
223
|
+
create_batch: create(true),
|
|
224
|
+
move_column: createMoveParticlesPerformanceTest({ mode: "column" }),
|
|
225
|
+
move_native: createMoveParticlesPerformanceTest({ mode: "native" }),
|
|
226
|
+
move_wasm: createMoveParticlesPerformanceTest({ mode: assembly.addF32Arrays }),
|
|
227
|
+
move_wasm_simd4: createMoveParticlesPerformanceTest({ mode: assembly.addF32ArraysSimd4 }),
|
|
228
|
+
move_wasm_simd4_unrolled: createMoveParticlesPerformanceTest({ mode: assembly.addF32ArraysSimd4Unrolled }),
|
|
229
|
+
};
|
|
230
|
+
//# sourceMappingURL=ecs-perf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecs-perf.js","sourceRoot":"","sources":["../../src/perftest/ecs-perf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function shuffleArray<T>(array: T[]): T[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*MIT License
|
|
2
|
+
|
|
3
|
+
© Copyright 2025 Adobe. All rights reserved.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.*/
|
|
22
|
+
export function shuffleArray(array) {
|
|
23
|
+
for (let i = array.length - 1; i > 0; i--) {
|
|
24
|
+
// Generate a random index lower than the current element
|
|
25
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
26
|
+
// Swap elements at indices i and j
|
|
27
|
+
[array[i], array[j]] = [array[j], array[i]];
|
|
28
|
+
}
|
|
29
|
+
return array;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=helper-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-functions.js","sourceRoot":"","sources":["../../src/perftest/helper-functions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,MAAM,UAAU,YAAY,CAAI,KAAU;IACxC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,yDAAyD;QACzD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE9C,mCAAmC;QACnC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|