Skip to content

🤖 Bip Bop - Fusion Framework Release - #5210

Merged
odinr merged 1 commit into
mainfrom
changeset-release/main
Aug 6, 2026
Merged

🤖 Bip Bop - Fusion Framework Release#5210
odinr merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@equinor/fusion-framework-module-state@1.0.0

Major Changes

  • b92698d: 🚀 Introducing the Fusion Framework State Module

    @equinor/fusion-framework-module-state is a new reactive state management module with built-in synchronization capabilities and comprehensive event system for enterprise-grade applications.

    🗄️ Synchronization Features

    • PouchDbSyncStorage: Bidirectional synchronization with remote databases
    • Real-time sync events: Monitor sync progress, errors, and status changes
    • Conflict resolution: Automatic handling of concurrent data modifications
    • Live sync options: Configurable heartbeat, retry, and timeout settings

    📡 Event System
    Comprehensive event architecture for type-safe state management:

    Event Classes:

    • StateEntryCreatedEvent - Item creation tracking
    • StateEntryUpdatedEvent - Item modification events
    • StateEntryDeletedEvent - Item removal notifications
    • StateSyncChangeEvent - Sync data changes
    • StateSyncCompleteEvent - Sync operation completion
    • StateSyncErrorEvent - Sync failure handling
    • StateSyncStatusEvent - Sync status monitoring
    • StateOperationSuccessEvent - Successful operations
    • StateOperationFailureEvent - Operation failure tracking

    Event Organization:

    • StateChangeEvent - CRUD operation events
    • StateSyncEvent - Synchronization events
    • StateOperationEvent - Operation result events

    🏗️ Core Architecture

    • StateProvider: Reactive state management with observable patterns
    • Storage Interface: Extensible storage backends with sync capabilities
    • Type Safety: Comprehensive TypeScript definitions
    • Memory Management: Proper cleanup and disposal patterns
    • Storage and sync events are dispatched through the app's event module, so onStateSync.*
      listeners registered via useAppModule('event').addEventListener(...) actually fire.

Patch Changes

  • 0d6ef3a: Internal: bump happy-dom from 18.0.1 to 20.8.9 (dev dependency, test environment only). Resolves Dependabot security alerts for Happy DOM VM context escape / RCE, ECMAScriptModuleCompiler code injection, and fetch cross-origin cookie disclosure.
  • 020d9e5: Internal: bump uuid from ^11.1.1 to ^14.0.1, matching the version already used across the rest of the monorepo. Not directly imported by this package's source, so no breaking impact.
  • 0d9d876: Internal: bump uuid from ^11.0.3 to ^11.1.1. Resolves Dependabot security alert for a missing buffer bounds check in uuid v3/v5/v6 when a buffer is provided (< 11.1.1).
  • 05586e7: Internal: bump vitest from ^2.0.5 to ^4.1.0 (dev dependency, test runner only), matching the version already used across the rest of the monorepo. Resolves Dependabot security alerts for the Vitest UI server arbitrary file read/execute vulnerability (< 3.2.6).

@equinor/fusion-framework-app@12.0.0

Minor Changes

  • b92698d: Add state management module support to @equinor/fusion-framework-app

    This change introduces comprehensive state management capabilities to the app package, allowing developers to easily enable persistent state storage in their Fusion applications.

    Features

    • State Module Enabler: Added enableState function that configures the state module with PouchDB storage
    • Package Exports: Added new export path ./enable-state for the state enabler function
    • Type Definitions: Added typesVersions support for the new state enabler
    • Peer Dependencies: Added @equinor/fusion-framework-module-state as an optional peer dependency
    • Storage Configuration: Automatic app-scoped storage with key prefixing to prevent state collisions

    Usage

    Applications can now enable state management by:

    import { enableState } from "@equinor/fusion-framework-app/enable-state";
    
    export const configure = (configurator) => {
      enableState(configurator);
    };

    The state module provides persistent storage with automatic app-key scoping and uses PouchDB for reliable data persistence across browser sessions.

    Note: Applications must install @equinor/fusion-framework-module-state to use this functionality.

Patch Changes

  • Updated dependencies [0d6ef3a]
  • Updated dependencies [020d9e5]
  • Updated dependencies [0d9d876]
  • Updated dependencies [05586e7]
  • Updated dependencies [b92698d]
  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module-state@1.0.0
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework@8.0.13
    • @equinor/fusion-framework-module-telemetry@7.0.2

@equinor/fusion-framework-plugin-context-navigation@0.1.0

Minor Changes

  • 1b9d026: Initial release of the context navigation plugin.

    Adapter-based, event-driven plugin that reconciles context selection with the browser URL for portal hosts. Ships with built-in adapters for query-param, path-segment, and custom URL shapes, plus two pre-wired source strategies:

    • app-first — app sets context, the plugin encodes it to the URL.
    • context-first — the plugin decodes context from the URL on startup, redirects to a configurable null-context URL when no context is resolvable.
    import { enableContextNavigation } from "@equinor/fusion-framework-plugin-context-navigation";
    import { createAppFirstSource } from "@equinor/fusion-framework-plugin-context-navigation/sources";
    
    enableContextNavigation(configurator, (builder) => {
      builder.setSourceFactory(createAppFirstSource());
    });

Patch Changes

  • 593a44b: Internal: bump vitest from ^3.1.1 to ^4.1.10 (dev dependency, test runner only), matching the version already used across the rest of the monorepo.

@equinor/fusion-framework-react-app@13.0.0

Minor Changes

  • b92698d: Add state management support to @equinor/fusion-framework-react-app/state:

    • enableAppState - configures the app to use @equinor/fusion-framework-module-state, with
      app-scoped storage key prefixing to prevent state collisions between apps.
    • useAppState - a persistent, cross-component-synchronized alternative to useState, backed by
      the state module's storage.
    • useStateSyncEvents - subscribes to the app's onStateSync.status/.change/.complete/.error
      events (dispatched when storage is configured for replication, e.g. PouchDbSyncStorage) and
      returns the most recent events, oldest first, bounded to a given limit. Also re-exports
      StateSyncEvent and StateSyncEventType from @equinor/fusion-framework-module-state for
      convenience.
    import { enableAppState } from "@equinor/fusion-framework-react-app/state";
    
    export const configure = (configurator) => {
      enableAppState(configurator);
    };
    import {
      useAppState,
      useStateSyncEvents,
    } from "@equinor/fusion-framework-react-app/state";
    
    const [count, setCount] = useAppState("counter", { defaultValue: 0 });
    const events = useStateSyncEvents(20);

    Requires the optional peer dependency @equinor/fusion-framework-module-state.

Patch Changes

  • Updated dependencies [b92698d]
  • Updated dependencies [1b9d026]
  • Updated dependencies [1b9d026]
  • Updated dependencies [0d6ef3a]
  • Updated dependencies [020d9e5]
  • Updated dependencies [0d9d876]
  • Updated dependencies [05586e7]
  • Updated dependencies [b92698d]
  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-app@12.0.0
    • @equinor/fusion-framework-module-navigation@7.0.7
    • @equinor/fusion-framework-module-state@1.0.0
    • @equinor/fusion-framework-module@6.1.2

@equinor/fusion-framework-cli@15.2.4

Patch Changes

  • 0d9d876: Internal: bump transitive dependencies bundled into these packages' build output via pnpm.overridesundici (<7.29.0), brace-expansion (<2.1.4), fast-uri (<3.1.5), and postcss (<=8.5.22) — to resolve Dependabot security alerts. These packages bundle their dependency tree (rollup/vite build) and are therefore always changesetted for dependency changes, even when only the root lockfile resolution moves.
  • Updated dependencies [1b9d026]
  • Updated dependencies [0d9d876]
    • @equinor/fusion-framework-dev-portal@9.0.0
    • @equinor/fusion-framework-dev-server@2.0.18

@equinor/fusion-framework-cli-plugin-ai-base@4.0.8

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2

@equinor/fusion-framework-cli-plugin-ai-chat@3.0.8

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework-cli-plugin-ai-base@4.0.8

@equinor/fusion-framework-cli-plugin-ai-index@3.0.9

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework-cli-plugin-ai-base@4.0.8

@equinor/fusion-framework-dev-portal@9.0.0

Patch Changes

  • 1b9d026: Integrate @equinor/fusion-framework-plugin-context-navigation into the dev portal.

    Portal context-to-URL reconciliation is now handled by @equinor/fusion-framework-plugin-context-navigation, replacing the ad-hoc hook-based approach.

  • 0d9d876: Internal: bump transitive dependencies bundled into these packages' build output via pnpm.overridesundici (<7.29.0), brace-expansion (<2.1.4), fast-uri (<3.1.5), and postcss (<=8.5.22) — to resolve Dependabot security alerts. These packages bundle their dependency tree (rollup/vite build) and are therefore always changesetted for dependency changes, even when only the root lockfile resolution moves.

  • Updated dependencies [b92698d]

  • Updated dependencies [593a44b]

  • Updated dependencies [1b9d026]

  • Updated dependencies [1b9d026]

  • Updated dependencies [1b9d026]

  • Updated dependencies [1b9d026]

  • Updated dependencies [0d9d876]

    • @equinor/fusion-framework-app@12.0.0
    • @equinor/fusion-framework-plugin-context-navigation@0.1.0
    • @equinor/fusion-framework-module-context@8.0.2
    • @equinor/fusion-framework-module-navigation@7.0.7
    • @equinor/fusion-framework-dev-server@2.0.18
    • @equinor/fusion-framework@8.0.13
    • @equinor/fusion-framework-module-analytics@3.0.5
    • @equinor/fusion-framework-module-telemetry@7.0.2

@equinor/fusion-framework-dev-server@2.0.18

Patch Changes

  • 0d9d876: Internal: bump transitive dependencies bundled into these packages' build output via pnpm.overridesundici (<7.29.0), brace-expansion (<2.1.4), fast-uri (<3.1.5), and postcss (<=8.5.22) — to resolve Dependabot security alerts. These packages bundle their dependency tree (rollup/vite build) and are therefore always changesetted for dependency changes, even when only the root lockfile resolution moves.
    • @equinor/fusion-framework-vite-plugin-spa@4.0.16

@equinor/fusion-framework@8.0.13

Patch Changes

  • Updated dependencies [1b9d026]
  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module-context@8.0.2
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework-module-telemetry@7.0.2

@equinor/fusion-framework-module-analytics@3.0.5

Patch Changes

  • Updated dependencies [1b9d026]
  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module-context@8.0.2
    • @equinor/fusion-framework-module@6.1.2

@equinor/fusion-framework-module-context@8.0.2

Patch Changes

  • 1b9d026: Move URL-based initial context resolution to the context-navigation plugin.

    The context module's resolveInitialContext no longer resolves context from the URL path — that responsibility has been moved to @equinor/fusion-framework-plugin-context-navigation at the portal level. This decouples URL concerns from the context module.

    Changes:

    • resolveInitialContext no longer accepts the options parameter with path resolution config.
    • URL-based initial context resolution is now handled by the context-navigation plugin.
    • Added version property to IContextProvider interface (non-breaking).
    • Added explanatory @ts-ignore directives on compatibility assignments to avoid a breaking API signature change in this release.

    Migration: Apps do not need to change their code. Portal hosts should enable the @equinor/fusion-framework-plugin-context-navigation plugin to restore URL-based context resolution behavior.

@equinor/fusion-framework-module@6.1.2

Patch Changes

  • b92698d: Internal: pin explicit generic types on the reduce operator in createModuleConfigs so the accumulator type is no longer inferred as unknown under TypeScript 7's stricter inference, which broke builds for consumers with composite project references.

@equinor/fusion-framework-module-navigation@7.0.7

Patch Changes

  • 1b9d026: Fix basename boundary matching and trailing-slash handling.

    • normalizePathname no longer strips trailing slashes — only collapses consecutive slashes. Trailing slash is now preserved as part of the path identity.
    • _isWithinBasenameScope uses a path-boundary check (pathname === basename || pathname.startsWith(basename + '/')) to prevent false positives from apps with overlapping name prefixes (e.g. /apps/my-app no longer matches /apps/my-app-other/foo).
    • _localizePath falls back to '/' when the basename-stripped pathname is empty.
  • 1b9d026: Security Fix: Replaced regex-based pathname normalization with iterative approach to prevent potential ReDoS (Regular Expression Denial of Service) vulnerability when processing user-controlled basename values.

    The normalizePathname function now uses a simple character-by-character scan instead of /\/+/g regex, ensuring O(n) linear time complexity even with pathological input containing thousands of consecutive slashes.

    This addresses CodeQL security alert: "Polynomial regular expression used on uncontrolled data"

    Related: feat(context-navigation): add plugin package, dev portal integration, and plugin docs #4751

@equinor/fusion-framework-module-telemetry@7.0.2

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2

@equinor/fusion-framework-module-widget@16.0.5

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2

@equinor/fusion-framework-vite-plugin-spa@4.0.16

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework-module-telemetry@7.0.2

@equinor/fusion-framework-cookbook-app-react-state@1.0.0

Major Changes

  • b92698d: Merged the app-react-state and app-react-state-replication cookbooks into one comprehensive
    @equinor/fusion-framework-cookbook-app-react-state cookbook covering the full
    @equinor/fusion-framework-module-state surface:

    • Basics page: useAppState fundamentals - boolean, string, and optional state with no
      defaultValue - using the state module's own zero-config default storage.
    • Profile and Todos pages: object and list state, now optionally upgraded to CouchDB
      replication via PouchDbSyncStorage when FUSION_SPA_COUCHDB_URL is set (see .env.example)
      • unset, the cookbook runs with no Docker/CouchDB setup required.
    • Replaced the cookbook's custom app-state-with-replication module (a hand-rolled
      StateProvider/sync-event reimplementation) with the framework's own PouchDbSyncStorage and
      native onStateSync.status / onStateSync.change / onStateSync.complete / onStateSync.error
      events, dispatched through the app's event module.
    • Removed predev's automatic CouchDB startup - pnpm couchdb:start is now an explicit, optional
      step for trying the replication demo.
    • The SyncStatusMonitor/SyncEventList/SyncStatusIndicator components now consume the
      framework's useStateSyncEvents hook (@equinor/fusion-framework-react-app/state) instead of a
      cookbook-local hook/Context reimplementation of the same subscription logic.
    • Simplified ProfileManager from 10 files (a @equinor/fusion-observable reducer, action
      creators, and seven single-field presentational components) down to a single component using
      plain useAppState + immutable object spreads, matching the pattern already used by the
      Basics and Todos pages - and dropped the now-unused @equinor/fusion-observable dependency.
    • Removed leftover debug console.logs and dead types (SyncStatus, ReplicationSettings) left
      over from the pre-merge, hand-rolled sync implementation.

Patch Changes

  • Updated dependencies [0d6ef3a]
  • Updated dependencies [020d9e5]
  • Updated dependencies [0d9d876]
  • Updated dependencies [05586e7]
  • Updated dependencies [b92698d]
  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-module-state@1.0.0
    • @equinor/fusion-framework-react-app@13.0.0

@equinor/fusion-framework-cookbook-app-react-ag-grid@2.0.11

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-react-app@13.0.0

@equinor/fusion-framework-cookbook-app-react-context@5.0.6

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-react-app@13.0.0

@equinor/fusion-framework-cookbook-app-react-context-custom-error@5.0.6

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-react-app@13.0.0

@equinor/fusion-framework-cookbook-app-react-feature-flag@2.0.5

Patch Changes

  • Updated dependencies [b92698d]
    • @equinor/fusion-framework-react-app@13.0.0

poc-portal@1.1.93

Patch Changes

  • Updated dependencies [b92698d]
  • Updated dependencies [b92698d]
  • Updated dependencies [0d9d876]
    • @equinor/fusion-framework-module@6.1.2
    • @equinor/fusion-framework-react-app@13.0.0
    • @equinor/fusion-framework-cli@15.2.4
    • @equinor/fusion-framework@8.0.13

portal@0.1.78

Patch Changes

  • Updated dependencies [0d9d876]
    • @equinor/fusion-framework-cli@15.2.4

portal-analytics@0.4.46

Patch Changes

  • Updated dependencies [b92698d]
  • Updated dependencies [1b9d026]
  • Updated dependencies [1b9d026]
  • Updated dependencies [1b9d026]
  • Updated dependencies [b92698d]
  • Updated dependencies [0d9d876]
    • @equinor/fusion-framework-app@12.0.0
    • @equinor/fusion-framework-module-context@8.0.2
    • @equinor/fusion-framework-module-navigation@7.0.7
    • @equinor/fusion-framework-react-app@13.0.0
    • @equinor/fusion-framework-cli@15.2.4
    • @equinor/fusion-framework@8.0.13
    • @equinor/fusion-framework-module-analytics@3.0.5

@github-actions
github-actions Bot requested a review from a team as a code owner August 5, 2026 09:53
@github-actions
github-actions Bot marked this pull request as draft August 5, 2026 09:53
@github-actions
github-actions Bot force-pushed the changeset-release/main branch 10 times, most recently from a8f720c to ca3d780 Compare August 6, 2026 08:20
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from ca3d780 to f6cae22 Compare August 6, 2026 08:23
@odinr
odinr marked this pull request as ready for review August 6, 2026 08:24
@github-actions github-actions Bot added 👨🏻‍🍳 cookbooks 👾 React 💾 CLI fusion framework CLI 📚 documentation Improvements or additions to documentation 🧬 Modules labels Aug 6, 2026
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 65.13% 3602 / 5530
🔵 Statements 64.7% 4287 / 6625
🔵 Functions 51.51% 1239 / 2405
🔵 Branches 55.16% 1985 / 3598
File CoverageNo changed files found.
Generated in workflow #15158 for commit f6cae22 by the Vitest Coverage Report Action

@odinr
odinr merged commit 4ef2052 into main Aug 6, 2026
8 of 9 checks passed
@odinr
odinr deleted the changeset-release/main branch August 6, 2026 08:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💾 CLI fusion framework CLI 👨🏻‍🍳 cookbooks 📚 documentation Improvements or additions to documentation 🧬 Modules 👾 React

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant