Skip to content

Commit 0eca2b4

Browse files
committed
wip
1 parent 917613a commit 0eca2b4

File tree

5 files changed

+18
-58
lines changed

5 files changed

+18
-58
lines changed
Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
export * as Web from './web/web-signals-types'
2-
export * as Mobile from './mobile/mobile-signals-types'
1+
export * from './web/web-signals-types'
32
export * from './shared/signals-runtime'
3+
export * from './shared/shared-types'
4+
5+
// there's not really a good reason to use these in an npm package yet, but we might want to in the future
6+
export * as Mobile from './mobile/mobile-signals-types'

packages/signals/signals/src/core/processor/sandbox.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { logger } from '../../lib/logger'
22
import { createWorkerBox, WorkerBoxAPI } from '../../lib/workerbox'
33
import { resolvers } from './arg-resolvers'
44
import { AnalyticsRuntimePublicApi, Signal, AnalyticsEnums } from '../../types'
5-
import { createSignalsRuntime } from './signals-runtime'
65
import { replaceBaseUrl } from '../../lib/replace-base-url'
6+
import { SignalsRuntime } from '@segment/analytics-signals-runtime'
77

88
export type MethodName =
99
| 'page'
@@ -212,8 +212,8 @@ export class Sandbox {
212212
logger.debug('processing signal', { signal, scope, signals })
213213
const code = [
214214
await this.settings.processSignal,
215-
`const createSignalsRuntime = ${createSignalsRuntime.toString()}`,
216-
`const signals = createSignalsRuntime(${JSON.stringify(signals)})`,
215+
`${SignalsRuntime.toString()}`,
216+
`const signals = new SignalsRuntime(${JSON.stringify(signals)})`,
217217
'try { processSignal(' +
218218
JSON.stringify(signal) +
219219
', { analytics, signals, SignalType, EventType, NavigationAction }); } catch(err) { console.error("Process signal failed.", err); }',
Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,13 @@
11
// could be the buffered signals object?
22

3-
import { Signal, SignalType, SignalOfType, SignalsRuntime } from '../../types'
3+
import { SignalsRuntime, Signal } from '@segment/analytics-signals-runtime'
44

55
// This needs to use the function keyword so that it can be stringified and run in a sandbox
66
/**
77
* @param signals - List of signals, with the most recent signals first (LIFO).
88
*/
9-
export function createSignalsRuntime(signals: Signal[]): SignalsRuntime {
10-
/**
11-
* @param fromSignal - signal to start searching from
12-
* @param signalType - type of signal to find (e.g. 'interaction')
13-
* @param predicate - optional predicate function to filter the signals (search domain only includes signals after the signal defined in `fromSignal`)
14-
* @returns First signal that matches the criteria, or undefined
15-
*/
16-
function find<T extends SignalType>(
17-
fromSignal: Signal,
18-
signalType: T,
19-
predicate?: (signal: SignalOfType<T>) => boolean
20-
): SignalOfType<T> | undefined {
21-
const results = filter(fromSignal, signalType, predicate)
22-
return results[0]
23-
}
24-
25-
/**
26-
* @param fromSignal - signal to start searching from
27-
* @param predicate - optional predicate function to filter the signals
28-
* @returns signals after the current one.
29-
*/
30-
function filter<T extends SignalType>(
31-
fromSignal: Signal,
32-
signalType: T,
33-
predicate?: (signal: SignalOfType<T>) => boolean
34-
): SignalOfType<T>[] {
35-
const _isSignalOfType = (signal: Signal): signal is SignalOfType<T> =>
36-
signal.type === signalType
37-
return signals
38-
.slice(signals.indexOf(fromSignal) + 1)
39-
.filter(_isSignalOfType)
40-
.filter((signal) => (predicate ? predicate(signal) : () => true))
41-
}
42-
43-
return {
44-
find,
45-
filter,
46-
}
9+
export function createSignalsRuntime(
10+
signals: Signal[]
11+
): SignalsRuntime<Signal> {
12+
return new SignalsRuntime(signals)
4713
}

packages/signals/signals/src/types/process-signal.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SignalsRuntime } from '../core/processor/signals-runtime'
1+
import { ISignalsRuntime } from '@segment/analytics-signals-runtime'
22
import { Signal } from './signals'
33

44
/**
@@ -15,7 +15,7 @@ export interface AnalyticsRuntimePublicApi {
1515

1616
export type ProcessSignalScope = {
1717
analytics: AnalyticsRuntimePublicApi
18-
signals: SignalsRuntime
18+
signals: ISignalsRuntime<Signal>
1919
} & typeof AnalyticsEnums
2020

2121
export interface ProcessSignal {

packages/signals/signals/src/types/signals.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { ISignalsRuntime } from '@segment/analytics-signals-runtime'
2+
13
export type JSONPrimitive = string | number | boolean | null
24
export type JSONValue = JSONPrimitive | JSONObject | JSONArray
35
export type JSONObject = { [member: string]: JSONValue }
@@ -113,15 +115,4 @@ export interface SegmentEvent {
113115
[key: string]: any
114116
}
115117

116-
export type SignalsRuntime = {
117-
find: <T extends SignalType>(
118-
fromSignal: Signal,
119-
signalType: T,
120-
predicate?: (signal: SignalOfType<T>) => boolean
121-
) => SignalOfType<T> | undefined
122-
filter: <T extends SignalType>(
123-
fromSignal: Signal,
124-
signalType: T,
125-
predicate?: (signal: SignalOfType<T>) => boolean
126-
) => SignalOfType<T>[]
127-
}
118+
export type SignalsRuntime = ISignalsRuntime<Signal>

0 commit comments

Comments
 (0)