@intentius/chant-lexicon-sql 0.124.46 → 0.124.48

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 (360) hide show
  1. package/dist/change-set.d.ts +1 -1
  2. package/dist/change-set.d.ts.map +1 -1
  3. package/dist/change-set.js +2 -1
  4. package/dist/clickhouse/apply/statements.d.ts +9 -0
  5. package/dist/clickhouse/apply/statements.d.ts.map +1 -1
  6. package/dist/clickhouse/apply/statements.js +24 -0
  7. package/dist/clickhouse/import/live-export.d.ts +7 -3
  8. package/dist/clickhouse/import/live-export.d.ts.map +1 -1
  9. package/dist/clickhouse/import/live-export.js +21 -5
  10. package/dist/clickhouse/live/named-collections.d.ts +27 -0
  11. package/dist/clickhouse/live/named-collections.d.ts.map +1 -0
  12. package/dist/clickhouse/live/named-collections.js +53 -0
  13. package/dist/clickhouse/live/undeclarable.d.ts +15 -3
  14. package/dist/clickhouse/live/undeclarable.d.ts.map +1 -1
  15. package/dist/clickhouse/live/undeclarable.js +18 -4
  16. package/dist/clickhouse/named-collections.d.ts +83 -0
  17. package/dist/clickhouse/named-collections.d.ts.map +1 -0
  18. package/dist/clickhouse/named-collections.js +203 -0
  19. package/dist/clickhouse/parser.d.ts.map +1 -1
  20. package/dist/clickhouse/parser.js +1 -1
  21. package/dist/clickhouse/plan/commands.d.ts +2 -1
  22. package/dist/clickhouse/plan/commands.d.ts.map +1 -1
  23. package/dist/clickhouse/plan/commands.js +17 -2
  24. package/dist/clickhouse/plan/diff.d.ts +15 -0
  25. package/dist/clickhouse/plan/diff.d.ts.map +1 -1
  26. package/dist/clickhouse/plan/diff.js +43 -1
  27. package/dist/clickhouse/plan/disruption.d.ts.map +1 -1
  28. package/dist/clickhouse/plan/disruption.js +5 -0
  29. package/dist/clickhouse/plan/rebuild-handoff.d.ts.map +1 -1
  30. package/dist/clickhouse/plan/rebuild-handoff.js +4 -0
  31. package/dist/clickhouse/plan/report.d.ts.map +1 -1
  32. package/dist/clickhouse/plan/report.js +6 -1
  33. package/dist/clickhouse/plan/rules.d.ts +5 -1
  34. package/dist/clickhouse/plan/rules.d.ts.map +1 -1
  35. package/dist/clickhouse/plan/rules.js +7 -3
  36. package/dist/clickhouse/plan/stream.d.ts +40 -0
  37. package/dist/clickhouse/plan/stream.d.ts.map +1 -0
  38. package/dist/clickhouse/plan/stream.js +107 -0
  39. package/dist/clickhouse/rebuild/observe.d.ts +3 -1
  40. package/dist/clickhouse/rebuild/observe.d.ts.map +1 -1
  41. package/dist/clickhouse/rebuild/observe.js +14 -1
  42. package/dist/clickhouse/review-catalog.d.ts +213 -0
  43. package/dist/clickhouse/review-catalog.d.ts.map +1 -0
  44. package/dist/clickhouse/review-catalog.js +330 -0
  45. package/dist/codegen/classifier-page.d.ts.map +1 -1
  46. package/dist/codegen/classifier-page.js +21 -4
  47. package/dist/codegen/clickhouse-module.d.ts.map +1 -1
  48. package/dist/codegen/clickhouse-module.js +3 -0
  49. package/dist/codegen/coverage-page.d.ts.map +1 -1
  50. package/dist/codegen/coverage-page.js +5 -3
  51. package/dist/codegen/docs.js +1 -1
  52. package/dist/codegen/postgres-classifier-page.js +1 -1
  53. package/dist/codegen/registry.d.ts.map +1 -1
  54. package/dist/codegen/registry.js +5 -0
  55. package/dist/composites/catalog.d.ts.map +1 -1
  56. package/dist/composites/catalog.js +100 -0
  57. package/dist/composites/clickhouse.d.ts +2 -0
  58. package/dist/composites/clickhouse.d.ts.map +1 -1
  59. package/dist/composites/clickhouse.js +2 -0
  60. package/dist/composites/otel-tables.d.ts +100 -0
  61. package/dist/composites/otel-tables.d.ts.map +1 -0
  62. package/dist/composites/otel-tables.js +282 -0
  63. package/dist/composites/stream-ingest.d.ts +63 -0
  64. package/dist/composites/stream-ingest.d.ts.map +1 -0
  65. package/dist/composites/stream-ingest.js +39 -0
  66. package/dist/coverage/clickhouse.json +1 -1
  67. package/dist/coverage/postgres.json +7 -7
  68. package/dist/coverage.d.ts +16 -6
  69. package/dist/coverage.d.ts.map +1 -1
  70. package/dist/coverage.js +10 -5
  71. package/dist/drizzle-command.d.ts +17 -0
  72. package/dist/drizzle-command.d.ts.map +1 -0
  73. package/dist/drizzle-command.js +91 -0
  74. package/dist/drizzle.d.ts +70 -0
  75. package/dist/drizzle.d.ts.map +1 -0
  76. package/dist/drizzle.js +684 -0
  77. package/dist/files/clickhouse.d.ts.map +1 -1
  78. package/dist/files/clickhouse.js +8 -1
  79. package/dist/files/common.d.ts +13 -0
  80. package/dist/files/common.d.ts.map +1 -1
  81. package/dist/files/common.js +5 -0
  82. package/dist/files/postgres.js +12 -2
  83. package/dist/generated/clickhouse.d.ts +2 -0
  84. package/dist/generated/clickhouse.d.ts.map +1 -1
  85. package/dist/generated/clickhouse.js +2 -0
  86. package/dist/import-parser.d.ts +21 -1
  87. package/dist/import-parser.d.ts.map +1 -1
  88. package/dist/import-parser.js +79 -5
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +1 -1
  92. package/dist/integrity.json +6 -5
  93. package/dist/lint/post-synth/audit-entries.d.ts.map +1 -1
  94. package/dist/lint/post-synth/audit-entries.js +1 -0
  95. package/dist/lint/post-synth/index.d.ts.map +1 -1
  96. package/dist/lint/post-synth/index.js +2 -0
  97. package/dist/lint/post-synth/sqlch128.d.ts +18 -0
  98. package/dist/lint/post-synth/sqlch128.d.ts.map +1 -0
  99. package/dist/lint/post-synth/sqlch128.js +222 -0
  100. package/dist/lint/rules/postgres-templates.js +2 -2
  101. package/dist/lsp/postgres-template.d.ts.map +1 -1
  102. package/dist/lsp/postgres-template.js +11 -0
  103. package/dist/manifest.json +1 -1
  104. package/dist/mcp/postgres.js +1 -1
  105. package/dist/meta.json +25 -0
  106. package/dist/migrate/from-postgres/detect.d.ts +4 -0
  107. package/dist/migrate/from-postgres/detect.d.ts.map +1 -0
  108. package/dist/migrate/from-postgres/detect.js +7 -0
  109. package/dist/migrate/from-postgres/emit.d.ts +26 -0
  110. package/dist/migrate/from-postgres/emit.d.ts.map +1 -0
  111. package/dist/migrate/from-postgres/emit.js +86 -0
  112. package/dist/migrate/from-postgres/index.d.ts +51 -0
  113. package/dist/migrate/from-postgres/index.d.ts.map +1 -0
  114. package/dist/migrate/from-postgres/index.js +115 -0
  115. package/dist/migrate/from-postgres/translate.d.ts +73 -0
  116. package/dist/migrate/from-postgres/translate.d.ts.map +1 -0
  117. package/dist/migrate/from-postgres/translate.js +261 -0
  118. package/dist/migrate/from-postgres/types.d.ts +51 -0
  119. package/dist/migrate/from-postgres/types.d.ts.map +1 -0
  120. package/dist/migrate/from-postgres/types.js +211 -0
  121. package/dist/migration-replay.d.ts +73 -0
  122. package/dist/migration-replay.d.ts.map +1 -0
  123. package/dist/migration-replay.js +294 -0
  124. package/dist/okf/index.md +6 -0
  125. package/dist/okf/rules/SQLCH128.md +11 -0
  126. package/dist/okf/types/PostgresForeignDataWrapper.md +9 -0
  127. package/dist/okf/types/PostgresForeignServer.md +9 -0
  128. package/dist/okf/types/PostgresOperator.md +9 -0
  129. package/dist/okf/types/PostgresPublication.md +9 -0
  130. package/dist/okf/types/PostgresStatistics.md +9 -0
  131. package/dist/op/activities/postgres-migration.d.ts.map +1 -1
  132. package/dist/op/activities/postgres-migration.js +4 -0
  133. package/dist/op/activity-contracts.d.ts +20 -0
  134. package/dist/op/activity-contracts.d.ts.map +1 -1
  135. package/dist/op/activity-contracts.js +2 -0
  136. package/dist/plugin.d.ts.map +1 -1
  137. package/dist/plugin.js +36 -2
  138. package/dist/postgres/apply/apply.js +8 -1
  139. package/dist/postgres/apply/statements.d.ts.map +1 -1
  140. package/dist/postgres/apply/statements.js +87 -2
  141. package/dist/postgres/constraint-names.d.ts +30 -0
  142. package/dist/postgres/constraint-names.d.ts.map +1 -0
  143. package/dist/postgres/constraint-names.js +72 -0
  144. package/dist/postgres/entities.d.ts +110 -1
  145. package/dist/postgres/entities.d.ts.map +1 -1
  146. package/dist/postgres/entities.js +146 -0
  147. package/dist/postgres/entity-types.d.ts +5 -0
  148. package/dist/postgres/entity-types.d.ts.map +1 -1
  149. package/dist/postgres/entity-types.js +5 -0
  150. package/dist/postgres/import/generator.d.ts.map +1 -1
  151. package/dist/postgres/import/generator.js +50 -2
  152. package/dist/postgres/import/live-export.d.ts.map +1 -1
  153. package/dist/postgres/import/live-export.js +2 -0
  154. package/dist/postgres/live/catalog-kinds.d.ts +14 -0
  155. package/dist/postgres/live/catalog-kinds.d.ts.map +1 -1
  156. package/dist/postgres/live/catalog-kinds.js +206 -0
  157. package/dist/postgres/live/catalog.d.ts +2 -0
  158. package/dist/postgres/live/catalog.d.ts.map +1 -1
  159. package/dist/postgres/live/catalog.js +3 -1
  160. package/dist/postgres/live/describe-resources.d.ts.map +1 -1
  161. package/dist/postgres/live/describe-resources.js +10 -2
  162. package/dist/postgres/migrate/backfill.d.ts +2 -0
  163. package/dist/postgres/migrate/backfill.d.ts.map +1 -1
  164. package/dist/postgres/migrate/backfill.js +7 -1
  165. package/dist/postgres/migrate/carry.d.ts +45 -1
  166. package/dist/postgres/migrate/carry.d.ts.map +1 -1
  167. package/dist/postgres/migrate/carry.js +72 -8
  168. package/dist/postgres/migrate/observe.d.ts +28 -4
  169. package/dist/postgres/migrate/observe.d.ts.map +1 -1
  170. package/dist/postgres/migrate/observe.js +41 -12
  171. package/dist/postgres/migrate/op.d.ts +26 -1
  172. package/dist/postgres/migrate/op.d.ts.map +1 -1
  173. package/dist/postgres/migrate/op.js +3 -1
  174. package/dist/postgres/migrate/steps.d.ts +35 -2
  175. package/dist/postgres/migrate/steps.d.ts.map +1 -1
  176. package/dist/postgres/migrate/steps.js +158 -12
  177. package/dist/postgres/parser.d.ts +72 -1
  178. package/dist/postgres/parser.d.ts.map +1 -1
  179. package/dist/postgres/parser.js +194 -2
  180. package/dist/postgres/plan/deep.d.ts.map +1 -1
  181. package/dist/postgres/plan/deep.js +29 -1
  182. package/dist/postgres/plan/diff.d.ts.map +1 -1
  183. package/dist/postgres/plan/diff.js +39 -1
  184. package/dist/postgres/plan/normalize.d.ts +17 -2
  185. package/dist/postgres/plan/normalize.d.ts.map +1 -1
  186. package/dist/postgres/plan/normalize.js +109 -1
  187. package/dist/postgres/plan/rules.d.ts +1 -0
  188. package/dist/postgres/plan/rules.d.ts.map +1 -1
  189. package/dist/postgres/plan/rules.js +3 -2
  190. package/dist/postgres/plan/schema.js +1 -1
  191. package/dist/postgres/secret-options.d.ts +10 -0
  192. package/dist/postgres/secret-options.d.ts.map +1 -0
  193. package/dist/postgres/secret-options.js +9 -0
  194. package/dist/postgres/testing/roundtrip-schema.d.ts +3 -2
  195. package/dist/postgres/testing/roundtrip-schema.d.ts.map +1 -1
  196. package/dist/postgres/testing/roundtrip-schema.js +13 -1
  197. package/dist/postgres.d.ts +1 -1
  198. package/dist/postgres.d.ts.map +1 -1
  199. package/dist/postgres.js +1 -1
  200. package/dist/rules/audit-entries.ts +1 -0
  201. package/dist/rules/postgres-templates.ts +2 -2
  202. package/dist/rules/sqlch128.ts +230 -0
  203. package/dist/serializer.d.ts +5 -0
  204. package/dist/serializer.d.ts.map +1 -1
  205. package/dist/serializer.js +13 -2
  206. package/dist/sql-types-command.d.ts +13 -0
  207. package/dist/sql-types-command.d.ts.map +1 -1
  208. package/dist/sql-types-command.js +31 -16
  209. package/dist/sql-types.d.ts +22 -0
  210. package/dist/sql-types.d.ts.map +1 -1
  211. package/dist/sql-types.js +10 -6
  212. package/dist/sqlserver/lexer.d.ts +37 -0
  213. package/dist/sqlserver/lexer.d.ts.map +1 -0
  214. package/dist/sqlserver/lexer.js +254 -0
  215. package/dist/sqlserver/parse.d.ts +185 -0
  216. package/dist/sqlserver/parse.d.ts.map +1 -0
  217. package/dist/sqlserver/parse.js +767 -0
  218. package/dist/sqlserver/translate.d.ts +34 -0
  219. package/dist/sqlserver/translate.d.ts.map +1 -0
  220. package/dist/sqlserver/translate.js +495 -0
  221. package/dist/sqlserver/types.d.ts +44 -0
  222. package/dist/sqlserver/types.d.ts.map +1 -0
  223. package/dist/sqlserver/types.js +133 -0
  224. package/dist/sqlserver/validate.d.ts +31 -0
  225. package/dist/sqlserver/validate.d.ts.map +1 -0
  226. package/dist/sqlserver/validate.js +67 -0
  227. package/dist/validate.d.ts.map +1 -1
  228. package/dist/validate.js +5 -0
  229. package/package.json +2 -2
  230. package/src/change-set.ts +2 -1
  231. package/src/clickhouse/apply/statements.ts +25 -0
  232. package/src/clickhouse/import/live-export.ts +20 -5
  233. package/src/clickhouse/live/named-collections.e2e.test.ts +88 -0
  234. package/src/clickhouse/live/named-collections.ts +61 -0
  235. package/src/clickhouse/live/undeclarable.e2e.test.ts +5 -3
  236. package/src/clickhouse/live/undeclarable.ts +20 -4
  237. package/src/clickhouse/named-collections.test.ts +187 -0
  238. package/src/clickhouse/named-collections.ts +224 -0
  239. package/src/clickhouse/parser.ts +2 -1
  240. package/src/clickhouse/plan/commands.ts +17 -2
  241. package/src/clickhouse/plan/diff.ts +57 -1
  242. package/src/clickhouse/plan/disruption.ts +5 -0
  243. package/src/clickhouse/plan/rebuild-handoff.ts +3 -0
  244. package/src/clickhouse/plan/report.ts +6 -1
  245. package/src/clickhouse/plan/rules.ts +14 -4
  246. package/src/clickhouse/plan/stream-s3queue.e2e.test.ts +148 -0
  247. package/src/clickhouse/plan/stream.test.ts +237 -0
  248. package/src/clickhouse/plan/stream.ts +111 -0
  249. package/src/clickhouse/rebuild/observe.ts +15 -1
  250. package/src/clickhouse/review-catalog.test.ts +181 -0
  251. package/src/clickhouse/review-catalog.ts +489 -0
  252. package/src/codegen/classifier-page.ts +21 -4
  253. package/src/codegen/clickhouse-module.ts +3 -0
  254. package/src/codegen/coverage-page.ts +5 -3
  255. package/src/codegen/docs.ts +1 -1
  256. package/src/codegen/postgres-classifier-page.ts +1 -1
  257. package/src/codegen/registry.ts +5 -0
  258. package/src/composites/catalog.test.ts +6 -1
  259. package/src/composites/catalog.ts +100 -0
  260. package/src/composites/clickhouse.ts +2 -0
  261. package/src/composites/composites.test.ts +1 -1
  262. package/src/composites/otel-tables.test.ts +118 -0
  263. package/src/composites/otel-tables.ts +339 -0
  264. package/src/composites/stream-ingest.test.ts +114 -0
  265. package/src/composites/stream-ingest.ts +82 -0
  266. package/src/core/undeclarable.test.ts +6 -5
  267. package/src/coverage/clickhouse.json +1 -1
  268. package/src/coverage/postgres.json +7 -7
  269. package/src/coverage.test.ts +27 -2
  270. package/src/coverage.ts +18 -7
  271. package/src/drizzle-command.ts +94 -0
  272. package/src/drizzle-kit.e2e.test.ts +89 -0
  273. package/src/drizzle-types.e2e.test.ts +67 -0
  274. package/src/drizzle.test.ts +358 -0
  275. package/src/drizzle.ts +737 -0
  276. package/src/files/clickhouse.ts +8 -1
  277. package/src/files/common.ts +14 -1
  278. package/src/files/postgres.ts +12 -2
  279. package/src/generated/clickhouse.ts +3 -0
  280. package/src/generated/lexicon-sql.json +25 -0
  281. package/src/import-parser.sqlserver.test.ts +92 -0
  282. package/src/import-parser.ts +79 -5
  283. package/src/index.ts +1 -1
  284. package/src/lint/post-synth/audit-entries.ts +1 -0
  285. package/src/lint/post-synth/index.ts +2 -0
  286. package/src/lint/post-synth/sqlch128.test.ts +107 -0
  287. package/src/lint/post-synth/sqlch128.ts +230 -0
  288. package/src/lint/rules/postgres-templates.ts +2 -2
  289. package/src/lsp/postgres-template.ts +11 -0
  290. package/src/mcp/postgres.ts +1 -1
  291. package/src/migrate/from-postgres/cli.test.ts +165 -0
  292. package/src/migrate/from-postgres/detect.ts +7 -0
  293. package/src/migrate/from-postgres/emit.ts +96 -0
  294. package/src/migrate/from-postgres/example.test.ts +205 -0
  295. package/src/migrate/from-postgres/index.ts +122 -0
  296. package/src/migrate/from-postgres/translate.test.ts +242 -0
  297. package/src/migrate/from-postgres/translate.ts +359 -0
  298. package/src/migrate/from-postgres/types.test.ts +116 -0
  299. package/src/migrate/from-postgres/types.ts +236 -0
  300. package/src/migrate/from-postgres/validate.e2e.test.ts +44 -0
  301. package/src/migrate/from-postgres/workspace.e2e.test.ts +114 -0
  302. package/src/migration-replay.e2e.test.ts +155 -0
  303. package/src/migration-replay.test.ts +173 -0
  304. package/src/migration-replay.ts +289 -0
  305. package/src/op/__snapshots__/watch-pipeline.test.ts.snap +2 -2
  306. package/src/op/activities/postgres-migration.ts +4 -0
  307. package/src/op/activity-contracts.ts +2 -0
  308. package/src/plugin.ts +37 -2
  309. package/src/postgres/apply/apply.ts +9 -1
  310. package/src/postgres/apply/statements.ts +74 -1
  311. package/src/postgres/constraint-names.ts +71 -0
  312. package/src/postgres/database-kinds.test.ts +384 -0
  313. package/src/postgres/entities.ts +266 -1
  314. package/src/postgres/entity-types.ts +5 -0
  315. package/src/postgres/import/generator.ts +42 -2
  316. package/src/postgres/import/live-export.ts +1 -0
  317. package/src/postgres/live/catalog-kinds.ts +223 -0
  318. package/src/postgres/live/catalog.ts +6 -1
  319. package/src/postgres/live/database-kinds.e2e.test.ts +164 -0
  320. package/src/postgres/live/describe-resources.ts +11 -2
  321. package/src/postgres/live/undeclarable.e2e.test.ts +13 -6
  322. package/src/postgres/migrate/backfill.ts +13 -1
  323. package/src/postgres/migrate/carry.ts +103 -8
  324. package/src/postgres/migrate/followups.e2e.test.ts +218 -0
  325. package/src/postgres/migrate/followups.test.ts +199 -0
  326. package/src/postgres/migrate/kinds.e2e.test.ts +5 -5
  327. package/src/postgres/migrate/observe.ts +53 -14
  328. package/src/postgres/migrate/op.ts +28 -1
  329. package/src/postgres/migrate/partition.e2e.test.ts +129 -0
  330. package/src/postgres/migrate/partition.test.ts +206 -0
  331. package/src/postgres/migrate/steps.ts +157 -12
  332. package/src/postgres/parser.ts +234 -2
  333. package/src/postgres/plan/deep.ts +28 -1
  334. package/src/postgres/plan/diff.ts +36 -1
  335. package/src/postgres/plan/normalize.ts +122 -1
  336. package/src/postgres/plan/rules.ts +10 -3
  337. package/src/postgres/plan/schema.ts +1 -1
  338. package/src/postgres/secret-options.ts +10 -0
  339. package/src/postgres/testing/roundtrip-schema.ts +13 -1
  340. package/src/postgres.ts +16 -0
  341. package/src/serializer.ts +13 -2
  342. package/src/skills/chant-sql-postgres-migration.md +3 -3
  343. package/src/skills/chant-sql-postgres.md +6 -1
  344. package/src/skills/chant-sql.md +2 -1
  345. package/src/sql-types-command.ts +38 -16
  346. package/src/sql-types.ts +11 -6
  347. package/src/sqlserver/fixture.test.ts +186 -0
  348. package/src/sqlserver/import-cli.test.ts +61 -0
  349. package/src/sqlserver/lexer.ts +260 -0
  350. package/src/sqlserver/parse.ts +865 -0
  351. package/src/sqlserver/translate.test.ts +396 -0
  352. package/src/sqlserver/translate.ts +558 -0
  353. package/src/sqlserver/types.test.ts +102 -0
  354. package/src/sqlserver/types.ts +154 -0
  355. package/src/sqlserver/validate.e2e.test.ts +32 -0
  356. package/src/sqlserver/validate.test.ts +49 -0
  357. package/src/sqlserver/validate.ts +76 -0
  358. package/src/validate.ts +5 -0
  359. package/src/workspace-kinds.test.ts +11 -0
  360. package/workspace-kinds.json +100 -2
package/dist/coverage.js CHANGED
@@ -4,8 +4,10 @@
4
4
  * Which kinds of object each dialect declares (#3911): every `CREATE` command
5
5
  * a pinned server has (`./coverage/<dialect>-commands.json`, written by
6
6
  * `scripts/sql-create-commands.ts` from the server's own sources) has a row
7
- * in `./coverage/<dialect>.json` marking it declared, refused with a reason,
8
- * or out of scope. A command with several forms that differ in what chant can
7
+ * in `./coverage/<dialect>.json` marking it declared, referenced, refused
8
+ * with a reason, or out of scope. A referenced kind (a ClickHouse named
9
+ * collection, #4395) is never declared: a declaration names one, a plan
10
+ * checks it exists, and import lists the server's as prerequisites. A command with several forms that differ in what chant can
9
11
  * hold (`CREATE TYPE ... AS ENUM` and `CREATE TYPE ... AS RANGE`) has a row
10
12
  * per form. Import refuses an object of a refused kind by that row's `kind`
11
13
  * (`./core/undeclarable.ts`), and the docs page is rendered from the rows
@@ -26,6 +28,8 @@ import postgresKinds from "./coverage/postgres.json" with { type: "json" };
26
28
  import clickhouseKinds from "./coverage/clickhouse.json" with { type: "json" };
27
29
  import postgresCommands from "./coverage/postgres-commands.json" with { type: "json" };
28
30
  import clickhouseCommands from "./coverage/clickhouse-commands.json" with { type: "json" };
31
+ /** Every status a coverage row may have. */
32
+ export const KIND_STATUSES = ["declared", "referenced", "refused", "out-of-scope"];
29
33
  /** Each dialect's coverage table. */
30
34
  export const KIND_COVERAGE = {
31
35
  postgres: postgresKinds.kinds,
@@ -47,7 +51,8 @@ export function kindRow(dialect, kind) {
47
51
  * What is wrong with a dialect's coverage table, against its pinned servers'
48
52
  * commands: a command a pinned server has and no row covers, a row for a
49
53
  * command no pinned server has, a kind named twice, a declared row with no
50
- * entity, a refused or out-of-scope row with no reason. Empty when complete.
54
+ * entity, a referenced, refused or out-of-scope row with no reason. Empty
55
+ * when complete.
51
56
  */
52
57
  export function kindCoverageProblems(dialect, opts = {}) {
53
58
  const rows = opts.rows ?? KIND_COVERAGE[dialect];
@@ -68,8 +73,8 @@ export function kindCoverageProblems(dialect, opts = {}) {
68
73
  if (seen.has(r.kind))
69
74
  problems.push(`the kind "${r.kind}" has two rows`);
70
75
  seen.add(r.kind);
71
- if (!["declared", "refused", "out-of-scope"].includes(r.status))
72
- problems.push(`${r.kind}: status "${r.status}" is not declared, refused or out-of-scope`);
76
+ if (!KIND_STATUSES.includes(r.status))
77
+ problems.push(`${r.kind}: status "${r.status}" is not ${KIND_STATUSES.slice(0, -1).join(", ")} or ${KIND_STATUSES.at(-1)}`);
73
78
  if (r.status === "declared" && !r.entity)
74
79
  problems.push(`${r.kind} is declared, and names no entity type`);
75
80
  if (r.status !== "declared" && !r.reason)
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `chant sql drizzle [--output <path>] [--check] [--bigint number|bigint]`
3
+ * (#4401): build the project the way `chant build` does, folded, and write the
4
+ * Drizzle schema module {@link renderDrizzle} renders from its entities.
5
+ *
6
+ * The file goes to `<project>/drizzle-schema.ts` by default, outside the
7
+ * source directory the build reads, and starts with chant's generated-file
8
+ * marker either way. `-o` and `--output` put it elsewhere, which is also the
9
+ * flag a workspace `generated` entry's generator passes. `--check` renders the
10
+ * same text and compares it with the file instead of writing it: exit 1,
11
+ * naming the file, when they differ.
12
+ */
13
+ import type { CommandGroupContext } from "@intentius/chant/cli/command-group";
14
+ /** The file `chant sql drizzle` writes by default, in the project directory. */
15
+ export declare const DRIZZLE_SCHEMA_FILE = "drizzle-schema.ts";
16
+ export declare function runDrizzle(ctx: CommandGroupContext): Promise<number>;
17
+ //# sourceMappingURL=drizzle-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle-command.d.ts","sourceRoot":"","sources":["../src/drizzle-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAI9E,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AA6BvD,wBAAsB,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C1E"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * `chant sql drizzle [--output <path>] [--check] [--bigint number|bigint]`
3
+ * (#4401): build the project the way `chant build` does, folded, and write the
4
+ * Drizzle schema module {@link renderDrizzle} renders from its entities.
5
+ *
6
+ * The file goes to `<project>/drizzle-schema.ts` by default, outside the
7
+ * source directory the build reads, and starts with chant's generated-file
8
+ * marker either way. `-o` and `--output` put it elsewhere, which is also the
9
+ * flag a workspace `generated` entry's generator passes. `--check` renders the
10
+ * same text and compares it with the file instead of writing it: exit 1,
11
+ * naming the file, when they differ.
12
+ */
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
14
+ import { dirname, join, relative, resolve } from "node:path";
15
+ import { DrizzleDialectError, renderDrizzle } from "./drizzle.js";
16
+ import { buildFolded, loadProject } from "./sql-types-command.js";
17
+ /** The file `chant sql drizzle` writes by default, in the project directory. */
18
+ export const DRIZZLE_SCHEMA_FILE = "drizzle-schema.ts";
19
+ const USAGE = "usage: chant sql drizzle [--output <path>] [--check] [--bigint number|bigint]";
20
+ function parseArgs(args) {
21
+ const out = { check: false };
22
+ for (let i = 0; i < args.length; i++) {
23
+ const a = args[i];
24
+ if (a === "--output" || a === "-o") {
25
+ const v = args[++i];
26
+ if (!v)
27
+ return { error: `${a} needs a path` };
28
+ out.output = v;
29
+ }
30
+ else if (a.startsWith("--output="))
31
+ out.output = a.slice("--output=".length);
32
+ else if (a === "--check")
33
+ out.check = true;
34
+ else if (a === "--bigint" || a.startsWith("--bigint=")) {
35
+ const v = a === "--bigint" ? args[++i] : a.slice("--bigint=".length);
36
+ if (v !== "number" && v !== "bigint")
37
+ return { error: "--bigint takes number or bigint" };
38
+ out.bigint = v;
39
+ }
40
+ else
41
+ return { error: `unknown argument ${a}` };
42
+ }
43
+ return out;
44
+ }
45
+ export async function runDrizzle(ctx) {
46
+ const args = parseArgs(ctx.rawArgs);
47
+ if ("error" in args) {
48
+ console.error(`${args.error}\n${USAGE}`);
49
+ return 1;
50
+ }
51
+ const cwd = process.cwd();
52
+ const project = await loadProject(cwd);
53
+ const output = args.output !== undefined ? resolve(cwd, args.output) : join(project.projectDir, DRIZZLE_SCHEMA_FILE);
54
+ const result = await buildFolded(project, "chant sql drizzle", "nothing was written");
55
+ if (!result)
56
+ return 1;
57
+ let rendered;
58
+ try {
59
+ rendered = renderDrizzle(result.entities, { config: project.config, ...(args.bigint ? { bigintMode: args.bigint } : {}) });
60
+ }
61
+ catch (err) {
62
+ if (!(err instanceof DrizzleDialectError))
63
+ throw err;
64
+ console.error(`chant sql drizzle: ${err.message}`);
65
+ return 1;
66
+ }
67
+ const shown = relative(cwd, output);
68
+ const named = shown && !shown.startsWith("..") ? shown : output;
69
+ if (args.check) {
70
+ // Compares only; the file is never written.
71
+ const onDisk = existsSync(output) ? readFileSync(output, "utf8") : undefined;
72
+ if (onDisk === rendered.text) {
73
+ console.log(`${named} is current`);
74
+ return 0;
75
+ }
76
+ console.error(onDisk === undefined
77
+ ? `chant sql drizzle: ${named} does not exist; run \`chant sql drizzle\` to write it`
78
+ : `chant sql drizzle: ${named} differs from what the build declares; run \`chant sql drizzle\` to rewrite it`);
79
+ return 1;
80
+ }
81
+ mkdirSync(dirname(output), { recursive: true });
82
+ writeFileSync(output, rendered.text);
83
+ const { tables, views, enums, sequences } = rendered.counts;
84
+ const plural = (n, word) => `${n} ${word}${n === 1 ? "" : "s"}`;
85
+ console.log(`wrote ${named}: ${[plural(tables, "table"), plural(views, "view"), plural(enums, "enum"), plural(sequences, "sequence")].join(", ")}`);
86
+ for (const s of rendered.skipped)
87
+ console.log(`not written: ${s.kind} ${s.names.join(", ")} (${s.reason})`);
88
+ for (const n of rendered.approximated)
89
+ console.log(`partly written: ${n}`);
90
+ return 0;
91
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * The Drizzle schema module `chant sql drizzle` writes (#4401): a Postgres
3
+ * build's tables, enums, sequences and views as `drizzle-orm/pg-core`
4
+ * declarations, so an application queries with Drizzle's row types while
5
+ * chant owns the schema, the plan and the apply.
6
+ *
7
+ * {@link renderDrizzle} is pure: the entities of a build in, the module's
8
+ * text and a list of what it left out. It reads the objects as the
9
+ * serializer writes them, as `sql-types.ts` does, so a `.sql` file's objects
10
+ * and a composite's members are covered as the build covers them.
11
+ *
12
+ * The API it writes is drizzle-orm {@link DRIZZLE_ORM_CHECKED}'s `pg-core`
13
+ * (type definitions read from the published package):
14
+ *
15
+ * - `pgTable(name, columns, (t) => [...])`, or `pgSchema(name).table(...)`
16
+ * for a schema other than `public` (`pgSchema("public")` throws);
17
+ * - column builders, `.notNull()`, `.default()`, `.primaryKey()`,
18
+ * `.generatedAlwaysAsIdentity()`, `.generatedAlwaysAs()`, `.array()`;
19
+ * - `foreignKey({ name, columns, foreignColumns })` with `.onDelete()` and
20
+ * `.onUpdate()`, `unique(name).on()`, `check(name, sql)`,
21
+ * `index(name).on()`, `uniqueIndex(name).on()`;
22
+ * - `pgEnum`, `pgSequence`, and `pgView(name, columns).existing()`;
23
+ * - `customType` for a column type Drizzle has no builder for.
24
+ *
25
+ * Each column key is the column's name in the database, so a row has the
26
+ * keys `RowOf` has. Every constraint and index carries the name Postgres
27
+ * would give it (`./postgres/constraint-names.ts`) when the DDL names none,
28
+ * so `drizzle-kit` compares equal names.
29
+ *
30
+ * Foreign keys use `foreignKey()` and not a column's `.references()`: the
31
+ * latter takes no name, and Drizzle derives `orders_user_id_users_id_fk`
32
+ * where Postgres says `orders_user_id_fkey`.
33
+ *
34
+ * Views are `.existing()`: chant creates them, and `drizzle-kit` must not.
35
+ */
36
+ import type { Declarable } from "@intentius/chant/declarable";
37
+ /** The drizzle-orm version whose type definitions the output was written against. */
38
+ export declare const DRIZZLE_ORM_CHECKED = "0.45.4";
39
+ export interface RenderDrizzleOptions {
40
+ /** The project's config: `sql.postgresMajor` for the catalog, `sql.dialect` when nothing is declared. */
41
+ config?: Record<string, unknown>;
42
+ /** How a `bigint` column reads: Drizzle's `number` (the default, as `drizzle-kit pull` writes it) or `bigint`. */
43
+ bigintMode?: "number" | "bigint";
44
+ }
45
+ export interface DrizzleRender {
46
+ text: string;
47
+ /** Objects with no Drizzle declaration, by kind. */
48
+ skipped: Array<{
49
+ kind: string;
50
+ names: string[];
51
+ reason: string;
52
+ }>;
53
+ /** Parts of a mapped object that Drizzle cannot say: `app.orders: ...`. */
54
+ approximated: string[];
55
+ counts: {
56
+ tables: number;
57
+ views: number;
58
+ enums: number;
59
+ sequences: number;
60
+ };
61
+ }
62
+ /** Thrown for a build that is not Postgres. */
63
+ export declare class DrizzleDialectError extends Error {
64
+ }
65
+ /**
66
+ * The Drizzle schema module for a build's entities. Throws
67
+ * {@link DrizzleDialectError} when the build is not Postgres.
68
+ */
69
+ export declare function renderDrizzle(entities: ReadonlyMap<string, Declarable>, opts?: RenderDrizzleOptions): DrizzleRender;
70
+ //# sourceMappingURL=drizzle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../src/drizzle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAU9D,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,yGAAyG;IACzG,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,kHAAkH;IAClH,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,2EAA2E;IAC3E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAED,+CAA+C;AAC/C,qBAAa,mBAAoB,SAAQ,KAAK;CAAG;AAsSjD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,GAAE,oBAAyB,GAAG,aAAa,CAyUvH"}