Repository navigation
Releases: asus97178/bazis
Releases · asus97178/bazis
Release list
bazis v0.118.0
Changed
- Every configuration secret is remembered by value: logs, startup errors and
error responses remove it wherever it appears, also in plain text without a
marker such asapiKey=orBearer. Before, redaction recognised secrets
only by their shape, so a revealed secret pasted into a message reached the
log. Values shorter than 10 characters are still recognised only by shape
(masking them would hide ordinary words such aspostgres); for a
connection URL with credentials only the password is remembered, so the
message keeps naming the server.rememberSecretValue(value)in
bazis/library/redactiondoes the same for a secret from another source.
Fixed
- An owned store whose
formatVersion(or registered scope) differs from the
code names it:… is registered with format version 1, the code declares 2.Before, the registry row was refused while it was read, so the message
said onlythe registered identity does not match the code.
bazis v0.117.1
Fixed
- Tables created by
migrate()(migrateOnStart, versionedCREATE TABLE)
name their keys likeensureCreated:pk_<table>and
fk_<table>_<properties>instead of PostgreSQL's<table>_pkeyand
<table>_<column>_fkey. Before, such a table could not move to
ensureCreated: the foreign key name is checked exactly. - A
PostgresErrorin a startup failure no longer prints where PostgreSQL
raised it (file,line,routine,severity);hint,detailand the
object names stay. - An application type-checked with the DOM lib (TypeScript's default when
libis not set) no longer fails oncore/http/HttpContext/responseLifetime.ts. - Tests that timed out on a loaded machine (owned-store catalog boundary and
snapshot budget, CLI codegen and templates, full codegen scan, Codex partial
text) get room.
bazis v0.117.0
Added
- An exact decimal column for money and other exact numbers:
@Column({ type: "decimal", precision: 12, scale: 2 })creates
numeric(12, 2)(numericwithoutprecision). The value is a string
("19.90"); a bigint or a safe integer is accepted too, a float such as
0.1is refused. A value with more digits than the column keeps is refused
before the write (Price.amount: "1.005" has 3 digits after the point; numeric(12, 2) keeps 2) instead of being rounded by PostgreSQL. A key
cannot be decimal; owned stores refuse decimal columns.
Changed (breaking)
- The dynamic-model field type
decimalis an exactnumericholding a
string, notdouble precisionholding a number. An existing dynamic table
with such a column stopsensureCreatedwithcolumn type differs;
convert it once:ALTER TABLE … ALTER COLUMN … TYPE numeric USING …::numeric. - Schema checks read a PostgreSQL
numericcolumn asdecimal, no longer as
real: arealproperty over anumericcolumn is now a type difference.
bazis v0.116.0
Changed (breaking)
- Codegen refuses a route parameter whose type does not match the route
constraint:@Get(":id(int)") byId(id: string)stops with
BAZIS_HTTP_BINDING_UNRESOLVED: … route parameter "id" is constrained to (int), so it arrives as a number; declare it as number. Before, the router
passed the number7to a parameter typedstring.(int)and(number)
neednumber,(bool)needsboolean,(uuid)and(alpha)need
string; the same holds forFromRoute<…>.
Added
DbContext.detach(entity)stops tracking one entity, like
Entry(e).State = Detachedin EF Core. After a rolled-back
transactionScopethe context keeps the entity's changes so the work can be
retried;detachdrops them without touching the row. An entity saved in a
scope that is still open cannot be detached (OrmError), because that
scope's rollback would restore it.
Fixed
HEADon aGETroute answers with thecontent-lengthof theGET
response instead of0for string, JSON and byte bodies.
bazis v0.115.1
Fixed
- An owned store whose table got a column added and dropped outside bazis
(ALTER TABLE … ADD COLUMN, thenDROP COLUMN) no longer reports
ORM_OWNED_STORE_DRIFTforever. PostgreSQL keeps such a column as a
dropped attribute that holds no reachable data and cannot be removed
without rewriting the table; the catalog reader now skips dropped
attributes and only the live columns and their order are verified. A
column that is still there remains drift.
bazis v0.115.0
Added
- Partial indexes:
@Index({ where })and@Index([...], { where })index
only the rows that match the condition. With@SoftDeletea unique index
no longer keeps the value of a deleted row:
@Index<User>(["email"], { unique: true, where: (u) => u.deletedAt.isNull() }).
The condition uses the@Checkoperators;ensureCreatedcreates the
index, adds it to an existing table and compares the stored condition on
every start (index.predicatewhen it differs). A date literal in the
condition and partial indexes in owned stores are refused.
Fixed
- A
@Checkwithin([...])or with a chain of three or more conditions
(a.and(b).and(c)) stopped the second start withcatalog.unsupportedor
CHECK constraint expression differs: PostgreSQL storesINas
= ANY (ARRAY[...])and prints the chain without inner parentheses. Both
are now read back as declared.
bazis v0.114.0
Changed (breaking)
ignoreQueryFilters()turns the filters off for the entities loaded by
include(...)/thenInclude(...)too:@QueryFilterconditions and the
@SoftDeletecondition are not added to their queries. Before, only the
main query ignored them, so soft-deleted children stayed hidden and a
context filter of a child still ran. This is how EF Core treats
IgnoreQueryFilters(). A query that needs filters on the children keeps
them by not callingignoreQueryFilters(), or adds its ownwhere.
bazis v0.113.0
Changed
-
Mistakes in declarations no longer crash the import of the file that holds
them. They are reported when the application starts, as one
[bazis] configuration errorline (or on the startup screen) with exit
code 1. Before, they escaped with a source frame and a Bun banner. This
covers:@Infra(...)andinfraModule(...)manifests (instance names,phase,
a token shared by two instances);llmRouter(...)profiles (no profiles, an unknown or ambiguous
defaultProfile, a fallback that is unknown, points to itself or forms a
cycle);defineConfig(...)environment names and unknown keys in a stand
section, and an invalidconfigEnum(...);@GrpcController(...)/@GrpcMethod(...)(an invalid service
definition, a static or private method, an empty RPC name, a request model
that is not a class);ormBazisoptions (ensureCreatedwithmigrateOnStart, an owned store
withprovideror migrations) and owned stores or@Infratokens that
conflict across modules.
Code that expected
llmRouter(...)ordefineConfig(...)to throw at the
call now gets the error fromcreateContainer(...),ensureValid()or
resolve().
Added
markConfigurationError(error)andisConfigurationError(error)in
bazis/core/di: an extension that finds a declaration problem can mark its own
error so the start reports it as a configuration error.
deferModuleDeclarationError(moduleRef, error)keeps a problem found while
a module was declared and throws it when the application builds that module.
bazis v0.112.0
Changed (breaking)
secret("")in a config declaration is a configuration error at start:
secret("") is not a value: a secret cannot be empty. Write secret() for a required secret, or give a non-empty development value. Before, it looked
like an empty default but meant a required secret.
Fixed
rollbackVersioned()names an applied migration that is missing from the
passed list:Migration "…" is applied but is not in the migrations passed to rollbackVersioned(); pass the full list.Before, it saidhas no down() method. Both errors areOrmErrorinstead of a plainError.- A gRPC controller that does not map every RPC (or maps one twice) stops the
start with one[bazis] configuration errorline (GrpcSetupError, a
KernelError). Before, it was aTypeErrorwith a source frame. transactionScope({ retry })with one tracked entity says "the 1 entity …
its changes", not "the 1 entities … their changes".bazis g module(--minimal,--full) says that the module's table is not
created and how to create it:ensureCreated: trueinormBazis, or a
migration. Before, the first request answeredrelation does not exist.- Russian CLI: skipped steps read
без запуска — …/без проверки — …
instead ofне запускалось, which did not agree with step names such as
«схема».
bazis v0.111.2
Fixed
- The startup timeout names only the services still starting. Connectors start
together, and before one hanging connector was reported with every connector
of its batch:still starting: infra:db, infra:cache, infra:search, infra:probe.