drizzle-orm 0.12.0-beta.0 → 0.12.0-beta.10

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.
package/alias.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { AnyColumn } from './column';
2
+ import { Table } from './table';
3
+ export declare class ColumnAliasProxyHandler<TColumn extends AnyColumn> implements ProxyHandler<TColumn> {
4
+ private table;
5
+ constructor(table: Table);
6
+ get(columnObj: TColumn, prop: string | symbol, receiver: any): any;
7
+ }
8
+ export declare class TableAliasProxyHandler implements ProxyHandler<Table> {
9
+ private alias;
10
+ constructor(alias: string);
11
+ get(tableObj: Table, prop: string | symbol, receiver: any): any;
12
+ }
package/alias.js ADDED
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableAliasProxyHandler = exports.ColumnAliasProxyHandler = void 0;
4
+ const column_1 = require("./column");
5
+ const table_1 = require("./table");
6
+ class ColumnAliasProxyHandler {
7
+ constructor(table) {
8
+ this.table = table;
9
+ }
10
+ get(columnObj, prop, receiver) {
11
+ if (prop === 'table') {
12
+ return this.table;
13
+ }
14
+ return columnObj[prop];
15
+ }
16
+ }
17
+ exports.ColumnAliasProxyHandler = ColumnAliasProxyHandler;
18
+ class TableAliasProxyHandler {
19
+ constructor(alias) {
20
+ this.alias = alias;
21
+ }
22
+ get(tableObj, prop, receiver) {
23
+ if (prop === table_1.Table.Symbol.Name) {
24
+ return this.alias;
25
+ }
26
+ if (prop === table_1.Table.Symbol.Columns) {
27
+ const columns = tableObj[table_1.Table.Symbol.Columns];
28
+ if (!columns) {
29
+ return columns;
30
+ }
31
+ const proxiedColumns = {};
32
+ Object.keys(columns).map((key) => {
33
+ proxiedColumns[key] = new Proxy(columns[key], new ColumnAliasProxyHandler(new Proxy(tableObj, this)));
34
+ });
35
+ return proxiedColumns;
36
+ }
37
+ const value = tableObj[prop];
38
+ if (value instanceof column_1.Column) {
39
+ return new Proxy(value, new ColumnAliasProxyHandler(new Proxy(tableObj, this)));
40
+ }
41
+ return value;
42
+ }
43
+ }
44
+ exports.TableAliasProxyHandler = TableAliasProxyHandler;
45
+ //# sourceMappingURL=alias.js.map
package/alias.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../src/alias.ts"],"names":[],"mappings":";;;AAAA,qCAA6C;AAC7C,mCAAgC;AAEhC,MAAa,uBAAuB;IACnC,YAA2B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAEpC,GAAG,CAAC,SAAkB,EAAE,IAAqB,EAAE,QAAa;QAClE,IAAI,IAAI,KAAK,OAAO,EAAE;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC;SAClB;QACD,OAAO,SAAS,CAAC,IAAqB,CAAC,CAAC;IACzC,CAAC;CACD;AATD,0DASC;AAED,MAAa,sBAAsB;IAClC,YAA2B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAErC,GAAG,CAAC,QAAe,EAAE,IAAqB,EAAE,QAAa;QAC/D,IAAI,IAAI,KAAK,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;SAClB;QACD,IAAI,IAAI,KAAK,aAAK,CAAC,MAAM,CAAC,OAAO,EAAE;YAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,OAAO,EAAE;gBACb,OAAO,OAAO,CAAC;aACf;YAED,MAAM,cAAc,GAA2B,EAAE,CAAC;YAElD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAC9B,OAAO,CAAC,GAAG,CAAE,EACb,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CACtD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,cAAc,CAAC;SACtB;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAmB,CAAC,CAAC;QAC5C,IAAI,KAAK,YAAY,eAAM,EAAE;YAC5B,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,uBAAuB,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SAChF;QAED,OAAO,KAAK,CAAC;IACd,CAAC;CACD;AAhCD,wDAgCC"}
@@ -1,14 +1,34 @@
1
- import { ColumnData, ColumnDriverParam, ColumnHasDefault, ColumnNotNull, Unwrap } from './branded-types';
2
- import { AnySQL } from './sql';
3
- export declare abstract class ColumnBuilder<TData extends ColumnData, TDriverParam extends ColumnDriverParam, TNotNull extends ColumnNotNull<boolean>, THasDefault extends ColumnHasDefault<boolean>> {
4
- protected typeKeeper: {
5
- brand: 'ColumnBuilder';
6
- dataType: TData;
7
- notNull: TNotNull;
8
- default: THasDefault;
1
+ import { SQL } from './sql';
2
+ import { Update } from './utils';
3
+ export interface ColumnBuilderBaseConfig {
4
+ data: unknown;
5
+ driverParam: unknown;
6
+ notNull: boolean;
7
+ hasDefault: boolean;
8
+ }
9
+ export declare type ColumnBuilderConfig<TPartial extends Partial<ColumnBuilderBaseConfig> = {}> = Update<ColumnBuilderBaseConfig & {
10
+ notNull: false;
11
+ hasDefault: false;
12
+ }, TPartial>;
13
+ export declare abstract class ColumnBuilder<T extends Partial<ColumnBuilderBaseConfig>> {
14
+ protected $brand: {
15
+ type: 'ColumnBuilder';
16
+ subtype: string;
9
17
  };
18
+ protected $config: T;
19
+ protected $data: T['data'];
20
+ protected $driverParam: T['driverParam'];
21
+ protected $notNull: T['notNull'];
22
+ protected $hasDefault: T['hasDefault'];
10
23
  constructor(name: string);
11
- notNull(): ColumnBuilder<TData, TDriverParam, ColumnNotNull<true>, THasDefault>;
12
- default(value: Unwrap<TData> | AnySQL): ColumnBuilder<TData, TDriverParam, TNotNull, ColumnHasDefault<true>>;
13
- primaryKey(): ColumnBuilder<TData, TDriverParam, ColumnNotNull<true>, THasDefault>;
24
+ notNull(): ColumnBuilder<UpdateCBConfig<T, {
25
+ notNull: true;
26
+ }>>;
27
+ default(value: T['data'] | SQL): ColumnBuilder<UpdateCBConfig<T, {
28
+ hasDefault: true;
29
+ }>>;
30
+ primaryKey(): ColumnBuilder<UpdateCBConfig<T, {
31
+ notNull: true;
32
+ }>>;
14
33
  }
34
+ export declare type UpdateCBConfig<T extends Partial<ColumnBuilderBaseConfig>, TUpdate extends Partial<ColumnBuilderBaseConfig>> = Update<T, TUpdate>;
package/column-builder.js CHANGED
@@ -1,22 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ColumnBuilder = void 0;
4
+ // To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.
4
5
  class ColumnBuilder {
5
6
  constructor(name) {
6
- /** @internal */ this._notNull = false;
7
- /** @internal */ this._primaryKey = false;
8
- this.name = name;
7
+ this.config = {
8
+ name,
9
+ notNull: false,
10
+ default: undefined,
11
+ primaryKey: false,
12
+ };
9
13
  }
10
14
  notNull() {
11
- this._notNull = true;
15
+ this.config.notNull = true;
12
16
  return this;
13
17
  }
14
18
  default(value) {
15
- this._default = value;
19
+ this.config.default = value;
16
20
  return this;
17
21
  }
18
22
  primaryKey() {
19
- this._primaryKey = true;
23
+ this.config.primaryKey = true;
20
24
  return this;
21
25
  }
22
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"column-builder.js","sourceRoot":"","sources":["../src/column-builder.ts"],"names":[],"mappings":";;;AAKA,MAAsB,aAAa;IAmBlC,YAAY,IAAY;QANxB,gBAAgB,CAAC,aAAQ,GAAG,KAAiB,CAAC;QAG9C,gBAAgB,CAAC,gBAAW,GAAG,KAAK,CAAC;QAIpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED,OAAO;QACN,IAAI,CAAC,QAAQ,GAAG,IAAgB,CAAC;QACjC,OAAO,IAAW,CAAC;IACpB,CAAC;IAED,OAAO,CACN,KAA6B;QAE7B,IAAI,CAAC,QAAQ,GAAG,KAAc,CAAC;QAC/B,OAAO,IAAW,CAAC;IACpB,CAAC;IAED,UAAU;QACT,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,IAAW,CAAC;IACpB,CAAC;CAMD;AA5CD,sCA4CC"}
1
+ {"version":3,"file":"column-builder.js","sourceRoot":"","sources":["../src/column-builder.ts"],"names":[],"mappings":";;;AAkBA,+GAA+G;AAC/G,MAAsB,aAAa;IAmBlC,YAAY,IAAY;QACvB,IAAI,CAAC,MAAM,GAAG;YACb,IAAI;YACJ,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,SAAS;YAClB,UAAU,EAAE,KAAK;SACjB,CAAC;IACH,CAAC;IAED,OAAO;QACN,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAmC,CAAC;IAC5C,CAAC;IAED,OAAO,CACN,KAAsB;QAEtB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAmC,CAAC;IAC5C,CAAC;IAED,UAAU;QACT,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAC9B,OAAO,IAAsC,CAAC;IAC/C,CAAC;CACD;AA5CD,sCA4CC"}
package/column.d.ts CHANGED
@@ -1,37 +1,43 @@
1
- import { ColumnData, ColumnDriverParam, ColumnHasDefault, ColumnNotNull, TableName, Unwrap } from './branded-types';
2
- import { ColumnBuilder } from './column-builder';
3
- import { BoundParamValue, ParamValueMapper } from './sql';
4
- import { AnyTable } from './table';
5
- export declare abstract class Column<TTableName extends TableName<string>, TData extends ColumnData, TDriverParam extends ColumnDriverParam, TNotNull extends ColumnNotNull<boolean>, THasDefault extends ColumnHasDefault<boolean>> implements ParamValueMapper<any, any> {
6
- readonly table: AnyTable<TTableName>;
7
- protected typeKeeper: {
8
- brand: 'Column';
9
- tableName: TTableName;
10
- type: TData;
11
- driverType: TDriverParam;
12
- notNull: TNotNull;
13
- default: THasDefault;
14
- };
1
+ import { ColumnBuilder, ColumnBuilderBaseConfig, ColumnBuilderConfig } from './column-builder';
2
+ import { DriverValueMapper, SQL } from './sql';
3
+ import { Table } from './table';
4
+ import { Update } from './utils';
5
+ export interface ColumnBaseConfig extends ColumnBuilderBaseConfig {
6
+ tableName: string;
7
+ }
8
+ export declare type ColumnConfig<TPartial extends Partial<ColumnBaseConfig> = {}> = Update<ColumnBuilderConfig & {
9
+ tableName: string;
10
+ }, TPartial>;
11
+ export declare abstract class Column<T extends Partial<ColumnBaseConfig>> implements DriverValueMapper<T['data'], T['driverParam']> {
12
+ readonly table: Table<T['tableName']>;
13
+ protected $brand: 'Column';
14
+ protected $config: T;
15
+ protected $data: T['data'];
16
+ protected $driverParam: T['driverParam'];
17
+ protected $notNull: T['notNull'];
18
+ protected $hasDefault: T['hasDefault'];
15
19
  readonly name: string;
16
20
  readonly primary: boolean;
17
- readonly notNull: TNotNull;
18
- readonly default: TData | undefined;
19
- constructor(table: AnyTable<TTableName>, builder: ColumnBuilder<TData, TDriverParam, TNotNull, THasDefault>);
20
- mapFromDriverValue: (value: any) => any;
21
- mapToDriverValue: (value: any) => any;
21
+ readonly notNull: boolean;
22
+ readonly default: T['data'] | SQL | undefined;
23
+ constructor(table: Table<T['tableName']>, builder: ColumnBuilder<Omit<T, 'tableName'>>);
22
24
  abstract getSQLType(): string;
25
+ mapFromDriverValue(value: T['driverParam']): T['data'];
26
+ mapToDriverValue(value: T['data']): T['driverParam'];
23
27
  }
24
- export declare abstract class ColumnWithMapper<TTableName extends TableName<string>, TData extends ColumnData, TDriverParam extends ColumnDriverParam, TNotNull extends ColumnNotNull<boolean>, THasDefault extends ColumnHasDefault<boolean>> extends Column<TTableName, TData, TDriverParam, TNotNull, THasDefault> implements ParamValueMapper<TData, TDriverParam> {
25
- mapFromDriverValue: (value: Unwrap<TDriverParam>) => Unwrap<TData>;
26
- mapToDriverValue: (value: Unwrap<TData>) => Unwrap<TDriverParam>;
27
- }
28
- export declare type AnyColumn<TTableName extends TableName = TableName, TData extends ColumnData = any, TDriverParam extends ColumnDriverParam = any, TNotNull extends ColumnNotNull = ColumnNotNull, THasDefault extends ColumnHasDefault = ColumnHasDefault> = Column<TTableName, TData, TDriverParam, TNotNull, THasDefault>;
29
- export declare type AnyColumnWithMapper<TTableName extends TableName = TableName, TData extends ColumnData = any, TDriverParam extends ColumnDriverParam = any, TNotNull extends ColumnNotNull = ColumnNotNull, THasDefault extends ColumnHasDefault = ColumnHasDefault> = ColumnWithMapper<TTableName, TData, TDriverParam, TNotNull, THasDefault>;
30
- export declare function param<TDataType extends ColumnData, TDriverType extends ColumnDriverParam>(column: AnyColumn<any, TDataType, TDriverType>, value: Unwrap<TDataType>): BoundParamValue<TDataType, TDriverType>;
31
- export declare type GetColumnData<TColumn, TInferMode extends 'query' | 'raw' = 'query'> = TColumn extends Column<any, infer TData, any, infer TNotNull, any> ? TInferMode extends 'raw' ? Unwrap<TData> : TNotNull extends true ? Unwrap<TData> : Unwrap<TData> | null : never;
32
- export declare type InferColumnDriverParam<TColumn extends AnyColumn> = TColumn extends Column<TableName, ColumnData, infer TDriverType, ColumnNotNull, ColumnHasDefault> ? Unwrap<TDriverType> : never;
28
+ export declare type UpdateColConfig<T extends Partial<ColumnBaseConfig>, TUpdate extends Partial<ColumnBaseConfig>> = Update<T, TUpdate>;
29
+ export declare type AnyColumn<TPartial extends Partial<ColumnBaseConfig> = {}> = Column<Update<ColumnBaseConfig, TPartial>>;
30
+ export declare type GetColumnData<TColumn extends AnyColumn, TInferMode extends 'query' | 'raw' = 'query'> = TColumn extends AnyColumn<{
31
+ data: infer TData;
32
+ notNull: infer TNotNull extends boolean;
33
+ }> ? TInferMode extends 'raw' ? TData : TNotNull extends true ? TData : TData | null : never;
34
+ /**
35
+ `GetColumnConfig` can be used to infer either the full config of the column or a single parameter.
36
+ @example
37
+ type TConfig = GetColumnConfig<typeof column>;
38
+ type TNotNull = GetColumnConfig<typeof column, 'notNull'>;
39
+ */
40
+ export declare type GetColumnConfig<TColumn extends AnyColumn, TParam extends keyof ColumnBaseConfig | undefined = undefined> = TColumn extends Column<infer TConfig> ? TParam extends keyof ColumnBaseConfig ? TConfig[TParam] : TConfig : never;
33
41
  export declare type InferColumnsDataTypes<TColumns extends Record<string, AnyColumn>> = {
34
42
  [Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;
35
43
  };
36
- export declare type InferColumnTable<T extends AnyColumn> = T extends AnyColumn<infer TTable> ? TTable : never;
37
- export declare type ChangeColumnTable<TColumn extends AnyColumn, TTableName extends TableName> = TColumn extends Column<any, infer TType, infer TDriverType, infer TNotNull, infer THasDefault> ? ColumnWithMapper<TTableName, TType, TDriverType, TNotNull, THasDefault> : never;
package/column.js CHANGED
@@ -1,41 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.param = exports.ColumnWithMapper = exports.Column = void 0;
4
- const sql_1 = require("./sql");
3
+ exports.Column = void 0;
4
+ // export type UpdateColumnConfig<
5
+ // T extends ColumnBaseConfig,
6
+ // TUpdate extends Partial<ColumnBaseConfig>,
7
+ // > = Update<T, TUpdate, keyof ColumnBaseConfig>;
8
+ /*
9
+ `Column` only accepts a full `ColumnConfig` as its generic.
10
+ To infer parts of the config, use `AnyColumn` that accepts a partial config.
11
+ See `GetColumnData` for example usage of inferring.
12
+ */
5
13
  class Column {
6
14
  constructor(table, builder) {
7
15
  this.table = table;
8
- /*
9
- mapFromDriverValue and mapToDriverValue are provided just as a runtime fallback - if you need to override them,
10
- extend the ColumnWithMapper class instead for proper type-checking.
11
- */
12
- this.mapFromDriverValue = (value) => {
13
- return value;
14
- };
15
- this.mapToDriverValue = (value) => {
16
- return value;
17
- };
18
- this.name = builder.name;
19
- this.notNull = builder._notNull;
20
- this.default = builder._default;
21
- this.primary = builder._primaryKey;
16
+ this.name = builder.config.name;
17
+ this.notNull = builder.config.notNull;
18
+ this.default = builder.config.default;
19
+ this.primary = builder.config.primaryKey;
22
20
  }
23
- }
24
- exports.Column = Column;
25
- class ColumnWithMapper extends Column {
26
- constructor() {
27
- super(...arguments);
28
- this.mapFromDriverValue = (value) => {
29
- return value;
30
- };
31
- this.mapToDriverValue = (value) => {
32
- return value;
33
- };
21
+ mapFromDriverValue(value) {
22
+ return value;
23
+ }
24
+ mapToDriverValue(value) {
25
+ return value;
34
26
  }
35
27
  }
36
- exports.ColumnWithMapper = ColumnWithMapper;
37
- function param(column, value) {
38
- return new sql_1.BoundParamValue(value, column);
39
- }
40
- exports.param = param;
28
+ exports.Column = Column;
41
29
  //# sourceMappingURL=column.js.map
package/column.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"column.js","sourceRoot":"","sources":["../src/column.ts"],"names":[],"mappings":";;;AAEA,+BAA0D;AAG1D,MAAsB,MAAM;IAqB3B,YACU,KAA2B,EACpC,OAAkE;QADzD,UAAK,GAAL,KAAK,CAAsB;QASrC;;;UAGE;QACF,uBAAkB,GAAG,CAAC,KAAU,EAAO,EAAE;YACxC,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAEF,qBAAgB,GAAG,CAAC,KAAU,EAAO,EAAE;YACtC,OAAO,KAAK,CAAC;QACd,CAAC,CAAC;QAhBD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IACpC,CAAC;CAeD;AA5CD,wBA4CC;AAED,MAAsB,gBAMpB,SAAQ,MAA8D;IANxE;;QASU,uBAAkB,GAAG,CAAC,KAA2B,EAAiB,EAAE;YAC5E,OAAO,KAAY,CAAC;QACrB,CAAC,CAAC;QAEO,qBAAgB,GAAG,CAAC,KAAoB,EAAwB,EAAE;YAC1E,OAAO,KAAY,CAAC;QACrB,CAAC,CAAC;IACH,CAAC;CAAA;AAhBD,4CAgBC;AAkBD,SAAgB,KAAK,CACpB,MAA8C,EAC9C,KAAwB;IAExB,OAAO,IAAI,qBAAe,CAAC,KAAkB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AALD,sBAKC"}
1
+ {"version":3,"file":"column.js","sourceRoot":"","sources":["../src/column.ts"],"names":[],"mappings":";;;AAeA,kCAAkC;AAClC,+BAA+B;AAC/B,8CAA8C;AAC9C,kDAAkD;AAElD;;;;EAIE;AACF,MAAsB,MAAM;IAe3B,YAAqB,KAA4B,EAAE,OAA4C;QAA1E,UAAK,GAAL,KAAK,CAAuB;QAChD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;IAC1C,CAAC;IAID,kBAAkB,CAAC,KAAuB;QACzC,OAAO,KAAY,CAAC;IACrB,CAAC;IAED,gBAAgB,CAAC,KAAgB;QAChC,OAAO,KAAY,CAAC;IACrB,CAAC;CACD;AA/BD,wBA+BC"}
package/connection.d.ts CHANGED
@@ -3,21 +3,15 @@ export declare type MigrationMeta = {
3
3
  folderMillis: number;
4
4
  hash: string;
5
5
  };
6
- export interface Session<TQueryParam, TQueryResponse> {
7
- query(query: string, params: TQueryParam[]): TQueryResponse;
6
+ export interface Logger {
7
+ logQuery(query: string, params: unknown[]): void;
8
8
  }
9
- export interface Driver<TSession> {
10
- connect(): Promise<TSession>;
9
+ export declare class DefaultLogger implements Logger {
10
+ logQuery(query: string, params: unknown[]): void;
11
11
  }
12
- export interface Dialect<TSession, TDatabase> {
13
- createDB(session: TSession): TDatabase;
14
- migrate(migrations: MigrationMeta[], session: TSession): Promise<void>;
12
+ export declare class NoopLogger implements Logger {
13
+ logQuery(): void;
15
14
  }
16
- export interface Connector<TSession, TOperations> {
17
- dialect: Dialect<TSession, TOperations>;
18
- driver: Driver<TSession>;
19
- }
20
- export declare function connect<TSession, TDatabase>(connector: Connector<TSession, TDatabase>): Promise<TDatabase>;
21
15
  export interface KitConfig {
22
16
  out: string;
23
17
  schema: string;
@@ -25,5 +19,4 @@ export interface KitConfig {
25
19
  export interface MigrationConfig {
26
20
  migrationsFolder: string;
27
21
  }
28
- export declare function migrate<TSession, TDatabase>(connector: Connector<TSession, TDatabase>, config: string): Promise<void>;
29
- export declare function migrate<TSession, TDatabase>(connector: Connector<TSession, TDatabase>, config: MigrationConfig): Promise<void>;
22
+ export declare function readMigrationFiles(config: string | MigrationConfig): MigrationMeta[];
package/connection.js CHANGED
@@ -22,70 +22,61 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
25
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.migrate = exports.connect = void 0;
26
+ exports.readMigrationFiles = exports.NoopLogger = exports.DefaultLogger = void 0;
36
27
  const crypto = __importStar(require("crypto"));
37
28
  const fs = __importStar(require("fs"));
38
29
  const path = __importStar(require("path"));
39
- function connect(connector) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const session = yield connector.driver.connect();
42
- return connector.dialect.createDB(session);
43
- });
30
+ class DefaultLogger {
31
+ logQuery(query, params) {
32
+ console.log(`Executing query:\n${query}\nParams:\n${JSON.stringify(params, null, 2)}\n`);
33
+ }
44
34
  }
45
- exports.connect = connect;
46
- function migrate(connector, config) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- let migrationFolderTo;
49
- if (typeof config === 'string') {
50
- const configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');
51
- const jsonConfig = JSON.parse(configAsString);
52
- migrationFolderTo = jsonConfig.out;
53
- }
54
- else {
55
- migrationFolderTo = config.migrationsFolder;
56
- }
57
- if (!migrationFolderTo) {
58
- throw Error('no migration folder defined');
59
- }
60
- const files1 = fs.readdirSync(migrationFolderTo);
61
- const migrationQueries = [];
62
- for (const migrationFolder of files1) {
63
- if (migrationFolder === '.DS_Store') {
64
- continue;
65
- }
66
- const migrationFiles = fs.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
67
- const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
68
- const query = fs
69
- .readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`)
70
- .toString();
71
- const year = Number(migrationFolder.slice(0, 4));
72
- // second param for Date() is month index, that started from 0, so we need
73
- // to decrement a value for month
74
- const month = Number(migrationFolder.slice(4, 6)) - 1;
75
- const day = Number(migrationFolder.slice(6, 8));
76
- const hour = Number(migrationFolder.slice(8, 10));
77
- const min = Number(migrationFolder.slice(10, 12));
78
- const sec = Number(migrationFolder.slice(12, 14));
79
- const folderAsMillis = Date.UTC(year, month, day, hour, min, sec);
80
- migrationQueries.push({
81
- sql: query,
82
- folderMillis: folderAsMillis,
83
- hash: crypto.createHash('sha256').update(query).digest('hex'),
84
- });
35
+ exports.DefaultLogger = DefaultLogger;
36
+ class NoopLogger {
37
+ logQuery() { }
38
+ }
39
+ exports.NoopLogger = NoopLogger;
40
+ function readMigrationFiles(config) {
41
+ let migrationFolderTo;
42
+ if (typeof config === 'string') {
43
+ const configAsString = fs.readFileSync(path.resolve('.', config), 'utf8');
44
+ const jsonConfig = JSON.parse(configAsString);
45
+ migrationFolderTo = jsonConfig.out;
46
+ }
47
+ else {
48
+ migrationFolderTo = config.migrationsFolder;
49
+ }
50
+ if (!migrationFolderTo) {
51
+ throw Error('no migration folder defined');
52
+ }
53
+ const files1 = fs.readdirSync(migrationFolderTo);
54
+ const migrationQueries = [];
55
+ for (const migrationFolder of files1) {
56
+ if (migrationFolder === '.DS_Store') {
57
+ continue;
85
58
  }
86
- const session = yield connector.driver.connect();
87
- yield connector.dialect.migrate(migrationQueries, session);
88
- });
59
+ const migrationFiles = fs.readdirSync(`${migrationFolderTo}/${migrationFolder}`);
60
+ const migrationFile = migrationFiles.filter((file) => file === 'migration.sql')[0];
61
+ const query = fs
62
+ .readFileSync(`${migrationFolderTo}/${migrationFolder}/${migrationFile}`)
63
+ .toString();
64
+ const year = Number(migrationFolder.slice(0, 4));
65
+ // second param for Date() is month index, that started from 0, so we need
66
+ // to decrement a value for month
67
+ const month = Number(migrationFolder.slice(4, 6)) - 1;
68
+ const day = Number(migrationFolder.slice(6, 8));
69
+ const hour = Number(migrationFolder.slice(8, 10));
70
+ const min = Number(migrationFolder.slice(10, 12));
71
+ const sec = Number(migrationFolder.slice(12, 14));
72
+ const folderAsMillis = Date.UTC(year, month, day, hour, min, sec);
73
+ migrationQueries.push({
74
+ sql: query,
75
+ folderMillis: folderAsMillis,
76
+ hash: crypto.createHash('sha256').update(query).digest('hex'),
77
+ });
78
+ }
79
+ return migrationQueries;
89
80
  }
90
- exports.migrate = migrate;
81
+ exports.readMigrationFiles = readMigrationFiles;
91
82
  //# sourceMappingURL=connection.js.map
package/connection.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { sql } from './sql';
2
- export * from './table';
3
1
  export * from './column';
4
2
  export * from './connection';
3
+ export { param, sql } from './sql';
4
+ export { Table } from './table';
package/index.js CHANGED
@@ -14,10 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.sql = void 0;
18
- var sql_1 = require("./sql");
19
- Object.defineProperty(exports, "sql", { enumerable: true, get: function () { return sql_1.sql; } });
20
- __exportStar(require("./table"), exports);
17
+ exports.Table = exports.sql = exports.param = void 0;
21
18
  __exportStar(require("./column"), exports);
22
19
  __exportStar(require("./connection"), exports);
20
+ var sql_1 = require("./sql");
21
+ Object.defineProperty(exports, "param", { enumerable: true, get: function () { return sql_1.param; } });
22
+ Object.defineProperty(exports, "sql", { enumerable: true, get: function () { return sql_1.sql; } });
23
+ var table_1 = require("./table");
24
+ Object.defineProperty(exports, "Table", { enumerable: true, get: function () { return table_1.Table; } });
23
25
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6BAA4B;AAAnB,0FAAA,GAAG,OAAA;AACZ,0CAAwB;AACxB,2CAAyB;AACzB,+CAA6B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,+CAA6B;AAC7B,6BAAmC;AAA1B,4FAAA,KAAK,OAAA;AAAE,0FAAA,GAAG,OAAA;AACnB,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
package/operations.d.ts CHANGED
@@ -1,13 +1,18 @@
1
- import { ColumnData, ColumnDriverParam, TableName } from './branded-types';
2
- import { AnyColumn, Column } from './column';
3
- import { AnySQLResponse, SQLResponse } from './sql';
4
- export declare type RequiredKeyOnly<TKey extends string, T extends AnyColumn> = T extends Column<any, any, any, infer TNotNull, infer THasDefault> ? [TNotNull, THasDefault] extends [true, false] | [] ? TKey : never : never;
1
+ import { AnyColumn } from './column';
2
+ import { SQL, SQLResponse } from './sql';
3
+ export declare type RequiredKeyOnly<TKey extends string, T extends AnyColumn> = T extends AnyColumn<{
4
+ notNull: true;
5
+ hasDefault: false;
6
+ }> ? TKey : never;
5
7
  export declare type OptionalKeyOnly<TKey extends string, T extends AnyColumn> = TKey extends RequiredKeyOnly<TKey, T> ? never : TKey;
6
- export declare type SelectFields<TTableName extends TableName, TColumnDriverParam extends ColumnDriverParam = ColumnDriverParam> = {
7
- [key: string]: SQLResponse<TTableName, ColumnData> | AnyColumn<TTableName, any, TColumnDriverParam>;
8
+ export declare type SelectFields<TTableName extends string, TColumnDriverParam> = {
9
+ [key: string]: SQL | SQLResponse | AnyColumn<{
10
+ tableName: TTableName;
11
+ driverParam: TColumnDriverParam;
12
+ }>;
8
13
  };
9
14
  export declare type SelectFieldsOrdered = {
10
15
  name: string;
11
16
  resultTableName: string;
12
- column: AnyColumn | AnySQLResponse;
17
+ field: AnyColumn | SQL | SQLResponse;
13
18
  }[];
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "drizzle-orm",
3
- "version": "0.12.0-beta.0",
3
+ "version": "0.12.0-beta.10",
4
4
  "description": "Drizzle ORM package for SQL databases",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
7
10
  "repository": {
8
11
  "type": "git",
9
12
  "url": "git+https://github.com/drizzle-team/drizzle-orm.git"
@@ -25,8 +28,8 @@
25
28
  },
26
29
  "homepage": "https://github.com/drizzle-team/drizzle-orm#readme",
27
30
  "peerDependencies": {
28
- "drizzle-orm-mysql": ">=0.12.0-beta.0",
29
- "drizzle-orm-pg": ">=0.12.0",
31
+ "drizzle-orm-mysql": ">=0.12.0 <0.13.0 || >=0.12.0-beta.0 <0.13.0-beta.0",
32
+ "drizzle-orm-pg": ">=0.12.0 <0.13.0 || >=0.12.0-beta.0 <0.13.0-beta.0",
30
33
  "mysql2": ">=2 <3",
31
34
  "pg": ">=8 <9",
32
35
  "sqlite3": ">=5 <6"
@@ -49,6 +52,7 @@
49
52
  }
50
53
  },
51
54
  "devDependencies": {
55
+ "@types/node": "*",
52
56
  "@types/pg": "^8.6.1",
53
57
  "@types/sqlite3": "^3.1.8",
54
58
  "mysql2": "^2.3.3",
@@ -56,7 +60,7 @@
56
60
  "resolve-tspaths": "^0.7.0",
57
61
  "sqlite3": "^5.0.8",
58
62
  "ts-node": "^10.8.2",
59
- "typescript": "4.8.0-beta",
63
+ "typescript": "^4.8.4",
60
64
  "uvu": "^0.5.6"
61
65
  },
62
66
  "dependencies": {
@@ -64,8 +68,9 @@
64
68
  },
65
69
  "scripts": {
66
70
  "build": "tsc",
67
- "pack": "cp package.json dist/ && (cd dist && pnpm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
68
- "publish:beta": "pnpm publish package.tgz --tag beta --access public --git-checks false",
71
+ "pack": "cp ../readme.md dist/ && cp package.json dist/ && (cd dist && pnpm pack --pack-destination ..) && rm -f package.tgz && mv *.tgz package.tgz",
72
+ "publish:beta": "pnpm publish package.tgz --tag beta --git-checks false",
73
+ "release:beta": "pnpm build && pnpm version prerelease && pnpm run pack && pnpm publish:beta",
69
74
  "build:int": "pnpm build && pnpm run pack"
70
75
  }
71
76
  }
package/readme.md ADDED
@@ -0,0 +1,30 @@
1
+ ## DrizzleORM
2
+ DrizzleORM is a TypeScript ORM library with a [drizzle-kit](#migrations) CLI companion for automatic SQL migrations generation.
3
+ It's meant to be a library, not a framework, stay as an opt-in solution all the time at any levels.
4
+ We try to follow SQL-like syntax whenever possible, be strongly typed ground top and fail in compile time, not in runtime.
5
+ We implemented best in class `joins` and second to none `migrations generation`.
6
+ Library has almost zero dependencies and being battle tested on production projects by multiple teams 🚀
7
+
8
+ | database | support | |
9
+ |:-- | :---: | :-- |
10
+ | PostgreSQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-pg)|
11
+ | MySQL | ✅ |[Docs](https://github.com/drizzle-team/drizzle-orm/tree/main/drizzle-orm-mysql)| |
12
+ | SQLite | ⏳ | |
13
+ | DynamoDB | ⏳ | |
14
+ | MS SQL | ⏳ | |
15
+ | CockroachDB | ⏳ | |
16
+
17
+ ### Installation
18
+ ```bash
19
+ // postgresql
20
+ npm install drizzle-orm drizzle-orm-pg
21
+ npm install -D drizzle-kit
22
+
23
+ // mysql
24
+ npm install drizzle-orm drizzle-orm-mysql
25
+ npm install -D drizzle-kit
26
+
27
+ // sqlite
28
+ npm install drizzle-orm drizzle-orm-sqlite
29
+ npm install -D drizzle-kit
30
+ ```