@hedystia/db 2.0.3 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cache/manager.cjs +23 -0
  2. package/dist/cache/manager.cjs.map +1 -1
  3. package/dist/cache/manager.d.cts +14 -0
  4. package/dist/cache/manager.d.mts +14 -0
  5. package/dist/cache/manager.mjs +23 -0
  6. package/dist/cache/manager.mjs.map +1 -1
  7. package/dist/core/database.cjs +17 -5
  8. package/dist/core/database.cjs.map +1 -1
  9. package/dist/core/database.d.cts +4 -9
  10. package/dist/core/database.d.mts +4 -9
  11. package/dist/core/database.mjs +17 -5
  12. package/dist/core/database.mjs.map +1 -1
  13. package/dist/core/repository.cjs +32 -10
  14. package/dist/core/repository.cjs.map +1 -1
  15. package/dist/core/repository.d.cts +8 -1
  16. package/dist/core/repository.d.mts +8 -1
  17. package/dist/core/repository.mjs +32 -10
  18. package/dist/core/repository.mjs.map +1 -1
  19. package/dist/drivers/sql-compiler.cjs +6 -0
  20. package/dist/drivers/sql-compiler.cjs.map +1 -1
  21. package/dist/drivers/sql-compiler.mjs +6 -0
  22. package/dist/drivers/sql-compiler.mjs.map +1 -1
  23. package/dist/index.cjs +1 -0
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +3 -3
  26. package/dist/index.d.mts +3 -3
  27. package/dist/index.mjs +2 -2
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/schema/column.cjs +2 -2
  30. package/dist/schema/column.cjs.map +1 -1
  31. package/dist/schema/column.d.cts +2 -2
  32. package/dist/schema/column.d.mts +2 -2
  33. package/dist/schema/column.mjs +2 -2
  34. package/dist/schema/column.mjs.map +1 -1
  35. package/dist/schema/columns/index.cjs +12 -0
  36. package/dist/schema/columns/index.cjs.map +1 -1
  37. package/dist/schema/columns/index.d.cts +10 -2
  38. package/dist/schema/columns/index.d.mts +10 -2
  39. package/dist/schema/columns/index.mjs +12 -1
  40. package/dist/schema/columns/index.mjs.map +1 -1
  41. package/dist/schema/table.cjs +2 -1
  42. package/dist/schema/table.cjs.map +1 -1
  43. package/dist/schema/table.d.cts +4 -2
  44. package/dist/schema/table.d.mts +4 -2
  45. package/dist/schema/table.mjs +2 -1
  46. package/dist/schema/table.mjs.map +1 -1
  47. package/dist/types.d.cts +109 -4
  48. package/dist/types.d.mts +109 -4
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/schema/columns/index.ts"],"sourcesContent":["import { ColumnBuilder } from \"../column\";\n\n/**\n * Create an INTEGER column\n * @returns {ColumnBuilder<number>} Column builder for integer type\n */\nexport const integer = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"integer\");\n\n/**\n * Create a BIGINT column\n * @returns {ColumnBuilder<number>} Column builder for bigint type\n */\nexport const bigint = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"bigint\");\n\n/**\n * Create a VARCHAR column with specified length\n * @param {number} [length=255] - Maximum character length\n * @returns {ColumnBuilder<string>} Column builder for varchar type\n */\nexport const varchar = (length = 255): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"varchar\", length);\n\n/**\n * Create a CHAR column with specified length\n * @param {number} [length=1] - Fixed character length\n * @returns {ColumnBuilder<string>} Column builder for char type\n */\nexport const char = (length = 1): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"char\", length);\n\n/**\n * Create a TEXT column\n * @returns {ColumnBuilder<string>} Column builder for text type\n */\nexport const text = (): ColumnBuilder<string> => new ColumnBuilder<string>(\"text\");\n\n/**\n * Create a BOOLEAN column\n * @returns {ColumnBuilder<boolean>} Column builder for boolean type\n */\nexport const boolean = (): ColumnBuilder<boolean> => new ColumnBuilder<boolean>(\"boolean\");\n\n/**\n * Create a JSON column\n * @returns {ColumnBuilder<unknown>} Column builder for json type\n */\nexport const json = (): ColumnBuilder<unknown> => new ColumnBuilder<unknown>(\"json\");\n\n/**\n * Create a DATETIME column\n * @returns {ColumnBuilder<Date>} Column builder for datetime type\n */\nexport const datetime = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"datetime\");\n\n/**\n * Create a TIMESTAMP column\n * @returns {ColumnBuilder<Date>} Column builder for timestamp type\n */\nexport const timestamp = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"timestamp\");\n\n/**\n * Create a DECIMAL column with precision and scale\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n * @returns {ColumnBuilder<number>} Column builder for decimal type\n */\nexport const decimal = (precision = 10, scale = 2): ColumnBuilder<number> =>\n new ColumnBuilder<number>(\"decimal\", undefined, precision, scale);\n\n/**\n * Create a FLOAT column\n * @returns {ColumnBuilder<number>} Column builder for float type\n */\nexport const float = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"float\");\n\n/**\n * Create a BLOB column\n * @returns {ColumnBuilder<Buffer>} Column builder for blob type\n */\nexport const blob = (): ColumnBuilder<Buffer> => new ColumnBuilder<Buffer>(\"blob\");\n\n/**\n * Starter class for creating columns with a pre-set database column name\n * @example\n * // Start with name, then pick column type\n * guildId: name(\"guild_id\").varchar(255)\n */\nexport class NamedColumnStarter {\n private _alias: string;\n\n constructor(alias: string) {\n this._alias = alias;\n }\n\n /** Create an INTEGER column with this database column name */\n integer(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"integer\").name(this._alias);\n }\n\n /** Create a BIGINT column with this database column name */\n bigint(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"bigint\").name(this._alias);\n }\n\n /** Create a VARCHAR column with this database column name\n * @param {number} [length=255] - Maximum character length\n */\n varchar(length = 255): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"varchar\", length).name(this._alias);\n }\n\n /** Create a CHAR column with this database column name\n * @param {number} [length=1] - Fixed character length\n */\n char(length = 1): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"char\", length).name(this._alias);\n }\n\n /** Create a TEXT column with this database column name */\n text(): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"text\").name(this._alias);\n }\n\n /** Create a BOOLEAN column with this database column name */\n boolean(): ColumnBuilder<boolean> {\n return new ColumnBuilder<boolean>(\"boolean\").name(this._alias);\n }\n\n /** Create a JSON column with this database column name */\n json(): ColumnBuilder<unknown> {\n return new ColumnBuilder<unknown>(\"json\").name(this._alias);\n }\n\n /** Create a DATETIME column with this database column name */\n datetime(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"datetime\").name(this._alias);\n }\n\n /** Create a TIMESTAMP column with this database column name */\n timestamp(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"timestamp\").name(this._alias);\n }\n\n /** Create a DECIMAL column with this database column name\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n */\n decimal(precision = 10, scale = 2): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"decimal\", undefined, precision, scale).name(this._alias);\n }\n\n /** Create a FLOAT column with this database column name */\n float(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"float\").name(this._alias);\n }\n\n /** Create a BLOB column with this database column name */\n blob(): ColumnBuilder<Buffer> {\n return new ColumnBuilder<Buffer>(\"blob\").name(this._alias);\n }\n}\n\n/**\n * Create a column with a custom database column name, then pick the column type\n * @param {string} alias - The column name to use in the database\n * @returns {NamedColumnStarter} A starter object to pick the column type\n * @example\n * guildId: name(\"guild_id\").varchar(255).notNull()\n */\nexport const name = (alias: string): NamedColumnStarter => new NamedColumnStarter(alias);\n\n/**\n * Column type helpers object for schema definitions\n * @returns {typeof d} Column type helpers\n */\nexport const d = {\n integer,\n bigint,\n varchar,\n char,\n text,\n boolean,\n json,\n datetime,\n timestamp,\n decimal,\n float,\n blob,\n name,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAa,gBAAuC,IAAI,cAAsB,UAAU;;;;;AAMxF,MAAa,eAAsC,IAAI,cAAsB,SAAS;;;;;;AAOtF,MAAa,WAAW,SAAS,QAC/B,IAAI,cAAsB,WAAW,OAAO;;;;;;AAO9C,MAAa,QAAQ,SAAS,MAC5B,IAAI,cAAsB,QAAQ,OAAO;;;;;AAM3C,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;AAMlF,MAAa,gBAAwC,IAAI,cAAuB,UAAU;;;;;AAM1F,MAAa,aAAqC,IAAI,cAAuB,OAAO;;;;;AAMpF,MAAa,iBAAsC,IAAI,cAAoB,WAAW;;;;;AAMtF,MAAa,kBAAuC,IAAI,cAAoB,YAAY;;;;;;;AAQxF,MAAa,WAAW,YAAY,IAAI,QAAQ,MAC9C,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM;;;;;AAMnE,MAAa,cAAqC,IAAI,cAAsB,QAAQ;;;;;AAMpF,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;;;AAQlF,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAAe;AACzB,OAAK,SAAS;;;CAIhB,UAAiC;AAC/B,SAAO,IAAI,cAAsB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAI/D,SAAgC;AAC9B,SAAO,IAAI,cAAsB,SAAS,CAAC,KAAK,KAAK,OAAO;;;;;CAM9D,QAAQ,SAAS,KAA4B;AAC3C,SAAO,IAAI,cAAsB,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;CAMvE,KAAK,SAAS,GAA0B;AACtC,SAAO,IAAI,cAAsB,QAAQ,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAIpE,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI5D,UAAkC;AAChC,SAAO,IAAI,cAAuB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAIhE,OAA+B;AAC7B,SAAO,IAAI,cAAuB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI7D,WAAgC;AAC9B,SAAO,IAAI,cAAoB,WAAW,CAAC,KAAK,KAAK,OAAO;;;CAI9D,YAAiC;AAC/B,SAAO,IAAI,cAAoB,YAAY,CAAC,KAAK,KAAK,OAAO;;;;;;CAO/D,QAAQ,YAAY,IAAI,QAAQ,GAA0B;AACxD,SAAO,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM,CAAC,KAAK,KAAK,OAAO;;;CAI5F,QAA+B;AAC7B,SAAO,IAAI,cAAsB,QAAQ,CAAC,KAAK,KAAK,OAAO;;;CAI7D,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;;;;;;AAW9D,MAAa,QAAQ,UAAsC,IAAI,mBAAmB,MAAM;;;;;AAMxF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/schema/columns/index.ts"],"sourcesContent":["import { ColumnBuilder } from \"../column\";\n\n/**\n * Create an INTEGER column\n * @returns {ColumnBuilder<number>} Column builder for integer type\n */\nexport const integer = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"integer\");\n\n/**\n * Create a BIGINT column\n * @returns {ColumnBuilder<number>} Column builder for bigint type\n */\nexport const bigint = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"bigint\");\n\n/**\n * Create a VARCHAR column with specified length\n * @param {number} [length=255] - Maximum character length\n * @returns {ColumnBuilder<string>} Column builder for varchar type\n */\nexport const varchar = (length = 255): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"varchar\", length);\n\n/**\n * Create a CHAR column with specified length\n * @param {number} [length=1] - Fixed character length\n * @returns {ColumnBuilder<string>} Column builder for char type\n */\nexport const char = (length = 1): ColumnBuilder<string> =>\n new ColumnBuilder<string>(\"char\", length);\n\n/**\n * Create a TEXT column\n * @returns {ColumnBuilder<string>} Column builder for text type\n */\nexport const text = (): ColumnBuilder<string> => new ColumnBuilder<string>(\"text\");\n\n/**\n * Create a BOOLEAN column\n * @returns {ColumnBuilder<boolean>} Column builder for boolean type\n */\nexport const boolean = (): ColumnBuilder<boolean> => new ColumnBuilder<boolean>(\"boolean\");\n\n/**\n * Create a JSON column\n * @returns {ColumnBuilder<unknown>} Column builder for json type\n */\nexport const json = (): ColumnBuilder<unknown> => new ColumnBuilder<unknown>(\"json\");\n\n/**\n * Create an ARRAY column (stored as JSON)\n * @returns {ColumnBuilder<unknown[]>} Column builder for array type\n */\nexport const array = (): ColumnBuilder<unknown[]> => new ColumnBuilder<unknown[]>(\"array\");\n\n/**\n * Create a DATETIME column\n * @returns {ColumnBuilder<Date>} Column builder for datetime type\n */\nexport const datetime = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"datetime\");\n\n/**\n * Create a TIMESTAMP column\n * @returns {ColumnBuilder<Date>} Column builder for timestamp type\n */\nexport const timestamp = (): ColumnBuilder<Date> => new ColumnBuilder<Date>(\"timestamp\");\n\n/**\n * Create a DECIMAL column with precision and scale\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n * @returns {ColumnBuilder<number>} Column builder for decimal type\n */\nexport const decimal = (precision = 10, scale = 2): ColumnBuilder<number> =>\n new ColumnBuilder<number>(\"decimal\", undefined, precision, scale);\n\n/**\n * Create a FLOAT column\n * @returns {ColumnBuilder<number>} Column builder for float type\n */\nexport const float = (): ColumnBuilder<number> => new ColumnBuilder<number>(\"float\");\n\n/**\n * Create a BLOB column\n * @returns {ColumnBuilder<Buffer>} Column builder for blob type\n */\nexport const blob = (): ColumnBuilder<Buffer> => new ColumnBuilder<Buffer>(\"blob\");\n\n/**\n * Starter class for creating columns with a pre-set database column name\n * @example\n * // Start with name, then pick column type\n * guildId: name(\"guild_id\").varchar(255)\n */\nexport class NamedColumnStarter {\n private _alias: string;\n\n constructor(alias: string) {\n this._alias = alias;\n }\n\n /** Create an INTEGER column with this database column name */\n integer(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"integer\").name(this._alias);\n }\n\n /** Create a BIGINT column with this database column name */\n bigint(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"bigint\").name(this._alias);\n }\n\n /** Create a VARCHAR column with this database column name\n * @param {number} [length=255] - Maximum character length\n */\n varchar(length = 255): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"varchar\", length).name(this._alias);\n }\n\n /** Create a CHAR column with this database column name\n * @param {number} [length=1] - Fixed character length\n */\n char(length = 1): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"char\", length).name(this._alias);\n }\n\n /** Create a TEXT column with this database column name */\n text(): ColumnBuilder<string> {\n return new ColumnBuilder<string>(\"text\").name(this._alias);\n }\n\n /** Create a BOOLEAN column with this database column name */\n boolean(): ColumnBuilder<boolean> {\n return new ColumnBuilder<boolean>(\"boolean\").name(this._alias);\n }\n\n /** Create a JSON column with this database column name */\n json(): ColumnBuilder<unknown> {\n return new ColumnBuilder<unknown>(\"json\").name(this._alias);\n }\n\n /** Create an ARRAY column with this database column name */\n array(): ColumnBuilder<unknown[]> {\n return new ColumnBuilder<unknown[]>(\"array\").name(this._alias);\n }\n\n /** Create a DATETIME column with this database column name */\n datetime(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"datetime\").name(this._alias);\n }\n\n /** Create a TIMESTAMP column with this database column name */\n timestamp(): ColumnBuilder<Date> {\n return new ColumnBuilder<Date>(\"timestamp\").name(this._alias);\n }\n\n /** Create a DECIMAL column with this database column name\n * @param {number} [precision=10] - Total number of digits\n * @param {number} [scale=2] - Number of decimal digits\n */\n decimal(precision = 10, scale = 2): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"decimal\", undefined, precision, scale).name(this._alias);\n }\n\n /** Create a FLOAT column with this database column name */\n float(): ColumnBuilder<number> {\n return new ColumnBuilder<number>(\"float\").name(this._alias);\n }\n\n /** Create a BLOB column with this database column name */\n blob(): ColumnBuilder<Buffer> {\n return new ColumnBuilder<Buffer>(\"blob\").name(this._alias);\n }\n}\n\n/**\n * Create a column with a custom database column name, then pick the column type\n * @param {string} alias - The column name to use in the database\n * @returns {NamedColumnStarter} A starter object to pick the column type\n * @example\n * guildId: name(\"guild_id\").varchar(255).notNull()\n */\nexport const name = (alias: string): NamedColumnStarter => new NamedColumnStarter(alias);\n\n/**\n * Column type helpers object for schema definitions\n * @returns {typeof d} Column type helpers\n */\nexport const d = {\n integer,\n bigint,\n varchar,\n char,\n text,\n boolean,\n json,\n array,\n datetime,\n timestamp,\n decimal,\n float,\n blob,\n name,\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAa,gBAAuC,IAAI,cAAsB,UAAU;;;;;AAMxF,MAAa,eAAsC,IAAI,cAAsB,SAAS;;;;;;AAOtF,MAAa,WAAW,SAAS,QAC/B,IAAI,cAAsB,WAAW,OAAO;;;;;;AAO9C,MAAa,QAAQ,SAAS,MAC5B,IAAI,cAAsB,QAAQ,OAAO;;;;;AAM3C,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;AAMlF,MAAa,gBAAwC,IAAI,cAAuB,UAAU;;;;;AAM1F,MAAa,aAAqC,IAAI,cAAuB,OAAO;;;;;AAMpF,MAAa,cAAwC,IAAI,cAAyB,QAAQ;;;;;AAM1F,MAAa,iBAAsC,IAAI,cAAoB,WAAW;;;;;AAMtF,MAAa,kBAAuC,IAAI,cAAoB,YAAY;;;;;;;AAQxF,MAAa,WAAW,YAAY,IAAI,QAAQ,MAC9C,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM;;;;;AAMnE,MAAa,cAAqC,IAAI,cAAsB,QAAQ;;;;;AAMpF,MAAa,aAAoC,IAAI,cAAsB,OAAO;;;;;;;AAQlF,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,OAAe;AACzB,OAAK,SAAS;;;CAIhB,UAAiC;AAC/B,SAAO,IAAI,cAAsB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAI/D,SAAgC;AAC9B,SAAO,IAAI,cAAsB,SAAS,CAAC,KAAK,KAAK,OAAO;;;;;CAM9D,QAAQ,SAAS,KAA4B;AAC3C,SAAO,IAAI,cAAsB,WAAW,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;CAMvE,KAAK,SAAS,GAA0B;AACtC,SAAO,IAAI,cAAsB,QAAQ,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAIpE,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI5D,UAAkC;AAChC,SAAO,IAAI,cAAuB,UAAU,CAAC,KAAK,KAAK,OAAO;;;CAIhE,OAA+B;AAC7B,SAAO,IAAI,cAAuB,OAAO,CAAC,KAAK,KAAK,OAAO;;;CAI7D,QAAkC;AAChC,SAAO,IAAI,cAAyB,QAAQ,CAAC,KAAK,KAAK,OAAO;;;CAIhE,WAAgC;AAC9B,SAAO,IAAI,cAAoB,WAAW,CAAC,KAAK,KAAK,OAAO;;;CAI9D,YAAiC;AAC/B,SAAO,IAAI,cAAoB,YAAY,CAAC,KAAK,KAAK,OAAO;;;;;;CAO/D,QAAQ,YAAY,IAAI,QAAQ,GAA0B;AACxD,SAAO,IAAI,cAAsB,WAAW,KAAA,GAAW,WAAW,MAAM,CAAC,KAAK,KAAK,OAAO;;;CAI5F,QAA+B;AAC7B,SAAO,IAAI,cAAsB,QAAQ,CAAC,KAAK,KAAK,OAAO;;;CAI7D,OAA8B;AAC5B,SAAO,IAAI,cAAsB,OAAO,CAAC,KAAK,KAAK,OAAO;;;;;;;;;;AAW9D,MAAa,QAAQ,UAAsC,IAAI,mBAAmB,MAAM;;;;;AAMxF,MAAa,IAAI;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
@@ -5,7 +5,7 @@
5
5
  * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions
6
6
  * @returns {TableDefinition<T, C>} The table definition object with column accessors
7
7
  */
8
- function table(name, columns) {
8
+ function table(name, columns, options) {
9
9
  const columnsArray = [];
10
10
  const deferredRefs = [];
11
11
  const columnMap = {};
@@ -29,6 +29,7 @@ function table(name, columns) {
29
29
  __name: name,
30
30
  __columns: columnsArray,
31
31
  __columnMap: columnMap,
32
+ __cache: options?.cache,
32
33
  __deferredRefs: deferredRefs,
33
34
  ...columns
34
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"table.cjs","names":[],"sources":["../../src/schema/table.ts"],"sourcesContent":["import type { ColumnMetadata, DeferredRefMeta, TableDefinition } from \"../types\";\nimport type { ColumnBuilder } from \"./column\";\n\ntype BindColumn<C, TableName extends string, ColName extends string> =\n C extends ColumnBuilder<infer T, any, any, infer Ref>\n ? ColumnBuilder<\n T,\n TableName,\n ColName,\n Ref extends DeferredRefMeta<any, infer ToTable, infer ToColumn, infer RelName>\n ? DeferredRefMeta<ColName, ToTable, ToColumn, RelName>\n : never\n >\n : never;\n\ntype BoundColumns<C extends Record<string, ColumnBuilder<any, any, any, any>>, N extends string> = {\n [K in keyof C]: BindColumn<C[K], N, Extract<K, string>>;\n};\n\ntype ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, any>>> = {\n [K in keyof C]: C[K] extends ColumnBuilder<any, any, any, infer Ref> ? Ref : never;\n}[keyof C];\n\n/**\n * Define a database table with its columns\n * @param {string} name - The table name\n * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions\n * @returns {TableDefinition<T, C>} The table definition object with column accessors\n */\nexport function table<\n N extends string,\n C extends Record<string, ColumnBuilder<any, any, any, any>>,\n>(\n name: N,\n columns: C,\n): TableDefinition<\n { [K in keyof C]: C[K][\"__type\"] },\n BoundColumns<C, N>,\n N,\n ExtractDeferredRefs<BoundColumns<C, N>>\n> {\n const columnsArray: ColumnMetadata[] = [];\n const deferredRefs: TableDefinition[\"__deferredRefs\"] = [];\n const columnMap: Record<string, string> = {};\n\n for (const [key, builder] of Object.entries(columns)) {\n const meta = builder.__build(key);\n columnsArray.push(meta);\n columnMap[key] = meta.name;\n\n const ref = builder.__getDeferredRef();\n if (ref) {\n deferredRefs.push({\n columnName: key,\n resolve: ref.resolve,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n });\n }\n\n (builder as any).__tableName = name;\n (builder as any).__columnName = key;\n }\n\n const def = {\n __table: true,\n __name: name,\n __columns: columnsArray,\n __columnMap: columnMap,\n __deferredRefs: deferredRefs,\n ...columns,\n };\n\n return def as any;\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,MAId,MACA,SAMA;CACA,MAAM,eAAiC,EAAE;CACzC,MAAM,eAAkD,EAAE;CAC1D,MAAM,YAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,eAAa,KAAK,KAAK;AACvB,YAAU,OAAO,KAAK;EAEtB,MAAM,MAAM,QAAQ,kBAAkB;AACtC,MAAI,IACF,cAAa,KAAK;GAChB,YAAY;GACZ,SAAS,IAAI;GACb,UAAU,IAAI;GACd,UAAU,IAAI;GACd,cAAc,IAAI;GACnB,CAAC;AAGH,UAAgB,cAAc;AAC9B,UAAgB,eAAe;;AAYlC,QATY;EACV,SAAS;EACT,QAAQ;EACR,WAAW;EACX,aAAa;EACb,gBAAgB;EAChB,GAAG;EACJ"}
1
+ {"version":3,"file":"table.cjs","names":[],"sources":["../../src/schema/table.ts"],"sourcesContent":["import type { ColumnMetadata, DeferredRefMeta, TableCacheConfig, TableDefinition } from \"../types\";\nimport type { ColumnBuilder } from \"./column\";\n\ntype BindColumn<C, TableName extends string, ColName extends string> =\n C extends ColumnBuilder<infer T, any, any, infer Ref>\n ? ColumnBuilder<\n T,\n TableName,\n ColName,\n Ref extends DeferredRefMeta<any, infer ToTable, infer ToColumn, infer RelName>\n ? DeferredRefMeta<ColName, ToTable, ToColumn, RelName>\n : never\n >\n : never;\n\ntype BoundColumns<C extends Record<string, ColumnBuilder<any, any, any, any>>, N extends string> = {\n [K in keyof C]: BindColumn<C[K], N, Extract<K, string>>;\n};\n\ntype ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, any>>> = {\n [K in keyof C]: C[K] extends ColumnBuilder<any, any, any, infer Ref> ? Ref : never;\n}[keyof C];\n\n/**\n * Define a database table with its columns\n * @param {string} name - The table name\n * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions\n * @returns {TableDefinition<T, C>} The table definition object with column accessors\n */\nexport function table<\n N extends string,\n C extends Record<string, ColumnBuilder<any, any, any, any>>,\n>(\n name: N,\n columns: C,\n options?: { cache?: TableCacheConfig },\n): TableDefinition<\n { [K in keyof C]: C[K][\"__type\"] },\n BoundColumns<C, N>,\n N,\n ExtractDeferredRefs<BoundColumns<C, N>>\n> {\n const columnsArray: ColumnMetadata[] = [];\n const deferredRefs: TableDefinition[\"__deferredRefs\"] = [];\n const columnMap: Record<string, string> = {};\n\n for (const [key, builder] of Object.entries(columns)) {\n const meta = builder.__build(key);\n columnsArray.push(meta);\n columnMap[key] = meta.name;\n\n const ref = builder.__getDeferredRef();\n if (ref) {\n deferredRefs.push({\n columnName: key,\n resolve: ref.resolve,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n });\n }\n\n (builder as any).__tableName = name;\n (builder as any).__columnName = key;\n }\n\n const def = {\n __table: true,\n __name: name,\n __columns: columnsArray,\n __columnMap: columnMap,\n __cache: options?.cache,\n __deferredRefs: deferredRefs,\n ...columns,\n };\n\n return def as any;\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,MAId,MACA,SACA,SAMA;CACA,MAAM,eAAiC,EAAE;CACzC,MAAM,eAAkD,EAAE;CAC1D,MAAM,YAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,eAAa,KAAK,KAAK;AACvB,YAAU,OAAO,KAAK;EAEtB,MAAM,MAAM,QAAQ,kBAAkB;AACtC,MAAI,IACF,cAAa,KAAK;GAChB,YAAY;GACZ,SAAS,IAAI;GACb,UAAU,IAAI;GACd,UAAU,IAAI;GACd,cAAc,IAAI;GACnB,CAAC;AAGH,UAAgB,cAAc;AAC9B,UAAgB,eAAe;;AAalC,QAVY;EACV,SAAS;EACT,QAAQ;EACR,WAAW;EACX,aAAa;EACb,SAAS,SAAS;EAClB,gBAAgB;EAChB,GAAG;EACJ"}
@@ -1,4 +1,4 @@
1
- import { DeferredRefMeta, TableDefinition } from "../types.cjs";
1
+ import { DeferredRefMeta, TableCacheConfig, TableDefinition } from "../types.cjs";
2
2
  import { ColumnBuilder } from "./column.cjs";
3
3
 
4
4
  //#region src/schema/table.d.ts
@@ -11,7 +11,9 @@ type ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, a
11
11
  * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions
12
12
  * @returns {TableDefinition<T, C>} The table definition object with column accessors
13
13
  */
14
- declare function table<N extends string, C extends Record<string, ColumnBuilder<any, any, any, any>>>(name: N, columns: C): TableDefinition<{ [K in keyof C]: C[K]["__type"] }, BoundColumns<C, N>, N, ExtractDeferredRefs<BoundColumns<C, N>>>;
14
+ declare function table<N extends string, C extends Record<string, ColumnBuilder<any, any, any, any>>>(name: N, columns: C, options?: {
15
+ cache?: TableCacheConfig;
16
+ }): TableDefinition<{ [K in keyof C]: C[K]["__type"] }, BoundColumns<C, N>, N, ExtractDeferredRefs<BoundColumns<C, N>>>;
15
17
  //#endregion
16
18
  export { table };
17
19
  //# sourceMappingURL=table.d.cts.map
@@ -1,4 +1,4 @@
1
- import { DeferredRefMeta, TableDefinition } from "../types.mjs";
1
+ import { DeferredRefMeta, TableCacheConfig, TableDefinition } from "../types.mjs";
2
2
  import { ColumnBuilder } from "./column.mjs";
3
3
 
4
4
  //#region src/schema/table.d.ts
@@ -11,7 +11,9 @@ type ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, a
11
11
  * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions
12
12
  * @returns {TableDefinition<T, C>} The table definition object with column accessors
13
13
  */
14
- declare function table<N extends string, C extends Record<string, ColumnBuilder<any, any, any, any>>>(name: N, columns: C): TableDefinition<{ [K in keyof C]: C[K]["__type"] }, BoundColumns<C, N>, N, ExtractDeferredRefs<BoundColumns<C, N>>>;
14
+ declare function table<N extends string, C extends Record<string, ColumnBuilder<any, any, any, any>>>(name: N, columns: C, options?: {
15
+ cache?: TableCacheConfig;
16
+ }): TableDefinition<{ [K in keyof C]: C[K]["__type"] }, BoundColumns<C, N>, N, ExtractDeferredRefs<BoundColumns<C, N>>>;
15
17
  //#endregion
16
18
  export { table };
17
19
  //# sourceMappingURL=table.d.mts.map
@@ -5,7 +5,7 @@
5
5
  * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions
6
6
  * @returns {TableDefinition<T, C>} The table definition object with column accessors
7
7
  */
8
- function table(name, columns) {
8
+ function table(name, columns, options) {
9
9
  const columnsArray = [];
10
10
  const deferredRefs = [];
11
11
  const columnMap = {};
@@ -29,6 +29,7 @@ function table(name, columns) {
29
29
  __name: name,
30
30
  __columns: columnsArray,
31
31
  __columnMap: columnMap,
32
+ __cache: options?.cache,
32
33
  __deferredRefs: deferredRefs,
33
34
  ...columns
34
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"table.mjs","names":[],"sources":["../../src/schema/table.ts"],"sourcesContent":["import type { ColumnMetadata, DeferredRefMeta, TableDefinition } from \"../types\";\nimport type { ColumnBuilder } from \"./column\";\n\ntype BindColumn<C, TableName extends string, ColName extends string> =\n C extends ColumnBuilder<infer T, any, any, infer Ref>\n ? ColumnBuilder<\n T,\n TableName,\n ColName,\n Ref extends DeferredRefMeta<any, infer ToTable, infer ToColumn, infer RelName>\n ? DeferredRefMeta<ColName, ToTable, ToColumn, RelName>\n : never\n >\n : never;\n\ntype BoundColumns<C extends Record<string, ColumnBuilder<any, any, any, any>>, N extends string> = {\n [K in keyof C]: BindColumn<C[K], N, Extract<K, string>>;\n};\n\ntype ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, any>>> = {\n [K in keyof C]: C[K] extends ColumnBuilder<any, any, any, infer Ref> ? Ref : never;\n}[keyof C];\n\n/**\n * Define a database table with its columns\n * @param {string} name - The table name\n * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions\n * @returns {TableDefinition<T, C>} The table definition object with column accessors\n */\nexport function table<\n N extends string,\n C extends Record<string, ColumnBuilder<any, any, any, any>>,\n>(\n name: N,\n columns: C,\n): TableDefinition<\n { [K in keyof C]: C[K][\"__type\"] },\n BoundColumns<C, N>,\n N,\n ExtractDeferredRefs<BoundColumns<C, N>>\n> {\n const columnsArray: ColumnMetadata[] = [];\n const deferredRefs: TableDefinition[\"__deferredRefs\"] = [];\n const columnMap: Record<string, string> = {};\n\n for (const [key, builder] of Object.entries(columns)) {\n const meta = builder.__build(key);\n columnsArray.push(meta);\n columnMap[key] = meta.name;\n\n const ref = builder.__getDeferredRef();\n if (ref) {\n deferredRefs.push({\n columnName: key,\n resolve: ref.resolve,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n });\n }\n\n (builder as any).__tableName = name;\n (builder as any).__columnName = key;\n }\n\n const def = {\n __table: true,\n __name: name,\n __columns: columnsArray,\n __columnMap: columnMap,\n __deferredRefs: deferredRefs,\n ...columns,\n };\n\n return def as any;\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,MAId,MACA,SAMA;CACA,MAAM,eAAiC,EAAE;CACzC,MAAM,eAAkD,EAAE;CAC1D,MAAM,YAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,eAAa,KAAK,KAAK;AACvB,YAAU,OAAO,KAAK;EAEtB,MAAM,MAAM,QAAQ,kBAAkB;AACtC,MAAI,IACF,cAAa,KAAK;GAChB,YAAY;GACZ,SAAS,IAAI;GACb,UAAU,IAAI;GACd,UAAU,IAAI;GACd,cAAc,IAAI;GACnB,CAAC;AAGH,UAAgB,cAAc;AAC9B,UAAgB,eAAe;;AAYlC,QATY;EACV,SAAS;EACT,QAAQ;EACR,WAAW;EACX,aAAa;EACb,gBAAgB;EAChB,GAAG;EACJ"}
1
+ {"version":3,"file":"table.mjs","names":[],"sources":["../../src/schema/table.ts"],"sourcesContent":["import type { ColumnMetadata, DeferredRefMeta, TableCacheConfig, TableDefinition } from \"../types\";\nimport type { ColumnBuilder } from \"./column\";\n\ntype BindColumn<C, TableName extends string, ColName extends string> =\n C extends ColumnBuilder<infer T, any, any, infer Ref>\n ? ColumnBuilder<\n T,\n TableName,\n ColName,\n Ref extends DeferredRefMeta<any, infer ToTable, infer ToColumn, infer RelName>\n ? DeferredRefMeta<ColName, ToTable, ToColumn, RelName>\n : never\n >\n : never;\n\ntype BoundColumns<C extends Record<string, ColumnBuilder<any, any, any, any>>, N extends string> = {\n [K in keyof C]: BindColumn<C[K], N, Extract<K, string>>;\n};\n\ntype ExtractDeferredRefs<C extends Record<string, ColumnBuilder<any, any, any, any>>> = {\n [K in keyof C]: C[K] extends ColumnBuilder<any, any, any, infer Ref> ? Ref : never;\n}[keyof C];\n\n/**\n * Define a database table with its columns\n * @param {string} name - The table name\n * @param {Record<string, ColumnBuilder<any>>} columns - Column definitions\n * @returns {TableDefinition<T, C>} The table definition object with column accessors\n */\nexport function table<\n N extends string,\n C extends Record<string, ColumnBuilder<any, any, any, any>>,\n>(\n name: N,\n columns: C,\n options?: { cache?: TableCacheConfig },\n): TableDefinition<\n { [K in keyof C]: C[K][\"__type\"] },\n BoundColumns<C, N>,\n N,\n ExtractDeferredRefs<BoundColumns<C, N>>\n> {\n const columnsArray: ColumnMetadata[] = [];\n const deferredRefs: TableDefinition[\"__deferredRefs\"] = [];\n const columnMap: Record<string, string> = {};\n\n for (const [key, builder] of Object.entries(columns)) {\n const meta = builder.__build(key);\n columnsArray.push(meta);\n columnMap[key] = meta.name;\n\n const ref = builder.__getDeferredRef();\n if (ref) {\n deferredRefs.push({\n columnName: key,\n resolve: ref.resolve,\n onDelete: ref.onDelete,\n onUpdate: ref.onUpdate,\n relationName: ref.relationName,\n });\n }\n\n (builder as any).__tableName = name;\n (builder as any).__columnName = key;\n }\n\n const def = {\n __table: true,\n __name: name,\n __columns: columnsArray,\n __columnMap: columnMap,\n __cache: options?.cache,\n __deferredRefs: deferredRefs,\n ...columns,\n };\n\n return def as any;\n}\n"],"mappings":";;;;;;;AA6BA,SAAgB,MAId,MACA,SACA,SAMA;CACA,MAAM,eAAiC,EAAE;CACzC,MAAM,eAAkD,EAAE;CAC1D,MAAM,YAAoC,EAAE;AAE5C,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,QAAQ,EAAE;EACpD,MAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,eAAa,KAAK,KAAK;AACvB,YAAU,OAAO,KAAK;EAEtB,MAAM,MAAM,QAAQ,kBAAkB;AACtC,MAAI,IACF,cAAa,KAAK;GAChB,YAAY;GACZ,SAAS,IAAI;GACb,UAAU,IAAI;GACd,UAAU,IAAI;GACd,cAAc,IAAI;GACnB,CAAC;AAGH,UAAgB,cAAc;AAC9B,UAAgB,eAAe;;AAalC,QAVY;EACV,SAAS;EACT,QAAQ;EACR,WAAW;EACX,aAAa;EACb,SAAS,SAAS;EAClB,gBAAgB;EAChB,GAAG;EACJ"}
package/dist/types.d.cts CHANGED
@@ -1,5 +1,10 @@
1
1
  //#region src/types.d.ts
2
- type ColumnDataType = "integer" | "varchar" | "text" | "boolean" | "json" | "datetime" | "decimal" | "float" | "char" | "timestamp" | "bigint" | "blob";
2
+ /** Supported column data types for schema definitions */
3
+ type ColumnDataType = "integer" | "varchar" | "text" | "boolean" | "json" | "array" | "datetime" | "decimal" | "float" | "char" | "timestamp" | "bigint" | "blob";
4
+ /**
5
+ * Database type identifier — can be a simple string shorthand or an object
6
+ * specifying both the database name and the driver provider to use
7
+ */
3
8
  type DatabaseType = "mysql" | "mariadb" | "sqlite" | "file" | {
4
9
  name: "mysql";
5
10
  provider: "mysql" | "mysql2";
@@ -13,18 +18,31 @@ type DatabaseType = "mysql" | "mariadb" | "sqlite" | "file" | {
13
18
  name: "file";
14
19
  provider: string;
15
20
  };
21
+ /** Metadata describing a single database column */
16
22
  interface ColumnMetadata {
23
+ /** Column name in the database */
17
24
  name: string;
25
+ /** Data type of the column */
18
26
  type: ColumnDataType;
27
+ /** Whether this column is a primary key */
19
28
  primaryKey: boolean;
29
+ /** Whether this column auto-increments */
20
30
  autoIncrement: boolean;
31
+ /** Whether this column disallows NULL values */
21
32
  notNull: boolean;
33
+ /** Whether this column has a UNIQUE constraint */
22
34
  unique: boolean;
35
+ /** Default value for the column, or `undefined` if none */
23
36
  defaultValue: unknown;
37
+ /** Maximum character length (for varchar/char types) */
24
38
  length?: number;
39
+ /** Total number of digits (for decimal types) */
25
40
  precision?: number;
41
+ /** Number of decimal digits (for decimal types) */
26
42
  scale?: number;
43
+ /** Custom database column name alias, if different from the property key */
27
44
  columnAlias?: string;
45
+ /** Foreign key reference metadata, resolved after registration */
28
46
  references?: {
29
47
  table: string;
30
48
  column: string;
@@ -33,11 +51,16 @@ interface ColumnMetadata {
33
51
  relationName?: string;
34
52
  };
35
53
  }
54
+ /** Action to take when a referenced row is deleted or updated */
36
55
  type ReferenceAction = "CASCADE" | "SET NULL" | "RESTRICT" | "NO ACTION";
56
+ /** Metadata describing a database table and its columns */
37
57
  interface TableMetadata {
58
+ /** Table name in the database */
38
59
  name: string;
60
+ /** Array of column metadata for this table */
39
61
  columns: ColumnMetadata[];
40
62
  }
63
+ /** Deferred foreign key reference metadata, used internally for lazy resolution */
41
64
  type DeferredRefMeta<ColumnName extends string = string, TargetTable extends string = string, TargetColumn extends string = string, RelationName extends string | undefined = string | undefined> = {
42
65
  columnName: ColumnName;
43
66
  targetTable: TargetTable;
@@ -46,6 +69,10 @@ type DeferredRefMeta<ColumnName extends string = string, TargetTable extends str
46
69
  onDelete?: ReferenceAction;
47
70
  onUpdate?: ReferenceAction;
48
71
  };
72
+ /**
73
+ * Internal representation of a table schema, including column metadata,
74
+ * deferred references, and optional per-table cache configuration
75
+ */
49
76
  type TableDefinition<T extends Record<string, any> = Record<string, any>, C extends Record<string, any> = {}, N extends string = string, Refs extends DeferredRefMeta = any> = {
50
77
  __table: true;
51
78
  __name: N;
@@ -53,6 +80,7 @@ type TableDefinition<T extends Record<string, any> = Record<string, any>, C exte
53
80
  __refs: Refs;
54
81
  __columns: ColumnMetadata[];
55
82
  __columnMap: Record<string, string>;
83
+ __cache?: TableCacheConfig;
56
84
  __deferredRefs: Array<{
57
85
  columnName: string;
58
86
  resolve: () => {
@@ -64,12 +92,16 @@ type TableDefinition<T extends Record<string, any> = Record<string, any>, C exte
64
92
  relationName?: string;
65
93
  }>;
66
94
  } & C;
95
+ /** Extract the row type from a table definition */
67
96
  type InferRow<T> = T extends {
68
97
  __row: infer R;
69
98
  } ? R : never;
99
+ /** Extract the insertable type from a table definition (auto-increment keys become optional) */
70
100
  type InferInsert<T> = T extends TableDefinition<infer R, any, any> ? { [K in keyof R as K extends AutoIncrementKeys<T> ? never : K]: R[K] } & { [K in AutoIncrementKeys<T>]?: R[K] } : never;
71
101
  type AutoIncrementKeys<T> = T extends TableDefinition<infer R, any, any> ? keyof R : never;
102
+ /** Extract the updatable type from a table definition (all fields become optional) */
72
103
  type InferUpdate<T> = T extends TableDefinition<infer R, any, any> ? Partial<R> : never;
104
+ /** Condition operators for a single column in a WHERE clause */
73
105
  interface WhereCondition {
74
106
  eq?: unknown;
75
107
  neq?: unknown;
@@ -84,25 +116,38 @@ interface WhereCondition {
84
116
  isNull?: boolean;
85
117
  between?: [unknown, unknown];
86
118
  }
119
+ /** Type-safe WHERE clause supporting equality, operators, and logical combinators (OR/AND) */
87
120
  type WhereClause<T = Record<string, any>> = { [K in keyof T]?: T[K] | WhereCondition } & {
88
121
  OR?: WhereClause<T>[];
89
122
  AND?: WhereClause<T>[];
90
123
  };
124
+ /** Options for querying rows — filtering, sorting, pagination, and relation loading */
91
125
  interface QueryOptions<T = Record<string, any>, Rel extends Record<string, any> = {}> {
126
+ /** Filter conditions */
92
127
  where?: WhereClause<T>;
128
+ /** Columns to include in the result */
93
129
  select?: Extract<keyof T, string>[];
130
+ /** Sort order for results */
94
131
  orderBy?: Partial<Record<Extract<keyof T, string>, "asc" | "desc">>;
132
+ /** Maximum number of rows to return */
95
133
  take?: number;
134
+ /** Number of rows to skip (for pagination) */
96
135
  skip?: number;
136
+ /** Related tables to eagerly load */
97
137
  with?: { [K in keyof Rel]?: boolean | QueryOptions<Rel[K] extends {
98
138
  row: infer R;
99
139
  } ? R : Rel[K]> };
100
140
  }
141
+ /** Options for an UPDATE operation */
101
142
  interface UpdateOptions<T = Record<string, any>> {
143
+ /** Filter to select which rows to update */
102
144
  where: WhereClause<T>;
145
+ /** Partial data to apply to matching rows */
103
146
  data: Partial<T>;
104
147
  }
148
+ /** Options for a DELETE operation */
105
149
  interface DeleteOptions<T = Record<string, any>> {
150
+ /** Filter to select which rows to delete */
106
151
  where: WhereClause<T>;
107
152
  }
108
153
  interface MySQLConnectionConfig {
@@ -112,28 +157,81 @@ interface MySQLConnectionConfig {
112
157
  password: string;
113
158
  database: string;
114
159
  }
160
+ /** Connection configuration for SQLite databases */
115
161
  interface SQLiteConnectionConfig {
162
+ /** Path to the SQLite database file */
116
163
  filename: string;
117
164
  }
165
+ /** Connection configuration for file-based (JSON) storage */
118
166
  interface FileConnectionConfig {
167
+ /** Directory where data files are stored */
119
168
  directory: string;
120
169
  }
170
+ /** Union of all supported connection configurations */
121
171
  type ConnectionConfig = MySQLConnectionConfig | SQLiteConnectionConfig | FileConnectionConfig;
172
+ /**
173
+ * Global cache configuration for the database instance.
174
+ * Controls query result caching and entity caching behavior.
175
+ */
122
176
  interface CacheConfig {
177
+ /** Whether caching is enabled */
123
178
  enabled: boolean;
179
+ /** Base time-to-live in milliseconds (default: 60000) */
124
180
  ttl?: number;
181
+ /** Maximum TTL in milliseconds — limits adaptive TTL scaling (default: 300000) */
125
182
  maxTtl?: number;
183
+ /** Maximum number of cache entries before eviction (default: 10000) */
126
184
  maxEntries?: number;
127
185
  }
186
+ /**
187
+ * Per-table cache configuration. Set on individual table definitions to override
188
+ * or enable caching for specific tables independently of the global setting.
189
+ * Useful for frequently accessed tables like user sessions or login data.
190
+ */
191
+ interface TableCacheConfig {
192
+ /** Whether caching is enabled for this table */
193
+ enabled: boolean;
194
+ /** Base time-to-live in milliseconds for this table's cache entries */
195
+ ttl?: number;
196
+ /** Maximum TTL in milliseconds for this table's cache entries */
197
+ maxTtl?: number;
198
+ }
199
+ /**
200
+ * Top-level configuration for creating a database instance.
201
+ * Defines schemas, database type, connection, and optional features like
202
+ * schema sync, migrations, and caching.
203
+ */
128
204
  interface DatabaseConfig {
129
- schemas: readonly TableDefinition<any, any, any>[];
130
- migrations?: any[];
205
+ /**
206
+ * Table definitions — either an array of tables or a module namespace object.
207
+ * @example
208
+ * // Array form
209
+ * schemas: [users, posts]
210
+ * // Module namespace form (import * as schemas from "./schemas")
211
+ * schemas: schemas
212
+ */
213
+ schemas: readonly AnyTableDef[] | Record<string, unknown>;
214
+ /**
215
+ * Migration definitions — either an array of migrations or a module namespace object.
216
+ * @example
217
+ * // Array form
218
+ * migrations: [createUsers, addAge]
219
+ * // Module namespace form (import * as migrations from "./migrations")
220
+ * migrations: migrations
221
+ */
222
+ migrations?: MigrationDefinition[] | Record<string, unknown>;
223
+ /** Database type and optional driver provider */
131
224
  database: DatabaseType;
225
+ /** Connection configuration (or array for future multi-connection support) */
132
226
  connection: ConnectionConfig | ConnectionConfig[];
227
+ /** Whether to run pending migrations on initialization */
133
228
  runMigrations?: boolean;
229
+ /** Whether to auto-create tables and add missing columns on initialization */
134
230
  syncSchemas?: boolean;
231
+ /** Enable caching — `true` for defaults, or a {@link CacheConfig} object for fine-tuning */
135
232
  cache?: boolean | CacheConfig;
136
233
  }
234
+ /** Context object passed to migration up/down functions */
137
235
  interface MigrationContext {
138
236
  schema: {
139
237
  createTable: (table: TableDefinition) => Promise<void>;
@@ -146,11 +244,16 @@ interface MigrationContext {
146
244
  };
147
245
  sql: (query: string, params?: unknown[]) => Promise<unknown>;
148
246
  }
247
+ /** A named migration with up (apply) and down (rollback) functions */
149
248
  interface MigrationDefinition {
249
+ /** Unique migration name (used for tracking executed migrations) */
150
250
  name: string;
251
+ /** Function to apply the migration */
151
252
  up: (ctx: MigrationContext) => Promise<void>;
253
+ /** Function to rollback the migration */
152
254
  down: (ctx: MigrationContext) => Promise<void>;
153
255
  }
256
+ /** Low-level database driver interface — implemented per database backend */
154
257
  interface DatabaseDriver {
155
258
  connect(): Promise<void>;
156
259
  disconnect(): Promise<void>;
@@ -166,6 +269,7 @@ interface DatabaseDriver {
166
269
  transaction<T>(fn: () => Promise<T>): Promise<T>;
167
270
  getAllTableColumns?(): Promise<Record<string, ColumnMetadata[]>>;
168
271
  }
272
+ /** Generic repository interface providing CRUD operations for a table */
169
273
  interface Repository<T extends Record<string, any>> {
170
274
  find(options?: QueryOptions<T>): Promise<T[]>;
171
275
  findMany(options?: QueryOptions<T>): Promise<T[]>;
@@ -206,6 +310,7 @@ type ReverseRelationEntry<U extends AnyTableDef, TargetName extends string> = Ta
206
310
  } } : never : never;
207
311
  type ReverseRelationEntries<S extends readonly AnyTableDef[], T extends AnyTableDef> = ReverseRelationEntry<S[number], TableName<T>>;
208
312
  type RelationsFor<S extends readonly AnyTableDef[], T extends AnyTableDef> = Simplify<UnionToIntersection<ForwardRelationEntries<S, T> | ReverseRelationEntries<S, T>>>;
313
+ type InferSchemas<T> = T extends readonly AnyTableDef[] ? T : T extends Record<string, any> ? Array<{ [K in keyof T]: T[K] extends AnyTableDef ? T[K] : never }[keyof T]> : readonly AnyTableDef[];
209
314
  type DepthPrev = [never, 0, 1, 2, 3];
210
315
  type ExtractRelationRow<Rel> = Rel extends {
211
316
  table: infer R;
@@ -225,5 +330,5 @@ type ResolveResult<S extends readonly AnyTableDef[], T extends AnyTableDef, O> =
225
330
  with: infer W;
226
331
  } ? W : undefined>;
227
332
  //#endregion
228
- export { AnyTableDef, CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, SQLiteConnectionConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition };
333
+ export { AnyTableDef, CacheConfig, ColumnDataType, ColumnMetadata, ConnectionConfig, DatabaseConfig, DatabaseDriver, DatabaseType, DeferredRefMeta, DeleteOptions, FileConnectionConfig, InferInsert, InferRow, InferSchemas, InferUpdate, MigrationContext, MigrationDefinition, MySQLConnectionConfig, QueryOptions, ReferenceAction, RelationQueryMap, RelationsFor, Repository, ResolveResult, SQLiteConnectionConfig, TableCacheConfig, TableDefinition, TableMetadata, UpdateOptions, WhereClause, WhereCondition };
229
334
  //# sourceMappingURL=types.d.cts.map