libmodulor
Version:
A TypeScript library to create platform-agnostic applications
271 lines (159 loc) • 12.9 kB
Markdown
# CHANGELOG
## v0.19.0 (2025-06-20)
**BREAKING**
- Introduce `Initializable.initSync()` : useful for contexts where async is not available (e.g. Cloudflare workers initialization) => To address, simply add the method in the concerned implementations. You can leave it empty, re-use the same logic as your existing `init()` if its core is not async, or copy it and adapt it to make it sync. If you want to forbid its usage, use `throw new NotCallableError<this>('initSync', 'init', 'async-only');`
- Introduce `ServerManager.mountSync()` : useful for contexts where async is not available (e.g. Cloudflare workers initialization) => To address, simply add the method in the concerned implementations. You can leave it empty, re-use the same logic as your existing `mount()` if its core is not async, or copy it and adapt it to make it sync. If you want to forbid its usage, use `throw new NotCallableError<this>('mountSync', 'mount', 'async-only');`
- Change `uc_data_store_ucs_dataset_name` default value from `use-cases` to `uc_executions` : if you relied on the default value and want to keep it, explicitly set `uc_data_store_ucs_dataset_name` in your settings. If you want the new name, rename your existing collection to the new name
- Make `UCDataStore` compliant with `Initializable` : rename `install` to `init`, add `initSync` and rename `initTx` to `startTx`
**Added**
- Introduce `target/edge-worker-hono-server` to be able to deploy easily on Cloudflare Workers
- Introduce `NotAvailableError` for better semantics and more meaningful error messages
- Introduce `NotImplementedError` for better semantics and more meaningful error messages
- Init `i18nManager` in `MCPServerBooter` and `NodeCoreCLIManager` : you can remove any initialization made before executing those
**Fixed**
- Update `UCOutputBuilder` total when removing
**Misc**
- Extract server targets functions for better reusability
## v0.18.1 (2025-06-11)
**Misc**
- Adjust `CreateProject` biome config
## v0.18.0 (2025-06-11)
**Misc**
- Switch to `react-jsx` (instead of `react`) : the targets relying on React now use `react/jsx-runtime` instead of the legacy `React.createElement`
- Upgrade to `biome` `2.0.0`
- Reduce usage of `useLiteralKeys`
## v0.17.0 (2025-06-02)
**BREAKING**
- Make `target/react-native-pure` and `target/react-web-pure` components stylable : by using the new `<StyleContextProvider style={...style} />` you can customize how the elements render inside `<UCPanel />`. You can even use `renderFormFieldControl` to customize the form controls rendered according to the field (e.g. name, type, etc.)
## v0.16.0 (2025-05-27)
**BREAKING**
- Make `pnpm` (in replacement of `yarn`) the default package manager in `npx libmodulor CreateProject`
## v0.15.0 (2025-05-25)
**Added**
- In `LLMManager`, allow to pass the `apiKey` directly in the request. It precedes the settings value defined at the implementation level
- In `target/react`, add optional `className` to stylable components
- In `target/web`, handle use case input field initial value
- Add `Embedded` use case examples in the docs
## v0.14.0 (2025-05-24)
- Introduce `useAction` for react targets : it's a use case agnostic way of invoking an action
## v0.13.1 (2025-05-02)
**Fixed**
- Disable TypeScript [incremental](https://www.typescriptlang.org/tsconfig/#incremental) when analyzing app sources in automated test
## v0.13.0 (2025-04-25)
**Added**
- Introduce `target/node-hono-server` allowing you to expose a server using [Hono](https://hono.dev) in addition to the existing implementations based on [express](https://expressjs.com) and [next.js](https://nextjs.org)
**Misc**
- Upgrade `examples/supertrader` to rn `react-native@0.79.x` and `expo@53.x`
## v0.12.0 (2025-04-13)
**BREAKING**
- Upgrade to inversify 7 : In addition to bumping the dependency, checkout the [migration guide](https://inversify.io/docs/guides/migrating-from-v6) and this [discussion](https://github.com/inversify/InversifyJS/discussions/1765)
- In `FSManager`, add ability to `touch` file from `ArrayBuffer` : If you have a custom implementation, handle the new generic and handle both type of content
**Added**
- Introduce `ServerRequestHandler` : Used in `NodeExpressServerManager` and all the upcoming server targets, it contains everything needed to execute a use case on a server. You can use it to implement your own server (e.g. `Fastify` and so on)
- Introduce `NextJSServerManager` and `NextJSAPIRouteHandler` : Used to execute use cases within a [Next.js route handler](https://nextjs.org/docs/app/building-your-application/routing/route-handlers)
**Fixed**
- Handle body with only one file in `target/node-express-server`
**Misc**
- Showcase empty state and usage of more daisyUI components (e.g. loaders) in `examples/supertrader`
- Replace `path` by `parentPath` in `NodeFSManager`
- Prefix internal server error in dev mode
- Write uc input file instead of cp when in memory
- Create server tmp dir at startup if not present
## v0.11.1 (2025-04-03)
**Fixed**
- Ajust `appPath` in `yarn libmodulor TestApp` command
## v0.11.0 (2025-04-03)
**BREAKING**
- Remove `ContainerPrinter` : It was using internals of inversify v6. These internals are not present anymore in v7 and the maintainers were not convinced about adding something to list the bindings of a container. In prevision of the upgrade to v7, unfortunately, we remove it to keep things simple
- Upgrade to express 5 : Unless you extended `NodeExpressServerManager` and did some special stuff, this should be transparent to you. Except bumping the version to `5.1.0`, there should be nothing to do. Otherwise, check the excellent [migration guide](https://expressjs.com/en/guide/migrating-5.html)
**Fixed**
- Return early when parent data type validation is not ok
- Adjust the `npx libmodulor CreateProject` command
**Misc**
- Analyze the web bundle of `examples/supertrader` (`(cd examples/supertrader && yarn build:analyze:web)`)
- Include data-types tables in `llms.txt`
- Update UC input field when forcing the value in `rInput` (e.g. boolean set to false or array set to empty)
## v0.10.0 (2025-03-28)
**Added**
- Introduce `UCOutputFieldValueFragment` in `target/react` and `UCOutputFieldValue` in `target/react-(native|web)-pure` to display uc values using the `fmt()` method of each data type. `TBoolean.fmt()` has been adapted to display `✔️` when `true`, instead of `true|false` which are not very user friendly in a UI
- Introduce `Year` data type
**Fixed**
- Adjust `fmt` of `THostPort` and `TTimestamp` (they shouldn't be formatted as numbers) and `tName` of `TEmbeddedObject`
**Misc**
- Update `examples/supertrader` to showcase type semantics and displaying UC output fields according to the definition
- In `target/react`, make `useUCOR` return a `Part0` always set : you can remove all the now obsolete patterns like `if (listItemsPart0)`, `listItemsPart0 &&`, `listItemsPart0?.`, `listItemsPart0!.` in your React components relying on `useUCOR`. Also expose the function signatures used by `useUC` and `useUCOR` to make them easily passable as children props
- List base and final data types directly in the documentation => https://libmodulor.c100k.eu/docs/references/data-types
## v0.9.0 (2025-03-20)
**BREAKING**
- Move `bindServer` to `libmodulor/node-express`. The following dependencies (`jose`) are now optional. You can remove them if you're using `libmodulor/node` elements in non server targets like `cli`
- Upgrade to `fast-check` [v4](https://fast-check.dev/docs/migration-guide/from-3.x-to-4.x) : Re-generate your tests with `yarn libmodulor GenerateAppsTests` to get the changes adapted to this version
**Misc**
- Make `buffer`, `fast-check` and `vitest` deps optional : basic uses of `libmodulor` do not require them (see https://libmodulor.c100k.eu/docs/examples/Basic as an example). You can remove them if you're not using the automated tests
- Add `ListOrdersUCD` and `CancelOrderUCD` to `examples/supertrader` to showcase data fetching, aggregate building, sensitive use cases, test flows, etc.
- Remove linter config from examples (linting from repo root folder)
- Use `debug` instead of `trace` in `ConsoleLogger`
## v0.8.0 (2025-03-13)
**BREAKING**
- Move `NodeExpressServerManager` to a dedicated export (`libmodulor/node` => `libmodulor/node-express`). The following dependencies (`cookie-parser`, `express`, `express-fileupload` and `helmet`) are now optional. You can remove them if you're using `libmodulor/node` elements in non server targets like `cli`
- Do not enforce `dt` and `policies` folders in app src : place everything that **is not** `*UCD` and `*ServerMain` into `lib` the way you prefer
- Check app src folder contents : it must contain only the elements allowed by the spec (Re-generate your tests with `yarn libmodulor GenerateAppsTests` to enforce the new rule)
**Misc**
- Introduce new "Basic" example showing all the primitives in action in one single `.ts` file
- Move `examples/libmodulor-tuto` to `examples/supertrader`
- Add `llms.txt` to docs at https://libmodulor.c100k.eu/llms.txt
## v0.7.0 (2025-03-07)
**Added**
- Make `npx libmodulor CreateProject` more generic : you can now customize the `initialCommit` (default is `chore: initial commit`), the `pkgManagerBin` (default is `yarn`, works with `npm`, `pnpm`, `bun`, etc.), the `scmBin` (default is `git`)
**Fixed**
- Derandomize UC input before snapshotting in tests : after the upgrade to TS 5.8, snapshotting a UC including a File as input would break as a new `state` property has appeared with a dynamic `lastModified` property
**Misc**
- Move the documentation with concepts, examples, guides and references to https://libmodulor.c100k.eu
## v0.6.1 (2025-02-28)
**Fixed**
- Create project with the latest version
## v0.6.0 (2025-02-28)
**BREAKING**
- Extract common react elements on web and rn, renaming some of the props : check the new props names and the new `validateFormField` to simplify your overrides
- Remove `helper` from the exports map : it makes no sense to expose it as it is an executable (see `npx libmodulor` below)
**Added**
- Introduce the `npx libmodulor CreateProject` command
- Introduce `select` to target `react-web-pure` : it now renders an HTML `select` when the UC input field `hasOptions()`
**Misc**
- Bump `react` to `19.0.0`
- Add a new "Style the web Target" tutorial step showing how to use `tailwindcss` and `daisyUI` to provide custom components
## v0.5.0 (2025-02-24)
**BREAKING**
- Replace `.js` by `.ts` for `ProductManifest`
**Added**
- Introduce a 3<sup>rd</sup> implementation of `LLMManager` (`OllamaLLMManager`) to run models locally
- Introduce `LLMManager` with 2 implementations (`MistralAILLMManager` and `OpenAILLMManager`)
**Misc**
- Simplify the signature of `UCDef.ext.http.transform` removing the generic `T` return
- Add JSDocs and comments for a better in-place documentation (i.e. in .d.ts files)
- Add the Tutorial code in the repo at `examples/libmodulor-tuto` and add a new "Expose a rn Target" step
## v0.4.0 (2025-01-31)
**feat(target): introduce react-native-pure**
To help with the creation of specific targets, we've added a new one : `react-native-pure`. It's as simple as `react-web-pure`, with no specific UI style. It's a good starting point to take inspiration to create your own GUI target, with your own style.
**Misc**
- Introduced Guides in docs for more advanced scenarios (e.g. Create a target) (https://github.com/c100k/libmodulor/pull/10)
- Improved the docs for a better readability (https://github.com/c100k/libmodulor/pull/10)
## v0.3.0 (2025-01-23)
**feat(uc): introduce alternate mounting point**
Added a new property `UCDef.ext.http.mountAlsoAt` to be able to define path aliases. See the comment below to understand why.
```typescript
/**
* The path on which the use case should also mounted at
*
* This is typically used when the mounting point is changed and you want to maintain a "legacy" endpoint for clients having
* a different release cycle than the server (e.g. a mobile app), who are still calling the old endpoint.
*/
mountAlsoAt?: UCHTTPMountingPoint[];
```
**feat(uc): add id to fields in UCOutputReader**
The `UCOutputReader` automatically builds a fields list based on the `UCDef.io.o` `fields` and `order`. Although being a technical value, it's sometimes useful to get the `id` as a field as well as all the other fields explicitly defined. Hence the addition of `id` to the fields list.
## v0.2.0 (2025-01-20)
It's finally here ! Very first version of the library with all the primitives discussed in the documentation.
Check it out, play with it, break it, have fun !
Note that the code is not available yet on GitHub but it will be very soon.
## v0.1.0 (2025-01-17)
First release with the documentation and a stub entrypoint.