@kyro-cms/core 0.3.5 → 0.4.1
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 +3 -3
- package/dist/api-handler.cjs +5 -5
- package/dist/api-handler.js +4 -4
- package/dist/{chunk-X3CU27OO.cjs → chunk-3FW6WVVP.cjs} +2 -17
- package/dist/chunk-3FW6WVVP.cjs.map +1 -0
- package/dist/{chunk-R4C4O4SE.cjs → chunk-3ZZPZYCM.cjs} +36 -61
- package/dist/chunk-3ZZPZYCM.cjs.map +1 -0
- package/dist/{chunk-Y3TM7WH7.js → chunk-C4JJEE42.js} +36 -61
- package/dist/chunk-C4JJEE42.js.map +1 -0
- package/dist/{chunk-2UOI5MUC.cjs → chunk-FWGHXRRI.cjs} +4 -4
- package/dist/{chunk-2UOI5MUC.cjs.map → chunk-FWGHXRRI.cjs.map} +1 -1
- package/dist/{chunk-DE7OQOMD.cjs → chunk-M4GFA2UQ.cjs} +19 -19
- package/dist/chunk-M4GFA2UQ.cjs.map +1 -0
- package/dist/{chunk-4UD44U4Z.js → chunk-OJBK3JYF.js} +18 -18
- package/dist/chunk-OJBK3JYF.js.map +1 -0
- package/dist/{chunk-5FTY2DLG.js → chunk-SAMZQVC2.js} +3 -3
- package/dist/{chunk-5FTY2DLG.js.map → chunk-SAMZQVC2.js.map} +1 -1
- package/dist/{chunk-RGIQKTZ7.js → chunk-YMG55RSX.js} +4 -18
- package/dist/chunk-YMG55RSX.js.map +1 -0
- package/dist/drizzle/index.cjs +10 -10
- package/dist/drizzle/index.js +2 -2
- package/dist/index.cjs +48 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -13
- package/dist/index.js.map +1 -1
- package/dist/rest/index.cjs +4 -4
- package/dist/rest/index.js +2 -2
- package/package.json +2 -14
- package/dist/WebhookService-118ZTFis.d.ts +0 -112
- package/dist/WebhookService-AefJfqX0.d.cts +0 -112
- package/dist/api-handler.d.cts +0 -9
- package/dist/api-handler.d.ts +0 -9
- package/dist/base-DvvNqnM-.d.cts +0 -73
- package/dist/base-eVegJ_Pr.d.ts +0 -73
- package/dist/chunk-4UD44U4Z.js.map +0 -1
- package/dist/chunk-DE7OQOMD.cjs.map +0 -1
- package/dist/chunk-R4C4O4SE.cjs.map +0 -1
- package/dist/chunk-RGIQKTZ7.js.map +0 -1
- package/dist/chunk-X3CU27OO.cjs.map +0 -1
- package/dist/chunk-Y3TM7WH7.js.map +0 -1
- package/dist/cli/index.d.cts +0 -1
- package/dist/cli/index.d.ts +0 -1
- package/dist/client.d.cts +0 -12
- package/dist/client.d.ts +0 -12
- package/dist/drizzle/index.d.cts +0 -135
- package/dist/drizzle/index.d.ts +0 -135
- package/dist/fields/index.d.cts +0 -27
- package/dist/fields/index.d.ts +0 -27
- package/dist/graphql/index.d.cts +0 -22
- package/dist/graphql/index.d.ts +0 -22
- package/dist/index-Bz9JqRGI.d.cts +0 -86
- package/dist/index-Bz9JqRGI.d.ts +0 -86
- package/dist/index-CLp-DRKA.d.ts +0 -64
- package/dist/index-DfO7G4kN.d.cts +0 -64
- package/dist/index.d.cts +0 -1363
- package/dist/index.d.ts +0 -1363
- package/dist/integration.d.cts +0 -27
- package/dist/integration.d.ts +0 -27
- package/dist/mongodb/index.d.cts +0 -63
- package/dist/mongodb/index.d.ts +0 -63
- package/dist/mysql-media-AI6YK767.cjs +0 -48
- package/dist/mysql-media-AI6YK767.cjs.map +0 -1
- package/dist/mysql-media-CDZUS7YX.js +0 -45
- package/dist/mysql-media-CDZUS7YX.js.map +0 -1
- package/dist/rest/index.d.cts +0 -57
- package/dist/rest/index.d.ts +0 -57
- package/dist/templates/index.d.cts +0 -59
- package/dist/templates/index.d.ts +0 -59
- package/dist/trpc/index.d.cts +0 -136
- package/dist/trpc/index.d.ts +0 -136
- package/dist/types-BnTm7oJG.d.cts +0 -130
- package/dist/types-BnTm7oJG.d.ts +0 -130
- package/dist/types-Bs1up4yP.d.ts +0 -461
- package/dist/types-J3R9nVsZ.d.cts +0 -461
- package/dist/types-VtjUxIMp.d.cts +0 -246
- package/dist/types-VtjUxIMp.d.ts +0 -246
- package/dist/ws/index.d.cts +0 -88
- package/dist/ws/index.d.ts +0 -88
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ Kyro is built for **Astro** from the ground up. Unlike other CMS solutions that
|
|
|
19
19
|
### Key Features
|
|
20
20
|
|
|
21
21
|
- **Zero-Config Development** - SQLite by default for instant setup, no external dependencies
|
|
22
|
-
- **Multi-Database** - SQLite (dev), PostgreSQL,
|
|
22
|
+
- **Multi-Database** - SQLite (dev), PostgreSQL, MongoDB via unified adapter interface
|
|
23
23
|
- **Multi-Protocol API** - REST, GraphQL, tRPC, and WebSocket from a single config
|
|
24
24
|
- **Multi-Vendor** - Built-in tenant scoping and row-level access control
|
|
25
25
|
- **E-Commerce Ready** - Products, orders, customers, inventory, coupons out of the box
|
|
@@ -39,7 +39,7 @@ npm create kyro@latest
|
|
|
39
39
|
This launches an interactive wizard that asks:
|
|
40
40
|
|
|
41
41
|
- Project name
|
|
42
|
-
- Database (SQLite, PostgreSQL,
|
|
42
|
+
- Database (SQLite, PostgreSQL, MongoDB)
|
|
43
43
|
- API protocols (REST, GraphQL, tRPC, WebSocket)
|
|
44
44
|
- Styling (Tailwind, CSS Modules, Styled Components, None)
|
|
45
45
|
- Authentication (JWT)
|
|
@@ -95,7 +95,7 @@ const adapter = localAdapter({
|
|
|
95
95
|
|
|
96
96
|
Perfect for development and small projects. Zero configuration required - no external services needed.
|
|
97
97
|
|
|
98
|
-
### PostgreSQL
|
|
98
|
+
### PostgreSQL (Production)
|
|
99
99
|
|
|
100
100
|
```typescript
|
|
101
101
|
import { drizzleAdapter } from "@kyro-cms/core";
|
package/dist/api-handler.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkFWGHXRRI_cjs = require('./chunk-FWGHXRRI.cjs');
|
|
4
4
|
require('./chunk-K7JPTH3G.cjs');
|
|
5
|
-
require('./chunk-
|
|
5
|
+
require('./chunk-M4GFA2UQ.cjs');
|
|
6
6
|
require('./chunk-DLHUQO25.cjs');
|
|
7
7
|
require('./chunk-4PWRCMTQ.cjs');
|
|
8
8
|
require('./chunk-ADLJSJSN.cjs');
|
|
@@ -10,10 +10,10 @@ require('./chunk-IBG6V56E.cjs');
|
|
|
10
10
|
require('./chunk-VJT6P4N6.cjs');
|
|
11
11
|
require('./chunk-R3XIBBAW.cjs');
|
|
12
12
|
require('./chunk-DVD5P72E.cjs');
|
|
13
|
-
require('./chunk-
|
|
13
|
+
require('./chunk-3ZZPZYCM.cjs');
|
|
14
14
|
require('./chunk-IX3ABYKZ.cjs');
|
|
15
15
|
require('./chunk-WQBRWOQT.cjs');
|
|
16
|
-
require('./chunk-
|
|
16
|
+
require('./chunk-3FW6WVVP.cjs');
|
|
17
17
|
require('./chunk-W3KPQX7V.cjs');
|
|
18
18
|
require('./chunk-KOCTZKPV.cjs');
|
|
19
19
|
require('./chunk-G7VZBCD6.cjs');
|
|
@@ -28,7 +28,7 @@ var ALL = async (context) => {
|
|
|
28
28
|
if (!kyroInstance) {
|
|
29
29
|
try {
|
|
30
30
|
const config = projectConfig__default.default.default || projectConfig__default.default;
|
|
31
|
-
kyroInstance =
|
|
31
|
+
kyroInstance = chunkFWGHXRRI_cjs.createKyro(config);
|
|
32
32
|
await kyroInstance.init();
|
|
33
33
|
await kyroInstance.loadSettings();
|
|
34
34
|
console.log("[Kyro API] Backend initialized via Astro Integration");
|
package/dist/api-handler.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createKyro } from './chunk-
|
|
1
|
+
import { createKyro } from './chunk-SAMZQVC2.js';
|
|
2
2
|
import './chunk-3AJE4SEG.js';
|
|
3
|
-
import './chunk-
|
|
3
|
+
import './chunk-OJBK3JYF.js';
|
|
4
4
|
import './chunk-RYDGMBIG.js';
|
|
5
5
|
import './chunk-YT7HXXVN.js';
|
|
6
6
|
import './chunk-P2YW545G.js';
|
|
@@ -8,10 +8,10 @@ import './chunk-QXIQWPAP.js';
|
|
|
8
8
|
import './chunk-REK7AYOC.js';
|
|
9
9
|
import './chunk-SDMNUYVU.js';
|
|
10
10
|
import './chunk-3TPQ2BU6.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-C4JJEE42.js';
|
|
12
12
|
import './chunk-DBUYB32X.js';
|
|
13
13
|
import './chunk-WOWUL7ZY.js';
|
|
14
|
-
import './chunk-
|
|
14
|
+
import './chunk-YMG55RSX.js';
|
|
15
15
|
import './chunk-342BJNBI.js';
|
|
16
16
|
import './chunk-A4USRVTQ.js';
|
|
17
17
|
import './chunk-Z6ZWNWWR.js';
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var postgresJs = require('drizzle-orm/postgres-js');
|
|
4
|
-
var mysql2 = require('drizzle-orm/mysql2');
|
|
5
4
|
var postgres = require('postgres');
|
|
6
|
-
var mysql = require('mysql2/promise');
|
|
7
5
|
var sqlite = require('sqlite');
|
|
8
6
|
var crypto = require('crypto');
|
|
9
7
|
var promises = require('fs/promises');
|
|
@@ -12,12 +10,10 @@ var path = require('path');
|
|
|
12
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
11
|
|
|
14
12
|
var postgres__default = /*#__PURE__*/_interopDefault(postgres);
|
|
15
|
-
var mysql__default = /*#__PURE__*/_interopDefault(mysql);
|
|
16
13
|
|
|
17
14
|
// src/database/drizzle/database.ts
|
|
18
15
|
function getDialect() {
|
|
19
16
|
const val = process.env.DB_TYPE;
|
|
20
|
-
if (val === "mysql") return "mysql";
|
|
21
17
|
if (val === "postgres") return "postgres";
|
|
22
18
|
return "sqlite";
|
|
23
19
|
}
|
|
@@ -33,17 +29,6 @@ async function createDatabase() {
|
|
|
33
29
|
db2.exec("PRAGMA journal_mode = WAL");
|
|
34
30
|
return { db: db2, dialect, genId };
|
|
35
31
|
}
|
|
36
|
-
if (dialect === "mysql") {
|
|
37
|
-
const connectionString = process.env.DATABASE_URL || `mysql://${process.env.DB_USER || "root"}:${process.env.DB_PASSWORD || ""}@${process.env.DB_HOST || "localhost"}:${process.env.DB_PORT || 3306}/${process.env.DB_NAME || "kyro"}?timezone=+00:00`;
|
|
38
|
-
const pool = mysql__default.default.createPool({
|
|
39
|
-
uri: connectionString,
|
|
40
|
-
waitForConnections: true,
|
|
41
|
-
connectionLimit: parseInt(process.env.DB_POOL_MAX || "10", 10),
|
|
42
|
-
enableKeepAlive: true
|
|
43
|
-
});
|
|
44
|
-
const db2 = mysql2.drizzle(pool);
|
|
45
|
-
return { db: db2, dialect, genId };
|
|
46
|
-
}
|
|
47
32
|
const databaseUrl = process.env.DATABASE_URL || "postgresql://postgres:postgres@localhost:5432/kyro_cms";
|
|
48
33
|
const maxConnections = parseInt(process.env.DB_POOL_MAX || "10", 10);
|
|
49
34
|
const ssl = process.env.DB_SSL === "true";
|
|
@@ -74,5 +59,5 @@ exports.createDatabase = createDatabase;
|
|
|
74
59
|
exports.genId = genId;
|
|
75
60
|
exports.runMigrations = runMigrations;
|
|
76
61
|
exports.seedDefaultRoles = seedDefaultRoles;
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-3FW6WVVP.cjs.map
|
|
63
|
+
//# sourceMappingURL=chunk-3FW6WVVP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/database/drizzle/database.ts"],"names":["randomBytes","resolve","mkdir","dirname","db","DatabaseSync","postgres","drizzle"],"mappings":";;;;;;;;;;;;;;AASA,SAAS,UAAA,GAAsB;AAC7B,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,OAAA;AACxB,EAAA,IAAI,GAAA,KAAQ,YAAY,OAAO,UAAA;AAC/B,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,KAAA,GAAgB;AAC9B,EAAA,OAAOA,kBAAA,CAAY,EAAE,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA;AACvC;AAQA,eAAsB,cAAA,GAA0C;AAC9D,EAAA,MAAM,UAAU,UAAA,EAAW;AAE3B,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAM,SAASC,YAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,EAAG,QAAQ,SAAS,CAAA;AACvD,IAAA,MAAMC,eAAMC,YAAA,CAAQ,MAAM,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,IAAA,MAAMC,GAAAA,GAAK,IAAIC,mBAAA,CAAa,MAAM,CAAA;AAClC,IAAAD,GAAAA,CAAG,KAAK,2BAA2B,CAAA;AACnC,IAAA,OAAO,EAAE,EAAA,EAAAA,GAAAA,EAAI,OAAA,EAAS,KAAA,EAAM;AAAA,EAC9B;AAEA,EAAA,MAAM,WAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,YAAA,IACZ,wDAAA;AACF,EAAA,MAAM,iBAAiB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,WAAA,IAAe,MAAM,EAAE,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,MAAA,KAAW,MAAA;AACnC,EAAA,MAAM,MAAA,GAASE,0BAAS,WAAA,EAAa;AAAA,IACnC,GAAA,EAAK,cAAA;AAAA,IACL,GAAA,EAAK,MAAM,SAAA,GAAY;AAAA,GACxB,CAAA;AACD,EAAA,MAAM,EAAA,GAAKC,mBAAQ,MAAM,CAAA;AACzB,EAAA,OAAO,EAAE,EAAA,EAAI,OAAA,EAAS,KAAA,EAAM;AAC9B;AAEA,eAAsB,aAAA,CACpB,KACA,QAAA,EACe;AACf,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,qGAAA;AAAA,GACF;AACF;AAEA,eAAsB,iBAAiB,EAAA,EAAwB;AAC7D,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,uBAAmB,CAAA;AAClD,EAAA,MAAM,EAAA,CACH,MAAA,CAAO,KAAK,CAAA,CACZ,MAAA,CAAO;AAAA,IACN,IAAA,EAAM,aAAA;AAAA,IACN,KAAA,EAAO,GAAA;AAAA,IACP,UAAU,EAAC;AAAA,IACX,WAAA,EAAa,uCAAA;AAAA,IACb,QAAA,EAAU;AAAA,GACX,EACA,mBAAA,EAAoB;AACzB","file":"chunk-3FW6WVVP.cjs","sourcesContent":["import { drizzle } from \"drizzle-orm/postgres-js\";\nimport postgres from \"postgres\";\nimport { DatabaseSync } from \"node:sqlite\";\nimport { randomBytes } from \"crypto\";\nimport { mkdir } from \"fs/promises\";\nimport { dirname, resolve } from \"path\";\n\nexport type Dialect = \"sqlite\" | \"postgres\";\n\nfunction getDialect(): Dialect {\n const val = process.env.DB_TYPE as Dialect | undefined;\n if (val === \"postgres\") return \"postgres\";\n return \"sqlite\";\n}\n\nexport function genId(): string {\n return randomBytes(16).toString(\"hex\");\n}\n\nexport interface DatabaseResult {\n db: any;\n dialect: Dialect;\n genId: () => string;\n}\n\nexport async function createDatabase(): Promise<DatabaseResult> {\n const dialect = getDialect();\n\n if (dialect === \"sqlite\") {\n const dbPath = resolve(process.cwd(), \"data\", \"kyro.db\");\n await mkdir(dirname(dbPath), { recursive: true });\n const db = new DatabaseSync(dbPath);\n db.exec(\"PRAGMA journal_mode = WAL\");\n return { db, dialect, genId };\n }\n\n const databaseUrl =\n process.env.DATABASE_URL ||\n \"postgresql://postgres:postgres@localhost:5432/kyro_cms\";\n const maxConnections = parseInt(process.env.DB_POOL_MAX || \"10\", 10);\n const ssl = process.env.DB_SSL === \"true\";\n const client = postgres(databaseUrl, {\n max: maxConnections,\n ssl: ssl ? \"require\" : false,\n });\n const db = drizzle(client);\n return { db, dialect, genId };\n}\n\nexport async function runMigrations(\n _db: any,\n _dialect?: Dialect,\n): Promise<void> {\n console.log(\n `[createDatabase] runMigrations called — use drizzle-kit CLI for migrations (drizzle-kit migrate)`,\n );\n}\n\nexport async function seedDefaultRoles(db: any): Promise<void> {\n const { roles } = await import(\"./schema/index.js\");\n await db\n .insert(roles)\n .values({\n name: \"super_admin\",\n level: 100,\n inherits: [],\n description: \"Full system access across all tenants\",\n isSystem: true,\n })\n .onConflictDoNothing();\n}\n"]}
|
|
@@ -42,13 +42,13 @@ function fieldToDrizzleType(field, dialect = "postgres") {
|
|
|
42
42
|
function collectionToDrizzleSchema(collection, dialect = "postgres") {
|
|
43
43
|
const tableName = collection.slug.replace(/-/g, "_");
|
|
44
44
|
const lines = [];
|
|
45
|
-
lines.push(`export const ${tableName} =
|
|
46
|
-
lines.push(` id:
|
|
45
|
+
lines.push(`export const ${tableName} = pgTable('${tableName}', {`);
|
|
46
|
+
lines.push(` id: uuid('id').primaryKey().defaultRandom(),`);
|
|
47
47
|
for (const field of collection.fields) {
|
|
48
48
|
if (field.name === "id") continue;
|
|
49
49
|
const dbType = fieldToDrizzleType(field, dialect);
|
|
50
50
|
const isRequired = field.required;
|
|
51
|
-
let fieldDef = ` ${field.name}:
|
|
51
|
+
let fieldDef = ` ${field.name}: pg.${dbType}('${field.name}')`;
|
|
52
52
|
if (field.unique) fieldDef += ".unique()";
|
|
53
53
|
if (!isRequired) fieldDef += ".nullable()";
|
|
54
54
|
if (field.defaultValue !== void 0) {
|
|
@@ -64,11 +64,11 @@ function collectionToDrizzleSchema(collection, dialect = "postgres") {
|
|
|
64
64
|
lines.push(fieldDef);
|
|
65
65
|
}
|
|
66
66
|
if (collection.timestamps) {
|
|
67
|
-
lines.push(` createdAt:
|
|
68
|
-
lines.push(` updatedAt:
|
|
67
|
+
lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);
|
|
68
|
+
lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);
|
|
69
69
|
}
|
|
70
|
-
lines.push(` _status: ${dialect === "sqlite" ? "
|
|
71
|
-
lines.push(` _has_draft: ${dialect === "sqlite" ? "
|
|
70
|
+
lines.push(` _status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('_status').default('published'),`);
|
|
71
|
+
lines.push(` _has_draft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('_has_draft').default(false),`);
|
|
72
72
|
lines.push("});");
|
|
73
73
|
return lines.join("\n");
|
|
74
74
|
}
|
|
@@ -520,63 +520,38 @@ var DrizzleAdapter = class extends chunkKOCTZKPV_cjs.AbstractBaseAdapter {
|
|
|
520
520
|
}
|
|
521
521
|
async ensureDraftsTable() {
|
|
522
522
|
if (this.draftsTableReady) return;
|
|
523
|
-
const createTableSQL =
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
CREATE TABLE IF NOT EXISTS kyro_drafts (
|
|
537
|
-
id text PRIMARY KEY,
|
|
538
|
-
collection_slug text NOT NULL,
|
|
539
|
-
document_id text NOT NULL,
|
|
540
|
-
tenant_id text,
|
|
541
|
-
data text NOT NULL,
|
|
542
|
-
base_updated_at text,
|
|
543
|
-
draft_updated_at text NOT NULL,
|
|
544
|
-
created_at text NOT NULL,
|
|
545
|
-
updated_at text NOT NULL
|
|
546
|
-
)
|
|
547
|
-
`);
|
|
523
|
+
const createTableSQL = drizzleOrm.sql.raw(`
|
|
524
|
+
CREATE TABLE IF NOT EXISTS kyro_drafts (
|
|
525
|
+
id text PRIMARY KEY,
|
|
526
|
+
collection_slug text NOT NULL,
|
|
527
|
+
document_id text NOT NULL,
|
|
528
|
+
tenant_id text,
|
|
529
|
+
data text NOT NULL,
|
|
530
|
+
base_updated_at text,
|
|
531
|
+
draft_updated_at text NOT NULL,
|
|
532
|
+
created_at text NOT NULL,
|
|
533
|
+
updated_at text NOT NULL
|
|
534
|
+
)
|
|
535
|
+
`);
|
|
548
536
|
await this.executeRaw(createTableSQL);
|
|
549
537
|
this.draftsTableReady = true;
|
|
550
538
|
}
|
|
551
539
|
async ensureVersionsTable() {
|
|
552
540
|
if (this.versionsTableReady) return;
|
|
553
|
-
const createTableSQL =
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
CREATE TABLE IF NOT EXISTS kyro_versions (
|
|
568
|
-
id text PRIMARY KEY,
|
|
569
|
-
collection_slug text NOT NULL,
|
|
570
|
-
document_id text NOT NULL,
|
|
571
|
-
tenant_id text,
|
|
572
|
-
data text NOT NULL,
|
|
573
|
-
status text NOT NULL,
|
|
574
|
-
created_by text,
|
|
575
|
-
change_description text,
|
|
576
|
-
created_at text NOT NULL,
|
|
577
|
-
updated_at text NOT NULL
|
|
578
|
-
)
|
|
579
|
-
`);
|
|
541
|
+
const createTableSQL = drizzleOrm.sql.raw(`
|
|
542
|
+
CREATE TABLE IF NOT EXISTS kyro_versions (
|
|
543
|
+
id text PRIMARY KEY,
|
|
544
|
+
collection_slug text NOT NULL,
|
|
545
|
+
document_id text NOT NULL,
|
|
546
|
+
tenant_id text,
|
|
547
|
+
data text NOT NULL,
|
|
548
|
+
status text NOT NULL,
|
|
549
|
+
created_by text,
|
|
550
|
+
change_description text,
|
|
551
|
+
created_at text NOT NULL,
|
|
552
|
+
updated_at text NOT NULL
|
|
553
|
+
)
|
|
554
|
+
`);
|
|
580
555
|
await this.executeRaw(createTableSQL);
|
|
581
556
|
this.versionsTableReady = true;
|
|
582
557
|
}
|
|
@@ -618,5 +593,5 @@ exports.DrizzleAdapter = DrizzleAdapter;
|
|
|
618
593
|
exports.collectionToDrizzleSchema = collectionToDrizzleSchema;
|
|
619
594
|
exports.createDrizzleAdapter = createDrizzleAdapter;
|
|
620
595
|
exports.fieldToDrizzleType = fieldToDrizzleType;
|
|
621
|
-
//# sourceMappingURL=chunk-
|
|
622
|
-
//# sourceMappingURL=chunk-
|
|
596
|
+
//# sourceMappingURL=chunk-3ZZPZYCM.cjs.map
|
|
597
|
+
//# sourceMappingURL=chunk-3ZZPZYCM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/database/drizzle/adapter.ts"],"names":["AbstractBaseAdapter","eq","sql"],"mappings":"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","file":"chunk-3ZZPZYCM.cjs","sourcesContent":["import { AbstractBaseAdapter } from '../base.js';\nimport { sql, eq } from 'drizzle-orm';\nimport type {\n CollectionConfig,\n GlobalConfig,\n FindArgs,\n FindByIDArgs,\n CreateArgs,\n UpdateArgs,\n DeleteArgs,\n FindResult,\n DraftFindArgs,\n DraftUpsertArgs,\n DraftDeleteArgs,\n DraftSnapshot,\n} from '../../registry/types.js';\nimport type { Field, RelationshipField } from '../../fields/types.js';\n\n// ============================================================================\n// Drizzle Schema Generator\n// ============================================================================\n\nexport function fieldToDrizzleType(field: Field, dialect: 'postgres' | 'sqlite' = 'postgres'): string {\n switch (field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'textarea':\n case 'color':\n case 'code':\n case 'markdown':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'number':\n return field.integer ? 'integer' : 'decimal';\n case 'checkbox':\n return 'boolean';\n case 'date':\n return 'timestamp';\n case 'select':\n case 'radio':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'richtext':\n case 'json':\n case 'array':\n case 'group':\n case 'blocks':\n case 'row':\n case 'collapsible':\n case 'tabs':\n return 'jsonb';\n case 'relationship':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n case 'upload':\n return dialect === 'sqlite' ? 'text' : 'varchar';\n default:\n return 'jsonb';\n }\n}\n\nexport function collectionToDrizzleSchema(\n collection: CollectionConfig,\n dialect: 'postgres' | 'sqlite' = 'postgres'\n): string {\n const tableName = collection.slug.replace(/-/g, '_');\n const lines: string[] = [];\n \n lines.push(`export const ${tableName} = pgTable('${tableName}', {`);\n \n // Add id field\n lines.push(` id: uuid('id').primaryKey().defaultRandom(),`);\n \n // Process fields\n for (const field of collection.fields) {\n if (field.name === 'id') continue;\n \n const dbType = fieldToDrizzleType(field, dialect);\n const isRequired = field.required;\n \n let fieldDef = ` ${field.name}: pg.${dbType}('${field.name}')`;\n \n // Add constraints\n if (field.unique) fieldDef += '.unique()';\n if (!isRequired) fieldDef += '.nullable()';\n \n // Add default value\n if (field.defaultValue !== undefined) {\n if (typeof field.defaultValue === 'string') {\n fieldDef += `.default('${field.defaultValue}')`;\n } else if (typeof field.defaultValue === 'boolean') {\n fieldDef += `.default(${field.defaultValue})`;\n } else {\n fieldDef += `.default(sql\\`${JSON.stringify(field.defaultValue)}\\`)`;\n }\n }\n \n fieldDef += ',';\n lines.push(fieldDef);\n }\n \n // Add timestamps\n if (collection.timestamps) {\n lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);\n lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);\n }\n \n // Add status field\n lines.push(` _status: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.varchar('_status').default('published'),`);\n lines.push(` _has_draft: ${dialect === 'sqlite' ? 'sqlite' : 'pg'}.boolean('_has_draft').default(false),`);\n \n lines.push('});');\n \n return lines.join('\\n');\n}\n\n// ============================================================================\n// Drizzle Adapter\n// ============================================================================\n\nexport class DrizzleAdapter extends AbstractBaseAdapter {\n private client: any;\n private schema: any;\n private dialect: 'postgres' | 'sqlite';\n private draftsTableReady = false;\n private versionsTableReady = false;\n \n constructor(options: {\n type: 'postgres' | 'sqlite';\n client: any;\n schema?: any;\n }) {\n super();\n this.client = options.client;\n this.schema = options.schema || {};\n this.dialect = options.type;\n }\n\n protected prepareData(data: Record<string, any>, config: CollectionConfig): Record<string, any> {\n const result = super.prepareData(data, config);\n \n // Handle nested tab fields - convert to JSON for storage\n for (const field of config.fields) {\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n const tabData = data[field.name];\n if (tabData && typeof tabData === 'object') {\n // Process list, relationship-block, image, and upload fields inside tabs to preserve full object\n const processedTabData: any = {};\n for (const [key, value] of Object.entries(tabData)) {\n const tabField = field.tabs.flatMap((t: any) => t.fields).find((f: any) => f.name === key);\n if ((tabField?.type === 'upload' || tabField?.type === 'image' || tabField?.type === 'list' || tabField?.type === 'relationship-block') && value) {\n if (Array.isArray(value)) {\n processedTabData[key] = JSON.stringify(value);\n } else if (typeof value === 'object') {\n processedTabData[key] = JSON.stringify(value);\n } else {\n processedTabData[key] = value;\n }\n } else {\n processedTabData[key] = value;\n }\n }\n result[field.name] = JSON.stringify(processedTabData);\n }\n }\n \n // Also handle top-level list, relationship-block, image, and upload fields\n if (['upload', 'image', 'list', 'relationship-block'].includes((field as any).type) && field.name) {\n const value = data[field.name];\n if (value) {\n if (Array.isArray(value)) {\n result[field.name] = JSON.stringify(value);\n } else if (typeof value === 'object') {\n result[field.name] = JSON.stringify(value);\n }\n }\n }\n }\n \n return result;\n }\n\n async connect(): Promise<void> {\n this.connected = true;\n console.log(`[DrizzleAdapter] Connected to ${this.dialect}`);\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n console.log(`[DrizzleAdapter] Disconnected from ${this.dialect}`);\n }\n\n async find<T>(args: FindArgs): Promise<FindResult<T>> {\n const { collection: slug, where = {}, sort, limit = 10, page = 1, tenantID, select, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n // Build query\n const filters = this.buildWhereClause(where, config, table, tenantID);\n \n // Default filter for non-draft requests: only show published\n if (!draft) {\n filters.push(table._status.equals('published'));\n }\n\n const sortOption = this.parseSort(sort);\n\n // Get total count\n const totalDocs = await this.count({ collection: slug, where: { ...where, _status: draft ? undefined : 'published' }, tenantID });\n\n // Execute query\n const offset = (page - 1) * limit;\n \n let results = [];\n try {\n results = await this.client\n .select()\n .from(table)\n .where(filters)\n .orderBy(sortOption.direction === 'asc' ? table[sortOption.field] : undefined)\n .limit(limit)\n .offset(offset);\n } catch (error) {\n console.error(`[DrizzleAdapter] Query error:`, error);\n }\n\n let docs: T[] = results.map((doc: any) => this.processResult(doc, config));\n\n // If draft: true, we need to check if any docs have a separate draft version\n if (draft) {\n docs = await Promise.all(docs.map(async (doc: any) => {\n if (doc._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: doc.id,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n return { ...doc, ...versions.docs[0].data, _has_draft: true, _status: doc._status };\n }\n }\n return doc;\n }));\n }\n\n return {\n docs,\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findByID<T>(args: FindByIDArgs): Promise<T | null> {\n const { collection: slug, id, tenantID, draft } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .select()\n .from(table)\n .where(table.id.equals(id));\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n if (!draft) {\n query = query.where(table._status.equals('published'));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n let doc = this.processResult(results[0], config) as T;\n\n // If draft: true and doc has a separate draft, merge it\n if (draft && (doc as any)._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: (doc as any).id,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: (doc as any)._status };\n }\n }\n\n return doc;\n }\n\n async create<T>(args: CreateArgs): Promise<T> {\n const { collection: slug, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const insertData = this.prepareData(data, config);\n if (tenantID) {\n insertData.tenantId = tenantID;\n }\n\n const result = await this.client\n .insert(table)\n .values(insertData)\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async update<T>(args: UpdateArgs): Promise<T> {\n const { collection: slug, id, data, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const updateData = this.prepareData(data, config);\n if (tenantID) {\n updateData.tenantId = tenantID;\n }\n\n const result = await this.client\n .update(table)\n .set(updateData)\n .where(eq(table.id, id))\n .returning();\n\n return this.processResult(result[0], config) as T;\n }\n\n async delete<T>(args: DeleteArgs): Promise<T> {\n const { collection: slug, id, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n let query = this.client\n .delete(table)\n .where(eq(table.id, id))\n .returning();\n\n if (tenantID) {\n query = query.where(table.tenantId.equals(tenantID));\n }\n\n const result = await query;\n if (result.length === 0) {\n throw new Error(`Document not found: ${slug}/${id}`);\n }\n\n return this.processResult(result[0], config) as T;\n }\n\n async count(args: { collection: string; where?: Record<string, any>; tenantID?: string }): Promise<number> {\n const { collection: slug, where = {}, tenantID } = args;\n const config = this.getCollection(slug);\n const table = this.getTable(slug);\n\n const filters = this.buildWhereClause(where, config, table, tenantID);\n\n try {\n const result = await this.client\n .select({ count: `count(*)` })\n .from(table)\n .where(filters);\n\n return parseInt(result[0]?.count || '0');\n } catch {\n return 0;\n }\n }\n\n async findOne(args: { collection: string; where: Record<string, any>; tenantID?: string; draft?: boolean }): Promise<any> {\n const { collection: slug, where = {}, tenantID, draft } = args;\n \n // Check if it's a Global\n if (slug.startsWith('_globals_')) {\n const globalSlug = slug.replace('_globals_', '');\n const globalConfig = this.globals.get(globalSlug);\n if (!globalConfig) throw new Error(`Global \"${globalSlug}\" not found`);\n \n const table = this.getTable(slug);\n let query = this.client.select().from(table);\n \n if (!draft) {\n query = query.where(table._status.equals('published'));\n }\n\n const results = await query.limit(1);\n if (results.length === 0) return null;\n\n let doc = this.processResult(results[0], globalConfig as any);\n\n // If draft: true and doc has a separate draft, merge it\n if (draft && (doc as any)._has_draft) {\n const versions = await this.findVersions({\n collection: slug,\n documentId: globalSlug,\n limit: 1,\n sort: '-createdAt'\n });\n if (versions.docs.length > 0 && versions.docs[0].status === 'draft') {\n doc = { ...doc, ...versions.docs[0].data, _has_draft: true, _status: (doc as any)._status };\n }\n }\n return doc;\n }\n\n const result = await this.find({ ...args, limit: 1 });\n return result.docs[0] || null;\n }\n\n async findVersions(args: any): Promise<FindResult<any>> {\n await this.ensureVersionsTable();\n const { collection: slug, documentId, limit = 10, page = 1, tenantID } = args;\n\n const offset = (page - 1) * limit;\n \n const countResult = await this.executeRaw(sql`\n SELECT count(*) as count \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n `);\n const totalDocs = parseInt(countResult[0]?.count || '0');\n\n const results = await this.executeRaw(sql`\n SELECT * \n FROM kyro_versions \n WHERE collection_slug = ${slug} \n AND document_id = ${documentId}\n ${tenantID ? sql`AND tenant_id = ${tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${limit}\n OFFSET ${offset}\n `);\n\n return {\n docs: results.map(row => ({\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n })),\n ...this.calculatePagination(page, limit, totalDocs),\n };\n }\n\n async findVersionByID(args: { collection: string; versionId: string; tenantID?: string }): Promise<any> {\n await this.ensureVersionsTable();\n const results = await this.executeRaw(sql`\n SELECT * FROM kyro_versions \n WHERE id = ${args.versionId} \n AND collection_slug = ${args.collection}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n LIMIT 1\n `);\n \n if (results.length === 0) return null;\n const row = results[0];\n return {\n ...row,\n data: typeof row.data === 'string' ? JSON.parse(row.data) : row.data,\n };\n }\n\n async createVersion(args: any): Promise<any> {\n await this.ensureVersionsTable();\n const id = Math.random().toString(36).substring(2, 15);\n const now = new Date().toISOString();\n \n await this.executeRaw(sql`\n INSERT INTO kyro_versions (\n id, collection_slug, document_id, tenant_id, data, status, created_by, change_description, created_at, updated_at\n ) VALUES (\n ${id}, ${args.collection}, ${args.documentId}, ${args.tenantID || null}, \n ${JSON.stringify(args.data)}, ${args.status}, ${args.createdBy || null}, \n ${args.changeDescription || null}, ${now}, ${now}\n )\n `);\n\n // Pruning logic\n const config = this.getCollection(args.collection);\n if (config.versions?.maxPerDoc) {\n await this.deleteVersions({\n collection: args.collection,\n documentId: args.documentId,\n keepLatest: config.versions.maxPerDoc,\n tenantID: args.tenantID,\n });\n }\n\n return this.findVersionByID({ collection: args.collection, versionId: id, tenantID: args.tenantID });\n }\n\n async deleteVersions(args: { collection: string; documentId: string; keepLatest?: number; tenantID?: string }): Promise<void> {\n await this.ensureVersionsTable();\n \n if (args.keepLatest) {\n // Find IDs of latest versions to keep\n const toKeep = await this.executeRaw(sql`\n SELECT id FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n ORDER BY created_at DESC\n LIMIT ${args.keepLatest}\n `);\n \n const keepIds = toKeep.map(r => r.id);\n if (keepIds.length > 0) {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n AND id NOT IN (${sql.join(keepIds.map(id => sql`${id}`), sql`, `)})\n `);\n }\n } else {\n await this.executeRaw(sql`\n DELETE FROM kyro_versions\n WHERE collection_slug = ${args.collection}\n AND document_id = ${args.documentId}\n ${args.tenantID ? sql`AND tenant_id = ${args.tenantID}` : sql``}\n `);\n }\n }\n\n async findDraft<T>(args: DraftFindArgs): Promise<DraftSnapshot<T> | null> {\n await this.ensureDraftsTable();\n\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n const rows = await this.executeRaw<any>(sql`\n SELECT *\n FROM kyro_drafts\n WHERE id = ${draftId}\n LIMIT 1\n `);\n const row = rows[0];\n return row ? this.rowToDraft<T>(row) : null;\n }\n\n async upsertDraft<T>(args: DraftUpsertArgs<T>): Promise<DraftSnapshot<T>> {\n await this.ensureDraftsTable();\n\n const now = new Date().toISOString();\n const draftUpdatedAt = args.draftUpdatedAt || now;\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n const existing = await this.findDraft<T>(args);\n\n if (existing) {\n await this.executeRaw(sql`\n UPDATE kyro_drafts\n SET\n data = ${JSON.stringify(args.data)},\n base_updated_at = ${args.baseUpdatedAt ?? null},\n draft_updated_at = ${draftUpdatedAt},\n updated_at = ${now}\n WHERE id = ${draftId}\n `);\n } else {\n await this.executeRaw(sql`\n INSERT INTO kyro_drafts (\n id, collection_slug, document_id, tenant_id, data, base_updated_at, draft_updated_at, created_at, updated_at\n ) VALUES (\n ${draftId},\n ${args.collection},\n ${args.documentId},\n ${args.tenantID ?? null},\n ${JSON.stringify(args.data)},\n ${args.baseUpdatedAt ?? null},\n ${draftUpdatedAt},\n ${now},\n ${now}\n )\n `);\n }\n\n const saved = await this.findDraft<T>(args);\n if (!saved) {\n throw new Error('Failed to persist draft snapshot');\n }\n return saved;\n }\n\n async deleteDraft(args: DraftDeleteArgs): Promise<void> {\n await this.ensureDraftsTable();\n\n const draftId = this.getDraftId(args.collection, args.documentId, args.tenantID);\n await this.executeRaw(sql`\n DELETE FROM kyro_drafts\n WHERE id = ${draftId}\n `);\n }\n\n // ========================================================================\n // Helper Methods\n // ========================================================================\n\n private getTable(slug: string): any {\n const tableName = this.getTableName(slug);\n const table = this.schema[tableName];\n if (!table) {\n throw new Error(`Table \"${tableName}\" not found in schema`);\n }\n return table;\n }\n\n private buildWhereClause(\n where: Record<string, any>,\n config: CollectionConfig,\n table: any,\n tenantID?: string\n ): any {\n // Simplified where clause builder\n const conditions: any[] = [];\n\n // Apply tenant filter\n if (tenantID && config.tenantScoped) {\n conditions.push({ tenantId: tenantID });\n }\n\n // Process where conditions\n for (const [key, value] of Object.entries(where)) {\n if (key === 'AND' && Array.isArray(value)) {\n // AND conditions\n for (const subCondition of value) {\n conditions.push(...Object.entries(subCondition).map(([k, v]) => ({ [k]: v })));\n }\n } else if (key === 'OR' && Array.isArray(value)) {\n // OR conditions - simplified\n conditions.push(...value.flatMap((v: any) => \n Object.entries(v).map(([k, val]) => ({ [k]: val }))\n ));\n } else if (typeof value === 'object' && value !== null) {\n // Operator-based conditions\n if (value.equals !== undefined) conditions.push(eq(table[key], value.equals));\n if (value.not_equals !== undefined) conditions.push({ [key]: { not: value.not_equals } });\n if (value.in) conditions.push({ [key]: { in: value.in } });\n if (value.like) conditions.push({ [key]: { like: value.like } });\n if (value.greater_than !== undefined) conditions.push({ [key]: { gt: value.greater_than } });\n if (value.greater_than_equal !== undefined) conditions.push({ [key]: { gte: value.greater_than_equal } });\n if (value.less_than !== undefined) conditions.push({ [key]: { lt: value.less_than } });\n if (value.less_than_equal !== undefined) conditions.push({ [key]: { lte: value.less_than_equal } });\n } else {\n // Direct equality\n conditions.push({ [key]: value });\n }\n }\n\n return conditions.length > 0 ? conditions : undefined;\n }\n\n private processResult(data: any, config: CollectionConfig): any {\n if (!data) return null;\n\n const result = { ...data };\n\n // Convert id field\n if (data.id) {\n result.id = String(data.id);\n }\n\n // Parse JSON fields and upload/image fields\n for (const field of config.fields) {\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((field as any).type)) {\n const f = field as any;\n if (result[f.name] && typeof result[f.name] === 'string') {\n try {\n const parsed = JSON.parse(result[f.name]);\n result[f.name] = parsed;\n } catch {\n // Keep original value\n }\n }\n }\n \n // Handle nested tab fields - build nested structure\n if (field.type === 'tabs' && 'tabs' in field && field.name) {\n const tabData: any = {};\n for (const tab of field.tabs) {\n for (const tabField of tab.fields) {\n if (tabField.name && result[tabField.name] !== undefined) {\n let value = result[tabField.name];\n // Parse JSON types and upload/image/list/relationship-block fields\n if (['json', 'richtext', 'array', 'group', 'blocks', 'upload', 'image', 'list', 'relationship-block'].includes((tabField as any).type)) {\n if (value && typeof value === 'string') {\n try {\n value = JSON.parse(value);\n } catch {\n // Keep original value\n }\n }\n }\n tabData[tabField.name] = value;\n // Remove from top level\n delete result[tabField.name];\n }\n }\n }\n result[field.name] = tabData;\n }\n }\n\n // Convert timestamps to ISO strings\n if (result.createdAt) {\n result.createdAt = new Date(result.createdAt).toISOString();\n }\n if (result.updatedAt) {\n result.updatedAt = new Date(result.updatedAt).toISOString();\n }\n\n return result;\n }\n\n private async ensureDraftsTable(): Promise<void> {\n if (this.draftsTableReady) return;\n\n const createTableSQL = sql.raw(`\n CREATE TABLE IF NOT EXISTS kyro_drafts (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n base_updated_at text,\n draft_updated_at text NOT NULL,\n created_at text NOT NULL,\n updated_at text NOT NULL\n )\n `);\n\n await this.executeRaw(createTableSQL);\n this.draftsTableReady = true;\n }\n\n private async ensureVersionsTable(): Promise<void> {\n if (this.versionsTableReady) return;\n\n const createTableSQL = sql.raw(`\n CREATE TABLE IF NOT EXISTS kyro_versions (\n id text PRIMARY KEY,\n collection_slug text NOT NULL,\n document_id text NOT NULL,\n tenant_id text,\n data text NOT NULL,\n status text NOT NULL,\n created_by text,\n change_description text,\n created_at text NOT NULL,\n updated_at text NOT NULL\n )\n `);\n\n await this.executeRaw(createTableSQL);\n this.versionsTableReady = true;\n }\n\n private getDraftId(collection: string, documentId: string, tenantID?: string): string {\n return `${collection}::${documentId}::${tenantID || 'global'}`;\n }\n\n private async executeRaw<T = any>(query: any): Promise<T[]> {\n const result = await this.client.execute(query);\n if (Array.isArray(result)) {\n return result as T[];\n }\n if (Array.isArray(result?.rows)) {\n return result.rows as T[];\n }\n if (Array.isArray(result?.[0])) {\n return result[0] as T[];\n }\n return [];\n }\n\n private rowToDraft<T>(row: any): DraftSnapshot<T> {\n return {\n id: String(row.id),\n collection: row.collection_slug,\n documentId: row.document_id,\n tenantID: row.tenant_id ?? undefined,\n data: row.data ? JSON.parse(row.data) : {},\n baseUpdatedAt: row.base_updated_at ?? null,\n draftUpdatedAt: row.draft_updated_at,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\nexport function createDrizzleAdapter(options: {\n type: 'postgres' | 'sqlite';\n client: any;\n schema?: any;\n}): DrizzleAdapter {\n return new DrizzleAdapter(options);\n}\n"]}
|
|
@@ -40,13 +40,13 @@ function fieldToDrizzleType(field, dialect = "postgres") {
|
|
|
40
40
|
function collectionToDrizzleSchema(collection, dialect = "postgres") {
|
|
41
41
|
const tableName = collection.slug.replace(/-/g, "_");
|
|
42
42
|
const lines = [];
|
|
43
|
-
lines.push(`export const ${tableName} =
|
|
44
|
-
lines.push(` id:
|
|
43
|
+
lines.push(`export const ${tableName} = pgTable('${tableName}', {`);
|
|
44
|
+
lines.push(` id: uuid('id').primaryKey().defaultRandom(),`);
|
|
45
45
|
for (const field of collection.fields) {
|
|
46
46
|
if (field.name === "id") continue;
|
|
47
47
|
const dbType = fieldToDrizzleType(field, dialect);
|
|
48
48
|
const isRequired = field.required;
|
|
49
|
-
let fieldDef = ` ${field.name}:
|
|
49
|
+
let fieldDef = ` ${field.name}: pg.${dbType}('${field.name}')`;
|
|
50
50
|
if (field.unique) fieldDef += ".unique()";
|
|
51
51
|
if (!isRequired) fieldDef += ".nullable()";
|
|
52
52
|
if (field.defaultValue !== void 0) {
|
|
@@ -62,11 +62,11 @@ function collectionToDrizzleSchema(collection, dialect = "postgres") {
|
|
|
62
62
|
lines.push(fieldDef);
|
|
63
63
|
}
|
|
64
64
|
if (collection.timestamps) {
|
|
65
|
-
lines.push(` createdAt:
|
|
66
|
-
lines.push(` updatedAt:
|
|
65
|
+
lines.push(` createdAt: pg.timestamp('created_at').defaultNow(),`);
|
|
66
|
+
lines.push(` updatedAt: pg.timestamp('updated_at').defaultNow(),`);
|
|
67
67
|
}
|
|
68
|
-
lines.push(` _status: ${dialect === "sqlite" ? "
|
|
69
|
-
lines.push(` _has_draft: ${dialect === "sqlite" ? "
|
|
68
|
+
lines.push(` _status: ${dialect === "sqlite" ? "sqlite" : "pg"}.varchar('_status').default('published'),`);
|
|
69
|
+
lines.push(` _has_draft: ${dialect === "sqlite" ? "sqlite" : "pg"}.boolean('_has_draft').default(false),`);
|
|
70
70
|
lines.push("});");
|
|
71
71
|
return lines.join("\n");
|
|
72
72
|
}
|
|
@@ -518,63 +518,38 @@ var DrizzleAdapter = class extends AbstractBaseAdapter {
|
|
|
518
518
|
}
|
|
519
519
|
async ensureDraftsTable() {
|
|
520
520
|
if (this.draftsTableReady) return;
|
|
521
|
-
const createTableSQL =
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
CREATE TABLE IF NOT EXISTS kyro_drafts (
|
|
535
|
-
id text PRIMARY KEY,
|
|
536
|
-
collection_slug text NOT NULL,
|
|
537
|
-
document_id text NOT NULL,
|
|
538
|
-
tenant_id text,
|
|
539
|
-
data text NOT NULL,
|
|
540
|
-
base_updated_at text,
|
|
541
|
-
draft_updated_at text NOT NULL,
|
|
542
|
-
created_at text NOT NULL,
|
|
543
|
-
updated_at text NOT NULL
|
|
544
|
-
)
|
|
545
|
-
`);
|
|
521
|
+
const createTableSQL = sql.raw(`
|
|
522
|
+
CREATE TABLE IF NOT EXISTS kyro_drafts (
|
|
523
|
+
id text PRIMARY KEY,
|
|
524
|
+
collection_slug text NOT NULL,
|
|
525
|
+
document_id text NOT NULL,
|
|
526
|
+
tenant_id text,
|
|
527
|
+
data text NOT NULL,
|
|
528
|
+
base_updated_at text,
|
|
529
|
+
draft_updated_at text NOT NULL,
|
|
530
|
+
created_at text NOT NULL,
|
|
531
|
+
updated_at text NOT NULL
|
|
532
|
+
)
|
|
533
|
+
`);
|
|
546
534
|
await this.executeRaw(createTableSQL);
|
|
547
535
|
this.draftsTableReady = true;
|
|
548
536
|
}
|
|
549
537
|
async ensureVersionsTable() {
|
|
550
538
|
if (this.versionsTableReady) return;
|
|
551
|
-
const createTableSQL =
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
CREATE TABLE IF NOT EXISTS kyro_versions (
|
|
566
|
-
id text PRIMARY KEY,
|
|
567
|
-
collection_slug text NOT NULL,
|
|
568
|
-
document_id text NOT NULL,
|
|
569
|
-
tenant_id text,
|
|
570
|
-
data text NOT NULL,
|
|
571
|
-
status text NOT NULL,
|
|
572
|
-
created_by text,
|
|
573
|
-
change_description text,
|
|
574
|
-
created_at text NOT NULL,
|
|
575
|
-
updated_at text NOT NULL
|
|
576
|
-
)
|
|
577
|
-
`);
|
|
539
|
+
const createTableSQL = sql.raw(`
|
|
540
|
+
CREATE TABLE IF NOT EXISTS kyro_versions (
|
|
541
|
+
id text PRIMARY KEY,
|
|
542
|
+
collection_slug text NOT NULL,
|
|
543
|
+
document_id text NOT NULL,
|
|
544
|
+
tenant_id text,
|
|
545
|
+
data text NOT NULL,
|
|
546
|
+
status text NOT NULL,
|
|
547
|
+
created_by text,
|
|
548
|
+
change_description text,
|
|
549
|
+
created_at text NOT NULL,
|
|
550
|
+
updated_at text NOT NULL
|
|
551
|
+
)
|
|
552
|
+
`);
|
|
578
553
|
await this.executeRaw(createTableSQL);
|
|
579
554
|
this.versionsTableReady = true;
|
|
580
555
|
}
|
|
@@ -613,5 +588,5 @@ function createDrizzleAdapter(options) {
|
|
|
613
588
|
}
|
|
614
589
|
|
|
615
590
|
export { DrizzleAdapter, collectionToDrizzleSchema, createDrizzleAdapter, fieldToDrizzleType };
|
|
616
|
-
//# sourceMappingURL=chunk-
|
|
617
|
-
//# sourceMappingURL=chunk-
|
|
591
|
+
//# sourceMappingURL=chunk-C4JJEE42.js.map
|
|
592
|
+
//# sourceMappingURL=chunk-C4JJEE42.js.map
|