Package metadata & dependency updates; Utilities refactor and CI/publish simplification
This release focuses on cleaning up package metadata and lockfile consistency, bumping several Fjell runtime and tooling packages, simplifying path-building logic and higher-level API code, and streamlining the CI/publish workflow. The changes include a mix of dependency bumps and lockfile normalization, targeted refactors to reduce duplicated logic and Express-specific workarounds, linting and test adjustments, and workflow edits that decouple publishing from a dedicated build job.
Summary
- Package metadata: duplicate/conflicting
versionfields were removed from package.json and version bumps across multiple commits were normalized to keep release/development cycles consistent. - Dependency and lockfile normalization: multiple @fjell/* runtime packages and some dev/tooling entries were bumped; package-lock.json entries were updated to reflect exact resolved tarballs and integrity checksums and duplicated/ inconsistent lines were removed.
- Code simplification and refactor: path-building logic in
src/Utilities.tswas consolidated to remove duplicated branches, variable shadowing, and unnecessary logging;src/ops/allAction.tswas simplified to stop special-casing Express empty-object responses and to reduce outer-factory complexity. - CI/workflow: the dedicated
buildjob was removed from the npm-publish workflow and thepublish-npmjob was simplified so it no longer depends on the removed build job. - Linting/test adjustments: test-level
no-undefinedESLint exception removed (tests updated accordingly),precommitscript removed from package.json, and tests adjusted to match new behavior. - Tooling fix: esbuild version conflicts addressed by pinning and npm overrides and switching CI to
npm ciwhere relevant.
New Features
- None in the sense of new public APIs. This release is focused on stability, consistency, and simplification rather than adding new runtime features.
Improvements
-
package.json / package metadata
- Removed duplicate/conflicting
versionfields from package.json (deleted both development and releaseversionlines in one commit) to avoid merge/format conflicts and to let the release process manage versioning. - Multiple commits normalized package.json EOF (trailing newline) and whitespace around version/dependencies entries for consistent formatting.
- Impact: reduces merge conflicts and avoids ambiguous version state in the file; versioning is intended to be driven by the release process rather than ad-hoc edits in development branches.
- Removed duplicate/conflicting
-
Dependency bumps and lockfile normalization
- Runtime dependency updates (package.json and package-lock.json): repeated, incremental patch bumps to @fjell packages across this release series, for example:
- @fjell/core: bumped through 4.4.39 -> 4.4.44 (finalized at ^4.4.44 in package.json)
- @fjell/registry: bumped through 4.4.34 -> 4.4.44 (finalized at ^4.4.44)
- @fjell/http-api and @fjell/logging were bumped across several patch releases (reflected in lockfile entries)
- package-lock.json changes include updated resolved tarball URLs and integrity checksums, and removal of duplicated or inconsistent dependency lines so node_modules blocks reflect deterministic install information.
- Impact: reproducible installs and consistency between package.json and package-lock.json; ensures CI and local installs use the intended patch releases.
- Runtime dependency updates (package.json and package-lock.json): repeated, incremental patch bumps to @fjell packages across this release series, for example:
-
Utilities and path-building
- src/Utilities.ts was refactored to simplify and consolidate path-building logic used by addPath/getPath flows:
- Removed duplicated branches and variable shadowing between PriKey/LocKey code paths
- Collapsed matching/fallback logic into a single consistent selection flow for pathName and nextBase
- Preserved original external behavior intent (e.g., when only one localPathName remains it is appended later), but implemented with a single predictable algorithm and fewer debug/log branches
- Impact: easier to read/maintain path construction code and reduced risk of subtle bugs caused by duplicated/contradictory branches; internal logging now targets the chosen pathName/nextBase only.
- src/Utilities.ts was refactored to simplify and consolidate path-building logic used by addPath/getPath flows:
-
allAction / getAllActionOperation simplification
- src/ops/allAction.ts was simplified by removing an Express-specific workaround that converted empty-object responses (
{}) into[[], []]plus warnings and by streamlining the factory signature. - Tests were updated (tests/ops/allAction.test.ts) to assert the new expectations: direct tuple/array responses or explicit edge-case behavior without implicit
{}conversions. - Impact: code now assumes upstream/server responses are normalized; fewer special-case branches and clearer handling of HTTP responses returned by the server.
- src/ops/allAction.ts was simplified by removing an Express-specific workaround that converted empty-object responses (
-
Linting/tooling
- Test-level ESLint
no-undefinedoverride removed from eslint.config.mjs and file-level disable comments removed from some test files. Tests were updated accordingly to comply with stricter lint rules. - The
precommitscript was removed from package.json so the repository no longer runs the clean/lint/build/test chain automatically on precommit. - Impact: stricter linting for tests aligns tests with normal code rules; removal of precommit hook reduces local precommit gating (intent appears to simplify developer workflow and avoid expensive local checks).
- Test-level ESLint
-
CI/workflow and publish changes
- .github/workflows/npm-publish.yml: the entire
buildjob was removed (steps that ran checkout, setup-node, npm ci, lint, build, test, codecov upload were deleted). - The
publish-npmjob no longer depends on the removedbuildjob (needs: buildremoved) and remains as a single job that runs on ubuntu-latest and starts with actions/checkout@v4. - Impact: publish workflow is decoupled from a dedicated build/test job. Consumers of the CI should be aware that publishing no longer waits for a separate build job in this workflow; CI design/requirements may need review if publishing should be gated by tests/builds elsewhere.
- .github/workflows/npm-publish.yml: the entire
-
esbuild and CI reproducibility
- esbuild version conflicts were addressed by pinning esbuild to exact version 0.25.9 and adding npm overrides to force consistent esbuild usage across packages.
- GitHub Actions updated to use
npm cifor reproducible builds in relevant places. - Impact: resolves CI/CD esbuild mismatch errors and ensures consistent binary/tooling behavior in docs/build steps.
Bug Fixes
- Fixed esbuild version mismatch in client-api docs/build by pinning esbuild (0.25.9) and adding npm overrides to avoid conflicting versions in different packages.
- Corrected duplicate/inconsistent dependency lines in package-lock.json so the lockfile reflects actual resolved tarballs and integrity checksums; this removes sources of nondeterministic installs.
Refactoring
-
src/Utilities.ts
- Major internal cleanup: eliminated duplicated/contradictory flow branches, fixed variable shadowing, and unified matching/fallback strategy. Changes are confined to Utilities path-building logic but intended to produce the same external behavior with fewer code paths.
-
src/ops/allAction.ts
- Simplified factory signature and removed special-case handling for empty-object responses. Response destructuring now relies on server-normalized shapes.
-
Misc formatting/fixes
- Numerous commits normalized EOFs and whitespace in package.json and other files for consistent formatting.
Developer Experience
-
Tests and linting
- Removed test-level
no-undefinedexceptions; tests adjusted to comply with stricter lint rules. - Removed file-level
/* eslint-disable no-undefined */comments in specific test files. - Added or adjusted unit tests for allAction to reflect the new response expectations.
- Removed test-level
-
Precommit script removal
precommitscript deleted from package.json: local precommit chain (clean/lint/build/test) will no longer run automatically. Developers should run these checks manually or via CI as needed.
Breaking Changes and Compatibility Notes
-
Response shape expectations in allAction
- allAction no longer attempts to convert an Express-style empty-object (
{}) into[[], []]. If code or tests previously relied on that implicit conversion, they must be updated to send/expect normalized array/tuple shapes from the server. - This may affect integrations that relied on the old workaround. Verify server responses used by consumers of allAction return the expected tuple/array shapes.
- allAction no longer attempts to convert an Express-style empty-object (
-
CI/publish gating
- The npm-publish workflow was simplified and no longer runs the previously present
buildjob. Publishing via this workflow is no longer gated by those build/test steps in the same workflow file. If a strict gate is required, CI configuration should be updated to reintroduce test/build dependencies or to ensure that other workflows perform the necessary checks.
- The npm-publish workflow was simplified and no longer runs the previously present
-
Linting changes
- Tests are subject to stricter lint rules (no special
no-undefinedrelaxation). Address any test code that relied on the relaxed rule.
- Tests are subject to stricter lint rules (no special
Files / Components Affected (high-level)
- package.json (metadata, dependencies, scripts) — version entries cleaned and some scripts removed (precommit)
- package-lock.json — normalized node_modules blocks, resolved URLs, integrity checks
- src/Utilities.ts — consolidated path-building logic
- src/ops/allAction.ts — simplified API surface and response handling
- tests/ops/allAction.test.ts and other test files — updated to match new behavior and stricter linting
- eslint.config.mjs — removed test-level
no-undefinedoverride - .github/workflows/npm-publish.yml — removed
buildjob and simplified publish job - esbuild pinning / npm overrides — to force consistent esbuild version across packages
Migration and Action Items
- Review any code that relied on the old allAction
{}->[[], []]conversion and update server responses or client expectations to return normalized tuple/array shapes. - If publishing must be gated by build/test, update CI workflows to reintroduce gating (either by re-adding a build job or making publish depend on another workflow that runs tests/builds).
- Run
npm cito obtain the normalized lockfile installs; verify package versions match expectations (noting the bumped @fjell/* patch versions). - If local development relied on the removed
precommitscript for automatic checks, ensure suitable local scripts or editor tooling are in place to run lint/tests before committing.
Notes
- The refactors in Utilities and allAction were explicitly implemented to remove duplicated logic and unnecessary Express-specific workarounds; external APIs were preserved in intent, but response shapes and linting expectations tightened.
- The dependency bumps and lockfile normalizations are intended to produce deterministic installs and reflect recent patch releases for runtime packages and dev tooling.
If any of these changes affect your integration or CI expectations, review the affected files listed above and run the repository's test suite locally (or in CI) to validate behavior before deploying.