driftsql 2.0.0-beta.2 → 2.0.0-beta.4

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.
@@ -0,0 +1,4 @@
1
+ import { n as init_postgres, t as PostgresGenerator } from "./postgres-CjYq8GvL.js";
2
+
3
+ init_postgres();
4
+ export { PostgresGenerator };
@@ -0,0 +1,95 @@
1
+ //#region rolldown:runtime
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __esm = (fn, res) => function() {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ };
9
+ var __export = (all) => {
10
+ let target = {};
11
+ for (var name in all) __defProp(target, name, {
12
+ get: all[name],
13
+ enumerable: true
14
+ });
15
+ return target;
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
19
+ key = keys[i];
20
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
21
+ get: ((k) => from[k]).bind(null, key),
22
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
23
+ });
24
+ }
25
+ return to;
26
+ };
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ //#endregion
30
+ //#region src/schema/generators/postgres.ts
31
+ var postgres_exports = /* @__PURE__ */ __export({ PostgresGenerator: () => PostgresGenerator });
32
+ var PostgresGenerator;
33
+ var init_postgres = __esm({ "src/schema/generators/postgres.ts": (() => {
34
+ PostgresGenerator = class {
35
+ generateCreateTable(table) {
36
+ const lines = [];
37
+ lines.push(`CREATE TABLE "${table.name}" (`);
38
+ const columnDefs = [];
39
+ for (const column of table.columns) columnDefs.push(" " + this.generateColumnDefinition(column));
40
+ if (table.primaryKey && table.primaryKey.length > 0) {
41
+ const pkColumns = table.primaryKey.map((col) => `"${col}"`).join(", ");
42
+ columnDefs.push(` PRIMARY KEY (${pkColumns})`);
43
+ }
44
+ if (table.checks && table.checks.length > 0) for (const check of table.checks) columnDefs.push(` CONSTRAINT "${check.name}" CHECK (${check.expression})`);
45
+ lines.push(columnDefs.join(",\n"));
46
+ lines.push(");");
47
+ const sql = [lines.join("\n")];
48
+ if (table.indexes && table.indexes.length > 0) for (const index of table.indexes) sql.push(this.generateIndex(table.name, index));
49
+ return sql.join("\n\n");
50
+ }
51
+ generateDropTable(tableName) {
52
+ return `DROP TABLE IF EXISTS "${tableName}" CASCADE;`;
53
+ }
54
+ generateColumnDefinition(column) {
55
+ const parts = [`"${column.name}"`];
56
+ parts.push(this.getColumnType(column));
57
+ if (column.primaryKey && !column.type.includes("serial")) parts.push("PRIMARY KEY");
58
+ if (column.notNull && !column.primaryKey && !column.type.includes("serial")) parts.push("NOT NULL");
59
+ if (column.unique) parts.push("UNIQUE");
60
+ if (column.default !== void 0) parts.push(`DEFAULT ${this.formatDefault(column.default)}`);
61
+ if (column.references) {
62
+ const ref = column.references;
63
+ parts.push(`REFERENCES "${ref.table}"("${ref.column}")`);
64
+ if (ref.onDelete) parts.push(`ON DELETE ${ref.onDelete}`);
65
+ if (ref.onUpdate) parts.push(`ON UPDATE ${ref.onUpdate}`);
66
+ }
67
+ if (column.check) parts.push(`CHECK (${column.check})`);
68
+ return parts.join(" ");
69
+ }
70
+ getColumnType(column) {
71
+ let type = column.type.toUpperCase();
72
+ if (column.length) type += `(${column.length})`;
73
+ else if (column.precision) if (column.scale !== void 0) type += `(${column.precision}, ${column.scale})`;
74
+ else type += `(${column.precision})`;
75
+ return type;
76
+ }
77
+ formatDefault(value) {
78
+ if (typeof value === "string") {
79
+ if (value.toUpperCase() === "NOW()" || value.toUpperCase() === "CURRENT_TIMESTAMP") return value.toUpperCase();
80
+ return `'${value}'`;
81
+ }
82
+ if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
83
+ return String(value);
84
+ }
85
+ generateIndex(tableName, index) {
86
+ const unique = index.unique ? "UNIQUE " : "";
87
+ const type = index.type ? ` USING ${index.type.toUpperCase()}` : "";
88
+ const columns = index.columns.map((col) => `"${col}"`).join(", ");
89
+ return `CREATE ${unique}INDEX "${index.name}" ON "${tableName}"${type} (${columns});`;
90
+ }
91
+ };
92
+ }) });
93
+
94
+ //#endregion
95
+ export { __export as a, __esm as i, init_postgres as n, __toCommonJS as o, postgres_exports as r, PostgresGenerator as t };
@@ -1,7 +1,88 @@
1
- import e from"node:fs/promises";var t=class{generateTypes(e){let t=`// This file was automatically generated - DO NOT EDIT
1
+ import fs from "node:fs/promises";
2
2
 
3
- `;for(let n of e)t+=this.generateTableInterface(n),t+=`
3
+ //#region src/schema/type-generator.ts
4
+ var TypeGenerator = class {
5
+ generateTypes(tables) {
6
+ let output = "// This file was automatically generated - DO NOT EDIT\n\n";
7
+ for (const table of tables) {
8
+ output += this.generateTableInterface(table);
9
+ output += "\n\n";
10
+ }
11
+ output += this.generateDatabaseInterface(tables);
12
+ return output;
13
+ }
14
+ generateTableInterface(table) {
15
+ let lines = [`export interface ${this.pascalCase(table.name)} {`];
16
+ for (const column of table.columns) {
17
+ const tsType = this.columnToTypeScript(column);
18
+ const optional = !column.notNull && !column.primaryKey ? "?" : "";
19
+ lines.push(` ${column.name}${optional}: ${tsType}`);
20
+ }
21
+ lines.push("}");
22
+ return lines.join("\n");
23
+ }
24
+ generateDatabaseInterface(tables) {
25
+ let lines = ["export interface Database {"];
26
+ for (const table of tables) {
27
+ const interfaceName = this.pascalCase(table.name);
28
+ lines.push(` ${table.name}: ${interfaceName}`);
29
+ }
30
+ lines.push("}");
31
+ return lines.join("\n");
32
+ }
33
+ columnToTypeScript(column) {
34
+ const isNullable = !column.notNull && !column.primaryKey;
35
+ let baseType;
36
+ switch (column.type.toLowerCase()) {
37
+ case "serial":
38
+ case "bigserial":
39
+ case "integer":
40
+ case "int":
41
+ case "bigint":
42
+ case "smallint":
43
+ case "numeric":
44
+ case "decimal":
45
+ case "real":
46
+ case "double precision":
47
+ baseType = "number";
48
+ break;
49
+ case "text":
50
+ case "varchar":
51
+ case "char":
52
+ case "uuid":
53
+ baseType = "string";
54
+ break;
55
+ case "boolean":
56
+ baseType = "boolean";
57
+ break;
58
+ case "timestamp":
59
+ case "timestamptz":
60
+ case "date":
61
+ case "time":
62
+ baseType = "Date | string";
63
+ break;
64
+ case "json":
65
+ case "jsonb":
66
+ baseType = "any";
67
+ break;
68
+ case "bytea":
69
+ baseType = "Buffer";
70
+ break;
71
+ default: baseType = "any";
72
+ }
73
+ return isNullable ? `${baseType} | null` : baseType;
74
+ }
75
+ pascalCase(str) {
76
+ return str.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
77
+ }
78
+ async writeToFile(tables, filePath) {
79
+ const content = this.generateTypes(tables);
80
+ await fs.writeFile(filePath, content, "utf8");
81
+ }
82
+ };
83
+ async function generateTypesFromSchema(tables, outputPath) {
84
+ await new TypeGenerator().writeToFile(tables, outputPath);
85
+ }
4
86
 
5
- `;return t+=this.generateDatabaseInterface(e),t}generateTableInterface(e){let t=[`export interface ${this.pascalCase(e.name)} {`];for(let n of e.columns){let e=this.columnToTypeScript(n),r=!n.notNull&&!n.primaryKey?`?`:``;t.push(` ${n.name}${r}: ${e}`)}return t.push(`}`),t.join(`
6
- `)}generateDatabaseInterface(e){let t=[`export interface Database {`];for(let n of e){let e=this.pascalCase(n.name);t.push(` ${n.name}: ${e}`)}return t.push(`}`),t.join(`
7
- `)}columnToTypeScript(e){let t=!e.notNull&&!e.primaryKey,n;switch(e.type.toLowerCase()){case`serial`:case`bigserial`:case`integer`:case`int`:case`bigint`:case`smallint`:case`numeric`:case`decimal`:case`real`:case`double precision`:n=`number`;break;case`text`:case`varchar`:case`char`:case`uuid`:n=`string`;break;case`boolean`:n=`boolean`;break;case`timestamp`:case`timestamptz`:case`date`:case`time`:n=`Date | string`;break;case`json`:case`jsonb`:n=`any`;break;case`bytea`:n=`Buffer`;break;default:n=`any`}return t?`${n} | null`:n}pascalCase(e){return e.split(`_`).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}async writeToFile(t,n){let r=this.generateTypes(t);await e.writeFile(n,r,`utf8`)}};async function n(e,n){await new t().writeToFile(e,n)}export{n,t};
87
+ //#endregion
88
+ export { generateTypesFromSchema as n, TypeGenerator as t };
@@ -1 +1,3 @@
1
- import{n as e,t}from"./type-generator-Ba8bgnMm.js";export{t as TypeGenerator,e as generateTypesFromSchema};
1
+ import { n as generateTypesFromSchema, t as TypeGenerator } from "./type-generator-Ba8bgnMm.js";
2
+
3
+ export { TypeGenerator, generateTypesFromSchema };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "driftsql",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0-beta.4",
4
4
  "description": "A modern, type-safe SQL client with built-in schema builder and migration system for TypeScript.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,5 +0,0 @@
1
- var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i=(e,t)=>()=>(e&&(t=e(e=0)),t),a=t=>{let n={};for(var r in t)e(n,r,{get:t[r],enumerable:!0});return n},o=(i,a,o,s)=>{if(a&&typeof a==`object`||typeof a==`function`)for(var c=n(a),l=0,u=c.length,d;l<u;l++)d=c[l],!r.call(i,d)&&d!==o&&e(i,d,{get:(e=>a[e]).bind(null,d),enumerable:!(s=t(a,d))||s.enumerable});return i},s=t=>o(e({},`__esModule`,{value:!0}),t),c=a({PostgresGenerator:()=>l}),l,u=i((()=>{l=class{generateCreateTable(e){let t=[];t.push(`CREATE TABLE "${e.name}" (`);let n=[];for(let t of e.columns)n.push(` `+this.generateColumnDefinition(t));if(e.primaryKey&&e.primaryKey.length>0){let t=e.primaryKey.map(e=>`"${e}"`).join(`, `);n.push(` PRIMARY KEY (${t})`)}if(e.checks&&e.checks.length>0)for(let t of e.checks)n.push(` CONSTRAINT "${t.name}" CHECK (${t.expression})`);t.push(n.join(`,
2
- `)),t.push(`);`);let r=[t.join(`
3
- `)];if(e.indexes&&e.indexes.length>0)for(let t of e.indexes)r.push(this.generateIndex(e.name,t));return r.join(`
4
-
5
- `)}generateDropTable(e){return`DROP TABLE IF EXISTS "${e}" CASCADE;`}generateColumnDefinition(e){let t=[`"${e.name}"`];if(t.push(this.getColumnType(e)),e.primaryKey&&!e.type.includes(`serial`)&&t.push(`PRIMARY KEY`),e.notNull&&!e.primaryKey&&!e.type.includes(`serial`)&&t.push(`NOT NULL`),e.unique&&t.push(`UNIQUE`),e.default!==void 0&&t.push(`DEFAULT ${this.formatDefault(e.default)}`),e.references){let n=e.references;t.push(`REFERENCES "${n.table}"("${n.column}")`),n.onDelete&&t.push(`ON DELETE ${n.onDelete}`),n.onUpdate&&t.push(`ON UPDATE ${n.onUpdate}`)}return e.check&&t.push(`CHECK (${e.check})`),t.join(` `)}getColumnType(e){let t=e.type.toUpperCase();return e.length?t+=`(${e.length})`:e.precision&&(e.scale===void 0?t+=`(${e.precision})`:t+=`(${e.precision}, ${e.scale})`),t}formatDefault(e){return typeof e==`string`?e.toUpperCase()===`NOW()`||e.toUpperCase()===`CURRENT_TIMESTAMP`?e.toUpperCase():`'${e}'`:typeof e==`boolean`?e?`TRUE`:`FALSE`:String(e)}generateIndex(e,t){let n=t.unique?`UNIQUE `:``,r=t.type?` USING ${t.type.toUpperCase()}`:``,i=t.columns.map(e=>`"${e}"`).join(`, `);return`CREATE ${n}INDEX "${t.name}" ON "${e}"${r} (${i});`}}}));export{a,i,u as n,s as o,c as r,l as t};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./postgres-9C7eE0wB.js";e();export{t as PostgresGenerator};