neoorm 0.1.0 → 0.1.2
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/bin/neoorm.js +0 -0
- package/dist/codegen/emit-includes.d.ts.map +1 -1
- package/dist/codegen/emit-includes.js +1 -62
- package/dist/codegen/emit-includes.js.map +1 -1
- package/dist/codegen/emit-models.d.ts +3 -0
- package/dist/codegen/emit-models.d.ts.map +1 -0
- package/dist/codegen/emit-models.js +142 -0
- package/dist/codegen/emit-models.js.map +1 -0
- package/dist/codegen/generate.d.ts +4 -2
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/codegen/generate.js +49 -15
- package/dist/codegen/generate.js.map +1 -1
- package/dist/codegen/manifest-relations.d.ts +6 -0
- package/dist/codegen/manifest-relations.d.ts.map +1 -0
- package/dist/codegen/manifest-relations.js +70 -0
- package/dist/codegen/manifest-relations.js.map +1 -0
- package/dist/codegen/schema-to-manifest.d.ts +2 -1
- package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
- package/dist/codegen/schema-to-manifest.js +12 -2
- package/dist/codegen/schema-to-manifest.js.map +1 -1
- package/dist/dialect/postgres.d.ts.map +1 -1
- package/dist/dialect/postgres.js +22 -23
- package/dist/dialect/postgres.js.map +1 -1
- package/dist/dialect/types.d.ts +4 -1
- package/dist/dialect/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/introspect/pull.d.ts.map +1 -1
- package/dist/introspect/pull.js +59 -30
- package/dist/introspect/pull.js.map +1 -1
- package/dist/plugins/builtin.d.ts +11 -0
- package/dist/plugins/builtin.d.ts.map +1 -0
- package/dist/plugins/builtin.js +130 -0
- package/dist/plugins/builtin.js.map +1 -0
- package/dist/plugins/ensure-plugins.d.ts +3 -0
- package/dist/plugins/ensure-plugins.d.ts.map +1 -0
- package/dist/plugins/ensure-plugins.js +19 -0
- package/dist/plugins/ensure-plugins.js.map +1 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/postgis/columns.d.ts +25 -0
- package/dist/plugins/postgis/columns.d.ts.map +1 -0
- package/dist/plugins/postgis/columns.js +82 -0
- package/dist/plugins/postgis/columns.js.map +1 -0
- package/dist/plugins/postgis/geojson.d.ts +4 -0
- package/dist/plugins/postgis/geojson.d.ts.map +1 -0
- package/dist/plugins/postgis/geojson.js +22 -0
- package/dist/plugins/postgis/geojson.js.map +1 -0
- package/dist/plugins/postgis/index.d.ts +4 -0
- package/dist/plugins/postgis/index.d.ts.map +1 -0
- package/dist/plugins/postgis/index.js +6 -0
- package/dist/plugins/postgis/index.js.map +1 -0
- package/dist/plugins/postgis/operators.d.ts +5 -0
- package/dist/plugins/postgis/operators.d.ts.map +1 -0
- package/dist/plugins/postgis/operators.js +35 -0
- package/dist/plugins/postgis/operators.js.map +1 -0
- package/dist/plugins/postgis/plugin.d.ts +3 -0
- package/dist/plugins/postgis/plugin.d.ts.map +1 -0
- package/dist/plugins/postgis/plugin.js +7 -0
- package/dist/plugins/postgis/plugin.js.map +1 -0
- package/dist/plugins/registry.d.ts +10 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +89 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +32 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/runtime/client.d.ts +17 -4
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +8 -0
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/query/compile.d.ts +2 -0
- package/dist/runtime/query/compile.d.ts.map +1 -1
- package/dist/runtime/query/compile.js +99 -8
- package/dist/runtime/query/compile.js.map +1 -1
- package/dist/runtime/query/count.d.ts +10 -0
- package/dist/runtime/query/count.d.ts.map +1 -0
- package/dist/runtime/query/count.js +24 -0
- package/dist/runtime/query/count.js.map +1 -0
- package/dist/runtime/query/unique.d.ts +8 -0
- package/dist/runtime/query/unique.d.ts.map +1 -0
- package/dist/runtime/query/unique.js +47 -0
- package/dist/runtime/query/unique.js.map +1 -0
- package/dist/runtime/query/upsert.d.ts +10 -0
- package/dist/runtime/query/upsert.d.ts.map +1 -0
- package/dist/runtime/query/upsert.js +38 -0
- package/dist/runtime/query/upsert.js.map +1 -0
- package/dist/runtime/types.d.ts +27 -14
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schema/column.d.ts +5 -11
- package/dist/schema/column.d.ts.map +1 -1
- package/dist/schema/column.js +7 -53
- package/dist/schema/column.js.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/types.d.ts +13 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/sql/template.d.ts.map +1 -1
- package/dist/sql/template.js.map +1 -1
- package/package.json +30 -12
package/dist/bin/neoorm.js
CHANGED
|
File without changes
|
|
@@ -1 +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;
|
|
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;AA6DrG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAiCzD"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
return str
|
|
3
|
-
.replace(/(^|_)([a-z])/g, (_, __, c) => c.toUpperCase())
|
|
4
|
-
.replace(/_/g, "");
|
|
5
|
-
}
|
|
1
|
+
import { effectiveRelations, pascalCase } from "./manifest-relations.js";
|
|
6
2
|
function columnUnion(columns) {
|
|
7
3
|
if (columns.length === 0)
|
|
8
4
|
return "never";
|
|
@@ -19,17 +15,6 @@ function orderByType(columns) {
|
|
|
19
15
|
const fields = columns.map((c) => `${c.tsName}?: OrderDirection`).join("; ");
|
|
20
16
|
return `{ ${fields} }`;
|
|
21
17
|
}
|
|
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
18
|
function emitRelationIncludeType(manifest, tableAccessor, relation) {
|
|
34
19
|
const typeName = `${pascalCase(tableAccessor)}${pascalCase(relation.name)}Include`;
|
|
35
20
|
const target = manifest.tables[relation.targetAccessor];
|
|
@@ -58,52 +43,6 @@ function emitTableWithType(manifest, table) {
|
|
|
58
43
|
.join("\n");
|
|
59
44
|
return `export type ${typeName} = {\n${fields}\n};`;
|
|
60
45
|
}
|
|
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
46
|
export function emitIncludesTs(manifest) {
|
|
108
47
|
const lines = [
|
|
109
48
|
"// Auto-generated by neoorm generate — do not edit",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-includes.js","sourceRoot":"","sources":["../../src/codegen/emit-includes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit-includes.js","sourceRoot":"","sources":["../../src/codegen/emit-includes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-models.d.ts","sourceRoot":"","sources":["../../src/codegen/emit-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAiC,MAAM,qBAAqB,CAAC;AAoGnF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA2EvD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { effectiveRelations, pascalCase, singularTypeName, } from "./manifest-relations.js";
|
|
2
|
+
import { getColumnTypeOrThrow } from "../plugins/registry.js";
|
|
3
|
+
function columnTsType(col) {
|
|
4
|
+
if (col.kind === "fk") {
|
|
5
|
+
return col.nullable ? "string | null" : "string";
|
|
6
|
+
}
|
|
7
|
+
return getColumnTypeOrThrow(col.kind).columnTsType(col);
|
|
8
|
+
}
|
|
9
|
+
function emitGeoJsonTypes(manifest) {
|
|
10
|
+
const hasPostgis = (manifest.extensions ?? []).includes("postgis");
|
|
11
|
+
if (!hasPostgis)
|
|
12
|
+
return [];
|
|
13
|
+
return [
|
|
14
|
+
"export type GeoJsonPoint = {",
|
|
15
|
+
' type: "Point";',
|
|
16
|
+
" coordinates: [number, number] | [number, number, number];",
|
|
17
|
+
"};",
|
|
18
|
+
"",
|
|
19
|
+
"export type GeoJsonPolygon = {",
|
|
20
|
+
' type: "Polygon";',
|
|
21
|
+
" coordinates: number[][][];",
|
|
22
|
+
"};",
|
|
23
|
+
"",
|
|
24
|
+
"export type GeoJsonGeometry = GeoJsonPoint | GeoJsonPolygon | Record<string, unknown>;",
|
|
25
|
+
"",
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
function emitBaseModel(table) {
|
|
29
|
+
const name = singularTypeName(table.accessor);
|
|
30
|
+
const fields = table.columns
|
|
31
|
+
.map((col) => ` ${col.tsName}: ${columnTsType(col)};`)
|
|
32
|
+
.join("\n");
|
|
33
|
+
return `export type ${name} = {\n${fields}\n};`;
|
|
34
|
+
}
|
|
35
|
+
function relationFieldType(rel, targetModelName) {
|
|
36
|
+
if (rel.cardinality === "many") {
|
|
37
|
+
return ` ${rel.name}?: ${targetModelName}[];`;
|
|
38
|
+
}
|
|
39
|
+
return ` ${rel.name}?: ${targetModelName} | null;`;
|
|
40
|
+
}
|
|
41
|
+
function emitPayloadType(manifest, table) {
|
|
42
|
+
const baseName = singularTypeName(table.accessor);
|
|
43
|
+
const payloadName = `${baseName}Payload`;
|
|
44
|
+
const relations = effectiveRelations(manifest, table);
|
|
45
|
+
if (relations.length === 0) {
|
|
46
|
+
return `export type ${payloadName} = ${baseName};`;
|
|
47
|
+
}
|
|
48
|
+
const relationFields = relations
|
|
49
|
+
.map((rel) => {
|
|
50
|
+
const target = manifest.tables[rel.targetAccessor];
|
|
51
|
+
const targetName = target
|
|
52
|
+
? singularTypeName(target.accessor)
|
|
53
|
+
: singularTypeName(rel.targetAccessor);
|
|
54
|
+
return relationFieldType(rel, targetName);
|
|
55
|
+
})
|
|
56
|
+
.join("\n");
|
|
57
|
+
return `export type ${payloadName} = ${baseName} & {\n${relationFields}\n};`;
|
|
58
|
+
}
|
|
59
|
+
function emitWithIncludesType(manifest, table) {
|
|
60
|
+
const baseName = singularTypeName(table.accessor);
|
|
61
|
+
const withName = `${pascalCase(table.accessor)}With`;
|
|
62
|
+
const includesName = `${baseName}WithIncludes`;
|
|
63
|
+
const relations = effectiveRelations(manifest, table);
|
|
64
|
+
if (relations.length === 0) {
|
|
65
|
+
return `export type ${includesName}<W extends ${withName} | undefined = undefined> = ${baseName};`;
|
|
66
|
+
}
|
|
67
|
+
const includeParts = relations
|
|
68
|
+
.map((rel) => {
|
|
69
|
+
const target = manifest.tables[rel.targetAccessor];
|
|
70
|
+
const targetName = target
|
|
71
|
+
? singularTypeName(target.accessor)
|
|
72
|
+
: singularTypeName(rel.targetAccessor);
|
|
73
|
+
const cardinality = rel.cardinality === "many" ? "many" : "one";
|
|
74
|
+
return ` IncludeRelation<W, "${rel.name}", "${cardinality}", ${targetName}>`;
|
|
75
|
+
})
|
|
76
|
+
.join(" &\n");
|
|
77
|
+
return `export type ${includesName}<W extends ${withName} | undefined = undefined> = ${baseName} &
|
|
78
|
+
${includeParts};`;
|
|
79
|
+
}
|
|
80
|
+
export function emitModelsTs(manifest) {
|
|
81
|
+
const tables = Object.values(manifest.tables).sort((a, b) => a.accessor.localeCompare(b.accessor));
|
|
82
|
+
const withTypeNames = tables.map((t) => `${pascalCase(t.accessor)}With`);
|
|
83
|
+
const lines = [
|
|
84
|
+
"// Auto-generated by neoorm generate — do not edit",
|
|
85
|
+
`import type { ${withTypeNames.join(", ")} } from "./includes.js";`,
|
|
86
|
+
"",
|
|
87
|
+
...emitGeoJsonTypes(manifest),
|
|
88
|
+
"type IncludeRelation<",
|
|
89
|
+
" W,",
|
|
90
|
+
" Key extends PropertyKey,",
|
|
91
|
+
" Cardinality extends \"one\" | \"many\",",
|
|
92
|
+
" TModel,",
|
|
93
|
+
"> = W extends { [K in Key]?: unknown }",
|
|
94
|
+
" ? Cardinality extends \"many\"",
|
|
95
|
+
" ? { [P in Key]: TModel[] }",
|
|
96
|
+
" : { [P in Key]: TModel | null }",
|
|
97
|
+
" : {};",
|
|
98
|
+
"",
|
|
99
|
+
];
|
|
100
|
+
for (const table of tables) {
|
|
101
|
+
lines.push(emitBaseModel(table));
|
|
102
|
+
lines.push("");
|
|
103
|
+
}
|
|
104
|
+
for (const table of tables) {
|
|
105
|
+
lines.push(emitPayloadType(manifest, table));
|
|
106
|
+
lines.push("");
|
|
107
|
+
}
|
|
108
|
+
for (const table of tables) {
|
|
109
|
+
lines.push(emitWithIncludesType(manifest, table));
|
|
110
|
+
lines.push("");
|
|
111
|
+
}
|
|
112
|
+
const modelEntries = tables
|
|
113
|
+
.map((t) => ` ${t.accessor}: ${singularTypeName(t.accessor)};`)
|
|
114
|
+
.join("\n");
|
|
115
|
+
const payloadEntries = tables
|
|
116
|
+
.map((t) => ` ${t.accessor}: ${singularTypeName(t.accessor)}Payload;`)
|
|
117
|
+
.join("\n");
|
|
118
|
+
const resultAtCases = tables
|
|
119
|
+
.map((t) => {
|
|
120
|
+
const withName = `${pascalCase(t.accessor)}With`;
|
|
121
|
+
const includesName = `${singularTypeName(t.accessor)}WithIncludes`;
|
|
122
|
+
return ` K extends "${t.accessor}" ? ${includesName}<\n W extends ${withName} | undefined ? W : undefined\n >`;
|
|
123
|
+
})
|
|
124
|
+
.join("\n : ");
|
|
125
|
+
lines.push(`export type NeoOrmModels = {`);
|
|
126
|
+
lines.push(modelEntries);
|
|
127
|
+
lines.push(`};`);
|
|
128
|
+
lines.push("");
|
|
129
|
+
lines.push(`export type NeoOrmRowPayloads = {`);
|
|
130
|
+
lines.push(payloadEntries);
|
|
131
|
+
lines.push(`};`);
|
|
132
|
+
lines.push("");
|
|
133
|
+
lines.push(`export type NeoOrmResultAt<`);
|
|
134
|
+
lines.push(` K extends keyof NeoOrmModels,`);
|
|
135
|
+
lines.push(` W,`);
|
|
136
|
+
lines.push(`> =`);
|
|
137
|
+
lines.push(resultAtCases);
|
|
138
|
+
lines.push(` : never;`);
|
|
139
|
+
lines.push("");
|
|
140
|
+
return lines.join("\n");
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=emit-models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-models.js","sourceRoot":"","sources":["../../src/codegen/emit-models.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { Manifest } from "../dialect/types.js";
|
|
2
2
|
import type { ManyToManyDef } from "../schema/many-to-many.js";
|
|
3
|
+
import type { NeoOrmPlugin } from "../plugins/types.js";
|
|
3
4
|
export declare function loadSchemaModule(schemaPath: string): Promise<{
|
|
4
5
|
schema: import("../schema/define-schema.js").SchemaDef<Record<string, import("../schema/table.js").TableDef>>;
|
|
5
6
|
manyToMany: ManyToManyDef[];
|
|
7
|
+
plugins: NeoOrmPlugin[];
|
|
6
8
|
}>;
|
|
7
9
|
export declare function hashManifest(manifest: Manifest): string;
|
|
8
10
|
export declare function readSnapshot(outDir: string): Promise<Manifest | null>;
|
|
@@ -14,10 +16,10 @@ export declare function diffManifest(prev: Manifest | null, next: Manifest): {
|
|
|
14
16
|
sql: string[];
|
|
15
17
|
};
|
|
16
18
|
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
|
|
19
|
+
export declare function writeGeneratedFiles(outDir: string, manifest: Manifest, migrationSql: string[], schemaPath: string): Promise<{
|
|
18
20
|
migrationName: string | null;
|
|
19
21
|
}>;
|
|
20
|
-
export declare function generateFromSchema(schemaPath: string, outDir: string
|
|
22
|
+
export declare function generateFromSchema(schemaPath: string, outDir: string): Promise<{
|
|
21
23
|
manifest: Manifest;
|
|
22
24
|
migrationName: string | null;
|
|
23
25
|
}>;
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAIpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiDxD,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;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB,CAAC,CAsBD;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,CAsBxF;AAgBD,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,CAoCvC;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,GACjB,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA2B3C;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAkB/D"}
|
package/dist/codegen/generate.js
CHANGED
|
@@ -4,6 +4,7 @@ import { createHash } from "node:crypto";
|
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { postgresDialect } from "../dialect/postgres.js";
|
|
6
6
|
import { emitIncludesTs } from "./emit-includes.js";
|
|
7
|
+
import { emitModelsTs } from "./emit-models.js";
|
|
7
8
|
async function resolveManyToManyDefs() {
|
|
8
9
|
const { getManyToManyRegistry } = await import("../schema/many-to-many.js");
|
|
9
10
|
const fromDist = getManyToManyRegistry();
|
|
@@ -24,6 +25,25 @@ async function resolveManyToManyDefs() {
|
|
|
24
25
|
}
|
|
25
26
|
return [];
|
|
26
27
|
}
|
|
28
|
+
async function resolvePluginRegistry() {
|
|
29
|
+
const { getPluginRegistry } = await import("../plugins/registry.js");
|
|
30
|
+
const fromDist = getPluginRegistry();
|
|
31
|
+
if (fromDist.length > 1) {
|
|
32
|
+
return [...fromDist];
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const codegenDir = dirname(fileURLToPath(import.meta.url));
|
|
36
|
+
const { getPluginRegistry: getSrcRegistry } = await import(join(codegenDir, "../../src/plugins/registry.js"));
|
|
37
|
+
const fromSrc = getSrcRegistry();
|
|
38
|
+
if (fromSrc.length > 1) {
|
|
39
|
+
return [...fromSrc];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// src/ not available in published package — dist registry is authoritative
|
|
44
|
+
}
|
|
45
|
+
return [...fromDist];
|
|
46
|
+
}
|
|
27
47
|
export async function loadSchemaModule(schemaPath) {
|
|
28
48
|
const { pathToFileURL } = await import("node:url");
|
|
29
49
|
const { register } = await import("tsx/esm/api");
|
|
@@ -37,7 +57,8 @@ export async function loadSchemaModule(schemaPath) {
|
|
|
37
57
|
throw new Error(`Schema file must export a schema via \`export const schema = defineSchema(...)\``);
|
|
38
58
|
}
|
|
39
59
|
const manyToMany = await resolveManyToManyDefs();
|
|
40
|
-
|
|
60
|
+
const plugins = await resolvePluginRegistry();
|
|
61
|
+
return { schema, manyToMany, plugins };
|
|
41
62
|
}
|
|
42
63
|
export function hashManifest(manifest) {
|
|
43
64
|
return createHash("sha256")
|
|
@@ -72,9 +93,20 @@ import type { TypedNeoOrmClient } from "${packageImportPath}";
|
|
|
72
93
|
import { manifest } from "./manifest.js";
|
|
73
94
|
import { schema } from "${schemaImportPath}";
|
|
74
95
|
import type { NeoOrmIncludes } from "./includes.js";
|
|
96
|
+
import type { NeoOrmRowPayloads } from "./models.js";
|
|
75
97
|
|
|
76
|
-
export const db: TypedNeoOrmClient<
|
|
77
|
-
|
|
98
|
+
export const db: TypedNeoOrmClient<
|
|
99
|
+
typeof schema._tables,
|
|
100
|
+
NeoOrmIncludes,
|
|
101
|
+
NeoOrmRowPayloads
|
|
102
|
+
> = createNeoOrmClient<
|
|
103
|
+
typeof schema._tables,
|
|
104
|
+
NeoOrmIncludes,
|
|
105
|
+
NeoOrmRowPayloads
|
|
106
|
+
>(manifest);
|
|
107
|
+
|
|
108
|
+
export type * from "./models.js";
|
|
109
|
+
export type * from "./includes.js";
|
|
78
110
|
`;
|
|
79
111
|
}
|
|
80
112
|
function toImportPath(fromDir, toFile) {
|
|
@@ -87,12 +119,14 @@ function toImportPath(fromDir, toFile) {
|
|
|
87
119
|
function schemaImportPath(outDir, schemaPath) {
|
|
88
120
|
return toImportPath(outDir, schemaPath);
|
|
89
121
|
}
|
|
90
|
-
|
|
91
|
-
return toImportPath(outDir, join(projectRoot, "dist/index.js"));
|
|
92
|
-
}
|
|
122
|
+
const NEOORM_PACKAGE = "neoorm";
|
|
93
123
|
export function diffManifest(prev, next) {
|
|
94
124
|
if (!prev) {
|
|
95
|
-
const sql =
|
|
125
|
+
const sql = [];
|
|
126
|
+
for (const ext of next.extensions ?? []) {
|
|
127
|
+
sql.push(`CREATE EXTENSION IF NOT EXISTS ${ext};`);
|
|
128
|
+
}
|
|
129
|
+
sql.push(...Object.values(next.tables).map((t) => postgresDialect.emitCreateTable(t)));
|
|
96
130
|
return { isInitial: true, sql };
|
|
97
131
|
}
|
|
98
132
|
const sql = [];
|
|
@@ -130,27 +164,27 @@ export async function writeMigration(outDir, sql, name) {
|
|
|
130
164
|
await writeFile(join(migrationDir, "migration.sql"), sql.join("\n\n"), "utf-8");
|
|
131
165
|
return migrationName;
|
|
132
166
|
}
|
|
133
|
-
export async function writeGeneratedFiles(outDir, manifest, migrationSql, schemaPath
|
|
167
|
+
export async function writeGeneratedFiles(outDir, manifest, migrationSql, schemaPath) {
|
|
134
168
|
await mkdir(outDir, { recursive: true });
|
|
135
|
-
await writeFile(join(outDir, "manifest.ts"), emitManifestTs(manifest,
|
|
169
|
+
await writeFile(join(outDir, "manifest.ts"), emitManifestTs(manifest, NEOORM_PACKAGE), "utf-8");
|
|
136
170
|
await writeFile(join(outDir, "includes.ts"), emitIncludesTs(manifest), "utf-8");
|
|
137
|
-
await writeFile(join(outDir, "
|
|
171
|
+
await writeFile(join(outDir, "models.ts"), emitModelsTs(manifest), "utf-8");
|
|
172
|
+
await writeFile(join(outDir, "client.ts"), emitClientTs(schemaImportPath(outDir, schemaPath), NEOORM_PACKAGE), "utf-8");
|
|
138
173
|
await writeSnapshot(outDir, manifest);
|
|
139
174
|
const migrationName = await writeMigration(outDir, migrationSql);
|
|
140
175
|
return { migrationName };
|
|
141
176
|
}
|
|
142
|
-
export async function generateFromSchema(schemaPath, outDir
|
|
177
|
+
export async function generateFromSchema(schemaPath, outDir) {
|
|
143
178
|
const { schemaToManifest, validateManifest } = await import("./schema-to-manifest.js");
|
|
144
|
-
const { schema, manyToMany } = await loadSchemaModule(schemaPath);
|
|
145
|
-
const manifest = schemaToManifest(schema, manyToMany);
|
|
179
|
+
const { schema, manyToMany, plugins } = await loadSchemaModule(schemaPath);
|
|
180
|
+
const manifest = schemaToManifest(schema, manyToMany, plugins);
|
|
146
181
|
const errors = validateManifest(manifest);
|
|
147
182
|
if (errors.length > 0) {
|
|
148
183
|
throw new Error(`Schema validation failed:\n${errors.join("\n")}`);
|
|
149
184
|
}
|
|
150
185
|
const prev = await readSnapshot(outDir);
|
|
151
186
|
const { sql } = diffManifest(prev, manifest);
|
|
152
|
-
const
|
|
153
|
-
const { migrationName } = await writeGeneratedFiles(outDir, manifest, sql, schemaPath, root);
|
|
187
|
+
const { migrationName } = await writeGeneratedFiles(outDir, manifest, sql, schemaPath);
|
|
154
188
|
return { manifest, migrationName };
|
|
155
189
|
}
|
|
156
190
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Manifest, ManifestRelation, ManifestTable } from "../dialect/types.js";
|
|
2
|
+
export declare function pascalCase(str: string): string;
|
|
3
|
+
export declare function singularTypeName(accessor: string): string;
|
|
4
|
+
/** User-facing relations: FK/inverse plus M2M aliases, excluding junction-table hops */
|
|
5
|
+
export declare function effectiveRelations(manifest: Manifest, table: ManifestTable): ManifestRelation[];
|
|
6
|
+
//# sourceMappingURL=manifest-relations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-relations.d.ts","sourceRoot":"","sources":["../../src/codegen/manifest-relations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzD;AAiBD,wFAAwF;AACxF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,aAAa,GACnB,gBAAgB,EAAE,CA0CpB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export function pascalCase(str) {
|
|
2
|
+
return str
|
|
3
|
+
.replace(/(^|_)([a-z])/g, (_, __, c) => c.toUpperCase())
|
|
4
|
+
.replace(/_/g, "");
|
|
5
|
+
}
|
|
6
|
+
export function singularTypeName(accessor) {
|
|
7
|
+
const pascal = pascalCase(accessor);
|
|
8
|
+
if (pascal.endsWith("s") && pascal.length > 1) {
|
|
9
|
+
return pascal.slice(0, -1);
|
|
10
|
+
}
|
|
11
|
+
return pascal;
|
|
12
|
+
}
|
|
13
|
+
function uniqueRelations(table) {
|
|
14
|
+
const seen = new Set();
|
|
15
|
+
const result = [];
|
|
16
|
+
for (const rel of table.relations) {
|
|
17
|
+
if (seen.has(rel.name))
|
|
18
|
+
continue;
|
|
19
|
+
seen.add(rel.name);
|
|
20
|
+
result.push(rel);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
function throughAccessors(manifest) {
|
|
25
|
+
return new Set(manifest.manyToMany.map((m) => m.throughAccessor));
|
|
26
|
+
}
|
|
27
|
+
/** User-facing relations: FK/inverse plus M2M aliases, excluding junction-table hops */
|
|
28
|
+
export function effectiveRelations(manifest, table) {
|
|
29
|
+
const through = throughAccessors(manifest);
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
const result = [];
|
|
32
|
+
for (const rel of uniqueRelations(table)) {
|
|
33
|
+
if (through.has(rel.targetAccessor))
|
|
34
|
+
continue;
|
|
35
|
+
if (seen.has(rel.name))
|
|
36
|
+
continue;
|
|
37
|
+
seen.add(rel.name);
|
|
38
|
+
result.push(rel);
|
|
39
|
+
}
|
|
40
|
+
for (const m2m of manifest.manyToMany) {
|
|
41
|
+
if (m2m.leftAccessor === table.accessor && !seen.has(m2m.as)) {
|
|
42
|
+
seen.add(m2m.as);
|
|
43
|
+
result.push({
|
|
44
|
+
name: m2m.as,
|
|
45
|
+
targetTable: m2m.rightTable,
|
|
46
|
+
targetAccessor: m2m.rightAccessor,
|
|
47
|
+
fkColumn: m2m.leftFkColumn,
|
|
48
|
+
fkSqlColumn: m2m.leftFkColumn,
|
|
49
|
+
targetColumn: "id",
|
|
50
|
+
cardinality: "many",
|
|
51
|
+
inverse: m2m.inverse,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
if (m2m.rightAccessor === table.accessor && !seen.has(m2m.inverse)) {
|
|
55
|
+
seen.add(m2m.inverse);
|
|
56
|
+
result.push({
|
|
57
|
+
name: m2m.inverse,
|
|
58
|
+
targetTable: m2m.leftTable,
|
|
59
|
+
targetAccessor: m2m.leftAccessor,
|
|
60
|
+
fkColumn: m2m.rightFkColumn,
|
|
61
|
+
fkSqlColumn: m2m.rightFkColumn,
|
|
62
|
+
targetColumn: "id",
|
|
63
|
+
cardinality: "many",
|
|
64
|
+
inverse: m2m.as,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=manifest-relations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-relations.js","sourceRoot":"","sources":["../../src/codegen/manifest-relations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { TableDef } from "../schema/table.js";
|
|
2
2
|
import type { Manifest } from "../dialect/types.js";
|
|
3
3
|
import type { ManyToManyDef } from "../schema/many-to-many.js";
|
|
4
|
+
import type { NeoOrmPlugin } from "../plugins/types.js";
|
|
4
5
|
export declare function schemaToManifest<T extends Record<string, TableDef>>(schema: {
|
|
5
6
|
readonly _tables: T;
|
|
6
|
-
}, m2mDefs?: readonly ManyToManyDef[]): Manifest;
|
|
7
|
+
}, m2mDefs?: readonly ManyToManyDef[], plugins?: readonly NeoOrmPlugin[]): Manifest;
|
|
7
8
|
export declare function validateManifest(manifest: Manifest): string[];
|
|
8
9
|
//# sourceMappingURL=schema-to-manifest.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAG/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAyGxD,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,EAC3D,OAAO,GAAE,SAAS,YAAY,EAAwB,GACrD,QAAQ,CAyIV;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAiC7D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getManyToManyRegistry } from "../schema/many-to-many.js";
|
|
2
2
|
import { toSnakeCase } from "../utils/case.js";
|
|
3
|
+
import { collectExtensionsForKinds, getColumnType, getPluginRegistry } from "../plugins/registry.js";
|
|
3
4
|
function isFkBuilder(col) {
|
|
4
5
|
return "_meta" in col && col._meta.kind === "fk";
|
|
5
6
|
}
|
|
@@ -39,6 +40,9 @@ function columnToManifest(tsName, col) {
|
|
|
39
40
|
if (meta.defaultValue !== undefined) {
|
|
40
41
|
result.defaultValue = meta.defaultValue;
|
|
41
42
|
}
|
|
43
|
+
if (meta.typeOptions !== undefined) {
|
|
44
|
+
result.typeOptions = meta.typeOptions;
|
|
45
|
+
}
|
|
42
46
|
return result;
|
|
43
47
|
}
|
|
44
48
|
function extrasToManifest(extras) {
|
|
@@ -65,7 +69,8 @@ function buildRelations(columns, accessorMap, sqlNameToAccessor) {
|
|
|
65
69
|
continue;
|
|
66
70
|
const [targetSqlName] = col.fkTarget.split(".");
|
|
67
71
|
const targetAccessor = sqlNameToAccessor[targetSqlName] ?? targetSqlName;
|
|
68
|
-
|
|
72
|
+
// FK holder always resolves to one parent row (many-to-one / one-to-one)
|
|
73
|
+
const cardinality = "one";
|
|
69
74
|
const rel = {
|
|
70
75
|
name: col.fkAs,
|
|
71
76
|
targetTable: targetSqlName,
|
|
@@ -83,7 +88,7 @@ function buildRelations(columns, accessorMap, sqlNameToAccessor) {
|
|
|
83
88
|
}
|
|
84
89
|
return relations;
|
|
85
90
|
}
|
|
86
|
-
export function schemaToManifest(schema, m2mDefs = getManyToManyRegistry()) {
|
|
91
|
+
export function schemaToManifest(schema, m2mDefs = getManyToManyRegistry(), plugins = getPluginRegistry()) {
|
|
87
92
|
const tables = schema._tables;
|
|
88
93
|
const sqlNameToAccessor = {};
|
|
89
94
|
for (const [accessor, table] of Object.entries(tables)) {
|
|
@@ -185,6 +190,7 @@ export function schemaToManifest(schema, m2mDefs = getManyToManyRegistry()) {
|
|
|
185
190
|
version: 1,
|
|
186
191
|
tables: manifestTables,
|
|
187
192
|
manyToMany,
|
|
193
|
+
extensions: collectExtensionsForKinds(Object.values(manifestTables).flatMap((table) => table.columns.map((col) => col.kind))),
|
|
188
194
|
};
|
|
189
195
|
}
|
|
190
196
|
export function validateManifest(manifest) {
|
|
@@ -202,6 +208,10 @@ export function validateManifest(manifest) {
|
|
|
202
208
|
if (!exists) {
|
|
203
209
|
errors.push(`FK ${table.accessor}.${col.tsName} references unknown table ${targetTable}`);
|
|
204
210
|
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (col.kind !== "fk" && !getColumnType(col.kind)) {
|
|
214
|
+
errors.push(`Unknown column kind "${col.kind}" on ${table.accessor}.${col.tsName}. Import the plugin that provides this type.`);
|
|
205
215
|
}
|
|
206
216
|
}
|
|
207
217
|
}
|