All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Open an issue if you have any request/feedback :)
- Checked types in addition to biome check.
- Fixed package templates.
- Commented
client/src/main.tsx
to make it more pedagogical.
- Cleaned docker files.
-
Fixed double deploy execution in GitHub workflows.
-
Fixed Dockerfile after use of npm workspaces : root directory where
node_modules
belongs wasn't copied. -
Fixed a variable name in docker-compose files.
- Removed deprecated lines in husky files. Thanks to Kevin Peset for pointing the issue.
-
Fixed error messages in server when client build doesn't exist.
-
Removed mentions to out of date documentation https://wildcodeschool-js-monorepo.vercel.app/.
- Added native integration of CORS package.
- Fixed type declarations to use
import.meta.env
in client without error. Thanks to Kevin Peset for the fix.
- Renamed package from
@wildcodeschool/create-js-monorepo
(someone created the org before me) to@this-is-to-learn/create-js-monorepo
.
-
Added comment about cors types in server.
-
Added middleware example in template README.
-
Added
server/src/types/express/index.d.ts
to extend Express Request type. Thanks to Kevin Peset for pointing the issue in middleware declarations.
- Fixed Biome check when there is no files to check. Thanks to Victorien Elvinger for the answer in Biome discord.
-
Breaking change: Renamed package from
create-harmonia
to@wildcodeschool/create-js-monorepo
. -
Breaking change: Migrated from ESLint and Prettier to Biome.
-
Breaking change: Migrated client and server to TypeScript.
-
Breaking change: Refactored server from MVC to module-based architecture.
- Added
chmod
for husky files during project initialization.
-
Added
commitlint
(disabled by default). Thanks to Arthur Heurteubise for the idea. -
Added
validate-branch-name
(disabled by default). Thanks to Arthur Heurteubise for the idea.
-
Breaking change: Refactored the repository as a
create-<initializer>
package, whereinitializer
is harmonia. The template files are moved into a newtemplate
folder. -
Breaking change: Renamed
template/frontend
andtemplate/backend
folders astemplate/client
andtemplate/server
. -
Breaking change: Splitted server declaration of the routes into
router.js
subfiles in subfolders following URL paths. Thanks to Ayoub Idrissi Ouedrhiri for the idea. -
Moved
template/server/migrate.js
andtemplate/server/seed.js
into a newtemplate/server/bin
folder. Updated server scripts accordingly. -
Managed
template/client
andtemplate/server
subfolders through npm workspaces. -
Breaking change: Renamed database
Manager
classes asRepository
, and moved them fromtemplate/server/src/models
intotemplate/server/database/models
. Also movedtemplate/server/src/tables.js
intotemplate/server/database/tables.js
. -
Breaking change: Refactored
template/server/database/tables.js
for a manual, explicit instantiation of the repositories. -
Breaking change: Refactored seed system for the database. See
template/server/database/fixtures
for further details. -
Breaking change: Renamed
template/server/controllers/*Controllers.js
files astemplate/server/controllers/*Actions.js
. Thanks to Matthieu Lopez for the idea.
-
Fixed serving of React build from the server. Thanks to Samuel Faber, Anthony Gorski and Julien Richard.
-
Fixed deployment scripts, and improved deployment execution time. Thanks to Dimitri Lavaury-Collot and Julien Richard.
- Added
clean
script in rootpackage.json
. Thanks to Damien Buchet for the idea.
- Changed
--cached
option of thegit diff
command in the pre-commit hook for the more explicit alias--staged
.
-
Fixed allow list in pre-commit hook : root
package.json
file can not be changed anymore (but rootpackage-lock.json
may be regenerated). -
Fixed GitHub actions for deployment when repository is hosted on a GitHub organization account. Thanks to Jean-François Morin and Julien Richard.
-
Fixed job triggers for deployment. Thanks to Jean-François Morin and Julien Richard.
-
Refined
lint-staged
configuration to focus on code files only. Thanks to Dimitri Lavaury-Collot. -
Removed
yarn
andpnpm
package managers in favor of npm. Thanks to Dimitri Lavaury-Collot. -
Used cache to optimize job execution time. Thanks to Dimitri Lavaury-Collot.
- Fixed GitHub actions for lint.
- Fixed issue #11: installed and configured
lint-staged
.
-
Installed
supertest
in backend, and added smoke testing samples in abackend/tests/items/routes.spec.js
file. -
Added unit testing samples in a
backend/tests/items/manager.spec.js
file. -
Added a section in
backend/src/app.js
for error handling. Reminder: an error-handling middleware must have 4 parameters -
Added support for network-wide testing (ie: mobile testing) using
--host
option of Vite. Thanks to Loïc Brassart.
-
Isolated
database
client frombackend/src/models/AbstractManager.js
into a separate filebackend/database/client.js
, so it is accessible to test suite in a consistent way. -
Breaking change: Refactored deployment using Traefik. Thanks to Jean-François Morin and Anthony Gorski.
-
Fixed issue #84: provided lock files for
pnpm
andyarn
, and fixed pre-commit hook to allow changes in rootpackage.json
. Thanks to Ayoub Idrissi Ouedrhiri. -
Updated code tours in
.tours
folder.
- Installed
@faker-js/faker
in backend.
-
Installed
react-router-dom
in front, and did a non breaking change inmain.jsx
: pages can be added to the router, or everything can be developped in App setting aside the router features. -
Uninstalled
husky
in front (useless dependency). -
Moved to async/await syntax in
backend/src/controllers/itemControllers.js
, and passed error handling to next middleware. -
Breaking change: Removed item update and delete routes, and the associated CRUD methods in
ItemManager
. -
Breaking change: refactored models. Managers like
backend/src/models/ItemManager.js
should declare every CRUD methods: they do not inherit read and delete methods fromAbstractManager
anymore. Methodsfind
,findAll
andinsert
are renamed asread
,readAll
andcreate
. Moved to async/await syntax. -
Breaking change: manager registration should be done in
backend/src/tables.js
instead ofbackend/src/models/index.js
.
For example, a FooManager.js
model was previously registered in backend/src/models/index.js
like this:
const models = {};
const FooManager = require("./FooManager");
models.foo = new FooManager();
models.foo.setDatabase(pool);
Now it should be registered in backend/src/tables.js
like this:
const FooManager = require("./models/FooManager");
const managers = [
// ...
// Add other managers here
FooManager,
];
Usage in controllers changes from this:
const models = require("../models");
// ...
models.foo.callSomeCrudMethod();
To this:
const tables = require("../tables");
// ...
tables.foo.callSomeCrudMethod();
-
Breaking change: split ̀
database.sql
logic into table creation in a filebackend/database/schema.sql
and table filling in a filebackend/seed.js
. Updatedbackend/migrate.js
accordingly. -
Breaking change: renamed
migrate
script asdb:migrate
, and added adb:seed
script. -
Breaking change: removed fallback values for
.env
variables. They have to be defined. -
Breaking change: removed magic configuration, and added pedagogical comments to help rewrite it.
- Fixed deploy workflow. Thanks to Pierre Paillard.
-
Removed useless eslint disable comment in
backend/index.js
. Thanks to Benoît Vandanjon. -
Fixed pre-commit hook to reject modifications in the root directory.
- Git commands for Windows users, to fix issues with different newline formats (see README.md).
-
Changed default ports configuration to 3000 for frontend and 6000 for backend. Thanks to Loris Chastanet.
-
Breaking change: removed cutomized alias for imports in frontend.
- Moved
vite
and
@vitejs/plugin-react
as regular dependencies in frontend, and fixed imports in config. Thanks to Pierre Paillard.
Open an issue if you have any request/feedback :)
- Removed useless code in
package.json
files.
- Deployment workflows using CapRover. Thanks to Anthony Gorski.
- Compatibility with
npm
alternatives (yarn
,pnpm
...). Setconfig.cli
in rootpackage.json
with the wanted value.
-
Allowed usage
console.info
in ESLint configuration (front and back). -
Bumped dependencies versions. Thanks to Valentin Dupin.
-
Cleaned backend/src/app.js and removed public index.html file to avoid conflicts when serving react build.
-
Breaking change: removed setup script:
npm install
(or any other alternative) triggers apostinstall
script. -
Breaking change: removed models "autoloading": now managers should be instantiated manually in
backend/src/models/index.js
.
For example, given you created a FooManager.js
file to be associated with a foo
table,
you should add to index, after const models = {}
statement:
const FooManager = require("./FooManager");
models.foo = new FooManager();
models.foo.setDatabase(pool);
- Breaking change: renamed
connection
property of managers asdatabase
to be consistent with quests.
Managers methods should be fixed from:
findAll() {
return this.connection.query(`select * from ${this.table}`);
}
To:
findAll() {
return this.database.query(`select * from ${this.table}`);
}