Skip to content

Releases: RobinBlomberg/kysely-codegen

0.18.0

02 Mar 13:47
Compare
Choose a tag to compare

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 single IdentifierNode 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

18 Oct 06:44
Compare
Choose a tag to compare

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

16 Sep 12:22
Compare
Choose a tag to compare

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

Full Changelog: 0.16.4...0.16.7

0.16.4

02 Sep 07:13
Compare
Choose a tag to compare

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

30 Aug 06:33
Compare
Choose a tag to compare

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 PostgreSQL Numeric 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

Full Changelog: 0.15.0...0.16.0

0.15.0

18 Apr 11:17
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.14.0...0.15.0

0.14.0

17 Mar 20:35
Compare
Choose a tag to compare

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

Full Changelog: 0.13.0...0.14.0

0.13.0

07 Mar 07:25
Compare
Choose a tag to compare

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

07 Jan 19:53
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.11.0...0.12.0

0.11.0

14 Oct 14:30
Compare
Choose a tag to compare

Lots of great contributions! Thank you to everyone contributing and submitting issues and ideas.

What's Changed

New Contributors

Full Changelog: 0.10.0...0.11.0