@lssm/app.cli-database 1.10.0 → 1.11.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/_virtual/rolldown_runtime.mjs +7 -1
- package/dist/cli.mjs +41 -2
- package/dist/commands/check.mjs +34 -2
- package/dist/commands/generate.mjs +9 -2
- package/dist/commands/import.mjs +95 -2
- package/dist/commands/migrate.mjs +20 -2
- package/dist/commands/seed.mjs +14 -2
- package/dist/index.mjs +4 -1
- package/dist/lib/client.d.mts +1 -2
- package/dist/lib/client.mjs +17 -2
- package/dist/lib/config.d.mts +1 -2
- package/dist/lib/config.mjs +7 -2
- package/dist/lib/types.d.mts +1 -2
- package/package.json +9 -5
- package/dist/cli.mjs.map +0 -1
- package/dist/commands/check.mjs.map +0 -1
- package/dist/commands/generate.mjs.map +0 -1
- package/dist/commands/import.mjs.map +0 -1
- package/dist/commands/migrate.mjs.map +0 -1
- package/dist/commands/seed.mjs.map +0 -1
- package/dist/lib/client.d.mts.map +0 -1
- package/dist/lib/client.mjs.map +0 -1
- package/dist/lib/config.d.mts.map +0 -1
- package/dist/lib/config.mjs.map +0 -1
- package/dist/lib/types.d.mts.map +0 -1
|
@@ -1 +1,7 @@
|
|
|
1
|
-
import{createRequire
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
|
|
3
|
+
//#region rolldown:runtime
|
|
4
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { __require };
|
package/dist/cli.mjs
CHANGED
|
@@ -1,3 +1,42 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import { runImport } from "./commands/import.mjs";
|
|
3
|
+
import { runCheck } from "./commands/check.mjs";
|
|
4
|
+
import { runGenerate } from "./commands/generate.mjs";
|
|
5
|
+
import { runMigrate } from "./commands/migrate.mjs";
|
|
6
|
+
import { runSeed } from "./commands/seed.mjs";
|
|
7
|
+
import mri from "minimist";
|
|
8
|
+
|
|
9
|
+
//#region src/cli.ts
|
|
10
|
+
async function main() {
|
|
11
|
+
const argv = mri(process.argv.slice(2));
|
|
12
|
+
const [cmd] = argv._;
|
|
13
|
+
switch (cmd) {
|
|
14
|
+
case "import":
|
|
15
|
+
await runImport(argv);
|
|
16
|
+
break;
|
|
17
|
+
case "check":
|
|
18
|
+
await runCheck(argv);
|
|
19
|
+
break;
|
|
20
|
+
case "generate":
|
|
21
|
+
await runGenerate(argv);
|
|
22
|
+
break;
|
|
23
|
+
case "migrate:dev":
|
|
24
|
+
case "migrate:deploy":
|
|
25
|
+
case "migrate:status":
|
|
26
|
+
await runMigrate(cmd, argv);
|
|
27
|
+
break;
|
|
28
|
+
case "seed":
|
|
29
|
+
await runSeed(argv);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
console.error("Usage: database <import|check|generate|migrate:dev|migrate:deploy|migrate:status|seed>");
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
main().catch((err) => {
|
|
37
|
+
console.error(err);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { };
|
package/dist/commands/check.mjs
CHANGED
|
@@ -1,2 +1,34 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import crypto from "node:crypto";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/check.ts
|
|
6
|
+
function sha256(content) {
|
|
7
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
8
|
+
}
|
|
9
|
+
async function runCheck(argv) {
|
|
10
|
+
const target = argv.target || process.cwd();
|
|
11
|
+
const lockPath = path.join(target, "prisma", "schema", "imported", "imported.lock.json");
|
|
12
|
+
if (!fs.existsSync(lockPath)) {
|
|
13
|
+
console.error("No imported.lock.json found. Run: database import");
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
const lock = JSON.parse(fs.readFileSync(lockPath, "utf8"));
|
|
17
|
+
let ok = true;
|
|
18
|
+
for (const e of lock.entries) {
|
|
19
|
+
if (!fs.existsSync(e.sourcePath)) {
|
|
20
|
+
console.error(`Missing source: ${e.sourcePath}`);
|
|
21
|
+
ok = false;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (sha256(fs.readFileSync(e.sourcePath, "utf8")) !== e.sha256) {
|
|
25
|
+
console.error(`Drift detected for ${e.moduleName} (${e.sourcePath})`);
|
|
26
|
+
ok = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (!ok) process.exit(2);
|
|
30
|
+
console.log("Imported schemas are in sync with lock.");
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { runCheck };
|
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
import{execa
|
|
2
|
-
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/generate.ts
|
|
4
|
+
async function runGenerate(argv) {
|
|
5
|
+
await execa("prisma", ["generate"], { stdio: "inherit" });
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { runGenerate };
|
package/dist/commands/import.mjs
CHANGED
|
@@ -1,2 +1,95 @@
|
|
|
1
|
-
import{__require
|
|
2
|
-
|
|
1
|
+
import { __require } from "../_virtual/rolldown_runtime.mjs";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import crypto from "node:crypto";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
|
|
7
|
+
//#region src/commands/import.ts
|
|
8
|
+
function sha256(content) {
|
|
9
|
+
return crypto.createHash("sha256").update(content).digest("hex");
|
|
10
|
+
}
|
|
11
|
+
function stripDatasourceAndGenerators(schema) {
|
|
12
|
+
return schema.replace(/datasource\s+\w+\s*\{[\s\S]*?\}/g, "").replace(/generator\s+\w+\s*\{[\s\S]*?\}/g, "").trim();
|
|
13
|
+
}
|
|
14
|
+
async function runImport(argv) {
|
|
15
|
+
const target = argv.target || process.cwd();
|
|
16
|
+
const modulesArg = argv.modules || "";
|
|
17
|
+
async function loadModulesFromMergerConfig() {
|
|
18
|
+
const candidates = [
|
|
19
|
+
path.join(target, "prisma-merger.config.ts"),
|
|
20
|
+
path.join(target, "prisma-merger.config.mts"),
|
|
21
|
+
path.join(target, "prisma-merger.config.js"),
|
|
22
|
+
path.join(target, "prisma-merger.config.mjs"),
|
|
23
|
+
path.join(target, "prisma-merger.config.cjs"),
|
|
24
|
+
path.join(target, "prisma-merger.config.json")
|
|
25
|
+
];
|
|
26
|
+
for (const file of candidates) {
|
|
27
|
+
if (!fs.existsSync(file)) continue;
|
|
28
|
+
if (file.endsWith(".json")) {
|
|
29
|
+
const json = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
30
|
+
if (Array.isArray(json.modules) && json.modules.length > 0) return json.modules;
|
|
31
|
+
} else if (file.endsWith(".ts") || file.endsWith(".mts")) {
|
|
32
|
+
const match = fs.readFileSync(file, "utf8").match(/modules\s*:\s*\[([\s\S]*?)\]/m);
|
|
33
|
+
if (Array.isArray(match) && typeof match[1] === "string") {
|
|
34
|
+
const arr = match[1] || "";
|
|
35
|
+
const mods = [];
|
|
36
|
+
const re = /['\"]([^'\"]+)['\"]/g;
|
|
37
|
+
let m;
|
|
38
|
+
while (m = re.exec(arr)) {
|
|
39
|
+
const val = m[1] ?? "";
|
|
40
|
+
if (val) mods.push(val);
|
|
41
|
+
}
|
|
42
|
+
if (mods.length > 0) return mods;
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
const mod = await import(pathToFileURL(file).href);
|
|
46
|
+
const cfg = mod.default || mod;
|
|
47
|
+
if (Array.isArray(cfg.modules) && cfg.modules.length > 0) return cfg.modules;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
let modules = modulesArg.split(",").map((s) => s.trim()).filter(Boolean);
|
|
53
|
+
if (modules.length === 0) {
|
|
54
|
+
const fromCfg = await loadModulesFromMergerConfig();
|
|
55
|
+
if (fromCfg) modules = fromCfg;
|
|
56
|
+
}
|
|
57
|
+
if (modules.length === 0) {
|
|
58
|
+
console.error("No modules specified. Provide --modules or define prisma-merger.config.ts { modules: [...] }");
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const importedDir = path.join(target, "prisma", "schema", "imported");
|
|
62
|
+
fs.mkdirSync(importedDir, { recursive: true });
|
|
63
|
+
const entries = [];
|
|
64
|
+
for (const mod of modules) {
|
|
65
|
+
const pkgPath = __require.resolve(path.join(mod, "package.json"));
|
|
66
|
+
const modRoot = path.dirname(pkgPath);
|
|
67
|
+
const schemaPath = path.join(modRoot, "prisma", "schema.prisma");
|
|
68
|
+
if (!fs.existsSync(schemaPath)) {
|
|
69
|
+
console.error(`Module ${mod} missing prisma/schema.prisma`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
const raw = fs.readFileSync(schemaPath, "utf8");
|
|
73
|
+
const stripped = stripDatasourceAndGenerators(raw);
|
|
74
|
+
const outDir = path.join(importedDir, path.basename(mod).replace(/^@/, "").replace(/\//g, "_"));
|
|
75
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
76
|
+
const outFile = path.join(outDir, "models.prisma");
|
|
77
|
+
fs.writeFileSync(outFile, stripped, "utf8");
|
|
78
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
79
|
+
entries.push({
|
|
80
|
+
moduleName: mod,
|
|
81
|
+
version: pkg.version || "0.0.0",
|
|
82
|
+
sourcePath: schemaPath,
|
|
83
|
+
sha256: sha256(raw)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const lock = {
|
|
87
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
88
|
+
entries
|
|
89
|
+
};
|
|
90
|
+
fs.writeFileSync(path.join(importedDir, "imported.lock.json"), JSON.stringify(lock, null, 2));
|
|
91
|
+
console.log(`Imported ${entries.length} modules into ${importedDir}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
//#endregion
|
|
95
|
+
export { runImport };
|
|
@@ -1,2 +1,20 @@
|
|
|
1
|
-
import{execa
|
|
2
|
-
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/migrate.ts
|
|
4
|
+
async function runMigrate(cmd, argv) {
|
|
5
|
+
if (cmd === "migrate:dev") {
|
|
6
|
+
await execa("prisma", ["migrate", "dev"], { stdio: "inherit" });
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (cmd === "migrate:deploy") {
|
|
10
|
+
await execa("prisma", ["migrate", "deploy"], { stdio: "inherit" });
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (cmd === "migrate:status") {
|
|
14
|
+
await execa("prisma", ["migrate", "status"], { stdio: "inherit" });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { runMigrate };
|
package/dist/commands/seed.mjs
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
-
import{execa
|
|
2
|
-
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/seed.ts
|
|
4
|
+
async function runSeed(argv) {
|
|
5
|
+
try {
|
|
6
|
+
await execa("prisma", ["db", "seed"], { stdio: "inherit" });
|
|
7
|
+
} catch (e) {
|
|
8
|
+
console.warn("No prisma seed configured or seed failed.");
|
|
9
|
+
throw e;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { runSeed };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
import{createPrismaClientFromEnv
|
|
1
|
+
import { createPrismaClientFromEnv, getSingletonClient } from "./lib/client.mjs";
|
|
2
|
+
import { defineMergedPrismaConfig } from "./lib/config.mjs";
|
|
3
|
+
|
|
4
|
+
export { createPrismaClientFromEnv, defineMergedPrismaConfig, getSingletonClient };
|
package/dist/lib/client.d.mts
CHANGED
|
@@ -4,5 +4,4 @@ import { PrismaClient } from "@prisma/client";
|
|
|
4
4
|
declare function createPrismaClientFromEnv(envVar: string, fallback?: string): PrismaClient;
|
|
5
5
|
declare function getSingletonClient(envVar?: string): PrismaClient;
|
|
6
6
|
//#endregion
|
|
7
|
-
export { createPrismaClientFromEnv, getSingletonClient };
|
|
8
|
-
//# sourceMappingURL=client.d.mts.map
|
|
7
|
+
export { createPrismaClientFromEnv, getSingletonClient };
|
package/dist/lib/client.mjs
CHANGED
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
import{PrismaClient
|
|
2
|
-
|
|
1
|
+
import { PrismaClient } from "@prisma/client";
|
|
2
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
3
|
+
|
|
4
|
+
//#region src/lib/client.ts
|
|
5
|
+
const g = global;
|
|
6
|
+
function createPrismaClientFromEnv(envVar, fallback) {
|
|
7
|
+
const raw = process.env[envVar] || (fallback ? process.env[fallback] : void 0);
|
|
8
|
+
if (!raw) throw new Error(`Missing database URL env: ${envVar}${fallback ? ` (or ${fallback})` : ""}`);
|
|
9
|
+
return new PrismaClient({ adapter: new PrismaPg({ connectionString: `${raw}`.replaceAll("sslmode=require", "sslmode=disable") }) });
|
|
10
|
+
}
|
|
11
|
+
function getSingletonClient(envVar = "DATABASE_URL") {
|
|
12
|
+
if (!g.__lssm_db) g.__lssm_db = createPrismaClientFromEnv(envVar);
|
|
13
|
+
return g.__lssm_db;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { createPrismaClientFromEnv, getSingletonClient };
|
package/dist/lib/config.d.mts
CHANGED
|
@@ -4,5 +4,4 @@ interface MergedPrismaConfig {
|
|
|
4
4
|
}
|
|
5
5
|
declare function defineMergedPrismaConfig(config: MergedPrismaConfig): MergedPrismaConfig;
|
|
6
6
|
//#endregion
|
|
7
|
-
export { MergedPrismaConfig, defineMergedPrismaConfig };
|
|
8
|
-
//# sourceMappingURL=config.d.mts.map
|
|
7
|
+
export { MergedPrismaConfig, defineMergedPrismaConfig };
|
package/dist/lib/config.mjs
CHANGED
package/dist/lib/types.d.mts
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/app.cli-database",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"database": "dist/cli.js"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
9
|
"clean": "rm -rf dist",
|
|
10
|
+
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
10
11
|
"build": "tsdown",
|
|
11
12
|
"dev": "bun run build --watch",
|
|
12
13
|
"lint": "bun run lint:fix",
|
|
@@ -21,13 +22,13 @@
|
|
|
21
22
|
"dbs:seed": "bun database seed"
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"@prisma/adapter-pg": "^7.0.
|
|
25
|
-
"@prisma/client": "^7.0.
|
|
26
|
-
"prisma": "^7.0.
|
|
25
|
+
"@prisma/adapter-pg": "^7.0.1",
|
|
26
|
+
"@prisma/client": "^7.0.1",
|
|
27
|
+
"prisma": "^7.0.1",
|
|
27
28
|
"minimist": "^1.2.8"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
|
-
"@lssm/tool.tsdown": "
|
|
31
|
+
"@lssm/tool.tsdown": "0.12.1",
|
|
31
32
|
"tsdown": "^0.16.6"
|
|
32
33
|
},
|
|
33
34
|
"main": "./dist/index.mjs",
|
|
@@ -41,5 +42,8 @@
|
|
|
41
42
|
".": "./dist/index.mjs",
|
|
42
43
|
"./cli": "./dist/cli.mjs",
|
|
43
44
|
"./*": "./*"
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
44
48
|
}
|
|
45
49
|
}
|
package/dist/cli.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport mri from 'minimist';\nimport { runImport } from './commands/import.js';\nimport { runCheck } from './commands/check.js';\nimport { runGenerate } from './commands/generate.js';\nimport { runMigrate } from './commands/migrate.js';\nimport { runSeed } from './commands/seed.js';\n\nasync function main() {\n const argv = mri(process.argv.slice(2));\n const [cmd] = argv._ as string[];\n\n switch (cmd) {\n case 'import':\n await runImport(argv);\n break;\n case 'check':\n await runCheck(argv);\n break;\n case 'generate':\n await runGenerate(argv);\n break;\n case 'migrate:dev':\n case 'migrate:deploy':\n case 'migrate:status':\n await runMigrate(cmd, argv);\n break;\n case 'seed':\n await runSeed(argv);\n break;\n default:\n console.error(\n 'Usage: database <import|check|generate|migrate:dev|migrate:deploy|migrate:status|seed>'\n );\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n console.error(err);\n process.exit(1);\n});\n"],"mappings":";kRAQA,eAAe,GAAO,CACpB,IAAM,EAAO,EAAI,QAAQ,KAAK,MAAM,EAAE,CAAC,CACjC,CAAC,GAAO,EAAK,EAEnB,OAAQ,EAAR,CACE,IAAK,SACH,MAAM,EAAU,EAAK,CACrB,MACF,IAAK,QACH,MAAM,EAAS,EAAK,CACpB,MACF,IAAK,WACH,MAAM,EAAY,EAAK,CACvB,MACF,IAAK,cACL,IAAK,iBACL,IAAK,iBACH,MAAM,EAAW,EAAK,EAAK,CAC3B,MACF,IAAK,OACH,MAAM,EAAQ,EAAK,CACnB,MACF,QACE,QAAQ,MACN,yFACD,CACD,QAAQ,KAAK,EAAE,EAIrB,GAAM,CAAC,MAAO,GAAQ,CACpB,QAAQ,MAAM,EAAI,CAClB,QAAQ,KAAK,EAAE,EACf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check.mjs","names":[],"sources":["../../src/commands/check.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport { type ImportLock } from '../lib/types.js';\n\nfunction sha256(content: string) {\n return crypto.createHash('sha256').update(content).digest('hex');\n}\n\nexport async function runCheck(argv: any) {\n const target = (argv.target as string) || process.cwd();\n const lockPath = path.join(\n target,\n 'prisma',\n 'schema',\n 'imported',\n 'imported.lock.json'\n );\n if (!fs.existsSync(lockPath)) {\n console.error('No imported.lock.json found. Run: database import');\n process.exit(1);\n }\n const lock = JSON.parse(fs.readFileSync(lockPath, 'utf8')) as ImportLock;\n let ok = true;\n for (const e of lock.entries) {\n if (!fs.existsSync(e.sourcePath)) {\n console.error(`Missing source: ${e.sourcePath}`);\n ok = false;\n continue;\n }\n const raw = fs.readFileSync(e.sourcePath, 'utf8');\n const digest = sha256(raw);\n if (digest !== e.sha256) {\n console.error(`Drift detected for ${e.moduleName} (${e.sourcePath})`);\n ok = false;\n }\n }\n if (!ok) {\n process.exit(2);\n }\n console.log('Imported schemas are in sync with lock.');\n}\n"],"mappings":"2EAKA,SAAS,EAAO,EAAiB,CAC/B,OAAO,EAAO,WAAW,SAAS,CAAC,OAAO,EAAQ,CAAC,OAAO,MAAM,CAGlE,eAAsB,EAAS,EAAW,CACxC,IAAM,EAAU,EAAK,QAAqB,QAAQ,KAAK,CACjD,EAAW,EAAK,KACpB,EACA,SACA,SACA,WACA,qBACD,CACI,EAAG,WAAW,EAAS,GAC1B,QAAQ,MAAM,oDAAoD,CAClE,QAAQ,KAAK,EAAE,EAEjB,IAAM,EAAO,KAAK,MAAM,EAAG,aAAa,EAAU,OAAO,CAAC,CACtD,EAAK,GACT,IAAK,IAAM,KAAK,EAAK,QAAS,CAC5B,GAAI,CAAC,EAAG,WAAW,EAAE,WAAW,CAAE,CAChC,QAAQ,MAAM,mBAAmB,EAAE,aAAa,CAChD,EAAK,GACL,SAGa,EADH,EAAG,aAAa,EAAE,WAAY,OAAO,CACvB,GACX,EAAE,SACf,QAAQ,MAAM,sBAAsB,EAAE,WAAW,IAAI,EAAE,WAAW,GAAG,CACrE,EAAK,IAGJ,GACH,QAAQ,KAAK,EAAE,CAEjB,QAAQ,IAAI,0CAA0C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate.mjs","names":[],"sources":["../../src/commands/generate.ts"],"sourcesContent":["import { execa } from 'execa';\n\nexport async function runGenerate(argv: any) {\n await execa('prisma', ['generate'], { stdio: 'inherit' });\n}\n"],"mappings":"8BAEA,eAAsB,EAAY,EAAW,CAC3C,MAAM,EAAM,SAAU,CAAC,WAAW,CAAE,CAAE,MAAO,UAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import.mjs","names":["arr: string","mods: string[]","m: RegExpExecArray | null","modules: string[]","entries: ImportLockEntry[]","lock: ImportLock"],"sources":["../../src/commands/import.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport { pathToFileURL } from 'node:url';\nimport { type ImportLock, type ImportLockEntry } from '../lib/types.js';\n\nfunction sha256(content: string) {\n return crypto.createHash('sha256').update(content).digest('hex');\n}\n\nfunction stripDatasourceAndGenerators(schema: string): string {\n // naive strip: remove blocks beginning with 'datasource ' or 'generator '\n return schema\n .replace(/datasource\\s+\\w+\\s*\\{[\\s\\S]*?\\}/g, '')\n .replace(/generator\\s+\\w+\\s*\\{[\\s\\S]*?\\}/g, '')\n .trim();\n}\n\nexport async function runImport(argv: any) {\n const target = (argv.target as string) || process.cwd();\n const modulesArg = (argv.modules as string) || '';\n async function loadModulesFromMergerConfig(): Promise<string[] | null> {\n const candidates = [\n path.join(target, 'prisma-merger.config.ts'),\n path.join(target, 'prisma-merger.config.mts'),\n path.join(target, 'prisma-merger.config.js'),\n path.join(target, 'prisma-merger.config.mjs'),\n path.join(target, 'prisma-merger.config.cjs'),\n path.join(target, 'prisma-merger.config.json'),\n ];\n for (const file of candidates) {\n if (!fs.existsSync(file)) continue;\n if (file.endsWith('.json')) {\n const json = JSON.parse(fs.readFileSync(file, 'utf8')) as {\n modules?: string[];\n };\n if (Array.isArray(json.modules) && json.modules.length > 0)\n return json.modules;\n } else if (file.endsWith('.ts') || file.endsWith('.mts')) {\n // Parse TS config without executing it\n const raw = fs.readFileSync(file, 'utf8');\n const match = raw.match(/modules\\s*:\\s*\\[([\\s\\S]*?)\\]/m);\n if (Array.isArray(match) && typeof match[1] === 'string') {\n const arr: string = match[1] || '';\n const mods: string[] = [];\n const re = /['\\\"]([^'\\\"]+)['\\\"]/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(arr))) {\n const val = m[1] ?? '';\n if (val) mods.push(val);\n }\n if (mods.length > 0) return mods;\n }\n } else {\n const mod = await import(pathToFileURL(file).href);\n const cfg = mod.default || mod;\n if (Array.isArray(cfg.modules) && cfg.modules.length > 0)\n return cfg.modules as string[];\n }\n }\n return null;\n }\n\n let modules: string[] = modulesArg\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n if (modules.length === 0) {\n const fromCfg = await loadModulesFromMergerConfig();\n if (fromCfg) modules = fromCfg;\n }\n if (modules.length === 0) {\n console.error(\n 'No modules specified. Provide --modules or define prisma-merger.config.ts { modules: [...] }'\n );\n process.exit(1);\n }\n\n const importedDir = path.join(target, 'prisma', 'schema', 'imported');\n fs.mkdirSync(importedDir, { recursive: true });\n\n const entries: ImportLockEntry[] = [];\n\n for (const mod of modules) {\n const pkgPath = require.resolve(path.join(mod, 'package.json'));\n const modRoot = path.dirname(pkgPath);\n const schemaPath = path.join(modRoot, 'prisma', 'schema.prisma');\n if (!fs.existsSync(schemaPath)) {\n console.error(`Module ${mod} missing prisma/schema.prisma`);\n process.exit(1);\n }\n const raw = fs.readFileSync(schemaPath, 'utf8');\n const stripped = stripDatasourceAndGenerators(raw);\n const outDir = path.join(\n importedDir,\n path.basename(mod).replace(/^@/, '').replace(/\\//g, '_')\n );\n fs.mkdirSync(outDir, { recursive: true });\n const outFile = path.join(outDir, 'models.prisma');\n fs.writeFileSync(outFile, stripped, 'utf8');\n\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n entries.push({\n moduleName: mod,\n version: pkg.version || '0.0.0',\n sourcePath: schemaPath,\n sha256: sha256(raw),\n });\n }\n\n const lock: ImportLock = { updatedAt: new Date().toISOString(), entries };\n fs.writeFileSync(\n path.join(importedDir, 'imported.lock.json'),\n JSON.stringify(lock, null, 2)\n );\n console.log(`Imported ${entries.length} modules into ${importedDir}`);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.mjs","names":[],"sources":["../../src/commands/migrate.ts"],"sourcesContent":["import { execa } from 'execa';\n\nexport async function runMigrate(cmd: string, argv: any) {\n if (cmd === 'migrate:dev') {\n await execa('prisma', ['migrate', 'dev'], { stdio: 'inherit' });\n return;\n }\n if (cmd === 'migrate:deploy') {\n await execa('prisma', ['migrate', 'deploy'], { stdio: 'inherit' });\n return;\n }\n if (cmd === 'migrate:status') {\n await execa('prisma', ['migrate', 'status'], { stdio: 'inherit' });\n return;\n }\n}\n"],"mappings":"8BAEA,eAAsB,EAAW,EAAa,EAAW,CACvD,GAAI,IAAQ,cAAe,CACzB,MAAM,EAAM,SAAU,CAAC,UAAW,MAAM,CAAE,CAAE,MAAO,UAAW,CAAC,CAC/D,OAEF,GAAI,IAAQ,iBAAkB,CAC5B,MAAM,EAAM,SAAU,CAAC,UAAW,SAAS,CAAE,CAAE,MAAO,UAAW,CAAC,CAClE,OAEF,GAAI,IAAQ,iBAAkB,CAC5B,MAAM,EAAM,SAAU,CAAC,UAAW,SAAS,CAAE,CAAE,MAAO,UAAW,CAAC,CAClE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seed.mjs","names":[],"sources":["../../src/commands/seed.ts"],"sourcesContent":["import { execa } from 'execa';\n\nexport async function runSeed(argv: any) {\n // Delegate to prisma db seed if configured, else no-op\n try {\n await execa('prisma', ['db', 'seed'], { stdio: 'inherit' });\n } catch (e) {\n console.warn('No prisma seed configured or seed failed.');\n throw e;\n }\n}\n"],"mappings":"8BAEA,eAAsB,EAAQ,EAAW,CAEvC,GAAI,CACF,MAAM,EAAM,SAAU,CAAC,KAAM,OAAO,CAAE,CAAE,MAAO,UAAW,CAAC,OACpD,EAAG,CAEV,MADA,QAAQ,KAAK,4CAA4C,CACnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.mts","names":[],"sources":["../../src/lib/client.ts"],"sourcesContent":[],"mappings":";;;iBAMgB,yBAAA,qCAGb;iBAea,kBAAA,mBAA6C"}
|
package/dist/lib/client.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.mjs","names":[],"sources":["../../src/lib/client.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client';\nimport { PrismaPg } from '@prisma/adapter-pg';\n\ntype GlobalWithDb = typeof globalThis & { __lssm_db?: PrismaClient };\nconst g = global as GlobalWithDb;\n\nexport function createPrismaClientFromEnv(\n envVar: string,\n fallback?: string\n): PrismaClient {\n const raw =\n process.env[envVar] || (fallback ? process.env[fallback] : undefined);\n if (!raw)\n throw new Error(\n `Missing database URL env: ${envVar}${fallback ? ` (or ${fallback})` : ''}`\n );\n const connectionString = `${raw}`.replaceAll(\n 'sslmode=require',\n 'sslmode=disable'\n );\n const adapter = new PrismaPg({ connectionString });\n return new PrismaClient({ adapter });\n}\n\nexport function getSingletonClient(envVar = 'DATABASE_URL'): PrismaClient {\n if (!g.__lssm_db) {\n g.__lssm_db = createPrismaClientFromEnv(envVar);\n }\n return g.__lssm_db;\n}\n"],"mappings":"4FAIA,MAAM,EAAI,OAEV,SAAgB,EACd,EACA,EACc,CACd,IAAM,EACJ,QAAQ,IAAI,KAAY,EAAW,QAAQ,IAAI,GAAY,IAAA,IAC7D,GAAI,CAAC,EACH,MAAU,MACR,6BAA6B,IAAS,EAAW,QAAQ,EAAS,GAAK,KACxE,CAMH,OAAO,IAAI,EAAa,CAAE,QADV,IAAI,EAAS,CAAE,iBAJN,GAAG,IAAM,WAChC,kBACA,kBACD,CACgD,CAAC,CACf,CAAC,CAGtC,SAAgB,EAAmB,EAAS,eAA8B,CAIxE,MAHA,CACE,EAAE,YAAY,EAA0B,EAAO,CAE1C,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.mts","names":[],"sources":["../../src/lib/config.ts"],"sourcesContent":[],"mappings":";UAAiB,kBAAA;EAAA,OAAA,EAAA,MAAA,EAAA;AAIjB;iBAAgB,wBAAA,SACN,qBACP"}
|
package/dist/lib/config.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.mjs","names":[],"sources":["../../src/lib/config.ts"],"sourcesContent":["export interface MergedPrismaConfig {\n modules: string[];\n}\n\nexport function defineMergedPrismaConfig(\n config: MergedPrismaConfig\n): MergedPrismaConfig {\n return config;\n}\n"],"mappings":"AAIA,SAAgB,EACd,EACoB,CACpB,OAAO"}
|
package/dist/lib/types.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","names":[],"sources":["../../src/lib/types.ts"],"sourcesContent":[],"mappings":";UAAiB,eAAA;EAAA,UAAA,EAAA,MAAe;EAOf,OAAA,EAAA,MAAU;;;;UAAV,UAAA;;WAEN"}
|