@syncular/typegen 0.5.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.
- package/README.md +75 -33
- package/dist/cli.js +43 -17
- package/dist/emit-queries-dart.js +167 -55
- package/dist/emit-queries-kotlin.js +166 -55
- package/dist/emit-queries-swift.js +182 -57
- package/dist/emit-queries.js +289 -123
- package/dist/fmt.d.ts +2 -2
- package/dist/fmt.js +323 -316
- package/dist/generate.d.ts +1 -1
- package/dist/generate.js +28 -9
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/lsp.d.ts +1 -3
- package/dist/lsp.js +359 -185
- package/dist/manifest.d.ts +1 -3
- package/dist/manifest.js +1 -1
- package/dist/query-ir.js +53 -42
- package/dist/query.d.ts +115 -63
- package/dist/query.js +60 -11
- package/dist/syql-lexer.d.ts +2 -0
- package/dist/syql-lexer.js +9 -2
- package/dist/syql-lowering.d.ts +22 -0
- package/dist/syql-lowering.js +411 -0
- package/dist/syql-semantics.d.ts +76 -0
- package/dist/syql-semantics.js +551 -0
- package/dist/syql-validator.d.ts +35 -0
- package/dist/syql-validator.js +966 -0
- package/package.json +3 -3
- package/src/cli.ts +51 -21
- package/src/emit-queries-dart.ts +195 -69
- package/src/emit-queries-kotlin.ts +197 -69
- package/src/emit-queries-swift.ts +224 -68
- package/src/emit-queries.ts +413 -165
- package/src/fmt.ts +377 -303
- package/src/generate.ts +43 -9
- package/src/index.ts +3 -1
- package/src/lsp.ts +425 -215
- package/src/manifest.ts +2 -4
- package/src/query-ir.ts +52 -42
- package/src/query.ts +199 -79
- package/src/syql-lexer.ts +12 -1
- package/src/syql-lowering.ts +638 -0
- package/src/syql-semantics.ts +859 -0
- package/src/syql-validator.ts +1492 -0
- package/dist/syql.d.ts +0 -102
- package/dist/syql.js +0 -1141
- package/src/syql.ts +0 -1470
package/dist/generate.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare function makeQueryDb(ir: IrDocument): {
|
|
|
37
37
|
close: () => void;
|
|
38
38
|
};
|
|
39
39
|
/** Analyze every query file against the IR (SELECT-only, typed, deps). */
|
|
40
|
-
export declare function analyzeQueries(ir: IrDocument, queries: readonly QueryInput[], naming?: QueryNamingOptions): AnalyzedQuery[];
|
|
40
|
+
export declare function analyzeQueries(ir: IrDocument, queries: readonly QueryInput[], naming?: QueryNamingOptions, queriesRoot?: string): AnalyzedQuery[];
|
|
41
41
|
/** One generated artifact: an absolute output path and its exact bytes. */
|
|
42
42
|
export interface GeneratedOutput {
|
|
43
43
|
readonly path: string;
|
package/dist/generate.js
CHANGED
|
@@ -20,7 +20,10 @@ import { buildNamingMap } from './naming.js';
|
|
|
20
20
|
import { analyzeQueryFile, synthesizeDdl, } from './query.js';
|
|
21
21
|
import { serializeQueryIr } from './query-ir.js';
|
|
22
22
|
import { applyMigrationSql } from './sql.js';
|
|
23
|
-
import {
|
|
23
|
+
import { lowerSyqlQuery } from './syql-lowering.js';
|
|
24
|
+
import { buildSyqlModuleGraph } from './syql-modules.js';
|
|
25
|
+
import { analyzeSyqlSemantics } from './syql-semantics.js';
|
|
26
|
+
import { validateSyqlProgram } from './syql-validator.js';
|
|
24
27
|
/** Same grammar the server compiles (§3.1): `prefix:{variable}`. */
|
|
25
28
|
const PATTERN_RE = /^([^{}]+):\{([^{}:]+)\}$/;
|
|
26
29
|
/** Whole-value placeholder: `{paramName}`. */
|
|
@@ -266,17 +269,33 @@ export function makeQueryDb(ir) {
|
|
|
266
269
|
return { db, close: () => sqlite.close() };
|
|
267
270
|
}
|
|
268
271
|
/** Analyze every query file against the IR (SELECT-only, typed, deps). */
|
|
269
|
-
export function analyzeQueries(ir, queries, naming) {
|
|
272
|
+
export function analyzeQueries(ir, queries, naming, queriesRoot = resolve('/__syncular_queries__')) {
|
|
270
273
|
if (queries.length === 0)
|
|
271
274
|
return [];
|
|
272
275
|
const { db, close } = makeQueryDb(ir);
|
|
273
276
|
try {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
277
|
+
const plain = queries
|
|
278
|
+
.filter((query) => query.file.endsWith('.sql'))
|
|
279
|
+
.flatMap((query) => analyzeQueryFile(query.file, query.sql, ir, db, naming));
|
|
280
|
+
const syqlInputs = queries.filter((query) => query.file.endsWith('.syql'));
|
|
281
|
+
let syql = [];
|
|
282
|
+
if (syqlInputs.length > 0) {
|
|
283
|
+
const root = resolve(queriesRoot);
|
|
284
|
+
const sourceByFile = new Map(syqlInputs.map((query) => [resolve(root, query.file), query.sql]));
|
|
285
|
+
const displayByFile = new Map(syqlInputs.map((query) => [resolve(root, query.file), query.file]));
|
|
286
|
+
const graph = buildSyqlModuleGraph(root, syqlInputs.map((query) => query.file), (file) => sourceByFile.get(file));
|
|
287
|
+
const validated = validateSyqlProgram(analyzeSyqlSemantics(graph), ir, db, naming);
|
|
288
|
+
syql = validated.queries
|
|
289
|
+
.map((query) => {
|
|
290
|
+
const lowered = lowerSyqlQuery(query, ir, db, naming).analysis;
|
|
291
|
+
return {
|
|
292
|
+
...lowered,
|
|
293
|
+
file: displayByFile.get(query.logical.module.file) ?? lowered.file,
|
|
294
|
+
};
|
|
295
|
+
})
|
|
296
|
+
.sort((left, right) => left.file.localeCompare(right.file));
|
|
297
|
+
}
|
|
298
|
+
const analyzed = [...plain, ...syql];
|
|
280
299
|
// Names must be unique across the whole manifest — the filesystem no longer
|
|
281
300
|
// guarantees uniqueness once `-- name:` overrides exist. Report BOTH source
|
|
282
301
|
// locations (file + statement position) on a collision.
|
|
@@ -348,7 +367,7 @@ export function generate(manifestDir) {
|
|
|
348
367
|
kotlin?.queriesPath !== undefined ||
|
|
349
368
|
dart?.queriesPath !== undefined;
|
|
350
369
|
const analyzedQueries = wantsQueries
|
|
351
|
-
? analyzeQueries(ir, loadQueries(resolve(manifestDir, manifest.queries)), naming)
|
|
370
|
+
? analyzeQueries(ir, loadQueries(resolve(manifestDir, manifest.queries)), naming, resolve(manifestDir, manifest.queries))
|
|
352
371
|
: [];
|
|
353
372
|
if (wantsQueries && analyzedQueries.length === 0) {
|
|
354
373
|
throw new TypegenError(resolve(manifestDir, manifest.queries), `an output requests named queries but no .sql files were found in ${manifest.queries} — add a query file or drop the queries output`);
|
package/dist/index.d.ts
CHANGED
|
@@ -22,9 +22,11 @@ export * from './naming.js';
|
|
|
22
22
|
export * from './query.js';
|
|
23
23
|
export * from './query-ir.js';
|
|
24
24
|
export * from './sql.js';
|
|
25
|
-
export * from './syql.js';
|
|
26
25
|
export * from './syql-ast.js';
|
|
27
26
|
export * from './syql-lexer.js';
|
|
27
|
+
export * from './syql-lowering.js';
|
|
28
28
|
export * from './syql-modules.js';
|
|
29
29
|
export * from './syql-parser.js';
|
|
30
|
+
export * from './syql-semantics.js';
|
|
30
31
|
export * from './syql-template-parser.js';
|
|
32
|
+
export * from './syql-validator.js';
|
package/dist/index.js
CHANGED
|
@@ -22,9 +22,11 @@ export * from './naming.js';
|
|
|
22
22
|
export * from './query.js';
|
|
23
23
|
export * from './query-ir.js';
|
|
24
24
|
export * from './sql.js';
|
|
25
|
-
export * from './syql.js';
|
|
26
25
|
export * from './syql-ast.js';
|
|
27
26
|
export * from './syql-lexer.js';
|
|
27
|
+
export * from './syql-lowering.js';
|
|
28
28
|
export * from './syql-modules.js';
|
|
29
29
|
export * from './syql-parser.js';
|
|
30
|
+
export * from './syql-semantics.js';
|
|
30
31
|
export * from './syql-template-parser.js';
|
|
32
|
+
export * from './syql-validator.js';
|
package/dist/lsp.d.ts
CHANGED
|
@@ -11,10 +11,8 @@ export interface RpcMessage {
|
|
|
11
11
|
}
|
|
12
12
|
export declare class SyqlLanguageServer {
|
|
13
13
|
#private;
|
|
14
|
-
/** Handle one incoming message; returns the outgoing messages. */
|
|
15
14
|
handle(message: RpcMessage): RpcMessage[];
|
|
16
|
-
/** Reset cached manifest contexts (e.g. after schema edits). */
|
|
17
15
|
invalidateProjects(): void;
|
|
18
16
|
}
|
|
19
|
-
/** Run the
|
|
17
|
+
/** Run the LSP over Content-Length-framed JSON-RPC stdio. */
|
|
20
18
|
export declare function runLspStdio(): Promise<void>;
|