@setupless/drizzle 0.2.0 → 0.4.0

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 (46) hide show
  1. package/README.md +41 -10
  2. package/dist/cjs/index.d.ts +1 -0
  3. package/dist/cjs/index.js +2 -1
  4. package/dist/cjs/mysql/createdAt.d.ts +7 -0
  5. package/dist/cjs/mysql/createdAt.js +16 -0
  6. package/dist/cjs/mysql/deletedAt.d.ts +8 -0
  7. package/dist/cjs/mysql/deletedAt.js +14 -0
  8. package/dist/cjs/mysql/id.d.ts +10 -0
  9. package/dist/cjs/mysql/id.js +21 -0
  10. package/dist/cjs/mysql/index.d.ts +5 -0
  11. package/dist/cjs/mysql/index.js +13 -0
  12. package/dist/cjs/mysql/timestamps.d.ts +7 -0
  13. package/dist/cjs/mysql/timestamps.js +14 -0
  14. package/dist/cjs/mysql/updatedAt.d.ts +8 -0
  15. package/dist/cjs/mysql/updatedAt.js +18 -0
  16. package/dist/cjs/pg/deletedAt.d.ts +12 -0
  17. package/dist/cjs/pg/deletedAt.js +16 -0
  18. package/dist/cjs/pg/index.d.ts +1 -0
  19. package/dist/cjs/pg/index.js +3 -1
  20. package/dist/cjs/sqlite/deletedAt.d.ts +7 -0
  21. package/dist/cjs/sqlite/deletedAt.js +13 -0
  22. package/dist/cjs/sqlite/index.d.ts +1 -0
  23. package/dist/cjs/sqlite/index.js +3 -1
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.js +1 -0
  26. package/dist/mysql/createdAt.d.ts +7 -0
  27. package/dist/mysql/createdAt.js +13 -0
  28. package/dist/mysql/deletedAt.d.ts +8 -0
  29. package/dist/mysql/deletedAt.js +11 -0
  30. package/dist/mysql/id.d.ts +10 -0
  31. package/dist/mysql/id.js +18 -0
  32. package/dist/mysql/index.d.ts +5 -0
  33. package/dist/mysql/index.js +5 -0
  34. package/dist/mysql/timestamps.d.ts +7 -0
  35. package/dist/mysql/timestamps.js +11 -0
  36. package/dist/mysql/updatedAt.d.ts +8 -0
  37. package/dist/mysql/updatedAt.js +15 -0
  38. package/dist/pg/deletedAt.d.ts +12 -0
  39. package/dist/pg/deletedAt.js +13 -0
  40. package/dist/pg/index.d.ts +1 -0
  41. package/dist/pg/index.js +1 -0
  42. package/dist/sqlite/deletedAt.d.ts +7 -0
  43. package/dist/sqlite/deletedAt.js +10 -0
  44. package/dist/sqlite/index.d.ts +1 -0
  45. package/dist/sqlite/index.js +1 -0
  46. package/package.json +11 -1
package/README.md CHANGED
@@ -7,29 +7,60 @@ npm install @setupless/drizzle drizzle-orm
7
7
  # or: bun add @setupless/drizzle drizzle-orm
8
8
  ```
9
9
 
10
- | Function | Description | Databases |
11
- | -------------- | ----------------------------------------------- | ------------------ |
12
- | `id()` | Auto-incrementing integer primary key | PostgreSQL, SQLite |
13
- | `id("uuid")` | Generated UUID primary key | PostgreSQL, SQLite |
14
- | `createdAt()` | Timestamp with the current time as its default | PostgreSQL, SQLite |
15
- | `updatedAt()` | Timestamp set on insert and Drizzle-run updates | PostgreSQL, SQLite |
16
- | `timestamps()` | `createdAt()` and `updatedAt()` columns | PostgreSQL, SQLite |
10
+ | Function | Description | Databases |
11
+ | -------------- | ----------------------------------------------- | ------------------------- |
12
+ | `id()` | Auto-incrementing integer primary key | PostgreSQL, SQLite, MySQL |
13
+ | `id("uuid")` | Generated UUID primary key | PostgreSQL, SQLite, MySQL |
14
+ | `createdAt()` | Timestamp with the current time as its default | PostgreSQL, SQLite, MySQL |
15
+ | `updatedAt()` | Timestamp set on insert and Drizzle-run updates | PostgreSQL, SQLite, MySQL |
16
+ | `deletedAt()` | Nullable timestamp for soft deletion | PostgreSQL, SQLite, MySQL |
17
+ | `timestamps()` | `createdAt()` and `updatedAt()` columns | PostgreSQL, SQLite, MySQL |
17
18
 
18
19
  ```ts
19
20
  import { pgTable } from "drizzle-orm/pg-core";
20
- import { id, timestamps } from "@setupless/drizzle/pg";
21
+ import { deletedAt, id, timestamps } from "@setupless/drizzle/pg";
21
22
 
22
23
  export const users = pgTable("users", {
23
24
  ...id(),
24
25
  ...timestamps({ withTimezone: true }),
26
+ ...deletedAt({ withTimezone: true }),
25
27
  });
26
28
  ```
27
29
 
28
- Import from `/sqlite` for SQLite. The package root also exports `pg` and
29
- `sqlite` namespaces. `updatedAt()` uses Drizzle's `$onUpdate` callback; it does
30
+ Import from `/sqlite` for SQLite or `/mysql` for MySQL. The package root also
31
+ exports `pg`, `sqlite`, and `mysql` namespaces. `updatedAt()` uses Drizzle's `$onUpdate` callback; it does
30
32
  not create a database trigger for updates made outside Drizzle.
31
33
 
34
+ `deletedAt()` adds a nullable `deleted_at` column with no default or automatic
35
+ update. Set it when soft-deleting a row, and set it to `null` to restore the row.
36
+ Queries must filter out soft-deleted rows explicitly.
37
+
32
38
  PostgreSQL timestamp helpers accept a `withTimezone` option. SQLite stores the
33
39
  timestamps as text and does not accept this option.
34
40
 
41
+ MySQL helpers require MySQL 8.0.13+ and use `DATETIME(3)` with JavaScript `Date`
42
+ values and millisecond precision. They do not accept `withTimezone`.
43
+ `createdAt()` and `updatedAt()` default to `(utc_timestamp(3))`, and Drizzle
44
+ updates use `utc_timestamp(3)`. These values stay in UTC regardless of the
45
+ MySQL session timezone, matching Drizzle's UTC date mapping. Expression defaults
46
+ require MySQL 8.0.13+ and a supporting storage engine such as InnoDB.
47
+
48
+ `DATETIME` stores no timezone information. Pass JavaScript `Date` values through
49
+ Drizzle when setting dates explicitly, including `deletedAt`. External writers
50
+ must supply UTC values, for example with `UTC_TIMESTAMP(3)` rather than `NOW(3)`.
51
+
52
+ ```ts
53
+ import { mysqlTable } from "drizzle-orm/mysql-core";
54
+ import { deletedAt, id, timestamps } from "@setupless/drizzle/mysql";
55
+
56
+ export const users = mysqlTable("users", {
57
+ ...id(),
58
+ ...timestamps(),
59
+ ...deletedAt(),
60
+ });
61
+ ```
62
+
63
+ MySQL `id("uuid")` uses `CHAR(36)` and generates UUIDs in Drizzle through
64
+ `$defaultFn`. Inserts outside Drizzle must supply their own UUID.
65
+
35
66
  Licensed under [Apache 2.0](LICENSE).
@@ -1,2 +1,3 @@
1
+ export * as mysql from "./mysql/index.js";
1
2
  export * as pg from "./pg/index.js";
2
3
  export * as sqlite from "./sqlite/index.js";
package/dist/cjs/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sqlite = exports.pg = void 0;
3
+ exports.sqlite = exports.pg = exports.mysql = void 0;
4
+ exports.mysql = require("./mysql/index.js");
4
5
  exports.pg = require("./pg/index.js");
5
6
  exports.sqlite = require("./sqlite/index.js");
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines a non-null `createdAt` DATETIME(3) column with a database default of
3
+ * `utc_timestamp(3)`, independent of the session timezone. Requires MySQL 8.0.13+.
4
+ */
5
+ export default function createdAt(): {
6
+ createdAt: import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"created_at">>>;
7
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = createdAt;
4
+ const drizzle_orm_1 = require("drizzle-orm");
5
+ const mysql_core_1 = require("drizzle-orm/mysql-core");
6
+ /**
7
+ * Defines a non-null `createdAt` DATETIME(3) column with a database default of
8
+ * `utc_timestamp(3)`, independent of the session timezone. Requires MySQL 8.0.13+.
9
+ */
10
+ function createdAt() {
11
+ return {
12
+ createdAt: (0, mysql_core_1.datetime)("created_at", { mode: "date", fsp: 3 })
13
+ .notNull()
14
+ .default((0, drizzle_orm_1.sql) `(utc_timestamp(3))`),
15
+ };
16
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` DATETIME(3) column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp when deleting a row.
4
+ * Pass a JavaScript Date through Drizzle, or supply UTC values in raw SQL.
5
+ */
6
+ export default function deletedAt(): {
7
+ deletedAt: import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"deleted_at">;
8
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = deletedAt;
4
+ const mysql_core_1 = require("drizzle-orm/mysql-core");
5
+ /**
6
+ * Defines a nullable `deletedAt` DATETIME(3) column named `deleted_at` for soft deletion.
7
+ * Has no default or automatic update. Set the timestamp when deleting a row.
8
+ * Pass a JavaScript Date through Drizzle, or supply UTC values in raw SQL.
9
+ */
10
+ function deletedAt() {
11
+ return {
12
+ deletedAt: (0, mysql_core_1.datetime)("deleted_at", { mode: "date", fsp: 3 }),
13
+ };
14
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Defines an `id` primary-key column.
3
+ *
4
+ * Drizzle generates UUID values in the application through `$defaultFn`.
5
+ */
6
+ export default function id(strategy?: "auto" | "uuid"): {
7
+ id: import("drizzle-orm").IsAutoincrement<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlIntBuilderInitial<"id">>>>>;
8
+ } | {
9
+ id: import("drizzle-orm").HasRuntimeDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlCharBuilderInitial<"id", [string, ...string[]], 36>>>>>;
10
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = id;
4
+ const mysql_core_1 = require("drizzle-orm/mysql-core");
5
+ /**
6
+ * Defines an `id` primary-key column.
7
+ *
8
+ * Drizzle generates UUID values in the application through `$defaultFn`.
9
+ */
10
+ function id(strategy = "auto") {
11
+ switch (strategy) {
12
+ case "auto":
13
+ return { id: (0, mysql_core_1.int)("id").primaryKey().autoincrement() };
14
+ case "uuid":
15
+ return {
16
+ id: (0, mysql_core_1.char)("id", { length: 36 })
17
+ .primaryKey()
18
+ .$defaultFn(() => crypto.randomUUID()),
19
+ };
20
+ }
21
+ }
@@ -0,0 +1,5 @@
1
+ export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
3
+ export { default as id } from "./id.js";
4
+ export { default as timestamps } from "./timestamps.js";
5
+ export { default as updatedAt } from "./updatedAt.js";
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updatedAt = exports.timestamps = exports.id = exports.deletedAt = exports.createdAt = void 0;
4
+ var createdAt_js_1 = require("./createdAt.js");
5
+ Object.defineProperty(exports, "createdAt", { enumerable: true, get: function () { return createdAt_js_1.default; } });
6
+ var deletedAt_js_1 = require("./deletedAt.js");
7
+ Object.defineProperty(exports, "deletedAt", { enumerable: true, get: function () { return deletedAt_js_1.default; } });
8
+ var id_js_1 = require("./id.js");
9
+ Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_js_1.default; } });
10
+ var timestamps_js_1 = require("./timestamps.js");
11
+ Object.defineProperty(exports, "timestamps", { enumerable: true, get: function () { return timestamps_js_1.default; } });
12
+ var updatedAt_js_1 = require("./updatedAt.js");
13
+ Object.defineProperty(exports, "updatedAt", { enumerable: true, get: function () { return updatedAt_js_1.default; } });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines non-null `createdAt` and `updatedAt` timestamp columns.
3
+ */
4
+ export default function timestamps(): {
5
+ updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core/index.js").MySqlDateTimeBuilderInitial<"updated_at">>>>;
6
+ createdAt: import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core/index.js").MySqlDateTimeBuilderInitial<"created_at">>>;
7
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = timestamps;
4
+ const createdAt_js_1 = require("./createdAt.js");
5
+ const updatedAt_js_1 = require("./updatedAt.js");
6
+ /**
7
+ * Defines non-null `createdAt` and `updatedAt` timestamp columns.
8
+ */
9
+ function timestamps() {
10
+ return {
11
+ ...(0, createdAt_js_1.default)(),
12
+ ...(0, updatedAt_js_1.default)(),
13
+ };
14
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Defines a non-null `updatedAt` DATETIME(3) column. The database supplies the
3
+ * insert default, and Drizzle supplies UTC values for updates it executes.
4
+ * Requires MySQL 8.0.13+ for the UTC expression default.
5
+ */
6
+ export default function updatedAt(): {
7
+ updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"updated_at">>>>;
8
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = updatedAt;
4
+ const drizzle_orm_1 = require("drizzle-orm");
5
+ const mysql_core_1 = require("drizzle-orm/mysql-core");
6
+ /**
7
+ * Defines a non-null `updatedAt` DATETIME(3) column. The database supplies the
8
+ * insert default, and Drizzle supplies UTC values for updates it executes.
9
+ * Requires MySQL 8.0.13+ for the UTC expression default.
10
+ */
11
+ function updatedAt() {
12
+ return {
13
+ updatedAt: (0, mysql_core_1.datetime)("updated_at", { mode: "date", fsp: 3 })
14
+ .notNull()
15
+ .default((0, drizzle_orm_1.sql) `(utc_timestamp(3))`)
16
+ .$onUpdate(() => (0, drizzle_orm_1.sql) `utc_timestamp(3)`),
17
+ };
18
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` timestamp column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp when deleting a row.
4
+ *
5
+ * @param options - Set `withTimezone` to `true` to use `timestamp with time zone`.
6
+ * Defaults to `timestamp` without a time zone.
7
+ */
8
+ export default function deletedAt({ withTimezone, }?: {
9
+ withTimezone?: boolean;
10
+ }): {
11
+ deletedAt: import("drizzle-orm/pg-core").PgTimestampBuilderInitial<"deleted_at">;
12
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = deletedAt;
4
+ const pg_core_1 = require("drizzle-orm/pg-core");
5
+ /**
6
+ * Defines a nullable `deletedAt` timestamp column named `deleted_at` for soft deletion.
7
+ * Has no default or automatic update. Set the timestamp when deleting a row.
8
+ *
9
+ * @param options - Set `withTimezone` to `true` to use `timestamp with time zone`.
10
+ * Defaults to `timestamp` without a time zone.
11
+ */
12
+ function deletedAt({ withTimezone, } = {}) {
13
+ return {
14
+ deletedAt: (0, pg_core_1.timestamp)("deleted_at", { withTimezone }),
15
+ };
16
+ }
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updatedAt = exports.timestamps = exports.id = exports.createdAt = void 0;
3
+ exports.updatedAt = exports.timestamps = exports.id = exports.deletedAt = exports.createdAt = void 0;
4
4
  var createdAt_js_1 = require("./createdAt.js");
5
5
  Object.defineProperty(exports, "createdAt", { enumerable: true, get: function () { return createdAt_js_1.default; } });
6
+ var deletedAt_js_1 = require("./deletedAt.js");
7
+ Object.defineProperty(exports, "deletedAt", { enumerable: true, get: function () { return deletedAt_js_1.default; } });
6
8
  var id_js_1 = require("./id.js");
7
9
  Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_js_1.default; } });
8
10
  var timestamps_js_1 = require("./timestamps.js");
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` text column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp text when deleting a row.
4
+ */
5
+ export default function deletedAt(): {
6
+ deletedAt: import("drizzle-orm/sqlite-core").SQLiteTextBuilderInitial<"deleted_at", [string, ...string[]], number | undefined>;
7
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = deletedAt;
4
+ const sqlite_core_1 = require("drizzle-orm/sqlite-core");
5
+ /**
6
+ * Defines a nullable `deletedAt` text column named `deleted_at` for soft deletion.
7
+ * Has no default or automatic update. Set the timestamp text when deleting a row.
8
+ */
9
+ function deletedAt() {
10
+ return {
11
+ deletedAt: (0, sqlite_core_1.text)("deleted_at"),
12
+ };
13
+ }
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updatedAt = exports.timestamps = exports.id = exports.createdAt = void 0;
3
+ exports.updatedAt = exports.timestamps = exports.id = exports.deletedAt = exports.createdAt = void 0;
4
4
  var createdAt_js_1 = require("./createdAt.js");
5
5
  Object.defineProperty(exports, "createdAt", { enumerable: true, get: function () { return createdAt_js_1.default; } });
6
+ var deletedAt_js_1 = require("./deletedAt.js");
7
+ Object.defineProperty(exports, "deletedAt", { enumerable: true, get: function () { return deletedAt_js_1.default; } });
6
8
  var id_js_1 = require("./id.js");
7
9
  Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_js_1.default; } });
8
10
  var timestamps_js_1 = require("./timestamps.js");
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ export * as mysql from "./mysql/index.js";
1
2
  export * as pg from "./pg/index.js";
2
3
  export * as sqlite from "./sqlite/index.js";
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
+ export * as mysql from "./mysql/index.js";
1
2
  export * as pg from "./pg/index.js";
2
3
  export * as sqlite from "./sqlite/index.js";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines a non-null `createdAt` DATETIME(3) column with a database default of
3
+ * `utc_timestamp(3)`, independent of the session timezone. Requires MySQL 8.0.13+.
4
+ */
5
+ export default function createdAt(): {
6
+ createdAt: import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"created_at">>>;
7
+ };
@@ -0,0 +1,13 @@
1
+ import { sql } from "drizzle-orm";
2
+ import { datetime } from "drizzle-orm/mysql-core";
3
+ /**
4
+ * Defines a non-null `createdAt` DATETIME(3) column with a database default of
5
+ * `utc_timestamp(3)`, independent of the session timezone. Requires MySQL 8.0.13+.
6
+ */
7
+ export default function createdAt() {
8
+ return {
9
+ createdAt: datetime("created_at", { mode: "date", fsp: 3 })
10
+ .notNull()
11
+ .default(sql `(utc_timestamp(3))`),
12
+ };
13
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` DATETIME(3) column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp when deleting a row.
4
+ * Pass a JavaScript Date through Drizzle, or supply UTC values in raw SQL.
5
+ */
6
+ export default function deletedAt(): {
7
+ deletedAt: import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"deleted_at">;
8
+ };
@@ -0,0 +1,11 @@
1
+ import { datetime } from "drizzle-orm/mysql-core";
2
+ /**
3
+ * Defines a nullable `deletedAt` DATETIME(3) column named `deleted_at` for soft deletion.
4
+ * Has no default or automatic update. Set the timestamp when deleting a row.
5
+ * Pass a JavaScript Date through Drizzle, or supply UTC values in raw SQL.
6
+ */
7
+ export default function deletedAt() {
8
+ return {
9
+ deletedAt: datetime("deleted_at", { mode: "date", fsp: 3 }),
10
+ };
11
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Defines an `id` primary-key column.
3
+ *
4
+ * Drizzle generates UUID values in the application through `$defaultFn`.
5
+ */
6
+ export default function id(strategy?: "auto" | "uuid"): {
7
+ id: import("drizzle-orm").IsAutoincrement<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlIntBuilderInitial<"id">>>>>;
8
+ } | {
9
+ id: import("drizzle-orm").HasRuntimeDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").IsPrimaryKey<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlCharBuilderInitial<"id", [string, ...string[]], 36>>>>>;
10
+ };
@@ -0,0 +1,18 @@
1
+ import { char, int } from "drizzle-orm/mysql-core";
2
+ /**
3
+ * Defines an `id` primary-key column.
4
+ *
5
+ * Drizzle generates UUID values in the application through `$defaultFn`.
6
+ */
7
+ export default function id(strategy = "auto") {
8
+ switch (strategy) {
9
+ case "auto":
10
+ return { id: int("id").primaryKey().autoincrement() };
11
+ case "uuid":
12
+ return {
13
+ id: char("id", { length: 36 })
14
+ .primaryKey()
15
+ .$defaultFn(() => crypto.randomUUID()),
16
+ };
17
+ }
18
+ }
@@ -0,0 +1,5 @@
1
+ export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
3
+ export { default as id } from "./id.js";
4
+ export { default as timestamps } from "./timestamps.js";
5
+ export { default as updatedAt } from "./updatedAt.js";
@@ -0,0 +1,5 @@
1
+ export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
3
+ export { default as id } from "./id.js";
4
+ export { default as timestamps } from "./timestamps.js";
5
+ export { default as updatedAt } from "./updatedAt.js";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines non-null `createdAt` and `updatedAt` timestamp columns.
3
+ */
4
+ export default function timestamps(): {
5
+ updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"updated_at">>>>;
6
+ createdAt: import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"created_at">>>;
7
+ };
@@ -0,0 +1,11 @@
1
+ import createdAt from "./createdAt.js";
2
+ import updatedAt from "./updatedAt.js";
3
+ /**
4
+ * Defines non-null `createdAt` and `updatedAt` timestamp columns.
5
+ */
6
+ export default function timestamps() {
7
+ return {
8
+ ...createdAt(),
9
+ ...updatedAt(),
10
+ };
11
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Defines a non-null `updatedAt` DATETIME(3) column. The database supplies the
3
+ * insert default, and Drizzle supplies UTC values for updates it executes.
4
+ * Requires MySQL 8.0.13+ for the UTC expression default.
5
+ */
6
+ export default function updatedAt(): {
7
+ updatedAt: import("drizzle-orm").HasDefault<import("drizzle-orm").HasDefault<import("drizzle-orm").NotNull<import("drizzle-orm/mysql-core").MySqlDateTimeBuilderInitial<"updated_at">>>>;
8
+ };
@@ -0,0 +1,15 @@
1
+ import { sql } from "drizzle-orm";
2
+ import { datetime } from "drizzle-orm/mysql-core";
3
+ /**
4
+ * Defines a non-null `updatedAt` DATETIME(3) column. The database supplies the
5
+ * insert default, and Drizzle supplies UTC values for updates it executes.
6
+ * Requires MySQL 8.0.13+ for the UTC expression default.
7
+ */
8
+ export default function updatedAt() {
9
+ return {
10
+ updatedAt: datetime("updated_at", { mode: "date", fsp: 3 })
11
+ .notNull()
12
+ .default(sql `(utc_timestamp(3))`)
13
+ .$onUpdate(() => sql `utc_timestamp(3)`),
14
+ };
15
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` timestamp column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp when deleting a row.
4
+ *
5
+ * @param options - Set `withTimezone` to `true` to use `timestamp with time zone`.
6
+ * Defaults to `timestamp` without a time zone.
7
+ */
8
+ export default function deletedAt({ withTimezone, }?: {
9
+ withTimezone?: boolean;
10
+ }): {
11
+ deletedAt: import("drizzle-orm/pg-core").PgTimestampBuilderInitial<"deleted_at">;
12
+ };
@@ -0,0 +1,13 @@
1
+ import { timestamp } from "drizzle-orm/pg-core";
2
+ /**
3
+ * Defines a nullable `deletedAt` timestamp column named `deleted_at` for soft deletion.
4
+ * Has no default or automatic update. Set the timestamp when deleting a row.
5
+ *
6
+ * @param options - Set `withTimezone` to `true` to use `timestamp with time zone`.
7
+ * Defaults to `timestamp` without a time zone.
8
+ */
9
+ export default function deletedAt({ withTimezone, } = {}) {
10
+ return {
11
+ deletedAt: timestamp("deleted_at", { withTimezone }),
12
+ };
13
+ }
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
package/dist/pg/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Defines a nullable `deletedAt` text column named `deleted_at` for soft deletion.
3
+ * Has no default or automatic update. Set the timestamp text when deleting a row.
4
+ */
5
+ export default function deletedAt(): {
6
+ deletedAt: import("drizzle-orm/sqlite-core").SQLiteTextBuilderInitial<"deleted_at", [string, ...string[]], number | undefined>;
7
+ };
@@ -0,0 +1,10 @@
1
+ import { text } from "drizzle-orm/sqlite-core";
2
+ /**
3
+ * Defines a nullable `deletedAt` text column named `deleted_at` for soft deletion.
4
+ * Has no default or automatic update. Set the timestamp text when deleting a row.
5
+ */
6
+ export default function deletedAt() {
7
+ return {
8
+ deletedAt: text("deleted_at"),
9
+ };
10
+ }
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
@@ -1,4 +1,5 @@
1
1
  export { default as createdAt } from "./createdAt.js";
2
+ export { default as deletedAt } from "./deletedAt.js";
2
3
  export { default as id } from "./id.js";
3
4
  export { default as timestamps } from "./timestamps.js";
4
5
  export { default as updatedAt } from "./updatedAt.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@setupless/drizzle",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Small, typed helpers for defining Drizzle ORM schemas",
5
5
  "homepage": "https://github.com/Setupless/drizzle#readme",
6
6
  "bugs": {
@@ -49,6 +49,16 @@
49
49
  "types": "./dist/cjs/sqlite/index.d.ts",
50
50
  "default": "./dist/cjs/sqlite/index.js"
51
51
  }
52
+ },
53
+ "./mysql": {
54
+ "import": {
55
+ "types": "./dist/mysql/index.d.ts",
56
+ "default": "./dist/mysql/index.js"
57
+ },
58
+ "require": {
59
+ "types": "./dist/cjs/mysql/index.d.ts",
60
+ "default": "./dist/cjs/mysql/index.js"
61
+ }
52
62
  }
53
63
  },
54
64
  "publishConfig": {