Files inheritance
Framework provides a flexible way to overwrite some functionalities from core. You can create file with same name on same folder and framework will use this file instead on build one
Let’s go with a sample. We have a User model built directly with a framework with some user related stuff. We want to provide fully different implementation of this model
To do that we will create an user model file on project level model folder
project/
├─ node_modules/
│ ├─ @adaptivestone/
│ │ ├─ framework/
│ │ │ ├─ models/
│ │ │ │ ├─ User.js // build in model. Mark in as "User_original"
├─ src/
│ ├─ models/ // contains model files
│ │ ├─ User.js // file that will be used. Mark in as "User_project"
const User = this.app.getModel("User"); // will return "User_project" model
That also happens on all level of code. If some code inside the framework will ask for the “User” model it will get the “User_project” model.
Same approach works for: models, controllers, config
How to
Extend module with a new functional instead of completely overwrite it
That's easy. Just require original file and extend it
import OriginalUserModel from '@adaptivestone/framework/models/User.js';
class User extends OriginalUserModel {
getPublic() {
return {
userName: this.name
};
}
}
Disable functions completely
To disable something (like default controller) best way to overwrite it with empty implementation
import AbstractController from '@adaptivestone/framework/modules/AbstractController.js';
class Auth extends AbstractController {}
export default Auth;