neoorm 0.1.4 → 0.2.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.
Files changed (173) hide show
  1. package/README.md +423 -27
  2. package/dist/bin/neoorm.js +117 -30
  3. package/dist/bin/neoorm.js.map +1 -1
  4. package/dist/codegen/diff-manifest.d.ts +7 -1
  5. package/dist/codegen/diff-manifest.d.ts.map +1 -1
  6. package/dist/codegen/diff-manifest.js +100 -4
  7. package/dist/codegen/diff-manifest.js.map +1 -1
  8. package/dist/codegen/emit-includes.d.ts.map +1 -1
  9. package/dist/codegen/emit-includes.js +7 -1
  10. package/dist/codegen/emit-includes.js.map +1 -1
  11. package/dist/codegen/emit-models.d.ts.map +1 -1
  12. package/dist/codegen/emit-models.js +28 -6
  13. package/dist/codegen/emit-models.js.map +1 -1
  14. package/dist/codegen/generate-summary.d.ts +21 -0
  15. package/dist/codegen/generate-summary.d.ts.map +1 -0
  16. package/dist/codegen/generate-summary.js +101 -0
  17. package/dist/codegen/generate-summary.js.map +1 -0
  18. package/dist/codegen/generate.d.ts +12 -3
  19. package/dist/codegen/generate.d.ts.map +1 -1
  20. package/dist/codegen/generate.js +36 -13
  21. package/dist/codegen/generate.js.map +1 -1
  22. package/dist/codegen/manifest-relations.d.ts.map +1 -1
  23. package/dist/codegen/manifest-relations.js +9 -2
  24. package/dist/codegen/manifest-relations.js.map +1 -1
  25. package/dist/codegen/schema-to-manifest.d.ts +4 -1
  26. package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
  27. package/dist/codegen/schema-to-manifest.js +69 -12
  28. package/dist/codegen/schema-to-manifest.js.map +1 -1
  29. package/dist/config.d.ts +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js.map +1 -1
  32. package/dist/dialect/postgres.d.ts +3 -0
  33. package/dist/dialect/postgres.d.ts.map +1 -1
  34. package/dist/dialect/postgres.js +51 -1
  35. package/dist/dialect/postgres.js.map +1 -1
  36. package/dist/dialect/types.d.ts +13 -1
  37. package/dist/dialect/types.d.ts.map +1 -1
  38. package/dist/index.d.ts +11 -5
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +5 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/init/scaffold.d.ts +19 -0
  43. package/dist/init/scaffold.d.ts.map +1 -0
  44. package/dist/init/scaffold.js +92 -0
  45. package/dist/init/scaffold.js.map +1 -0
  46. package/dist/init/templates.d.ts +4 -0
  47. package/dist/init/templates.d.ts.map +1 -0
  48. package/dist/init/templates.js +44 -0
  49. package/dist/init/templates.js.map +1 -0
  50. package/dist/introspect/queries.d.ts +5 -0
  51. package/dist/introspect/queries.d.ts.map +1 -1
  52. package/dist/introspect/queries.js +17 -0
  53. package/dist/introspect/queries.js.map +1 -1
  54. package/dist/introspect/to-manifest.d.ts.map +1 -1
  55. package/dist/introspect/to-manifest.js +58 -14
  56. package/dist/introspect/to-manifest.js.map +1 -1
  57. package/dist/migrate/runner.d.ts +26 -0
  58. package/dist/migrate/runner.d.ts.map +1 -1
  59. package/dist/migrate/runner.js +166 -7
  60. package/dist/migrate/runner.js.map +1 -1
  61. package/dist/plugins/builtin.d.ts +35 -2
  62. package/dist/plugins/builtin.d.ts.map +1 -1
  63. package/dist/plugins/builtin.js +318 -1
  64. package/dist/plugins/builtin.js.map +1 -1
  65. package/dist/plugins/json/operators.d.ts +3 -0
  66. package/dist/plugins/json/operators.d.ts.map +1 -0
  67. package/dist/plugins/json/operators.js +65 -0
  68. package/dist/plugins/json/operators.js.map +1 -0
  69. package/dist/plugins/registry.d.ts.map +1 -1
  70. package/dist/plugins/registry.js +3 -1
  71. package/dist/plugins/registry.js.map +1 -1
  72. package/dist/plugins/types.d.ts +1 -0
  73. package/dist/plugins/types.d.ts.map +1 -1
  74. package/dist/runtime/client.d.ts +33 -3
  75. package/dist/runtime/client.d.ts.map +1 -1
  76. package/dist/runtime/client.js +54 -36
  77. package/dist/runtime/client.js.map +1 -1
  78. package/dist/runtime/errors.d.ts +20 -0
  79. package/dist/runtime/errors.d.ts.map +1 -0
  80. package/dist/runtime/errors.js +68 -0
  81. package/dist/runtime/errors.js.map +1 -0
  82. package/dist/runtime/executor.d.ts +1 -0
  83. package/dist/runtime/executor.d.ts.map +1 -1
  84. package/dist/runtime/executor.js +27 -4
  85. package/dist/runtime/executor.js.map +1 -1
  86. package/dist/runtime/pg-error.d.ts +19 -0
  87. package/dist/runtime/pg-error.d.ts.map +1 -0
  88. package/dist/runtime/pg-error.js +110 -0
  89. package/dist/runtime/pg-error.js.map +1 -0
  90. package/dist/runtime/query/aggregate.d.ts +11 -0
  91. package/dist/runtime/query/aggregate.d.ts.map +1 -0
  92. package/dist/runtime/query/aggregate.js +44 -0
  93. package/dist/runtime/query/aggregate.js.map +1 -0
  94. package/dist/runtime/query/compile.d.ts +21 -6
  95. package/dist/runtime/query/compile.d.ts.map +1 -1
  96. package/dist/runtime/query/compile.js +110 -19
  97. package/dist/runtime/query/compile.js.map +1 -1
  98. package/dist/runtime/query/count.d.ts +3 -3
  99. package/dist/runtime/query/count.d.ts.map +1 -1
  100. package/dist/runtime/query/count.js +7 -4
  101. package/dist/runtime/query/count.js.map +1 -1
  102. package/dist/runtime/query/create.d.ts +12 -2
  103. package/dist/runtime/query/create.d.ts.map +1 -1
  104. package/dist/runtime/query/create.js +74 -111
  105. package/dist/runtime/query/create.js.map +1 -1
  106. package/dist/runtime/query/cursor-codec.d.ts +3 -0
  107. package/dist/runtime/query/cursor-codec.d.ts.map +1 -0
  108. package/dist/runtime/query/cursor-codec.js +27 -0
  109. package/dist/runtime/query/cursor-codec.js.map +1 -0
  110. package/dist/runtime/query/cursor.d.ts +22 -0
  111. package/dist/runtime/query/cursor.d.ts.map +1 -0
  112. package/dist/runtime/query/cursor.js +84 -0
  113. package/dist/runtime/query/cursor.js.map +1 -0
  114. package/dist/runtime/query/delete.d.ts +4 -4
  115. package/dist/runtime/query/delete.d.ts.map +1 -1
  116. package/dist/runtime/query/delete.js +18 -8
  117. package/dist/runtime/query/delete.js.map +1 -1
  118. package/dist/runtime/query/execute.d.ts +16 -0
  119. package/dist/runtime/query/execute.d.ts.map +1 -0
  120. package/dist/runtime/query/execute.js +74 -0
  121. package/dist/runtime/query/execute.js.map +1 -0
  122. package/dist/runtime/query/find.d.ts +7 -5
  123. package/dist/runtime/query/find.d.ts.map +1 -1
  124. package/dist/runtime/query/find.js +148 -29
  125. package/dist/runtime/query/find.js.map +1 -1
  126. package/dist/runtime/query/paginate.d.ts +17 -0
  127. package/dist/runtime/query/paginate.d.ts.map +1 -0
  128. package/dist/runtime/query/paginate.js +35 -0
  129. package/dist/runtime/query/paginate.js.map +1 -0
  130. package/dist/runtime/query/primary-key.d.ts +11 -1
  131. package/dist/runtime/query/primary-key.d.ts.map +1 -1
  132. package/dist/runtime/query/primary-key.js +55 -0
  133. package/dist/runtime/query/primary-key.js.map +1 -1
  134. package/dist/runtime/query/relation-writes.d.ts +25 -0
  135. package/dist/runtime/query/relation-writes.d.ts.map +1 -0
  136. package/dist/runtime/query/relation-writes.js +404 -0
  137. package/dist/runtime/query/relation-writes.js.map +1 -0
  138. package/dist/runtime/query/unique.d.ts.map +1 -1
  139. package/dist/runtime/query/unique.js +1 -5
  140. package/dist/runtime/query/unique.js.map +1 -1
  141. package/dist/runtime/query/update.d.ts +4 -4
  142. package/dist/runtime/query/update.d.ts.map +1 -1
  143. package/dist/runtime/query/update.js +97 -38
  144. package/dist/runtime/query/update.js.map +1 -1
  145. package/dist/runtime/query/updated-at.d.ts +6 -0
  146. package/dist/runtime/query/updated-at.d.ts.map +1 -0
  147. package/dist/runtime/query/updated-at.js +21 -0
  148. package/dist/runtime/query/updated-at.js.map +1 -0
  149. package/dist/runtime/query/upsert.d.ts +2 -2
  150. package/dist/runtime/query/upsert.d.ts.map +1 -1
  151. package/dist/runtime/query/upsert.js +12 -8
  152. package/dist/runtime/query/upsert.js.map +1 -1
  153. package/dist/runtime/types.d.ts +21 -11
  154. package/dist/runtime/types.d.ts.map +1 -1
  155. package/dist/schema/column-where.d.ts +30 -14
  156. package/dist/schema/column-where.d.ts.map +1 -1
  157. package/dist/schema/column.d.ts +6 -2
  158. package/dist/schema/column.d.ts.map +1 -1
  159. package/dist/schema/column.js +7 -1
  160. package/dist/schema/column.js.map +1 -1
  161. package/dist/schema/index.d.ts +4 -4
  162. package/dist/schema/index.d.ts.map +1 -1
  163. package/dist/schema/index.js +1 -1
  164. package/dist/schema/index.js.map +1 -1
  165. package/dist/schema/nested-relation-types.d.ts +61 -0
  166. package/dist/schema/nested-relation-types.d.ts.map +1 -0
  167. package/dist/schema/nested-relation-types.js +2 -0
  168. package/dist/schema/nested-relation-types.js.map +1 -0
  169. package/dist/schema/relation-types.d.ts +164 -22
  170. package/dist/schema/relation-types.d.ts.map +1 -1
  171. package/dist/schema/types.d.ts +83 -37
  172. package/dist/schema/types.d.ts.map +1 -1
  173. package/package.json +1 -1
@@ -0,0 +1,92 @@
1
+ import { access, writeFile } from "node:fs/promises";
2
+ import { join, relative, resolve } from "node:path";
3
+ import { generateFromSchema } from "../codegen/generate.js";
4
+ import { envExampleTemplate, neoormConfigTemplate, schemaTemplate, } from "./templates.js";
5
+ const CONFIG_FILE = "neoorm.config.ts";
6
+ const ENV_EXAMPLE_FILE = ".env.example";
7
+ async function fileExists(path) {
8
+ try {
9
+ await access(path);
10
+ return true;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ function toDisplayPath(cwd, absolutePath) {
17
+ const rel = relative(cwd, absolutePath);
18
+ return rel.startsWith("..") ? absolutePath : rel || ".";
19
+ }
20
+ export async function runInit(options = {}) {
21
+ const cwd = resolve(options.cwd ?? process.cwd());
22
+ const schemaRel = options.schemaPath ?? "./schema.ts";
23
+ const outRel = options.outDir ?? "./neoorm";
24
+ const schemaPath = resolve(cwd, schemaRel);
25
+ const outDir = resolve(cwd, outRel);
26
+ const configPath = join(cwd, CONFIG_FILE);
27
+ const envExamplePath = join(cwd, ENV_EXAMPLE_FILE);
28
+ const scaffoldTargets = [
29
+ { path: configPath, label: CONFIG_FILE },
30
+ { path: schemaPath, label: toDisplayPath(cwd, schemaPath) },
31
+ { path: envExamplePath, label: ENV_EXAMPLE_FILE },
32
+ ];
33
+ const existing = [];
34
+ for (const target of scaffoldTargets) {
35
+ if (await fileExists(target.path)) {
36
+ existing.push(target.label);
37
+ }
38
+ }
39
+ if (existing.length > 0 && !options.force) {
40
+ throw new Error(`Scaffold files already exist: ${existing.join(", ")}. Re-run with --force to overwrite.`);
41
+ }
42
+ const written = [];
43
+ const skipped = [];
44
+ const filesToWrite = [
45
+ {
46
+ path: configPath,
47
+ label: CONFIG_FILE,
48
+ content: neoormConfigTemplate(schemaRel, outRel),
49
+ },
50
+ {
51
+ path: schemaPath,
52
+ label: toDisplayPath(cwd, schemaPath),
53
+ content: schemaTemplate(),
54
+ },
55
+ {
56
+ path: envExamplePath,
57
+ label: ENV_EXAMPLE_FILE,
58
+ content: envExampleTemplate(),
59
+ },
60
+ ];
61
+ for (const file of filesToWrite) {
62
+ if (!options.force && (await fileExists(file.path))) {
63
+ skipped.push(file.label);
64
+ continue;
65
+ }
66
+ await writeFile(file.path, file.content, "utf-8");
67
+ written.push(file.label);
68
+ }
69
+ const { migrationName, summary, warnings } = await generateFromSchema(schemaPath, outDir);
70
+ return {
71
+ written,
72
+ skipped,
73
+ migrationName,
74
+ outDir,
75
+ schemaPath,
76
+ summary,
77
+ warnings,
78
+ };
79
+ }
80
+ export function formatInitNextSteps(cwd, schemaPath, outDir) {
81
+ const schemaImport = toDisplayPath(cwd, resolve(schemaPath));
82
+ const clientImport = `${outDir.replace(/^\.\//, "")}/client.js`;
83
+ return [
84
+ "Next steps:",
85
+ " 1. cp .env.example .env # set DATABASE_URL",
86
+ " 2. neoorm migrate deploy",
87
+ " 3. neoorm migrate down # roll back last migration in dev",
88
+ ` 4. import { db } from "./${clientImport}"`,
89
+ ` # schema: ${schemaImport}`,
90
+ ];
91
+ }
92
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/init/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function neoormConfigTemplate(schemaPath: string, outDir: string): string;
2
+ export declare function schemaTemplate(): string;
3
+ export declare function envExampleTemplate(): string;
4
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAa/E;AAED,wBAAgB,cAAc,IAAI,MAAM,CAwBvC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C"}
@@ -0,0 +1,44 @@
1
+ export function neoormConfigTemplate(schemaPath, outDir) {
2
+ return `import { defineConfig } from "neoorm";
3
+
4
+ export default defineConfig({
5
+ schema: "${schemaPath}",
6
+ out: "${outDir}",
7
+ datasource: {
8
+ provider: "postgresql",
9
+ url: process.env.DATABASE_URL ?? "postgresql://postgres:postgres@localhost:5432/myapp",
10
+ enum: "check",
11
+ },
12
+ });
13
+ `;
14
+ }
15
+ export function schemaTemplate() {
16
+ return `import { defineSchema, table, id, text, timestamp, fk } from "neoorm/schema";
17
+
18
+ export const schema = defineSchema({
19
+ users: table("users", {
20
+ id: id.primary(),
21
+ email: text().notNull().unique(),
22
+ createdAt: timestamp().notNull().defaultNow(),
23
+ updatedAt: timestamp().notNull().defaultNow().updatedAt(),
24
+ }),
25
+
26
+ posts: table("posts", {
27
+ id: id.primary(),
28
+ authorId: fk("users.id", {
29
+ as: "author",
30
+ inverse: "posts",
31
+ nullable: false,
32
+ }),
33
+ title: text().notNull(),
34
+ createdAt: timestamp().notNull().defaultNow(),
35
+ updatedAt: timestamp().notNull().defaultNow().updatedAt(),
36
+ }),
37
+ });
38
+ `;
39
+ }
40
+ export function envExampleTemplate() {
41
+ return `DATABASE_URL=postgresql://postgres:postgres@localhost:5432/myapp
42
+ `;
43
+ }
44
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,MAAc;IACrE,OAAO;;;aAGI,UAAU;UACb,MAAM;;;;;;;CAOf,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;CAsBR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;CACR,CAAC;AACF,CAAC"}
@@ -33,4 +33,9 @@ export declare function queryIndexes(pool: Pool, tableName: string): Promise<Ind
33
33
  export declare function queryUniqueConstraints(pool: Pool, tableName: string): Promise<UniqueConstraintRow[]>;
34
34
  export declare function queryPrimaryKeyColumns(pool: Pool, tableName: string): Promise<string[]>;
35
35
  export declare function queryInstalledExtensions(pool: Pool): Promise<string[]>;
36
+ export type EnumTypeRow = {
37
+ typname: string;
38
+ enumlabel: string;
39
+ };
40
+ export declare function queryEnumTypes(pool: Pool): Promise<Record<string, string[]>>;
36
41
  //# sourceMappingURL=queries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/introspect/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAUjE;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,EAAE,CAAC,CAWtB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC,CA0BlB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAqBrB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiBhC;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5E"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/introspect/queries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAUjE;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,EAAE,CAAC,CAWtB;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,EAAE,CAAC,CA0BlB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAqBrB;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAiBhC;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5E;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAiBlF"}
@@ -99,4 +99,21 @@ export async function queryInstalledExtensions(pool) {
99
99
  `);
100
100
  return result.rows.map((row) => row.extname);
101
101
  }
102
+ export async function queryEnumTypes(pool) {
103
+ const result = await pool.query(`
104
+ SELECT t.typname, e.enumlabel
105
+ FROM pg_type t
106
+ JOIN pg_enum e ON t.oid = e.enumtypid
107
+ JOIN pg_namespace n ON n.oid = t.typnamespace
108
+ WHERE n.nspname = 'public'
109
+ ORDER BY t.typname, e.enumsortorder
110
+ `);
111
+ const enumTypes = {};
112
+ for (const row of result.rows) {
113
+ const existing = enumTypes[row.typname] ?? [];
114
+ existing.push(row.enumlabel);
115
+ enumTypes[row.typname] = existing;
116
+ }
117
+ return enumTypes;
118
+ }
102
119
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/introspect/queries.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAU;IAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAW;;;;;;;GAOzC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;GAKD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;;;;;;;;;;GAoBD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;;;;;GAeD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;GAWD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;GAUD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAU;IACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAsB;;;;;GAKpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/introspect/queries.ts"],"names":[],"mappings":"AAkCA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAU;IAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAW;;;;;;;GAOzC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;GAKD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;;;;;;;;;;GAoBD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;;;;;GAeD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;;GAWD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAU,EACV,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B;;;;;;;;;;GAUD,EACC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAAU;IACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAsB;;;;;GAKpD,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAU;IAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAc;;;;;;;GAO5C,CAAC,CAAC;IAEH,MAAM,SAAS,GAA6B,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"to-manifest.d.ts","sourceRoot":"","sources":["../../src/introspect/to-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EACV,QAAQ,EAIT,MAAM,qBAAqB,CAAC;AAqN7B,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsBxE"}
1
+ {"version":3,"file":"to-manifest.d.ts","sourceRoot":"","sources":["../../src/introspect/to-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EACV,QAAQ,EAIT,MAAM,qBAAqB,CAAC;AAoQ7B,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+BxE"}
@@ -1,11 +1,24 @@
1
1
  import { toCamelCase } from "../utils/case.js";
2
2
  import { findIntrospectColumnType } from "../plugins/registry.js";
3
3
  import { pgStorageSqlType } from "../dialect/postgres.js";
4
- import { queryColumns, queryForeignKeys, queryIndexes, queryInstalledExtensions, queryPrimaryKeyColumns, queryTables, queryUniqueConstraints, } from "./queries.js";
4
+ import { queryColumns, queryForeignKeys, queryIndexes, queryInstalledExtensions, queryPrimaryKeyColumns, queryTables, queryUniqueConstraints, queryEnumTypes, } from "./queries.js";
5
5
  function tableAccessor(tableName) {
6
6
  return toCamelCase(tableName.endsWith("s") ? tableName : `${tableName}s`);
7
7
  }
8
- function pgTypeToKind(dataType, udtName) {
8
+ function isSerialColumn(dataType, columnDefault) {
9
+ if (dataType !== "integer") {
10
+ return false;
11
+ }
12
+ if (!columnDefault) {
13
+ return false;
14
+ }
15
+ return (columnDefault.includes("nextval(") ||
16
+ columnDefault.toLowerCase().includes("generated"));
17
+ }
18
+ function pgTypeToKind(dataType, udtName, enumTypes) {
19
+ if (enumTypes[udtName]) {
20
+ return "enum";
21
+ }
9
22
  const pluginType = findIntrospectColumnType(dataType, udtName);
10
23
  if (pluginType) {
11
24
  return pluginType.kind;
@@ -37,10 +50,24 @@ function parseDefaultValue(kind, columnDefault) {
37
50
  if (columnDefault === "false")
38
51
  return { defaultNow: false, defaultValue: false };
39
52
  }
40
- if (kind === "int") {
41
- const match = columnDefault.match(/^(-?\d+)/);
53
+ if (kind === "int" || kind === "decimal") {
54
+ const match = columnDefault.match(/^(-?\d+(?:\.\d+)?)/);
42
55
  if (match) {
43
- return { defaultNow: false, defaultValue: Number(match[1]) };
56
+ return { defaultNow: false, defaultValue: kind === "int" ? Number(match[1]) : match[1] };
57
+ }
58
+ }
59
+ if (kind === "json" || kind === "jsonb") {
60
+ const jsonMatch = columnDefault.match(/^'((?:''|[^'])*)'::/);
61
+ if (jsonMatch) {
62
+ try {
63
+ return {
64
+ defaultNow: false,
65
+ defaultValue: JSON.parse(jsonMatch[1].replace(/''/g, "'")),
66
+ };
67
+ }
68
+ catch {
69
+ return { defaultNow: false };
70
+ }
44
71
  }
45
72
  }
46
73
  const stringMatch = columnDefault.match(/^'((?:''|[^'])*)'::/);
@@ -95,7 +122,7 @@ function filterConstraintBackedIndexes(indexes, columns) {
95
122
  return !uniqueColumns.has(index.columns[0]);
96
123
  });
97
124
  }
98
- async function introspectTable(pool, tableName) {
125
+ async function introspectTable(pool, tableName, enumTypes) {
99
126
  const [columns, fks, indexRows, uniqueRows, primaryKey] = await Promise.all([
100
127
  queryColumns(pool, tableName),
101
128
  queryForeignKeys(pool, tableName),
@@ -111,7 +138,9 @@ async function introspectTable(pool, tableName) {
111
138
  const fk = fkMap.get(col.column_name);
112
139
  const nullable = col.is_nullable === "YES";
113
140
  const uniqueConstraintName = uniqueMap.get(col.column_name);
114
- const defaults = parseDefaultValue(fk ? "fk" : pgTypeToKind(col.data_type, col.udt_name), col.column_default);
141
+ const defaults = parseDefaultValue(fk ? "fk" : isSerialColumn(col.data_type, col.column_default)
142
+ ? "serial"
143
+ : pgTypeToKind(col.data_type, col.udt_name, enumTypes), col.column_default);
115
144
  if (fk) {
116
145
  const onDelete = mapDeleteRule(fk.delete_rule);
117
146
  return {
@@ -132,11 +161,13 @@ async function introspectTable(pool, tableName) {
132
161
  ...(onDelete ? { onDelete } : {}),
133
162
  };
134
163
  }
135
- const kind = col.column_name === "id" && col.udt_name === "uuid"
136
- ? "uuid"
137
- : col.column_name === "id"
138
- ? "id"
139
- : pgTypeToKind(col.data_type, col.udt_name);
164
+ const kind = isSerialColumn(col.data_type, col.column_default)
165
+ ? "serial"
166
+ : col.column_name === "id" && col.udt_name === "uuid"
167
+ ? "uuid"
168
+ : col.column_name === "id"
169
+ ? "id"
170
+ : pgTypeToKind(col.data_type, col.udt_name, enumTypes);
140
171
  const column = {
141
172
  tsName,
142
173
  sqlName: col.column_name,
@@ -150,12 +181,19 @@ async function introspectTable(pool, tableName) {
150
181
  ? { defaultValue: defaults.defaultValue }
151
182
  : {}),
152
183
  ...(uniqueConstraintName ? { uniqueConstraintName } : {}),
184
+ ...(kind === "serial" ? { generated: true } : {}),
153
185
  };
154
186
  if (kind === "uuid" && col.column_default?.includes("gen_random_uuid")) {
155
187
  column.typeOptions = {
156
188
  version: col.column_default.includes("uuid_generate_v4()") ? 4 : 7,
157
189
  };
158
190
  }
191
+ if (kind === "enum" && enumTypes[col.udt_name]) {
192
+ column.typeOptions = {
193
+ values: enumTypes[col.udt_name],
194
+ nativeTypeName: col.udt_name,
195
+ };
196
+ }
159
197
  return column;
160
198
  });
161
199
  return {
@@ -170,16 +208,22 @@ async function introspectTable(pool, tableName) {
170
208
  export async function introspectToManifest(pool) {
171
209
  const tables = await queryTables(pool);
172
210
  const extensions = await queryInstalledExtensions(pool);
211
+ const enumTypes = await queryEnumTypes(pool);
173
212
  const manifestTables = {};
174
213
  for (const { table_name } of tables) {
175
- const table = await introspectTable(pool, table_name);
214
+ const table = await introspectTable(pool, table_name, enumTypes);
176
215
  manifestTables[table.accessor] = table;
177
216
  }
178
- const relevantExtensions = extensions.filter((ext) => ["postgis"].includes(ext));
217
+ const relevantExtensions = extensions.filter((ext) => ["postgis", "citext"].includes(ext));
218
+ const manifestEnumTypes = Object.fromEntries(Object.entries(enumTypes).map(([name, values]) => [name, { values }]));
179
219
  return {
180
220
  version: 1,
181
221
  tables: manifestTables,
182
222
  manyToMany: [],
223
+ enumMode: "native",
224
+ ...(Object.keys(manifestEnumTypes).length > 0
225
+ ? { enumTypes: manifestEnumTypes }
226
+ : {}),
183
227
  ...(relevantExtensions.length > 0
184
228
  ? { extensions: relevantExtensions }
185
229
  : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"to-manifest.js","sourceRoot":"","sources":["../../src/introspect/to-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"to-manifest.js","sourceRoot":"","sources":["../../src/introspect/to-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,37 @@
1
1
  import type { Pool } from "pg";
2
2
  import type { Manifest } from "../dialect/types.js";
3
+ export type MigrationRecord = {
4
+ name: string;
5
+ appliedAt: Date;
6
+ };
7
+ export type MigrationStatus = {
8
+ applied: MigrationRecord[];
9
+ pending: string[];
10
+ orphanApplied: string[];
11
+ };
3
12
  export declare function ensureMigrationsTable(pool: Pool): Promise<void>;
13
+ export declare function listAppliedMigrations(pool: Pool): Promise<MigrationRecord[]>;
4
14
  export declare function getAppliedMigrations(pool: Pool): Promise<Set<string>>;
15
+ export declare function listMigrationsOnDisk(migrationsDir: string): Promise<string[]>;
16
+ export declare function computeMigrationStatus(diskMigrations: string[], applied: MigrationRecord[]): MigrationStatus;
17
+ export declare function migrateStatus(pool: Pool, migrationsDir: string): Promise<MigrationStatus>;
18
+ export declare function formatMigrateStatus(status: MigrationStatus, migrationsDir: string): string[];
19
+ export declare function resetDatabaseSchema(pool: Pool): Promise<void>;
20
+ export declare function migrateReset(pool: Pool, migrationsDir: string, options: {
21
+ force: boolean;
22
+ skipApply?: boolean;
23
+ }): Promise<{
24
+ reapplied: string[];
25
+ }>;
5
26
  export declare function listPendingMigrations(migrationsDir: string, applied: Set<string>): Promise<string[]>;
6
27
  export declare function applySql(pool: Pool, sql: string[]): Promise<void>;
7
28
  export declare function applyMigration(pool: Pool, migrationsDir: string, name: string): Promise<void>;
8
29
  export declare function migrateDeploy(pool: Pool, migrationsDir: string): Promise<string[]>;
30
+ export declare function revertMigration(pool: Pool, migrationsDir: string, name: string): Promise<void>;
31
+ export declare function migrateDown(pool: Pool, migrationsDir: string, options?: {
32
+ steps?: number;
33
+ outDir?: string;
34
+ }): Promise<string[]>;
9
35
  export type DbPushResult = {
10
36
  appliedStatements: number;
11
37
  destructiveBlocked: DestructiveChange[];
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/migrate/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAWpD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAQrE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAM3E;AAED,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvE;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,iBAAiB,GAAG,OAAO,qBAAqB,EAAE,iBAAiB,CAAC;AAEzE,wBAAsB,MAAM,CAC1B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,QAAQ,EAChB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgBvB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,CAerE"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/migrate/runner.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import { join } from "node:path";
1
+ import { readdir, readFile, stat } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
3
  import { postgresDialect } from "../dialect/postgres.js";
4
4
  import { diffManifest, formatDestructiveWarnings, resolveMigrationSql, } from "../codegen/diff-manifest.js";
5
+ import { writeSnapshot } from "../codegen/generate.js";
5
6
  import { introspectToManifest } from "../introspect/to-manifest.js";
6
7
  const MIGRATIONS_TABLE = "_neoorm_migrations";
7
8
  export async function ensureMigrationsTable(pool) {
@@ -13,12 +14,19 @@ export async function ensureMigrationsTable(pool) {
13
14
  )
14
15
  `);
15
16
  }
16
- export async function getAppliedMigrations(pool) {
17
+ export async function listAppliedMigrations(pool) {
17
18
  await ensureMigrationsTable(pool);
18
- const result = await pool.query(`SELECT name FROM ${postgresDialect.quoteIdentifier(MIGRATIONS_TABLE)} ORDER BY id`);
19
- return new Set(result.rows.map((r) => r.name));
19
+ const result = await pool.query(`SELECT name, applied_at FROM ${postgresDialect.quoteIdentifier(MIGRATIONS_TABLE)} ORDER BY id`);
20
+ return result.rows.map((row) => ({
21
+ name: row.name,
22
+ appliedAt: row.applied_at,
23
+ }));
20
24
  }
21
- export async function listPendingMigrations(migrationsDir, applied) {
25
+ export async function getAppliedMigrations(pool) {
26
+ const applied = await listAppliedMigrations(pool);
27
+ return new Set(applied.map((record) => record.name));
28
+ }
29
+ export async function listMigrationsOnDisk(migrationsDir) {
22
30
  let entries;
23
31
  try {
24
32
  entries = await readdir(migrationsDir);
@@ -26,7 +34,93 @@ export async function listPendingMigrations(migrationsDir, applied) {
26
34
  catch {
27
35
  return [];
28
36
  }
29
- return entries.filter((e) => !applied.has(e)).sort();
37
+ const migrations = [];
38
+ for (const entry of entries) {
39
+ const entryPath = join(migrationsDir, entry);
40
+ try {
41
+ const entryStat = await stat(entryPath);
42
+ if (!entryStat.isDirectory()) {
43
+ continue;
44
+ }
45
+ await readFile(join(entryPath, "migration.sql"), "utf-8");
46
+ migrations.push(entry);
47
+ }
48
+ catch {
49
+ // skip entries without migration.sql
50
+ }
51
+ }
52
+ return migrations.sort();
53
+ }
54
+ export function computeMigrationStatus(diskMigrations, applied) {
55
+ const appliedNames = new Set(applied.map((record) => record.name));
56
+ const diskSet = new Set(diskMigrations);
57
+ const pending = diskMigrations.filter((name) => !appliedNames.has(name));
58
+ const orphanApplied = applied
59
+ .map((record) => record.name)
60
+ .filter((name) => !diskSet.has(name));
61
+ return { applied, pending, orphanApplied };
62
+ }
63
+ export async function migrateStatus(pool, migrationsDir) {
64
+ const [applied, diskMigrations] = await Promise.all([
65
+ listAppliedMigrations(pool),
66
+ listMigrationsOnDisk(migrationsDir),
67
+ ]);
68
+ return computeMigrationStatus(diskMigrations, applied);
69
+ }
70
+ export function formatMigrateStatus(status, migrationsDir) {
71
+ const lines = [`Migration status (${migrationsDir})`, ""];
72
+ lines.push("Applied:");
73
+ if (status.applied.length === 0) {
74
+ lines.push(" (none)");
75
+ }
76
+ else {
77
+ for (const record of status.applied) {
78
+ const appliedAt = record.appliedAt.toISOString().replace("T", " ").replace(/\.\d{3}Z$/, " UTC");
79
+ lines.push(` ✓ ${record.name.padEnd(28)} ${appliedAt}`);
80
+ }
81
+ }
82
+ lines.push("");
83
+ lines.push("Pending:");
84
+ if (status.pending.length === 0) {
85
+ lines.push(" (none)");
86
+ }
87
+ else {
88
+ for (const name of status.pending) {
89
+ lines.push(` ○ ${name}`);
90
+ }
91
+ }
92
+ if (status.orphanApplied.length > 0) {
93
+ lines.push("");
94
+ lines.push("Warnings:");
95
+ for (const name of status.orphanApplied) {
96
+ lines.push(` ! Applied migration missing on disk: ${name}`);
97
+ }
98
+ }
99
+ lines.push("");
100
+ lines.push(`Summary: ${status.applied.length} applied, ${status.pending.length} pending`);
101
+ return lines;
102
+ }
103
+ export async function resetDatabaseSchema(pool) {
104
+ await pool.query(`
105
+ DROP SCHEMA public CASCADE;
106
+ CREATE SCHEMA public;
107
+ GRANT ALL ON SCHEMA public TO PUBLIC;
108
+ `);
109
+ }
110
+ export async function migrateReset(pool, migrationsDir, options) {
111
+ if (!options.force) {
112
+ throw new Error("migrate reset requires --force. This drops the public schema and all data.");
113
+ }
114
+ await resetDatabaseSchema(pool);
115
+ if (options.skipApply) {
116
+ return { reapplied: [] };
117
+ }
118
+ const reapplied = await migrateDeploy(pool, migrationsDir);
119
+ return { reapplied };
120
+ }
121
+ export async function listPendingMigrations(migrationsDir, applied) {
122
+ const diskMigrations = await listMigrationsOnDisk(migrationsDir);
123
+ return diskMigrations.filter((name) => !applied.has(name));
30
124
  }
31
125
  export async function applySql(pool, sql) {
32
126
  if (sql.length === 0) {
@@ -74,6 +168,71 @@ export async function migrateDeploy(pool, migrationsDir) {
74
168
  }
75
169
  return pending;
76
170
  }
171
+ async function readDownSql(migrationsDir, name) {
172
+ const sqlPath = join(migrationsDir, name, "down.sql");
173
+ try {
174
+ return await readFile(sqlPath, "utf-8");
175
+ }
176
+ catch {
177
+ throw new Error(`Migration "${name}" has no down.sql. Re-generate the migration or add down.sql manually.`);
178
+ }
179
+ }
180
+ async function readSnapshotBefore(migrationsDir, name) {
181
+ const snapshotPath = join(migrationsDir, name, "snapshot.before.json");
182
+ try {
183
+ const content = await readFile(snapshotPath, "utf-8");
184
+ return JSON.parse(content);
185
+ }
186
+ catch {
187
+ throw new Error(`Migration "${name}" has no snapshot.before.json. Re-generate the migration.`);
188
+ }
189
+ }
190
+ export async function revertMigration(pool, migrationsDir, name) {
191
+ const sql = await readDownSql(migrationsDir, name);
192
+ const client = await pool.connect();
193
+ try {
194
+ await client.query("BEGIN");
195
+ if (sql.trim().length > 0) {
196
+ await client.query(sql);
197
+ }
198
+ await client.query(`DELETE FROM ${postgresDialect.quoteIdentifier(MIGRATIONS_TABLE)} WHERE name = $1`, [name]);
199
+ await client.query("COMMIT");
200
+ }
201
+ catch (err) {
202
+ await client.query("ROLLBACK");
203
+ throw err;
204
+ }
205
+ finally {
206
+ client.release();
207
+ }
208
+ }
209
+ export async function migrateDown(pool, migrationsDir, options) {
210
+ const steps = options?.steps ?? 1;
211
+ if (steps < 1) {
212
+ throw new Error("steps must be at least 1");
213
+ }
214
+ const applied = await listAppliedMigrations(pool);
215
+ if (applied.length === 0) {
216
+ throw new Error("No applied migrations to roll back");
217
+ }
218
+ if (steps > applied.length) {
219
+ throw new Error(`Cannot roll back ${steps} migration(s): only ${applied.length} applied`);
220
+ }
221
+ const toRevert = applied.slice(-steps).map((record) => record.name).reverse();
222
+ for (const name of toRevert) {
223
+ await readDownSql(migrationsDir, name);
224
+ }
225
+ const reverted = [];
226
+ for (const name of toRevert) {
227
+ await revertMigration(pool, migrationsDir, name);
228
+ reverted.push(name);
229
+ }
230
+ const outDir = options?.outDir ?? dirname(migrationsDir);
231
+ const oldestReverted = toRevert[toRevert.length - 1];
232
+ const snapshotBefore = await readSnapshotBefore(migrationsDir, oldestReverted);
233
+ await writeSnapshot(outDir, snapshotBefore);
234
+ return reverted;
235
+ }
77
236
  export async function dbPush(pool, target, options = {}) {
78
237
  const live = await introspectToManifest(pool);
79
238
  const manifestDiff = diffManifest(live, target);