Release 4.4.39 — dependency bumps, Utilities/allAction simplifications, and CI/publish workflow changes
This release advances the 4.4.x line with coordinated dependency patch bumps, a set of internal API simplifications, and CI/publish workflow changes. The work focuses on tidying package metadata and lockfile entries, consolidating and simplifying path and action helper logic, tightening linting in tests, and decoupling the npm publish job from a separate build job. Most changes are internal and backward-compatible at the public API surface, but a few behavioral simplifications (notably the removed Express empty-object workaround in allAction) may affect callers that relied on legacy response normalization. The notes below group related changes and call out impacts and affected files.
New Features
- Release version update
- package.json version updated to 4.4.39 (from development suffix 4.4.39-dev.0). (package.json)
Improvements
-
Dependency patch bumps and lockfile normalization
- Runtime dependency @fjell/registry bumped progressively to ^4.4.45; @fjell/core bumped to ^4.4.44 in this release. (package.json)
- Multiple package-lock.json entries updated to reflect bumped patch versions and updated resolved tarball URLs / integrity checksums. The lockfile was normalized to remove duplicated or inconsistent dependency lines so node_modules metadata is deterministic. (package-lock.json)
- Several related runtime dependencies and dev tooling entries were previously updated across the branch history (examples: @fjell/http-api, @fjell/logging, @fjell/eslint-config); this release aligns package.json and package-lock.json to the most recent patch versions.
- Rationale/impact: ensures installs reproduce the intended patched dependency set and avoids duplicated entries that can cause deterministic-install drift.
-
Simplify path-building utilities
- src/Utilities.ts was simplified and consolidated: duplicated branches and variable shadowing were removed, PriKey/LocKey handling was unified, matching and fallback logic for pathName selection was collapsed into a single predictable flow, and debug/log branches were minimized. The function now deterministically chooses a pathName and nextBase and extracts ids consistently for PriKey vs LocKey. (src/Utilities.ts)
- Rationale/impact: clearer implementation, fewer code paths to maintain. Public behavior for path construction is intended to be preserved; the changes reduce duplication and fix variable shadowing that could cause subtle bugs.
-
Simplify allAction/getAllActionOperation API surface
- The getAllActionOperation/allAction factory signature was simplified by removing an outer parameter block and file-level ESLint exceptions added where explicit undefined was required. Response handling was simplified to destructure the HTTP response directly into [items, affectedItems] without the prior Express-specific conversion. (src/ops/allAction.ts)
- Rationale/impact: reduces wrapper code and aligns with normalized upstream server responses. Tests were updated to match the new, simpler expectations.
-
CI / publish workflow simplification
- Deleted the separate
buildjob from .github/workflows/npm-publish.yml and removed its steps (checkout+setup-node, npm ci, lint, build, test, codecov upload). Thepublish-npmjob was simplified and no longer depends on a separatebuildjob (removedneeds: build). ( .github/workflows/npm-publish.yml ) - Rationale/impact: publishing is now decoupled from a separate build job. Consumers of the repository should note that the GitHub Actions publish workflow no longer runs the previous build/test sequence as part of the same workflow; CI checks must be ensured elsewhere if required before publishing.
- Deleted the separate
Bug Fixes and Tidying
-
package.json formatting and EOF normalization
- Multiple commits removed duplicated/blank lines in the dependencies block and normalized trailing newline behavior across edits (ensuring consistent EOFs). This includes removing duplicate/incorrect version entries and reintroducing a single authoritative version field. (package.json)
- Rationale/impact: reduces merge conflicts and avoids duplicate dependency lines that complicate diffs and package tooling.
-
package.json duplicate-version conflict resolution
- Removed duplicate/conflicting “version” entries introduced by earlier merges, then set the canonical release version in a later commit. This resolves merge/formatting conflicts and ensures a single version is present in package.json.
Refactoring
-
Utilities.addPath and overall path-building refactor
- Consolidated complex matching/fallback logic; removed many early returns, duplicate recursion, and extraneous variables. The implementation now follows a single consistent path for constructing the nextBase and chosen pathName. (src/Utilities.ts)
- Rationale/impact: reduces chance of subtle bugs (shadowing, duplicated branches) and improves maintainability while preserving original intent.
-
allAction simplification and removal of Express workaround
- Removed the special-case conversion that turned empty objects or stringified "{}" responses into [[], []]. allAction now relies on the response shape returned by the server and destructures the response directly. Tests were adjusted and new unit tests were added to assert the updated behavior. (src/ops/allAction.ts, tests/ops/allAction.test.ts)
- Impact: callers that relied on automatic conversion of
{}to an empty tuple need to ensure their server responses already match the expected tuple shape. If servers return{}in the wild, callers may need to adapt or wrap responses upstream.
Documentation Updates
- Tests and linting changes reflected in code
- Tests were updated where behavior was simplified (allAction tests) and ESLint exceptions were moved/removed in a few places to reflect stricter or targeted rules.
Testing and Linting Changes
- Tighter lint rules and removal of test-level exceptions
- A previous test-level ESLint override for
no-undefinedwas removed from eslint.config.mjs; explicit file-level/* eslint-disable no-undefined */exceptions were added where necessary (e.g., src/ops/allAction.ts) to allow intended undefined usage. Several test files had file-level disables removed to align tests with stricter linting, and specific tests were updated accordingly. (eslint.config.mjs, tests/*) - Deleted the
precommitscript from package.json that previously ran a chain of clean/lint/build/test before commits. - Rationale/impact: moves enforcement of linting toward more standard rules and reduces gating at commit time (precommit removed); CI or local workflows should handle lint enforcement as appropriate.
- A previous test-level ESLint override for
Breaking Changes / Behavioral Changes
-
Removed Express-specific empty-object workaround in allAction
- Change: allAction no longer converts server responses that are
{}or the string "{}" into [[], []]. It now expects the server to return a proper tuple/array shape and destructures the response directly. (src/ops/allAction.ts) - Impact: If any consumers or integration points relied on the old automatic conversion, they must ensure their server responses are normalized to the expected tuple/array form or add a compatibility layer. Tests were updated to reflect the new expectations.
- Change: allAction no longer converts server responses that are
-
CI/publish decoupling
- Change: the
.github/workflows/npm-publish.ymlworkflow no longer runs a separate build job before publish; publish-npm runs withoutneeds: build. - Impact: repository maintainers should verify that required build/test checks run in some CI path prior to publishing; the publish workflow no longer enforces those steps itself.
- Change: the
Developer Experience
-
Reduced precommit gating
- Deletion of the
precommitscript from package.json stops running the full clean/lint/build/test chain on precommit. This changes local commit behavior; teams that relied on precommit to catch issues must adapt (e.g., add client-side hooks or rely on CI).
- Deletion of the
-
ESLint tooling updates
- Dev tooling entries have been aligned/updated (examples in earlier commits: @eslint/eslintrc and @eslint/js additions and @fjell/eslint-config bumps). Ensure local development tooling is up-to-date to match the repository configuration.
Files & Components Affected (select highlights)
- package.json — version set to 4.4.39; dependency updates and removal of duplicate lines; precommit script removed
- package-lock.json — updated resolved URLs, integrity checks and normalization across multiple node_modules blocks
- src/Utilities.ts — major simplification and consolidation of path-building logic
- src/ops/allAction.ts — simplified factory signature and removed Express empty-object workaround; updated destructuring
- tests/ops/allAction.test.ts — new/updated unit tests to reflect simplified allAction behavior
- .github/workflows/npm-publish.yml — removed
buildjob; simplified publish job - eslint.config.mjs and select test files — removal/addition of ESLint rules or file-level exceptions reflecting stricter linting
Migration Notes / What to Watch For
- If your code or integration relied on allAction converting
{}responses into an empty tuple, update the server side to return the tuple/array shape or add a client-side compatibility layer. - Ensure CI or other pre-publish checks are run outside the publish workflow if the previous workflow relied on the removed
buildjob to perform linting/tests before publishing. - Update local development tooling if needed to match the bumped ESLint / tooling versions in package.json.
Summary of Key Commits (representative)
- Bumped package version to 4.4.39 and normalized package.json (release commit)
- Updated @fjell/registry to ^4.4.45 and normalized package-lock.json entries
- Simplified and consolidated path-building logic in src/Utilities.ts
- Simplified allAction response handling and factory signature; removed Express {} workaround; updated tests
- Removed precommit script and removed the build job from the npm-publish GitHub Actions workflow
If you need a short migration checklist or a diff-oriented view of specific files (Utilities.ts, allAction.ts, package.json, npm-publish.yml), indicate which files and a focused summary will be provided.