@squide/firefly 1.0.0 → 2.0.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @squide/firefly
2
2
 
3
+ ## 2.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#112](https://github.com/gsoft-inc/wl-squide/pull/112) [`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11) Thanks [@patricklafrance](https://github.com/patricklafrance)! - - Added a new `FireflyRuntime` class. This class should be used by all consumer applications rather than the previous `Runtime` class from `@squide/react-router`.
8
+ - The `FireflyRuntime` class has a `registerRequestHandlers` function and a `requestHandlers` getter. Consumer applications should use these instead of the `MSwPlugin`.
9
+ - Added a new layer of define functions (`defineDevHostConfig`, `defineBuildHostConfig`, `defineDevRemoteModuleConfig`, `defineBuildRemoteModuleConfig`). These functions should be used by all consumer applications rather than the previous define functions from `@squide/wbepack-module-federation`.
10
+ - Forward every exports from `@squide/core`, `@squide/react-router`, `@squide/webpack-module-federation`, `@squide/webpack-configs` and `@squide/msw`. Consumer applications should now import everything from `@squide/firefly` except the fakes implementations that should still be imported from `@squide/fakes`.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [[`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11), [`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11), [`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11), [`a9dda1c`](https://github.com/gsoft-inc/wl-squide/commit/a9dda1c3b010f616556fc3313c1934e20a26bc11)]:
15
+ - @squide/webpack-configs@1.0.0
16
+ - @squide/webpack-module-federation@3.0.0
17
+ - @squide/core@3.0.0
18
+ - @squide/react-router@3.0.0
19
+ - @squide/msw@2.0.4
20
+
21
+ ## 1.0.1
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [[`58097a2`](https://github.com/gsoft-inc/wl-squide/commit/58097a2fbaa7e5942cbe6f9b765fe471d52758d8)]:
26
+ - @squide/msw@2.0.3
27
+
3
28
  ## 1.0.0
4
29
 
5
30
  ### Major Changes
@@ -2,14 +2,14 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactElement } from 'react';
3
3
  import { RouterProviderProps } from 'react-router-dom';
4
4
 
5
- type OnLoadPublicDataFunction = (signal: AbortSignal) => Promise<unknown>;
6
- type OnLoadProtectedDataFunction = (signal: AbortSignal) => Promise<unknown>;
7
- type OnCompleteRegistrationFunction = () => Promise<unknown>;
5
+ type OnLoadPublicDataFunction = () => Promise<unknown>;
6
+ type OnLoadProtectedDataFunction = () => Promise<unknown>;
7
+ type OnCompleteRegistrationsFunction = () => Promise<unknown>;
8
8
  interface BootstrappingRouteProps {
9
9
  fallbackElement: ReactElement;
10
10
  onLoadPublicData?: OnLoadPublicDataFunction;
11
11
  onLoadProtectedData?: OnLoadProtectedDataFunction;
12
- onCompleteRegistration?: OnCompleteRegistrationFunction;
12
+ onCompleteRegistrations?: OnCompleteRegistrationsFunction;
13
13
  waitForMsw: boolean;
14
14
  areModulesRegistered: boolean;
15
15
  areModulesReady: boolean;
@@ -20,10 +20,10 @@ interface AppRouterProps {
20
20
  errorElement: ReactElement;
21
21
  onLoadPublicData?: OnLoadPublicDataFunction;
22
22
  onLoadProtectedData?: OnLoadProtectedDataFunction;
23
- onCompleteRegistration?: OnCompleteRegistrationFunction;
23
+ onCompleteRegistrations?: OnCompleteRegistrationsFunction;
24
24
  waitForMsw: boolean;
25
25
  routerProvidersProps?: RouterProviderProps;
26
26
  }
27
27
  declare function AppRouter(props: AppRouterProps): react_jsx_runtime.JSX.Element;
28
28
 
29
- export { AppRouter, AppRouterProps, BootstrappingRoute, OnCompleteRegistrationFunction, OnLoadProtectedDataFunction, OnLoadPublicDataFunction };
29
+ export { AppRouter, AppRouterProps, BootstrappingRoute, OnCompleteRegistrationsFunction, OnLoadProtectedDataFunction, OnLoadPublicDataFunction };
package/dist/AppRouter.js CHANGED
@@ -1 +1 @@
1
- export { AppRouter, BootstrappingRoute } from './chunk-4UQRHMJC.js';
1
+ export { AppRouter, BootstrappingRoute } from './chunk-GSHD4LQA.js';
@@ -0,0 +1,26 @@
1
+ import { MswPlugin } from '@squide/msw';
2
+ import { ReactRouterRuntime } from '@squide/react-router';
3
+
4
+ // src/fireflyRuntime.tsx
5
+ var FireflyRuntime = class extends ReactRouterRuntime {
6
+ #mswPlugin;
7
+ constructor(options = {}) {
8
+ const mswPlugin = new MswPlugin();
9
+ super({
10
+ ...options,
11
+ plugins: [
12
+ ...options.plugins ?? [],
13
+ mswPlugin
14
+ ]
15
+ });
16
+ this.#mswPlugin = mswPlugin;
17
+ }
18
+ registerRequestHandlers(handlers) {
19
+ this.#mswPlugin.registerRequestHandlers(handlers);
20
+ }
21
+ get requestHandlers() {
22
+ return this.#mswPlugin.requestHandlers;
23
+ }
24
+ };
25
+
26
+ export { FireflyRuntime };
@@ -1,5 +1,6 @@
1
+ import { useLogger } from '@squide/core';
1
2
  import { useIsMswStarted } from '@squide/msw';
2
- import { useLogger, useIsRouteMatchProtected, useRoutes } from '@squide/react-router';
3
+ import { useIsRouteMatchProtected, useRoutes } from '@squide/react-router';
3
4
  import { useAreModulesRegistered, useAreModulesReady } from '@squide/webpack-module-federation';
4
5
  import { useState, useEffect, useCallback, cloneElement, useMemo } from 'react';
5
6
  import { useErrorBoundary, ErrorBoundary } from 'react-error-boundary';
@@ -12,7 +13,7 @@ function BootstrappingRoute(props) {
12
13
  fallbackElement,
13
14
  onLoadPublicData,
14
15
  onLoadProtectedData,
15
- onCompleteRegistration,
16
+ onCompleteRegistrations,
16
17
  waitForMsw,
17
18
  areModulesRegistered,
18
19
  areModulesReady
@@ -37,37 +38,29 @@ function BootstrappingRoute(props) {
37
38
  if ((areModulesRegistered || areModulesReady) && isMswStarted) {
38
39
  if (!isPublicDataLoaded) {
39
40
  logger.debug("[shell] Loading public data.");
40
- const abordController = new AbortController();
41
- onLoadPublicData(abordController.signal).then(() => {
41
+ onLoadPublicData().then(() => {
42
42
  setIsPublicDataLoaded(true);
43
43
  logger.debug("[shell] Public data has been loaded.");
44
44
  }).catch((error) => {
45
45
  showBoundary(error);
46
46
  });
47
- return () => {
48
- abordController.abort();
49
- };
50
47
  }
51
48
  }
52
49
  }
53
50
  }, [logger, areModulesRegistered, areModulesReady, isMswStarted, isPublicDataLoaded, onLoadPublicData]);
54
- const isActiveRouteProtected = useIsRouteMatchProtected(location);
51
+ const isActiveRouteProtected = useIsRouteMatchProtected(location, { throwWhenThereIsNoMatch: areModulesReady });
55
52
  useEffect(() => {
56
53
  if (onLoadProtectedData) {
57
54
  if ((areModulesRegistered || areModulesReady) && isMswStarted) {
58
55
  if (isActiveRouteProtected) {
59
56
  if (!isProtectedDataLoaded) {
60
57
  logger.debug(`[shell] Loading protected data as "${location.pathname}" is a protected route.`);
61
- const abordController = new AbortController();
62
- onLoadProtectedData(abordController.signal).then(() => {
58
+ onLoadProtectedData().then(() => {
63
59
  setIsProtectedDataLoaded(true);
64
60
  logger.debug("[shell] Protected data has been loaded.");
65
61
  }).catch((error) => {
66
62
  showBoundary(error);
67
63
  });
68
- return () => {
69
- abordController.abort();
70
- };
71
64
  }
72
65
  } else {
73
66
  logger.debug(`[shell] Not loading protected data as "${location.pathname}" is a public route.`);
@@ -76,14 +69,14 @@ function BootstrappingRoute(props) {
76
69
  }
77
70
  }, [logger, location, areModulesRegistered, areModulesReady, isMswStarted, isActiveRouteProtected, isProtectedDataLoaded, onLoadProtectedData]);
78
71
  useEffect(() => {
79
- if (onCompleteRegistration) {
72
+ if (onCompleteRegistrations) {
80
73
  if (areModulesRegistered && isMswStarted && isPublicDataLoaded) {
81
74
  if (!areModulesReady) {
82
- onCompleteRegistration();
75
+ onCompleteRegistrations();
83
76
  }
84
77
  }
85
78
  }
86
- }, [areModulesRegistered, areModulesReady, isMswStarted, isPublicDataLoaded, onCompleteRegistration]);
79
+ }, [areModulesRegistered, areModulesReady, isMswStarted, isPublicDataLoaded, onCompleteRegistrations]);
87
80
  if (!areModulesReady || !isMswStarted || !isPublicDataLoaded || isActiveRouteProtected && !isProtectedDataLoaded) {
88
81
  return fallbackElement;
89
82
  }
@@ -95,7 +88,7 @@ function AppRouter(props) {
95
88
  errorElement,
96
89
  onLoadPublicData,
97
90
  onLoadProtectedData,
98
- onCompleteRegistration,
91
+ onCompleteRegistrations,
99
92
  waitForMsw,
100
93
  routerProvidersProps = {}
101
94
  } = props;
@@ -116,7 +109,7 @@ function AppRouter(props) {
116
109
  fallbackElement,
117
110
  onLoadPublicData,
118
111
  onLoadProtectedData,
119
- onCompleteRegistration,
112
+ onCompleteRegistrations,
120
113
  waitForMsw,
121
114
  areModulesRegistered,
122
115
  areModulesReady
@@ -125,7 +118,7 @@ function AppRouter(props) {
125
118
  children: routes
126
119
  }
127
120
  ]);
128
- }, [areModulesRegistered, areModulesReady, routes, onLoadPublicData, onLoadProtectedData, onCompleteRegistration, waitForMsw]);
121
+ }, [areModulesRegistered, areModulesReady, routes, onLoadPublicData, onLoadProtectedData, onCompleteRegistrations, waitForMsw]);
129
122
  return /* @__PURE__ */ jsx(RouterProvider, { ...routerProvidersProps, router });
130
123
  }
131
124
 
@@ -0,0 +1,11 @@
1
+ import { DefineDevHostConfigOptions, DefineBuildHostConfigOptions, DefineDevRemoteModuleConfigOptions, DefineBuildRemoteModuleConfigOptions } from '@squide/webpack-configs';
2
+ export { DefineBuildHostConfigOptions, DefineBuildRemoteModuleConfigOptions, DefineDevHostConfigOptions, DefineDevRemoteModuleConfigOptions, DefineHostModuleFederationPluginOptions, DefineRemoteModuleFederationPluginOptions, Features, ModuleFederationPluginOptions, Router, defineRemoteModuleFederationPluginOptions } from '@squide/webpack-configs';
3
+ import { SwcConfig } from '@workleap/swc-configs';
4
+ import webpack from 'webpack';
5
+
6
+ declare function defineDevHostConfig(swcConfig: SwcConfig, applicationName: string, port: number, options?: Omit<DefineDevHostConfigOptions, "features">): webpack.Configuration;
7
+ declare function defineBuildHostConfig(swcConfig: SwcConfig, applicationName: string, options?: Omit<DefineBuildHostConfigOptions, "features">): webpack.Configuration;
8
+ declare function defineDevRemoteModuleConfig(swcConfig: SwcConfig, applicationName: string, port: number, options?: Omit<DefineDevRemoteModuleConfigOptions, "features">): webpack.Configuration;
9
+ declare function defineBuildRemoteModuleConfig(swcConfig: SwcConfig, applicationName: string, options?: Omit<DefineBuildRemoteModuleConfigOptions, "features">): webpack.Configuration;
10
+
11
+ export { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig };
@@ -0,0 +1,42 @@
1
+ import { defineDevHostConfig as defineDevHostConfig$1, defineBuildHostConfig as defineBuildHostConfig$1, defineDevRemoteModuleConfig as defineDevRemoteModuleConfig$1, defineBuildRemoteModuleConfig as defineBuildRemoteModuleConfig$1 } from '@squide/webpack-configs';
2
+ export { defineRemoteModuleFederationPluginOptions } from '@squide/webpack-configs';
3
+
4
+ // src/defineConfig.ts
5
+ function defineDevHostConfig(swcConfig, applicationName, port, options = {}) {
6
+ return defineDevHostConfig$1(swcConfig, applicationName, port, {
7
+ ...options,
8
+ features: {
9
+ router: "react-router",
10
+ msw: true
11
+ }
12
+ });
13
+ }
14
+ function defineBuildHostConfig(swcConfig, applicationName, options = {}) {
15
+ return defineBuildHostConfig$1(swcConfig, applicationName, {
16
+ ...options,
17
+ features: {
18
+ router: "react-router",
19
+ msw: true
20
+ }
21
+ });
22
+ }
23
+ function defineDevRemoteModuleConfig(swcConfig, applicationName, port, options = {}) {
24
+ return defineDevRemoteModuleConfig$1(swcConfig, applicationName, port, {
25
+ ...options,
26
+ features: {
27
+ router: "react-router",
28
+ msw: true
29
+ }
30
+ });
31
+ }
32
+ function defineBuildRemoteModuleConfig(swcConfig, applicationName, options = {}) {
33
+ return defineBuildRemoteModuleConfig$1(swcConfig, applicationName, {
34
+ ...options,
35
+ features: {
36
+ router: "react-router",
37
+ msw: true
38
+ }
39
+ });
40
+ }
41
+
42
+ export { defineBuildHostConfig, defineBuildRemoteModuleConfig, defineDevHostConfig, defineDevRemoteModuleConfig };
@@ -0,0 +1,12 @@
1
+ import { RuntimeOptions } from '@squide/core';
2
+ import { ReactRouterRuntime } from '@squide/react-router';
3
+ import { RequestHandler } from 'msw';
4
+
5
+ declare class FireflyRuntime extends ReactRouterRuntime {
6
+ #private;
7
+ constructor(options?: RuntimeOptions);
8
+ registerRequestHandlers(handlers: RequestHandler[]): void;
9
+ get requestHandlers(): RequestHandler[];
10
+ }
11
+
12
+ export { FireflyRuntime };
@@ -0,0 +1 @@
1
+ export { FireflyRuntime } from './chunk-6R4K3V6F.js';
package/dist/index.d.ts CHANGED
@@ -1,4 +1,10 @@
1
- export { AppRouter, AppRouterProps, BootstrappingRoute, OnCompleteRegistrationFunction, OnLoadProtectedDataFunction, OnLoadPublicDataFunction } from './AppRouter.js';
1
+ export * from '@squide/core';
2
+ export * from '@squide/msw';
3
+ export * from '@squide/react-router';
4
+ export * from '@squide/webpack-module-federation';
5
+ export { AppRouter, AppRouterProps, BootstrappingRoute, OnCompleteRegistrationsFunction, OnLoadProtectedDataFunction, OnLoadPublicDataFunction } from './AppRouter.js';
6
+ export { FireflyRuntime } from './fireflyRuntime.js';
2
7
  import 'react/jsx-runtime';
3
8
  import 'react';
4
9
  import 'react-router-dom';
10
+ import 'msw';
package/dist/index.js CHANGED
@@ -1 +1,6 @@
1
- export { AppRouter, BootstrappingRoute } from './chunk-4UQRHMJC.js';
1
+ export { AppRouter, BootstrappingRoute } from './chunk-GSHD4LQA.js';
2
+ export { FireflyRuntime } from './chunk-6R4K3V6F.js';
3
+ export * from '@squide/core';
4
+ export * from '@squide/msw';
5
+ export * from '@squide/react-router';
6
+ export * from '@squide/webpack-module-federation';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@squide/firefly",
3
3
  "author": "Workleap",
4
- "version": "1.0.0",
4
+ "version": "2.0.0",
5
5
  "description": "Helpers to facilitate the creation of a shell package with Squide firefly technology stack.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {
@@ -19,6 +19,11 @@
19
19
  "import": "./dist/index.js",
20
20
  "types": "./dist/index.d.ts",
21
21
  "default": "./dist/index.js"
22
+ },
23
+ "./defineConfig.js": {
24
+ "import": "./dist/defineConfig.js",
25
+ "types": "./dist/defineConfig.d.ts",
26
+ "default": "./dist/defineConfig.js"
22
27
  }
23
28
  },
24
29
  "files": [
@@ -27,44 +32,57 @@
27
32
  "README.md"
28
33
  ],
29
34
  "peerDependencies": {
35
+ "@squide/webpack-configs": "*",
30
36
  "msw": "*",
31
37
  "react": "*",
32
38
  "react-dom": "*",
33
39
  "react-error-boundary": "*",
34
- "react-router-dom": "*"
40
+ "react-router-dom": "*",
41
+ "webpack": ">=5.0.0"
35
42
  },
36
43
  "peerDependenciesMeta": {
44
+ "@squide/webpack-configs": {
45
+ "optional": true
46
+ },
37
47
  "msw": {
38
48
  "optional": true
49
+ },
50
+ "webpack": {
51
+ "optional": true
39
52
  }
40
53
  },
41
54
  "devDependencies": {
42
- "@swc/core": "1.3.95",
55
+ "@swc/core": "1.3.96",
43
56
  "@swc/helpers": "0.5.3",
44
57
  "@swc/jest": "0.2.29",
58
+ "@testing-library/jest-dom": "6.1.4",
45
59
  "@testing-library/react": "14.0.0",
46
- "@types/jest": "29.5.6",
47
- "@types/react": "18.2.33",
60
+ "@types/jest": "29.5.7",
61
+ "@types/react": "18.2.36",
48
62
  "@types/react-dom": "18.2.14",
49
63
  "@workleap/eslint-plugin": "3.0.0",
50
64
  "@workleap/swc-configs": "2.1.2",
51
65
  "@workleap/tsup-configs": "3.0.1",
52
66
  "@workleap/typescript-configs": "3.0.2",
67
+ "@workleap/webpack-configs": "1.2.1",
53
68
  "jest": "29.7.0",
54
69
  "jest-environment-jsdom": "29.7.0",
55
- "msw": "1.3.2",
70
+ "msw": "2.0.3",
56
71
  "react": "18.2.0",
57
72
  "react-dom": "18.2.0",
58
73
  "react-error-boundary": "4.0.11",
59
- "react-router-dom": "6.17.0",
74
+ "react-router-dom": "6.18.0",
60
75
  "ts-jest": "29.1.1",
61
76
  "tsup": "7.2.0",
62
- "typescript": "5.2.2"
77
+ "typescript": "5.2.2",
78
+ "webpack": "5.89.0",
79
+ "@squide/webpack-configs": "1.0.0"
63
80
  },
64
81
  "dependencies": {
65
- "@squide/msw": "2.0.2",
66
- "@squide/react-router": "2.0.2",
67
- "@squide/webpack-module-federation": "2.2.0"
82
+ "@squide/core": "3.0.0",
83
+ "@squide/msw": "2.0.4",
84
+ "@squide/react-router": "3.0.0",
85
+ "@squide/webpack-module-federation": "3.0.0"
68
86
  },
69
87
  "sideEffects": false,
70
88
  "engines": {