@symbiote-native/sensors 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +138 -0
- package/build/angular/index.d.ts +16 -0
- package/build/angular/index.js +12 -0
- package/build/angular/services/accelerometer.service/index.d.ts +6 -0
- package/build/angular/services/accelerometer.service/index.js +81 -0
- package/build/angular/services/barometer.service/index.d.ts +6 -0
- package/build/angular/services/barometer.service/index.js +81 -0
- package/build/angular/services/device-motion.service/index.d.ts +6 -0
- package/build/angular/services/device-motion.service/index.js +81 -0
- package/build/angular/services/gyroscope.service/index.d.ts +6 -0
- package/build/angular/services/gyroscope.service/index.js +81 -0
- package/build/angular/services/light-sensor.service/index.d.ts +6 -0
- package/build/angular/services/light-sensor.service/index.js +81 -0
- package/build/angular/services/magnetometer-uncalibrated.service/index.d.ts +6 -0
- package/build/angular/services/magnetometer-uncalibrated.service/index.js +81 -0
- package/build/angular/services/magnetometer.service/index.d.ts +6 -0
- package/build/angular/services/magnetometer.service/index.js +81 -0
- package/build/angular/services/pedometer.service/index.d.ts +6 -0
- package/build/angular/services/pedometer.service/index.js +76 -0
- package/build/core/accelerometer.d.ts +10 -0
- package/build/core/accelerometer.js +6 -0
- package/build/core/barometer.d.ts +9 -0
- package/build/core/barometer.js +6 -0
- package/build/core/device-motion.d.ts +40 -0
- package/build/core/device-motion.js +21 -0
- package/build/core/device-sensor.d.ts +27 -0
- package/build/core/device-sensor.js +61 -0
- package/build/core/gyroscope.d.ts +10 -0
- package/build/core/gyroscope.js +6 -0
- package/build/core/index.d.ts +11 -0
- package/build/core/index.js +10 -0
- package/build/core/light-sensor.d.ts +8 -0
- package/build/core/light-sensor.js +6 -0
- package/build/core/magnetometer-uncalibrated.d.ts +10 -0
- package/build/core/magnetometer-uncalibrated.js +6 -0
- package/build/core/magnetometer.d.ts +10 -0
- package/build/core/magnetometer.js +6 -0
- package/build/core/native/exponent-accelerometer.d.ts +3 -0
- package/build/core/native/exponent-accelerometer.js +3 -0
- package/build/core/native/exponent-barometer.d.ts +3 -0
- package/build/core/native/exponent-barometer.js +3 -0
- package/build/core/native/exponent-device-motion.d.ts +7 -0
- package/build/core/native/exponent-device-motion.js +3 -0
- package/build/core/native/exponent-gyroscope.d.ts +3 -0
- package/build/core/native/exponent-gyroscope.js +3 -0
- package/build/core/native/exponent-light-sensor/index.android.d.ts +3 -0
- package/build/core/native/exponent-light-sensor/index.android.js +3 -0
- package/build/core/native/exponent-light-sensor/index.d.ts +1 -0
- package/build/core/native/exponent-light-sensor/index.ios.d.ts +3 -0
- package/build/core/native/exponent-light-sensor/index.ios.js +6 -0
- package/build/core/native/exponent-light-sensor/index.js +5 -0
- package/build/core/native/exponent-magnetometer-uncalibrated.d.ts +3 -0
- package/build/core/native/exponent-magnetometer-uncalibrated.js +3 -0
- package/build/core/native/exponent-magnetometer.d.ts +3 -0
- package/build/core/native/exponent-magnetometer.js +3 -0
- package/build/core/native/exponent-pedometer.d.ts +10 -0
- package/build/core/native/exponent-pedometer.js +3 -0
- package/build/core/pedometer.d.ts +10 -0
- package/build/core/pedometer.js +44 -0
- package/build/react/hooks/use-accelerometer/index.d.ts +2 -0
- package/build/react/hooks/use-accelerometer/index.js +17 -0
- package/build/react/hooks/use-barometer/index.d.ts +2 -0
- package/build/react/hooks/use-barometer/index.js +17 -0
- package/build/react/hooks/use-device-motion/index.d.ts +2 -0
- package/build/react/hooks/use-device-motion/index.js +17 -0
- package/build/react/hooks/use-gyroscope/index.d.ts +2 -0
- package/build/react/hooks/use-gyroscope/index.js +17 -0
- package/build/react/hooks/use-light-sensor/index.d.ts +2 -0
- package/build/react/hooks/use-light-sensor/index.js +17 -0
- package/build/react/hooks/use-magnetometer/index.d.ts +2 -0
- package/build/react/hooks/use-magnetometer/index.js +17 -0
- package/build/react/hooks/use-magnetometer-uncalibrated/index.d.ts +2 -0
- package/build/react/hooks/use-magnetometer-uncalibrated/index.js +17 -0
- package/build/react/hooks/use-pedometer/index.d.ts +2 -0
- package/build/react/hooks/use-pedometer/index.js +14 -0
- package/build/react/index.d.ts +16 -0
- package/build/react/index.js +14 -0
- package/build/vue/composables/use-accelerometer/index.d.ts +3 -0
- package/build/vue/composables/use-accelerometer/index.js +25 -0
- package/build/vue/composables/use-barometer/index.d.ts +3 -0
- package/build/vue/composables/use-barometer/index.js +25 -0
- package/build/vue/composables/use-device-motion/index.d.ts +3 -0
- package/build/vue/composables/use-device-motion/index.js +25 -0
- package/build/vue/composables/use-gyroscope/index.d.ts +3 -0
- package/build/vue/composables/use-gyroscope/index.js +25 -0
- package/build/vue/composables/use-light-sensor/index.d.ts +3 -0
- package/build/vue/composables/use-light-sensor/index.js +25 -0
- package/build/vue/composables/use-magnetometer/index.d.ts +3 -0
- package/build/vue/composables/use-magnetometer/index.js +25 -0
- package/build/vue/composables/use-magnetometer-uncalibrated/index.d.ts +3 -0
- package/build/vue/composables/use-magnetometer-uncalibrated/index.js +25 -0
- package/build/vue/composables/use-pedometer/index.d.ts +3 -0
- package/build/vue/composables/use-pedometer/index.js +20 -0
- package/build/vue/index.d.ts +16 -0
- package/build/vue/index.js +14 -0
- package/build-ngc/angular/index.d.ts +16 -0
- package/build-ngc/angular/index.js +13 -0
- package/build-ngc/angular/index.js.map +1 -0
- package/build-ngc/angular/services/accelerometer.service/index.d.ts +9 -0
- package/build-ngc/angular/services/accelerometer.service/index.js +40 -0
- package/build-ngc/angular/services/accelerometer.service/index.js.map +1 -0
- package/build-ngc/angular/services/barometer.service/index.d.ts +9 -0
- package/build-ngc/angular/services/barometer.service/index.js +40 -0
- package/build-ngc/angular/services/barometer.service/index.js.map +1 -0
- package/build-ngc/angular/services/device-motion.service/index.d.ts +9 -0
- package/build-ngc/angular/services/device-motion.service/index.js +40 -0
- package/build-ngc/angular/services/device-motion.service/index.js.map +1 -0
- package/build-ngc/angular/services/gyroscope.service/index.d.ts +9 -0
- package/build-ngc/angular/services/gyroscope.service/index.js +40 -0
- package/build-ngc/angular/services/gyroscope.service/index.js.map +1 -0
- package/build-ngc/angular/services/light-sensor.service/index.d.ts +9 -0
- package/build-ngc/angular/services/light-sensor.service/index.js +40 -0
- package/build-ngc/angular/services/light-sensor.service/index.js.map +1 -0
- package/build-ngc/angular/services/magnetometer-uncalibrated.service/index.d.ts +9 -0
- package/build-ngc/angular/services/magnetometer-uncalibrated.service/index.js +40 -0
- package/build-ngc/angular/services/magnetometer-uncalibrated.service/index.js.map +1 -0
- package/build-ngc/angular/services/magnetometer.service/index.d.ts +9 -0
- package/build-ngc/angular/services/magnetometer.service/index.js +40 -0
- package/build-ngc/angular/services/magnetometer.service/index.js.map +1 -0
- package/build-ngc/angular/services/pedometer.service/index.d.ts +9 -0
- package/build-ngc/angular/services/pedometer.service/index.js +35 -0
- package/build-ngc/angular/services/pedometer.service/index.js.map +1 -0
- package/build-ngc/core/accelerometer.d.ts +10 -0
- package/build-ngc/core/accelerometer.js +7 -0
- package/build-ngc/core/accelerometer.js.map +1 -0
- package/build-ngc/core/barometer.d.ts +9 -0
- package/build-ngc/core/barometer.js +7 -0
- package/build-ngc/core/barometer.js.map +1 -0
- package/build-ngc/core/device-motion.d.ts +40 -0
- package/build-ngc/core/device-motion.js +22 -0
- package/build-ngc/core/device-motion.js.map +1 -0
- package/build-ngc/core/device-sensor.d.ts +27 -0
- package/build-ngc/core/device-sensor.js +62 -0
- package/build-ngc/core/device-sensor.js.map +1 -0
- package/build-ngc/core/gyroscope.d.ts +10 -0
- package/build-ngc/core/gyroscope.js +7 -0
- package/build-ngc/core/gyroscope.js.map +1 -0
- package/build-ngc/core/index.d.ts +11 -0
- package/build-ngc/core/index.js +11 -0
- package/build-ngc/core/index.js.map +1 -0
- package/build-ngc/core/light-sensor.d.ts +8 -0
- package/build-ngc/core/light-sensor.js +7 -0
- package/build-ngc/core/light-sensor.js.map +1 -0
- package/build-ngc/core/magnetometer-uncalibrated.d.ts +10 -0
- package/build-ngc/core/magnetometer-uncalibrated.js +7 -0
- package/build-ngc/core/magnetometer-uncalibrated.js.map +1 -0
- package/build-ngc/core/magnetometer.d.ts +10 -0
- package/build-ngc/core/magnetometer.js +7 -0
- package/build-ngc/core/magnetometer.js.map +1 -0
- package/build-ngc/core/native/exponent-accelerometer.d.ts +3 -0
- package/build-ngc/core/native/exponent-accelerometer.js +4 -0
- package/build-ngc/core/native/exponent-accelerometer.js.map +1 -0
- package/build-ngc/core/native/exponent-barometer.d.ts +3 -0
- package/build-ngc/core/native/exponent-barometer.js +4 -0
- package/build-ngc/core/native/exponent-barometer.js.map +1 -0
- package/build-ngc/core/native/exponent-device-motion.d.ts +7 -0
- package/build-ngc/core/native/exponent-device-motion.js +4 -0
- package/build-ngc/core/native/exponent-device-motion.js.map +1 -0
- package/build-ngc/core/native/exponent-gyroscope.d.ts +3 -0
- package/build-ngc/core/native/exponent-gyroscope.js +4 -0
- package/build-ngc/core/native/exponent-gyroscope.js.map +1 -0
- package/build-ngc/core/native/exponent-light-sensor/index.android.d.ts +3 -0
- package/build-ngc/core/native/exponent-light-sensor/index.android.js +4 -0
- package/build-ngc/core/native/exponent-light-sensor/index.android.js.map +1 -0
- package/build-ngc/core/native/exponent-light-sensor/index.d.ts +1 -0
- package/build-ngc/core/native/exponent-light-sensor/index.ios.d.ts +3 -0
- package/build-ngc/core/native/exponent-light-sensor/index.ios.js +7 -0
- package/build-ngc/core/native/exponent-light-sensor/index.ios.js.map +1 -0
- package/build-ngc/core/native/exponent-light-sensor/index.js +6 -0
- package/build-ngc/core/native/exponent-light-sensor/index.js.map +1 -0
- package/build-ngc/core/native/exponent-magnetometer-uncalibrated.d.ts +3 -0
- package/build-ngc/core/native/exponent-magnetometer-uncalibrated.js +4 -0
- package/build-ngc/core/native/exponent-magnetometer-uncalibrated.js.map +1 -0
- package/build-ngc/core/native/exponent-magnetometer.d.ts +3 -0
- package/build-ngc/core/native/exponent-magnetometer.js +4 -0
- package/build-ngc/core/native/exponent-magnetometer.js.map +1 -0
- package/build-ngc/core/native/exponent-pedometer.d.ts +10 -0
- package/build-ngc/core/native/exponent-pedometer.js +4 -0
- package/build-ngc/core/native/exponent-pedometer.js.map +1 -0
- package/build-ngc/core/pedometer.d.ts +10 -0
- package/build-ngc/core/pedometer.js +45 -0
- package/build-ngc/core/pedometer.js.map +1 -0
- package/package.json +106 -0
- package/src/angular/index.ts +26 -0
- package/src/angular/services/accelerometer.service/accelerometer.service.test.ts +118 -0
- package/src/angular/services/accelerometer.service/index.ts +39 -0
- package/src/angular/services/barometer.service/barometer.service.test.ts +122 -0
- package/src/angular/services/barometer.service/index.ts +39 -0
- package/src/angular/services/device-motion.service/device-motion.service.test.ts +125 -0
- package/src/angular/services/device-motion.service/index.ts +39 -0
- package/src/angular/services/gyroscope.service/gyroscope.service.test.ts +118 -0
- package/src/angular/services/gyroscope.service/index.ts +39 -0
- package/src/angular/services/light-sensor.service/index.ts +39 -0
- package/src/angular/services/light-sensor.service/light-sensor.service.test.ts +118 -0
- package/src/angular/services/magnetometer-uncalibrated.service/index.ts +39 -0
- package/src/angular/services/magnetometer-uncalibrated.service/magnetometer-uncalibrated.service.test.ts +123 -0
- package/src/angular/services/magnetometer.service/index.ts +39 -0
- package/src/angular/services/magnetometer.service/magnetometer.service.test.ts +118 -0
- package/src/angular/services/pedometer.service/index.ts +34 -0
- package/src/angular/services/pedometer.service/pedometer.service.test.ts +86 -0
- package/src/core/accelerometer.test.ts +49 -0
- package/src/core/accelerometer.ts +19 -0
- package/src/core/barometer.test.ts +46 -0
- package/src/core/barometer.ts +15 -0
- package/src/core/device-motion.test.ts +60 -0
- package/src/core/device-motion.ts +41 -0
- package/src/core/device-sensor.test.ts +76 -0
- package/src/core/device-sensor.ts +95 -0
- package/src/core/gyroscope.test.ts +46 -0
- package/src/core/gyroscope.ts +16 -0
- package/src/core/index.ts +37 -0
- package/src/core/light-sensor.test.ts +49 -0
- package/src/core/light-sensor.ts +18 -0
- package/src/core/magnetometer-uncalibrated.test.ts +49 -0
- package/src/core/magnetometer-uncalibrated.ts +20 -0
- package/src/core/magnetometer.test.ts +49 -0
- package/src/core/magnetometer.ts +19 -0
- package/src/core/native/exponent-accelerometer.ts +9 -0
- package/src/core/native/exponent-barometer.ts +9 -0
- package/src/core/native/exponent-device-motion.ts +15 -0
- package/src/core/native/exponent-gyroscope.ts +9 -0
- package/src/core/native/exponent-light-sensor/index.android.ts +9 -0
- package/src/core/native/exponent-light-sensor/index.ios.ts +12 -0
- package/src/core/native/exponent-light-sensor/index.ts +5 -0
- package/src/core/native/exponent-magnetometer-uncalibrated.ts +9 -0
- package/src/core/native/exponent-magnetometer.ts +9 -0
- package/src/core/native/exponent-pedometer.ts +17 -0
- package/src/core/pedometer.test.ts +118 -0
- package/src/core/pedometer.ts +62 -0
- package/src/react/hooks/use-accelerometer/index.ts +21 -0
- package/src/react/hooks/use-accelerometer/use-accelerometer.test.tsx +81 -0
- package/src/react/hooks/use-barometer/index.ts +21 -0
- package/src/react/hooks/use-barometer/use-barometer.test.tsx +83 -0
- package/src/react/hooks/use-device-motion/index.ts +21 -0
- package/src/react/hooks/use-device-motion/use-device-motion.test.tsx +88 -0
- package/src/react/hooks/use-gyroscope/index.ts +21 -0
- package/src/react/hooks/use-gyroscope/use-gyroscope.test.tsx +79 -0
- package/src/react/hooks/use-light-sensor/index.ts +21 -0
- package/src/react/hooks/use-light-sensor/use-light-sensor.test.tsx +79 -0
- package/src/react/hooks/use-magnetometer/index.ts +21 -0
- package/src/react/hooks/use-magnetometer/use-magnetometer.test.tsx +81 -0
- package/src/react/hooks/use-magnetometer-uncalibrated/index.ts +23 -0
- package/src/react/hooks/use-magnetometer-uncalibrated/use-magnetometer-uncalibrated.test.tsx +88 -0
- package/src/react/hooks/use-pedometer/index.ts +17 -0
- package/src/react/hooks/use-pedometer/use-pedometer.test.tsx +69 -0
- package/src/react/index.ts +29 -0
- package/src/vue/composables/use-accelerometer/index.ts +34 -0
- package/src/vue/composables/use-accelerometer/use-accelerometer.test.ts +96 -0
- package/src/vue/composables/use-barometer/index.ts +30 -0
- package/src/vue/composables/use-barometer/use-barometer.test.ts +100 -0
- package/src/vue/composables/use-device-motion/index.ts +30 -0
- package/src/vue/composables/use-device-motion/use-device-motion.test.ts +104 -0
- package/src/vue/composables/use-gyroscope/index.ts +30 -0
- package/src/vue/composables/use-gyroscope/use-gyroscope.test.ts +96 -0
- package/src/vue/composables/use-light-sensor/index.ts +30 -0
- package/src/vue/composables/use-light-sensor/use-light-sensor.test.ts +96 -0
- package/src/vue/composables/use-magnetometer/index.ts +30 -0
- package/src/vue/composables/use-magnetometer/use-magnetometer.test.ts +96 -0
- package/src/vue/composables/use-magnetometer-uncalibrated/index.ts +36 -0
- package/src/vue/composables/use-magnetometer-uncalibrated/use-magnetometer-uncalibrated.test.ts +103 -0
- package/src/vue/composables/use-pedometer/index.ts +25 -0
- package/src/vue/composables/use-pedometer/use-pedometer.test.ts +77 -0
- package/src/vue/index.ts +29 -0
package/src/vue/composables/use-magnetometer-uncalibrated/use-magnetometer-uncalibrated.test.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// Co-located Vue-driven test (ADR 0025) for useMagnetometerUncalibrated. Mocks the whole core
|
|
2
|
+
// module (never expo-modules-core internals) since this exercises composable mount/unmount
|
|
3
|
+
// lifecycle timing, not any native view — there is none here, so no ViewConfig fixture is needed.
|
|
4
|
+
|
|
5
|
+
import { defineComponent, h, type Ref } from '@vue/runtime-core';
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
7
|
+
import { mount, unmount } from '@symbiote-native/vue';
|
|
8
|
+
import { installFabric } from '@symbiote-native/test-utils';
|
|
9
|
+
import type { IMagnetometerUncalibratedMeasurement } from '../../../core';
|
|
10
|
+
import { useMagnetometerUncalibrated } from './index';
|
|
11
|
+
|
|
12
|
+
const ROOT_TAG = 9822;
|
|
13
|
+
|
|
14
|
+
type IListener = (measurement: IMagnetometerUncalibratedMeasurement) => void;
|
|
15
|
+
|
|
16
|
+
let registeredListener: IListener | undefined;
|
|
17
|
+
const removeMock = vi.fn();
|
|
18
|
+
const addListenerMock = vi.fn((listener: IListener) => {
|
|
19
|
+
registeredListener = listener;
|
|
20
|
+
return { remove: removeMock };
|
|
21
|
+
});
|
|
22
|
+
const setUpdateIntervalMock = vi.fn();
|
|
23
|
+
|
|
24
|
+
vi.mock('../../../core', () => ({
|
|
25
|
+
MagnetometerUncalibrated: {
|
|
26
|
+
addListener: (listener: IListener) => addListenerMock(listener),
|
|
27
|
+
removeAllListeners: vi.fn(),
|
|
28
|
+
setUpdateInterval: (intervalMs: number) => setUpdateIntervalMock(intervalMs),
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
|
|
32
|
+
const fabric = installFabric();
|
|
33
|
+
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
fabric.reset();
|
|
36
|
+
registeredListener = undefined;
|
|
37
|
+
addListenerMock.mockClear();
|
|
38
|
+
removeMock.mockClear();
|
|
39
|
+
setUpdateIntervalMock.mockClear();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
afterEach(() => unmount(ROOT_TAG));
|
|
43
|
+
|
|
44
|
+
function mountMagnetometerUncalibrated(
|
|
45
|
+
updateIntervalMs?: number,
|
|
46
|
+
): Ref<IMagnetometerUncalibratedMeasurement | null> {
|
|
47
|
+
let measurement: Ref<IMagnetometerUncalibratedMeasurement | null> | undefined;
|
|
48
|
+
mount(
|
|
49
|
+
ROOT_TAG,
|
|
50
|
+
defineComponent({
|
|
51
|
+
setup: () => {
|
|
52
|
+
measurement = useMagnetometerUncalibrated(updateIntervalMs);
|
|
53
|
+
return () => h('symbiote-text', {}, 'sensor');
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
if (measurement === undefined) {
|
|
58
|
+
throw new Error('setup() did not run');
|
|
59
|
+
}
|
|
60
|
+
return measurement;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
describe('useMagnetometerUncalibrated (Vue)', () => {
|
|
64
|
+
it('starts null before any measurement arrives', () => {
|
|
65
|
+
const measurement = mountMagnetometerUncalibrated();
|
|
66
|
+
|
|
67
|
+
expect(measurement.value).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('updates the ref when the native listener fires', () => {
|
|
71
|
+
const measurement = mountMagnetometerUncalibrated();
|
|
72
|
+
const reading: IMagnetometerUncalibratedMeasurement = {
|
|
73
|
+
x: 0.1,
|
|
74
|
+
y: 0.2,
|
|
75
|
+
z: 0.9,
|
|
76
|
+
timestamp: 123,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
registeredListener?.(reading);
|
|
80
|
+
|
|
81
|
+
expect(measurement.value).toEqual(reading);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('removes the subscription on unmount', () => {
|
|
85
|
+
mountMagnetometerUncalibrated();
|
|
86
|
+
unmount(ROOT_TAG);
|
|
87
|
+
|
|
88
|
+
expect(removeMock).toHaveBeenCalledTimes(1);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('sets the update interval once at subscribe time when provided', () => {
|
|
92
|
+
mountMagnetometerUncalibrated(50);
|
|
93
|
+
|
|
94
|
+
expect(setUpdateIntervalMock).toHaveBeenCalledWith(50);
|
|
95
|
+
expect(setUpdateIntervalMock).toHaveBeenCalledTimes(1);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('does not touch the update interval when omitted', () => {
|
|
99
|
+
mountMagnetometerUncalibrated();
|
|
100
|
+
|
|
101
|
+
expect(setUpdateIntervalMock).not.toHaveBeenCalled();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Vue lifecycle wiring over the framework-agnostic watchStepCount free function (core/) —
|
|
2
|
+
// mirrors the lifecycle-bucket naming convention of adapters/vue/src/composables and the
|
|
3
|
+
// onMounted/onUnmounted shape of useAccelerometer. Pedometer has no setUpdateInterval, so
|
|
4
|
+
// unlike useAccelerometer there is no interval param to apply at subscribe time.
|
|
5
|
+
|
|
6
|
+
import { onMounted, onUnmounted, ref, type Ref } from '@vue/runtime-core';
|
|
7
|
+
import { watchStepCount, type EventSubscription, type IPedometerResult } from '../../../core';
|
|
8
|
+
|
|
9
|
+
export function usePedometer(): Ref<IPedometerResult | null> {
|
|
10
|
+
// A plain ref: the value is a POJO result, not an engine node, so no shallowRef needed.
|
|
11
|
+
const result = ref<IPedometerResult | null>(null);
|
|
12
|
+
let subscription: EventSubscription | undefined;
|
|
13
|
+
|
|
14
|
+
onMounted(() => {
|
|
15
|
+
subscription = watchStepCount(next => {
|
|
16
|
+
result.value = next;
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
onUnmounted(() => {
|
|
21
|
+
subscription?.remove();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Co-located Vue-driven test (ADR 0025) for usePedometer. Mocks the whole core module (never
|
|
2
|
+
// expo-modules-core internals) since this exercises composable mount/unmount lifecycle timing,
|
|
3
|
+
// not any native view — there is none here, so no ViewConfig fixture is needed.
|
|
4
|
+
|
|
5
|
+
import { defineComponent, h, type Ref } from '@vue/runtime-core';
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
7
|
+
import { mount, unmount } from '@symbiote-native/vue';
|
|
8
|
+
import { installFabric } from '@symbiote-native/test-utils';
|
|
9
|
+
import type { IPedometerResult } from '../../../core';
|
|
10
|
+
import { usePedometer } from './index';
|
|
11
|
+
|
|
12
|
+
const ROOT_TAG = 9822;
|
|
13
|
+
|
|
14
|
+
type IListener = (result: IPedometerResult) => void;
|
|
15
|
+
|
|
16
|
+
let registeredListener: IListener | undefined;
|
|
17
|
+
const removeMock = vi.fn();
|
|
18
|
+
const watchStepCountMock = vi.fn((listener: IListener) => {
|
|
19
|
+
registeredListener = listener;
|
|
20
|
+
return { remove: removeMock };
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
vi.mock('../../../core', () => ({
|
|
24
|
+
watchStepCount: (listener: IListener) => watchStepCountMock(listener),
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
const fabric = installFabric();
|
|
28
|
+
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
fabric.reset();
|
|
31
|
+
registeredListener = undefined;
|
|
32
|
+
watchStepCountMock.mockClear();
|
|
33
|
+
removeMock.mockClear();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
afterEach(() => unmount(ROOT_TAG));
|
|
37
|
+
|
|
38
|
+
function mountPedometer(): Ref<IPedometerResult | null> {
|
|
39
|
+
let result: Ref<IPedometerResult | null> | undefined;
|
|
40
|
+
mount(
|
|
41
|
+
ROOT_TAG,
|
|
42
|
+
defineComponent({
|
|
43
|
+
setup: () => {
|
|
44
|
+
result = usePedometer();
|
|
45
|
+
return () => h('symbiote-text', {}, 'pedometer');
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
);
|
|
49
|
+
if (result === undefined) {
|
|
50
|
+
throw new Error('setup() did not run');
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
describe('usePedometer (Vue)', () => {
|
|
56
|
+
it('starts null before any step count arrives', () => {
|
|
57
|
+
const result = mountPedometer();
|
|
58
|
+
|
|
59
|
+
expect(result.value).toBeNull();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('updates the ref when the native listener fires', () => {
|
|
63
|
+
const result = mountPedometer();
|
|
64
|
+
const reading: IPedometerResult = { steps: 456 };
|
|
65
|
+
|
|
66
|
+
registeredListener?.(reading);
|
|
67
|
+
|
|
68
|
+
expect(result.value).toEqual(reading);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it('removes the subscription on unmount', () => {
|
|
72
|
+
mountPedometer();
|
|
73
|
+
unmount(ROOT_TAG);
|
|
74
|
+
|
|
75
|
+
expect(removeMock).toHaveBeenCalledTimes(1);
|
|
76
|
+
});
|
|
77
|
+
});
|
package/src/vue/index.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// @symbiote-native/sensors/vue: the Vue entry over the framework-agnostic core. useAccelerometer
|
|
2
|
+
// wires the Accelerometer singleton's addListener lifecycle onto Vue's own onMounted/onUnmounted
|
|
3
|
+
// (composables/use-accelerometer) — mirrors the lifecycle-bucket naming convention of
|
|
4
|
+
// adapters/vue/src/composables (never `hooks/`, that's React's term).
|
|
5
|
+
|
|
6
|
+
export { useAccelerometer } from './composables/use-accelerometer';
|
|
7
|
+
export type { IAccelerometerMeasurement } from '../core';
|
|
8
|
+
export { useBarometer } from './composables/use-barometer';
|
|
9
|
+
export type { IBarometerMeasurement } from '../core';
|
|
10
|
+
export { useDeviceMotion } from './composables/use-device-motion';
|
|
11
|
+
export { DeviceMotionOrientation, gravity, type IDeviceMotionMeasurement } from '../core';
|
|
12
|
+
export { useGyroscope } from './composables/use-gyroscope';
|
|
13
|
+
export type { IGyroscopeMeasurement } from '../core';
|
|
14
|
+
export { useLightSensor } from './composables/use-light-sensor';
|
|
15
|
+
export type { ILightSensorMeasurement } from '../core';
|
|
16
|
+
export { useMagnetometer } from './composables/use-magnetometer';
|
|
17
|
+
export type { IMagnetometerMeasurement } from '../core';
|
|
18
|
+
export { useMagnetometerUncalibrated } from './composables/use-magnetometer-uncalibrated';
|
|
19
|
+
export type { IMagnetometerUncalibratedMeasurement } from '../core';
|
|
20
|
+
export { usePedometer } from './composables/use-pedometer';
|
|
21
|
+
export {
|
|
22
|
+
watchStepCount,
|
|
23
|
+
getStepCountAsync,
|
|
24
|
+
isAvailableAsync,
|
|
25
|
+
getPermissionsAsync,
|
|
26
|
+
requestPermissionsAsync,
|
|
27
|
+
type IPedometerResult,
|
|
28
|
+
type IPedometerUpdateCallback,
|
|
29
|
+
} from '../core';
|