@rustra/react 0.2.0 → 0.3.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/dist/useCommand.d.ts.map +1 -1
- package/dist/useCommand.js +14 -3
- package/dist/useCommand.js.map +1 -1
- package/dist/useMutation.d.ts.map +1 -1
- package/dist/useMutation.js +4 -1
- package/dist/useMutation.js.map +1 -1
- package/package.json +25 -4
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -92
- package/dist/index.test.js.map +0 -1
package/dist/useCommand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCommand.d.ts","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"useCommand.d.ts","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvC;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAC7B,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,KAAK,CAAC,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAAC,CAAC,CAAC,CAkErB"}
|
package/dist/useCommand.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
2
|
+
import { resolveCommandId } from '@rustra/types';
|
|
2
3
|
import { useRustraEngine } from './context.js';
|
|
3
4
|
export function useCommand(commandFn, input, options) {
|
|
4
5
|
const engine = useRustraEngine();
|
|
@@ -6,25 +7,33 @@ export function useCommand(commandFn, input, options) {
|
|
|
6
7
|
const [loading, setLoading] = useState(options?.enabled ?? true);
|
|
7
8
|
const [error, setError] = useState(null);
|
|
8
9
|
const abortControllerRef = useRef(null);
|
|
9
|
-
|
|
10
|
+
// settled ref — cleanup(abort) 와 응답 도착 사이의 미세 경쟁에서 이미 정리된
|
|
11
|
+
// 실행이 상태를 건드리지 못하게 한다. 세대 카운터가 execute 실행마다 증가해
|
|
12
|
+
// stale 실행의 setState 를 전부 가드한다(StrictMode 이중 마운트 포함).
|
|
13
|
+
const generationRef = useRef(0);
|
|
14
|
+
// minify-안전 식별: 코드젠이 심은 commandId 를 우선한다 (Function.name 은
|
|
15
|
+
// 프로덕션 번들러 mangling 으로 바뀔 수 있다).
|
|
16
|
+
const commandName = resolveCommandId(commandFn);
|
|
10
17
|
const execute = useCallback(async () => {
|
|
11
18
|
if (abortControllerRef.current) {
|
|
12
19
|
abortControllerRef.current.abort();
|
|
13
20
|
}
|
|
14
21
|
const ac = new AbortController();
|
|
15
22
|
abortControllerRef.current = ac;
|
|
23
|
+
const generation = ++generationRef.current;
|
|
24
|
+
const isCurrent = () => generationRef.current === generation;
|
|
16
25
|
setLoading(true);
|
|
17
26
|
setError(null);
|
|
18
27
|
try {
|
|
19
28
|
const res = await engine.invoke(commandName, input, { signal: ac.signal });
|
|
20
|
-
if (!ac.signal.aborted) {
|
|
29
|
+
if (!ac.signal.aborted && isCurrent()) {
|
|
21
30
|
setData(res);
|
|
22
31
|
setLoading(false);
|
|
23
32
|
}
|
|
24
33
|
return res;
|
|
25
34
|
}
|
|
26
35
|
catch (err) {
|
|
27
|
-
if (!ac.signal.aborted) {
|
|
36
|
+
if (!ac.signal.aborted && isCurrent()) {
|
|
28
37
|
const parsedError = err instanceof Error ? err : new Error(String(err));
|
|
29
38
|
setError(parsedError);
|
|
30
39
|
setLoading(false);
|
|
@@ -39,6 +48,8 @@ export function useCommand(commandFn, input, options) {
|
|
|
39
48
|
}
|
|
40
49
|
execute();
|
|
41
50
|
return () => {
|
|
51
|
+
// 세대 무효화 — unmount/re-run 시 진행 중 실행의 setState 를 막는다.
|
|
52
|
+
generationRef.current += 1;
|
|
42
53
|
if (abortControllerRef.current) {
|
|
43
54
|
abortControllerRef.current.abort();
|
|
44
55
|
}
|
package/dist/useCommand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCommand.js","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAiB/C,MAAM,UAAU,UAAU,CACxB,SAA6C,EAC7C,KAAS,EACT,OAA2B;IAE3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"useCommand.js","sourceRoot":"","sources":["../src/useCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../src/useMutation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../src/useMutation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhE,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC1E;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC;IACrC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,EAC/C,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC7C,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GACjC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CA2DzB"}
|
package/dist/useMutation.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { useState, useCallback, useRef } from 'react';
|
|
2
|
+
import { resolveCommandId } from '@rustra/types';
|
|
2
3
|
import { useRustraEngine } from './context.js';
|
|
3
4
|
export function useMutation(commandFn, options) {
|
|
4
5
|
const engine = useRustraEngine();
|
|
5
6
|
const [data, setData] = useState(undefined);
|
|
6
7
|
const [loading, setLoading] = useState(false);
|
|
7
8
|
const [error, setError] = useState(null);
|
|
8
|
-
|
|
9
|
+
// minify-안전 식별: 코드젠이 심은 commandId 를 우선한다 (Function.name 은
|
|
10
|
+
// 프로덕션 번들러 mangling 으로 바뀔 수 있다).
|
|
11
|
+
const commandName = resolveCommandId(commandFn);
|
|
9
12
|
const optionsRef = useRef(options);
|
|
10
13
|
optionsRef.current = options;
|
|
11
14
|
const mutateAsync = useCallback(async (input, invokeOptions) => {
|
package/dist/useMutation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../src/useMutation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkB/C,MAAM,UAAU,WAAW,CACzB,SAA6C,EAC7C,OAAkC;IAElC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../src/useMutation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkB/C,MAAM,UAAU,WAAW,CACzB,SAA6C,EAC7C,OAAkC;IAElC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,SAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,0DAA0D;IAC1D,iCAAiC;IACjC,MAAM,WAAW,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,MAAM,WAAW,GAAG,WAAW,CAC7B,KAAK,EAAE,KAAQ,EAAE,aAA6B,EAAc,EAAE;QAC5D,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAI,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5C,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACxE,QAAQ,CAAC,WAAW,CAAC,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAClD,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,WAAW,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,WAAW,CAAC,CACtB,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,KAAQ,EAAE,EAAE;QACX,WAAW,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC5B,kDAAkD;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,MAAM;QACN,WAAW;QACX,IAAI;QACJ,OAAO;QACP,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rustra/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "React and React Native bindings and hooks for rustra-bridge",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
|
+
"sideEffects": false,
|
|
9
10
|
"exports": {
|
|
10
11
|
".": {
|
|
11
12
|
"types": "./dist/index.d.ts",
|
|
@@ -16,18 +17,38 @@
|
|
|
16
17
|
"access": "public"
|
|
17
18
|
},
|
|
18
19
|
"files": [
|
|
19
|
-
"dist"
|
|
20
|
+
"dist/context.d.ts",
|
|
21
|
+
"dist/context.d.ts.map",
|
|
22
|
+
"dist/context.js",
|
|
23
|
+
"dist/context.js.map",
|
|
24
|
+
"dist/index.d.ts",
|
|
25
|
+
"dist/index.d.ts.map",
|
|
26
|
+
"dist/index.js",
|
|
27
|
+
"dist/index.js.map",
|
|
28
|
+
"dist/useCommand.d.ts",
|
|
29
|
+
"dist/useCommand.d.ts.map",
|
|
30
|
+
"dist/useCommand.js",
|
|
31
|
+
"dist/useCommand.js.map",
|
|
32
|
+
"dist/useEvent.d.ts",
|
|
33
|
+
"dist/useEvent.d.ts.map",
|
|
34
|
+
"dist/useEvent.js",
|
|
35
|
+
"dist/useEvent.js.map",
|
|
36
|
+
"dist/useMutation.d.ts",
|
|
37
|
+
"dist/useMutation.d.ts.map",
|
|
38
|
+
"dist/useMutation.js",
|
|
39
|
+
"dist/useMutation.js.map"
|
|
20
40
|
],
|
|
21
41
|
"scripts": {
|
|
22
42
|
"build": "tsc",
|
|
23
43
|
"clean": "rm -rf dist",
|
|
24
|
-
"test": "
|
|
44
|
+
"test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js",
|
|
45
|
+
"test:compile": "tsc -p tsconfig.test.json"
|
|
25
46
|
},
|
|
26
47
|
"peerDependencies": {
|
|
27
48
|
"react": ">=18.0.0"
|
|
28
49
|
},
|
|
29
50
|
"dependencies": {
|
|
30
|
-
"@rustra/types": "^0.
|
|
51
|
+
"@rustra/types": "^0.3.1"
|
|
31
52
|
},
|
|
32
53
|
"devDependencies": {
|
|
33
54
|
"@types/react": "^19.0.0",
|
package/dist/index.test.d.ts
DELETED
package/dist/index.test.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
package/dist/index.test.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import assert from 'node:assert/strict';
|
|
2
|
-
import test from 'node:test';
|
|
3
|
-
import { createElement } from 'react';
|
|
4
|
-
import { renderToString } from 'react-dom/server';
|
|
5
|
-
import { RustraProvider, useRustraEngine, useCommand, useMutation, useEvent } from './index.js';
|
|
6
|
-
function createTestEngine(dataMap) {
|
|
7
|
-
return {
|
|
8
|
-
async invoke(command, _args) {
|
|
9
|
-
if (command in dataMap) {
|
|
10
|
-
return dataMap[command];
|
|
11
|
-
}
|
|
12
|
-
throw new Error(`Command not found: ${command}`);
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
test('RustraProvider supplies engine to useRustraEngine', () => {
|
|
17
|
-
const engine = createTestEngine({ testCmd: 'hello' });
|
|
18
|
-
let capturedEngine = null;
|
|
19
|
-
function TestComponent() {
|
|
20
|
-
capturedEngine = useRustraEngine();
|
|
21
|
-
return createElement('div', null, 'test');
|
|
22
|
-
}
|
|
23
|
-
renderToString(createElement(RustraProvider, { engine, children: createElement(TestComponent) }));
|
|
24
|
-
assert.equal(capturedEngine, engine);
|
|
25
|
-
});
|
|
26
|
-
test('useCommand hook contract and properties', () => {
|
|
27
|
-
async function dummyCmd(input) {
|
|
28
|
-
return { res: input.val * 2 };
|
|
29
|
-
}
|
|
30
|
-
const hookResult = { current: null };
|
|
31
|
-
function TestComponent() {
|
|
32
|
-
const result = useCommand(dummyCmd, { val: 5 }, { enabled: false });
|
|
33
|
-
hookResult.current = result;
|
|
34
|
-
return createElement('div', null, String(result.loading));
|
|
35
|
-
}
|
|
36
|
-
const engine = createTestEngine({ dummyCmd: { res: 10 } });
|
|
37
|
-
renderToString(createElement(RustraProvider, { engine, children: createElement(TestComponent) }));
|
|
38
|
-
const result = hookResult.current;
|
|
39
|
-
assert.ok(result);
|
|
40
|
-
assert.equal(result.loading, false);
|
|
41
|
-
assert.equal(typeof result.refetch, 'function');
|
|
42
|
-
});
|
|
43
|
-
test('useMutation hook contract and execution', async () => {
|
|
44
|
-
async function updateItem(_input) {
|
|
45
|
-
return { updated: true };
|
|
46
|
-
}
|
|
47
|
-
const engine = createTestEngine({ updateItem: { updated: true } });
|
|
48
|
-
const mutationResult = { current: null };
|
|
49
|
-
function TestComponent() {
|
|
50
|
-
mutationResult.current = useMutation(updateItem);
|
|
51
|
-
return createElement('div', null, 'mutation');
|
|
52
|
-
}
|
|
53
|
-
renderToString(createElement(RustraProvider, { engine, children: createElement(TestComponent) }));
|
|
54
|
-
const result = mutationResult.current;
|
|
55
|
-
assert.ok(result);
|
|
56
|
-
assert.equal(typeof result.mutate, 'function');
|
|
57
|
-
assert.equal(typeof result.mutateAsync, 'function');
|
|
58
|
-
assert.equal(typeof result.reset, 'function');
|
|
59
|
-
// Execute mutation
|
|
60
|
-
const res = await result.mutateAsync({ id: 'item-1' });
|
|
61
|
-
assert.deepEqual(res, { updated: true });
|
|
62
|
-
});
|
|
63
|
-
test('useEvent handles subscription and contract', () => {
|
|
64
|
-
let subscribedName = '';
|
|
65
|
-
let unsubscribed = false;
|
|
66
|
-
let handlerCalledWith = null;
|
|
67
|
-
const mockSubscriber = (name, cb) => {
|
|
68
|
-
subscribedName = name;
|
|
69
|
-
cb({ count: 1 });
|
|
70
|
-
return () => {
|
|
71
|
-
unsubscribed = true;
|
|
72
|
-
};
|
|
73
|
-
};
|
|
74
|
-
function TestComponent() {
|
|
75
|
-
useEvent('tick', (payload) => {
|
|
76
|
-
handlerCalledWith = payload;
|
|
77
|
-
}, mockSubscriber);
|
|
78
|
-
return createElement('div', null, 'events');
|
|
79
|
-
}
|
|
80
|
-
const el = createElement(TestComponent);
|
|
81
|
-
assert.ok(el);
|
|
82
|
-
assert.equal(typeof useEvent, 'function');
|
|
83
|
-
// Verify subscriber invocation contract
|
|
84
|
-
const unsub = mockSubscriber('tick', (payload) => {
|
|
85
|
-
handlerCalledWith = payload;
|
|
86
|
-
});
|
|
87
|
-
assert.equal(subscribedName, 'tick');
|
|
88
|
-
assert.deepEqual(handlerCalledWith, { count: 1 });
|
|
89
|
-
unsub();
|
|
90
|
-
assert.equal(unsubscribed, true);
|
|
91
|
-
});
|
|
92
|
-
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|