@servicetitan/web-components 30.1.0 → 30.1.1

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.
@@ -1,8 +1,14 @@
1
+ type JSONPrimitive = string | number | boolean | null | undefined;
2
+ type JSON = {
3
+ [key: string]: JSONPrimitive | JSON[] | JSON;
4
+ };
5
+ export type MFEContextData<T> = {
6
+ [P in keyof T]: T[P] extends JSONPrimitive ? T[P] : T[P] extends (infer U)[] ? MFEContextData<U>[] : T[P] extends JSON ? MFEContextData<T[P]> : never;
7
+ };
1
8
  /**
2
9
  * Context used to pass data from the host to the MFEs
3
10
  */
4
- import { JSON, Serializable } from '../types';
5
- export type MFEContextData<T> = Serializable<T>;
6
11
  export declare const MFEDataContext: import("react").Context<JSON>;
7
12
  export declare function useMFEDataContext<T extends MFEContextData<T>>(): T;
13
+ export {};
8
14
  //# sourceMappingURL=mfe-data-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mfe-data-context.d.ts","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAEhD,eAAO,MAAM,cAAc,+BAA0B,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,OAI5D"}
1
+ {"version":3,"file":"mfe-data-context.d.ts","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAEA,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAGlE,KAAK,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAG7D,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GACpC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACtB,cAAc,CAAC,CAAC,CAAC,EAAE,GACnB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACf,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACpB,KAAK;CAClB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,+BAA0B,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,OAI5D"}
@@ -1,7 +1,7 @@
1
+ import { createContext, useContext } from 'react';
1
2
  /**
2
3
  * Context used to pass data from the host to the MFEs
3
4
  */
4
- import { createContext, useContext } from 'react';
5
5
  export const MFEDataContext = createContext({});
6
6
  export function useMFEDataContext() {
7
7
  const context = useContext(MFEDataContext);
@@ -1 +1 @@
1
- {"version":3,"file":"mfe-data-context.js","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAKlD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAO,EAAE,CAAC,CAAC;AAEtD,MAAM,UAAU,iBAAiB;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAM,CAAC;IAEhD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"mfe-data-context.js","sourceRoot":"","sources":["../../src/contexts/mfe-data-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAkBlD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAO,EAAE,CAAC,CAAC;AAEtD,MAAM,UAAU,iBAAiB;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAM,CAAC;IAEhD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import { SymbolToken } from '@servicetitan/react-ioc';
2
- import { JSON, JSONPrimitive, Serializable } from './types';
2
+ import { JSON, Serializable } from './types';
3
3
  export declare const EVENT_BUS_TOKEN: SymbolToken<EventBus<never>>;
4
4
  export declare function typedEventBusToken<EventTypes extends Serializable<EventTypes>>(): SymbolToken<EventBus<EventTypes>>;
5
- export type EventHandler<EventTypes, Event> = (data: Event extends SymbolToken<infer DataType> ? Serializable<DataType> : Event extends keyof EventTypes ? EventTypes[Event] : never) => void;
5
+ export type EventHandler<EventTypes, Event, T = never> = (data: [T] extends [never] ? Event extends SymbolToken<infer DataType> ? Serializable<DataType> : Event extends keyof EventTypes ? EventTypes[Event] : T : Serializable<T>) => void;
6
6
  type JobPayload = JSON | void;
7
+ export type EventType = string | number | symbol;
8
+ export type SymbolTokenEventType<T, U extends EventType = EventType> = U extends SymbolToken<any> ? SymbolToken<T> : U;
7
9
  export type JobEventHandler<Event> = (defer: {
8
10
  /**
9
11
  * Successfully complete a job.
@@ -43,19 +45,19 @@ export declare class EventBus<EventTypes extends Serializable<EventTypes> = neve
43
45
  * @param event The event to handle.
44
46
  * @param handler The handler to call when the event occurs.
45
47
  */
46
- on: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event, handler: EventHandler<EventTypes, Event>) => void;
48
+ on: <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(event: SymbolTokenEventType<T, Event>, handler: EventHandler<EventTypes, Event, T>) => void;
47
49
  /**
48
50
  * Deregister an event handler.
49
51
  * @param event The previously registered event.
50
52
  * @param handler The previously registered handler.
51
53
  */
52
- off: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event, handler: EventHandler<EventTypes, Event>) => void;
54
+ off: <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(event: SymbolTokenEventType<T, Event>, handler: EventHandler<EventTypes, Event, T>) => void;
53
55
  /**
54
56
  * Send an event.
55
57
  * @param event The event to send.
56
58
  * @param data The data to pass to the event's handler.
57
59
  */
58
- emit: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event, ...data: Event extends SymbolToken<infer DataType> ? undefined extends DataType ? [Serializable<DataType>?] : [Serializable<DataType>] : [EventTypes] extends [never] ? [(JSON | JSONPrimitive)?] : Event extends keyof EventTypes ? undefined extends EventTypes[Event] ? [EventTypes[Event]?] : [EventTypes[Event]] extends [never] ? [] : [EventTypes[Event]] : never) => void;
60
+ emit: <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(event: SymbolTokenEventType<T, Event>, ...data: Event extends SymbolToken<any> ? undefined extends T ? [T?] : [T] : [EventTypes] extends [never] ? [T?] : Event extends keyof EventTypes ? undefined extends EventTypes[Event] ? [EventTypes[Event]?] : [EventTypes[Event]] extends [never] ? [] : [EventTypes[Event]] : never) => void;
59
61
  }
60
62
  export {};
61
63
  //# sourceMappingURL=event-bus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,yBAAyB,CAAC;AACnE,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAW,iBAAiB,CAAC,CAAC;AAExE,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,CAAuB,iBAAiB,CAAC,CAAC;AAChE,CAAC;AA+BD,MAAM,OAAO,QAAQ;IAArB;QACI;;;;mBAAM;gBACF;;;;mBAIG;gBACH,EAAE,EAAE,CACA,KAAY,EACZ,OAA+B,EACjC,EAAE;oBACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpC,CAAC;gBAED;;;;mBAIG;gBACH,GAAG,EAAE,CACD,KAAY,EACZ,OAA+B,EACjC,EAAE;oBACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC;gBAED;;;;mBAIG;gBACH,IAAI,EAAE,CAAoD,KAAY,EAAE,EAAE;oBACtE,OAAO,IAAI,OAAO,CAEhB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;4BACrB,OAAO;4BACP,MAAM,EAAE,CAAC,MAAuB,EAAE,EAAE;gCAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;oCACxD,MAAM,CAAC,MAAM,CAAC,CAAC;gCACnB,CAAC;qCAAM,CAAC;oCACJ,MAAM,EAAE,CAAC;gCACb,CAAC;4BACL,CAAC;yBACJ,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;aACJ;WAAC;QAEM;;;;mBAAU,IAAI,EAAO;WAAC;QAE9B;;;;WAIG;QACH;;;;mBAAK,CACD,KAAY,EACZ,OAAwC,EAC1C,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;WAAC;QAEF;;;;WAIG;QACH;;;;mBAAM,CACF,KAAY,EACZ,OAAwC,EAC1C,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;WAAC;QAEF;;;;WAIG;QACH;;;;mBAAO,CACH,KAAY,EACZ,GAAG,IAYY,EACjB,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;WAAC;IACN,CAAC;CAAA"}
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../src/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAe,MAAM,yBAAyB,CAAC;AACnE,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAW,iBAAiB,CAAC,CAAC;AAExE,MAAM,UAAU,kBAAkB;IAC9B,OAAO,WAAW,CAAuB,iBAAiB,CAAC,CAAC;AAChE,CAAC;AAqCD,MAAM,OAAO,QAAQ;IAArB;QACI;;;;mBAAM;gBACF;;;;mBAIG;gBACH,EAAE,EAAE,CACA,KAAY,EACZ,OAA+B,EACjC,EAAE;oBACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpC,CAAC;gBAED;;;;mBAIG;gBACH,GAAG,EAAE,CACD,KAAY,EACZ,OAA+B,EACjC,EAAE;oBACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC;gBAED;;;;mBAIG;gBACH,IAAI,EAAE,CAAoD,KAAY,EAAE,EAAE;oBACtE,OAAO,IAAI,OAAO,CAEhB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;4BACrB,OAAO;4BACP,MAAM,EAAE,CAAC,MAAuB,EAAE,EAAE;gCAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;oCACxD,MAAM,CAAC,MAAM,CAAC,CAAC;gCACnB,CAAC;qCAAM,CAAC;oCACJ,MAAM,EAAE,CAAC;gCACb,CAAC;4BACL,CAAC;yBACJ,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;aACJ;WAAC;QAEM;;;;mBAAU,IAAI,EAAO;WAAC;QAE9B;;;;WAIG;QACH;;;;mBAAK,CACD,KAAqC,EACrC,OAA2C,EAC7C,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;WAAC;QAEF;;;;WAIG;QACH;;;;mBAAM,CAIF,KAAqC,EACrC,OAA2C,EAC7C,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACrC,CAAC;WAAC;QAEF;;;;WAIG;QACH;;;;mBAAO,CACH,KAAqC,EACrC,GAAG,IAYY,EACjB,EAAE;gBACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;WAAC;IACN,CAAC;CAAA"}
package/dist/index.d.ts CHANGED
@@ -5,4 +5,5 @@ export * from './get-value-for-environment';
5
5
  export * from './history-manager';
6
6
  export * from './loader';
7
7
  export * from './register';
8
+ export type { JSON, JSONPrimitive, Serializable } from './types';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAE3B,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export type JSONPrimitive = string | number | boolean | null | undefined;
2
- export type JSON = {
3
- [key: string]: JSONPrimitive | JSON[] | JSON;
4
- };
2
+ export type JSON = JSONPrimitive | {
3
+ [key: string | number]: JSON;
4
+ } | JSON[];
5
5
  export type Serializable<T> = {
6
- [P in keyof T]: T[P] extends JSONPrimitive ? T[P] : T[P] extends (infer U)[] ? Serializable<U>[] : T[P] extends JSON | undefined ? Serializable<T[P]> : never;
6
+ [P in keyof T]: T[P] extends JSONPrimitive ? T[P] : T[P] extends Function | Date | Map<any, any> | Set<any> | symbol ? never : T[P] extends (infer U)[] ? Serializable<U>[] : Serializable<T[P]>;
7
7
  };
8
8
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAGzE,MAAM,MAAM,IAAI,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GACpC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACtB,YAAY,CAAC,CAAC,CAAC,EAAE,GACjB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,SAAS,GAC3B,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAClB,KAAK;CAClB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAEzE,MAAM,MAAM,IAAI,GAAG,aAAa,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,EAAE,CAAC;AAE7E,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GACpC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAC9D,KAAK,GACL,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GACtB,YAAY,CAAC,CAAC,CAAC,EAAE,GACjB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/web-components",
3
- "version": "30.1.0",
3
+ "version": "30.1.1",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,17 +15,17 @@
15
15
  "src"
16
16
  ],
17
17
  "dependencies": {
18
- "@servicetitan/error-boundary": "30.1.0",
18
+ "@servicetitan/error-boundary": "30.1.1",
19
19
  "lodash.get": "~4.4.2",
20
20
  "mitt": "~3.0.1",
21
21
  "semver": "~7.7.1"
22
22
  },
23
23
  "devDependencies": {
24
- "@servicetitan/anvil2": "^1.31.0",
24
+ "@servicetitan/anvil2": "^1.31.1",
25
25
  "@servicetitan/design-system": "~14.5.2",
26
- "@servicetitan/launchdarkly-service": "30.1.0",
27
- "@servicetitan/log-service": "30.1.0",
28
- "@servicetitan/react-ioc": "30.1.0",
26
+ "@servicetitan/launchdarkly-service": "30.1.1",
27
+ "@servicetitan/log-service": "30.1.1",
28
+ "@servicetitan/react-ioc": "30.1.1",
29
29
  "@testing-library/dom": "^10.4.0",
30
30
  "@testing-library/jest-dom": "^6.6.3",
31
31
  "@testing-library/react": "^16.3.0",
@@ -41,11 +41,11 @@
41
41
  "shadow-dom-testing-library": "^1.12.0"
42
42
  },
43
43
  "peerDependencies": {
44
- "@servicetitan/anvil2": ">=1.31.0",
44
+ "@servicetitan/anvil2": ">=1.31.1",
45
45
  "@servicetitan/design-system": ">=14.5.2",
46
- "@servicetitan/launchdarkly-service": "30.1.0",
47
- "@servicetitan/log-service": "30.1.0",
48
- "@servicetitan/react-ioc": "30.1.0",
46
+ "@servicetitan/launchdarkly-service": "30.1.1",
47
+ "@servicetitan/log-service": "30.1.1",
48
+ "@servicetitan/react-ioc": "30.1.1",
49
49
  "history": "~4.10.1",
50
50
  "react": ">=17.0.2",
51
51
  "react-dom": ">=17.0.2"
@@ -67,5 +67,5 @@
67
67
  "cli": {
68
68
  "webpack": false
69
69
  },
70
- "gitHead": "ebfab3b30337bab2d2c7b1bf6a1caeedc262c884"
70
+ "gitHead": "02382f349ee120e1b30d9676484481f93059c054"
71
71
  }
@@ -20,6 +20,10 @@ jest.mock('../event-bus', () => {
20
20
 
21
21
  describe(`[web-components] ${EventBus.name}`, () => {
22
22
  describe('type definitions', () => {
23
+ interface InterfaceDataType {
24
+ value: string;
25
+ }
26
+
23
27
  describe('EventBus<T>', () => {
24
28
  test('rejects invalid data type', () => {
25
29
  // @ts-expect-error Types of property 'foo' are incompatible.
@@ -33,15 +37,27 @@ describe(`[web-components] ${EventBus.name}`, () => {
33
37
  describe('emit', () => {
34
38
  test('accepts valid event with valid data', () => {
35
39
  eventBus.emit('foo', '');
40
+ eventBus.emit('foo', 123);
41
+ eventBus.emit('foo', true);
36
42
  eventBus.emit('bar', { value: 1 });
37
- eventBus.emit(Symbol(), '');
43
+ eventBus.emit('foo', ['']);
44
+ eventBus.emit('foo', [123]);
45
+ eventBus.emit('foo', [true]);
46
+ eventBus.emit('bar', [{ value: 1 }]);
47
+ eventBus.emit('bar', [{ value: [1] }]);
38
48
  eventBus.emit(123, '');
49
+ eventBus.emit(Symbol(), '');
39
50
  });
40
51
 
41
52
  test('accepts event with no data', () => {
42
53
  eventBus.emit('foo');
43
54
  });
44
55
 
56
+ test('accepts data declared as interface', () => {
57
+ const data: InterfaceDataType = { value: '' };
58
+ eventBus.emit('foo', data);
59
+ });
60
+
45
61
  test('rejects invalid event', () => {
46
62
  // @ts-expect-error Argument of type '() => void' is not assignable to parameter of type 'string | number | symbol | SymbolToken<any>'.
47
63
  eventBus.emit(() => {}, '');
@@ -54,17 +70,26 @@ describe(`[web-components] ${EventBus.name}`, () => {
54
70
  });
55
71
 
56
72
  test('rejects invalid data', () => {
57
- // @ts-expect-error Argument of type '() => void' is not assignable to parameter of type 'JSON | JSONPrimitive'
58
- eventBus.emit('foo', () => {});
73
+ /*
74
+ * Note: This case isn't caught
75
+ * @ts-expect-error Argument of type '() => void' is not assignable to parameter of type 'JSON | JSONPrimitive'
76
+ * eventBus.emit('foo', () => {});
77
+ */
59
78
 
60
- // @ts-expect-error Argument of type 'Date' is not assignable to parameter of type 'JSON | JSONPrimitive'.
61
- eventBus.emit('foo', new Date());
79
+ // @ts-expect-error Type '() => void' is not assignable to type 'never'.
80
+ eventBus.emit('foo', { fn: () => {} });
62
81
 
63
- eventBus.emit('foo', {
64
- value: 1,
65
- // @ts-expect-error Type '() => void' is not assignable to type 'JSON | JSONPrimitive | JSON[]'.
66
- otherValue: () => {},
67
- });
82
+ // @ts-expect-error Type 'Date' is not assignable to type 'never'.
83
+ eventBus.emit('foo', { date: new Date() });
84
+
85
+ // @ts-expect-error Type 'Map<string, any>' is not assignable to type 'never'.
86
+ eventBus.emit('foo', { map: new Map<string, any>() });
87
+
88
+ // @ts-expect-error Type 'Set<string>' is not assignable to type 'never'.
89
+ eventBus.emit('foo', { set: new Set<string>() });
90
+
91
+ // @ts-expect-error Type 'symbol' is not assignable to type 'never'.
92
+ eventBus.emit('foo', { symbol: Symbol() });
68
93
  });
69
94
  });
70
95
 
@@ -157,6 +182,7 @@ describe(`[web-components] ${EventBus.name}`, () => {
157
182
 
158
183
  describe('when event is symbolToken', () => {
159
184
  const token = symbolToken<{ value: number }>('token');
185
+ const untypedToken = symbolToken('untyped-token');
160
186
  const optionalPayloadToken = symbolToken<{ value: number } | undefined>(
161
187
  'optionalToken'
162
188
  );
@@ -166,6 +192,7 @@ describe(`[web-components] ${EventBus.name}`, () => {
166
192
  eventBus.emit(token, { value: 1 });
167
193
  eventBus.emit(optionalPayloadToken, { value: 1 });
168
194
  eventBus.emit(optionalPayloadToken);
195
+ eventBus.emit(untypedToken);
169
196
  });
170
197
 
171
198
  test('rejects invalid data', () => {
@@ -190,6 +217,7 @@ describe(`[web-components] ${EventBus.name}`, () => {
190
217
  test('accepts valid handler', () => {
191
218
  eventBus.on(token, () => {});
192
219
  eventBus.on(token, data => data.value++);
220
+ eventBus.on(untypedToken, data => data.value++);
193
221
  });
194
222
 
195
223
  test('rejects invalid handler', () => {
@@ -264,13 +292,95 @@ describe(`[web-components] ${EventBus.name}`, () => {
264
292
  });
265
293
  });
266
294
  });
295
+
296
+ describe('with legacy type declaration', () => {
297
+ const numberToken = symbolToken<number>('number-token');
298
+ const untypedToken = symbolToken('untyped-token');
299
+
300
+ describe('emit', () => {
301
+ test('accepts valid event with valid data', () => {
302
+ eventBus.emit<number>('foo', 123);
303
+ eventBus.emit<number>(numberToken, 123);
304
+ eventBus.emit<number>(untypedToken, 123);
305
+ eventBus.emit<InterfaceDataType>('foo', { value: '' });
306
+ });
307
+
308
+ test('rejects invalid data type', () => {
309
+ // @ts-expect-error Type 'Function' does not satisfy the constraint 'Serializable<Function>'.
310
+ eventBus.emit<Function>('foo', () => {});
311
+ // @ts-expect-error Type '{ date: Date; }' does not satisfy the constraint 'Serializable<{ date: Date; }>'.
312
+ eventBus.emit<{ date: Date }>('foo', { date: new Date() });
313
+ });
314
+
315
+ test('rejects invalid data', () => {
316
+ // @ts-expect-error Type 'string' is not assignable to type 'number'.
317
+ eventBus.emit<number>('foo', '');
318
+ // @ts-expect-error Type 'string' is not assignable to type 'number'.
319
+ eventBus.emit<number>(numberToken, '');
320
+ // @ts-expect-error Type 'string' is not assignable to type 'number'.
321
+ eventBus.emit<number>(untypedToken, '');
322
+ });
323
+ });
324
+
325
+ describe('on', () => {
326
+ test('accepts valid handler', () => {
327
+ eventBus.on<number>('foo', (_: number) => {});
328
+ eventBus.on<number>(numberToken, (_: number) => {});
329
+ eventBus.on<number>(untypedToken, (_: number) => {});
330
+ eventBus.on<InterfaceDataType>('foo', (_: InterfaceDataType) => {});
331
+ });
332
+
333
+ test('rejects invalid data type', () => {
334
+ // @ts-expect-error Type 'Function' does not satisfy the constraint 'Serializable<Function>'.
335
+ eventBus.on<Function>('foo', () => {});
336
+ // @ts-expect-error Type 'Function' does not satisfy the constraint 'Serializable<Function>'.
337
+ eventBus.on<{ date: Date }>('foo', () => {});
338
+ });
339
+
340
+ test('rejects invalid handler', () => {
341
+ // @ts-expect-error Argument of type '(_: string) => void' is not assignable to parameter of type ...
342
+ eventBus.on<number>('foo', (_: string) => {});
343
+ // @ts-expect-error Argument of type '(_: string) => void' is not assignable to parameter of type ...
344
+ eventBus.on<number>(numberToken, (_: string) => {});
345
+ // @ts-expect-error Argument of type '(_: string) => void' is not assignable to parameter of type ...
346
+ eventBus.on<number>(untypedToken, (_: string) => {});
347
+ });
348
+ });
349
+
350
+ describe('off', () => {
351
+ test('accepts valid handler', () => {
352
+ eventBus.off<number>('foo', (_: number) => {});
353
+ eventBus.off<number>(numberToken, (_: number) => {});
354
+ eventBus.off<number>(untypedToken, (_: number) => {});
355
+ eventBus.off<InterfaceDataType>('foo', (_: InterfaceDataType) => {});
356
+ });
357
+
358
+ test('rejects invalid data type', () => {
359
+ // @ts-expect-error Type 'Function' does not satisfy the constraint 'Serializable<Function>'.
360
+ eventBus.off<Function>('foo', () => {});
361
+ // @ts-expect-error Type 'Function' does not satisfy the constraint 'Serializable<Function>'.
362
+ eventBus.off<{ date: Date }>('foo', () => {});
363
+ });
364
+
365
+ test('rejects invalid handler', () => {
366
+ // @ts-expect-error Argument of type '(_: number) => void' is not assignable to parameter of type ...
367
+ eventBus.off<string>('foo', (_: number) => {});
368
+ // @ts-expect-error Argument of type '(_: string) => void' is not assignable to parameter of type ...
369
+ eventBus.off<number>(numberToken, (_: string) => {});
370
+ // @ts-expect-error Argument of type '(_: string) => void' is not assignable to parameter of type ...
371
+ eventBus.off<number>(untypedToken, (_: string) => {});
372
+ });
373
+ });
374
+ });
267
375
  });
268
376
 
269
377
  describe('when eventBus is typed', () => {
270
378
  interface TestEvents {
271
379
  'number-event': { value: number };
272
380
  'string-event': { value: string };
273
- 'optional-payload-event': { value: number } | undefined;
381
+ 'array-event': [string, { value: string }];
382
+ 'optional-data-event': { value: number } | undefined;
383
+ 'interface-data-event': InterfaceDataType;
274
384
  }
275
385
 
276
386
  const eventBus = new EventBus<TestEvents>();
@@ -279,8 +389,10 @@ describe(`[web-components] ${EventBus.name}`, () => {
279
389
  test('accepts valid events and data', () => {
280
390
  eventBus.emit('number-event', { value: 1 });
281
391
  eventBus.emit('string-event', { value: '' });
282
- eventBus.emit('optional-payload-event', { value: 1 });
283
- eventBus.emit('optional-payload-event');
392
+ eventBus.emit('optional-data-event', { value: 1 });
393
+ eventBus.emit('optional-data-event');
394
+ const data: InterfaceDataType = { value: '' };
395
+ eventBus.emit('interface-data-event', data);
284
396
  });
285
397
 
286
398
  test('rejects invalid event', () => {
@@ -1,12 +1,24 @@
1
- /**
2
- * Context used to pass data from the host to the MFEs
3
- */
4
-
5
1
  import { createContext, useContext } from 'react';
6
- import { JSON, Serializable } from '../types';
7
2
 
8
- export type MFEContextData<T> = Serializable<T>;
3
+ type JSONPrimitive = string | number | boolean | null | undefined;
4
+
5
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
6
+ type JSON = { [key: string]: JSONPrimitive | JSON[] | JSON };
9
7
 
8
+ // Type complexity below is required to support Interfaces being used
9
+ export type MFEContextData<T> = {
10
+ [P in keyof T]: T[P] extends JSONPrimitive
11
+ ? T[P]
12
+ : T[P] extends (infer U)[]
13
+ ? MFEContextData<U>[]
14
+ : T[P] extends JSON
15
+ ? MFEContextData<T[P]>
16
+ : never;
17
+ };
18
+
19
+ /**
20
+ * Context used to pass data from the host to the MFEs
21
+ */
10
22
  export const MFEDataContext = createContext<JSON>({});
11
23
 
12
24
  export function useMFEDataContext<T extends MFEContextData<T>>() {
package/src/event-bus.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';
2
2
  import mitt from 'mitt';
3
3
 
4
- import { JSON, JSONPrimitive, Serializable } from './types';
4
+ import { JSON, Serializable } from './types';
5
5
 
6
6
  export const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');
7
7
 
@@ -9,16 +9,22 @@ export function typedEventBusToken<EventTypes extends Serializable<EventTypes>>(
9
9
  return symbolToken<EventBus<EventTypes>>('EVENT_BUS_TOKEN');
10
10
  }
11
11
 
12
- export type EventHandler<EventTypes, Event> = (
13
- data: Event extends SymbolToken<infer DataType>
14
- ? Serializable<DataType>
15
- : Event extends keyof EventTypes
16
- ? EventTypes[Event]
17
- : never
12
+ export type EventHandler<EventTypes, Event, T = never> = (
13
+ data: [T] extends [never]
14
+ ? Event extends SymbolToken<infer DataType>
15
+ ? Serializable<DataType>
16
+ : Event extends keyof EventTypes
17
+ ? EventTypes[Event]
18
+ : T
19
+ : Serializable<T>
18
20
  ) => void;
19
21
 
20
22
  type JobPayload = JSON | void;
21
23
 
24
+ export type EventType = string | number | symbol;
25
+ export type SymbolTokenEventType<T, U extends EventType = EventType> =
26
+ U extends SymbolToken<any> ? SymbolToken<T> : U;
27
+
22
28
  export type JobEventHandler<Event> = (defer: {
23
29
  /**
24
30
  * Successfully complete a job.
@@ -94,9 +100,9 @@ export class EventBus<EventTypes extends Serializable<EventTypes> = never> {
94
100
  * @param event The event to handle.
95
101
  * @param handler The handler to call when the event occurs.
96
102
  */
97
- on = <Event extends SymbolToken<any> | keyof EventTypes>(
98
- event: Event,
99
- handler: EventHandler<EventTypes, Event>
103
+ on = <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(
104
+ event: SymbolTokenEventType<T, Event>,
105
+ handler: EventHandler<EventTypes, Event, T>
100
106
  ) => {
101
107
  this.emitter.on(event, handler);
102
108
  };
@@ -106,9 +112,12 @@ export class EventBus<EventTypes extends Serializable<EventTypes> = never> {
106
112
  * @param event The previously registered event.
107
113
  * @param handler The previously registered handler.
108
114
  */
109
- off = <Event extends SymbolToken<any> | keyof EventTypes>(
110
- event: Event,
111
- handler: EventHandler<EventTypes, Event>
115
+ off = <
116
+ T extends Serializable<T> = never,
117
+ Event extends SymbolToken<T> | keyof EventTypes = any,
118
+ >(
119
+ event: SymbolTokenEventType<T, Event>,
120
+ handler: EventHandler<EventTypes, Event, T>
112
121
  ) => {
113
122
  this.emitter.off(event, handler);
114
123
  };
@@ -118,14 +127,14 @@ export class EventBus<EventTypes extends Serializable<EventTypes> = never> {
118
127
  * @param event The event to send.
119
128
  * @param data The data to pass to the event's handler.
120
129
  */
121
- emit = <Event extends SymbolToken<any> | keyof EventTypes>(
122
- event: Event,
123
- ...data: Event extends SymbolToken<infer DataType>
124
- ? undefined extends DataType
125
- ? [Serializable<DataType>?]
126
- : [Serializable<DataType>]
130
+ emit = <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(
131
+ event: SymbolTokenEventType<T, Event>,
132
+ ...data: Event extends SymbolToken<any>
133
+ ? undefined extends T
134
+ ? [T?]
135
+ : [T]
127
136
  : [EventTypes] extends [never]
128
- ? [(JSON | JSONPrimitive)?]
137
+ ? [T?]
129
138
  : Event extends keyof EventTypes
130
139
  ? undefined extends EventTypes[Event]
131
140
  ? [EventTypes[Event]?]
package/src/index.ts CHANGED
@@ -5,3 +5,5 @@ export * from './get-value-for-environment';
5
5
  export * from './history-manager';
6
6
  export * from './loader';
7
7
  export * from './register';
8
+
9
+ export type { JSON, JSONPrimitive, Serializable } from './types';
package/src/types.ts CHANGED
@@ -1,14 +1,13 @@
1
1
  export type JSONPrimitive = string | number | boolean | null | undefined;
2
2
 
3
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
4
- export type JSON = { [key: string]: JSONPrimitive | JSON[] | JSON };
3
+ export type JSON = JSONPrimitive | { [key: string | number]: JSON } | JSON[];
5
4
 
6
5
  export type Serializable<T> = {
7
6
  [P in keyof T]: T[P] extends JSONPrimitive
8
7
  ? T[P]
9
- : T[P] extends (infer U)[]
10
- ? Serializable<U>[]
11
- : T[P] extends JSON | undefined
12
- ? Serializable<T[P]>
13
- : never;
8
+ : T[P] extends Function | Date | Map<any, any> | Set<any> | symbol
9
+ ? never
10
+ : T[P] extends (infer U)[]
11
+ ? Serializable<U>[]
12
+ : Serializable<T[P]>;
14
13
  };