Releases: RobinBlomberg/kysely-codegen
0.18.0
Migration to 0.18.0
The follow CLI options have been changed:
--schema
has been renamed to--default-schema
.--singular
has been renamed to--singularize
.--runtime-enums
and--runtime-enums-style
have been merged into a single CLI option--runtime-enums
.
Configuration file
All codegen options can also be configured in a .kysely-codegenrc.json
(or .js
, .ts
, .yaml
etc.) file or the kysely-codegen
property in package.json
. See Cosmiconfig for all available configuration file formats.
The default configuration:
{
"camelCase": false,
"dateParser": "timestamp",
"defaultSchemas": [], // ["public"] for PostgreSQL.
"dialect": null,
"domains": true,
"envFile": null,
"excludePattern": null,
"includePattern": null,
"logLevel": "warn",
"numericParser": "string",
"outFile": "./node_modules/kysely-codegen/dist/db.d.ts",
"overrides": {},
"partitions": false,
"print": false,
"runtimeEnums": false,
"singularize": false,
"typeOnlyImports": true,
"url": "env(DATABASE_URL)",
"verify": false
}
The configuration object adds support for more advanced options:
{
"camelCase": true,
"overrides": {
"columns": {
"users.settings": "{ theme: 'dark' }"
}
},
"singularize": {
"/^(.*?)s?$/": "$1_model",
"/(bacch)(?:us|i)$/i": "$1us"
}
}
The generated output:
export interface UserModel {
settings: { theme: 'dark' };
}
// ...
export interface DB {
bacchi: Bacchus;
users: UserModel;
}
Custom serializers and dialects
The new configuration support also adds support for supplying custom serializers.
Here is a stub example of a basic Zod serializer (.kysely-codegenrc.ts
):
import { toKyselyCamelCase } from '../../generator';
import type { Config } from '../config';
const config: Config = {
logLevel: 'debug',
outFile: null,
serializer: {
serializeFile: (metadata) => {
let output = 'import { z } from "zod";\n\n';
for (const table of metadata.tables) {
output += 'export const ';
output += toKyselyCamelCase(table.name);
output += 'Schema = z.object({\n';
for (const column of table.columns) {
output += ' ';
output += column.name;
output += ': ';
switch (column.dataType) {
case 'int4':
output += 'z.number().int()';
break;
default:
output += 'z.unknown()';
}
output += ',\n';
}
output += '});\n\n';
}
return output;
},
},
url: 'postgres://user:password@localhost:5433/database',
};
export default config;
Example output:
import { z } from "zod";
export const usersSchema = z.object({
baz_qux: z.number().int(),
});
Similarly, it's also possible to supply a custom dialect
value, allowing you to create a completely new kysely-codegen dialects or extending an existing one with extra logic.
What's Changed
- feat!: Merge "runtime-enums" and "runtime-enums-style" options
- feat!: Deprecate "schemas" option and rename it to "defaultSchemas"
- feat!: Rename "singular" option to "singularize"
- feat: Support kysely-codegen configuration files (using cosmiconfig)
- feat: Add support for custom singularization rules
- feat: Merge all
...IdentifierNode
classes into a singleIdentifierNode
class - feat: Add
skipAutogenerationFileComment
serializer option - fix: Fix
overrides
not always applying to the correct column - fix: Fix test flakiness by running all tests in sequence
- fix: Make bun sqlite codegen work again (re-introduce KyselyBunSqliteIntrospectorDialect using the sqlite database from bun:sqlite and the Kysely dialect from 'kysely-bun-sqlite') by @meck93 in #238
- fix: Fix update function example @ README. by @igalklebanov in #227
- chore: Upgrade all dependencies
- chore: Allow @libsql/kysely-libsql@^0.4.1 as a peer dependency @alsiola in #233
New Contributors
Full Changelog: 0.17.0...0.18.0
0.17.0
What's Changed
- fix: fix incorrect timestamp types (fixes #203, #209)
- feat: support named instances for Microsoft Sql Server by @gittgott in #204
- feat: add --date-parser flag to control Postgres DATE type by @brianmcd in #210 (fixes #177, #194)
- docs: list current cli args by @shane-js in #167
- docs: update README.md run instructions by @shane-js in #166
- docs: improve documentation (fixes #178)
- feat(cli): adjust flag descriptions (fixes #193)
- feat: improve error when
.env
file is missing
New Contributors
Full Changelog: 0.16.7...0.17.0
0.16.7
What's Changed
- Allow PG Timestamp to accept string as selectType. by @hevar in #199 (fixes #194, #123, #177)
- Correctly pass the partition option to the Postgres inspector by @fxmouthuy in #197 (fixes #196)
- Fix postgres default schema behavior by @RobinClowers in #200
- Deduplicate repeated
ColumnType
arguments
New Contributors
- @fxmouthuy made their first contribution in #197
- @hevar made their first contribution in #199
Full Changelog: 0.16.4...0.16.7
0.16.4
What's Changed
- feat: accept multiple --schema flags @RobinClowers in #192
- fix: export all internal modules
- fix(generator): fix syntax error in old PostgreSQL versions
- fix(cli): rename misnamed CLI option
- refactor: install knip and remove all unused files/variables
Full Changelog: 0.16.0...0.16.4
0.16.0
Good morning! This is a big one.
What's Changed
- Properly utilize SSL parameter for MSSQL dialect connection by @mjbergman92 in #158
- Make it possible to insert strings into
Interval
columns by @qchar in #159 - Add
--singular
CLI option by @acro5piano in #162 (fixes #32) - Add new Bun SQLite Dialect by @tlonny in #174 (fixes #153)
- Bump Tedious to v18 by @bakasmarius in #172
- Column overrides by @gittgott in #148 (fixes #30)
- Change type definition for
JsonObject
to make ESLint happy (fixes #181) - Add
--numeric-parser
option for specifying PostgreSQLNumeric
return type (fixes #161 and #109) - Make table names starting with numbers generate valid JavaScript identifiers (fixes #151)
- Make runtime enums generate correct enum keys and add
--runtime-enums-style
CLI option (fixes #150) - Add top-of-file marker comment when generating code (fixes #114)
- Exclude table partitions (fixes #76)
- Support overriding JSON column types (fixes #75)
Refactors and chores
- Bump all dependencies
- Refactor code to make CLI, generator and introspector into separate modules
- Use Vitest test runner
New Contributors
- @bakasmarius made their first contribution in #172
- @mjbergman92 made their first contribution in #158
- @qchar made their first contribution in #159
- @acro5piano made their first contribution in #162
- @tlonny made their first contribution in #174
Full Changelog: 0.15.0...0.16.0
0.15.0
What's Changed
- fix: domain flag is respected by @RobinClowers in #141
- fix flags in readme by @jrhizor in #142
- Fixing bit IdentifierNode to be boolean instead of Buffer by @gittgott in #145
New Contributors
Full Changelog: 0.14.0...0.15.0
0.14.0
What's Changed
- Add a skip-domains flag for postgres by @RobinClowers in #136
- Update compatible tedious versions by @timclark97 in #137
- Set kysely-bun-worker as an optional peer dep by @arempe93 in #138
- typescript comments based on columns comments by @elitan in #139
- feat: runtime enum support by @lsnow99 in #131
New Contributors
- @RobinClowers made their first contribution in #136
- @arempe93 made their first contribution in #138
- @elitan made their first contribution in #139
- @lsnow99 made their first contribution in #131
Full Changelog: 0.13.0...0.14.0
0.13.0
What's Changed
- fix: add 'bun-sqlite' in VALID_DIALECTS by @mtt-artis in #129
- Add MSSQL Support by @timclark97 in #128
- Add include/exclude pattern instructions to README.md by @divmgl in #133
- Expand environment variables from .env by @iffa in #130
New Contributors
- @mtt-artis made their first contribution in #129
- @timclark97 made their first contribution in #128
- @divmgl made their first contribution in #133
- @iffa made their first contribution in #130
Full Changelog: 0.12.0...0.13.0
0.12.0
What's Changed
- Fix Postgres JSON type by @BoscoDomingo in #126
- Update cli.ts by @seivan in #108
- Added support for bun:sqlite by @KaruroChori in #120
New Contributors
- @BoscoDomingo made their first contribution in #126
- @KaruroChori made their first contribution in #120
Full Changelog: 0.11.0...0.12.0
0.11.0
Lots of great contributions! Thank you to everyone contributing and submitting issues and ideas.
What's Changed
- add license to package.json. by @igalklebanov in #74
- add PlanetScale comment @ README.md. by @igalklebanov in #71
- Add mysql2@^3.0.0 as peer dependency by @devunt in #69
- feat: adds postgres domain support by @andrew-w-ross in #68
- Handle tables with hyphens in their name by @yongtheskill in #73
- Verify option to cli by @woltsu in #85
- Deterministic code generation fix by @bombillazo in #97
- Add --env-file option by @vaaralav in #99
- Update cli.ts by @seivan in #101
- feat: support libsql/sqld by @MathieuNls in #98
New Contributors
- @igalklebanov made their first contribution in #74
- @devunt made their first contribution in #69
- @andrew-w-ross made their first contribution in #68
- @yongtheskill made their first contribution in #73
- @woltsu made their first contribution in #85
- @bombillazo made their first contribution in #97
- @vaaralav made their first contribution in #99
- @seivan made their first contribution in #101
- @MathieuNls made their first contribution in #98
Full Changelog: 0.10.0...0.11.0