-
-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathsession.ts
More file actions
59 lines (51 loc) · 1.86 KB
/
session.ts
File metadata and controls
59 lines (51 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import type { WalkerOS } from '@elbwalker/types';
import type { SessionCallback } from '@elbwalker/utils/web';
import { assign, isSameType, useHooks } from '@elbwalker/utils';
import { sessionStart as sessionStartOrg } from '@elbwalker/utils/web';
import { SourceWalkerjs } from '../types';
import { SessionStartOptions } from '../types/source';
import { onApply } from './on';
export function createSessionStart(instance: SourceWalkerjs.Instance) {
return function (
options: SessionStartOptions = {},
): void | WalkerOS.SessionData {
const { config = {}, ...otherOptions } = options;
return sessionStart(instance, {
config: { pulse: true, ...config },
data: { ...instance.session, updated: Date.now() },
...otherOptions,
});
};
}
export function sessionStart(
instance: SourceWalkerjs.Instance,
options: SessionStartOptions = {},
): void | WalkerOS.SessionData {
const sessionConfig = assign(instance.config.session || {}, options.config);
const sessionData = assign(instance.config.sessionStatic, options.data);
// A wrapper for the callback
const cb: SessionCallback = (session, instance, defaultCb) => {
let result: void | undefined | WalkerOS.SessionData;
if (sessionConfig.cb !== false)
// Run either the default callback or the provided one
result = (sessionConfig.cb || defaultCb)(session, instance, defaultCb);
if (isSameType(instance, {} as SourceWalkerjs.Instance)) {
// Assign the session
instance.session = session;
// Run on session events
onApply(instance, 'session');
}
return result;
};
const session = useHooks(
sessionStartOrg,
'SessionStart',
instance.hooks,
)({
...sessionConfig, // Session detection configuration
cb, // Custom wrapper callback
data: sessionData, // Static default session data
instance,
});
return session;
}