neoorm 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +86 -0
- package/dist/bin/neoorm.d.ts +3 -0
- package/dist/bin/neoorm.d.ts.map +1 -0
- package/dist/bin/neoorm.js +111 -0
- package/dist/bin/neoorm.js.map +1 -0
- package/dist/codegen/emit-includes.d.ts +3 -0
- package/dist/codegen/emit-includes.d.ts.map +1 -0
- package/dist/codegen/emit-includes.js +133 -0
- package/dist/codegen/emit-includes.js.map +1 -0
- package/dist/codegen/generate.d.ts +24 -0
- package/dist/codegen/generate.d.ts.map +1 -0
- package/dist/codegen/generate.js +156 -0
- package/dist/codegen/generate.js.map +1 -0
- package/dist/codegen/schema-to-manifest.d.ts +8 -0
- package/dist/codegen/schema-to-manifest.d.ts.map +1 -0
- package/dist/codegen/schema-to-manifest.js +210 -0
- package/dist/codegen/schema-to-manifest.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/dialect/index.d.ts +3 -0
- package/dist/dialect/index.d.ts.map +1 -0
- package/dist/dialect/index.js +2 -0
- package/dist/dialect/index.js.map +1 -0
- package/dist/dialect/postgres.d.ts +5 -0
- package/dist/dialect/postgres.d.ts.map +1 -0
- package/dist/dialect/postgres.js +112 -0
- package/dist/dialect/postgres.js.map +1 -0
- package/dist/dialect/types.d.ts +79 -0
- package/dist/dialect/types.d.ts.map +1 -0
- package/dist/dialect/types.js +2 -0
- package/dist/dialect/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect/pull.d.ts +3 -0
- package/dist/introspect/pull.d.ts.map +1 -0
- package/dist/introspect/pull.js +91 -0
- package/dist/introspect/pull.js.map +1 -0
- package/dist/migrate/runner.d.ts +9 -0
- package/dist/migrate/runner.d.ts.map +1 -0
- package/dist/migrate/runner.js +70 -0
- package/dist/migrate/runner.js.map +1 -0
- package/dist/runtime/client.d.ts +61 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +54 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/executor.d.ts +10 -0
- package/dist/runtime/executor.d.ts.map +1 -0
- package/dist/runtime/executor.js +62 -0
- package/dist/runtime/executor.js.map +1 -0
- package/dist/runtime/query/compile.d.ts +23 -0
- package/dist/runtime/query/compile.d.ts.map +1 -0
- package/dist/runtime/query/compile.js +182 -0
- package/dist/runtime/query/compile.js.map +1 -0
- package/dist/runtime/query/create.d.ts +8 -0
- package/dist/runtime/query/create.d.ts.map +1 -0
- package/dist/runtime/query/create.js +139 -0
- package/dist/runtime/query/create.js.map +1 -0
- package/dist/runtime/query/delete.d.ts +12 -0
- package/dist/runtime/query/delete.d.ts.map +1 -0
- package/dist/runtime/query/delete.js +35 -0
- package/dist/runtime/query/delete.js.map +1 -0
- package/dist/runtime/query/find.d.ts +21 -0
- package/dist/runtime/query/find.d.ts.map +1 -0
- package/dist/runtime/query/find.js +172 -0
- package/dist/runtime/query/find.js.map +1 -0
- package/dist/runtime/query/update.d.ts +17 -0
- package/dist/runtime/query/update.d.ts.map +1 -0
- package/dist/runtime/query/update.js +63 -0
- package/dist/runtime/query/update.js.map +1 -0
- package/dist/runtime/types.d.ts +48 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/schema/column.d.ts +39 -0
- package/dist/schema/column.d.ts.map +1 -0
- package/dist/schema/column.js +70 -0
- package/dist/schema/column.js.map +1 -0
- package/dist/schema/define-schema.d.ts +6 -0
- package/dist/schema/define-schema.d.ts.map +1 -0
- package/dist/schema/define-schema.js +4 -0
- package/dist/schema/define-schema.js.map +1 -0
- package/dist/schema/index.d.ts +13 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +6 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/many-to-many.d.ts +21 -0
- package/dist/schema/many-to-many.d.ts.map +1 -0
- package/dist/schema/many-to-many.js +20 -0
- package/dist/schema/many-to-many.js.map +1 -0
- package/dist/schema/relation-types.d.ts +74 -0
- package/dist/schema/relation-types.d.ts.map +1 -0
- package/dist/schema/relation-types.js +2 -0
- package/dist/schema/relation-types.js.map +1 -0
- package/dist/schema/relation.d.ts +24 -0
- package/dist/schema/relation.d.ts.map +1 -0
- package/dist/schema/relation.js +25 -0
- package/dist/schema/relation.js.map +1 -0
- package/dist/schema/table.d.ts +28 -0
- package/dist/schema/table.d.ts.map +1 -0
- package/dist/schema/table.js +23 -0
- package/dist/schema/table.js.map +1 -0
- package/dist/schema/types.d.ts +115 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/sql/builder.d.ts +17 -0
- package/dist/sql/builder.d.ts.map +1 -0
- package/dist/sql/builder.js +51 -0
- package/dist/sql/builder.js.map +1 -0
- package/dist/sql/index.d.ts +7 -0
- package/dist/sql/index.d.ts.map +1 -0
- package/dist/sql/index.js +6 -0
- package/dist/sql/index.js.map +1 -0
- package/dist/sql/template.d.ts +16 -0
- package/dist/sql/template.d.ts.map +1 -0
- package/dist/sql/template.js +43 -0
- package/dist/sql/template.js.map +1 -0
- package/dist/utils/case.d.ts +5 -0
- package/dist/utils/case.d.ts.map +1 -0
- package/dist/utils/case.js +20 -0
- package/dist/utils/case.js.map +1 -0
- package/package.json +60 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NeoOrm contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# NeoOrm
|
|
2
|
+
|
|
3
|
+
TypeScript-first PostgreSQL ORM with a schema DSL, compile-time types, codegen, and a typed query client.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install neoorm pg
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependency: Node.js 20+ and a PostgreSQL database.
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
**1. Define a schema** (`schema.ts`):
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { defineSchema, table, id, text, timestamp, fk } from "neoorm/schema";
|
|
19
|
+
|
|
20
|
+
export const schema = defineSchema({
|
|
21
|
+
users: table("users", {
|
|
22
|
+
id: id.primary(),
|
|
23
|
+
email: text().notNull().unique(),
|
|
24
|
+
createdAt: timestamp().notNull().defaultNow(),
|
|
25
|
+
}),
|
|
26
|
+
|
|
27
|
+
posts: table("posts", {
|
|
28
|
+
id: id.primary(),
|
|
29
|
+
authorId: fk("users.id", { as: "author", inverse: "posts", nullable: false }),
|
|
30
|
+
title: text().notNull(),
|
|
31
|
+
}),
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**2. Configure NeoOrm** (`neoorm.config.ts`):
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { defineConfig } from "neoorm";
|
|
39
|
+
|
|
40
|
+
export default defineConfig({
|
|
41
|
+
schema: "./schema.ts",
|
|
42
|
+
out: "./neoorm",
|
|
43
|
+
datasource: {
|
|
44
|
+
provider: "postgresql",
|
|
45
|
+
url: process.env.DATABASE_URL!,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**3. Generate the client**
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx neoorm generate
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**4. Query**
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { db } from "./neoorm/client.js";
|
|
60
|
+
|
|
61
|
+
const user = await db.users.findById("user_1", {
|
|
62
|
+
with: {
|
|
63
|
+
posts: { orderBy: { createdAt: "desc" }, limit: 10 },
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## CLI
|
|
69
|
+
|
|
70
|
+
| Command | Description |
|
|
71
|
+
|---------|-------------|
|
|
72
|
+
| `neoorm generate` | Emit manifest, typed client, includes, and migrations |
|
|
73
|
+
| `neoorm migrate dev` | Apply pending migrations and create a new one if the schema changed |
|
|
74
|
+
| `neoorm migrate deploy` | Apply pending migrations |
|
|
75
|
+
| `neoorm db push` | Push schema to the database |
|
|
76
|
+
| `neoorm db pull` | Introspect the database into a schema file |
|
|
77
|
+
|
|
78
|
+
## API surface
|
|
79
|
+
|
|
80
|
+
- `neoorm` — config helpers and `createNeoOrmClient`
|
|
81
|
+
- `neoorm/schema` — schema DSL (`table`, `fk`, `manyToMany`, …)
|
|
82
|
+
- `neoorm/sql` — tagged SQL templates and query builder
|
|
83
|
+
|
|
84
|
+
## License
|
|
85
|
+
|
|
86
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neoorm.d.ts","sourceRoot":"","sources":["../../src/bin/neoorm.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
import { Pool } from "pg";
|
|
5
|
+
import { loadConfig } from "../config.js";
|
|
6
|
+
import { generateFromSchema } from "../codegen/generate.js";
|
|
7
|
+
import { migrateDeploy, dbPush } from "../migrate/runner.js";
|
|
8
|
+
import { introspectPostgres } from "../introspect/pull.js";
|
|
9
|
+
import { writeFile } from "node:fs/promises";
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name("neoorm")
|
|
13
|
+
.description("NeoOrm CLI")
|
|
14
|
+
.version("0.1.0");
|
|
15
|
+
program
|
|
16
|
+
.command("generate")
|
|
17
|
+
.description("Generate manifest, client, and migrations from schema")
|
|
18
|
+
.action(async () => {
|
|
19
|
+
const cwd = process.cwd();
|
|
20
|
+
const config = await loadConfig(cwd);
|
|
21
|
+
const schemaPath = resolve(cwd, config.schema);
|
|
22
|
+
const outDir = resolve(cwd, config.out);
|
|
23
|
+
const { migrationName } = await generateFromSchema(schemaPath, outDir);
|
|
24
|
+
console.log(`Generated client at ${outDir}/client.ts`);
|
|
25
|
+
console.log(`Generated manifest at ${outDir}/manifest.ts`);
|
|
26
|
+
if (migrationName) {
|
|
27
|
+
console.log(`Created migration: ${migrationName}`);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.log("No schema changes detected");
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
program
|
|
34
|
+
.command("migrate")
|
|
35
|
+
.description("Run migrations")
|
|
36
|
+
.argument("[subcommand]", "dev | deploy")
|
|
37
|
+
.action(async (subcommand) => {
|
|
38
|
+
const cwd = process.cwd();
|
|
39
|
+
const config = await loadConfig(cwd);
|
|
40
|
+
const outDir = resolve(cwd, config.out);
|
|
41
|
+
const migrationsDir = join(outDir, "migrations");
|
|
42
|
+
const pool = new Pool({ connectionString: config.datasource.url });
|
|
43
|
+
try {
|
|
44
|
+
if (subcommand === "deploy" || subcommand === "dev") {
|
|
45
|
+
const applied = await migrateDeploy(pool, migrationsDir);
|
|
46
|
+
if (applied.length === 0) {
|
|
47
|
+
console.log("No pending migrations");
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log(`Applied ${applied.length} migration(s):`);
|
|
51
|
+
for (const name of applied) {
|
|
52
|
+
console.log(` - ${name}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (subcommand === "dev") {
|
|
56
|
+
const { generateFromSchema } = await import("../codegen/generate.js");
|
|
57
|
+
const schemaPath = resolve(cwd, config.schema);
|
|
58
|
+
const { migrationName } = await generateFromSchema(schemaPath, outDir);
|
|
59
|
+
if (migrationName) {
|
|
60
|
+
await migrateDeploy(pool, join(outDir, "migrations"));
|
|
61
|
+
console.log(`Created and applied: ${migrationName}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.error("Usage: neoorm migrate dev | deploy");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await pool.end();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
program
|
|
75
|
+
.command("db")
|
|
76
|
+
.description("Database utilities")
|
|
77
|
+
.argument("<subcommand>", "push | pull")
|
|
78
|
+
.option("-o, --output <file>", "Output file for pull", "schema.pulled.ts")
|
|
79
|
+
.action(async (subcommand, options) => {
|
|
80
|
+
const cwd = process.cwd();
|
|
81
|
+
const config = await loadConfig(cwd);
|
|
82
|
+
const pool = new Pool({ connectionString: config.datasource.url });
|
|
83
|
+
try {
|
|
84
|
+
if (subcommand === "push") {
|
|
85
|
+
const outDir = resolve(cwd, config.out);
|
|
86
|
+
const { readSnapshot } = await import("../codegen/generate.js");
|
|
87
|
+
const manifest = await readSnapshot(outDir);
|
|
88
|
+
if (!manifest) {
|
|
89
|
+
console.error("Run neoorm generate first");
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
await dbPush(pool, manifest);
|
|
93
|
+
console.log("Database schema pushed");
|
|
94
|
+
}
|
|
95
|
+
else if (subcommand === "pull") {
|
|
96
|
+
const content = await introspectPostgres(pool);
|
|
97
|
+
const outputPath = resolve(cwd, options.output ?? "schema.pulled.ts");
|
|
98
|
+
await writeFile(outputPath, content, "utf-8");
|
|
99
|
+
console.log(`Schema written to ${outputPath}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.error("Usage: neoorm db push | pull");
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
await pool.end();
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
program.parse();
|
|
111
|
+
//# sourceMappingURL=neoorm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"neoorm.js","sourceRoot":"","sources":["../../src/bin/neoorm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-includes.d.ts","sourceRoot":"","sources":["../../src/codegen/emit-includes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmD,MAAM,qBAAqB,CAAC;AAiIrG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAiCzD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
function pascalCase(str) {
|
|
2
|
+
return str
|
|
3
|
+
.replace(/(^|_)([a-z])/g, (_, __, c) => c.toUpperCase())
|
|
4
|
+
.replace(/_/g, "");
|
|
5
|
+
}
|
|
6
|
+
function columnUnion(columns) {
|
|
7
|
+
if (columns.length === 0)
|
|
8
|
+
return "never";
|
|
9
|
+
return columns.map((c) => `"${c.tsName}"`).join(" | ");
|
|
10
|
+
}
|
|
11
|
+
function selectType(columns) {
|
|
12
|
+
const union = columnUnion(columns);
|
|
13
|
+
const objectFields = columns.map((c) => `${c.tsName}?: true`).join("; ");
|
|
14
|
+
return `readonly (${union})[] | { ${objectFields} }`;
|
|
15
|
+
}
|
|
16
|
+
function orderByType(columns) {
|
|
17
|
+
if (columns.length === 0)
|
|
18
|
+
return "Record<string, never>";
|
|
19
|
+
const fields = columns.map((c) => `${c.tsName}?: OrderDirection`).join("; ");
|
|
20
|
+
return `{ ${fields} }`;
|
|
21
|
+
}
|
|
22
|
+
function uniqueRelations(table) {
|
|
23
|
+
const seen = new Set();
|
|
24
|
+
const result = [];
|
|
25
|
+
for (const rel of table.relations) {
|
|
26
|
+
if (seen.has(rel.name))
|
|
27
|
+
continue;
|
|
28
|
+
seen.add(rel.name);
|
|
29
|
+
result.push(rel);
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function emitRelationIncludeType(manifest, tableAccessor, relation) {
|
|
34
|
+
const typeName = `${pascalCase(tableAccessor)}${pascalCase(relation.name)}Include`;
|
|
35
|
+
const target = manifest.tables[relation.targetAccessor];
|
|
36
|
+
const columns = target?.columns ?? [];
|
|
37
|
+
const nestedWith = `${pascalCase(relation.targetAccessor)}With`;
|
|
38
|
+
return `export type ${typeName} =
|
|
39
|
+
| boolean
|
|
40
|
+
| {
|
|
41
|
+
select?: ${selectType(columns)};
|
|
42
|
+
orderBy?: ${orderByType(columns)};
|
|
43
|
+
limit?: number;
|
|
44
|
+
with?: ${nestedWith};
|
|
45
|
+
};`;
|
|
46
|
+
}
|
|
47
|
+
function emitTableWithType(manifest, table) {
|
|
48
|
+
const typeName = `${pascalCase(table.accessor)}With`;
|
|
49
|
+
const relations = effectiveRelations(manifest, table);
|
|
50
|
+
if (relations.length === 0) {
|
|
51
|
+
return `export type ${typeName} = Record<string, never>;`;
|
|
52
|
+
}
|
|
53
|
+
const fields = relations
|
|
54
|
+
.map((rel) => {
|
|
55
|
+
const includeType = `${pascalCase(table.accessor)}${pascalCase(rel.name)}Include`;
|
|
56
|
+
return ` ${rel.name}?: ${includeType};`;
|
|
57
|
+
})
|
|
58
|
+
.join("\n");
|
|
59
|
+
return `export type ${typeName} = {\n${fields}\n};`;
|
|
60
|
+
}
|
|
61
|
+
function throughAccessors(manifest) {
|
|
62
|
+
return new Set(manifest.manyToMany.map((m) => m.throughAccessor));
|
|
63
|
+
}
|
|
64
|
+
/** User-facing relations: FK/inverse plus M2M aliases, excluding junction-table hops */
|
|
65
|
+
function effectiveRelations(manifest, table) {
|
|
66
|
+
const through = throughAccessors(manifest);
|
|
67
|
+
const seen = new Set();
|
|
68
|
+
const result = [];
|
|
69
|
+
for (const rel of uniqueRelations(table)) {
|
|
70
|
+
if (through.has(rel.targetAccessor))
|
|
71
|
+
continue;
|
|
72
|
+
if (seen.has(rel.name))
|
|
73
|
+
continue;
|
|
74
|
+
seen.add(rel.name);
|
|
75
|
+
result.push(rel);
|
|
76
|
+
}
|
|
77
|
+
for (const m2m of manifest.manyToMany) {
|
|
78
|
+
if (m2m.leftAccessor === table.accessor && !seen.has(m2m.as)) {
|
|
79
|
+
seen.add(m2m.as);
|
|
80
|
+
result.push({
|
|
81
|
+
name: m2m.as,
|
|
82
|
+
targetTable: m2m.rightTable,
|
|
83
|
+
targetAccessor: m2m.rightAccessor,
|
|
84
|
+
fkColumn: m2m.leftFkColumn,
|
|
85
|
+
fkSqlColumn: m2m.leftFkColumn,
|
|
86
|
+
targetColumn: "id",
|
|
87
|
+
cardinality: "many",
|
|
88
|
+
inverse: m2m.inverse,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (m2m.rightAccessor === table.accessor && !seen.has(m2m.inverse)) {
|
|
92
|
+
seen.add(m2m.inverse);
|
|
93
|
+
result.push({
|
|
94
|
+
name: m2m.inverse,
|
|
95
|
+
targetTable: m2m.leftTable,
|
|
96
|
+
targetAccessor: m2m.leftAccessor,
|
|
97
|
+
fkColumn: m2m.rightFkColumn,
|
|
98
|
+
fkSqlColumn: m2m.rightFkColumn,
|
|
99
|
+
targetColumn: "id",
|
|
100
|
+
cardinality: "many",
|
|
101
|
+
inverse: m2m.as,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
export function emitIncludesTs(manifest) {
|
|
108
|
+
const lines = [
|
|
109
|
+
"// Auto-generated by neoorm generate — do not edit",
|
|
110
|
+
`import type { OrderDirection } from "neoorm/schema";`,
|
|
111
|
+
"",
|
|
112
|
+
];
|
|
113
|
+
const tables = Object.values(manifest.tables).sort((a, b) => a.accessor.localeCompare(b.accessor));
|
|
114
|
+
for (const table of tables) {
|
|
115
|
+
for (const rel of effectiveRelations(manifest, table)) {
|
|
116
|
+
lines.push(emitRelationIncludeType(manifest, table.accessor, rel));
|
|
117
|
+
lines.push("");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
for (const table of tables) {
|
|
121
|
+
lines.push(emitTableWithType(manifest, table));
|
|
122
|
+
lines.push("");
|
|
123
|
+
}
|
|
124
|
+
const includeMapEntries = tables
|
|
125
|
+
.map((t) => ` ${t.accessor}: ${pascalCase(t.accessor)}With;`)
|
|
126
|
+
.join("\n");
|
|
127
|
+
lines.push(`export type NeoOrmIncludes = {`);
|
|
128
|
+
lines.push(includeMapEntries);
|
|
129
|
+
lines.push(`};`);
|
|
130
|
+
lines.push("");
|
|
131
|
+
return lines.join("\n");
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=emit-includes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-includes.js","sourceRoot":"","sources":["../../src/codegen/emit-includes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Manifest } from "../dialect/types.js";
|
|
2
|
+
import type { ManyToManyDef } from "../schema/many-to-many.js";
|
|
3
|
+
export declare function loadSchemaModule(schemaPath: string): Promise<{
|
|
4
|
+
schema: import("../schema/define-schema.js").SchemaDef<Record<string, import("../schema/table.js").TableDef>>;
|
|
5
|
+
manyToMany: ManyToManyDef[];
|
|
6
|
+
}>;
|
|
7
|
+
export declare function hashManifest(manifest: Manifest): string;
|
|
8
|
+
export declare function readSnapshot(outDir: string): Promise<Manifest | null>;
|
|
9
|
+
export declare function writeSnapshot(outDir: string, manifest: Manifest): Promise<void>;
|
|
10
|
+
export declare function emitManifestTs(manifest: Manifest, packageImportPath: string): string;
|
|
11
|
+
export declare function emitClientTs(schemaImportPath: string, packageImportPath: string): string;
|
|
12
|
+
export declare function diffManifest(prev: Manifest | null, next: Manifest): {
|
|
13
|
+
isInitial: boolean;
|
|
14
|
+
sql: string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function writeMigration(outDir: string, sql: string[], name?: string): Promise<string | null>;
|
|
17
|
+
export declare function writeGeneratedFiles(outDir: string, manifest: Manifest, migrationSql: string[], schemaPath: string, projectRoot: string): Promise<{
|
|
18
|
+
migrationName: string | null;
|
|
19
|
+
}>;
|
|
20
|
+
export declare function generateFromSchema(schemaPath: string, outDir: string, projectRoot?: string): Promise<{
|
|
21
|
+
manifest: Manifest;
|
|
22
|
+
migrationName: string | null;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AA0B/D,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,OAAO,4BAA4B,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,oBAAoB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9G,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B,CAAC,CAqBD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAKvD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAO3E;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED,wBAAgB,YAAY,CAAC,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAWxF;AAkBD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,GAAG,IAAI,EACrB,IAAI,EAAE,QAAQ,GACb;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCvC;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgBxB;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAyB3C;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAmB/D"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { join, relative, dirname } from "node:path";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { postgresDialect } from "../dialect/postgres.js";
|
|
6
|
+
import { emitIncludesTs } from "./emit-includes.js";
|
|
7
|
+
async function resolveManyToManyDefs() {
|
|
8
|
+
const { getManyToManyRegistry } = await import("../schema/many-to-many.js");
|
|
9
|
+
const fromDist = getManyToManyRegistry();
|
|
10
|
+
if (fromDist.length > 0) {
|
|
11
|
+
return [...fromDist];
|
|
12
|
+
}
|
|
13
|
+
// tsx path aliases may load schema DSL from src/ while codegen runs from dist/
|
|
14
|
+
try {
|
|
15
|
+
const codegenDir = dirname(fileURLToPath(import.meta.url));
|
|
16
|
+
const { getManyToManyRegistry: getSrcRegistry } = await import(join(codegenDir, "../../src/schema/many-to-many.js"));
|
|
17
|
+
const fromSrc = getSrcRegistry();
|
|
18
|
+
if (fromSrc.length > 0) {
|
|
19
|
+
return [...fromSrc];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
// src/ not available in published package — dist registry is authoritative
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
export async function loadSchemaModule(schemaPath) {
|
|
28
|
+
const { pathToFileURL } = await import("node:url");
|
|
29
|
+
const { register } = await import("tsx/esm/api");
|
|
30
|
+
const { clearManyToManyRegistry } = await import("../schema/many-to-many.js");
|
|
31
|
+
register();
|
|
32
|
+
clearManyToManyRegistry();
|
|
33
|
+
const url = pathToFileURL(schemaPath).href;
|
|
34
|
+
const mod = await import(url);
|
|
35
|
+
const schema = mod.schema ?? mod.default?.schema ?? mod.default;
|
|
36
|
+
if (!schema || !schema._tables) {
|
|
37
|
+
throw new Error(`Schema file must export a schema via \`export const schema = defineSchema(...)\``);
|
|
38
|
+
}
|
|
39
|
+
const manyToMany = await resolveManyToManyDefs();
|
|
40
|
+
return { schema, manyToMany };
|
|
41
|
+
}
|
|
42
|
+
export function hashManifest(manifest) {
|
|
43
|
+
return createHash("sha256")
|
|
44
|
+
.update(JSON.stringify(manifest))
|
|
45
|
+
.digest("hex")
|
|
46
|
+
.slice(0, 16);
|
|
47
|
+
}
|
|
48
|
+
export async function readSnapshot(outDir) {
|
|
49
|
+
try {
|
|
50
|
+
const content = await readFile(join(outDir, "snapshot.json"), "utf-8");
|
|
51
|
+
return JSON.parse(content);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function writeSnapshot(outDir, manifest) {
|
|
58
|
+
await mkdir(outDir, { recursive: true });
|
|
59
|
+
await writeFile(join(outDir, "snapshot.json"), JSON.stringify(manifest, null, 2), "utf-8");
|
|
60
|
+
}
|
|
61
|
+
export function emitManifestTs(manifest, packageImportPath) {
|
|
62
|
+
return `// Auto-generated by neoorm generate — do not edit
|
|
63
|
+
import type { Manifest } from "${packageImportPath}";
|
|
64
|
+
|
|
65
|
+
export const manifest = ${JSON.stringify(manifest, null, 2)} as const satisfies Manifest;
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
export function emitClientTs(schemaImportPath, packageImportPath) {
|
|
69
|
+
return `// Auto-generated by neoorm generate — do not edit
|
|
70
|
+
import { createNeoOrmClient } from "${packageImportPath}";
|
|
71
|
+
import type { TypedNeoOrmClient } from "${packageImportPath}";
|
|
72
|
+
import { manifest } from "./manifest.js";
|
|
73
|
+
import { schema } from "${schemaImportPath}";
|
|
74
|
+
import type { NeoOrmIncludes } from "./includes.js";
|
|
75
|
+
|
|
76
|
+
export const db: TypedNeoOrmClient<typeof schema._tables, NeoOrmIncludes> =
|
|
77
|
+
createNeoOrmClient<typeof schema._tables, NeoOrmIncludes>(manifest);
|
|
78
|
+
`;
|
|
79
|
+
}
|
|
80
|
+
function toImportPath(fromDir, toFile) {
|
|
81
|
+
let importPath = relative(fromDir, toFile).replace(/\\/g, "/");
|
|
82
|
+
if (!importPath.startsWith(".")) {
|
|
83
|
+
importPath = `./${importPath}`;
|
|
84
|
+
}
|
|
85
|
+
return importPath.replace(/\.ts$/, ".js");
|
|
86
|
+
}
|
|
87
|
+
function schemaImportPath(outDir, schemaPath) {
|
|
88
|
+
return toImportPath(outDir, schemaPath);
|
|
89
|
+
}
|
|
90
|
+
function packageImportPath(outDir, projectRoot) {
|
|
91
|
+
return toImportPath(outDir, join(projectRoot, "dist/index.js"));
|
|
92
|
+
}
|
|
93
|
+
export function diffManifest(prev, next) {
|
|
94
|
+
if (!prev) {
|
|
95
|
+
const sql = Object.values(next.tables).map((t) => postgresDialect.emitCreateTable(t));
|
|
96
|
+
return { isInitial: true, sql };
|
|
97
|
+
}
|
|
98
|
+
const sql = [];
|
|
99
|
+
const prevTables = new Set(Object.keys(prev.tables));
|
|
100
|
+
const nextTables = new Set(Object.keys(next.tables));
|
|
101
|
+
for (const accessor of nextTables) {
|
|
102
|
+
if (!prevTables.has(accessor)) {
|
|
103
|
+
const table = next.tables[accessor];
|
|
104
|
+
sql.push(postgresDialect.emitCreateTable(table));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
const prevTable = prev.tables[accessor];
|
|
108
|
+
const nextTable = next.tables[accessor];
|
|
109
|
+
const prevCols = new Set(prevTable.columns.map((c) => c.sqlName));
|
|
110
|
+
const addColumns = nextTable.columns.filter((c) => !prevCols.has(c.sqlName));
|
|
111
|
+
if (addColumns.length > 0) {
|
|
112
|
+
sql.push(...postgresDialect.emitAlterTable(nextTable, { addColumns }));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return { isInitial: false, sql };
|
|
117
|
+
}
|
|
118
|
+
export async function writeMigration(outDir, sql, name) {
|
|
119
|
+
if (sql.length === 0)
|
|
120
|
+
return null;
|
|
121
|
+
const migrationsDir = join(outDir, "migrations");
|
|
122
|
+
await mkdir(migrationsDir, { recursive: true });
|
|
123
|
+
const timestamp = new Date()
|
|
124
|
+
.toISOString()
|
|
125
|
+
.replace(/[-:T.Z]/g, "")
|
|
126
|
+
.slice(0, 14);
|
|
127
|
+
const migrationName = name ?? `${timestamp}_migration`;
|
|
128
|
+
const migrationDir = join(migrationsDir, migrationName);
|
|
129
|
+
await mkdir(migrationDir, { recursive: true });
|
|
130
|
+
await writeFile(join(migrationDir, "migration.sql"), sql.join("\n\n"), "utf-8");
|
|
131
|
+
return migrationName;
|
|
132
|
+
}
|
|
133
|
+
export async function writeGeneratedFiles(outDir, manifest, migrationSql, schemaPath, projectRoot) {
|
|
134
|
+
await mkdir(outDir, { recursive: true });
|
|
135
|
+
await writeFile(join(outDir, "manifest.ts"), emitManifestTs(manifest, packageImportPath(outDir, projectRoot)), "utf-8");
|
|
136
|
+
await writeFile(join(outDir, "includes.ts"), emitIncludesTs(manifest), "utf-8");
|
|
137
|
+
await writeFile(join(outDir, "client.ts"), emitClientTs(schemaImportPath(outDir, schemaPath), packageImportPath(outDir, projectRoot)), "utf-8");
|
|
138
|
+
await writeSnapshot(outDir, manifest);
|
|
139
|
+
const migrationName = await writeMigration(outDir, migrationSql);
|
|
140
|
+
return { migrationName };
|
|
141
|
+
}
|
|
142
|
+
export async function generateFromSchema(schemaPath, outDir, projectRoot) {
|
|
143
|
+
const { schemaToManifest, validateManifest } = await import("./schema-to-manifest.js");
|
|
144
|
+
const { schema, manyToMany } = await loadSchemaModule(schemaPath);
|
|
145
|
+
const manifest = schemaToManifest(schema, manyToMany);
|
|
146
|
+
const errors = validateManifest(manifest);
|
|
147
|
+
if (errors.length > 0) {
|
|
148
|
+
throw new Error(`Schema validation failed:\n${errors.join("\n")}`);
|
|
149
|
+
}
|
|
150
|
+
const prev = await readSnapshot(outDir);
|
|
151
|
+
const { sql } = diffManifest(prev, manifest);
|
|
152
|
+
const root = projectRoot ?? process.cwd();
|
|
153
|
+
const { migrationName } = await writeGeneratedFiles(outDir, manifest, sql, schemaPath, root);
|
|
154
|
+
return { manifest, migrationName };
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TableDef } from "../schema/table.js";
|
|
2
|
+
import type { Manifest } from "../dialect/types.js";
|
|
3
|
+
import type { ManyToManyDef } from "../schema/many-to-many.js";
|
|
4
|
+
export declare function schemaToManifest<T extends Record<string, TableDef>>(schema: {
|
|
5
|
+
readonly _tables: T;
|
|
6
|
+
}, m2mDefs?: readonly ManyToManyDef[]): Manifest;
|
|
7
|
+
export declare function validateManifest(manifest: Manifest): string[];
|
|
8
|
+
//# sourceMappingURL=schema-to-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-to-manifest.d.ts","sourceRoot":"","sources":["../../src/codegen/schema-to-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,oBAAoB,CAAC;AAI/D,OAAO,KAAK,EACV,QAAQ,EAMT,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAsG/D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EACjE,MAAM,EAAE;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;CAAE,EAC/B,OAAO,GAAE,SAAS,aAAa,EAA4B,GAC1D,QAAQ,CAsIV;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CA0B7D"}
|