-
-
Notifications
You must be signed in to change notification settings - Fork 143
Description
Version 2
Updated on June 19, 2020.
This issue provides an overview of the next version of Foal TS. It will be released between June and August 2020.
The purpose of this release is not to add many new features, which are regularly added in minor versions, but to fix issues and hacks that require some break changes. It will also remove unused and deprecated components and make parts of the framework simpler and more intuitive.
Changes & New Features
✅ = Implemented
1. Developper experience (CLI) ✅
Migrations and shell scripts are not developper friendly when developping (#494). There are too many CLI commands and it is not intuitive to know which one to use and in which order.
In version 2, the files tsconfig.migrations.json and tsconfig.scripts.json will be removed and the CLI commands will be reduced and simplified.
More details here: #684.
Examples
Build, make and run migrations
# Version 1
npm run build:app
npm run migration:generate -- -n my_migration
npm run build:migrations
npm run migration:run
# Version 2
npm run makemigrations
npm run migrationsBuild migrations, scripts and the app
# Version 1
npm run build:app
npm run build:scripts
npm run build:migrations
# Version 2
npm run build2. Authentication with sessions ✅
Authentication with sessions is complicated and requires a lot of code. Current implementation also prevents the framework from adding new features (#525, #521, #510).
In version 2, the authentication system with sessions will be greatly simplified.
See #799.
3. Schema references in validation hooks ✅
It is not possible to use references (especially OpenAPI references) in validation hooks.
In version 2, this will be fixed.
More details here: #552.
Example
const productSchema = {
// ...
}
@ApiDefineSchema('product', productSchema)
@ValidateBody({
$ref: '#/components/schemas/product'
})4. Service initialization ✅
Services can be initialized using their boot method. For this to work, we currently need to call ServicesManager.boot() in src/index.ts.
In version 2, this feature will be enabled by default. No need to call ServicesManager.boot() anymore.
5. Accessing file metadata during uploading ✅
When uploading a file, we have only access to its content (#673).
In version 2, we will also have access to its file size, mime type and original file name.
6. Safer configuration ✅
Current Config.get function has several faults (#496).
In version 2, it will be replaced with the new Config.get2 added in v1.7.
// Version 1
const port = Config.get<number>('settings.port', 3000);
const port = Config.get<number>('settings.port');
// Version 2
const port = Config.get('settings.port', 'number', 3000);
const port = Config.getOrThrow('settings.port', 'number')7. Improve the naming of JWT settings ✅
Version 1: settings.jwt.secretOrPublicKey
Version 2: settings.jwt.secret, settings.jwt.publicKey
8. Remove support of Mongoose ✅
Mongoose brought many problems in the past while maintaining the framework. It takes time to maintain it and it is also not typed and does not seem to be used by FoalTS users: https://www.npmjs.com/package/@foal/mongoose.
FoalTS will no longer provide Mongoose tools starting from v2 (i.e. CLI code generation and the fetchUser function). Users will still be able to use it "by hand" if they wish.
9. Improve the configuration system ✅
10. Simplify the management of custom errors thrown in controllers and hooks ✅
See #638 (comment).
Cleanup ✅
- Remove the outdated and useless security headers.
- Remove the
PermissionDeniedandObjectDoesNotExistwhich are unused and do not appear in the documentation. - Remove the object
ValidationErrorand the functionvalidatewhich are unused and do not bring value to the framework. - Remove the deprecated function
createHttpResponseFileand useDisk.createHttpResponseFileinstead. Once done, remove the packagemimefrom@foal/coredependencies. - Remove the package
@foal/formidableand use the@ValidateMultipartFormDataBodyhook instead. - Remove the deprecated
legacyoption of the functionshashPasswordandverifyPassword. This option was used in very old versions of Foal when no one was using the framework. - Remove the deprecated package
@foal/ejsand the possibility to create FoalTS template engines. Only Express templates engines will be allowed (Twig, EJS, pug, etc). - Drop the support of Node 8 and run tests on Node 12 and 14. Version 8 of Node is not maintained anymore. Uninstall
pumpin@foal/core,@foal/storageand@foal/aws-s3and use thepipelinefunction from the standard library (added in Node 10). - Remove the unused command
foal g sub-app. - Check if password hashing needs an update (OWASP).
- Make
createAppreturn a promise and removecreateAndInitApp. The functioncreateAndInitAppwas introduced because we needed to return a promise.// Before const app = createApp(); const app = await createAndInitApp(); // After const app = await createApp();
- Only allow one way to pass a custom express instance to
createApp.// Before const expressInstance = express(); const app = createApp(expressInstance); // OR const app = createApp({ expressInstance }); // After const expressInstance = express(); const app = createApp({ expressInstance });
Upgrading Dependencies
- @foal/graphql
- graphql@15.0