Skip to content

Releases: codeborne/klite

1.7.0

12 May 07:59
Compare
Choose a tag to compare

Note: this release contains small backwards-incompatible changes that may need adjusting in some projects, see below:

  • core: TSIDGenerator can now be used with custom classes outside TSID companion
  • core/jdbc: Any.toValues()/BaseCrudRepository.persister() will now return KProperty1 keys, not Strings for added type-safety.
    • If you need to use String keys, use toValues().mapKeys { it.key.name }
    • You may get "column specified more than once" errors if you have code like entity.toValues() + ("hello" to 123), replace "hello" with Entity::hello in that case
    • It is now recommended to use toValues() for both providing values and skipping them, e.g. entity.toValues(Entity::field1 = "other value, skip = setOf(Entity::field2)) - this avoids creation of intermediate maps and is faster
    • PropValue type alias now accepts 2 type arguments, so replace usages of PropValue<T> with PropValue<T, *>
  • json: toJsonValues() introduced for the cases when you want to modify how an entity is serialized into json (e.g. remove some keys)
  • jdbc: introduce @Column annotation to override DB column names for entity fields, previous internal typealias Column renamed to ColName
  • jdbc: make it possible to override how Enum/Array is stored using JdbcConverter, default to toString() for enums
  • jdbc: db.upsert() will now work as SQL MERGE for non-Postgres databases
  • server: use<>() call will fail if called inside context {} for Extensions that need Server-level initialization
  • server: allow body in DELETE requests, as sometimes people do that #117
  • json: improved detection if inline classes should be rendered as their value type or a string
  • jackson: DeserializationFeature.FAIL_ON_TRAILING_TOKENS is now enabled by default
  • smtp: SmtpEmailSender will now log the successful email sent (to address and subject)
  • openapi:
    • skip @AttrParam from OpenAPI spec
    • allow specifying SwaggerUI config parameters in openApi() function
    • skip @ApiResponse responseCode=default

1.6.16

13 Mar 09:59
Compare
Choose a tag to compare
  • jdbc: restore exactly the same checksums of DBMigrator changesets containing comments

1.6.15

11 Mar 14:13
Compare
Choose a tag to compare
  • core: log current active ENV when it is initialized
  • jdbc: improve AlreadyExistsException message (always starts with errors.alreadyExists)
  • jdbc: better handling of comments inside quoted strings in migration scripts
  • csv: support for providing a different encoding than UTF-8 when parsing or generating
  • openapi: adding openApi() to context will now add /openapi.json, /openapi.html and /openapi routes, which will also serve Swagger-UI automatically

1.6.14

16 Feb 21:29
Compare
Choose a tag to compare
  • jdbc: add helpful details to Postgres exception "no hstore extension installed"
  • core: TSID.deterministic introduced for using in test data generation
  • json: TSGenerator updates
    • wraps records with enum keys into Partial to avoid TS wanting all the keys to be present
    • outputs provided custom types as separate types and references them
    • accepts -o and -p arguments for simpler usage
    • optionally can generate test data from Kotlin objects using -t

1.6.13

05 Feb 21:41
Compare
Choose a tag to compare
  • core: added PATCH method to TypedHttpClient
  • jdbc: can use Config ENV vars in migration scripts
  • jdbc-test: JUnitAssertionImprover removed, as Atrium 1.3+ improved error messages itself
  • server: disallow direct assignments to HttpExchange.responseType to avoid confusion, HttpExchange.send() or startResponse() must be used to bypass renderers

1.6.12

23 Jan 21:43
Compare
Choose a tag to compare
  • smtp: new module introduced for sending emails over SMTP
  • server: expose Server.listen and bound Server.address as separate properties #93
  • server: Server.use() can register extensions that implement multiple supported interfaces at the same time
  • server: useOnly() will now add parser/renderer if it wasn't yet registered, to avoid confusion
  • server: HttpExchange.rawBody can now be accessed more than once (is a lazy property now)
  • jdbc: distinct and notDistinct operators introduced for where expressions
  • jdbc: PooledDataSource: DB connections closed by server now correctly decrease connection pool size
  • json: fixed some very specific regressions in TSGenerator

1.6.10

15 Dec 22:19
Compare
Choose a tag to compare
  • server: Server(InetSocketAddress(0)) can now be used to bind to any available port.
  • server: make idle restarts quick #96
  • server: initialize HttpExchange.pathParams even no route is matched (404), for decorators #82
  • server: put list into queryParams if user specifies multiple parameters with the same name, introduce e.queryList #63
  • jdbc: between operator introduced with open and closed ranges, also in and notIn
  • jdbc: @NoTransaction can now be used on jobs
  • jdbc: fixed usage of multiple different DataSources when there is an active transaction
  • jdbc: allow calling of PooledConnection.close() multiple times #80
  • jdbc: support for automatic persisting/mapping of arrays of @JvmInline classes (e.g. TSID)
  • json: fix TSGenerator on Windows
  • json: TSGenerator will now use more type-safe string template types for java.time classes, e.g. ${number}-${number}-${number} instead of string
  • slf4j: allow providing of LOGGER_CLASS via .env file if Config.useEnvFile() is called before any logging calls #92
  • jackson: serialize enums using their toString() method by default, this fixes openapi module usage with jackson #88
  • liquibase: do not close jdbc connection if it was passed by user #81

1.6.9

06 Jul 09:21
Compare
Choose a tag to compare
  • core: logger(name) is now accessible without a class instance context
  • core: Any.logger() will now take the closest non-anonymous superclass
  • server: errors.on(StatusCode) convenience reified function added
  • server: AssetsHandler will now allow serving of SPA index.html even if requested directory in assets exists
  • jdbc: BaseCrudRepository.list() and by() now both have the suffix parameter
  • jdbc: handle Postgres "cached plan must not change result type" exception by enabling autosave=conservative by default

1.6.8

06 Apr 09:17
Compare
Choose a tag to compare
  • server: ErrorHandler now supports finding of handlers using exception super classes
  • jobs: fix deprecated schedule() method implementation

1.6.7

02 Apr 18:59
Compare
Choose a tag to compare
  • core: Converter can now force initialize type arguments' companion objects
  • core: Decimal.absoluteValue and Decimal.sign introduced, like other numeric types in Kotlin
  • core: Registry and TypedHttpClient moved from server module, so that JsonHttpClient can be used without the server
  • server: HttpExchange.path<>(), query<>(), and session<>() now allow for automatic String conversion into value types
  • server: Browser class better detects various iOS browsers that run on Apple WebKit
  • jobs: deprecated non-Duration schedule() methods
  • oauth: support for missing first or last names or locale
  • jdbc: initial support for Postgres listen/notify
  • slf4j: fix length optimization of stack traces in StackTraceOptimizingLogger