# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Added ### Changed ### Fixed - Fixed File Manager operations on directories without a `.keep` marker. A directory a file was uploaded into, or one that exists in the bucket but was not created through the app, was listed but could not be renamed, deleted or resolved (`E_DIR_NOT_FOUND`); directory existence now falls back to the prefix holding any entry instead of relying on the marker alone. - Fixed renaming or deleting a folder destroying sibling folders whose name shares its prefix (renaming `aa` overwrote and then deleted `aab`). Drive strips the trailing slash off a listing prefix, so a directory's contents are now filtered on the real `/` prefix, and the S3 service deletes the listed keys instead of passing that prefix to `deleteAll`. - Moving, copying and deleting a folder now follow the listing pagination token, so folders holding more than 1000 objects are no longer processed only in part. - Fixed `getEntry` raising a bare `Error` (HTTP 500) for a path that is neither a file nor a directory; it now raises the `E_DIR_NOT_FOUND` 404. - Fixed the web container running against the host's `node_modules`: the `web` service keeps `apps/web/node_modules` in an anonymous volume, so the bind mount no longer shadows the dependencies installed in the image. ### Removed ## [1.3.0] - 2026-08-28 ### Added - Added an `ApiException` base class whose self-handling renders module exceptions as `{ message, code }` JSON responses, so exception classes no longer need registration in the global HTTP exception handler. - Added `@crux-kit/editor-tiptap`, a free, headless rich-text editor package built on TipTap. The `light` preset covers bold, italic, underline, strikethrough, headings, lists, blockquote, text alignment, links, and undo/redo, reading and writing content as plain HTML so it themes with the shared design-system tokens. - Added the `InputTiptapEditor` composed form field. - Added `useIntlDate` and `useIntlName` hooks under `apps/admin/src/app/i18n`, each returning a formatter bound to the active UI language. Reading the language from context is what subscribes a component to a language switch; components that read the `IntlDate`/`IntlName` singletons directly ### Changed - Moved module generation fully server-side. The admin devtools now sends the raw generator config (`{ name, table, generate, form, datatable }`) instead of pre-rendered source strings, and the six frontend source builders were ported verbatim from the admin to `apps/backend/app/services/module_generator`. - Refactored `module_controller.ts` (~500 lines) into a thin HTTP controller delegating to focused `module_generator` service modules: an orchestrator, schema-derived context building, naming and DB-type helpers, a template renderer, and `builders/` + `writers/` subdirectories. - Split the root `.env` into per-workspace env files (`apps/backend/.env`, `apps/admin/.env`, `apps/web/.env`) so each app only ingests the variables it uses. Every `docker-compose.yml` service now loads its own app's env file, and the admin (Vite) and web (Next.js) apps rely on their frameworks' native env loading instead of custom root-file merging. - Renamed cross-app URL env variables: `PAGE_MANAGER_API_URL` → `BACKEND_API_URL` in the web app and `VITE_PAGE_MANAGER_WEB_URL` → `VITE_WEB_URL` in the admin app. - File Manager exceptions now extend `ApiException`. - Extracted the admin i18n context out of `I18nProvider` into `app/i18n/context.ts` and `app/i18n/useLanguage.ts`, so components reach the active language through a side-effect-free module instead of importing the provider and executing its module body. - The selected language is now persisted to local storage as its code rather than as the whole `Language` object. ### Fixed - Fixed admin menu highlighting, which marked every ancestor entry active at once. - Fixes the containing section staying collapsed when a sub-route is opened directly. - Fixed backend functional test discovery: the `tests/**/*.spec.(ts|js)` globs in `adonisrc.ts` are not valid for the native `fs.glob` used by Japa v5, so the suite silently ran zero tests. - Fixed the backend `lint` script path (`../scripts` → `../../scripts`), which made `npm run lint` fail before linting. - Removed the stale Japa v1-era `@japa/spec-reporter` wiring from `tests/bootstrap.ts`; the runner's built-in spec reporter is used instead. - Renamed `app/exceptions/file_manager_exeptions.ts` to `file_manager_exceptions.ts`, fixing the filename typo, and updated all imports. ### Removed - Removed the root `.env` file. ## [1.2.0] - 2026-07-17 ### Changed - Moved AdonisJS ESLint and Prettier configuration packages and Japa test dependencies from the root package manifest to the backend workspace so workspace-specific dependencies are owned by `apps/backend`. - Updated the Admin frontend architecture so global providers belong to the `app` composition layer under `app/providers` instead of being modeled as a separate architectural layer. ## [1.1.0] - 2026-07-17 ### Added - Added image map editor for creating and editing interactive image map areas in the File Manager. ### Changed - Migrated TypeScript from `5.8.3` to `7.0.2` - Migrated AdonisJS from `6.x` to `7.3.5` - Refactored admin module-generator source builders to compose imports and source sections through shared source-file helpers while preserving the existing generation payload. - Renamed module-generator builder classes and files from template-builder terminology to source-builder terminology. - Updated module-generator frontend documentation to reference the new source-builder names. ### Fixed - Fix prettier one line import break sorting and class order ### Removed - Removed "prettier-plugin-one-line-imports" ## [1.0.1] - 2026-06-30 ### Fixed - Resolved a circular dependency in language imports that could crash the admin app during language initialization. - Exposed the provider `languages` list through `I18nProvider` instead of importing the language config directly in `UserDropdownMenu`. - Updated language selection in `UserDropdownMenu` to use the provider-supplied `languages` collection, preventing inconsistent state during rendering.