@typesql/core 0.4.0 → 0.6.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 (269) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +35 -90
  3. package/dist/adapter.d.ts +9 -0
  4. package/dist/adapter.d.ts.map +1 -0
  5. package/dist/adapter.js +9 -0
  6. package/dist/adapter.js.map +1 -0
  7. package/dist/cache/discover.d.ts +3 -0
  8. package/dist/cache/discover.d.ts.map +1 -1
  9. package/dist/cache/discover.js +80 -22
  10. package/dist/cache/discover.js.map +1 -1
  11. package/dist/cache/evaluate.d.ts +87 -0
  12. package/dist/cache/evaluate.d.ts.map +1 -0
  13. package/dist/cache/evaluate.js +481 -0
  14. package/dist/cache/evaluate.js.map +1 -0
  15. package/dist/cache/format.d.ts.map +1 -1
  16. package/dist/cache/format.js +33 -11
  17. package/dist/cache/format.js.map +1 -1
  18. package/dist/cache/job.d.ts +3 -7
  19. package/dist/cache/job.d.ts.map +1 -1
  20. package/dist/cache/job.js +155 -167
  21. package/dist/cache/job.js.map +1 -1
  22. package/dist/cache/mapper.d.ts.map +1 -1
  23. package/dist/cache/mapper.js +26 -7
  24. package/dist/cache/mapper.js.map +1 -1
  25. package/dist/cache/print.d.ts +7 -7
  26. package/dist/cache/print.d.ts.map +1 -1
  27. package/dist/cache/print.js +61 -13
  28. package/dist/cache/print.js.map +1 -1
  29. package/dist/cache/rpc.d.ts.map +1 -1
  30. package/dist/cache/rpc.js +11 -2
  31. package/dist/cache/rpc.js.map +1 -1
  32. package/dist/cache/scan.d.ts.map +1 -1
  33. package/dist/cache/scan.js +5 -3
  34. package/dist/cache/scan.js.map +1 -1
  35. package/dist/cache/store.d.ts.map +1 -1
  36. package/dist/cache/store.js +33 -8
  37. package/dist/cache/store.js.map +1 -1
  38. package/dist/create-sql.d.ts +122 -66
  39. package/dist/create-sql.d.ts.map +1 -1
  40. package/dist/create-sql.js +11 -11
  41. package/dist/create-sql.js.map +1 -1
  42. package/dist/engine/ast.d.ts +6 -1
  43. package/dist/engine/ast.d.ts.map +1 -1
  44. package/dist/engine/binder/clauses.d.ts +53 -27
  45. package/dist/engine/binder/clauses.d.ts.map +1 -1
  46. package/dist/engine/binder/from.d.ts +183 -102
  47. package/dist/engine/binder/from.d.ts.map +1 -1
  48. package/dist/engine/binder/narrow.d.ts +12 -11
  49. package/dist/engine/binder/narrow.d.ts.map +1 -1
  50. package/dist/engine/binder/resolve.d.ts +49 -16
  51. package/dist/engine/binder/resolve.d.ts.map +1 -1
  52. package/dist/engine/cache.d.ts +39 -31
  53. package/dist/engine/cache.d.ts.map +1 -1
  54. package/dist/engine/ddl/apply.d.ts +124 -72
  55. package/dist/engine/ddl/apply.d.ts.map +1 -1
  56. package/dist/engine/errors.d.ts +0 -4
  57. package/dist/engine/errors.d.ts.map +1 -1
  58. package/dist/engine/index.d.ts +28 -0
  59. package/dist/engine/index.d.ts.map +1 -0
  60. package/dist/engine/index.js +8 -0
  61. package/dist/engine/index.js.map +1 -0
  62. package/dist/engine/infer.d.ts +41 -32
  63. package/dist/engine/infer.d.ts.map +1 -1
  64. package/dist/engine/inline.d.ts +66 -36
  65. package/dist/engine/inline.d.ts.map +1 -1
  66. package/dist/engine/json.d.ts +44 -38
  67. package/dist/engine/json.d.ts.map +1 -1
  68. package/dist/engine/lexer/chars.d.ts.map +1 -1
  69. package/dist/engine/lexer/lex.d.ts +72 -26
  70. package/dist/engine/lexer/lex.d.ts.map +1 -1
  71. package/dist/engine/lexer/next.d.ts +1 -1
  72. package/dist/engine/lexer/tokens.d.ts +6 -1
  73. package/dist/engine/lexer/tokens.d.ts.map +1 -1
  74. package/dist/engine/lexer/unicode.d.ts +21 -15
  75. package/dist/engine/lexer/unicode.d.ts.map +1 -1
  76. package/dist/engine/named.d.ts +26 -7
  77. package/dist/engine/named.d.ts.map +1 -1
  78. package/dist/engine/parser/ddl.d.ts +196 -76
  79. package/dist/engine/parser/ddl.d.ts.map +1 -1
  80. package/dist/engine/parser/dml.d.ts +79 -41
  81. package/dist/engine/parser/dml.d.ts.map +1 -1
  82. package/dist/engine/parser/expr.d.ts +95 -47
  83. package/dist/engine/parser/expr.d.ts.map +1 -1
  84. package/dist/engine/parser/json.d.ts +85 -21
  85. package/dist/engine/parser/json.d.ts.map +1 -1
  86. package/dist/engine/parser/keywords.d.ts.map +1 -1
  87. package/dist/engine/parser/merge.d.ts +15 -10
  88. package/dist/engine/parser/merge.d.ts.map +1 -1
  89. package/dist/engine/parser/select.d.ts +150 -75
  90. package/dist/engine/parser/select.d.ts.map +1 -1
  91. package/dist/engine/parser/stmt.d.ts +12 -13
  92. package/dist/engine/parser/stmt.d.ts.map +1 -1
  93. package/dist/engine/parser/typename.d.ts +8 -8
  94. package/dist/engine/parser/typename.d.ts.map +1 -1
  95. package/dist/engine/parser/util.d.ts +15 -6
  96. package/dist/engine/parser/util.d.ts.map +1 -1
  97. package/dist/engine/parser/utility.d.ts +19 -12
  98. package/dist/engine/parser/utility.d.ts.map +1 -1
  99. package/dist/engine/parser/xml.d.ts +53 -33
  100. package/dist/engine/parser/xml.d.ts.map +1 -1
  101. package/dist/engine/project/dml.d.ts +158 -73
  102. package/dist/engine/project/dml.d.ts.map +1 -1
  103. package/dist/engine/project/merge.d.ts +30 -11
  104. package/dist/engine/project/merge.d.ts.map +1 -1
  105. package/dist/engine/project/naming.d.ts +16 -13
  106. package/dist/engine/project/naming.d.ts.map +1 -1
  107. package/dist/engine/project/select.d.ts +93 -44
  108. package/dist/engine/project/select.d.ts.map +1 -1
  109. package/dist/engine/project/stmt.d.ts +1 -1
  110. package/dist/engine/project/stmt.d.ts.map +1 -1
  111. package/dist/engine/shape.d.ts +3 -3
  112. package/dist/engine/shape.d.ts.map +1 -1
  113. package/dist/engine/splice.d.ts +42 -17
  114. package/dist/engine/splice.d.ts.map +1 -1
  115. package/dist/engine/suggest.d.ts +7 -9
  116. package/dist/engine/suggest.d.ts.map +1 -1
  117. package/dist/engine/typer/catalog.d.ts +612 -164
  118. package/dist/engine/typer/catalog.d.ts.map +1 -1
  119. package/dist/engine/typer/operators.d.ts +17 -17
  120. package/dist/engine/typer/operators.d.ts.map +1 -1
  121. package/dist/engine/typer/params.d.ts +141 -76
  122. package/dist/engine/typer/params.d.ts.map +1 -1
  123. package/dist/engine/typer/pg-functions.d.ts +61 -18
  124. package/dist/engine/typer/pg-functions.d.ts.map +1 -1
  125. package/dist/engine/typer/sqljson.d.ts +24 -12
  126. package/dist/engine/typer/sqljson.d.ts.map +1 -1
  127. package/dist/engine/typer/typeof.d.ts +147 -52
  128. package/dist/engine/typer/typeof.d.ts.map +1 -1
  129. package/dist/engine/typer/xml.d.ts +39 -15
  130. package/dist/engine/typer/xml.d.ts.map +1 -1
  131. package/dist/engine/types.d.ts +16 -21
  132. package/dist/engine/types.d.ts.map +1 -1
  133. package/dist/engine/write.d.ts +14 -10
  134. package/dist/engine/write.d.ts.map +1 -1
  135. package/dist/index.d.ts +11 -23
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +2 -7
  138. package/dist/index.js.map +1 -1
  139. package/dist/migrations.d.ts +6 -3
  140. package/dist/migrations.d.ts.map +1 -1
  141. package/dist/migrations.js.map +1 -1
  142. package/dist/query.d.ts.map +1 -1
  143. package/dist/query.js +3 -1
  144. package/dist/query.js.map +1 -1
  145. package/dist/row-keys.d.ts.map +1 -1
  146. package/dist/row-keys.js.map +1 -1
  147. package/dist/runtime/inline.d.ts +7 -10
  148. package/dist/runtime/inline.d.ts.map +1 -1
  149. package/dist/runtime/inline.js +21 -31
  150. package/dist/runtime/inline.js.map +1 -1
  151. package/dist/runtime/json.d.ts.map +1 -1
  152. package/dist/runtime/json.js.map +1 -1
  153. package/dist/runtime/splice.d.ts.map +1 -1
  154. package/dist/runtime/splice.js +3 -1
  155. package/dist/runtime/splice.js.map +1 -1
  156. package/dist/runtime/write.d.ts.map +1 -1
  157. package/dist/runtime/write.js +5 -2
  158. package/dist/runtime/write.js.map +1 -1
  159. package/dist/schema/column.d.ts +2 -2
  160. package/dist/schema/column.d.ts.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/normalize.d.ts.map +1 -1
  164. package/dist/schema/pg-catalog.d.ts +15 -2
  165. package/dist/schema/pg-catalog.d.ts.map +1 -1
  166. package/dist/schema/pg-types.d.ts.map +1 -1
  167. package/dist/transaction.d.ts.map +1 -1
  168. package/dist/transaction.js.map +1 -1
  169. package/dist/type-map/index.d.ts +3 -3
  170. package/dist/type-map/index.d.ts.map +1 -1
  171. package/package.json +9 -4
  172. package/src/adapter.ts +13 -0
  173. package/src/cache/discover.ts +296 -150
  174. package/src/cache/evaluate.ts +576 -0
  175. package/src/cache/format.ts +150 -105
  176. package/src/cache/job.ts +784 -612
  177. package/src/cache/mapper.ts +129 -89
  178. package/src/cache/print.ts +186 -120
  179. package/src/cache/rpc.ts +79 -57
  180. package/src/cache/scan.ts +91 -82
  181. package/src/cache/store.ts +176 -99
  182. package/src/create-sql.ts +721 -312
  183. package/src/engine/ast.ts +615 -304
  184. package/src/engine/binder/clauses.ts +572 -174
  185. package/src/engine/binder/from.ts +876 -243
  186. package/src/engine/binder/narrow.ts +138 -41
  187. package/src/engine/binder/resolve.ts +228 -87
  188. package/src/engine/cache.ts +247 -90
  189. package/src/engine/ddl/apply.ts +1168 -431
  190. package/src/engine/errors.ts +6 -12
  191. package/src/engine/index.ts +108 -0
  192. package/src/engine/infer.ts +271 -111
  193. package/src/engine/inline.ts +344 -154
  194. package/src/engine/json.ts +377 -127
  195. package/src/engine/lexer/chars.ts +71 -6
  196. package/src/engine/lexer/lex.ts +536 -185
  197. package/src/engine/lexer/next.ts +1 -1
  198. package/src/engine/lexer/tokens.ts +30 -7
  199. package/src/engine/lexer/unicode.ts +382 -96
  200. package/src/engine/named.ts +183 -63
  201. package/src/engine/parser/ddl.ts +1945 -647
  202. package/src/engine/parser/dml.ts +529 -221
  203. package/src/engine/parser/expr.ts +1503 -625
  204. package/src/engine/parser/json.ts +702 -291
  205. package/src/engine/parser/keywords.ts +198 -27
  206. package/src/engine/parser/merge.ts +202 -82
  207. package/src/engine/parser/select.ts +1269 -507
  208. package/src/engine/parser/stmt.ts +132 -48
  209. package/src/engine/parser/typename.ts +160 -55
  210. package/src/engine/parser/util.ts +147 -59
  211. package/src/engine/parser/utility.ts +103 -50
  212. package/src/engine/parser/xml.ts +478 -187
  213. package/src/engine/project/dml.ts +1286 -395
  214. package/src/engine/project/merge.ts +335 -93
  215. package/src/engine/project/naming.ts +83 -29
  216. package/src/engine/project/select.ts +929 -297
  217. package/src/engine/project/stmt.ts +25 -7
  218. package/src/engine/shape.ts +37 -15
  219. package/src/engine/splice.ts +255 -81
  220. package/src/engine/suggest.ts +159 -67
  221. package/src/engine/typer/catalog.ts +1427 -671
  222. package/src/engine/typer/operators.ts +561 -180
  223. package/src/engine/typer/params.ts +934 -232
  224. package/src/engine/typer/pg-functions.ts +37 -14
  225. package/src/engine/typer/sqljson.ts +299 -99
  226. package/src/engine/typer/typeof.ts +884 -246
  227. package/src/engine/typer/xml.ts +245 -76
  228. package/src/engine/types.ts +72 -35
  229. package/src/engine/write.ts +109 -36
  230. package/src/index.ts +46 -24
  231. package/src/migrations.ts +62 -45
  232. package/src/query.ts +124 -82
  233. package/src/row-keys.ts +42 -29
  234. package/src/runtime/inline.ts +106 -88
  235. package/src/runtime/json.ts +17 -11
  236. package/src/runtime/splice.ts +206 -152
  237. package/src/runtime/write.ts +67 -46
  238. package/src/schema/column.ts +45 -16
  239. package/src/schema/index.ts +38 -4
  240. package/src/schema/normalize.ts +88 -33
  241. package/src/schema/pg-catalog.ts +16 -3
  242. package/src/schema/pg-types.ts +63 -18
  243. package/src/transaction.ts +60 -35
  244. package/src/type-map/index.ts +126 -91
  245. package/dist/editor/call.d.ts +0 -33
  246. package/dist/editor/call.d.ts.map +0 -1
  247. package/dist/editor/call.js +0 -79
  248. package/dist/editor/call.js.map +0 -1
  249. package/dist/editor/complete.d.ts +0 -42
  250. package/dist/editor/complete.d.ts.map +0 -1
  251. package/dist/editor/complete.js +0 -82
  252. package/dist/editor/complete.js.map +0 -1
  253. package/dist/editor/index.d.ts +0 -10
  254. package/dist/editor/index.d.ts.map +0 -1
  255. package/dist/editor/index.js +0 -37
  256. package/dist/editor/index.js.map +0 -1
  257. package/dist/editor/scan.d.ts +0 -53
  258. package/dist/editor/scan.d.ts.map +0 -1
  259. package/dist/editor/scan.js +0 -599
  260. package/dist/editor/scan.js.map +0 -1
  261. package/dist/editor/schema.d.ts +0 -37
  262. package/dist/editor/schema.d.ts.map +0 -1
  263. package/dist/editor/schema.js +0 -118
  264. package/dist/editor/schema.js.map +0 -1
  265. package/src/editor/call.ts +0 -107
  266. package/src/editor/complete.ts +0 -115
  267. package/src/editor/index.ts +0 -40
  268. package/src/editor/scan.ts +0 -614
  269. package/src/editor/schema.ts +0 -157
package/CHANGELOG.md CHANGED
@@ -1,5 +1,117 @@
1
1
  # @typesql/core
2
2
 
3
+ ## 0.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - `@typesql/core/editor` is removed: editor completions moved to `@typesql/language-server`, which the VS Code extension bundles.
8
+
9
+ ### Patch Changes
10
+
11
+ - `SELECT … INTO` inside a WITH query is rejected with PostgreSQL's `SELECT ... INTO is not allowed here` (it was read as a data-modifying WITH query), and that error points at the new table's name, as in PostgreSQL.
12
+
13
+ - Lexer errors read like PostgreSQL's: an unterminated literal names where it starts (`unterminated quoted string at or near "'abc"`, `unterminated bit string literal …`), and a character no token starts with is `syntax error at or near "\\"`.
14
+
15
+ - `UPDATE … SET (a) = x` with a source that is neither `ROW(…)` nor a subquery is an error, as in PostgreSQL (`source for a multiple-column UPDATE item must be a sub-SELECT or ROW() expression`).
16
+
17
+ - A window function in the operand of `IN (SELECT …)` is checked like any other (`window "w" does not exist`).
18
+
19
+ - `SELECT … INTO` without a table name is a syntax error, as in PostgreSQL, instead of being accepted.
20
+
21
+ - `$1 BETWEEN a AND b` types the parameter as `a` (`$1 BETWEEN id AND big` → `number`, not `string | number | bigint`), as in PostgreSQL, which resolves `$1 >= a` first.
22
+
23
+ - Bit strings (`B'101'`, `X'1F'`) are typed `bit` instead of `text`, and a digit that does not belong is an error (`"2" is not a valid binary digit`), as in PostgreSQL.
24
+
25
+ - `DECLARE` rejects contradictory options (`ASENSITIVE` with `INSENSITIVE`, `SCROLL` with `NO SCROLL`), and errors after `NO`, `WITH` / `WITHOUT` and a lone sign in `FETCH` point at the token PostgreSQL names.
26
+
27
+ - Subscripts of `point`, `line` (`float8`), `lseg`, `box` (`point`) and `name` (`"char"`) are typed as in PostgreSQL instead of `unknown`, and a `UESCAPE` at the end of the statement reports `UESCAPE must be followed by a simple string literal at end of input`.
28
+
29
+ - Syntax errors after a `WITH` that is not followed by `(` in CREATE TABLE / VIEW, after `UPDATE` without `SET` or `DO` without `NOTHING` in a MERGE action, and after an `AS` without a label point at the token PostgreSQL points at.
30
+
31
+ - A call decoration the function does not take is an error, as in PostgreSQL: `*`, `DISTINCT`, `FILTER` or `OVER` on a plain function (`lower(x) FILTER (…)`), a window function without `OVER`, and `count()` without `*`.
32
+
33
+ - A parameter in a numeric-category argument (`abs($1)`, `width_bucket($1, …)`) is `float8` (`number`) instead of `numeric`, and `to_tsvector($1)` / `ts_headline($1, …)` take text instead of jsonb, as PostgreSQL resolves them.
34
+
35
+ - A JSON step that misses (`x -> 'nope'`, an index past the end, a key on an array) is SQL NULL, so `coalesce(x -> 'nope', '[]')` is typed `[]` instead of `[] | null`.
36
+
37
+ - Subscripts in a row on an array (`a[1][2]`, `a[1][1:2]`) apply to the array together, as in PostgreSQL: they are typed as its element, or as the array when one is a slice, instead of `unknown`.
38
+
39
+ - Error messages name the `"char"` and `bit varying` types as PostgreSQL does (`cannot subscript type bit varying …`).
40
+
41
+ - A column of `CREATE TABLE … AS SELECT NULL AS x` or of a view over `SELECT NULL` is `text`, as in PostgreSQL, instead of a column that only takes `null`.
42
+
43
+ - A window function inside the array of `x = ANY (ARRAY[…])` is checked like any other (`window "w" does not exist`).
44
+
45
+ - An array slice is nullable when a bound is (`nums[n:2]`, `nums[NULL:2]`), as in PostgreSQL, and a subscript chain with a slice (`nums[1][1:2]`) is NULL only through a NULL array or subscript (out of range it is an empty array).
46
+
47
+ - `SUBSTRING` and `OVERLAY` of a `varbit` are typed `bit`, as in PostgreSQL.
48
+
49
+ - Subscripting an enum (`mood[1]`, in a query or as an assignment target) reports PostgreSQL's `cannot subscript type mood because it does not support subscripting`.
50
+
51
+ - The README is shorter: install, one example and links to the docs site, which now has the details it used to repeat.
52
+
53
+ - A sort order in an `ON CONFLICT` target (`ON CONFLICT (email DESC)`, `NULLS FIRST`) is an error, as in PostgreSQL.
54
+
55
+ - An ORDER BY / GROUP BY position written with leading zeros (`ORDER BY 01`) is that position, and one past the int4 range is a non-integer constant, as in PostgreSQL.
56
+
57
+ - `x IN (SELECT …)` and `x = ANY (SELECT …)` over a subquery without columns report `subquery has too few columns`, as PostgreSQL does.
58
+
59
+ - "Trailing junk" errors quote the whole junk token (`123abc`, `100__000`, `$0_1`), and invalid Unicode escapes in `E'…'` strings say where they are, as PostgreSQL does.
60
+
61
+ - An assignment target with `.*` (`SET col.* = …`, `INSERT INTO t (col.*)`) reports PostgreSQL's `row expansion via "*" is not supported here` at the column.
62
+
63
+ - Subscripting a value of a type without subscripts (`json`, `text`, …) is an error in any expression, and a `jsonb` slice is too, as in PostgreSQL; they were typed `unknown`.
64
+
65
+ - `ORDER BY` / `GROUP BY` / `DISTINCT ON` position errors (`ORDER BY position 2 is not in select list`) point at the number, as in PostgreSQL.
66
+
67
+ - A national character literal `N'abc'` is a `character` value (`string`), as in PostgreSQL, instead of `unknown`.
68
+
69
+ - `SELECT DISTINCT *` checks its ORDER BY too: an expression that is not in the select list (`ORDER BY id + 1`) is an error, as in PostgreSQL.
70
+
71
+ - A row compared with a subquery (`(a, b) = (SELECT x, y …)`) is a nullable boolean and needs a subquery of the same width, as in PostgreSQL; it was rejected as a scalar subquery with more than one column.
72
+
73
+ - DDL errors name relations as PostgreSQL does: a missing schema in `ALTER TABLE`, `DROP TABLE`, `INHERITS` or `LIKE` reports `schema "s" does not exist`, a missing relation there is spelled as written (`relation "public.t" does not exist`), `DROP` / `is not a table` messages use the bare name, and two parents with different column types report `inherited column "x" has a type conflict`.
74
+
75
+ - A typed literal with a schema-qualified type name, `pg_catalog.int4 '1'`, is accepted (the schema is dropped, as in casts) instead of being a syntax error.
76
+
77
+ - A missing relation written with `public.` keeps it in the error (`relation "public.t" does not exist`), and errors about a schema-qualified name point at the name, as in PostgreSQL.
78
+
79
+ - `INSERT INTO t AS excluded … ON CONFLICT DO UPDATE SET c = excluded.c` is an error (`table reference "excluded" is ambiguous`), as in PostgreSQL.
80
+
81
+ - Syntax errors in `1 + ANY 2`, `f(1 => x)`, `current_date()` and `localtime('a')` point at the token PostgreSQL points at, and `current_user(1)` is a syntax error, as in PostgreSQL.
82
+
83
+ - The merged column of `FULL JOIN … USING` / `NATURAL FULL JOIN` is nullable when either side's column is (a row without a match carries that side's NULL), as in PostgreSQL; it was non-null unless both were nullable.
84
+
85
+ - `U&'…' uescapeé` (UESCAPE followed by a non-ASCII letter) reads as an alias, as in PostgreSQL, instead of an error.
86
+
87
+ ## 0.5.0
88
+
89
+ ### Minor Changes
90
+
91
+ - What adapters and custom executors build on moved to `@typesql/core/adapter`: `createTransactionalSql`, `runTransaction`, `SqlDriver`, `mapRows`, `rowKeysOf`, `camelCase` and `JsonParam`.
92
+
93
+ - The engine's types (`Analyze`, `ArgsOf`, `KeyedRow`, `ListRep`, `SetRep`, the inline markers, lexer, parser, schema and type cache types, …) moved to `@typesql/core/engine`; the root keeps `Sql`, `Query`, `Fragment`, the schema helpers, `RowOf`, `ParamsOf`, `Validate`, `ApplyDdl` and the other types you write in application code.
94
+
95
+ - The root export is the user-facing API only: the standalone `param`, `valueOrDefault` and `json` are gone (use `sql.param`, `sql.json`), and so are the splice and query-building helpers (`splice`, `renumberParams`, `maxParam`, `quoteIdent`, `joinFragments`, `hasSlots`, `rewriteNamed`, `makeQuery`, `makeFragment`).
96
+
97
+ - `sql.valueOrDefault` is removed: `sql.param(value)` sends `DEFAULT` when the value is `undefined`, and a value that can be `undefined` is a compile error where `DEFAULT` is not allowed and inside `sql.fragment`.
98
+
99
+ - `sql.list` is merged into `sql.join`: joining a runtime array of fragments whose texts are known is checked as `sql.list` did, and `sql.join` throws when there are no items.
100
+
101
+ ### Patch Changes
102
+
103
+ - No user-visible change: PostgreSQL's parser (libpg-query) is a development dependency, for a test that compares parse trees.
104
+
105
+ - No user-visible change: the type cache job evaluates statements through an internal module the type oracles share.
106
+
107
+ - Types follow PostgreSQL 18: `PgCatalog` has the new catalog columns (`pg_attribute.attcacheoff` is gone), the new built-in functions are known, and `reverse(bytea)` and `json(b)_strip_nulls(x, strip_in_arrays)` are typed.
108
+
109
+ - The README's documentation links point to the docs site, after its pages moved.
110
+
111
+ - No user-visible change: comments in the type engine say its rules are verified against PostgreSQL 18, which the type and function oracles now check.
112
+
113
+ - No user-visible change: simpler printed-type parsing in the type cache job, with mutation-testing annotations.
114
+
3
115
  ## 0.4.0
4
116
 
5
117
  ### Minor Changes
package/README.md CHANGED
@@ -1,123 +1,68 @@
1
1
  # @typesql/core
2
2
 
3
- Type-level Postgres SQL for TypeScript. You write a SQL string literal; the compiler parses it
4
- **inside the type system** and gives you the exact row type, the parameter types, and (for DDL)
5
- the resulting schema. No codegen, no database connection, no build step. Zero runtime
6
- dependencies.
3
+ Write Postgres SQL in TypeScript and get exact types for rows and parameters. TypeSQL parses your SQL inside the type checker: no codegen, no database connection, no build step.
7
4
 
8
- Tested against PostgreSQL's own regression suite: on all 49,999 statements of PostgreSQL 18's
9
- regression tests that can be checked statically, the parser accepts exactly what Postgres accepts
10
- and rejects its syntax errors ([how it is tested](https://typesql.karsli.net/guide/postgres-compatibility)).
5
+ ## Install
11
6
 
12
7
  ```sh
13
- pnpm add @typesql/core
8
+ npm install @typesql/core
14
9
  ```
15
10
 
16
- [Open an example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/PTAEBUE8AcFMGUCKAZAXKACgewM4BcBzAJ1h1CWQBpRoBDInWAE1ACNIIYEBjIgS2h4A5GTxdQOSPlgBbAHSgAokz55QeABaxyKULQB2LDVgBusIuq3quOVACgQoIlgDuZAyzpFaM2HnNkAGZYADYhrtQeoDJ8+LQA1qR6JKDcWDLQfCHa5s4MoFj6ltr4-PoEcnZ8GVhEagDeqSS0-vAAjiHUYnCgAMKhXeIA4rD65i3Mgz0AcgCuYbSs2VPaGPQ+OFBwK6AASq5b2gC+oIHOMqAARAAC3aQdwGkklwDcdlX6-kSBtNzaACIAIVA9TsoFAs0YDHQoPB4L4THQIzG3n8TAAPJc+J8ACyXAB8L1Ajg0tHcoCYsB+8zw6Cwgj4hVoIQKRQAktN4IpduAwXDZLQsuh+iFMf4AB54AlvOEU2LQEK0SAAfX0Plg6DmCyWsDFsEl0r54N4sAmTGVLSRo3GaLF1VIeB8ggAXobwUcZTRcHhbCCjaAEVaUWbMdi8AAON1w2izTS1ZWBvqhUO4qPgvCqbLC5OXCVSwn+1hYJiQTXzRU6vUGgvut5Hd5pfT4CQdUAAXiaptaHXRQPxAAoAJRvBxgZCKABi4FAACkAPIc6IJJKabT8AgaNQ4BHafTlxbZIkAEgAjOpl2RVKJxGd0hC5AjKo3m212y2Qv2AAZc8e9aezB8mGoACBSyahoDkDM8Gyf1ZTg8EJ12OcAFkIShMhZlAccp1nBdpi9fAyGgUA53wiCYzjIgExYDsAIRWD4NlAB1AAJblFHvBE31PT9qAAdmHOw7j2Vw332FxDnRO4sECUA2gLRxwQAPQAfiE8Q1m8GQyA7TSNkk6TZPkt5FNAVT3kcABBAhiFgAgJncQxUlCWYZCKNVfCCUJwhcTBvVs300lmT5+wAKkHANL0+cNIgkPAygICFDHMUB9GLWAAFpoH8kgcCfQpmziH03xwDovx-RQ-z0WNjCohFqCCkLwuoGRaHFfsoOyCLLPgUBFX8ZtEJQgjiqGJCAFUMFAQEAE1qso6jP0E4T4EdYqO3EgyuBkuKWhwBSwGUtTR1ANl9BCbFtBMZlZiSegSlGNQyVAI8ii8dUvkclhuC0bhEhYWh7OxZsXC0FJVw4e60OYfKmzUUCWQ7S5aCYWhrn1J1sjkNIZFeOxnzUE0zRKsrPw5LkeVO6ZwDnaH8n7BGIoANUs5BxsUXr+yPepSpCOR3pkBnWqyQcjgi3ZFHAcbdmmDkhgDIDOzNC08CWt5hN6Zo0TEg4uCk7bZKJtEDrhcyTuQ2JHUSdwUhxzJslAXJajIQpih0ZA4oShQJz4cVihkexefKxRf2nfRfFAIbUMhAI1eJMAnaIdA0hCVyikucPYEuCksCSNL4fFS27CDsnOW5acORpkayA6zNYGZ1n2c509B14q4WNgMIsEuYd48dog8nQCjauoyLQGmOdp2mcbkA9qJSTINKKSpGMQjwOwgA) <!-- playground:core --> to hover the types and edit the SQL, with nothing to install.
17
-
18
- Add the adapter for your driver to run queries: [`@typesql/pg`](https://www.npmjs.com/package/@typesql/pg)
19
- (node-postgres) or [`@typesql/postgres`](https://www.npmjs.com/package/@typesql/postgres)
20
- (postgres.js). Already describing your database for an ORM? `@typesql/kysely`,
21
- `@typesql/drizzle` and `@typesql/prisma` take the schema from it.
11
+ Requires TypeScript 7.1 or later and Node.js 26 or later.
22
12
 
23
13
  ## Usage
24
14
 
15
+ Describe your tables with Postgres type names, then write queries:
16
+
25
17
  ```ts
26
18
  import { createSql, type Col, type Generated, type Nullable } from "@typesql/core";
27
19
 
28
20
  interface DB {
29
21
  users: {
30
- id: Generated<"int4">; // has a default → optional on INSERT
31
- email: Col<"text">;
32
- display_name: Nullable<"text">;
33
- created_at: Generated<"timestamptz">;
22
+ id: Generated<"int4">; // has a default, so optional on INSERT
23
+ email: Col<"text">; // NOT NULL
24
+ display_name: Nullable<"text">; // NULL allowed
34
25
  };
35
26
  posts: {
36
27
  id: Generated<"int8">;
37
28
  author_id: Col<"int4">;
38
29
  title: Col<"text">;
39
- body: Nullable<"text">;
40
30
  };
41
31
  }
42
32
 
43
33
  const sql = createSql<DB>();
44
34
 
45
- const q = sql(`SELECT u.id, u.email, p.title
46
- FROM users u LEFT JOIN posts p ON p.author_id = u.id
47
- WHERE u.id = $1`, 7);
48
- // ^? Query<{ id: number; email: string; title: string | null }, [number | null]>
49
-
50
- q.text; // the SQL, sent to Postgres as is
51
- q.values; // [7]
52
-
53
- sql("SELECT nme FROM users");
54
- // ~~~~~~~~~~~~~~~~~~~~~~ SqlError<"column \"nme\" does not exist", 1>
35
+ const query = sql(
36
+ `SELECT u.email, p.title
37
+ FROM users u LEFT JOIN posts p ON p.author_id = u.id
38
+ WHERE u.id = $1`,
39
+ 7,
40
+ );
41
+ // row: { email: string; title: string | null }
42
+ // params: [number | null]
43
+
44
+ sql("SELECT emial FROM users");
45
+ // error: column "emial" does not exist. Perhaps you meant the column "email"?
55
46
  ```
56
47
 
57
- The SQL must be a string literal (tagged templates cannot be inferred by TypeScript). Values
58
- can be passed positionally (`$1`), by name (`:email` with an object), or inline with
59
- `${sql.param(value)}` (`${sql.json(value)}` for JSON); all are sent as bind parameters and
60
- checked against their context.
61
-
62
- ## What you get
63
-
64
- - **Rows and parameters** for `SELECT` (joins, subqueries, CTEs, set operations, aggregates,
65
- window functions) and `INSERT`/`UPDATE`/`DELETE … RETURNING`.
66
- - **Nullability** from the schema, outer joins, `WHERE` filters and expressions (`COALESCE`,
67
- aggregates, `CASE`).
68
- - **Typed JSON**: `json_build_object`, `json_agg`, `to_json(t)` and `->` / `#>` give the JSON's
69
- structure, typed as Postgres serializes it.
70
- - **Postgres column naming** (`?column?`, `count`, `lower`) and Postgres-worded compile errors.
71
- - **Fragments**: `sql.fragment`, `sql.id`, `sql.join`, `sql.list` (runtime arrays of typed elements), `sql.raw`, spliced into inference with
72
- `$n` renumbering.
73
- - **Write helpers**: `sql.valueOrDefault(x)` sends `DEFAULT` for `undefined`; `sql.set(table, partial)`
74
- and `sql.values(table, rows)` build typed `SET` lists and `VALUES` rows from objects.
75
- - **DDL**: `ApplyDdl<DB, "ALTER TABLE …">` and the `migrations()` builder derive the schema from
76
- your migrations.
77
- - **Running queries**: with `createSql(executor)` (or an adapter's `createSql(client)`), queries
78
- have `execute()`, `executeTakeFirst()`, `executeTakeFirstOrThrow()` and `executeCount()` (the
79
- affected row count). An `Executor` resolves to the rows or to `{ rows, rowCount }`. An
80
- adapter's `sql` also has `sql.transaction(fn)`, which runs `fn` with a `sql` bound to one
81
- transaction (`TransactionalSql`).
82
- - **camelCase rows**: `createSql(executor, { rowKeys: "camelCase" })` renames the rows'
83
- top-level keys (`created_at` → `createdAt`, as Kysely's `CamelCasePlugin` does) in the types
84
- and at runtime, leaving JSON values alone.
85
- - **Escape hatch**: `sql.as<Row>(…)` for SQL the engine cannot type.
86
-
87
- ## Schema
88
-
89
- Columns are declared with Postgres type names; a type map turns them into TypeScript types
90
- (`DefaultTypeMap` matches node-postgres: `int8` and `numeric` rows are `string`; their parameters
91
- also take numbers and bigints, and date parameters take `Date | string`):
92
-
93
- | Helper | Meaning |
94
- |---|---|
95
- | `Col<"text">` | `NOT NULL`, no default |
96
- | `Nullable<"text">` | `NULL` allowed |
97
- | `Generated<"int4">` | has a default: optional in `INSERT` |
98
- | `NullableGenerated<"text">` | both |
99
- | `Enum<"mood">` | values in `DB["$types"]["mood"]` |
100
- | `Json<T>` | `jsonb` holding `T`: rows read `T`, `->` indexes into it, `${sql.json(v)}` writes it |
101
- | `View<{ … }>` | read-only relation |
48
+ [Open the example in the TypeScript Playground](https://www.typescriptlang.org/play/#code/PTAEBUE8AcFMGUCKAZAXKACgewM4BcBzAJ1h1CWQBpRoBDInWAE1ACNIIYEBjIgS2h4A5GTxdQOSPlgBbAHSgAokz55QeABaxyKULQB2LDVgBusIuq3quOVACgQoIlgDuZAyzpFaM2HnNkAGZYADYhrtQeoDJ8+LQA1qR6JKDcWDLQfCHa5s4MoFj6ltr4-PoEcnZ8GVhEagDedgCQYnCgAMKhlM28sLT+8ACOId0t4gDisPrm-cyjrdoAcgCuYbSs2fPiGPQ+OFBwW20ASq4HsN0AvqCBzjKgAEQAAgs4w8BpJA8A3HZV+v4iIFaNxtAARABCoEaTWWjAY6BhTT4THQk2m3n8TAAPA8+ACACwPAB831Ajg0tHcoCYsGBqzw6Cwgj4hVoIQKRQAkot4IpjuBmk1ZLQsuhOiFcf4AB54Em-JpNFQ4aAhWiQAD6+h8sHQKzWG1gUtgsvlQt6syYGv6aKmMyxUuqpDwPkEAC8zU1LgroLg8LZoUKUbaMZbcfi8AAOT1NWjLTS1DXBjqhcOEmN4VTZcWph4yuWkoWsLBMSB61Zqw3G02Fr2-S5-NL6fASYagAC8qRIsyGkshxIAFABKX4OMDIRQAMXAoAAUgB5HnRBJJTTafgEDRqHAo7T6CvrbJkgAkAEZ1CuyKpROJbulQMs5CjKk2W4MO62QgPmgADPkT9oZ0fFFqEfEUsmoaA5EzPBsjsUAEMQpDkMnY55wAWQfeEyGWUAJ2nOdF0WGg-TIaBQHnYioLjBMiCTFhO2Aph4OQ1jEIAdQACX5RQHyfBjQDPH9RgAdm6Ec7AWUBThcD8ZPObEFiwQJQEGQtHAQgA9AB+STtl2GQyE7HZvEMhSlJUtTfg00AdL+RwAEECGIWACFmdxDFSUJlhkIptV8IJQnCWTsHwFyAzSZYAQHAAqIdQFiBKAUjSIJDwMoCAfQxzFAfQS1gABaX0wpIHAX0KFs4n9D83i-X9-0UQC9HjYw6JAryorwWKh2oGRaGlAcYOyeKHPgUA1X8FtUIwkj8DIcY0IAVQwUAIQATWa2j6OEuwJKk+AXWqzt5K4RSuGUtL+hwdSwC03Sx1ALl9BCfFtBMdlliSegSimNQqUEoovB1QEPJYbgtG4RIWFoNz8RbFwtBSNcOG+rDmHK5s1HAjlOweWgmFoJ4TVdbI5DSGQfjsV81AtLEauGb8mh-Hk+QFR7FnAec0fyAdsfigA1BzkEWxQxoHY96lquQgZkXm+qyIdLni45FHARbjkWHlxgSphqFp5hrTwHa9vEdpuzp46zlOiyuz6LEbsQuyHvQ2IXUSdwUnJzJslAXJajIQpih0ZA0oyhRJz4aVihkexaoHP9FAAmd9F8UBpswuEAh-EdyTAP2iHQNIQh8ooHhT2AHhpLAkjyrHpVduw4+Z3l+RnHlOdm6rBqzWABaFkWxbPIdhMeTjYDCLAHhzxx8-QGjWvohKyEWecZ0WRbkBDqJKTIPKaTpOMQjwOwgA) <!-- playground:core -->: edit the SQL and hover the types, with nothing to install. The Playground runs TypeScript 6, so treat it as a demo.
102
49
 
103
- Other Postgres schemas nest (`DB["auth"]["sessions"]` is `auth.sessions`). For
104
- `pg_stat_activity`, `pg_tables`, `information_schema.columns` and other system catalogs, add the
105
- opt-in slice: `createSql<DB & PgCatalog>()`.
50
+ ## Run queries
106
51
 
107
- ## Requirements
52
+ `@typesql/core` types your queries. To run them, add the package for your driver or ORM:
108
53
 
109
- TypeScript 7.1 or later (the native compiler; `7.1.0-beta` works) and Node.js 26 or later.
110
- PostgreSQL semantics only.
111
-
112
- Optionally, a [type cache](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/guide/caching.md)
113
- file, which TypeScript 7.1's content mappers let this package serve and keep up to date, saves
114
- recomputing query types on every `tsc` run and every edit.
54
+ | Package | Runs queries on |
55
+ |---|---|
56
+ | [`@typesql/pg`](https://www.npmjs.com/package/@typesql/pg) | node-postgres |
57
+ | [`@typesql/postgres`](https://www.npmjs.com/package/@typesql/postgres) | postgres.js |
58
+ | [`@typesql/kysely`](https://www.npmjs.com/package/@typesql/kysely) | Kysely, with its `DB` interface as the schema |
59
+ | [`@typesql/drizzle`](https://www.npmjs.com/package/@typesql/drizzle) | Drizzle, with its schema |
60
+ | [`@typesql/prisma`](https://www.npmjs.com/package/@typesql/prisma) | Prisma Client, with its schema |
115
61
 
116
62
  ## Documentation
117
63
 
118
- [Guide](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/guide/getting-started.md) ·
119
- [API reference](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/reference/api.md) ·
120
- [DDL support](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/reference/ddl.md) ·
121
- [Errors and limits](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/guide/errors-and-limits.md) ·
122
- [Type cache](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/guide/caching.md) ·
123
- [Editor completions](https://github.com/ismailkarsli/typesql/blob/main/packages/docs/guide/editor.md)
64
+ The full guide is at **[typesql.karsli.net](https://typesql.karsli.net)**. It covers the [schema](https://typesql.karsli.net/guide/schema), [parameters](https://typesql.karsli.net/guide/parameters), [writing data](https://typesql.karsli.net/guide/writing-data), [dynamic SQL](https://typesql.karsli.net/guide/dynamic-sql), [migrations](https://typesql.karsli.net/guide/migrations), the [type cache](https://typesql.karsli.net/guide/performance) and [known limits](https://typesql.karsli.net/guide/limits).
65
+
66
+ ## License
67
+
68
+ [MIT](LICENSE)
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `@typesql/core/adapter`: what driver adapters and custom executors build on. Applications
3
+ * import `@typesql/core` or an adapter package instead.
4
+ */
5
+ export { mapRows, rowKeysOf } from "./query.js";
6
+ export { camelCase } from "./row-keys.js";
7
+ export { JsonParam } from "./runtime/json.js";
8
+ export { createTransactionalSql, runTransaction, type SqlDriver, } from "./transaction.js";
9
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACN,sBAAsB,EACtB,cAAc,EACd,KAAK,SAAS,GACd,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `@typesql/core/adapter`: what driver adapters and custom executors build on. Applications
3
+ * import `@typesql/core` or an adapter package instead.
4
+ */
5
+ export { mapRows, rowKeysOf } from "./query.js";
6
+ export { camelCase } from "./row-keys.js";
7
+ export { JsonParam } from "./runtime/json.js";
8
+ export { createTransactionalSql, runTransaction, } from "./transaction.js";
9
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACN,sBAAsB,EACtB,cAAc,GAEd,MAAM,kBAAkB,CAAC"}
@@ -17,6 +17,7 @@ export interface Kinds {
17
17
  export interface SqlSite {
18
18
  /** The query literal (with `:name` and `${sql.param()}` markers as written). */
19
19
  readonly key: string;
20
+ readonly file: string;
20
21
  readonly db: Type;
21
22
  readonly tm: Type;
22
23
  readonly keys: Type;
@@ -26,10 +27,12 @@ export interface SqlSite {
26
27
  /** A statement written as a type: `RowOf<DB, TM, "SELECT …">`, or a literal argument of the project's own alias. */
27
28
  export interface TypeSite {
28
29
  readonly key: string;
30
+ readonly file: string;
29
31
  readonly db: Type;
30
32
  }
31
33
  export interface DdlSite {
32
34
  readonly key: string;
35
+ readonly file: string;
33
36
  /** The schema before the step (`Migrations<DB>`'s `DB`). */
34
37
  readonly db: Type;
35
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"discover.d.ts","sources":["../../src/cache/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAsB,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGnF,6FAA6F;AAC7F,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,OAAO;IACtB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;CAC7B;AAED,oHAAoH;AACpH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB;AASD,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACrC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GACrC,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,GAAG,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CA6EhE;AAuDD,uFAAuF;AACvF,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7H"}
1
+ {"version":3,"file":"discover.d.ts","sources":["../../src/cache/discover.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,KAAK,EACX,OAAO,EACP,OAAO,EAEP,IAAI,EACJ,MAAM,kBAAkB,CAAC;AAE1B,6FAA6F;AAC7F,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,OAAO;IACvB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;CAC5B;AAED,oHAAoH;AACpH,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CAClB;AAsBD,wBAAsB,QAAQ,CAC7B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,EACrC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GACpC,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,GAAG,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAyJhE;AAqFD,uFAAuF;AACvF,wBAAsB,SAAS,CAC9B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACnC,OAAO,CAAC,OAAO,CAAC,CAQlB"}
@@ -1,7 +1,25 @@
1
+ /**
2
+ * Finds the statements of a program: `sql(…)` calls (the callee is core's `Sql` or
3
+ * `TransactionalSql`, whatever it is named locally) and `migrations().add(…)` steps. Only the
4
+ * callee, the receiver and the first arguments are typed, not the call: discovering 500
5
+ * queries takes milliseconds and analyses none of them.
6
+ */
1
7
  const SLOT = /\{[A-Za-z_][A-Za-z0-9_]*\}/;
2
8
  /** Core aliases taking `(DB, …, Q)`: the index of `Q`. */
3
- const QUERY_ALIASES = { RowOf: 2, ParamsOf: 2, ArgsOf: 2, ParamsArgs: 2, Validate: 1, KindOf: 1, NamesOf: 1, Analysis: 1 };
4
- const DDL_ALIASES = { ApplyDdl: 1, ValidateDdl: 1 };
9
+ const QUERY_ALIASES = {
10
+ RowOf: 2,
11
+ ParamsOf: 2,
12
+ ArgsOf: 2,
13
+ ParamsArgs: 2,
14
+ Validate: 1,
15
+ KindOf: 1,
16
+ NamesOf: 1,
17
+ Analysis: 1,
18
+ };
19
+ const DDL_ALIASES = {
20
+ ApplyDdl: 1,
21
+ ValidateDdl: 1,
22
+ };
5
23
  const LOOKS_LIKE_QUERY = /^\s*(\(\s*)*(select|with|insert|update|delete|values|table)\b/i;
6
24
  const LOOKS_LIKE_DDL = /^\s*(create|alter|drop|comment)\b/i;
7
25
  export async function discover(program, checker, kinds, isCorePath, include) {
@@ -22,58 +40,83 @@ export async function discover(program, checker, kinds, isCorePath, include) {
22
40
  const fileDbs = new Map();
23
41
  const loose = [];
24
42
  // statements written as types
25
- const syms = refs.length ? await checker.getSymbolAtLocation(refs.map((r) => r.typeName)) : [];
43
+ const syms = refs.length
44
+ ? await checker.getSymbolAtLocation(refs.map((r) => r.typeName))
45
+ : [];
26
46
  await Promise.all(refs.map(async (r, i) => {
27
47
  let sym = syms[i];
28
48
  if (sym && sym.flags & 2097152 /* SymbolFlags.Alias */)
29
49
  sym = await checker.getAliasedSymbol(sym);
30
50
  const args = r.typeArguments ?? [];
31
51
  const isCore = !!sym && sym.declarations.some((d) => isCorePath(d.path));
32
- const qAt = isCore ? (QUERY_ALIASES[sym.name] ?? DDL_ALIASES[sym.name]) : undefined;
52
+ const qAt = isCore
53
+ ? (QUERY_ALIASES[sym.name] ?? DDL_ALIASES[sym.name])
54
+ : undefined;
33
55
  if (qAt !== undefined && args[0] && args[qAt]) {
34
56
  const db = await checker.getTypeFromTypeNode(args[0]);
35
57
  fileDbs.set(db.id, db);
36
58
  const key = literalOf(args[qAt], kinds);
37
59
  if (key === null)
38
60
  return;
39
- (sym.name in DDL_ALIASES ? ddl : types).push({ key, db });
61
+ (sym.name in DDL_ALIASES ? ddl : types).push({
62
+ key,
63
+ db,
64
+ file: fileName,
65
+ });
40
66
  return;
41
67
  }
42
68
  // the project's own alias of a core one: `type Row<Q extends string> = RowOf<DB, TM, Q>`
43
- const wrapped = sym && !isCore ? await wrappedCoreAlias(sym, program, checker, kinds, isCorePath, aliasMemo) : null;
69
+ const wrapped = sym && !isCore
70
+ ? await wrappedCoreAlias(sym, program, checker, kinds, isCorePath, aliasMemo)
71
+ : null;
44
72
  if (wrapped) {
45
- const key = args[wrapped.param] ? literalOf(args[wrapped.param], kinds) : null;
73
+ const key = args[wrapped.param]
74
+ ? literalOf(args[wrapped.param], kinds)
75
+ : null;
76
+ // Stryker disable next-line ConditionalExpression: a null key (the alias given a non-literal) gives no entry either way; this skips evaluating it
46
77
  if (key !== null)
47
- (wrapped.ddl ? ddl : types).push({ key, db: wrapped.db });
78
+ (wrapped.ddl ? ddl : types).push({
79
+ key,
80
+ db: wrapped.db,
81
+ file: fileName,
82
+ });
48
83
  }
49
84
  else if (!isCore) {
50
85
  for (const a of args) {
51
86
  const key = literalOf(a, kinds);
52
- if (key !== null && (LOOKS_LIKE_QUERY.test(key) || LOOKS_LIKE_DDL.test(key)))
87
+ if (key !== null &&
88
+ (LOOKS_LIKE_QUERY.test(key) || LOOKS_LIKE_DDL.test(key)))
53
89
  loose.push(key);
54
90
  }
55
91
  }
56
92
  }));
57
93
  // migration steps: the receiver is core's Migrations<DB>
58
- const adds = calls.filter((c) => c.expression.kind === kinds.PropertyAccessExpression && c.expression.name.text === "add");
94
+ const adds = calls.filter((c) => c.expression.kind === kinds.PropertyAccessExpression &&
95
+ c.expression.name.text === "add");
59
96
  if (adds.length) {
60
97
  const receivers = await checker.getTypeAtLocation(adds.map((c) => c.expression.expression));
61
98
  const args = await checker.getTypeAtLocation(adds.map((c) => c.arguments[0]));
62
99
  await Promise.all(adds.map(async (_, i) => {
63
100
  const r = receivers[i];
64
101
  const a = args[i];
65
- if (!a.isStringLiteralType() || !(await isCoreRef(r, ["Migrations"], isCorePath)))
102
+ if (!a.isStringLiteralType() ||
103
+ !(await isCoreRef(r, ["Migrations"], isCorePath)))
66
104
  return;
67
105
  const [db] = await checker.getTypeArguments(r);
106
+ // Stryker disable next-line ConditionalExpression: a Migrations<DB> receiver has its type argument
68
107
  if (db)
69
- ddl.push({ key: a.value, db });
108
+ ddl.push({ key: a.value, db, file: fileName });
70
109
  }));
71
110
  }
72
111
  // sql(…) calls: the callee is core's Sql or TransactionalSql
73
112
  const others = calls.filter((c) => !adds.includes(c));
74
- const callees = others.length ? await checker.getTypeAtLocation(others.map((c) => c.expression)) : [];
113
+ const callees = others.length
114
+ ? await checker.getTypeAtLocation(others.map((c) => c.expression))
115
+ : [];
75
116
  const hits = (await Promise.all(others.map((_, i) => isCoreRef(callees[i], ["Sql", "TransactionalSql"], isCorePath).then((ok) => (ok ? i : -1))))).filter((i) => i >= 0);
76
- const firstArgs = hits.length ? await checker.getTypeAtLocation(hits.map((i) => others[i].arguments[0])) : [];
117
+ const firstArgs = hits.length
118
+ ? await checker.getTypeAtLocation(hits.map((i) => others[i].arguments[0]))
119
+ : [];
77
120
  await Promise.all(hits.map(async (i, k) => {
78
121
  const [db, tm, keys] = await checker.getTypeArguments(callees[i]);
79
122
  if (!db || !tm || !keys)
@@ -83,12 +126,18 @@ export async function discover(program, checker, kinds, isCorePath, include) {
83
126
  if (!a.isStringLiteralType())
84
127
  return;
85
128
  const call = others[i];
86
- const slots = SLOT.test(a.value) && call.arguments.length > 1 ? await checker.getTypeAtLocation(call.arguments[1]) : null;
87
- sql.push({ key: a.value, db, tm, keys, slots });
129
+ const slots = SLOT.test(a.value) && call.arguments.length > 1
130
+ ? await checker.getTypeAtLocation(call.arguments[1])
131
+ : null;
132
+ sql.push({ key: a.value, db, tm, keys, slots, file: fileName });
88
133
  }));
89
134
  for (const key of loose)
90
135
  for (const db of fileDbs.values())
91
- (LOOKS_LIKE_DDL.test(key) ? ddl : types).push({ key, db });
136
+ (LOOKS_LIKE_DDL.test(key) ? ddl : types).push({
137
+ key,
138
+ db,
139
+ file: fileName,
140
+ });
92
141
  }
93
142
  return { sql, types, ddl };
94
143
  }
@@ -115,11 +164,16 @@ function wrappedCoreAlias(sym, program, checker, kinds, isCorePath, memo) {
115
164
  const dbArg = ref.typeArguments?.[0];
116
165
  if (!qArg || !dbArg || qArg.kind !== kinds.TypeReference)
117
166
  return null;
118
- const qName = qArg.typeName.text;
167
+ const qName = qArg.typeName
168
+ .text;
119
169
  const param = decl.typeParameters?.findIndex((tp) => tp.name.text === qName) ?? -1;
120
170
  if (param < 0)
121
171
  return null;
122
- return { param, db: await checker.getTypeFromTypeNode(dbArg), ddl: target.name in DDL_ALIASES };
172
+ return {
173
+ param,
174
+ db: await checker.getTypeFromTypeNode(dbArg),
175
+ ddl: target.name in DDL_ALIASES,
176
+ };
123
177
  })();
124
178
  memo.set(sym.id, found);
125
179
  }
@@ -135,9 +189,11 @@ function nodesIn(sf, kinds) {
135
189
  const calls = [];
136
190
  const refs = [];
137
191
  const walk = (n) => {
138
- if (n.kind === kinds.CallExpression && n.arguments.length > 0)
192
+ if (n.kind === kinds.CallExpression &&
193
+ n.arguments.length > 0)
139
194
  calls.push(n);
140
- else if (n.kind === kinds.TypeReference && n.typeArguments?.some((a) => literalOf(a, kinds) !== null))
195
+ else if (n.kind === kinds.TypeReference &&
196
+ n.typeArguments?.some((a) => literalOf(a, kinds) !== null))
141
197
  refs.push(n);
142
198
  n.forEachChild(walk);
143
199
  };
@@ -149,6 +205,8 @@ export async function isCoreRef(type, names, isCorePath) {
149
205
  if (!type.isTypeReference())
150
206
  return false;
151
207
  const sym = await type.getSymbol();
152
- return !!sym && names.includes(sym.name) && sym.declarations.some((d) => isCorePath(d.path));
208
+ return (!!sym &&
209
+ names.includes(sym.name) &&
210
+ sym.declarations.some((d) => isCorePath(d.path)));
153
211
  }
154
212
  //# sourceMappingURL=discover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sources":["../../src/cache/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sources":["../../src/cache/discover.ts"],"names":[],"mappings":"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"}