neoorm 0.9.6 → 0.9.8

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 (217) hide show
  1. package/dist/bin/neoorm.d.ts.map +1 -1
  2. package/dist/bin/neoorm.js +83 -141
  3. package/dist/bin/neoorm.js.map +1 -1
  4. package/dist/codegen/column-ts.d.ts.map +1 -1
  5. package/dist/codegen/column-ts.js +5 -2
  6. package/dist/codegen/column-ts.js.map +1 -1
  7. package/dist/codegen/diff-manifest.js +1 -1
  8. package/dist/codegen/diff-manifest.js.map +1 -1
  9. package/dist/codegen/emit-includes.d.ts.map +1 -1
  10. package/dist/codegen/emit-includes.js +11 -8
  11. package/dist/codegen/emit-includes.js.map +1 -1
  12. package/dist/codegen/emit-models.d.ts.map +1 -1
  13. package/dist/codegen/emit-models.js +9 -8
  14. package/dist/codegen/emit-models.js.map +1 -1
  15. package/dist/codegen/emit-query-types.d.ts.map +1 -1
  16. package/dist/codegen/emit-query-types.js +53 -16
  17. package/dist/codegen/emit-query-types.js.map +1 -1
  18. package/dist/codegen/generate.d.ts +1 -0
  19. package/dist/codegen/generate.d.ts.map +1 -1
  20. package/dist/codegen/generate.js +8 -1
  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 +2 -1
  24. package/dist/codegen/manifest-relations.js.map +1 -1
  25. package/dist/codegen/schema-to-manifest.d.ts.map +1 -1
  26. package/dist/codegen/schema-to-manifest.js +174 -8
  27. package/dist/codegen/schema-to-manifest.js.map +1 -1
  28. package/dist/codegen/ts-syntax.d.ts +12 -0
  29. package/dist/codegen/ts-syntax.d.ts.map +1 -0
  30. package/dist/codegen/ts-syntax.js +24 -0
  31. package/dist/codegen/ts-syntax.js.map +1 -0
  32. package/dist/codegen/validation/emit-elysia.d.ts.map +1 -1
  33. package/dist/codegen/validation/emit-elysia.js +5 -4
  34. package/dist/codegen/validation/emit-elysia.js.map +1 -1
  35. package/dist/codegen/validation/emit-typebox.d.ts.map +1 -1
  36. package/dist/codegen/validation/emit-typebox.js +5 -4
  37. package/dist/codegen/validation/emit-typebox.js.map +1 -1
  38. package/dist/codegen/validation/emit-zod.d.ts.map +1 -1
  39. package/dist/codegen/validation/emit-zod.js +5 -4
  40. package/dist/codegen/validation/emit-zod.js.map +1 -1
  41. package/dist/codegen/validation/from-manifest.d.ts.map +1 -1
  42. package/dist/codegen/validation/from-manifest.js +37 -10
  43. package/dist/codegen/validation/from-manifest.js.map +1 -1
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +8 -1
  46. package/dist/config.js.map +1 -1
  47. package/dist/dialect/mariadb.test.js +28 -1
  48. package/dist/dialect/mariadb.test.js.map +1 -1
  49. package/dist/dialect/mysql-family.js +6 -6
  50. package/dist/dialect/mysql-family.js.map +1 -1
  51. package/dist/dialect/mysql.test.js +33 -1
  52. package/dist/dialect/mysql.test.js.map +1 -1
  53. package/dist/dialect/postgres.js +1 -1
  54. package/dist/dialect/postgres.js.map +1 -1
  55. package/dist/dialect/sqlite.js +1 -1
  56. package/dist/dialect/sqlite.js.map +1 -1
  57. package/dist/dialect/sqlite.test.js +9 -0
  58. package/dist/dialect/sqlite.test.js.map +1 -1
  59. package/dist/dialect/types.d.ts +1 -1
  60. package/dist/dialect/types.d.ts.map +1 -1
  61. package/dist/init/prompt.d.ts.map +1 -1
  62. package/dist/init/prompt.js +14 -3
  63. package/dist/init/prompt.js.map +1 -1
  64. package/dist/init/scaffold.d.ts.map +1 -1
  65. package/dist/init/scaffold.js +31 -4
  66. package/dist/init/scaffold.js.map +1 -1
  67. package/dist/init/templates.d.ts +5 -0
  68. package/dist/init/templates.d.ts.map +1 -1
  69. package/dist/init/templates.js +33 -6
  70. package/dist/init/templates.js.map +1 -1
  71. package/dist/init/validate.d.ts +3 -1
  72. package/dist/init/validate.d.ts.map +1 -1
  73. package/dist/init/validate.js +61 -4
  74. package/dist/init/validate.js.map +1 -1
  75. package/dist/introspect/mysql/to-manifest.d.ts.map +1 -1
  76. package/dist/introspect/mysql/to-manifest.js +2 -1
  77. package/dist/introspect/mysql/to-manifest.js.map +1 -1
  78. package/dist/introspect/pull.d.ts +5 -0
  79. package/dist/introspect/pull.d.ts.map +1 -1
  80. package/dist/introspect/pull.js +186 -35
  81. package/dist/introspect/pull.js.map +1 -1
  82. package/dist/introspect/sqlite/to-manifest.d.ts.map +1 -1
  83. package/dist/introspect/sqlite/to-manifest.js +2 -1
  84. package/dist/introspect/sqlite/to-manifest.js.map +1 -1
  85. package/dist/introspect/table-map.d.ts +9 -0
  86. package/dist/introspect/table-map.d.ts.map +1 -0
  87. package/dist/introspect/table-map.js +21 -0
  88. package/dist/introspect/table-map.js.map +1 -0
  89. package/dist/introspect/to-manifest.d.ts.map +1 -1
  90. package/dist/introspect/to-manifest.js +2 -1
  91. package/dist/introspect/to-manifest.js.map +1 -1
  92. package/dist/migrate/dev-workflow.d.ts +36 -0
  93. package/dist/migrate/dev-workflow.d.ts.map +1 -0
  94. package/dist/migrate/dev-workflow.js +96 -0
  95. package/dist/migrate/dev-workflow.js.map +1 -0
  96. package/dist/migrate/runner.d.ts +4 -1
  97. package/dist/migrate/runner.d.ts.map +1 -1
  98. package/dist/migrate/runner.js +140 -29
  99. package/dist/migrate/runner.js.map +1 -1
  100. package/dist/runtime/client.d.ts.map +1 -1
  101. package/dist/runtime/client.js +2 -0
  102. package/dist/runtime/client.js.map +1 -1
  103. package/dist/runtime/client.test.js +43 -0
  104. package/dist/runtime/client.test.js.map +1 -1
  105. package/dist/runtime/driver-sqlite.test.js +186 -0
  106. package/dist/runtime/driver-sqlite.test.js.map +1 -1
  107. package/dist/runtime/driver.d.ts +8 -0
  108. package/dist/runtime/driver.d.ts.map +1 -1
  109. package/dist/runtime/driver.js +76 -125
  110. package/dist/runtime/driver.js.map +1 -1
  111. package/dist/runtime/error-codes.d.ts +3 -0
  112. package/dist/runtime/error-codes.d.ts.map +1 -1
  113. package/dist/runtime/error-codes.js +3 -0
  114. package/dist/runtime/error-codes.js.map +1 -1
  115. package/dist/runtime/error-hints.d.ts.map +1 -1
  116. package/dist/runtime/error-hints.js +19 -15
  117. package/dist/runtime/error-hints.js.map +1 -1
  118. package/dist/runtime/errors.d.ts +6 -0
  119. package/dist/runtime/errors.d.ts.map +1 -1
  120. package/dist/runtime/errors.js +60 -21
  121. package/dist/runtime/errors.js.map +1 -1
  122. package/dist/runtime/executor.d.ts.map +1 -1
  123. package/dist/runtime/executor.js +16 -17
  124. package/dist/runtime/executor.js.map +1 -1
  125. package/dist/runtime/mariadb-driver.d.ts.map +1 -1
  126. package/dist/runtime/mariadb-driver.js +12 -15
  127. package/dist/runtime/mariadb-driver.js.map +1 -1
  128. package/dist/runtime/mysql-driver.d.ts.map +1 -1
  129. package/dist/runtime/mysql-driver.js +17 -16
  130. package/dist/runtime/mysql-driver.js.map +1 -1
  131. package/dist/runtime/mysql-family-pool.test.js +107 -1
  132. package/dist/runtime/mysql-family-pool.test.js.map +1 -1
  133. package/dist/runtime/mysql-placeholders.d.ts.map +1 -1
  134. package/dist/runtime/mysql-placeholders.js +12 -0
  135. package/dist/runtime/mysql-placeholders.js.map +1 -1
  136. package/dist/runtime/mysql-placeholders.test.js +15 -0
  137. package/dist/runtime/mysql-placeholders.test.js.map +1 -1
  138. package/dist/runtime/pg-rollback.test.js +42 -0
  139. package/dist/runtime/pg-rollback.test.js.map +1 -1
  140. package/dist/runtime/query/compile-where.d.ts.map +1 -1
  141. package/dist/runtime/query/compile-where.js +26 -1
  142. package/dist/runtime/query/compile-where.js.map +1 -1
  143. package/dist/runtime/query/find-or-create.test.js +19 -0
  144. package/dist/runtime/query/find-or-create.test.js.map +1 -1
  145. package/dist/runtime/query/table-index.d.ts +1 -1
  146. package/dist/runtime/query/table-index.d.ts.map +1 -1
  147. package/dist/runtime/query/table-index.js +2 -1
  148. package/dist/runtime/query/table-index.js.map +1 -1
  149. package/dist/runtime/query/update.d.ts.map +1 -1
  150. package/dist/runtime/query/update.js +9 -1
  151. package/dist/runtime/query/update.js.map +1 -1
  152. package/dist/runtime/query/upsert.d.ts.map +1 -1
  153. package/dist/runtime/query/upsert.js +12 -3
  154. package/dist/runtime/query/upsert.js.map +1 -1
  155. package/dist/runtime/regex-guard.d.ts +28 -0
  156. package/dist/runtime/regex-guard.d.ts.map +1 -0
  157. package/dist/runtime/regex-guard.js +124 -0
  158. package/dist/runtime/regex-guard.js.map +1 -0
  159. package/dist/runtime/regex-guard.test.d.ts +2 -0
  160. package/dist/runtime/regex-guard.test.d.ts.map +1 -0
  161. package/dist/runtime/regex-guard.test.js +63 -0
  162. package/dist/runtime/regex-guard.test.js.map +1 -0
  163. package/dist/runtime/sqlite-open.d.ts +5 -0
  164. package/dist/runtime/sqlite-open.d.ts.map +1 -1
  165. package/dist/runtime/sqlite-open.js +30 -7
  166. package/dist/runtime/sqlite-open.js.map +1 -1
  167. package/dist/runtime/sqlite-open.test.d.ts +2 -0
  168. package/dist/runtime/sqlite-open.test.d.ts.map +1 -0
  169. package/dist/runtime/sqlite-open.test.js +66 -0
  170. package/dist/runtime/sqlite-open.test.js.map +1 -0
  171. package/dist/runtime/transaction.d.ts +16 -0
  172. package/dist/runtime/transaction.d.ts.map +1 -1
  173. package/dist/runtime/transaction.js +50 -0
  174. package/dist/runtime/transaction.js.map +1 -1
  175. package/dist/runtime/transaction.test.js +50 -1
  176. package/dist/runtime/transaction.test.js.map +1 -1
  177. package/dist/schema/index.d.ts +1 -1
  178. package/dist/schema/index.d.ts.map +1 -1
  179. package/dist/schema/index.js.map +1 -1
  180. package/dist/schema/relation-types.d.ts +22 -1
  181. package/dist/schema/relation-types.d.ts.map +1 -1
  182. package/dist/sql/split-statements.d.ts +15 -0
  183. package/dist/sql/split-statements.d.ts.map +1 -0
  184. package/dist/sql/split-statements.js +132 -0
  185. package/dist/sql/split-statements.js.map +1 -0
  186. package/dist/studio/server.d.ts.map +1 -1
  187. package/dist/studio/server.js +1 -0
  188. package/dist/studio/server.js.map +1 -1
  189. package/dist/utils/case.js +1 -1
  190. package/dist/utils/case.js.map +1 -1
  191. package/dist/utils/dotenv.d.ts +5 -0
  192. package/dist/utils/dotenv.d.ts.map +1 -1
  193. package/dist/utils/dotenv.js +100 -24
  194. package/dist/utils/dotenv.js.map +1 -1
  195. package/dist/utils/dotenv.test.js +73 -2
  196. package/dist/utils/dotenv.test.js.map +1 -1
  197. package/dist/utils/inflect.d.ts.map +1 -1
  198. package/dist/utils/inflect.js +12 -0
  199. package/dist/utils/inflect.js.map +1 -1
  200. package/dist/utils/load-ts.d.ts.map +1 -1
  201. package/dist/utils/load-ts.js +4 -3
  202. package/dist/utils/load-ts.js.map +1 -1
  203. package/dist/utils/load-ts.test.d.ts +2 -0
  204. package/dist/utils/load-ts.test.d.ts.map +1 -0
  205. package/dist/utils/load-ts.test.js +17 -0
  206. package/dist/utils/load-ts.test.js.map +1 -0
  207. package/docs/cli.md +3 -3
  208. package/docs/configuration.md +2 -2
  209. package/docs/getting-started.md +1 -1
  210. package/docs/mariadb.md +2 -1
  211. package/docs/migrate-dev-workflow.md +84 -0
  212. package/docs/migrations.md +6 -1
  213. package/docs/mysql.md +2 -1
  214. package/docs/sqlite.md +4 -2
  215. package/docs/transactions.md +1 -1
  216. package/llms-full.txt +106 -12
  217. package/package.json +1 -1
@@ -1,14 +1,50 @@
1
- import { extname, resolve } from "node:path";
1
+ import { extname, isAbsolute, relative, resolve, sep } from "node:path";
2
+ import { foreignDatabaseScheme } from "../runtime/sqlite-open.js";
3
+ const CONFIG_FILE = "neoorm.config.ts";
4
+ const ENV_EXAMPLE_FILE = ".env.example";
5
+ function hasControlChar(value) {
6
+ for (let i = 0; i < value.length; i++) {
7
+ const code = value.charCodeAt(i);
8
+ if (code <= 0x1f || code === 0x7f)
9
+ return true;
10
+ }
11
+ return false;
12
+ }
13
+ /** True when `abs` is `cwd` or a descendant of it. */
14
+ export function isInsideProject(cwd, abs) {
15
+ const rel = relative(resolve(cwd), abs);
16
+ if (rel === "")
17
+ return true;
18
+ if (isAbsolute(rel))
19
+ return false;
20
+ return rel !== ".." && !rel.startsWith(`..${sep}`);
21
+ }
2
22
  const SCHEMA_EXTENSIONS = new Set([".ts", ".mts", ".cts"]);
3
- export function validateSchemaPath(value) {
23
+ export function validateSchemaPath(value, cwd) {
4
24
  const trimmed = value.trim();
5
25
  if (trimmed.length === 0) {
6
26
  return "Schema path is required";
7
27
  }
28
+ if (hasControlChar(trimmed)) {
29
+ return "Schema path cannot contain control characters";
30
+ }
8
31
  const extension = extname(trimmed).toLowerCase();
9
32
  if (!SCHEMA_EXTENSIONS.has(extension)) {
10
33
  return "Schema path must end in .ts, .mts, or .cts";
11
34
  }
35
+ if (cwd === undefined)
36
+ return undefined;
37
+ const abs = resolve(cwd, trimmed);
38
+ const root = resolve(cwd);
39
+ if (abs === root || !isInsideProject(root, abs)) {
40
+ return "Schema path must stay inside the project directory";
41
+ }
42
+ if (abs === resolve(root, CONFIG_FILE)) {
43
+ return "Schema path cannot be neoorm.config.ts";
44
+ }
45
+ if (abs === resolve(root, ENV_EXAMPLE_FILE)) {
46
+ return "Schema path cannot be .env.example";
47
+ }
12
48
  return undefined;
13
49
  }
14
50
  export function validateOutDir(value, schemaPath, cwd) {
@@ -16,9 +52,23 @@ export function validateOutDir(value, schemaPath, cwd) {
16
52
  if (trimmed.length === 0) {
17
53
  return "Output directory is required";
18
54
  }
19
- if (resolve(cwd, trimmed) === resolve(cwd, schemaPath.trim())) {
55
+ if (hasControlChar(trimmed)) {
56
+ return "Output directory cannot contain control characters";
57
+ }
58
+ const root = resolve(cwd);
59
+ const outPath = resolve(root, trimmed);
60
+ if (outPath === root) {
61
+ return "Output directory cannot be the project directory";
62
+ }
63
+ if (!isInsideProject(root, outPath)) {
64
+ return "Output directory must stay inside the project directory";
65
+ }
66
+ if (outPath === resolve(root, schemaPath.trim())) {
20
67
  return "Output directory cannot be the same path as the schema file";
21
68
  }
69
+ if (outPath === resolve(root, CONFIG_FILE)) {
70
+ return "Output directory cannot be neoorm.config.ts";
71
+ }
22
72
  return undefined;
23
73
  }
24
74
  export function validateDatabaseUrl(value, provider) {
@@ -26,7 +76,14 @@ export function validateDatabaseUrl(value, provider) {
26
76
  if (trimmed.length === 0) {
27
77
  return "Database URL is required";
28
78
  }
79
+ if (hasControlChar(trimmed)) {
80
+ return "Database URL cannot contain control characters";
81
+ }
29
82
  if (provider === "sqlite") {
83
+ const scheme = foreignDatabaseScheme(trimmed);
84
+ if (scheme !== undefined) {
85
+ return `Database URL is a ${scheme} connection URL, not a SQLite path`;
86
+ }
30
87
  return undefined;
31
88
  }
32
89
  if (!trimmed.includes("://")) {
@@ -35,7 +92,7 @@ export function validateDatabaseUrl(value, provider) {
35
92
  return undefined;
36
93
  }
37
94
  export function assertInitAnswers(options) {
38
- const schemaErrorMessage = validateSchemaPath(options.schemaPath);
95
+ const schemaErrorMessage = validateSchemaPath(options.schemaPath, options.cwd);
39
96
  if (schemaErrorMessage) {
40
97
  throw new Error(schemaErrorMessage);
41
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/init/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7C,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,yBAAyB,CAAC;IAClC,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,OAAO,4CAA4C,CAAC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,KAAa,EACb,UAAkB,EAClB,GAAW;IAEX,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,8BAA8B,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,OAAO,6DAA6D,CAAC;IACtE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,KAAa,EACb,QAAsB;IAEtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,0BAA0B,CAAC;IACnC,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,4DAA4D,CAAC;IACrE,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAMjC;IACA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,eAAe,GAAG,cAAc,CACrC,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,GAAG,CACX,CAAC;IACF,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,eAAe,GAAG,mBAAmB,CAC1C,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,QAAQ,CAChB,CAAC;IACF,IAAI,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/init/validate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"to-manifest.d.ts","sourceRoot":"","sources":["../../../src/introspect/mysql/to-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,QAAQ,EAMR,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA8K9D,wBAAsB,yBAAyB,CAC9C,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,QAAQ,CAAC,CAiBnB"}
1
+ {"version":3,"file":"to-manifest.d.ts","sourceRoot":"","sources":["../../../src/introspect/mysql/to-manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,QAAQ,EAMR,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA+K9D,wBAAsB,yBAAyB,CAC9C,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,QAAQ,CAAC,CAiBnB"}
@@ -1,6 +1,7 @@
1
1
  import { quoteMysqlIdentifier } from "../../dialect/mysql.js";
2
2
  import { columnTsNameFromSqlName, tableAccessorFromSqlName, } from "../../utils/case.js";
3
3
  import { groupForeignKeyRows, mapReferentialAction } from "../group-fks.js";
4
+ import { setIntrospectedTable } from "../table-map.js";
4
5
  function mapDeleteRule(rule) {
5
6
  return mapReferentialAction(rule);
6
7
  }
@@ -124,7 +125,7 @@ export async function introspectMysqlToManifest(client) {
124
125
  const tables = {};
125
126
  for (const { table_name } of tableResult.rows) {
126
127
  const table = await introspectMysqlTable(client, table_name);
127
- tables[table.accessor] = table;
128
+ setIntrospectedTable(tables, table);
128
129
  }
129
130
  return { version: 1, tables, manyToMany: [] };
130
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"to-manifest.js","sourceRoot":"","sources":["../../../src/introspect/mysql/to-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"to-manifest.js","sourceRoot":"","sources":["../../../src/introspect/mysql/to-manifest.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
+ import type { Manifest } from "../dialect/types.js";
1
2
  import type { DatabaseClient } from "../runtime/driver.js";
2
3
  export declare function introspectPostgres(client: DatabaseClient, options?: {
3
4
  schema?: string;
4
5
  }): Promise<string>;
6
+ /** Emit a `neoorm/schema` TS source from an introspected manifest. Exported for tests. */
7
+ export declare function emitPostgresSchema(manifest: Manifest): string;
5
8
  export declare function parseIndexWhere(whereSql: string, tsNameBySql: Map<string, string>): string | undefined;
6
9
  export declare function introspectMysql(client: DatabaseClient): Promise<string>;
10
+ /** Emit a `neoorm/schema` TS source from a SQLite-introspected manifest. Exported for tests. */
11
+ export declare function emitSqliteSchema(manifest: Manifest): string;
7
12
  export declare function introspectSqlite(client: DatabaseClient): Promise<string>;
8
13
  //# sourceMappingURL=pull.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/introspect/pull.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAqE3D,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAu0BD,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GAAG,SAAS,CAiBpB;AAsPD,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7E;AAED,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/introspect/pull.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,QAAQ,EAGR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0N3D,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA+D7D;AA+xBD,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GAAG,SAAS,CAiBpB;AAqSD,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7E;AAED,gGAAgG;AAChG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAyD3D;AAED,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,cAAc,GACpB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
@@ -1,3 +1,4 @@
1
+ import { tsMemberAccess, tsPropertyKey } from "../codegen/ts-syntax.js";
1
2
  import { manifestIndexKeys } from "../dialect/shared.js";
2
3
  import { escapeTsString, resolveSqlColumnName, toCamelCase, } from "../utils/case.js";
3
4
  import { singularize } from "../utils/inflect.js";
@@ -7,11 +8,109 @@ import { introspectToManifest } from "./to-manifest.js";
7
8
  function inferFkAs(tsName) {
8
9
  return tsName.replace(/_(Id|id)$/, "").replace(/Id$/, "");
9
10
  }
11
+ function pullNameTracker(manifest) {
12
+ const columnNames = new Map();
13
+ for (const table of Object.values(manifest.tables)) {
14
+ columnNames.set(table.accessor, new Set(table.columns.map((c) => c.tsName)));
15
+ }
16
+ return { assigned: new Map(), columnNames };
17
+ }
18
+ /**
19
+ * Names the emitted schema already defines on a table: its column tsNames
20
+ * plus every relation name (forward, inverse) picked so far.
21
+ */
22
+ function reservedNamesOnTable(tracker, accessor) {
23
+ const used = new Set(tracker.columnNames.get(accessor) ?? []);
24
+ const extra = tracker.assigned.get(accessor);
25
+ if (extra) {
26
+ for (const name of extra) {
27
+ used.add(name);
28
+ }
29
+ }
30
+ return used;
31
+ }
32
+ /** Reserve a relation name so later picks (and their suffixes) cannot reuse it. */
33
+ function reserveRelationName(tracker, accessor, name) {
34
+ let extra = tracker.assigned.get(accessor);
35
+ if (!extra) {
36
+ extra = new Set();
37
+ tracker.assigned.set(accessor, extra);
38
+ }
39
+ extra.add(name);
40
+ }
41
+ /** Deterministic unused variant of `base` in `used`: base, base2, base3, … */
42
+ function withSuffix(base, used) {
43
+ if (!used.has(base)) {
44
+ return base;
45
+ }
46
+ let index = 2;
47
+ while (used.has(`${base}${index}`)) {
48
+ index += 1;
49
+ }
50
+ return `${base}${index}`;
51
+ }
52
+ /** Accessor of an fk column's target table ("" when unresolved). */
53
+ function fkTargetAccessor(col, manifest) {
54
+ const targetRef = resolveFkAccessorTarget(col, manifest);
55
+ return targetRef.includes(".")
56
+ ? targetRef.slice(0, targetRef.indexOf("."))
57
+ : targetRef;
58
+ }
59
+ /**
60
+ * Forward relation name an FK column is emitted with in a pulled schema:
61
+ * the stored/inferred name when it is free on the table. When the name is
62
+ * already defined — as the fk's own column, a sibling column, or a relation
63
+ * picked for an earlier fk — the fallback prefers the singular target table
64
+ * name (the `userId → user` convention) for an Id-less fk column, then
65
+ * suffixes the preferred name: `statusChangedBy2`, `statusChangedBy3`, …
66
+ */
67
+ function pulledFkRelationName(col, table, manifest, tracker) {
68
+ const inferred = inferFkAs(col.tsName);
69
+ const stored = col.fkAs !== undefined && col.fkAs !== "" ? col.fkAs : inferred;
70
+ const used = reservedNamesOnTable(tracker, table.accessor);
71
+ let name = stored;
72
+ if (used.has(name)) {
73
+ let base = stored;
74
+ if (stored === col.tsName) {
75
+ const targetAccessor = fkTargetAccessor(col, manifest);
76
+ base =
77
+ targetAccessor !== ""
78
+ ? singularize(targetAccessor)
79
+ : `${inferred}Relation`;
80
+ }
81
+ name = withSuffix(base, used);
82
+ }
83
+ reserveRelationName(tracker, table.accessor, name);
84
+ return name;
85
+ }
86
+ /**
87
+ * Inverse relation name for an fk into `targetAccessor`: the source table
88
+ * accessor (singularized for unique/one-to-one fks). The default name is
89
+ * always reserved on the target table — without reserving it, a second fk
90
+ * to the same target would emit a second relation under the same default
91
+ * inverse name, which generate rejects with `duplicate_inverse`.
92
+ */
93
+ function pulledFkInverseName(col, sourceAccessor, targetAccessor, tracker) {
94
+ const defaultInverse = col.unique
95
+ ? singularize(sourceAccessor)
96
+ : sourceAccessor;
97
+ const name = withSuffix(defaultInverse, reservedNamesOnTable(tracker, targetAccessor));
98
+ reserveRelationName(tracker, targetAccessor, name);
99
+ return name;
100
+ }
10
101
  function tableHeader(accessor, sqlName) {
102
+ const key = tsPropertyKey(accessor);
11
103
  if (sqlName === accessor) {
12
- return ` ${accessor}: table({`;
104
+ return ` ${key}: table({`;
13
105
  }
14
- return ` ${accessor}: table("${escapeTsString(sqlName)}", {`;
106
+ return ` ${key}: table("${escapeTsString(sqlName)}", {`;
107
+ }
108
+ /** `t.col` or `t["raw sql"]` when the tsName lookup falls back to a SQL name. */
109
+ function tColumnRef(tsNameBySql, sqlName) {
110
+ return tsMemberAccess("t", tsNameBySql.get(sqlName) ?? sqlName);
111
+ }
112
+ function whereField(ts, expr) {
113
+ return `${tsPropertyKey(ts)}: ${expr}`;
15
114
  }
16
115
  const POSTGIS_KINDS = new Set(["geometry", "geography", "point"]);
17
116
  const SCHEMA_IMPORT_ORDER = [
@@ -61,10 +160,12 @@ export async function introspectPostgres(client, options = {}) {
61
160
  const manifest = await introspectToManifest(client, options);
62
161
  return emitPostgresSchema(manifest);
63
162
  }
64
- function emitPostgresSchema(manifest) {
163
+ /** Emit a `neoorm/schema` TS source from an introspected manifest. Exported for tests. */
164
+ export function emitPostgresSchema(manifest) {
65
165
  const usedBuilders = new Set(["defineSchema", "table"]);
66
166
  const pluginColumnImports = new Set();
67
167
  let needsPostgisSideEffect = false;
168
+ const tracker = pullNameTracker(manifest);
68
169
  const tableBlocks = [];
69
170
  for (const table of Object.values(manifest.tables)) {
70
171
  const columnNaming = inferColumnNaming(table.columns.map((col) => col.sqlName));
@@ -77,9 +178,9 @@ function emitPostgresSchema(manifest) {
77
178
  needsPostgisSideEffect = true;
78
179
  pluginColumnImports.add(col.kind);
79
180
  }
80
- blockLines.push(` ${emitPostgresColumn(col, table, manifest, columnNaming, usedBuilders)},`);
181
+ blockLines.push(` ${emitPostgresColumn(col, table, manifest, columnNaming, usedBuilders, tracker)},`);
81
182
  }
82
- const extras = emitTableExtras(table, tsNameBySql, usedBuilders, manifest);
183
+ const extras = emitTableExtras(table, tsNameBySql, usedBuilders, manifest, tracker);
83
184
  blockLines.push(tableClose(columnNaming, extras));
84
185
  tableBlocks.push(blockLines.join("\n"));
85
186
  }
@@ -100,16 +201,16 @@ function emitPostgresSchema(manifest) {
100
201
  lines.push(`});`, ``);
101
202
  return lines.join("\n");
102
203
  }
103
- function emitPostgresColumn(col, table, manifest, columnNaming, usedBuilders) {
204
+ function emitPostgresColumn(col, table, manifest, columnNaming, usedBuilders, tracker) {
104
205
  if (col.kind === "fk") {
105
206
  usedBuilders.add("fk");
106
- let def = `${col.tsName}: ${emitFkBuilder(col, table, manifest)}`;
207
+ let def = `${tsPropertyKey(col.tsName)}: ${emitFkBuilder(col, table, manifest, tracker)}`;
107
208
  def += emitColumnModifiers(col, table, { skipNotNullIfPrimary: true });
108
209
  return appendMapModifier(def, col.tsName, col.sqlName, columnNaming);
109
210
  }
110
211
  if (col.kind === "id") {
111
212
  usedBuilders.add("id");
112
- let def = `${col.tsName}: id()`;
213
+ let def = `${tsPropertyKey(col.tsName)}: id()`;
113
214
  def += emitColumnModifiers(col, table, {
114
215
  skipPrimary: true,
115
216
  skipNotNull: true,
@@ -117,7 +218,7 @@ function emitPostgresColumn(col, table, manifest, columnNaming, usedBuilders) {
117
218
  return appendMapModifier(def, col.tsName, col.sqlName, columnNaming);
118
219
  }
119
220
  const call = emitScalarBuilder(col, usedBuilders);
120
- let def = `${col.tsName}: ${call}`;
221
+ let def = `${tsPropertyKey(col.tsName)}: ${call}`;
121
222
  def += emitColumnModifiers(col, table, {
122
223
  skipNotNullIfPrimary: true,
123
224
  skipNotNull: col.kind === "serial",
@@ -174,18 +275,30 @@ function emitScalarBuilder(col, usedBuilders) {
174
275
  usedBuilders.add(col.kind);
175
276
  return `${col.kind}()`;
176
277
  }
177
- function emitFkBuilder(col, table, manifest) {
278
+ function emitFkBuilder(col, table, manifest, tracker) {
178
279
  const targetRef = resolveFkAccessorTarget(col, manifest);
179
280
  const relName = inferFkAs(col.tsName);
281
+ const relationName = pulledFkRelationName(col, table, manifest, tracker);
180
282
  let def = `fk("${escapeTsString(targetRef)}")`;
181
- if (col.fkAs && col.fkAs !== relName) {
182
- def += `.as("${escapeTsString(col.fkAs)}")`;
283
+ if (relationName !== relName) {
284
+ def += `.as("${escapeTsString(relationName)}")`;
183
285
  }
184
286
  const defaultInverse = col.unique
185
287
  ? singularize(table.accessor)
186
288
  : table.accessor;
187
289
  if (col.fkInverse && col.fkInverse !== defaultInverse) {
188
290
  def += `.inverse("${escapeTsString(col.fkInverse)}")`;
291
+ return def;
292
+ }
293
+ const targetAccessor = fkTargetAccessor(col, manifest);
294
+ if (manifest.tables[targetAccessor]) {
295
+ // Reserve the default inverse name on the target table and emit an
296
+ // explicit `.inverse()` when the default is taken there (e.g. a second
297
+ // fk to the same target, or a column carrying the accessor's name)
298
+ const inverseName = pulledFkInverseName(col, table.accessor, targetAccessor, tracker);
299
+ if (inverseName !== defaultInverse) {
300
+ def += `.inverse("${escapeTsString(inverseName)}")`;
301
+ }
189
302
  }
190
303
  return def;
191
304
  }
@@ -734,7 +847,11 @@ function renderIndexPredicate(node) {
734
847
  return `NOT: { ${inner} }`;
735
848
  }
736
849
  case "col":
737
- return `${node.ts}: ${node.expr}`;
850
+ return whereField(node.ts, node.expr);
851
+ default: {
852
+ const exhaustive = node;
853
+ return exhaustive;
854
+ }
738
855
  }
739
856
  }
740
857
  /** Group an AND level into where-object bodies, merging same-column operators. */
@@ -746,7 +863,7 @@ function conjunctBodies(items) {
746
863
  if (order.length === 0)
747
864
  return;
748
865
  bodies.push(order
749
- .map((ts) => `${ts}: ${pending.get(ts)?.expr ?? ""}`)
866
+ .map((ts) => whereField(ts, pending.get(ts)?.expr ?? ""))
750
867
  .join(", "));
751
868
  pending.clear();
752
869
  order.length = 0;
@@ -795,7 +912,7 @@ export function parseIndexWhere(whereSql, tsNameBySql) {
795
912
  if (!parsed)
796
913
  return undefined;
797
914
  if (parsed.kind === "col") {
798
- return `.where({ ${parsed.ts}: ${parsed.expr} })`;
915
+ return `.where({ ${whereField(parsed.ts, parsed.expr)} })`;
799
916
  }
800
917
  if (parsed.kind === "and") {
801
918
  const bodies = conjunctBodies(parsed.items);
@@ -811,7 +928,7 @@ export function parseIndexWhere(whereSql, tsNameBySql) {
811
928
  return undefined;
812
929
  return `.where({ ${rendered} })`;
813
930
  }
814
- function emitTableExtras(table, tsNameBySql, usedBuilders, manifest) {
931
+ function emitTableExtras(table, tsNameBySql, usedBuilders, manifest, tracker) {
815
932
  const extras = [];
816
933
  for (const index of table.indexes) {
817
934
  const builder = index.unique ? "unique" : "index";
@@ -824,7 +941,7 @@ function emitTableExtras(table, tsNameBySql, usedBuilders, manifest) {
824
941
  return `expr("${escapeTsString(key.expr)}")`;
825
942
  }
826
943
  const sqlName = key.sqlName ?? "";
827
- return `t.${tsNameBySql.get(sqlName) ?? sqlName}`;
944
+ return tColumnRef(tsNameBySql, sqlName);
828
945
  })
829
946
  .join(", ");
830
947
  let extra = `${builder}(${cols})`;
@@ -856,7 +973,7 @@ function emitTableExtras(table, tsNameBySql, usedBuilders, manifest) {
856
973
  if (table.primaryKey.length > 1) {
857
974
  usedBuilders?.add("primaryKey");
858
975
  extras.push(` primaryKey(${table.primaryKey
859
- .map((sqlName) => `t.${tsNameBySql.get(sqlName) ?? sqlName}`)
976
+ .map((sqlName) => tColumnRef(tsNameBySql, sqlName))
860
977
  .join(", ")}),`);
861
978
  }
862
979
  for (const fk of table.foreignKeys ?? []) {
@@ -865,7 +982,7 @@ function emitTableExtras(table, tsNameBySql, usedBuilders, manifest) {
865
982
  ? Object.values(manifest.tables).find((item) => item.sqlName === fk.targetTable)
866
983
  : undefined;
867
984
  const localCols = fk.columns
868
- .map((sqlName) => `t.${tsNameBySql.get(sqlName) ?? sqlName}`)
985
+ .map((sqlName) => tColumnRef(tsNameBySql, sqlName))
869
986
  .join(", ");
870
987
  const targetCols = fk.targetColumns
871
988
  .map((sqlName) => {
@@ -876,8 +993,27 @@ function emitTableExtras(table, tsNameBySql, usedBuilders, manifest) {
876
993
  .join(", ");
877
994
  const accessor = target?.accessor ?? fk.targetTable;
878
995
  const firstLocal = tsNameBySql.get(fk.columns[0] ?? "") ?? "ref";
879
- const asName = inferFkAs(firstLocal);
880
- let extra = `foreignKey(${localCols}).references("${escapeTsString(accessor)}", ${targetCols}).as("${escapeTsString(asName)}").inverse("${escapeTsString(table.accessor)}")`;
996
+ // Composite FK constraints are emitted as a `foreignKey()` extra whose
997
+ // relation name and inverse compete with column names and other picked
998
+ // relations on both tables — same resolver as column-level fks.
999
+ let asName = inferFkAs(firstLocal);
1000
+ let inverseName = table.accessor;
1001
+ if (tracker && manifest) {
1002
+ const usedOnSource = reservedNamesOnTable(tracker, table.accessor);
1003
+ if (usedOnSource.has(asName)) {
1004
+ const fallbackBase = asName === firstLocal && target?.accessor
1005
+ ? singularize(target.accessor)
1006
+ : "";
1007
+ asName = withSuffix(fallbackBase !== "" ? fallbackBase : asName, usedOnSource);
1008
+ }
1009
+ reserveRelationName(tracker, table.accessor, asName);
1010
+ const targetKey = target?.accessor ?? fk.targetTable;
1011
+ if (targetKey) {
1012
+ inverseName = withSuffix(table.accessor, reservedNamesOnTable(tracker, targetKey));
1013
+ reserveRelationName(tracker, targetKey, inverseName);
1014
+ }
1015
+ }
1016
+ let extra = `foreignKey(${localCols}).references("${escapeTsString(accessor)}", ${targetCols}).as("${escapeTsString(asName)}").inverse("${escapeTsString(inverseName)}")`;
881
1017
  if (fk.onDelete && fk.onDelete !== "no action") {
882
1018
  extra += `.onDelete("${escapeTsString(fk.onDelete)}")`;
883
1019
  }
@@ -983,28 +1119,38 @@ function resolveFkAccessorTarget(col, manifest) {
983
1119
  }
984
1120
  return `${accessor}.${targetCol?.tsName ?? sqlColumn}`;
985
1121
  }
986
- function sqliteColumnDef(col, table, manifest) {
1122
+ function sqliteColumnDef(col, table, manifest, tracker) {
987
1123
  if (col.kind === "fk" && col.fkTarget) {
988
1124
  const targetRef = resolveFkAccessorTarget(col, manifest);
989
1125
  const relName = inferFkAs(col.tsName);
990
- let def = `fk("${targetRef}")`;
991
- if (col.fkAs && col.fkAs !== relName) {
992
- def += `.as("${col.fkAs}")`;
1126
+ const relationName = pulledFkRelationName(col, table, manifest, tracker);
1127
+ let def = `fk("${escapeTsString(targetRef)}")`;
1128
+ if (relationName !== relName) {
1129
+ def += `.as("${escapeTsString(relationName)}")`;
993
1130
  }
994
1131
  const defaultInverse = col.unique
995
1132
  ? singularize(table.accessor)
996
1133
  : table.accessor;
997
1134
  if (col.fkInverse && col.fkInverse !== defaultInverse) {
998
- def += `.inverse("${col.fkInverse}")`;
1135
+ def += `.inverse("${escapeTsString(col.fkInverse)}")`;
1136
+ }
1137
+ else {
1138
+ const targetAccessor = fkTargetAccessor(col, manifest);
1139
+ if (manifest.tables[targetAccessor]) {
1140
+ const inverseName = pulledFkInverseName(col, table.accessor, targetAccessor, tracker);
1141
+ if (inverseName !== defaultInverse) {
1142
+ def += `.inverse("${escapeTsString(inverseName)}")`;
1143
+ }
1144
+ }
999
1145
  }
1000
1146
  if (col.onDelete) {
1001
- def += `.onDelete("${col.onDelete}")`;
1147
+ def += `.onDelete("${escapeTsString(col.onDelete)}")`;
1002
1148
  }
1003
1149
  if (col.onUpdate) {
1004
- def += `.onUpdate("${col.onUpdate}")`;
1150
+ def += `.onUpdate("${escapeTsString(col.onUpdate)}")`;
1005
1151
  }
1006
1152
  if (col.deferrable) {
1007
- def += `.deferrable("${col.deferrable}")`;
1153
+ def += `.deferrable("${escapeTsString(col.deferrable)}")`;
1008
1154
  }
1009
1155
  if (col.primary) {
1010
1156
  def += ".primary()";
@@ -1012,9 +1158,9 @@ function sqliteColumnDef(col, table, manifest) {
1012
1158
  else if (!col.nullable) {
1013
1159
  def += ".notNull()";
1014
1160
  }
1015
- return `${col.tsName}: ${def},`;
1161
+ return `${tsPropertyKey(col.tsName)}: ${def},`;
1016
1162
  }
1017
- let def = `${col.tsName}: ${sqliteColumnBuilder(col)}()`;
1163
+ let def = `${tsPropertyKey(col.tsName)}: ${sqliteColumnBuilder(col)}()`;
1018
1164
  if (col.kind !== "id" && col.primary && table.primaryKey.length === 1) {
1019
1165
  def += ".primary()";
1020
1166
  }
@@ -1033,16 +1179,17 @@ export async function introspectMysql(client) {
1033
1179
  const manifest = await introspectMysqlToManifest(client);
1034
1180
  return emitPostgresSchema(manifest);
1035
1181
  }
1036
- export async function introspectSqlite(client) {
1037
- const manifest = await introspectSqliteToManifest(client);
1182
+ /** Emit a `neoorm/schema` TS source from a SQLite-introspected manifest. Exported for tests. */
1183
+ export function emitSqliteSchema(manifest) {
1184
+ const tracker = pullNameTracker(manifest);
1038
1185
  const tableBlocks = [];
1039
1186
  for (const table of Object.values(manifest.tables)) {
1040
1187
  const tsNameBySql = new Map(table.columns.map((col) => [col.sqlName, col.tsName]));
1041
1188
  const lines = [tableHeader(table.accessor, table.sqlName)];
1042
1189
  for (const col of table.columns) {
1043
- lines.push(` ${sqliteColumnDef(col, table, manifest)}`);
1190
+ lines.push(` ${sqliteColumnDef(col, table, manifest, tracker)}`);
1044
1191
  }
1045
- const extras = emitTableExtras(table, tsNameBySql, undefined, manifest);
1192
+ const extras = emitTableExtras(table, tsNameBySql, undefined, manifest, tracker);
1046
1193
  if (extras.length > 0) {
1047
1194
  lines.push(` }, (t) => [
1048
1195
  ${extras.join("\n")}
@@ -1079,6 +1226,10 @@ ${extras.join("\n")}
1079
1226
  ``,
1080
1227
  ].join("\n");
1081
1228
  }
1229
+ export async function introspectSqlite(client) {
1230
+ const manifest = await introspectSqliteToManifest(client);
1231
+ return emitSqliteSchema(manifest);
1232
+ }
1082
1233
  function inferColumnNaming(columnNames) {
1083
1234
  const allCamelCase = columnNames.every((sqlName) => toCamelCase(sqlName) === sqlName);
1084
1235
  const needsSnakeCaseMap = columnNames.some((sqlName) => sqlName !== resolveSqlColumnName(toCamelCase(sqlName), "snakeCase"));