@typed-sql/core 1.0.0-beta.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # @typed-sql/core
2
+
3
+ ## 1.0.0-beta.0
4
+
5
+ ### Major Changes
6
+
7
+ - Release the first public typed-sql beta: exact TypeScript 7 row inference from static PostgreSQL and
8
+ MySQL, versioned schema introspection, application-owned drivers, config-driven grammar plugins,
9
+ CLI verification, editor language-server integration, versioned diagnostics, bounded parsing, and
10
+ real-database plus packed-tarball verification.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 typed-sql contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # @typed-sql/core
2
+
3
+ The driver- and dialect-neutral foundation of [typed-sql](https://github.com/Lojhan/typed-sql).
4
+ It owns the `sql` tagged template, `Query<Row>`, safe query fragments, rendering contract, database
5
+ adapter contract, diagnostics, and the interface implemented by every SQL grammar.
6
+
7
+ Most applications install it alongside one dialect:
8
+
9
+ ```sh
10
+ pnpm add @typed-sql/core@next @typed-sql/postgres@next pg
11
+ ```
12
+
13
+ Application queries import `sql` from the dialect root so tooling can associate the query with the
14
+ correct grammar:
15
+
16
+ ```ts
17
+ import { sql } from "@typed-sql/postgres";
18
+
19
+ const query = sql`
20
+ SELECT account.id, account.email
21
+ FROM accounts AS account
22
+ WHERE account.id = ${42n}
23
+ `;
24
+ ```
25
+
26
+ `@typed-sql/core` is directly useful to grammar and adapter authors:
27
+
28
+ ```ts
29
+ import {
30
+ DIALECT_CONTRACT_VERSION,
31
+ createDatabase,
32
+ defineConfig,
33
+ renderQuery,
34
+ rowTypeLiteral,
35
+ sql,
36
+ type DialectPlugin,
37
+ type Query,
38
+ type SchemaSnapshot,
39
+ } from "@typed-sql/core";
40
+ ```
41
+
42
+ The package has no database, parser, grammar, driver, TypeScript compiler, or editor dependency.
43
+ See the [architecture contract](https://github.com/Lojhan/typed-sql/blob/main/docs/ARCHITECTURE.md)
44
+ and [root documentation](https://github.com/Lojhan/typed-sql#readme).
45
+
46
+ MIT © typed-sql contributors
@@ -0,0 +1,105 @@
1
+ export declare const diagnosticRegistry: Readonly<{
2
+ readonly TSQ001: {
3
+ readonly category: "syntax";
4
+ readonly summary: "SQL syntax could not be parsed.";
5
+ };
6
+ readonly TSQ002: {
7
+ readonly category: "resource";
8
+ readonly summary: "SQL exceeded a parser resource limit.";
9
+ };
10
+ readonly TSQ007: {
11
+ readonly category: "contract";
12
+ readonly summary: "The schema snapshot and dialect do not match.";
13
+ };
14
+ readonly TSQ100: {
15
+ readonly category: "schema";
16
+ readonly summary: "A referenced table does not exist.";
17
+ };
18
+ readonly TSQ101: {
19
+ readonly category: "schema";
20
+ readonly summary: "A referenced column does not exist.";
21
+ };
22
+ readonly TSQ102: {
23
+ readonly category: "schema";
24
+ readonly summary: "A column reference is ambiguous.";
25
+ };
26
+ readonly TSQ103: {
27
+ readonly category: "schema";
28
+ readonly summary: "A relation alias or qualified column is unknown.";
29
+ };
30
+ readonly TSQ104: {
31
+ readonly category: "result";
32
+ readonly summary: "A result expression needs an explicit output name.";
33
+ };
34
+ readonly TSQ105: {
35
+ readonly category: "result";
36
+ readonly summary: "Two result columns produce the same property name.";
37
+ };
38
+ readonly TSQ106: {
39
+ readonly category: "type";
40
+ readonly summary: "A cast target is invalid or unknown.";
41
+ };
42
+ readonly TSQ107: {
43
+ readonly category: "schema";
44
+ readonly summary: "An unqualified table name is ambiguous.";
45
+ };
46
+ readonly TSQ108: {
47
+ readonly category: "schema";
48
+ readonly summary: "A relation alias is duplicated.";
49
+ };
50
+ readonly TSQ202: {
51
+ readonly category: "type";
52
+ readonly summary: "A function is unknown.";
53
+ };
54
+ readonly TSQ203: {
55
+ readonly category: "type";
56
+ readonly summary: "An operator cannot be inferred safely.";
57
+ };
58
+ readonly TSQ204: {
59
+ readonly category: "type";
60
+ readonly summary: "A function overload is ambiguous.";
61
+ };
62
+ readonly TSQ210: {
63
+ readonly category: "support";
64
+ readonly summary: "Recursive CTE inference is not supported safely.";
65
+ };
66
+ readonly TSQ211: {
67
+ readonly category: "schema";
68
+ readonly summary: "A CTE name is duplicated.";
69
+ };
70
+ readonly TSQ212: {
71
+ readonly category: "result";
72
+ readonly summary: "A CTE does not return rows.";
73
+ };
74
+ readonly TSQ213: {
75
+ readonly category: "result";
76
+ readonly summary: "A CTE column list has the wrong arity.";
77
+ };
78
+ readonly TSQ214: {
79
+ readonly category: "result";
80
+ readonly summary: "INSERT source and target arities differ.";
81
+ };
82
+ readonly TSQ215: {
83
+ readonly category: "schema";
84
+ readonly summary: "A JOIN USING column is not unique on both sides.";
85
+ };
86
+ readonly TSQ216: {
87
+ readonly category: "result";
88
+ readonly summary: "A scalar subquery does not return exactly one column.";
89
+ };
90
+ readonly TSQ217: {
91
+ readonly category: "result";
92
+ readonly summary: "An IN subquery does not return exactly one column.";
93
+ };
94
+ readonly TSQ301: {
95
+ readonly category: "drift";
96
+ readonly summary: "The live schema or type policy differs from the generated snapshot.";
97
+ };
98
+ readonly TSQ401: {
99
+ readonly category: "support";
100
+ readonly summary: "The dialect surface is intentionally unsupported.";
101
+ };
102
+ }>;
103
+ export type TypedSqlDiagnosticCode = keyof typeof diagnosticRegistry;
104
+ export declare function isTypedSqlDiagnosticCode(value: string): value is TypedSqlDiagnosticCode;
105
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;iBACnB,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,iCAAiC;;;iBAC9D,QAAQ,EAAE,UAAU;iBAAE,OAAO,EAAE,uCAAuC;;;iBACtE,QAAQ,EAAE,UAAU;iBAAE,OAAO,EAAE,+CAA+C;;;iBAC9E,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,oCAAoC;;;iBACjE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,qCAAqC;;;iBAClE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,kCAAkC;;;iBAC/D,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,kDAAkD;;;iBAC/E,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,oDAAoD;;;iBACjF,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,oDAAoD;;;iBACjF,QAAQ,EAAE,MAAM;iBAAE,OAAO,EAAE,sCAAsC;;;iBACjE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,yCAAyC;;;iBACtE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,iCAAiC;;;iBAC9D,QAAQ,EAAE,MAAM;iBAAE,OAAO,EAAE,wBAAwB;;;iBACnD,QAAQ,EAAE,MAAM;iBAAE,OAAO,EAAE,wCAAwC;;;iBACnE,QAAQ,EAAE,MAAM;iBAAE,OAAO,EAAE,mCAAmC;;;iBAC9D,QAAQ,EAAE,SAAS;iBAAE,OAAO,EAAE,kDAAkD;;;iBAChF,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,2BAA2B;;;iBACxD,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,6BAA6B;;;iBAC1D,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,wCAAwC;;;iBACrE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,0CAA0C;;;iBACvE,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,kDAAkD;;;iBAC/E,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,uDAAuD;;;iBACpF,QAAQ,EAAE,QAAQ;iBAAE,OAAO,EAAE,oDAAoD;;;iBACjF,QAAQ,EAAE,OAAO;iBAAE,OAAO,EAAE,qEAAqE;;;iBACjG,QAAQ,EAAE,SAAS;iBAAE,OAAO,EAAE,mDAAmD;;EAClF,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,kBAAkB,CAAC;AAErE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,sBAAsB,CAEvF"}
@@ -0,0 +1,31 @@
1
+ export const diagnosticRegistry = Object.freeze({
2
+ TSQ001: { category: "syntax", summary: "SQL syntax could not be parsed." },
3
+ TSQ002: { category: "resource", summary: "SQL exceeded a parser resource limit." },
4
+ TSQ007: { category: "contract", summary: "The schema snapshot and dialect do not match." },
5
+ TSQ100: { category: "schema", summary: "A referenced table does not exist." },
6
+ TSQ101: { category: "schema", summary: "A referenced column does not exist." },
7
+ TSQ102: { category: "schema", summary: "A column reference is ambiguous." },
8
+ TSQ103: { category: "schema", summary: "A relation alias or qualified column is unknown." },
9
+ TSQ104: { category: "result", summary: "A result expression needs an explicit output name." },
10
+ TSQ105: { category: "result", summary: "Two result columns produce the same property name." },
11
+ TSQ106: { category: "type", summary: "A cast target is invalid or unknown." },
12
+ TSQ107: { category: "schema", summary: "An unqualified table name is ambiguous." },
13
+ TSQ108: { category: "schema", summary: "A relation alias is duplicated." },
14
+ TSQ202: { category: "type", summary: "A function is unknown." },
15
+ TSQ203: { category: "type", summary: "An operator cannot be inferred safely." },
16
+ TSQ204: { category: "type", summary: "A function overload is ambiguous." },
17
+ TSQ210: { category: "support", summary: "Recursive CTE inference is not supported safely." },
18
+ TSQ211: { category: "schema", summary: "A CTE name is duplicated." },
19
+ TSQ212: { category: "result", summary: "A CTE does not return rows." },
20
+ TSQ213: { category: "result", summary: "A CTE column list has the wrong arity." },
21
+ TSQ214: { category: "result", summary: "INSERT source and target arities differ." },
22
+ TSQ215: { category: "schema", summary: "A JOIN USING column is not unique on both sides." },
23
+ TSQ216: { category: "result", summary: "A scalar subquery does not return exactly one column." },
24
+ TSQ217: { category: "result", summary: "An IN subquery does not return exactly one column." },
25
+ TSQ301: { category: "drift", summary: "The live schema or type policy differs from the generated snapshot." },
26
+ TSQ401: { category: "support", summary: "The dialect surface is intentionally unsupported." },
27
+ });
28
+ export function isTypedSqlDiagnosticCode(value) {
29
+ return Object.hasOwn(diagnosticRegistry, value);
30
+ }
31
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../../src/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC1E,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAClF,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,+CAA+C,EAAE;IAC1F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oCAAoC,EAAE;IAC7E,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,qCAAqC,EAAE;IAC9E,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kCAAkC,EAAE;IAC3E,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kDAAkD,EAAE;IAC3F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oDAAoD,EAAE;IAC7F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oDAAoD,EAAE;IAC7F,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,sCAAsC,EAAE;IAC7E,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,yCAAyC,EAAE;IAClF,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC1E,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,EAAE;IAC/D,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,wCAAwC,EAAE;IAC/E,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE;IAC1E,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,kDAAkD,EAAE;IAC5F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,EAAE;IACpE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACtE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,wCAAwC,EAAE;IACjF,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,0CAA0C,EAAE;IACnF,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kDAAkD,EAAE;IAC3F,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,uDAAuD,EAAE;IAChG,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,oDAAoD,EAAE;IAC7F,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,qEAAqE,EAAE;IAC7G,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE;CACrF,CAAC,CAAC;AAIZ,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { createDatabase, renderQuery, sql } from "./query.js";
2
+ export { diagnosticRegistry, isTypedSqlDiagnosticCode } from "./diagnostics.js";
3
+ export type { TypedSqlDiagnosticCode } from "./diagnostics.js";
4
+ export { defineConfig, DIALECT_CONTRACT_VERSION, rowTypeLiteral } from "./types.js";
5
+ export type * from "./query.js";
6
+ export type * from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACpF,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createDatabase, renderQuery, sql } from "./query.js";
2
+ export { diagnosticRegistry, isTypedSqlDiagnosticCode } from "./diagnostics.js";
3
+ export { defineConfig, DIALECT_CONTRACT_VERSION, rowTypeLiteral } from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,49 @@
1
+ declare const fragmentBrand: unique symbol;
2
+ declare const queryBrand: unique symbol;
3
+ export type SqlSegment = {
4
+ readonly kind: "text";
5
+ readonly text: string;
6
+ } | {
7
+ readonly kind: "value";
8
+ readonly value: unknown;
9
+ } | {
10
+ readonly kind: "identifier";
11
+ readonly name: string;
12
+ };
13
+ export interface SqlFragment {
14
+ readonly [fragmentBrand]: true;
15
+ readonly segments: readonly SqlSegment[];
16
+ }
17
+ export interface Query<Row> {
18
+ readonly [queryBrand]: (value: Row) => Row;
19
+ readonly segments: readonly SqlSegment[];
20
+ }
21
+ export interface SqlTag {
22
+ <Row = unknown>(strings: TemplateStringsArray, ...parts: readonly unknown[]): Query<Row>;
23
+ readonly ident: (name: string) => SqlFragment;
24
+ readonly value: (value: unknown) => SqlFragment;
25
+ readonly join: (parts: readonly SqlFragment[], separator?: string) => SqlFragment;
26
+ readonly raw: (text: string) => SqlFragment;
27
+ readonly dynamic: (text: string) => Query<unknown>;
28
+ }
29
+ export interface SqlRenderer {
30
+ placeholder(index: number): string;
31
+ quoteIdentifier(name: string): string;
32
+ }
33
+ export interface RenderedQuery {
34
+ readonly text: string;
35
+ readonly values: readonly unknown[];
36
+ }
37
+ export interface QueryExecutor {
38
+ execute(text: string, values: readonly unknown[]): Promise<readonly unknown[]>;
39
+ }
40
+ export interface Database {
41
+ execute<Row>(query: Query<Row>): Promise<readonly Row[]>;
42
+ transaction<T>(fn: (db: Database) => Promise<T>): Promise<T>;
43
+ }
44
+ export type TransactionRunner = <T>(fn: (executor: QueryExecutor) => Promise<T>) => Promise<T>;
45
+ export declare const sql: SqlTag;
46
+ export declare function renderQuery<Row>(queryValue: Query<Row>, renderer: SqlRenderer): RenderedQuery;
47
+ export declare function createDatabase(executor: QueryExecutor, renderer: SqlRenderer, transactionRunner?: TransactionRunner): Database;
48
+ export {};
49
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ const fragmentBrand = Symbol("typed-sql.fragment");
2
+ const queryBrand = Symbol("typed-sql.query");
3
+ const text = (textValue) => ({ kind: "text", text: textValue });
4
+ const value = (valueItem) => ({ kind: "value", value: valueItem });
5
+ function fragment(segments) {
6
+ return Object.freeze({ [fragmentBrand]: true, segments: Object.freeze([...segments]) });
7
+ }
8
+ function isFragment(part) {
9
+ return typeof part === "object" && part !== null && fragmentBrand in part;
10
+ }
11
+ function query(segments) {
12
+ return Object.freeze({ [queryBrand]: (row) => row, segments: Object.freeze([...segments]) });
13
+ }
14
+ const tag = (strings, ...parts) => {
15
+ const segments = [];
16
+ for (let index = 0; index < strings.length; index += 1) {
17
+ segments.push(text(strings[index] ?? ""));
18
+ if (index < parts.length) {
19
+ const part = parts[index];
20
+ if (isFragment(part))
21
+ segments.push(...part.segments);
22
+ else
23
+ segments.push(value(part));
24
+ }
25
+ }
26
+ return query(segments);
27
+ };
28
+ export const sql = Object.assign(tag, {
29
+ ident(name) {
30
+ if (name.length === 0 || name.includes("\0"))
31
+ throw new TypeError("SQL identifiers must be non-empty and cannot contain NUL");
32
+ return fragment([{ kind: "identifier", name }]);
33
+ },
34
+ value(valueItem) { return fragment([value(valueItem)]); },
35
+ join(parts, separator = ", ") {
36
+ const segments = [];
37
+ parts.forEach((part, index) => {
38
+ if (index > 0)
39
+ segments.push(text(separator));
40
+ segments.push(...part.segments);
41
+ });
42
+ return fragment(segments);
43
+ },
44
+ raw(sqlText) { return fragment([text(sqlText)]); },
45
+ dynamic(sqlText) { return query([text(sqlText)]); },
46
+ });
47
+ export function renderQuery(queryValue, renderer) {
48
+ const values = [];
49
+ let queryText = "";
50
+ for (const segment of queryValue.segments) {
51
+ if (segment.kind === "text")
52
+ queryText += segment.text;
53
+ else if (segment.kind === "identifier")
54
+ queryText += renderer.quoteIdentifier(segment.name);
55
+ else {
56
+ values.push(segment.value);
57
+ queryText += renderer.placeholder(values.length);
58
+ }
59
+ }
60
+ return { text: queryText, values: Object.freeze(values) };
61
+ }
62
+ class DatabaseImplementation {
63
+ #executor;
64
+ #renderer;
65
+ #transactionRunner;
66
+ constructor(executor, renderer, transactionRunner) {
67
+ this.#executor = executor;
68
+ this.#renderer = renderer;
69
+ this.#transactionRunner = transactionRunner;
70
+ }
71
+ async execute(queryValue) {
72
+ const rendered = renderQuery(queryValue, this.#renderer);
73
+ return await this.#executor.execute(rendered.text, rendered.values);
74
+ }
75
+ async transaction(fn) {
76
+ if (this.#transactionRunner === undefined)
77
+ throw new Error("This database adapter does not support transactions");
78
+ return this.#transactionRunner(async (executor) => fn(new DatabaseImplementation(executor, this.#renderer, this.#transactionRunner)));
79
+ }
80
+ }
81
+ export function createDatabase(executor, renderer, transactionRunner) {
82
+ return new DatabaseImplementation(executor, renderer, transactionRunner);
83
+ }
84
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../src/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ export declare const DIALECT_CONTRACT_VERSION: 1;
2
+ export interface SourceRange {
3
+ readonly start: number;
4
+ readonly end: number;
5
+ readonly line: number;
6
+ readonly column: number;
7
+ }
8
+ export interface SqlDiagnostic {
9
+ readonly code: string;
10
+ readonly message: string;
11
+ readonly range: SourceRange;
12
+ readonly severity: "error" | "warning" | "info";
13
+ readonly suggestion?: string;
14
+ }
15
+ export interface ColumnSnapshot {
16
+ readonly name: string;
17
+ readonly databaseType: string;
18
+ readonly tsType: string;
19
+ readonly nullable: boolean;
20
+ readonly array?: boolean;
21
+ readonly defaultExpression?: string;
22
+ }
23
+ export interface TableSnapshot {
24
+ readonly schema?: string;
25
+ readonly name: string;
26
+ readonly columns: Readonly<Record<string, ColumnSnapshot>>;
27
+ }
28
+ export interface DomainSnapshot {
29
+ readonly name: string;
30
+ readonly databaseType: string;
31
+ readonly tsType: string;
32
+ readonly nullable: boolean;
33
+ }
34
+ export interface FunctionSnapshot {
35
+ readonly name: string;
36
+ readonly schema?: string;
37
+ readonly argumentTypes: readonly string[];
38
+ readonly databaseReturnType?: string;
39
+ readonly returnType: string;
40
+ readonly nullable: boolean;
41
+ readonly setReturning?: boolean;
42
+ }
43
+ export interface SchemaSnapshot {
44
+ readonly formatVersion: 1;
45
+ readonly dialect: string;
46
+ readonly dialectVersion?: string;
47
+ readonly version?: string;
48
+ readonly tables: Readonly<Record<string, TableSnapshot>>;
49
+ readonly enums?: Readonly<Record<string, readonly string[]>>;
50
+ readonly domains?: Readonly<Record<string, DomainSnapshot>>;
51
+ readonly functions?: Readonly<Record<string, FunctionSnapshot>>;
52
+ }
53
+ export interface GeneratedSchemaMetadata {
54
+ readonly generatorVersion: string;
55
+ readonly schemaHash: string;
56
+ readonly typePolicyHash: string;
57
+ }
58
+ export interface GeneratedSchemaSnapshot extends SchemaSnapshot {
59
+ readonly metadata: GeneratedSchemaMetadata;
60
+ }
61
+ export interface ResolvedColumn {
62
+ readonly name: string;
63
+ readonly tsType: string;
64
+ readonly nullable: boolean;
65
+ readonly databaseType?: string;
66
+ readonly range: SourceRange;
67
+ }
68
+ export interface DialectAnalysis {
69
+ readonly columns: readonly ResolvedColumn[];
70
+ readonly diagnostics: readonly SqlDiagnostic[];
71
+ readonly resultKind?: "rows" | "command";
72
+ }
73
+ export interface DialectPlugin<Snapshot extends SchemaSnapshot = SchemaSnapshot, Policy = unknown> {
74
+ readonly contractVersion: typeof DIALECT_CONTRACT_VERSION;
75
+ readonly id: string;
76
+ /** Version of the grammar/snapshot semantics, independent of the npm artifact version. */
77
+ readonly grammarVersion: string;
78
+ /** Exact package entrypoint from which applications import the dialect's `sql` tag. */
79
+ readonly sqlModule: string;
80
+ readonly defaultTypePolicy: Policy;
81
+ placeholder(index: number): string;
82
+ analyze(sql: string, snapshot: Snapshot, policy?: Policy): DialectAnalysis;
83
+ validateSnapshot(value: unknown): Snapshot;
84
+ }
85
+ export interface SchemaProvider<Snapshot extends SchemaSnapshot = SchemaSnapshot> {
86
+ introspect(): Promise<Snapshot>;
87
+ }
88
+ export interface TypedSqlConfig<Snapshot extends SchemaSnapshot = SchemaSnapshot, Policy = unknown> {
89
+ readonly dialect: DialectPlugin<Snapshot, Policy>;
90
+ readonly schema: {
91
+ readonly file: string;
92
+ readonly provider?: SchemaProvider<Snapshot>;
93
+ };
94
+ readonly outDir: string;
95
+ readonly projects?: readonly string[];
96
+ readonly typePolicy?: Policy;
97
+ }
98
+ export declare function defineConfig<Snapshot extends SchemaSnapshot, Policy>(config: TypedSqlConfig<Snapshot, Policy>): TypedSqlConfig<Snapshot, Policy>;
99
+ export declare function rowTypeLiteral(columns: readonly ResolvedColumn[]): string;
100
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export const DIALECT_CONTRACT_VERSION = 1;
2
+ export function defineConfig(config) {
3
+ if (config.dialect.contractVersion !== DIALECT_CONTRACT_VERSION) {
4
+ throw new TypeError(`Unsupported typed-sql dialect contract ${config.dialect.contractVersion}`);
5
+ }
6
+ return Object.freeze(config);
7
+ }
8
+ export function rowTypeLiteral(columns) {
9
+ const properties = columns.map((column) => `${JSON.stringify(column.name)}: ${column.tsType}${column.nullable ? " | null" : ""};`);
10
+ return `{ ${properties.join(" ")} }`;
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AAgHnD,MAAM,UAAU,YAAY,CAC1B,MAAwC;IAExC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,KAAK,wBAAwB,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,0CAA0C,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAkC;IAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnI,OAAO,KAAK,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACvC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@typed-sql/core",
3
+ "version": "1.0.0-beta.0",
4
+ "description": "Driver- and dialect-neutral typed SQL query contracts.",
5
+ "license": "MIT",
6
+ "author": "Lojhan",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Lojhan/typed-sql.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "homepage": "https://github.com/Lojhan/typed-sql#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/Lojhan/typed-sql/issues"
15
+ },
16
+ "engines": {
17
+ "node": ">=22.11"
18
+ },
19
+ "files": [
20
+ "dist/**/*.js",
21
+ "dist/**/*.d.ts",
22
+ "dist/**/*.map",
23
+ "README.md",
24
+ "LICENSE",
25
+ "CHANGELOG.md"
26
+ ],
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "sideEffects": false,
31
+ "type": "module",
32
+ "exports": {
33
+ ".": "./dist/packages/core/src/index.js"
34
+ },
35
+ "scripts": {
36
+ "test": "poku test --reporter=compact --enforce",
37
+ "coverage": "poku test --coverage=@pokujs/c8 --coverageConfig=.c8rc.json --reporter=compact --enforce"
38
+ }
39
+ }