@trycompai/db 1.3.22 → 2.0.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/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -3
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/postinstall.js +1 -1
- package/dist/scripts/backfill-framework-versions.d.ts +6 -0
- package/dist/scripts/backfill-framework-versions.d.ts.map +1 -0
- package/dist/scripts/backfill-framework-versions.js +142 -0
- package/package.json +58 -55
- package/dist/client.ts +0 -4
- package/dist/index.ts +0 -2
- package/dist/schema.prisma +0 -2193
package/dist/client.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PrismaClient } from '@prisma/client';
|
|
2
|
-
export declare const db: PrismaClient<import("@prisma/client").Prisma.PrismaClientOptions, never, import("@prisma/client/runtime/
|
|
2
|
+
export declare const db: PrismaClient<import("@prisma/client").Prisma.PrismaClientOptions, never, import("@prisma/client/runtime/client").DefaultArgs>;
|
|
3
3
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6B9C,eAAO,MAAM,EAAE,+HAAiD,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -2,10 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.db = void 0;
|
|
4
4
|
const client_1 = require("@prisma/client");
|
|
5
|
+
const adapter_pg_1 = require("@prisma/adapter-pg");
|
|
5
6
|
const globalForPrisma = global;
|
|
6
|
-
|
|
7
|
-
new
|
|
8
|
-
|
|
7
|
+
function stripSslMode(connectionString) {
|
|
8
|
+
const url = new URL(connectionString);
|
|
9
|
+
url.searchParams.delete('sslmode');
|
|
10
|
+
return url.toString();
|
|
11
|
+
}
|
|
12
|
+
function createPrismaClient() {
|
|
13
|
+
const rawUrl = process.env.DATABASE_URL;
|
|
14
|
+
const isLocalhost = /localhost|127\.0\.0\.1|::1/.test(rawUrl);
|
|
15
|
+
// Use verified SSL when NODE_EXTRA_CA_CERTS is set (Docker with RDS CA bundle),
|
|
16
|
+
// otherwise fall back to unverified SSL (Trigger.dev, Vercel, other environments).
|
|
17
|
+
const hasCABundle = !!process.env.NODE_EXTRA_CA_CERTS;
|
|
18
|
+
const ssl = isLocalhost ? undefined : hasCABundle ? true : { rejectUnauthorized: false };
|
|
19
|
+
// Strip sslmode from the connection string to avoid conflicts with the explicit ssl option
|
|
20
|
+
const url = ssl !== undefined ? stripSslMode(rawUrl) : rawUrl;
|
|
21
|
+
const adapter = new adapter_pg_1.PrismaPg({ connectionString: url, ssl });
|
|
22
|
+
return new client_1.PrismaClient({
|
|
23
|
+
adapter,
|
|
24
|
+
transactionOptions: {
|
|
25
|
+
timeout: 60000,
|
|
26
|
+
},
|
|
9
27
|
});
|
|
28
|
+
}
|
|
29
|
+
exports.db = globalForPrisma.prisma || createPrismaClient();
|
|
10
30
|
if (process.env.NODE_ENV !== 'production')
|
|
11
31
|
globalForPrisma.prisma = exports.db;
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.db = void 0;
|
|
18
17
|
__exportStar(require("@prisma/client"), exports);
|
|
19
|
-
var client_1 = require("./client");
|
|
20
|
-
Object.defineProperty(exports, "db", { enumerable: true, get: function () { return client_1.db; } });
|
package/dist/postinstall.js
CHANGED
|
@@ -22,7 +22,7 @@ function generatePrismaClient(options = {}) {
|
|
|
22
22
|
(0, node_fs_1.mkdirSync)(schemaDir, { recursive: true });
|
|
23
23
|
(0, node_fs_1.copyFileSync)(resolution.path, schemaDestination);
|
|
24
24
|
log(`Copied schema from ${resolution.path} to ${schemaDestination}`);
|
|
25
|
-
const clientEntryPoint = (0, node_path_1.resolve)(projectRoot, '
|
|
25
|
+
const clientEntryPoint = (0, node_path_1.resolve)(projectRoot, 'src', 'generated', 'prisma', 'client.ts');
|
|
26
26
|
if (!options.force && (0, node_fs_1.existsSync)(clientEntryPoint)) {
|
|
27
27
|
log('Prisma client already exists. Skipping generation.');
|
|
28
28
|
return { schema: schemaDestination };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backfill-framework-versions.d.ts","sourceRoot":"","sources":["../../src/scripts/backfill-framework-versions.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAkBD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,cAAc,CAAC,CAiEzE"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.backfillFrameworkVersions = backfillFrameworkVersions;
|
|
4
|
+
const client_1 = require("@prisma/client");
|
|
5
|
+
const client_2 = require("../client");
|
|
6
|
+
async function backfillFrameworkVersions() {
|
|
7
|
+
const frameworks = await client_2.db.frameworkEditorFramework.findMany({
|
|
8
|
+
include: {
|
|
9
|
+
requirements: {
|
|
10
|
+
include: {
|
|
11
|
+
controlTemplates: {
|
|
12
|
+
include: {
|
|
13
|
+
requirements: true,
|
|
14
|
+
policyTemplates: true,
|
|
15
|
+
taskTemplates: true,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
let versionsCreated = 0;
|
|
23
|
+
for (const framework of frameworks) {
|
|
24
|
+
const manifest = buildManifestFromFramework(framework);
|
|
25
|
+
try {
|
|
26
|
+
await client_2.db.frameworkVersion.create({
|
|
27
|
+
data: {
|
|
28
|
+
frameworkId: framework.id,
|
|
29
|
+
version: '1.0.0',
|
|
30
|
+
manifest: manifest,
|
|
31
|
+
releaseNotes: 'Initial version (backfilled).',
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
versionsCreated += 1;
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof client_1.Prisma.PrismaClientKnownRequestError && err.code === 'P2002') {
|
|
38
|
+
// Raced with another backfill run — already created. Not counted.
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
throw err;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Backfill instances
|
|
46
|
+
const versions = await client_2.db.frameworkVersion.findMany({
|
|
47
|
+
where: { version: '1.0.0' },
|
|
48
|
+
select: { id: true, frameworkId: true },
|
|
49
|
+
});
|
|
50
|
+
const byFrameworkId = new Map(versions.map((v) => [v.frameworkId, v.id]));
|
|
51
|
+
const toBackfill = await client_2.db.frameworkInstance.findMany({
|
|
52
|
+
where: { currentVersionId: null, frameworkId: { not: null } },
|
|
53
|
+
select: { id: true, frameworkId: true },
|
|
54
|
+
});
|
|
55
|
+
let instancesBackfilled = 0;
|
|
56
|
+
for (const inst of toBackfill) {
|
|
57
|
+
const versionId = byFrameworkId.get(inst.frameworkId);
|
|
58
|
+
if (!versionId)
|
|
59
|
+
continue;
|
|
60
|
+
await client_2.db.frameworkInstance.update({
|
|
61
|
+
where: { id: inst.id },
|
|
62
|
+
data: { currentVersionId: versionId },
|
|
63
|
+
});
|
|
64
|
+
instancesBackfilled += 1;
|
|
65
|
+
}
|
|
66
|
+
return { versionsCreated, instancesBackfilled };
|
|
67
|
+
}
|
|
68
|
+
function buildManifestFromFramework(framework) {
|
|
69
|
+
// Collect all unique control templates across all requirements
|
|
70
|
+
const controlTemplateMap = new Map();
|
|
71
|
+
for (const req of framework.requirements) {
|
|
72
|
+
for (const ct of req.controlTemplates) {
|
|
73
|
+
if (!controlTemplateMap.has(ct.id)) {
|
|
74
|
+
controlTemplateMap.set(ct.id, ct);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const controlTemplates = [...controlTemplateMap.values()];
|
|
79
|
+
// Filter each control's requirementIds down to requirements belonging to
|
|
80
|
+
// this framework — control templates are shared across frameworks via M:N,
|
|
81
|
+
// so `ct.requirements` can contain IDs for requirements on other frameworks.
|
|
82
|
+
const ownRequirementIds = new Set(framework.requirements.map((r) => r.id));
|
|
83
|
+
return {
|
|
84
|
+
framework: {
|
|
85
|
+
id: framework.id,
|
|
86
|
+
name: framework.name,
|
|
87
|
+
catalogVersion: framework.version,
|
|
88
|
+
description: framework.description,
|
|
89
|
+
},
|
|
90
|
+
requirements: framework.requirements.map((r) => ({
|
|
91
|
+
id: r.id,
|
|
92
|
+
identifier: r.identifier,
|
|
93
|
+
name: r.name,
|
|
94
|
+
description: r.description,
|
|
95
|
+
})),
|
|
96
|
+
controls: controlTemplates.map((c) => ({
|
|
97
|
+
id: c.id,
|
|
98
|
+
name: c.name,
|
|
99
|
+
description: c.description,
|
|
100
|
+
requirementIds: c.requirements
|
|
101
|
+
.map((r) => r.id)
|
|
102
|
+
.filter((id) => ownRequirementIds.has(id)),
|
|
103
|
+
policyIds: c.policyTemplates.map((p) => p.id),
|
|
104
|
+
taskIds: c.taskTemplates.map((t) => t.id),
|
|
105
|
+
documentTypes: [...c.documentTypes],
|
|
106
|
+
})),
|
|
107
|
+
policies: dedupeById(controlTemplates.flatMap((c) => c.policyTemplates.map((p) => ({
|
|
108
|
+
id: p.id,
|
|
109
|
+
name: p.name,
|
|
110
|
+
description: p.description,
|
|
111
|
+
content: p.content,
|
|
112
|
+
frequency: p.frequency,
|
|
113
|
+
department: p.department,
|
|
114
|
+
})))),
|
|
115
|
+
tasks: dedupeById(controlTemplates.flatMap((c) => c.taskTemplates.map((t) => ({
|
|
116
|
+
id: t.id,
|
|
117
|
+
name: t.name,
|
|
118
|
+
description: t.description,
|
|
119
|
+
frequency: t.frequency,
|
|
120
|
+
department: t.department,
|
|
121
|
+
})))),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function dedupeById(items) {
|
|
125
|
+
const seen = new Map();
|
|
126
|
+
for (const item of items) {
|
|
127
|
+
if (!seen.has(item.id))
|
|
128
|
+
seen.set(item.id, item);
|
|
129
|
+
}
|
|
130
|
+
return [...seen.values()];
|
|
131
|
+
}
|
|
132
|
+
if (require.main === module) {
|
|
133
|
+
backfillFrameworkVersions()
|
|
134
|
+
.then((result) => {
|
|
135
|
+
console.log('Backfill complete:', result);
|
|
136
|
+
process.exit(0);
|
|
137
|
+
})
|
|
138
|
+
.catch((err) => {
|
|
139
|
+
console.error('Backfill failed:', err);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
});
|
|
142
|
+
}
|
package/package.json
CHANGED
|
@@ -1,59 +1,62 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
"devDependencies": {
|
|
11
|
-
"@types/node": "^24.2.0",
|
|
12
|
-
"prisma": "6.18.0",
|
|
13
|
-
"ts-node": "^10.9.2",
|
|
14
|
-
"typescript": "^5.9.2"
|
|
15
|
-
},
|
|
16
|
-
"exports": {
|
|
17
|
-
".": {
|
|
18
|
-
"import": "./dist/index.js",
|
|
19
|
-
"types": "./src/index.ts",
|
|
20
|
-
"default": "./dist/index.js"
|
|
2
|
+
"name": "@trycompai/db",
|
|
3
|
+
"description": "Database package with Prisma client and schema for Comp AI",
|
|
4
|
+
"version": "2.0.1",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"@prisma/adapter-pg": "7.6.0",
|
|
7
|
+
"@prisma/client": "7.6.0",
|
|
8
|
+
"dotenv": "^16.4.5",
|
|
9
|
+
"zod": "^4.3.6"
|
|
21
10
|
},
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@types/node": "^24.2.0",
|
|
13
|
+
"prisma": "7.6.0",
|
|
14
|
+
"ts-node": "^10.9.2",
|
|
15
|
+
"typescript": "^5.9.2"
|
|
16
|
+
},
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./src/index.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./postinstall": {
|
|
24
|
+
"import": "./dist/postinstall.js",
|
|
25
|
+
"types": "./src/postinstall.ts",
|
|
26
|
+
"default": "./dist/postinstall.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"bin": {
|
|
30
|
+
"comp-prisma-postinstall": "./dist/postinstall.js"
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"README.md",
|
|
35
|
+
"INTEGRATION_GUIDE.md"
|
|
36
|
+
],
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "git+https://github.com/trycompai/comp.git",
|
|
43
|
+
"directory": "packages/db"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"backfill:framework-versions": "bun src/scripts/backfill-framework-versions.ts",
|
|
47
|
+
"build": "rm -rf dist && node scripts/generate-prisma-client-js.js && tsc",
|
|
48
|
+
"check-types": "tsc --noEmit",
|
|
49
|
+
"db:generate": "node scripts/generate-prisma-client-js.js",
|
|
50
|
+
"db:migrate": "prisma migrate dev",
|
|
51
|
+
"db:migrate:reset": "prisma migrate reset",
|
|
52
|
+
"db:push": "prisma db push",
|
|
53
|
+
"db:seed": "bun prisma/seed/seed.ts",
|
|
54
|
+
"db:studio": "prisma studio",
|
|
55
|
+
"docker:clean": "docker compose down -v",
|
|
56
|
+
"docker:down": "docker compose down",
|
|
57
|
+
"docker:up": "docker compose up -d",
|
|
58
|
+
"lint": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json}' 'prisma/**/*.prisma' && tsc --noEmit",
|
|
59
|
+
"postinstall": "node scripts/generate-prisma-client-js.js || true",
|
|
60
|
+
"prepublishOnly": "bun run build"
|
|
26
61
|
}
|
|
27
|
-
},
|
|
28
|
-
"bin": {
|
|
29
|
-
"comp-prisma-postinstall": "./dist/postinstall.js"
|
|
30
|
-
},
|
|
31
|
-
"files": [
|
|
32
|
-
"dist",
|
|
33
|
-
"README.md",
|
|
34
|
-
"INTEGRATION_GUIDE.md"
|
|
35
|
-
],
|
|
36
|
-
"publishConfig": {
|
|
37
|
-
"access": "public"
|
|
38
|
-
},
|
|
39
|
-
"repository": {
|
|
40
|
-
"type": "git",
|
|
41
|
-
"url": "git+https://github.com/trycompai/comp.git",
|
|
42
|
-
"directory": "packages/db"
|
|
43
|
-
},
|
|
44
|
-
"scripts": {
|
|
45
|
-
"build": "rm -rf dist && rm -rf ./prisma/generated && node scripts/combine-schemas.js && prisma generate --schema=dist/schema.prisma && tsc",
|
|
46
|
-
"check-types": "tsc --noEmit",
|
|
47
|
-
"db:generate": "node scripts/combine-schemas.js && prisma generate --schema=dist/schema.prisma",
|
|
48
|
-
"db:migrate": "prisma migrate dev",
|
|
49
|
-
"db:migrate:reset": "prisma migrate reset",
|
|
50
|
-
"db:push": "prisma db push",
|
|
51
|
-
"db:seed": "bun prisma/seed/seed.ts",
|
|
52
|
-
"db:studio": "prisma studio",
|
|
53
|
-
"docker:clean": "docker compose down -v",
|
|
54
|
-
"docker:down": "docker compose down",
|
|
55
|
-
"docker:up": "docker compose up -d",
|
|
56
|
-
"lint": "prettier --check 'src/**/*.{ts,tsx,js,jsx,json}' 'prisma/**/*.prisma' && tsc --noEmit",
|
|
57
|
-
"prepublishOnly": "bun run build"
|
|
58
|
-
}
|
|
59
62
|
}
|
package/dist/client.ts
DELETED
package/dist/index.ts
DELETED