@equinor/fusion-framework-vitest-plugin-react-app 1.0.0-next.6 → 1.0.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.
Files changed (51) hide show
  1. package/dist/esm/index.js +9 -4
  2. package/dist/esm/index.js.map +1 -1
  3. package/dist/esm/resolve-app-test-env.js +8 -2
  4. package/dist/esm/resolve-app-test-env.js.map +1 -1
  5. package/dist/esm/scope/resolve-fusion.js +22 -24
  6. package/dist/esm/scope/resolve-fusion.js.map +1 -1
  7. package/dist/esm/test-app.js +5 -8
  8. package/dist/esm/test-app.js.map +1 -1
  9. package/dist/esm/test.js +2 -1
  10. package/dist/esm/test.js.map +1 -1
  11. package/dist/esm/version.js +1 -1
  12. package/dist/esm/version.js.map +1 -1
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/dist/types/index.d.ts +4 -3
  15. package/dist/types/resolve-app-test-env.d.ts +3 -1
  16. package/dist/types/scope/resolve-fusion.d.ts +6 -7
  17. package/dist/types/test-app.d.ts +12 -11
  18. package/dist/types/test.d.ts +20 -9
  19. package/dist/types/version.d.ts +1 -1
  20. package/package.json +17 -19
  21. package/CHANGELOG.md +0 -196
  22. package/docs/advanced.md +0 -209
  23. package/docs/configuration.md +0 -112
  24. package/docs/getting-started.md +0 -66
  25. package/docs/migrating-an-existing-app.md +0 -202
  26. package/docs/module-mocks.md +0 -120
  27. package/docs/overview.md +0 -49
  28. package/docs/troubleshooting.md +0 -67
  29. package/docs/why-browser-mode.md +0 -128
  30. package/src/__tests__/app-test-vite-plugin.test.ts +0 -109
  31. package/src/__tests__/merge-env-config.test.ts +0 -67
  32. package/src/__tests__/resolve-app-test-env.test.ts +0 -83
  33. package/src/app-test.ts +0 -19
  34. package/src/define-project.ts +0 -91
  35. package/src/index.ts +0 -124
  36. package/src/merge-env-config.ts +0 -58
  37. package/src/render-app-component.tsx +0 -116
  38. package/src/render-app-hook.tsx +0 -135
  39. package/src/render.tsx +0 -64
  40. package/src/resolve-app-test-env.ts +0 -132
  41. package/src/scope/create-app-scope-wrapper.tsx +0 -26
  42. package/src/scope/default-app-env.ts +0 -13
  43. package/src/scope/index.ts +0 -4
  44. package/src/scope/resolve-app-scope.ts +0 -46
  45. package/src/scope/resolve-fusion.ts +0 -74
  46. package/src/test-app.tsx +0 -148
  47. package/src/test.tsx +0 -42
  48. package/src/version.ts +0 -2
  49. package/src/virtual-modules.d.ts +0 -12
  50. package/tsconfig.json +0 -26
  51. package/vitest.config.ts +0 -10
@@ -34,9 +34,10 @@ export type AppTestVitePluginOptions = ResolveAppTestEnvOptions & {
34
34
  * // ...your own browser-mode config
35
35
  * });
36
36
  * ```
37
- * Exposes two virtual modules: `virtual:fusion-app-test-env` (`manifest`/`config`, as JSON) and
38
- * `virtual:fusion-app-test-configure` (a re-export of the resolved `configure` module, or
39
- * `undefined` if none exists). Not intended to be imported directly by application code.
37
+ * Exposes two virtual modules: `virtual:fusion-app-test-env`
38
+ * (`manifest`/`config`/`runtimeDependencies`, as JSON) and `virtual:fusion-app-test-configure`
39
+ * (a re-export of the resolved `configure` module, or `undefined` if none exists). Not intended
40
+ * to be imported directly by application code.
40
41
  *
41
42
  * @param options - Resolution options; `entrypoint` defaults to the current working directory.
42
43
  * @returns A Vite plugin instance.
@@ -6,6 +6,8 @@ import { type AppManifestFn, type AppConfigFn, type ApiAppConfig } from '@equino
6
6
  export type AppTestEnv = {
7
7
  manifest: AppManifest;
8
8
  config: ApiAppConfig;
9
+ /** Package names declared by the application as runtime dependencies. */
10
+ runtimeDependencies: Array<string>;
9
11
  };
10
12
  /**
11
13
  * Options for {@link resolveAppTestEnv}.
@@ -38,7 +40,7 @@ export type ResolveAppTestEnvOptions = {
38
40
  * `test.override('appEnv', ...)`.
39
41
  *
40
42
  * @param options - Resolution options; `entrypoint` defaults to the current working directory.
41
- * @returns The resolved application manifest and config.
43
+ * @returns The resolved application manifest, config, and module capabilities.
42
44
  * @throws If no `package.json` can be found from `entrypoint` upward, or an explicitly requested
43
45
  * `manifest`/`config` file does not exist.
44
46
  * @example
@@ -10,17 +10,16 @@ import type { NavigationModule } from '@equinor/fusion-framework-module-navigati
10
10
  *
11
11
  * @template TEnv - The application environment descriptor.
12
12
  * @param options - `env` seeds the built-in app manifest mock; navigation defaults to in-memory
13
- * history, so tests don't leak URL/history state between runs. Feature flags default to the
14
- * in-memory feature-flag mock, with none enabled, when the optional
15
- * `@equinor/fusion-framework-module-feature-flag` peer dependency is installed. `configure`
16
- * runs afterwards on the same configurator — e.g. call `enableNavigation` or
17
- * `enableFeatureFlagMock` again to override either, or register extra modules and service
18
- * discovery entries. `fusion`, an already-built parent instance, is reused as-is and skips
19
- * `configure` entirely.
13
+ * history, so tests don't leak URL/history state between runs. `runtimeDependencies` enables
14
+ * parent module mocks associated with packages declared by the tested app. `configure` runs
15
+ * afterwards on the same configurator — e.g. call `enableNavigation` to override the history
16
+ * or register extra modules and service discovery entries. `fusion`, an already-built parent
17
+ * instance, is reused as-is and skips `configure` entirely.
20
18
  * @returns The given `fusion`, or a fresh mocked parent Fusion instance.
21
19
  */
22
20
  export declare function resolveFusion<TEnv extends AppEnv = AppEnv>(options?: {
23
21
  env?: TEnv;
24
22
  fusion?: Fusion;
25
23
  configure?: FrameworkMockConfigureFn<[AppModule, NavigationModule]>;
24
+ runtimeDependencies?: ReadonlyArray<string>;
26
25
  }): Promise<Fusion>;
@@ -85,16 +85,13 @@ import type { FrameworkMockConfigureFn } from '@equinor/fusion-framework/mock';
85
85
  * });
86
86
  * ```
87
87
  *
88
- * @example Extend the parent framework mock with an application module
88
+ * @example Extend the parent framework mock with service discovery
89
89
  * ```tsx
90
90
  * const test = testApp.extend(
91
91
  * 'configureFusion',
92
92
  * { injected: true },
93
93
  * (): FrameworkMockConfigureFn<[AppModule, NavigationModule]> =>
94
94
  * (configurator) => {
95
- * // seed a specific flag rather than merely enabling the mock — that's already the
96
- * // default when the optional feature-flag peer dependency is installed
97
- * enableFeatureFlagMock(configurator, (mock) => mock.addFeature({ key: 'new-search', enabled: true }));
98
95
  * configurator.serviceDiscovery.addServices([
99
96
  * { key: 'people', uri: baseUrl('people') },
100
97
  * { key: 'context', uri: baseUrl('context') },
@@ -103,33 +100,37 @@ import type { FrameworkMockConfigureFn } from '@equinor/fusion-framework/mock';
103
100
  * );
104
101
  * ```
105
102
  */
106
- export declare const testApp: import("vitest").TestAPI<Omit<Omit<Omit<Omit<Omit<Omit<Omit<object, "$__test"> & Record<"appEnv", AppEnv> & {
103
+ export declare const testApp: import("vitest").TestAPI<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<object, "$__test"> & Record<"appEnv", AppEnv> & {
107
104
  readonly $__worker?: object | undefined;
108
105
  readonly $__file?: object | undefined;
109
106
  readonly $__test?: (object & Record<"appEnv", AppEnv>) | undefined;
107
+ }, "$__test"> & Record<"runtimeDependencies", string[]> & {
108
+ readonly $__worker?: object | undefined;
109
+ readonly $__file?: object | undefined;
110
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]>) | undefined;
110
111
  }, "$__test"> & Record<"configureApp", AppMockConfigureFn | undefined> & {
111
112
  readonly $__worker?: object | undefined;
112
113
  readonly $__file?: object | undefined;
113
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined>) | undefined;
114
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined>) | undefined;
114
115
  }, "$__test"> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & {
115
116
  readonly $__worker?: object | undefined;
116
117
  readonly $__file?: object | undefined;
117
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined>) | undefined;
118
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined>) | undefined;
118
119
  }, "$__test"> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & {
119
120
  readonly $__worker?: object | undefined;
120
121
  readonly $__file?: object | undefined;
121
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>>) | undefined;
122
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>>) | undefined;
122
123
  }, "$__test"> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>> & {
123
124
  readonly $__worker?: object | undefined;
124
125
  readonly $__file?: object | undefined;
125
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>>) | undefined;
126
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>>) | undefined;
126
127
  }, "$__test"> & Record<"render", (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & {
127
128
  readonly $__worker?: object | undefined;
128
129
  readonly $__file?: object | undefined;
129
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>> & Record<"render", (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>>) | undefined;
130
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>> & Record<"render", (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>>) | undefined;
130
131
  }, "$__test"> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & {
131
132
  readonly $__worker?: object | undefined;
132
133
  readonly $__file?: object | undefined;
133
- readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>> & Record<"render", (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>>) | undefined;
134
+ readonly $__test?: (object & Record<"appEnv", AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", AppMockConfigureFn | undefined> & Record<"configureFusion", FrameworkMockConfigureFn<[AppModule, NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("@equinor/fusion-framework-module-app").AppModulesInstance<unknown>> & Record<"render", (ui: ReactElement, options?: Omit<RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>>) | undefined;
134
135
  }>;
135
136
  export default testApp;
@@ -28,48 +28,59 @@
28
28
  * });
29
29
  * ```
30
30
  */
31
- export declare const test: import("vitest").TestAPI<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<object, "$__test"> & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & {
31
+ export declare const test: import("vitest").TestAPI<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<object, "$__test"> & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & {
32
32
  readonly $__worker?: object | undefined;
33
33
  readonly $__file?: object | undefined;
34
34
  readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv>) | undefined;
35
+ }, "$__test"> & Record<"runtimeDependencies", string[]> & {
36
+ readonly $__worker?: object | undefined;
37
+ readonly $__file?: object | undefined;
38
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]>) | undefined;
35
39
  }, "$__test"> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & {
36
40
  readonly $__worker?: object | undefined;
37
41
  readonly $__file?: object | undefined;
38
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined>) | undefined;
42
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined>) | undefined;
39
43
  }, "$__test"> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & {
40
44
  readonly $__worker?: object | undefined;
41
45
  readonly $__file?: object | undefined;
42
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined>) | undefined;
46
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined>) | undefined;
43
47
  }, "$__test"> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & {
44
48
  readonly $__worker?: object | undefined;
45
49
  readonly $__file?: object | undefined;
46
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>>) | undefined;
50
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>>) | undefined;
47
51
  }, "$__test"> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & {
48
52
  readonly $__worker?: object | undefined;
49
53
  readonly $__file?: object | undefined;
50
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>>) | undefined;
54
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>>) | undefined;
51
55
  }, "$__test"> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & {
52
56
  readonly $__worker?: object | undefined;
53
57
  readonly $__file?: object | undefined;
54
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>>) | undefined;
58
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>>) | undefined;
55
59
  }, "$__test"> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & {
56
60
  readonly $__worker?: object | undefined;
57
61
  readonly $__file?: object | undefined;
58
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>>) | undefined;
62
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>>) | undefined;
59
63
  }, "$__test"> & Record<"appEnv", {
60
64
  manifest: import("@equinor/fusion-framework-cli/app").AppManifest;
61
65
  config: import("node_modules/@equinor/fusion-framework-module-app/src/AppConfig").AppConfig<import("node_modules/@equinor/fusion-framework-module-app/src/types").ConfigEnvironment> | undefined;
62
66
  }> & {
63
67
  readonly $__worker?: object | undefined;
64
68
  readonly $__file?: object | undefined;
65
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & Record<"appEnv", {
69
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & Record<"appEnv", {
70
+ manifest: import("@equinor/fusion-framework-cli/app").AppManifest;
71
+ config: import("node_modules/@equinor/fusion-framework-module-app/src/AppConfig").AppConfig<import("node_modules/@equinor/fusion-framework-module-app/src/types").ConfigEnvironment> | undefined;
72
+ }>) | undefined;
73
+ }, "$__test"> & Record<"runtimeDependencies", string[]> & {
74
+ readonly $__worker?: object | undefined;
75
+ readonly $__file?: object | undefined;
76
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & Record<"appEnv", {
66
77
  manifest: import("@equinor/fusion-framework-cli/app").AppManifest;
67
78
  config: import("node_modules/@equinor/fusion-framework-module-app/src/AppConfig").AppConfig<import("node_modules/@equinor/fusion-framework-module-app/src/types").ConfigEnvironment> | undefined;
68
79
  }>) | undefined;
69
80
  }, "$__test"> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & {
70
81
  readonly $__worker?: object | undefined;
71
82
  readonly $__file?: object | undefined;
72
- readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & Record<"appEnv", {
83
+ readonly $__test?: (object & Record<"appEnv", import("node_modules/@equinor/fusion-framework-app/src/types").AppEnv> & Record<"runtimeDependencies", string[]> & Record<"configureApp", import("node_modules/@equinor/fusion-framework-app/src/mock/mock-app-modules").AppMockConfigureFn | undefined> & Record<"configureFusion", import("node_modules/@equinor/fusion-framework/src/mock/mock-framework").FrameworkMockConfigureFn<[import("node_modules/@equinor/fusion-framework-module-app/src/module").AppModule, import("node_modules/@equinor/fusion-framework-module-navigation/src/module").NavigationModule]> | undefined> & Record<"fusion", import("node_modules/@equinor/fusion-framework/src/types").Fusion<unknown>> & Record<"app", import("node_modules/@equinor/fusion-framework-module-app/src/types").AppModulesInstance<unknown>> & Record<"render", (ui: import("node_modules/@types/react").ReactElement, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderOptions, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderResult>> & Record<"renderHook", <Result, Props = undefined>(cb: (initialProps?: Props) => Result, options?: Omit<import("node_modules/vitest-browser-react/dist").RenderHookOptions<Props>, 'wrapper'>) => Promise<import("node_modules/vitest-browser-react/dist").RenderHookResult<Result, Props>>> & Record<"appEnv", {
73
84
  manifest: import("@equinor/fusion-framework-cli/app").AppManifest;
74
85
  config: import("node_modules/@equinor/fusion-framework-module-app/src/AppConfig").AppConfig<import("node_modules/@equinor/fusion-framework-module-app/src/types").ConfigEnvironment> | undefined;
75
86
  }>) | undefined;
@@ -1 +1 @@
1
- export declare const version = "1.0.0-next.6";
1
+ export declare const version = "1.0.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/fusion-framework-vitest-plugin-react-app",
3
- "version": "1.0.0-next.6",
3
+ "version": "1.0.1",
4
4
  "description": "Vite plugin resolving an application's manifest, config, and module-configurator as virtual modules for testing.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -43,19 +43,24 @@
43
43
  "testing"
44
44
  ],
45
45
  "license": "ISC",
46
+ "files": [
47
+ "dist"
48
+ ],
46
49
  "publishConfig": {
47
50
  "access": "public"
48
51
  },
49
52
  "dependencies": {
50
- "@equinor/fusion-framework": "8.1.0-next.2",
51
- "@equinor/fusion-framework-app": "13.0.3-next.1",
52
- "@equinor/fusion-framework-cli": "15.3.0-next.1",
53
- "@equinor/fusion-framework-module": "6.1.3-next.0",
54
- "@equinor/fusion-framework-module-app": "8.0.6-next.0",
55
- "@equinor/fusion-framework-module-navigation": "7.0.9-next.0",
56
- "@equinor/fusion-framework-react-module": "4.0.3-next.0",
57
- "@equinor/fusion-imports": "2.0.3-next.1",
58
- "@equinor/fusion-framework-react": "9.0.0-next.0"
53
+ "@equinor/fusion-framework": "8.1.1",
54
+ "@equinor/fusion-framework-app": "13.1.1",
55
+ "@equinor/fusion-framework-cli": "15.3.1",
56
+ "@equinor/fusion-framework-module": "6.1.4",
57
+ "@equinor/fusion-framework-module-app": "8.1.1",
58
+ "@equinor/fusion-framework-module-feature-flag": "2.1.1",
59
+ "@equinor/fusion-framework-module-navigation": "7.0.10",
60
+ "@equinor/fusion-framework-module-telemetry": "7.1.1",
61
+ "@equinor/fusion-framework-react": "9.0.1",
62
+ "@equinor/fusion-framework-react-module": "4.0.4",
63
+ "@equinor/fusion-imports": "2.0.4"
59
64
  },
60
65
  "devDependencies": {
61
66
  "@types/react": "^19.2.7",
@@ -68,8 +73,7 @@
68
73
  "typescript": "^7.0.2",
69
74
  "vite": "^8.0.0",
70
75
  "vitest": "^4.1.10",
71
- "vitest-browser-react": "^2.2.0",
72
- "@equinor/fusion-framework-module-feature-flag": "2.1.0-next.1"
76
+ "vitest-browser-react": "^2.2.0"
73
77
  },
74
78
  "peerDependencies": {
75
79
  "@types/react": "^18.0.0 || ^19.0.0",
@@ -80,13 +84,7 @@
80
84
  "rxjs": "^7.0.0",
81
85
  "vite": "^8.0.0",
82
86
  "vitest": "^4.0.0",
83
- "vitest-browser-react": "^2.2.0",
84
- "@equinor/fusion-framework-module-feature-flag": "2.1.0-next.1"
85
- },
86
- "peerDependenciesMeta": {
87
- "@equinor/fusion-framework-module-feature-flag": {
88
- "optional": true
89
- }
87
+ "vitest-browser-react": "^2.2.0"
90
88
  },
91
89
  "scripts": {
92
90
  "build": "tsc -b",
package/CHANGELOG.md DELETED
@@ -1,196 +0,0 @@
1
- # @equinor/fusion-framework-vitest-plugin-react-app
2
-
3
- ## 1.0.0-next.6
4
-
5
- ### Patch Changes
6
-
7
- - Updated dependencies [09a9bcc]
8
- - Updated dependencies [09a9bcc]
9
- - Updated dependencies [09a9bcc]
10
- - @equinor/fusion-framework-cli@15.3.0-next.1
11
- - @equinor/fusion-framework-module-feature-flag@2.1.0-next.1
12
- - @equinor/fusion-imports@2.0.3-next.1
13
- - @equinor/fusion-framework-app@13.0.3-next.1
14
- - @equinor/fusion-framework@8.1.0-next.2
15
-
16
- ## 1.0.0-next.5
17
-
18
- ### Minor Changes
19
-
20
- - 1813f8a: `resolveFusion` (and both the `/test` fixtures and `testApp`) now enable the feature-flag
21
- mock by default, with no flags enabled, so `useFeature` needs no `localStorage` or URL
22
- seeding in tests.
23
-
24
- `@equinor/fusion-framework-module-feature-flag` is an optional peer dependency: the mock is
25
- only wired up when the package is actually installed, so apps that don't use feature flags
26
- aren't forced to add it. Install it to get the default mock; call `enableFeatureFlagMock`
27
- again inside `configureFusion` to seed specific flags.
28
-
29
- ### Patch Changes
30
-
31
- - 1813f8a: Exclude `.d.ts` files from the default `server.warmup.clientFiles` and `optimizeDeps.entries`
32
- globs in `defineProject`. Previously, an app shipping a CJS-style declaration file (for example
33
- one using `export =`) failed the Vite warmup scan, since it was loaded as ESM.
34
- - 1813f8a: Revert the mocked framework's default navigation history from browser history back to in-memory
35
- history. Browser history leaked URL/history state between tests; `configureFusion`/`enableNavigation`
36
- can still opt back into browser history for a test that specifically needs it.
37
- - Updated dependencies [c8008e3]
38
- - @equinor/fusion-framework-app@13.0.3-next.0
39
- - @equinor/fusion-framework-cli@15.2.11-next.0
40
- - @equinor/fusion-framework-module-app@8.0.6-next.0
41
- - @equinor/fusion-framework-module-navigation@7.0.9-next.0
42
- - @equinor/fusion-framework-react@9.0.0-next.0
43
- - @equinor/fusion-framework-module-feature-flag@2.1.0-next.0
44
-
45
- ## 1.0.0-next.4
46
-
47
- ### Major Changes
48
-
49
- - b3d46e0: Rename the `testApp`/`test` fixtures for extending the mocked application and parent framework
50
- configuration: `configure` is now `configureApp`, the new `configureFramework` fixture
51
- introduced alongside it is now `configureFusion`, and `env` is now `appEnv`.
52
-
53
- ```diff
54
- -const test = testApp.extend('configure', { injected: true }, () => ...);
55
- +const test = testApp.extend('configureApp', { injected: true }, () => ...);
56
-
57
- -test.override('fusion', async ({ env }) => ...);
58
- +test.override('fusion', async ({ appEnv }) => ...);
59
- ```
60
-
61
- `configureFusion` composes with the base parent-framework mock (app manifest and navigation) the same way `configureApp` composes with the base app-module mock — see [Advanced usage](docs/advanced.md#extend-the-parent-framework-mock-with-configurefusion) for extending framework-scope modules such as feature flags, service discovery, or navigation history.
62
-
63
- Also adds `mergeEnvConfig`, a new utility exported from the `/test` entry point for overriding one endpoint's URL (or an `environment` value) on `appEnv` without dropping the rest of the app's `AppConfig` — a plain object spread over `AppConfig` copies nothing, since it stores `environment`/`endpoints` behind private fields exposed only through getters. See [Advanced usage](docs/advanced.md#fake-an-endpoint-url-with-mergeenvconfig).
64
-
65
- ```ts
66
- const test = baseTest.extend("appEnv", ({ appEnv }) =>
67
- mergeEnvConfig(appEnv, {
68
- endpoints: { "cpr-api": { url: backendBaseUrl } },
69
- }),
70
- );
71
- ```
72
-
73
- ## 0.2.0-next.3
74
-
75
- ### Patch Changes
76
-
77
- - @equinor/fusion-framework-cli@15.2.8-next.2
78
- - @equinor/fusion-framework-app@14.0.0-next.1
79
- - @equinor/fusion-framework@8.1.0-next.1
80
-
81
- ## 0.2.0-next.2
82
-
83
- ### Minor Changes
84
-
85
- - 7cdd512: `defineProject` now defaults `test.browser.viewport` to `1024x768` instead of Vitest's own
86
- mobile-sized default, matching the low, fixed resolution most Fusion apps see in production
87
- through Citrix. Pass `test.browser.viewport` to `defineProject` to use a different size.
88
-
89
- ## 0.2.0-next.1
90
-
91
- ### Patch Changes
92
-
93
- - @equinor/fusion-framework-cli@15.2.8-next.1
94
-
95
- ## 0.2.0-next.0
96
-
97
- ### Minor Changes
98
-
99
- - 2836e0b: Add a `/config` entry-point exporting `defineProject`: a drop-in for Vitest's own `defineProject`, pre-wired with `appTestVitePlugin` and the `@vitest/browser-playwright`/`chromium` browser provider, so a consuming app's own `vitest.config.ts` needs no browser-provider boilerplate.
100
-
101
- ```ts
102
- import { defineProject } from "@equinor/fusion-framework-vitest-plugin-react-app/config";
103
- import { name, version } from "./package.json" with { type: "json" };
104
-
105
- export default defineProject({ test: { name: `${name}@${version}` } });
106
- ```
107
-
108
- `override` is deep-merged onto the default config via Vite's own `mergeConfig` (a plain object), or applied to the default config outright (a function receiving it) — for changes `mergeConfig` can't express, such as swapping `test.browser.provider` for a different `@vitest/browser-*` provider.
109
-
110
- `@vitest/browser-playwright` and `playwright` are now explicit peer dependencies of the package.
111
-
112
- Also fixes `appTestVitePlugin`'s `entrypoint` inference: when no `entrypoint` option is given, it now resolves from the Vitest project's own root (via `configResolved`) instead of `process.cwd()`, so each cookbook's `vitest.config.ts` no longer needs to pass `entrypoint` explicitly when run as part of a multi-project Vitest run.
113
-
114
- - 2836e0b: Add `@equinor/fusion-framework-vitest-plugin-react-app`: Vitest/`vitest-browser-react` helpers for testing a Fusion Framework React application inside a real, mock-backed application module scope — the same `FrameworkProvider` + `ModuleProvider` nesting `renderApp`/`createComponent` wire up in production, backed by `mockFramework` and `mockAppModules` (`@equinor/fusion-framework-app/mock`).
115
-
116
- ```tsx
117
- import { renderAppHook } from "@equinor/fusion-framework-vitest-plugin-react-app";
118
- import { useAccessToken } from "@equinor/fusion-framework-react-app/msal";
119
-
120
- const { result } = await renderAppHook(() =>
121
- useAccessToken({ scopes: ["User.Read"] }),
122
- );
123
- await vi.waitFor(() => expect(result.current.pending).toBe(false));
124
- ```
125
-
126
- Highlights:
127
-
128
- - `renderAppHook`/`renderAppComponent` — render a hook or component against the real `event`/`http`/`msal` module pipeline, with only the network boundary faked; the result carries a nested `fusion: { framework, app }` for driving a module directly after the initial render.
129
- - `testApp` — a `vitest` `test` extended with `env`/`configure`/`app`/`render`/`renderHook` fixtures, for a test file whose cases share one mocked scope.
130
- - `appTestVitePlugin` — a Vite plugin resolving an application's own manifest, config, and module-configurator (the same pipeline `ffc app build`/`ffc app dev` use) as virtual modules.
131
- - A `/test` entry-point exporting `test`/`render`, pre-seeded from the resolved manifest/config/configure once `appTestVitePlugin` is registered — no per-test `env`/`configure` wiring.
132
-
133
- Package documentation provides task-focused guides for setup, configuration, advanced fixtures,
134
- module mocks, and troubleshooting so npm, GitHub, and retrieval clients use the same canonical
135
- source as the VuePress site.
136
-
137
- ### Patch Changes
138
-
139
- - e8aae1f: Internal: publish every package on the `next` pre-release tag so the whole framework can be installed as a coherent set.
140
-
141
- Packages without their own changes are bumped only to receive a `-next.N` version and the `next` dist-tag on npm. Install with:
142
-
143
- ```bash
144
- pnpm add @equinor/fusion-framework-react-app@next
145
- ```
146
-
147
- - 2836e0b: Fix `defineProject` not pre-transforming lazily/code-split-imported source (e.g. route
148
- components reached only through dynamic `import()`), which could force Vite to reload the
149
- page mid-test and fail the in-flight test file's import.
150
-
151
- `defineProject`'s Vite config now sets `server.warmup.clientFiles: ['src/**/*.{ts,tsx}']`, so
152
- all source under `src/` is transformed up front instead of on first request.
153
-
154
- - 2836e0b: Document `test.override(...)` for overriding a fixture (`configure`, `fusion`, etc.) within a
155
- single test file or `describe` block, alongside the existing `test.extend(...)` guide, in the
156
- package's "Advanced usage" doc (`docs/advanced.md`).
157
- - 2836e0b: Add a "Migrate an existing app" guide (`docs/migrating-an-existing-app.md`) covering how to
158
- move a suite from `@testing-library/react`/jsdom/happy-dom onto this package: installing
159
- Browser Mode, replacing hand-rolled `vi.mock`s of Fusion hooks with each module's `enable*Mock`
160
- entry point, porting a hand-written mock HTTP server to `createRouterMiddleware`, composing a
161
- router fixture with a domain-state fixture in one file, and updating renders/assertions to the
162
- async `vitest-browser-react` API. Linked from the package README and from
163
- `docs/overview.md` and `testing-choosing-a-layer.md`.
164
- - 2836e0b: Add a "Why Browser Mode is the default" guide (`docs/why-browser-mode.md`) explaining
165
- the rationale for defaulting to real Chromium over DOM emulation (the documented React 19 peer
166
- dependency crash in the previous renderer, plus the framework's real-module testing philosophy),
167
- the actual performance tradeoff (a real browser is slower, not faster — this was a fidelity
168
- choice, not a speed optimization), and how to bring your own renderer for a single test file by
169
- composing `mockFramework`/`mockAppModules`/`FrameworkProvider`/`ModuleProvider` directly with a
170
- different render function (e.g. `@testing-library/react` on `happy-dom`). Linked from the
171
- package README and `docs/overview.md`.
172
- - Updated dependencies [e8aae1f]
173
- - Updated dependencies [2836e0b]
174
- - Updated dependencies [2836e0b]
175
- - Updated dependencies [2836e0b]
176
- - Updated dependencies [2836e0b]
177
- - Updated dependencies [2836e0b]
178
- - Updated dependencies [2836e0b]
179
- - Updated dependencies [2836e0b]
180
- - Updated dependencies [2836e0b]
181
- - Updated dependencies [2836e0b]
182
- - Updated dependencies [2836e0b]
183
- - Updated dependencies [2836e0b]
184
- - Updated dependencies [2836e0b]
185
- - Updated dependencies [2836e0b]
186
- - Updated dependencies [2836e0b]
187
- - Updated dependencies [2836e0b]
188
- - Updated dependencies [2836e0b]
189
- - @equinor/fusion-framework@8.1.0-next.0
190
- - @equinor/fusion-framework-app@14.0.0-next.0
191
- - @equinor/fusion-framework-cli@15.2.8-next.0
192
- - @equinor/fusion-framework-module@6.1.3-next.0
193
- - @equinor/fusion-framework-module-app@8.1.0-next.0
194
- - @equinor/fusion-framework-react@9.0.0-next.0
195
- - @equinor/fusion-framework-react-module@4.0.3-next.0
196
- - @equinor/fusion-imports@2.0.3-next.0