@iamkirbki/database-handler-better-sqlite3 4.0.4 → 4.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.
@@ -1,6 +1,6 @@
1
1
  import { BetterSqlite3TableSchemaBuilder } from "./BetterSqlite3TableSchemaBuilder.js";
2
2
  import BetterSqlite3Adapter from "./BetterSqlite3Adapter.js";
3
- import AbstractSchemaBuilder from "@core/interfaces/ISchemaBuilder.js";
3
+ import { AbstractSchemaBuilder } from "@iamkirbki/database-handler-core";
4
4
  export declare class BetterSqlite3SchemaBuilder implements AbstractSchemaBuilder {
5
5
  private _adapter;
6
6
  constructor(_adapter: BetterSqlite3Adapter);
@@ -1 +1 @@
1
- {"version":3,"file":"BetterSqlite3SchemaBuilder.d.ts","sourceRoot":"","sources":["../src/BetterSqlite3SchemaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,qBAAqB,MAAM,oCAAoC,CAAC;AAEvE,qBAAa,0BAA2B,YAAW,qBAAqB;IAExD,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,oBAAoB;IAG5C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI;IAWpF,SAAS,CAAC,IAAI,EAAE,MAAM;IAOtB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAcjH"}
1
+ {"version":3,"file":"BetterSqlite3SchemaBuilder.d.ts","sourceRoot":"","sources":["../src/BetterSqlite3SchemaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,qBAAa,0BAA2B,YAAW,qBAAqB;IAExD,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,oBAAoB;IAG5C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI;IAWpF,SAAS,CAAC,IAAI,EAAE,MAAM;IAOtB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAcjH"}
@@ -1,13 +1,25 @@
1
1
  import { SchemaTableBuilder } from "@iamkirbki/database-handler-core";
2
2
  export declare class BetterSqlite3TableSchemaBuilder extends SchemaTableBuilder {
3
3
  build(): string;
4
- increments(name?: string): this;
5
- primaryKey(name?: string): this;
6
- foreignKey(name?: string, referenceTable?: string, referenceColumn?: string): this;
7
- uuid(name?: string): this;
8
- string(name?: string, length?: number): this;
9
- integer(name?: string): this;
10
- boolean(name?: string): this;
4
+ uuid(name: string): this;
5
+ string(name: string, length?: number): this;
6
+ text(name: string): this;
7
+ integer(name: string): this;
8
+ decimal(name: string, precision?: number, scale?: number): this;
9
+ float(name: string): this;
10
+ boolean(name: string): this;
11
+ json(name: string): this;
12
+ enum(name: string, values: string[]): this;
13
+ timestamp(name: string): this;
14
+ time(name: string): this;
11
15
  timestamps(): this;
16
+ increments(): this;
17
+ primaryKey(): this;
18
+ foreignKey(referenceTable: string, referenceColumn: string): this;
19
+ unique(): this;
20
+ nullable(): this;
21
+ defaultTo(value: unknown): this;
22
+ softDeletes(): this;
23
+ morphs(name: string): this;
12
24
  }
13
25
  //# sourceMappingURL=BetterSqlite3TableSchemaBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BetterSqlite3TableSchemaBuilder.d.ts","sourceRoot":"","sources":["../src/BetterSqlite3TableSchemaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,qBAAa,+BAAgC,SAAQ,kBAAkB;IACnE,KAAK,IAAI,MAAM;IAkBf,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;IAOxB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/B,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAYlF,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAOzB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5C,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B,UAAU,IAAI,IAAI;CAerB"}
1
+ {"version":3,"file":"BetterSqlite3TableSchemaBuilder.d.ts","sourceRoot":"","sources":["../src/BetterSqlite3TableSchemaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,qBAAa,+BAAgC,SAAQ,kBAAkB;IACnE,KAAK,IAAI,MAAM;IAmBf,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAO3C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAW/D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAU1C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO7B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQxB,UAAU,IAAI,IAAI;IAiBlB,UAAU;IASV,UAAU,IAAI,IAAI;IASlB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAWjE,MAAM,IAAI,IAAI;IASd,QAAQ,IAAI,IAAI;IAShB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAmB/B,WAAW,IAAI,IAAI;IASnB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAI7B"}
@@ -13,44 +13,45 @@ export class BetterSqlite3TableSchemaBuilder extends SchemaTableBuilder {
13
13
  });
14
14
  return `(${columnDefinitions.join(', ')})`;
15
15
  }
16
- increments(name) {
16
+ // Datatypes
17
+ uuid(name) {
17
18
  return this.addColumn({
18
19
  name,
19
- autoincrement: true,
20
+ datatype: 'UUID',
20
21
  });
21
22
  }
22
- primaryKey(name) {
23
+ string(name, length) {
23
24
  return this.addColumn({
24
25
  name,
25
- constraints: ['PRIMARY KEY'],
26
+ datatype: length ? `VARCHAR(${length})` : 'VARCHAR',
26
27
  });
27
28
  }
28
- foreignKey(name, referenceTable, referenceColumn) {
29
- if (name && referenceTable && referenceColumn) {
30
- const constraint = `FOREIGN KEY(${name}) REFERENCES ${referenceTable}(${referenceColumn})`;
31
- return this.addColumn({
32
- name,
33
- constraints: [constraint],
34
- });
35
- }
36
- return this;
29
+ text(name) {
30
+ return this.addColumn({
31
+ name,
32
+ datatype: 'TEXT',
33
+ });
37
34
  }
38
- uuid(name) {
35
+ integer(name) {
39
36
  return this.addColumn({
40
37
  name,
41
- datatype: 'UUID',
38
+ datatype: 'INTEGER',
42
39
  });
43
40
  }
44
- string(name, length) {
41
+ decimal(name, precision, scale) {
42
+ let datatype = 'DECIMAL';
43
+ if (precision !== undefined && scale !== undefined) {
44
+ datatype = `DECIMAL(${precision},${scale})`;
45
+ }
45
46
  return this.addColumn({
46
47
  name,
47
- datatype: length ? `VARCHAR(${length})` : 'VARCHAR',
48
+ datatype,
48
49
  });
49
50
  }
50
- integer(name) {
51
+ float(name) {
51
52
  return this.addColumn({
52
53
  name,
53
- datatype: 'INTEGER',
54
+ datatype: 'REAL',
54
55
  });
55
56
  }
56
57
  boolean(name) {
@@ -59,17 +60,118 @@ export class BetterSqlite3TableSchemaBuilder extends SchemaTableBuilder {
59
60
  datatype: 'BOOLEAN',
60
61
  });
61
62
  }
63
+ json(name) {
64
+ // SQLite does not have a native JSON type, but uses TEXT
65
+ return this.addColumn({
66
+ name,
67
+ datatype: 'TEXT',
68
+ });
69
+ }
70
+ enum(name, values) {
71
+ // SQLite does not have a native ENUM type, but we can use a CHECK constraint
72
+ const quotedValues = values.map(v => `'${v.replace(/'/g, "''")}'`).join(', ');
73
+ return this.addColumn({
74
+ name,
75
+ datatype: 'TEXT',
76
+ constraints: [`CHECK (${name} IN (${quotedValues}))`],
77
+ });
78
+ }
79
+ timestamp(name) {
80
+ return this.addColumn({
81
+ name,
82
+ datatype: 'DATETIME',
83
+ });
84
+ }
85
+ time(name) {
86
+ // SQLite does not have a TIME type, but uses TEXT
87
+ return this.addColumn({
88
+ name,
89
+ datatype: 'TEXT',
90
+ });
91
+ }
62
92
  timestamps() {
63
93
  this.addColumn({
64
94
  name: 'created_at',
65
95
  datatype: 'DATETIME',
66
- constraints: ['NOT NULL', 'DEFAULT CURRENT_TIMESTAMP'],
96
+ constraints: ['DEFAULT CURRENT_TIMESTAMP'],
67
97
  });
68
98
  this.addColumn({
69
99
  name: 'updated_at',
70
100
  datatype: 'DATETIME',
71
- constraints: ['NOT NULL', 'DEFAULT CURRENT_TIMESTAMP'],
101
+ constraints: ['DEFAULT CURRENT_TIMESTAMP'],
72
102
  });
73
103
  return this;
74
104
  }
105
+ // Constraints
106
+ increments() {
107
+ if (this.columns.length === 0) {
108
+ throw new Error('increments() requires a previous column. Call a datatype method first.');
109
+ }
110
+ return this.addColumn({
111
+ autoincrement: true,
112
+ });
113
+ }
114
+ primaryKey() {
115
+ if (this.columns.length === 0) {
116
+ throw new Error('primaryKey() requires a previous column. Call a datatype method first.');
117
+ }
118
+ return this.addColumn({
119
+ constraints: ['PRIMARY KEY'],
120
+ });
121
+ }
122
+ foreignKey(referenceTable, referenceColumn) {
123
+ if (this.columns.length === 0) {
124
+ throw new Error('foreignKey() requires a previous column. Call a datatype method first.');
125
+ }
126
+ const lastColumn = this.columns[this.columns.length - 1];
127
+ const constraint = `FOREIGN KEY(${lastColumn.name}) REFERENCES ${referenceTable}(${referenceColumn})`;
128
+ return this.addColumn({
129
+ constraints: [constraint],
130
+ });
131
+ }
132
+ unique() {
133
+ if (this.columns.length === 0) {
134
+ throw new Error('unique() requires a previous column. Call a datatype method first.');
135
+ }
136
+ return this.addColumn({
137
+ constraints: ['UNIQUE'],
138
+ });
139
+ }
140
+ nullable() {
141
+ if (this.columns.length === 0) {
142
+ throw new Error('nullable() requires a previous column. Call a datatype method first.');
143
+ }
144
+ return this.addColumn({
145
+ constraints: ['NULLABLE'],
146
+ });
147
+ }
148
+ defaultTo(value) {
149
+ if (this.columns.length === 0) {
150
+ throw new Error('defaultTo() requires a previous column. Call a datatype method first.');
151
+ }
152
+ let defaultValue;
153
+ if (typeof value === 'string') {
154
+ defaultValue = `'${value}'`;
155
+ }
156
+ else if (typeof value === 'number' || typeof value === 'boolean') {
157
+ defaultValue = value;
158
+ }
159
+ else {
160
+ defaultValue = String(value);
161
+ }
162
+ return this.addColumn({
163
+ constraints: [`DEFAULT ${defaultValue}`],
164
+ });
165
+ }
166
+ softDeletes() {
167
+ this.addColumn({
168
+ name: 'deleted_at',
169
+ datatype: 'DATETIME',
170
+ });
171
+ return this.nullable();
172
+ }
173
+ morphs(name) {
174
+ this.integer(`${name}_id`);
175
+ return this.string(`${name}_type`);
176
+ }
75
177
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iamkirbki/database-handler-better-sqlite3",
3
- "version": "4.0.4",
3
+ "version": "4.0.5",
4
4
  "author": "iamkirbki",
5
5
  "description": "Better-sqlite3 adapter for @kirbkis-database-handler/core",
6
6
  "license": "ISC",
@@ -21,7 +21,7 @@
21
21
  "repository": {
22
22
  "type": "git",
23
23
  "url": "https://github.com/IamKirbki/npm-database-handler.git",
24
- "directory": "packages/better-sqlite3"
24
+ "directory": "packages/bettersqlite3"
25
25
  },
26
26
  "scripts": {
27
27
  "build": "tsc --build && tsc-alias"
@@ -32,6 +32,7 @@
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/better-sqlite3": "^7.6.13",
35
+ "@types/node": "^24.10.1",
35
36
  "typescript": "^5.9.3",
36
37
  "tsc-alias": "^1.8.16"
37
38
  }