@servicetitan/react-ioc 28.3.3 → 28.5.0

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.
@@ -37,7 +37,8 @@ describe('[react-ioc] provide', () => {
37
37
  });
38
38
  test('passes fallback options to <Provider>', () => {
39
39
  subject();
40
- expect(screen.getByText(`<Provider ${JSON.stringify({ ...stores, ...options })} />`)).toBeInTheDocument();
40
+ const props = { ...stores, ...options };
41
+ expect(screen.getByText(`<Provider ${JSON.stringify(props)} />`)).toBeInTheDocument();
41
42
  });
42
43
  describe('with empty fallback options', () => {
43
44
  beforeEach(() => (options = {}));
@@ -57,6 +58,14 @@ describe('[react-ioc] provide', () => {
57
58
  loadingFallback: _jsx(LoadingFallback, {}),
58
59
  })} />`)).toBeInTheDocument();
59
60
  });
61
+ describe('when fallback element is "null"', () => {
62
+ beforeEach(() => (options = null));
63
+ test('passes null {loadingFallback} option', () => {
64
+ subject();
65
+ const props = { ...stores, loadingFallback: null };
66
+ expect(screen.getByText(`<Provider ${JSON.stringify(props)} />`)).toBeInTheDocument();
67
+ });
68
+ });
60
69
  });
61
70
  });
62
71
  //# sourceMappingURL=provide.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provide.test.js","sourceRoot":"","sources":["../../src/__tests__/provide.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provide.test.js","sourceRoot":"","sources":["../../src/__tests__/provide.test.tsx"],"names":[],"mappings":"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"}
package/dist/provide.d.ts CHANGED
@@ -1,17 +1,16 @@
1
- import { ComponentType, ReactInstance } from 'react';
1
+ import { ComponentType, ReactInstance, ReactNode } from 'react';
2
2
  import { ProviderConfigEntrySingletons, ProviderConfigEntryInstances } from './provider';
3
3
  export interface WrappedComponent<P> {
4
4
  wrappedComponent: ComponentType<P>;
5
5
  wrappedInstance: ReactInstance | undefined;
6
6
  }
7
- interface FallbackOptions {
8
- loadingFallback?: JSX.Element;
9
- errorFallback?: JSX.Element;
7
+ export interface FallbackOptions {
8
+ loadingFallback?: ReactNode;
9
+ errorFallback?: ReactNode;
10
10
  }
11
11
  export type ProvideDecorator = (stores: {
12
12
  singletons?: ProviderConfigEntrySingletons<any>[];
13
13
  instances?: ProviderConfigEntryInstances<any>[];
14
- }, options?: JSX.Element | FallbackOptions) => <T extends ComponentType<any>>(target: T) => T & WrappedComponent<T>;
14
+ }, options?: ReactNode | FallbackOptions) => <T extends ComponentType<any>>(target: T) => T & WrappedComponent<T>;
15
15
  export declare const provide: ProvideDecorator;
16
- export {};
17
16
  //# sourceMappingURL=provide.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provide.d.ts","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAY,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEnG,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACnC,eAAe,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9C;AAED,UAAU,eAAe;IACrB,eAAe,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC/B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC3B,MAAM,EAAE;IACJ,UAAU,CAAC,EAAE,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,SAAS,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;CACnD,EACD,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,eAAe,KACtC,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,OAAO,EAId,gBAAgB,CAAC"}
1
+ {"version":3,"file":"provide.d.ts","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAY,6BAA6B,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEnG,MAAM,WAAW,gBAAgB,CAAC,CAAC;IAC/B,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACnC,eAAe,EAAE,aAAa,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC5B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,aAAa,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,GAAG,CAC3B,MAAM,EAAE;IACJ,UAAU,CAAC,EAAE,6BAA6B,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,SAAS,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;CACnD,EACD,OAAO,CAAC,EAAE,SAAS,GAAG,eAAe,KACpC,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,OAAO,EAId,gBAAgB,CAAC"}
package/dist/provide.js CHANGED
@@ -5,11 +5,9 @@ function getOptions(arg) {
5
5
  return arg && isOptionsObject(arg) ? arg : { loadingFallback: arg };
6
6
  }
7
7
  function isOptionsObject(arg) {
8
- return (Object.hasOwn(arg, 'loadingFallback') ||
9
- Object.hasOwn(arg, 'errorFallback') ||
10
- isEmptyObject(arg));
11
- }
12
- function isEmptyObject(arg) {
13
- return typeof arg === 'object' && Object.keys(arg).length === 0;
8
+ return (typeof arg === 'object' &&
9
+ (Object.hasOwn(arg, 'loadingFallback') ||
10
+ Object.hasOwn(arg, 'errorFallback') ||
11
+ Object.keys(arg).length === 0));
14
12
  }
15
13
  //# sourceMappingURL=provide.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provide.js","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAA+D,MAAM,YAAY,CAAC;AAoBnG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CACzF,KAAC,QAAQ,OAAK,MAAM,KAAM,UAAU,CAAC,gBAAgB,CAAC,YAClD,KAAC,SAAS,OAAK,KAAK,GAAI,GACjB,CACd,CAAqB,CAAC;AAEvB,SAAS,UAAU,CAAC,GAAmC;IACnD,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,GAAkC;IACvD,OAAO,CACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;QACnC,aAAa,CAAC,GAAG,CAAC,CACrB,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,GAAkC;IACrD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"provide.js","sourceRoot":"","sources":["../src/provide.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAA+D,MAAM,YAAY,CAAC;AAoBnG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CACzF,KAAC,QAAQ,OAAK,MAAM,KAAM,UAAU,CAAC,gBAAgB,CAAC,YAClD,KAAC,SAAS,OAAK,KAAK,GAAI,GACjB,CACd,CAAqB,CAAC;AAEvB,SAAS,UAAU,CAAC,GAAiC;IACjD,OAAO,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,GAA6C;IAClE,OAAO,CACH,OAAO,GAAG,KAAK,QAAQ;QACvB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CACrC,CAAC;AACN,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/react-ioc",
3
- "version": "28.3.3",
3
+ "version": "28.5.0",
4
4
  "description": "",
5
5
  "homepage": "https://docs.st.dev/docs/frontend/react-ioc",
6
6
  "repository": {
@@ -15,13 +15,13 @@
15
15
  "src"
16
16
  ],
17
17
  "dependencies": {
18
- "inversify": "~6.2.1",
18
+ "inversify": "~6.2.2",
19
19
  "reflect-metadata": "~0.2.2"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@testing-library/dom": "^10.4.0",
23
23
  "@testing-library/jest-dom": "^6.6.3",
24
- "@testing-library/react": "^16.1.0",
24
+ "@testing-library/react": "^16.2.0",
25
25
  "@types/react": "~18.3.3",
26
26
  "react": "~18.3.1"
27
27
  },
@@ -34,5 +34,5 @@
34
34
  "cli": {
35
35
  "webpack": false
36
36
  },
37
- "gitHead": "bac07173ff75001b7ad197e77bc1f6b23c531174"
37
+ "gitHead": "580ace3d4bce0472e985b1d4eb5e98e0be625f1d"
38
38
  }
@@ -58,9 +58,8 @@ describe('[react-ioc] provide', () => {
58
58
  test('passes fallback options to <Provider>', () => {
59
59
  subject();
60
60
 
61
- expect(
62
- screen.getByText(`<Provider ${JSON.stringify({ ...stores, ...options })} />`)
63
- ).toBeInTheDocument();
61
+ const props = { ...stores, ...(options as any) };
62
+ expect(screen.getByText(`<Provider ${JSON.stringify(props)} />`)).toBeInTheDocument();
64
63
  });
65
64
 
66
65
  describe('with empty fallback options', () => {
@@ -93,5 +92,18 @@ describe('[react-ioc] provide', () => {
93
92
  )
94
93
  ).toBeInTheDocument();
95
94
  });
95
+
96
+ describe('when fallback element is "null"', () => {
97
+ beforeEach(() => (options = null));
98
+
99
+ test('passes null {loadingFallback} option', () => {
100
+ subject();
101
+
102
+ const props = { ...stores, loadingFallback: null };
103
+ expect(
104
+ screen.getByText(`<Provider ${JSON.stringify(props)} />`)
105
+ ).toBeInTheDocument();
106
+ });
107
+ });
96
108
  });
97
109
  });
package/src/provide.tsx CHANGED
@@ -1,4 +1,4 @@
1
- import { ComponentType, ReactInstance } from 'react';
1
+ import { ComponentType, ReactInstance, ReactNode } from 'react';
2
2
 
3
3
  import { Provider, ProviderConfigEntrySingletons, ProviderConfigEntryInstances } from './provider';
4
4
 
@@ -7,9 +7,9 @@ export interface WrappedComponent<P> {
7
7
  wrappedInstance: ReactInstance | undefined;
8
8
  }
9
9
 
10
- interface FallbackOptions {
11
- loadingFallback?: JSX.Element;
12
- errorFallback?: JSX.Element;
10
+ export interface FallbackOptions {
11
+ loadingFallback?: ReactNode;
12
+ errorFallback?: ReactNode;
13
13
  }
14
14
 
15
15
  export type ProvideDecorator = (
@@ -17,7 +17,7 @@ export type ProvideDecorator = (
17
17
  singletons?: ProviderConfigEntrySingletons<any>[];
18
18
  instances?: ProviderConfigEntryInstances<any>[];
19
19
  },
20
- options?: JSX.Element | FallbackOptions
20
+ options?: ReactNode | FallbackOptions
21
21
  ) => <T extends ComponentType<any>>(target: T) => T & WrappedComponent<T>;
22
22
 
23
23
  export const provide = ((stores, elementOrOptions) => (Component: ComponentType) => props => (
@@ -26,18 +26,15 @@ export const provide = ((stores, elementOrOptions) => (Component: ComponentType)
26
26
  </Provider>
27
27
  )) as ProvideDecorator;
28
28
 
29
- function getOptions(arg?: FallbackOptions | JSX.Element): FallbackOptions | undefined {
29
+ function getOptions(arg?: FallbackOptions | ReactNode): FallbackOptions | undefined {
30
30
  return arg && isOptionsObject(arg) ? arg : { loadingFallback: arg };
31
31
  }
32
32
 
33
- function isOptionsObject(arg: FallbackOptions | JSX.Element): arg is FallbackOptions {
33
+ function isOptionsObject(arg: FallbackOptions | NonNullable<ReactNode>): arg is FallbackOptions {
34
34
  return (
35
- Object.hasOwn(arg, 'loadingFallback') ||
36
- Object.hasOwn(arg, 'errorFallback') ||
37
- isEmptyObject(arg)
35
+ typeof arg === 'object' &&
36
+ (Object.hasOwn(arg, 'loadingFallback') ||
37
+ Object.hasOwn(arg, 'errorFallback') ||
38
+ Object.keys(arg).length === 0)
38
39
  );
39
40
  }
40
-
41
- function isEmptyObject(arg: FallbackOptions | JSX.Element) {
42
- return typeof arg === 'object' && Object.keys(arg).length === 0;
43
- }