Skip to content

Roadmap for UserFrosting 4.2

Louis Charette edited this page Oct 20, 2018 · 12 revisions

Main goals : New Migrator, NPM fix, etc.

Status: Implemented in develop branch

Related Milestone: 4.2.0

Frontend vendor asset improvements

Currently the frontend vendor asset system in UserFrosting faces several issues:

  1. Bower has been deprecated (#737)
  2. Duplicate frontend vendor libraries are downloaded (#727)
  3. Conflicts between dependencies in different Sprinkles go completely unnoticed

Fixing (1) is at face value, simple. Just add support for npm. Except that node and npm don't every have to deal with dependency conflicts, since in such a case 2 versions are downloaded. Thankfully a npm alternative called yarn addresses this via a dependency flattening mechanism triggered by "flat": true.

(2) is a little more tricky. One solution is to produce a package.json that references each sprinkle, but this results in significant garbage data being copied. The solution instead is to make a node package (merge-package-dependencies) that creates a new package.json based on the result of dependency merging.

Which leaves (3), the hardest issue to tackle. The best place to handle this is inside the package mentioned in (2). Having complete dependency tree conflict detection would be extremely difficult to achieve, and so the conflict detection should be kept to just the directly included dependencies, leaving yarn to pick up what remains. This lack will likely be addressed in the future however (merge-package-dependencies#6).

These improvements will have a consequence however. UserFrosting/assets does not handle using assets at different tree depths well. While possible to fix, breaking changes would be introduced. Changing the directory depth to fix this is one solution, but a poor one. Since the opportunity has presented itself, this project includes the following UserFrosting/Assets related issues:

  1. Locked to gulp-bundle-assets as the only bundling tool
  2. Library cannot be used in non-UserFrosting projects due to customization
  3. UserFrosting's development asset server functionality is tightly coupled with UserFrosting/Assets

In a nut shell, (4), (5), and (6) all lead in to modularity improvements.

Migrations and Testing

Eloquent Extras

Aggregate eager loaders

Status: Implemented in feature-with-aggregates branch

These include withSum, withAvg, etc. Very useful for Sprunjing aggregates on related entities (total hours, for example).