@@ -9,28 +9,65 @@ import {
99 SignalTypes ,
1010 Signal ,
1111 SignalOfType ,
12+ InstrumentationSignal ,
13+ InteractionData ,
14+ InteractionSignal ,
15+ SegmentEvent ,
1216} from '@segment/analytics-signals-runtime'
1317import { normalizeUrl } from '../lib/normalize-url'
1418import { getPageData } from '../lib/page-data'
1519
20+ /**
21+ * Base Signal Factory
22+ */
23+ const createBaseSignal = <
24+ Type extends SignalTypes ,
25+ Data extends Omit < SignalOfType < Signal , Type > [ 'data' ] , 'page' >
26+ > (
27+ type : Type ,
28+ data : Data
29+ ) => {
30+ return {
31+ timestamp : new Date ( ) . toISOString ( ) ,
32+ anonymousId : '' , // not set yet -- will be set by the runtime // TODO
33+ type,
34+ data : {
35+ ...data ,
36+ page : getPageData ( ) ,
37+ } ,
38+ } as SignalOfType < Signal , Type >
39+ }
40+
41+ export const createInstrumentationSignal = (
42+ rawEvent : SegmentEvent
43+ ) : InstrumentationSignal => {
44+ return createBaseSignal ( 'instrumentation' , { rawEvent } )
45+ }
46+
47+ export const createInteractionSignal = (
48+ data : InteractionData
49+ ) : InteractionSignal => {
50+ return createBaseSignal ( 'interaction' , data )
51+ }
52+
1653export const createNavigationSignal = (
1754 data : NavigationData
1855) : NavigationSignal => {
19- return createInitialSignal ( 'navigation' , data )
56+ return createBaseSignal ( 'navigation' , data )
2057}
2158
2259export const createUserDefinedSignal = (
2360 data : UserDefinedSignalData
2461) : UserDefinedSignal => {
25- return createInitialSignal ( 'userDefined' , data )
62+ return createBaseSignal ( 'userDefined' , data )
2663}
2764
2865export const createNetworkSignal = (
2966 data : NetworkData ,
3067 metadata ?: NetworkSignalMetadata
3168) : NetworkSignal => {
3269 return {
33- ...createInitialSignal ( 'network' , {
70+ ...createBaseSignal ( 'network' , {
3471 ...data ,
3572 url : normalizeUrl ( data . url ) ,
3673 } ) ,
@@ -42,21 +79,3 @@ export const createNetworkSignal = (
4279 } ,
4380 }
4481}
45-
46- const createInitialSignal = <
47- Type extends SignalTypes ,
48- Data extends Omit < SignalOfType < Signal , Type > [ 'data' ] , 'page' >
49- > (
50- type : Type ,
51- data : Data
52- ) => {
53- return {
54- timestamp : new Date ( ) . toISOString ( ) ,
55- anonymousId : '' , // not set yet -- will be set by the runtime // TODO
56- type,
57- data : {
58- ...data ,
59- page : getPageData ( ) ,
60- } ,
61- } as SignalOfType < Signal , Type >
62- }
0 commit comments