11import {
2- InstrumentationSignal ,
3- InteractionData ,
4- InteractionSignal ,
52 NavigationData ,
63 NavigationSignal ,
74 UserDefinedSignalData ,
85 UserDefinedSignal ,
96 NetworkData ,
107 NetworkSignalMetadata ,
118 NetworkSignal ,
12- SegmentEvent ,
9+ SignalTypes ,
10+ Signal ,
11+ SignalOfType ,
1312} from '@segment/analytics-signals-runtime'
1413import { normalizeUrl } from '../lib/normalize-url'
1514import { getPageData } from '../lib/page-data'
1615
17- /**
18- * Factories
19- */
20- export const createInstrumentationSignal = (
21- rawEvent : SegmentEvent
22- ) : InstrumentationSignal => {
23- return {
24- type : 'instrumentation' ,
25- data : {
26- page : getPageData ( ) ,
27- rawEvent,
28- } ,
29- }
30- }
31-
32- export const createInteractionSignal = (
33- data : InteractionData
34- ) : InteractionSignal => {
35- return {
36- type : 'interaction' ,
37- data : {
38- ...data ,
39- page : getPageData ( ) ,
40- } ,
41- }
42- }
43-
4416export const createNavigationSignal = (
4517 data : NavigationData
4618) : NavigationSignal => {
47- return {
48- type : 'navigation' ,
49- data : {
50- ...data ,
51- page : getPageData ( ) ,
52- } ,
53- }
19+ return createInitialSignal ( 'navigation' , data )
5420}
5521
5622export const createUserDefinedSignal = (
5723 data : UserDefinedSignalData
5824) : UserDefinedSignal => {
59- return {
60- type : 'userDefined' ,
61- data : {
62- ...data ,
63- page : getPageData ( ) ,
64- } ,
65- }
25+ return createInitialSignal ( 'userDefined' , data )
6626}
6727
6828export const createNetworkSignal = (
6929 data : NetworkData ,
7030 metadata ?: NetworkSignalMetadata
7131) : NetworkSignal => {
7232 return {
73- type : 'network' ,
74- data : {
33+ ...createInitialSignal ( 'network' , {
7534 ...data ,
7635 url : normalizeUrl ( data . url ) ,
77- page : getPageData ( ) ,
78- } ,
36+ } ) ,
7937 metadata : metadata ?? {
8038 filters : {
8139 allowed : [ ] ,
@@ -84,3 +42,21 @@ export const createNetworkSignal = (
8442 } ,
8543 }
8644}
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