@type32/tauri-sqlite-orm 0.2.3 → 0.2.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.
- package/README.md +1 -0
- package/dist/index.d.mts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +19 -0
- package/dist/index.mjs +19 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@ A Drizzle-like TypeScript ORM tailored for Tauri v2's `@tauri-apps/plugin-sql` (
|
|
|
5
5
|
### Features
|
|
6
6
|
|
|
7
7
|
- **Drizzle-like Schema:** Define your database schema using a familiar, chainable API.
|
|
8
|
+
- **Strict Type Inference:** Full TypeScript type safety with no `any` types - nullable columns, custom types, and required/optional fields are accurately inferred.
|
|
8
9
|
- **Type-Safe Query Builder:** Build SQL queries with TypeScript, ensuring type safety and autocompletion.
|
|
9
10
|
- **Relations Support:** Define and query one-to-one, one-to-many, and many-to-many relationships between tables.
|
|
10
11
|
- **Nested Includes:** Load relations of relations with intuitive nested syntax.
|
package/dist/index.d.mts
CHANGED
|
@@ -2,7 +2,7 @@ import Database from '@tauri-apps/plugin-sql';
|
|
|
2
2
|
|
|
3
3
|
type ColumnDataType = 'TEXT' | 'INTEGER' | 'REAL' | 'BLOB' | 'BOOLEAN' | 'NUMERIC';
|
|
4
4
|
type Mode = 'default' | 'timestamp' | 'timestamp_ms' | 'json' | 'boolean' | 'bigint';
|
|
5
|
-
type ColumnValueTypes<TType extends ColumnDataType, TMode extends Mode> = TType extends 'TEXT' ? TMode extends 'json' ?
|
|
5
|
+
type ColumnValueTypes<TType extends ColumnDataType, TMode extends Mode> = TType extends 'TEXT' ? TMode extends 'json' ? unknown : string : TType extends 'INTEGER' ? TMode extends 'timestamp' | 'timestamp_ms' ? Date : TMode extends 'boolean' ? boolean : number : TType extends 'REAL' ? number : TType extends 'BOOLEAN' ? boolean : TType extends 'BLOB' ? TMode extends 'json' ? unknown : TMode extends 'bigint' ? bigint : Uint8Array : TType extends 'NUMERIC' ? TMode extends 'bigint' ? bigint : number : never;
|
|
6
6
|
interface ColumnOptions<TData, TEnum extends readonly string[] = readonly string[]> {
|
|
7
7
|
notNull?: boolean;
|
|
8
8
|
default?: TData;
|
|
@@ -18,7 +18,7 @@ interface ColumnOptions<TData, TEnum extends readonly string[] = readonly string
|
|
|
18
18
|
$onUpdateFn?: () => TData;
|
|
19
19
|
enum?: TEnum;
|
|
20
20
|
}
|
|
21
|
-
type ExtractColumnType<T extends AnySQLiteColumn> = T['_']['customType'] extends never ? T['_']['enum'] extends readonly string[] ? T['_']['enum'][number] : T extends SQLiteColumn<infer _, infer TType, infer TMode, infer TNotNull, infer THasDefault> ?
|
|
21
|
+
type ExtractColumnType<T extends AnySQLiteColumn> = T['_']['customType'] extends never ? T['_']['enum'] extends readonly string[] ? T['_']['notNull'] extends true ? T['_']['enum'][number] : T['_']['enum'][number] | null : T extends SQLiteColumn<infer _, infer TType, infer TMode, infer TNotNull, infer THasDefault> ? TNotNull extends true ? ColumnValueTypes<TType, TMode> : ColumnValueTypes<TType, TMode> | null : never : T['_']['notNull'] extends true ? T['_']['customType'] : T['_']['customType'] | null;
|
|
22
22
|
type AnySQLiteColumn = SQLiteColumn<any, any, any, any, any, any, any, any>;
|
|
23
23
|
type AnyTable = Table<Record<string, AnySQLiteColumn>, string>;
|
|
24
24
|
type InferSelectModel<T extends AnyTable> = {
|
|
@@ -120,6 +120,7 @@ declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
120
120
|
private buildUpdateClause;
|
|
121
121
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
122
122
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
123
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
123
124
|
toSQL(): {
|
|
124
125
|
sql: string;
|
|
125
126
|
params: any[];
|
|
@@ -145,6 +146,7 @@ declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
145
146
|
private buildConflictClause;
|
|
146
147
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
147
148
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
149
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
148
150
|
toSQL(): {
|
|
149
151
|
sql: string;
|
|
150
152
|
params: any[];
|
|
@@ -162,6 +164,7 @@ declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
162
164
|
returning(...columns: (keyof T['_']['columns'])[]): this;
|
|
163
165
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
164
166
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
167
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
165
168
|
toSQL(): {
|
|
166
169
|
sql: string;
|
|
167
170
|
params: any[];
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import Database from '@tauri-apps/plugin-sql';
|
|
|
2
2
|
|
|
3
3
|
type ColumnDataType = 'TEXT' | 'INTEGER' | 'REAL' | 'BLOB' | 'BOOLEAN' | 'NUMERIC';
|
|
4
4
|
type Mode = 'default' | 'timestamp' | 'timestamp_ms' | 'json' | 'boolean' | 'bigint';
|
|
5
|
-
type ColumnValueTypes<TType extends ColumnDataType, TMode extends Mode> = TType extends 'TEXT' ? TMode extends 'json' ?
|
|
5
|
+
type ColumnValueTypes<TType extends ColumnDataType, TMode extends Mode> = TType extends 'TEXT' ? TMode extends 'json' ? unknown : string : TType extends 'INTEGER' ? TMode extends 'timestamp' | 'timestamp_ms' ? Date : TMode extends 'boolean' ? boolean : number : TType extends 'REAL' ? number : TType extends 'BOOLEAN' ? boolean : TType extends 'BLOB' ? TMode extends 'json' ? unknown : TMode extends 'bigint' ? bigint : Uint8Array : TType extends 'NUMERIC' ? TMode extends 'bigint' ? bigint : number : never;
|
|
6
6
|
interface ColumnOptions<TData, TEnum extends readonly string[] = readonly string[]> {
|
|
7
7
|
notNull?: boolean;
|
|
8
8
|
default?: TData;
|
|
@@ -18,7 +18,7 @@ interface ColumnOptions<TData, TEnum extends readonly string[] = readonly string
|
|
|
18
18
|
$onUpdateFn?: () => TData;
|
|
19
19
|
enum?: TEnum;
|
|
20
20
|
}
|
|
21
|
-
type ExtractColumnType<T extends AnySQLiteColumn> = T['_']['customType'] extends never ? T['_']['enum'] extends readonly string[] ? T['_']['enum'][number] : T extends SQLiteColumn<infer _, infer TType, infer TMode, infer TNotNull, infer THasDefault> ?
|
|
21
|
+
type ExtractColumnType<T extends AnySQLiteColumn> = T['_']['customType'] extends never ? T['_']['enum'] extends readonly string[] ? T['_']['notNull'] extends true ? T['_']['enum'][number] : T['_']['enum'][number] | null : T extends SQLiteColumn<infer _, infer TType, infer TMode, infer TNotNull, infer THasDefault> ? TNotNull extends true ? ColumnValueTypes<TType, TMode> : ColumnValueTypes<TType, TMode> | null : never : T['_']['notNull'] extends true ? T['_']['customType'] : T['_']['customType'] | null;
|
|
22
22
|
type AnySQLiteColumn = SQLiteColumn<any, any, any, any, any, any, any, any>;
|
|
23
23
|
type AnyTable = Table<Record<string, AnySQLiteColumn>, string>;
|
|
24
24
|
type InferSelectModel<T extends AnyTable> = {
|
|
@@ -120,6 +120,7 @@ declare class UpdateQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
120
120
|
private buildUpdateClause;
|
|
121
121
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
122
122
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
123
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
123
124
|
toSQL(): {
|
|
124
125
|
sql: string;
|
|
125
126
|
params: any[];
|
|
@@ -145,6 +146,7 @@ declare class InsertQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
145
146
|
private buildConflictClause;
|
|
146
147
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
147
148
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
149
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
148
150
|
toSQL(): {
|
|
149
151
|
sql: string;
|
|
150
152
|
params: any[];
|
|
@@ -162,6 +164,7 @@ declare class DeleteQueryBuilder<T extends AnyTable> extends BaseQueryBuilder {
|
|
|
162
164
|
returning(...columns: (keyof T['_']['columns'])[]): this;
|
|
163
165
|
execute(): Promise<T extends AnyTable ? (InferSelectModel<T> & Record<string, any>)[] : never>;
|
|
164
166
|
returningAll(): Promise<InferSelectModel<T>[]>;
|
|
167
|
+
returningFirst(): Promise<InferSelectModel<T> | undefined>;
|
|
165
168
|
toSQL(): {
|
|
166
169
|
sql: string;
|
|
167
170
|
params: any[];
|
package/dist/index.js
CHANGED
|
@@ -832,6 +832,13 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
832
832
|
);
|
|
833
833
|
return this.returning(...allColumns).execute();
|
|
834
834
|
}
|
|
835
|
+
async returningFirst() {
|
|
836
|
+
const allColumns = Object.keys(
|
|
837
|
+
this.table._.columns
|
|
838
|
+
);
|
|
839
|
+
const results = await this.returning(...allColumns).execute();
|
|
840
|
+
return results[0];
|
|
841
|
+
}
|
|
835
842
|
toSQL() {
|
|
836
843
|
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
837
844
|
if (this.returningColumns.length > 0) {
|
|
@@ -969,6 +976,13 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
969
976
|
);
|
|
970
977
|
return this.returning(...allColumns).execute();
|
|
971
978
|
}
|
|
979
|
+
async returningFirst() {
|
|
980
|
+
const allColumns = Object.keys(
|
|
981
|
+
this.table._.columns
|
|
982
|
+
);
|
|
983
|
+
const results = await this.returning(...allColumns).execute();
|
|
984
|
+
return results[0];
|
|
985
|
+
}
|
|
972
986
|
toSQL() {
|
|
973
987
|
if (this.dataSets.length === 0) {
|
|
974
988
|
throw new InsertValidationError("No data provided for insert. Use .values() to provide data.");
|
|
@@ -1047,6 +1061,11 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
1047
1061
|
const allColumns = Object.keys(this.table._.columns);
|
|
1048
1062
|
return this.returning(...allColumns).execute();
|
|
1049
1063
|
}
|
|
1064
|
+
async returningFirst() {
|
|
1065
|
+
const allColumns = Object.keys(this.table._.columns);
|
|
1066
|
+
const results = await this.returning(...allColumns).execute();
|
|
1067
|
+
return results[0];
|
|
1068
|
+
}
|
|
1050
1069
|
toSQL() {
|
|
1051
1070
|
const { sql: sql2, params } = this.build();
|
|
1052
1071
|
if (this.returningColumns.length > 0) {
|
package/dist/index.mjs
CHANGED
|
@@ -733,6 +733,13 @@ var UpdateQueryBuilder = class extends BaseQueryBuilder {
|
|
|
733
733
|
);
|
|
734
734
|
return this.returning(...allColumns).execute();
|
|
735
735
|
}
|
|
736
|
+
async returningFirst() {
|
|
737
|
+
const allColumns = Object.keys(
|
|
738
|
+
this.table._.columns
|
|
739
|
+
);
|
|
740
|
+
const results = await this.returning(...allColumns).execute();
|
|
741
|
+
return results[0];
|
|
742
|
+
}
|
|
736
743
|
toSQL() {
|
|
737
744
|
const { sql: updateSql, params } = this.buildUpdateClause();
|
|
738
745
|
if (this.returningColumns.length > 0) {
|
|
@@ -870,6 +877,13 @@ var InsertQueryBuilder = class extends BaseQueryBuilder {
|
|
|
870
877
|
);
|
|
871
878
|
return this.returning(...allColumns).execute();
|
|
872
879
|
}
|
|
880
|
+
async returningFirst() {
|
|
881
|
+
const allColumns = Object.keys(
|
|
882
|
+
this.table._.columns
|
|
883
|
+
);
|
|
884
|
+
const results = await this.returning(...allColumns).execute();
|
|
885
|
+
return results[0];
|
|
886
|
+
}
|
|
873
887
|
toSQL() {
|
|
874
888
|
if (this.dataSets.length === 0) {
|
|
875
889
|
throw new InsertValidationError("No data provided for insert. Use .values() to provide data.");
|
|
@@ -948,6 +962,11 @@ var DeleteQueryBuilder = class extends BaseQueryBuilder {
|
|
|
948
962
|
const allColumns = Object.keys(this.table._.columns);
|
|
949
963
|
return this.returning(...allColumns).execute();
|
|
950
964
|
}
|
|
965
|
+
async returningFirst() {
|
|
966
|
+
const allColumns = Object.keys(this.table._.columns);
|
|
967
|
+
const results = await this.returning(...allColumns).execute();
|
|
968
|
+
return results[0];
|
|
969
|
+
}
|
|
951
970
|
toSQL() {
|
|
952
971
|
const { sql: sql2, params } = this.build();
|
|
953
972
|
if (this.returningColumns.length > 0) {
|