Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@gqlite/gql2sql

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@gqlite/gql2sql - npm Package Compare versions

Comparing version
0.1.4
to
1.0.0
+98
dist/persisted-query.d.ts
import type { Schema } from "./types.js";
export type PersistedPlanKind = "single-sql" | "multi-step";
export interface PersistedOperationInput {
graphql: string;
operationName?: string;
paramNames?: string[];
}
export interface PersistedRegistryEntry {
id: number;
operationName: string;
graphql: string;
firstSeenAt: string;
}
export interface PersistedOperationRegistry {
version: 1;
nextId: number;
operations: Record<string, PersistedRegistryEntry>;
}
export interface PersistedOperationAssignment {
id: number;
hash: string;
operationName: string;
canonicalGraphql: string;
paramNames: string[];
}
export interface PersistedOperationAssignmentResult {
registry: PersistedOperationRegistry;
assignments: PersistedOperationAssignment[];
}
export interface SingleSqlPersistedOperation {
hash: string;
operationName: string;
kind: "single-sql";
sql: string;
params: string[];
}
export interface MultiStepPersistedOperationStep {
name: string;
sql: string;
params: string[];
}
export interface MultiStepPersistedOperation {
hash: string;
operationName: string;
kind: "multi-step";
steps: MultiStepPersistedOperationStep[];
}
export type PersistedManifestOperation = SingleSqlPersistedOperation | MultiStepPersistedOperation;
export interface PersistedManifest {
version: 1;
schemaHash: string;
compilerVersion: string;
operations: Record<number, PersistedManifestOperation>;
}
export interface CompactSingleSqlPlan {
k: 1;
x: string;
s: string;
p?: string[];
}
export interface CompactMultiStepPlanStep {
n: string;
s: string;
p?: string[];
}
export interface CompactMultiStepPlan {
k: 2;
x: string;
t: CompactMultiStepPlanStep[];
}
export type CompactPersistedPlan = CompactSingleSqlPlan | CompactMultiStepPlan;
export interface CompactPersistedMap {
v: 1;
h: string;
c: string;
m: Record<number, CompactPersistedPlan>;
}
export interface CompilePersistedOptions {
now?: string;
schemaHash?: string;
compilerVersion?: string;
}
export interface PersistedCompileResult {
registry: PersistedOperationRegistry;
manifest: PersistedManifest;
compactMap: CompactPersistedMap;
assignments: PersistedOperationAssignment[];
}
export declare function createEmptyPersistedOperationRegistry(): PersistedOperationRegistry;
export declare function canonicalizeGraphQLQuery(query: string): string;
export declare function hashGraphQLQuery(query: string): string;
export declare function hashPersistedSchema(schema: Schema): string;
export declare function assignPersistedOperationIds(operations: PersistedOperationInput[], registry: PersistedOperationRegistry, options?: {
now?: string;
}): PersistedOperationAssignmentResult;
export declare function compilePersistedOperations(operations: PersistedOperationInput[], schema: Schema, registry?: PersistedOperationRegistry, options?: CompilePersistedOptions): PersistedCompileResult;
export declare function validatePersistedRegistry(registry: PersistedOperationRegistry): void;
//# sourceMappingURL=persisted-query.d.ts.map
{"version":3,"file":"persisted-query.d.ts","sourceRoot":"","sources":["../src/persisted-query.ts"],"names":[],"mappings":"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"}
import { createHash } from "node:crypto";
import { parse, print, } from "graphql";
import { GraphQLToSQLiteConverter } from "./gq2sql.js";
export function createEmptyPersistedOperationRegistry() {
return {
version: 1,
nextId: 1,
operations: {},
};
}
export function canonicalizeGraphQLQuery(query) {
return print(parse(query));
}
export function hashGraphQLQuery(query) {
const canonicalGraphql = canonicalizeGraphQLQuery(query);
return `sha256:${createHash("sha256").update(canonicalGraphql).digest("hex")}`;
}
export function hashPersistedSchema(schema) {
return `sha256:${createHash("sha256")
.update(JSON.stringify(sortObjectKeys(schema)))
.digest("hex")}`;
}
export function assignPersistedOperationIds(operations, registry, options = {}) {
const nextRegistry = {
version: 1,
nextId: registry.nextId || 1,
operations: { ...registry.operations },
};
const prepared = operations.map((operation) => {
const canonicalGraphql = canonicalizeGraphQLQuery(operation.graphql);
const hash = hashGraphQLQuery(canonicalGraphql);
const operationName = operation.operationName || extractOperationName(canonicalGraphql);
return {
canonicalGraphql,
hash,
operationName,
paramNames: operation.paramNames || [],
};
});
const newOperations = prepared
.filter((operation) => !nextRegistry.operations[operation.hash])
.sort((a, b) => {
const nameCompare = a.operationName.localeCompare(b.operationName);
return nameCompare || a.hash.localeCompare(b.hash);
});
let nextId = Math.max(nextRegistry.nextId, ...Object.values(nextRegistry.operations).map((entry) => entry.id + 1), 1);
const now = options.now || new Date().toISOString();
for (const operation of newOperations) {
nextRegistry.operations[operation.hash] = {
id: nextId,
operationName: operation.operationName,
graphql: operation.canonicalGraphql,
firstSeenAt: now,
};
nextId++;
}
nextRegistry.nextId = nextId;
validatePersistedRegistry(nextRegistry);
return {
registry: nextRegistry,
assignments: prepared.map((operation) => {
const entry = nextRegistry.operations[operation.hash];
if (!entry) {
throw new Error(`Persisted operation was not assigned: ${operation.hash}`);
}
return {
id: entry.id,
hash: operation.hash,
operationName: operation.operationName,
canonicalGraphql: operation.canonicalGraphql,
paramNames: operation.paramNames,
};
}),
};
}
export function compilePersistedOperations(operations, schema, registry = createEmptyPersistedOperationRegistry(), options = {}) {
const assignmentResult = assignPersistedOperationIds(operations, registry, {
now: options.now,
});
const converter = new GraphQLToSQLiteConverter(schema);
const schemaHash = options.schemaHash || hashPersistedSchema(schema);
const compilerVersion = options.compilerVersion || "@gqlite/gql2sql";
const manifest = {
version: 1,
schemaHash,
compilerVersion,
operations: {},
};
const compactMap = {
v: 1,
h: schemaHash,
c: compilerVersion,
m: {},
};
for (const assignment of assignmentResult.assignments) {
const rootFields = extractRootFields(assignment.canonicalGraphql);
if (rootFields.length <= 1) {
const { sql } = converter.convert(assignment.canonicalGraphql);
const operation = {
hash: assignment.hash,
operationName: assignment.operationName,
kind: "single-sql",
sql,
params: assignment.paramNames,
};
manifest.operations[assignment.id] = operation;
compactMap.m[assignment.id] = {
k: 1,
x: assignment.hash,
s: sql,
...(assignment.paramNames.length > 0
? { p: assignment.paramNames }
: {}),
};
continue;
}
const steps = rootFields.map((rootField) => {
const stepQuery = buildSingleRootQuery(assignment.operationName, rootField.field);
const { sql } = converter.convert(stepQuery);
return {
name: rootField.resultName,
sql,
params: assignment.paramNames,
};
});
manifest.operations[assignment.id] = {
hash: assignment.hash,
operationName: assignment.operationName,
kind: "multi-step",
steps,
};
compactMap.m[assignment.id] = {
k: 2,
x: assignment.hash,
t: steps.map((step) => ({
n: step.name,
s: step.sql,
...(step.params.length > 0 ? { p: step.params } : {}),
})),
};
}
return {
registry: assignmentResult.registry,
manifest,
compactMap,
assignments: assignmentResult.assignments,
};
}
function extractRootFields(query) {
const document = parse(query);
const operation = document.definitions.find((definition) => definition.kind === "OperationDefinition");
if (!operation || operation.kind !== "OperationDefinition") {
throw new Error("Persisted queries require an operation definition");
}
const fragments = new Map();
for (const definition of document.definitions) {
if (definition.kind === "FragmentDefinition") {
fragments.set(definition.name.value, definition);
}
}
return uniquifyRootStepNames(extractFieldSelections(operation.selectionSet.selections, fragments));
}
function extractFieldSelections(selections, fragments, visitedFragments = new Set()) {
const fields = [];
for (const selection of selections) {
if (selection.kind === "Field") {
fields.push({
resultName: selection.alias?.value || selection.name.value,
field: selection,
});
continue;
}
if (selection.kind === "InlineFragment") {
fields.push(...extractFieldSelections(selection.selectionSet.selections, fragments, visitedFragments));
continue;
}
const fragmentName = selection.name.value;
if (visitedFragments.has(fragmentName))
continue;
const fragment = fragments.get(fragmentName);
if (!fragment)
continue;
const nextVisitedFragments = new Set(visitedFragments);
nextVisitedFragments.add(fragmentName);
fields.push(...extractFieldSelections(fragment.selectionSet.selections, fragments, nextVisitedFragments));
}
return fields;
}
function uniquifyRootStepNames(fields) {
const seen = new Map();
return fields.map((field) => {
const count = (seen.get(field.resultName) || 0) + 1;
seen.set(field.resultName, count);
if (count === 1)
return field;
return {
...field,
resultName: `${field.resultName}_${count}`,
};
});
}
function buildSingleRootQuery(operationName, field) {
return `query ${operationName} {\n${print(field)}\n}`;
}
export function validatePersistedRegistry(registry) {
const ids = new Set();
let maxId = 0;
for (const [hash, entry] of Object.entries(registry.operations)) {
if (!hash.startsWith("sha256:")) {
throw new Error(`Invalid persisted operation hash: ${hash}`);
}
if (hashGraphQLQuery(entry.graphql) !== hash) {
throw new Error(`Persisted operation hash does not match GraphQL: ${hash}`);
}
if (!Number.isInteger(entry.id) || entry.id <= 0) {
throw new Error(`Invalid persisted operation id: ${entry.id}`);
}
if (ids.has(entry.id)) {
throw new Error(`Duplicate persisted operation id: ${entry.id}`);
}
ids.add(entry.id);
maxId = Math.max(maxId, entry.id);
}
if (!Number.isInteger(registry.nextId) || registry.nextId <= maxId) {
throw new Error(`Invalid persisted registry nextId: ${registry.nextId}; expected greater than ${maxId}`);
}
}
function extractOperationName(query) {
const document = parse(query);
const operation = document.definitions.find((definition) => definition.kind === "OperationDefinition");
if (!operation ||
operation.kind !== "OperationDefinition" ||
!operation.name) {
throw new Error("Persisted queries require named operations");
}
return operation.name.value;
}
function sortObjectKeys(value) {
if (Array.isArray(value)) {
return value.map((item) => sortObjectKeys(item));
}
if (value && typeof value === "object") {
return Object.fromEntries(Object.entries(value)
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, nestedValue]) => [key, sortObjectKeys(nestedValue)]));
}
return value;
}
//# sourceMappingURL=persisted-query.js.map
{"version":3,"file":"persisted-query.js","sourceRoot":"","sources":["../src/persisted-query.ts"],"names":[],"mappings":"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"}
+4
-0

@@ -30,2 +30,3 @@ import type { Database } from "bun:sqlite";

private extractSelections;
private hasDirective;
/**

@@ -75,2 +76,4 @@ * Extract WHERE conditions from GraphQL arguments

private buildJoinCondition;
private getRelationSourceColumn;
private getRelationTargetColumn;
/**

@@ -84,2 +87,3 @@ * Get the foreign key name for a table in a junction table

private buildSelectFields;
private validateFlattenSelections;
/**

@@ -86,0 +90,0 @@ * Recursively build select fields for nested relations

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"gq2sql.d.ts","sourceRoot":"","sources":["../src/gq2sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,KAAK,EAKX,MAAM,EAGN,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAgCxE;AAED,qBAAa,wBAAwB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAK;gBAEb,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG;QAC9B,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC;IAmBD;;OAEG;IACG,iBAAiB,CACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8I9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsDrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkGpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAyMlC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2IvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAwDhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4iB3B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IA+BvC;;OAEG;IACH,OAAO,CAAC,0CAA0C;IAyBlD;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoCpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,YAAY;CAKpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAGD,eAAO,MAAM,aAAa,EAAE,MA4B3B,CAAC"}
{"version":3,"file":"gq2sql.d.ts","sourceRoot":"","sources":["../src/gq2sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,OAAO,KAAK,EAKX,MAAM,EAGN,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,CAgCxE;AAED,qBAAa,wBAAwB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAK;gBAEb,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG;QAC9B,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC;IAmBD;;OAEG;IACG,iBAAiB,CACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiEzB,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8I9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsDrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,YAAY;IAkGpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,yBAAyB;IA4DjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAiOlC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,eAAe;IA4IvB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsEhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAglB3B;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAkCvC;;OAEG;IACH,OAAO,CAAC,0CAA0C;IA0BlD;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,YAAY;IAoCpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,YAAY;CAKpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAGD,eAAO,MAAM,aAAa,EAAE,MA4B3B,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"graphql-schema-generator.d.ts","sourceRoot":"","sources":["../src/graphql-schema-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GACjB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA+HlE"}
{"version":3,"file":"graphql-schema-generator.d.ts","sourceRoot":"","sources":["../src/graphql-schema-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GACjB,MAAM,CAeR;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoIlE"}

@@ -1,5 +0,189 @@

import{createRequire as R}from"node:module";var _=R(import.meta.url);import{writeFileSync as U}from"node:fs";function F(x,j){let v=V(x);if(j)try{U(j,v,"utf8"),console.log(`GraphQL schema file generated at: ${j}`)}catch(k){let A=k instanceof Error?k.message:String(k);throw new Error(`Failed to write schema file: ${A}`)}return v}function V(x){let j=[];j.push("# GraphQL Schema for GQLite"),j.push("# Generated automatically from SQLite database schema"),j.push("# This file provides IDE validation and autocompletion support"),j.push(""),j.push("# WHERE clause input types with operator support"),j.push("input StringWhereInput {"),j.push(" eq: String"),j.push(" ne: String"),j.push(" like: String"),j.push(" ilike: String"),j.push("}"),j.push(""),j.push("input IntWhereInput {"),j.push(" eq: Int"),j.push(" ne: Int"),j.push(" gt: Int"),j.push(" gte: Int"),j.push(" lt: Int"),j.push(" lte: Int"),j.push("}"),j.push(""),j.push("input FloatWhereInput {"),j.push(" eq: Float"),j.push(" ne: Float"),j.push(" gt: Float"),j.push(" gte: Float"),j.push(" lt: Float"),j.push(" lte: Float"),j.push("}"),j.push(""),j.push("input BooleanWhereInput {"),j.push(" eq: Boolean"),j.push(" ne: Boolean"),j.push("}"),j.push("");let v=Object.keys(x);for(let k of v){let A=x[k];if(!A)continue;let E=K(k);j.push(`# ${E} type based on ${k} table`),j.push(`type ${E} {`);for(let[H,B]of Object.entries(A)){let J=X(B.type,B.nullable);if(B.relation){let O=K(B.relation.table);if(B.relation.type==="one-to-many")j.push(` ${H}: [${O}!]!`);else j.push(` ${H}: ${O}${B.nullable?"":"!"}`)}else j.push(` ${H}: ${J}`)}j.push("}"),j.push("")}for(let k of v){let A=x[k];if(!A)continue;let E=K(k);j.push(`# WHERE input for ${E} filtering`),j.push(`input ${E}WhereInput {`);for(let[H,B]of Object.entries(A))if(!B.relation){let J=Y(B.type);if(J)j.push(` ${H}: ${J}`)}j.push("}"),j.push("")}j.push("# Root Query type"),j.push("type Query {");for(let k of v){let A=K(k);j.push(` # Query ${k} table`),j.push(` ${k}(`),j.push(` where: ${A}WhereInput`),j.push(" orderBy: [String!]"),j.push(" limit: Int"),j.push(" offset: Int"),j.push(` ): [${A}!]!`),j.push("")}return j.push("}"),j.join(`
`)}function X(x,j){let v=x.toLowerCase(),k;if(v.includes("int")||v.includes("integer"))k="Int";else if(v.includes("real")||v.includes("float")||v.includes("double"))k="Float";else if(v.includes("text")||v.includes("varchar")||v.includes("char"))k="String";else if(v.includes("bool"))k="Boolean";else k="String";return j?k:`${k}!`}function Y(x){let j=x.toLowerCase();if(j.includes("int")||j.includes("integer"))return"IntWhereInput";if(j.includes("real")||j.includes("float")||j.includes("double"))return"FloatWhereInput";if(j.includes("text")||j.includes("varchar")||j.includes("char"))return"StringWhereInput";if(j.includes("bool"))return"BooleanWhereInput";return"StringWhereInput"}function K(x){return x.charAt(0).toUpperCase()+x.slice(1)}export{V as generateGraphQLSchemaString,F as generateGraphQLSchemaFile};
//# debugId=AF352AD7F4D74EA364756E2164756E21
//# sourceMappingURL=./publicgraphql-schema-generator.js.map
import { writeFileSync } from "node:fs";
/**
* Generate a GraphQL schema definition file (.graphql) from the current Schema
* This schema file can be used by code editors for GraphQL query validation and autocompletion
*/
export function generateGraphQLSchemaFile(schema, outputPath) {
const schemaDefinition = generateGraphQLSchemaString(schema);
if (outputPath) {
try {
writeFileSync(outputPath, schemaDefinition, "utf8");
console.log(`GraphQL schema file generated at: ${outputPath}`);
}
catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
throw new Error(`Failed to write schema file: ${errorMessage}`);
}
}
return schemaDefinition;
}
/**
* Generate GraphQL schema string from Schema object
*/
export function generateGraphQLSchemaString(schema) {
const lines = [];
// Add schema definition header
lines.push("# GraphQL Schema for GQLite");
lines.push("# Generated automatically from SQLite database schema");
lines.push("# This file provides IDE validation and autocompletion support");
lines.push("");
lines.push("directive @flatten on FIELD");
lines.push("");
// Define WhereInput types for all supported operators
lines.push("# WHERE clause input types with operator support");
lines.push("input StringWhereInput {");
lines.push(" eq: String");
lines.push(" ne: String");
lines.push(" like: String");
lines.push(" ilike: String");
lines.push("}");
lines.push("");
lines.push("input IntWhereInput {");
lines.push(" eq: Int");
lines.push(" ne: Int");
lines.push(" gt: Int");
lines.push(" gte: Int");
lines.push(" lt: Int");
lines.push(" lte: Int");
lines.push("}");
lines.push("");
lines.push("input FloatWhereInput {");
lines.push(" eq: Float");
lines.push(" ne: Float");
lines.push(" gt: Float");
lines.push(" gte: Float");
lines.push(" lt: Float");
lines.push(" lte: Float");
lines.push("}");
lines.push("");
lines.push("input BooleanWhereInput {");
lines.push(" eq: Boolean");
lines.push(" ne: Boolean");
lines.push("}");
lines.push("");
// Generate types for each table
const tableNames = Object.keys(schema);
// First pass: Generate main types
for (const tableName of tableNames) {
const tableSchema = schema[tableName];
if (!tableSchema)
continue;
const typeName = capitalize(tableName);
lines.push(`# ${typeName} type based on ${tableName} table`);
lines.push(`type ${typeName} {`);
for (const [fieldName, fieldInfo] of Object.entries(tableSchema)) {
const graphqlType = mapSQLiteToGraphQLType(fieldInfo.type, fieldInfo.nullable);
if (fieldInfo.relation) {
// Handle relationships
const relatedType = capitalize(fieldInfo.relation.table);
if (fieldInfo.relation.type === "one-to-many" ||
fieldInfo.relation.type === "many-to-many") {
lines.push(` ${fieldName}: [${relatedType}!]!`);
}
else {
lines.push(` ${fieldName}: ${relatedType}${fieldInfo.nullable ? "" : "!"}`);
}
}
else {
// Regular scalar field
lines.push(` ${fieldName}: ${graphqlType}`);
}
}
lines.push("}");
lines.push("");
}
// Second pass: Generate WhereInput types for each table
for (const tableName of tableNames) {
const tableSchema = schema[tableName];
if (!tableSchema)
continue;
const typeName = capitalize(tableName);
lines.push(`# WHERE input for ${typeName} filtering`);
lines.push(`input ${typeName}WhereInput {`);
for (const [fieldName, fieldInfo] of Object.entries(tableSchema)) {
if (!fieldInfo.relation) {
// Only scalar fields can be used in WHERE clauses
const whereInputType = mapSQLiteToWhereInputType(fieldInfo.type);
if (whereInputType) {
lines.push(` ${fieldName}: ${whereInputType}`);
}
}
}
lines.push("}");
lines.push("");
}
// Generate Query type
lines.push("# Root Query type");
lines.push("type Query {");
for (const tableName of tableNames) {
const typeName = capitalize(tableName);
lines.push(` # Query ${tableName} table`);
lines.push(` ${tableName}(`);
lines.push(` where: ${typeName}WhereInput`);
lines.push(` orderBy: [String!]`);
lines.push(" limit: Int");
lines.push(" offset: Int");
lines.push(` ): [${typeName}!]!`);
lines.push("");
}
lines.push("}");
return lines.join("\n");
}
/**
* Map SQLite types to GraphQL scalar types
*/
function mapSQLiteToGraphQLType(sqliteType, nullable) {
const baseType = sqliteType.toLowerCase();
let graphqlType;
if (baseType.includes("int") || baseType.includes("integer")) {
graphqlType = "Int";
}
else if (baseType.includes("real") ||
baseType.includes("float") ||
baseType.includes("double")) {
graphqlType = "Float";
}
else if (baseType.includes("text") ||
baseType.includes("varchar") ||
baseType.includes("char")) {
graphqlType = "String";
}
else if (baseType.includes("bool")) {
graphqlType = "Boolean";
}
else {
// Default to String for unknown types
graphqlType = "String";
}
return nullable ? graphqlType : `${graphqlType}!`;
}
/**
* Map SQLite types to appropriate WhereInput types
*/
function mapSQLiteToWhereInputType(sqliteType) {
const baseType = sqliteType.toLowerCase();
if (baseType.includes("int") || baseType.includes("integer")) {
return "IntWhereInput";
}
if (baseType.includes("real") ||
baseType.includes("float") ||
baseType.includes("double")) {
return "FloatWhereInput";
}
if (baseType.includes("text") ||
baseType.includes("varchar") ||
baseType.includes("char")) {
return "StringWhereInput";
}
if (baseType.includes("bool")) {
return "BooleanWhereInput";
}
return "StringWhereInput"; // Default fallback
}
/**
* Capitalize first letter of a string
*/
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
//# sourceMappingURL=graphql-schema-generator.js.map

@@ -1,10 +0,1 @@

{
"version": 3,
"sources": ["../src/graphql-schema-generator.ts"],
"sourcesContent": [
"import { writeFileSync } from \"node:fs\";\nimport type { Schema } from \"./types.js\";\n\n/**\n * Generate a GraphQL schema definition file (.graphql) from the current Schema\n * This schema file can be used by code editors for GraphQL query validation and autocompletion\n */\nexport function generateGraphQLSchemaFile(\n\tschema: Schema,\n\toutputPath?: string,\n): string {\n\tconst schemaDefinition = generateGraphQLSchemaString(schema);\n\n\tif (outputPath) {\n\t\ttry {\n\t\t\twriteFileSync(outputPath, schemaDefinition, \"utf8\");\n\t\t\tconsole.log(`GraphQL schema file generated at: ${outputPath}`);\n\t\t} catch (error: unknown) {\n\t\t\tconst errorMessage =\n\t\t\t\terror instanceof Error ? error.message : String(error);\n\t\t\tthrow new Error(`Failed to write schema file: ${errorMessage}`);\n\t\t}\n\t}\n\n\treturn schemaDefinition;\n}\n\n/**\n * Generate GraphQL schema string from Schema object\n */\nexport function generateGraphQLSchemaString(schema: Schema): string {\n\tconst lines: string[] = [];\n\n\t// Add schema definition header\n\tlines.push(\"# GraphQL Schema for GQLite\");\n\tlines.push(\"# Generated automatically from SQLite database schema\");\n\tlines.push(\"# This file provides IDE validation and autocompletion support\");\n\tlines.push(\"\");\n\n\t// Define WhereInput types for all supported operators\n\tlines.push(\"# WHERE clause input types with operator support\");\n\tlines.push(\"input StringWhereInput {\");\n\tlines.push(\" eq: String\");\n\tlines.push(\" ne: String\");\n\tlines.push(\" like: String\");\n\tlines.push(\" ilike: String\");\n\tlines.push(\"}\");\n\tlines.push(\"\");\n\n\tlines.push(\"input IntWhereInput {\");\n\tlines.push(\" eq: Int\");\n\tlines.push(\" ne: Int\");\n\tlines.push(\" gt: Int\");\n\tlines.push(\" gte: Int\");\n\tlines.push(\" lt: Int\");\n\tlines.push(\" lte: Int\");\n\tlines.push(\"}\");\n\tlines.push(\"\");\n\n\tlines.push(\"input FloatWhereInput {\");\n\tlines.push(\" eq: Float\");\n\tlines.push(\" ne: Float\");\n\tlines.push(\" gt: Float\");\n\tlines.push(\" gte: Float\");\n\tlines.push(\" lt: Float\");\n\tlines.push(\" lte: Float\");\n\tlines.push(\"}\");\n\tlines.push(\"\");\n\n\tlines.push(\"input BooleanWhereInput {\");\n\tlines.push(\" eq: Boolean\");\n\tlines.push(\" ne: Boolean\");\n\tlines.push(\"}\");\n\tlines.push(\"\");\n\n\t// Generate types for each table\n\tconst tableNames = Object.keys(schema);\n\n\t// First pass: Generate main types\n\tfor (const tableName of tableNames) {\n\t\tconst tableSchema = schema[tableName];\n\t\tif (!tableSchema) continue;\n\n\t\tconst typeName = capitalize(tableName);\n\n\t\tlines.push(`# ${typeName} type based on ${tableName} table`);\n\t\tlines.push(`type ${typeName} {`);\n\n\t\tfor (const [fieldName, fieldInfo] of Object.entries(tableSchema)) {\n\t\t\tconst graphqlType = mapSQLiteToGraphQLType(\n\t\t\t\tfieldInfo.type,\n\t\t\t\tfieldInfo.nullable,\n\t\t\t);\n\n\t\t\tif (fieldInfo.relation) {\n\t\t\t\t// Handle relationships\n\t\t\t\tconst relatedType = capitalize(fieldInfo.relation.table);\n\t\t\t\tif (fieldInfo.relation.type === \"one-to-many\") {\n\t\t\t\t\tlines.push(` ${fieldName}: [${relatedType}!]!`);\n\t\t\t\t} else {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\t` ${fieldName}: ${relatedType}${fieldInfo.nullable ? \"\" : \"!\"}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Regular scalar field\n\t\t\t\tlines.push(` ${fieldName}: ${graphqlType}`);\n\t\t\t}\n\t\t}\n\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\t}\n\n\t// Second pass: Generate WhereInput types for each table\n\tfor (const tableName of tableNames) {\n\t\tconst tableSchema = schema[tableName];\n\t\tif (!tableSchema) continue;\n\n\t\tconst typeName = capitalize(tableName);\n\n\t\tlines.push(`# WHERE input for ${typeName} filtering`);\n\t\tlines.push(`input ${typeName}WhereInput {`);\n\n\t\tfor (const [fieldName, fieldInfo] of Object.entries(tableSchema)) {\n\t\t\tif (!fieldInfo.relation) {\n\t\t\t\t// Only scalar fields can be used in WHERE clauses\n\t\t\t\tconst whereInputType = mapSQLiteToWhereInputType(fieldInfo.type);\n\t\t\t\tif (whereInputType) {\n\t\t\t\t\tlines.push(` ${fieldName}: ${whereInputType}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlines.push(\"}\");\n\t\tlines.push(\"\");\n\t}\n\n\t// Generate Query type\n\tlines.push(\"# Root Query type\");\n\tlines.push(\"type Query {\");\n\n\tfor (const tableName of tableNames) {\n\t\tconst typeName = capitalize(tableName);\n\t\tlines.push(` # Query ${tableName} table`);\n\t\tlines.push(` ${tableName}(`);\n\t\tlines.push(` where: ${typeName}WhereInput`);\n\t\tlines.push(` orderBy: [String!]`);\n\t\tlines.push(\" limit: Int\");\n\t\tlines.push(\" offset: Int\");\n\t\tlines.push(` ): [${typeName}!]!`);\n\t\tlines.push(\"\");\n\t}\n\n\tlines.push(\"}\");\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Map SQLite types to GraphQL scalar types\n */\nfunction mapSQLiteToGraphQLType(\n\tsqliteType: string,\n\tnullable?: boolean,\n): string {\n\tconst baseType = sqliteType.toLowerCase();\n\tlet graphqlType: string;\n\n\tif (baseType.includes(\"int\") || baseType.includes(\"integer\")) {\n\t\tgraphqlType = \"Int\";\n\t} else if (\n\t\tbaseType.includes(\"real\") ||\n\t\tbaseType.includes(\"float\") ||\n\t\tbaseType.includes(\"double\")\n\t) {\n\t\tgraphqlType = \"Float\";\n\t} else if (\n\t\tbaseType.includes(\"text\") ||\n\t\tbaseType.includes(\"varchar\") ||\n\t\tbaseType.includes(\"char\")\n\t) {\n\t\tgraphqlType = \"String\";\n\t} else if (baseType.includes(\"bool\")) {\n\t\tgraphqlType = \"Boolean\";\n\t} else {\n\t\t// Default to String for unknown types\n\t\tgraphqlType = \"String\";\n\t}\n\n\treturn nullable ? graphqlType : `${graphqlType}!`;\n}\n\n/**\n * Map SQLite types to appropriate WhereInput types\n */\nfunction mapSQLiteToWhereInputType(sqliteType: string): string | null {\n\tconst baseType = sqliteType.toLowerCase();\n\n\tif (baseType.includes(\"int\") || baseType.includes(\"integer\")) {\n\t\treturn \"IntWhereInput\";\n\t}\n\n\tif (\n\t\tbaseType.includes(\"real\") ||\n\t\tbaseType.includes(\"float\") ||\n\t\tbaseType.includes(\"double\")\n\t) {\n\t\treturn \"FloatWhereInput\";\n\t}\n\n\tif (\n\t\tbaseType.includes(\"text\") ||\n\t\tbaseType.includes(\"varchar\") ||\n\t\tbaseType.includes(\"char\")\n\t) {\n\t\treturn \"StringWhereInput\";\n\t}\n\n\tif (baseType.includes(\"bool\")) {\n\t\treturn \"BooleanWhereInput\";\n\t}\n\n\treturn \"StringWhereInput\"; // Default fallback\n}\n\n/**\n * Capitalize first letter of a string\n */\nfunction capitalize(str: string): string {\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\n}\n"
],
"mappings": "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",
"debugId": "AF352AD7F4D74EA364756E2164756E21",
"names": []
}
{"version":3,"file":"graphql-schema-generator.js","sourceRoot":"","sources":["../src/graphql-schema-generator.ts"],"names":[],"mappings":"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"}
export { graphqlToSqlite, GraphQLToSQLiteConverter, } from "./gq2sql.js";
export { generateGraphQLSchemaFile, generateGraphQLSchemaString, } from "./graphql-schema-generator.js";
export { assignPersistedOperationIds, canonicalizeGraphQLQuery, compilePersistedOperations, createEmptyPersistedOperationRegistry, hashGraphQLQuery, hashPersistedSchema, validatePersistedRegistry, } from "./persisted-query.js";
export { createSchemaFromDatabase, createSchemaFromFile, } from "./schema-generator.js";
export type { Schema, SchemaField, TableSchema, QueryContext, ProcessedSelection, JoinInfo, WhereCondition, OrderByCondition, ColumnInfo, ForeignKeyInfo, TableInfo, DatabaseConnection, } from "./types.js";
export type { Database } from "bun:sqlite";
export type { DatabaseConnection, Schema, SchemaField, TableSchema, } from "./types.js";
export type { CompactPersistedMap, CompactPersistedPlan, CompactMultiStepPlan, CompactMultiStepPlanStep, CompactSingleSqlPlan, CompilePersistedOptions, MultiStepPersistedOperation, MultiStepPersistedOperationStep, PersistedCompileResult, PersistedManifest, PersistedManifestOperation, PersistedOperationAssignment, PersistedOperationAssignmentResult, PersistedOperationInput, PersistedOperationRegistry, PersistedPlanKind, SingleSqlPersistedOperation, } from "./persisted-query.js";
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,wBAAwB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,yBAAyB,EACzB,2BAA2B,GAC3B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACX,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,SAAS,EACT,kBAAkB,GAClB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,wBAAwB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,yBAAyB,EACzB,2BAA2B,GAC3B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,qCAAqC,EACrC,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACX,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,WAAW,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EACX,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,2BAA2B,GAC3B,MAAM,sBAAsB,CAAC"}

@@ -1,4 +0,6 @@

import{createRequire as d}from"node:module";var u=d(import.meta.url);import{graphqlToSqlite as B,GraphQLToSQLiteConverter as C}from"./gq2sql.js";import{generateGraphQLSchemaFile as F,generateGraphQLSchemaString as G}from"./graphql-schema-generator.js";import{createSchemaFromDatabase as I,createSchemaFromFile as J}from"./schema-generator.js";export{B as graphqlToSqlite,G as generateGraphQLSchemaString,F as generateGraphQLSchemaFile,J as createSchemaFromFile,I as createSchemaFromDatabase,C as GraphQLToSQLiteConverter};
//# debugId=C3C63DC93D94DE0864756E2164756E21
//# sourceMappingURL=./publicindex.js.map
// Main exports for GQLite - GraphQL to SQLite Converter
export { graphqlToSqlite, GraphQLToSQLiteConverter, } from "./gq2sql.js";
export { generateGraphQLSchemaFile, generateGraphQLSchemaString, } from "./graphql-schema-generator.js";
export { assignPersistedOperationIds, canonicalizeGraphQLQuery, compilePersistedOperations, createEmptyPersistedOperationRegistry, hashGraphQLQuery, hashPersistedSchema, validatePersistedRegistry, } from "./persisted-query.js";
export { createSchemaFromDatabase, createSchemaFromFile, } from "./schema-generator.js";
//# sourceMappingURL=index.js.map

@@ -1,10 +0,1 @@

{
"version": 3,
"sources": ["../src/index.ts"],
"sourcesContent": [
"// Main exports for GQLite - GraphQL to SQLite Converter\nexport {\n\tgraphqlToSqlite,\n\tGraphQLToSQLiteConverter,\n} from \"./gq2sql.js\";\n\nexport {\n\tgenerateGraphQLSchemaFile,\n\tgenerateGraphQLSchemaString,\n} from \"./graphql-schema-generator.js\";\n\nexport {\n\tcreateSchemaFromDatabase,\n\tcreateSchemaFromFile,\n} from \"./schema-generator.js\";\n\n// Export types\nexport type {\n\tSchema,\n\tSchemaField,\n\tTableSchema,\n\tQueryContext,\n\tProcessedSelection,\n\tJoinInfo,\n\tWhereCondition,\n\tOrderByCondition,\n\tColumnInfo,\n\tForeignKeyInfo,\n\tTableInfo,\n\tDatabaseConnection,\n} from \"./types.js\";\n\n// Re-export Database type for convenience\nexport type { Database } from \"bun:sqlite\";\n"
],
"mappings": "qEACA,0BACC,8BACA,oBAGD,oCACC,iCACA,sCAGD,mCACC,0BACA",
"debugId": "C3C63DC93D94DE0864756E2164756E21",
"names": []
}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EACN,eAAe,EACf,wBAAwB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,yBAAyB,EACzB,2BAA2B,GAC3B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,qCAAqC,EACrC,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACN,wBAAwB,EACxB,oBAAoB,GACpB,MAAM,uBAAuB,CAAC"}

@@ -1,1 +0,1 @@

{"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../src/schema-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAIN,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC7C,EAAE,EAAE,kBAAkB,GACpB,OAAO,CAAC,MAAM,CAAC,CAoHjB;AAiJD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC1E"}
{"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../src/schema-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,EAIN,kBAAkB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC7C,EAAE,EAAE,kBAAkB,GACpB,OAAO,CAAC,MAAM,CAAC,CA4IjB;AA4LD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC1E"}

@@ -1,4 +0,319 @@

import{createRequire as O}from"node:module";var R=O(import.meta.url);async function z(E){let B={};try{let V=await E.all("SELECT type, name, tbl_name, rootpage, sql FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name");for(let Y of V){let A=Y.name;B[A]={};let Z=await E.all(`PRAGMA table_info(${A})`),W=await E.all(`PRAGMA foreign_key_list(${A})`);for(let G of Z){let x=G.name,H=G.type.toUpperCase(),_=M(H),$=G.pk===1?!1:G.notnull===0;B[A][x]={type:_,nullable:$};let J=W.find((X)=>X.from===x);if(J){B[A][x].relation={table:J.table,foreignKey:x,type:"many-to-one"};let X=null;if(x.endsWith("_id"))X=x.replace(/_id$/,"");else if(x.endsWith("Id"))X=x.replace(/Id$/,"");if(X)B[A][X]={type:"OBJECT",relation:{table:J.table,foreignKey:x,type:"many-to-one"}}}}}for(let Y of V){let A=Y.name,Z=await E.all(`PRAGMA foreign_key_list(${A})`);for(let W of Z){let{table:G,to:x}=W;if(B[G]){let H=A;B[G][H]={type:"ARRAY",relation:{table:A,foreignKey:W.from,type:"one-to-many"}}}}}return await P(E,B,V),B}catch(V){throw new Error(`Failed to create schema from database: ${V instanceof Error?V.message:String(V)}`)}}function M(E){switch(E.toUpperCase().split("(")[0]){case"INTEGER":case"INT":case"TINYINT":case"SMALLINT":case"MEDIUMINT":case"BIGINT":case"UNSIGNED BIG INT":case"INT2":case"INT8":return"INTEGER";case"CHARACTER":case"VARCHAR":case"VARYING CHARACTER":case"NCHAR":case"NATIVE CHARACTER":case"NVARCHAR":case"TEXT":case"CLOB":return"TEXT";case"REAL":case"DOUBLE":case"DOUBLE PRECISION":case"FLOAT":case"NUMERIC":case"DECIMAL":return"REAL";case"BOOLEAN":return"BOOLEAN";case"DATE":return"DATE";case"DATETIME":case"TIMESTAMP":return"DATETIME";case"BLOB":return"BLOB";default:return"TEXT"}}function L(E){return E}async function P(E,B,V){for(let Y of V){let A=Y.name,Z=await E.all(`PRAGMA table_info(${A})`),W=await E.all(`PRAGMA foreign_key_list(${A})`);if(W.length===2){if(Z.filter((x)=>!W.some((H)=>H.from===x.name)).length<=1){let x=W[0],H=W[1];if(x&&H&&B[x.table]&&B[H.table]){let _=L(H.table),$=B[x.table];if($)$[_]={type:"ARRAY",relation:{table:H.table,foreignKey:x.from,type:"many-to-many",joinTable:A}};let J=L(x.table),X=B[H.table];if(X)X[J]={type:"ARRAY",relation:{table:x.table,foreignKey:H.from,type:"many-to-many",joinTable:A}}}}}}}async function I(E){let B=R("sqlite3").Database;return new Promise((V,Y)=>{let A=new B(E,(Z)=>{if(Z){Y(Z);return}z({all:(G)=>{return new Promise((x,H)=>{A.all(G,[],(_,$)=>{if(_)H(_);else x($)})})}}).then((G)=>{A.close(),V(G)}).catch((G)=>{A.close(),Y(G)})})})}export{I as createSchemaFromFile,z as createSchemaFromDatabase};
/**
* Creates a Schema object from an existing SQLite database
* @param db - Database connection object with an 'all' method for executing queries
* @returns Promise<Schema> - The generated schema object
*/
export async function createSchemaFromDatabase(db) {
const schema = {};
try {
// Get all table names (excluding sqlite system tables)
const tables = await db.all(`SELECT type, name, tbl_name, rootpage, sql ` +
`FROM sqlite_master ` +
`WHERE type = 'table' ` +
`AND name NOT LIKE 'sqlite_%' ` +
`ORDER BY name`);
// Process each table
for (const table of tables) {
const tableName = table.name;
schema[tableName] = {};
// Get column information
const columns = await db.all(`PRAGMA table_info(${tableName})`);
// Get foreign key information
const foreignKeys = await db.all(`PRAGMA foreign_key_list(${tableName})`);
const uniqueColumns = await getUniqueColumns(db, tableName);
// Process regular columns
for (const column of columns) {
const fieldName = column.name;
const sqliteType = column.type.toUpperCase();
// Map SQLite types to more generic types
const mappedType = mapSQLiteType(sqliteType);
// Primary key columns should never be nullable
const isNullable = column.pk === 1 ? false : column.notnull === 0;
schema[tableName][fieldName] = {
type: mappedType,
nullable: isNullable,
};
// Check if this column is a foreign key
const fkInfo = foreignKeys.find((fk) => fk.from === fieldName);
if (fkInfo) {
const relationType = uniqueColumns.has(fieldName)
? "one-to-one"
: "many-to-one";
// Add many-to-one relationship for foreign key column
schema[tableName][fieldName].relation = {
table: fkInfo.table,
foreignKey: fieldName,
type: relationType,
sourceTable: tableName,
sourceColumn: fieldName,
targetTable: fkInfo.table,
targetColumn: fkInfo.to,
};
// Also create a convenience field using the field name without _id or Id suffix
let relationFieldName = null;
if (fieldName.endsWith("_id")) {
// Remove _id suffix to create relation field name (e.g., user_id -> user)
relationFieldName = fieldName.replace(/_id$/, "");
}
else if (fieldName.endsWith("Id")) {
// Remove Id suffix to create relation field name (e.g., customerId -> customer)
relationFieldName = fieldName.replace(/Id$/, "");
}
else {
const referencedSingularName = singularize(fkInfo.table);
if (fieldName.startsWith(`${referencedSingularName}_`)) {
relationFieldName = referencedSingularName;
}
}
if (relationFieldName) {
schema[tableName][relationFieldName] = {
type: "OBJECT",
relation: {
table: fkInfo.table,
foreignKey: fieldName,
type: relationType,
sourceTable: tableName,
sourceColumn: fieldName,
targetTable: fkInfo.table,
targetColumn: fkInfo.to,
},
};
}
}
}
}
// Second pass: Add one-to-many relationships
for (const table of tables) {
const tableName = table.name;
const foreignKeys = await db.all(`PRAGMA foreign_key_list(${tableName})`);
const uniqueColumns = await getUniqueColumns(db, tableName);
for (const fk of foreignKeys) {
const referencedTable = fk.table;
const referencedColumn = fk.to;
// Add reverse relationship to the referenced table
if (schema[referencedTable]) {
const isOneToOne = uniqueColumns.has(fk.from);
const collectionFieldName = isOneToOne
? singularize(tableName)
: tableName;
schema[referencedTable][collectionFieldName] = {
type: isOneToOne ? "OBJECT" : "ARRAY",
relation: {
table: tableName,
foreignKey: fk.from,
type: isOneToOne ? "one-to-one" : "one-to-many",
sourceTable: referencedTable,
sourceColumn: referencedColumn,
targetTable: tableName,
targetColumn: fk.from,
},
};
}
}
}
// Third pass: Detect many-to-many relationships through junction tables
await detectManyToManyRelationships(db, schema, tables);
return schema;
}
catch (error) {
throw new Error(`Failed to create schema from database: ${error instanceof Error ? error.message : String(error)}`);
}
}
/**
* Maps SQLite data types to more generic type names
*/
function mapSQLiteType(sqliteType) {
const type = sqliteType.toUpperCase();
// Handle types with parentheses (e.g., VARCHAR(255))
const baseType = type.split("(")[0];
switch (baseType) {
case "INTEGER":
case "INT":
case "TINYINT":
case "SMALLINT":
case "MEDIUMINT":
case "BIGINT":
case "UNSIGNED BIG INT":
case "INT2":
case "INT8":
return "INTEGER";
case "CHARACTER":
case "VARCHAR":
case "VARYING CHARACTER":
case "NCHAR":
case "NATIVE CHARACTER":
case "NVARCHAR":
case "TEXT":
case "CLOB":
return "TEXT";
case "REAL":
case "DOUBLE":
case "DOUBLE PRECISION":
case "FLOAT":
case "NUMERIC":
case "DECIMAL":
return "REAL";
case "BOOLEAN":
return "BOOLEAN";
case "DATE":
return "DATE";
case "DATETIME":
case "TIMESTAMP":
return "DATETIME";
case "BLOB":
return "BLOB";
default:
return "TEXT"; // Default fallback
}
}
/**
* Simple pluralization function
*/
function pluralize(word) {
return word;
// // Basic pluralization rules
// if (word.endsWith("y")) {
// return word.slice(0, -1) + "ies";
// } else if (
// word.endsWith("s") ||
// word.endsWith("sh") ||
// word.endsWith("ch") ||
// word.endsWith("x") ||
// word.endsWith("z")
// ) {
// return word + "es";
// } else {
// return word + "s";
// }
}
function singularize(word) {
return word.endsWith("s") ? word.slice(0, -1) : word;
}
async function getUniqueColumns(db, tableName) {
const uniqueColumns = new Set();
const indexes = await db.all(`PRAGMA index_list(${tableName})`);
for (const index of indexes) {
if (index.unique !== 1)
continue;
const columns = await db.all(`PRAGMA index_info(${index.name})`);
if (columns.length === 1 && columns[0]?.name) {
uniqueColumns.add(columns[0].name);
}
}
return uniqueColumns;
}
/**
* Detects many-to-many relationships through junction tables
*/
async function detectManyToManyRelationships(db, schema, tables) {
for (const table of tables) {
const tableName = table.name;
const columns = await db.all(`PRAGMA table_info(${tableName})`);
const foreignKeys = await db.all(`PRAGMA foreign_key_list(${tableName})`);
// Check if this could be a junction table (has exactly 2 foreign keys).
if (foreignKeys.length === 2) {
const fk1 = foreignKeys[0];
const fk2 = foreignKeys[1];
// Add many-to-many relationships to both referenced tables
if (fk1 && fk2 && schema[fk1.table] && schema[fk2.table]) {
// Add relationship from table1 to table2
const table2CollectionName = pluralize(fk2.table);
const table1Schema = schema[fk1.table];
if (table1Schema) {
table1Schema[table2CollectionName] = {
type: "ARRAY",
relation: {
table: fk2.table,
foreignKey: fk1.from,
type: "many-to-many",
joinTable: tableName,
sourceTable: fk1.table,
sourceColumn: fk1.to,
targetTable: fk2.table,
targetColumn: fk2.to,
joinSourceColumn: fk1.from,
joinTargetColumn: fk2.from,
joinSourceTargetColumn: fk1.to,
joinTargetTargetColumn: fk2.to,
},
};
}
// Add relationship from table2 to table1
const table1CollectionName = pluralize(fk1.table);
const table2Schema = schema[fk2.table];
if (table2Schema) {
table2Schema[table1CollectionName] = {
type: "ARRAY",
relation: {
table: fk1.table,
foreignKey: fk2.from,
type: "many-to-many",
joinTable: tableName,
sourceTable: fk2.table,
sourceColumn: fk2.to,
targetTable: fk1.table,
targetColumn: fk1.to,
joinSourceColumn: fk2.from,
joinTargetColumn: fk1.from,
joinSourceTargetColumn: fk2.to,
joinTargetTargetColumn: fk1.to,
},
};
}
}
}
}
}
/**
* Utility function to create schema from database file path (Node.js environments)
* This is an example implementation using sqlite3 package
*/
export async function createSchemaFromFile(dbPath) {
// This would require the sqlite3 package to be installed
// npm install sqlite3 @types/sqlite3
const Database = require("sqlite3").Database;
return new Promise((resolve, reject) => {
const db = new Database(dbPath, (err) => {
if (err) {
reject(err);
return;
}
const dbWrapper = {
all: (query) => {
return new Promise((resolveQuery, rejectQuery) => {
db.all(query, [], (err, rows) => {
if (err) {
rejectQuery(err);
}
else {
resolveQuery(rows);
}
});
});
},
};
createSchemaFromDatabase(dbWrapper)
.then((schema) => {
db.close();
resolve(schema);
})
.catch((error) => {
db.close();
reject(error);
});
});
});
}
// Example usage:
/*
import { createSchemaFromDatabase, createSchemaFromFile } from './schema-generator';
//# debugId=171EA47C4758D8C164756E2164756E21
//# sourceMappingURL=./publicschema-generator.js.map
// Using with a database connection
const schema = await createSchemaFromDatabase(dbConnection);
// Using with a file path (Node.js)
const schema = await createSchemaFromFile('./database.sqlite');
console.log(JSON.stringify(schema, null, 2));
*/
//# sourceMappingURL=schema-generator.js.map

@@ -1,10 +0,1 @@

{
"version": 3,
"sources": ["../src/schema-generator.ts"],
"sourcesContent": [
"import type {\n\tSchema,\n\tColumnInfo,\n\tForeignKeyInfo,\n\tTableInfo,\n\tDatabaseConnection,\n} from \"./types.js\";\n\n/**\n * Creates a Schema object from an existing SQLite database\n * @param db - Database connection object with an 'all' method for executing queries\n * @returns Promise<Schema> - The generated schema object\n */\nexport async function createSchemaFromDatabase(\n\tdb: DatabaseConnection,\n): Promise<Schema> {\n\tconst schema: Schema = {};\n\n\ttry {\n\t\t// Get all table names (excluding sqlite system tables)\n\t\tconst tables: TableInfo[] = await db.all(\n\t\t\t`SELECT type, name, tbl_name, rootpage, sql ` +\n\t\t\t\t`FROM sqlite_master ` +\n\t\t\t\t`WHERE type = 'table' ` +\n\t\t\t\t`AND name NOT LIKE 'sqlite_%' ` +\n\t\t\t\t`ORDER BY name`,\n\t\t);\n\n\t\t// Process each table\n\t\tfor (const table of tables) {\n\t\t\tconst tableName = table.name;\n\t\t\tschema[tableName] = {};\n\n\t\t\t// Get column information\n\t\t\tconst columns: ColumnInfo[] = await db.all(\n\t\t\t\t`PRAGMA table_info(${tableName})`,\n\t\t\t);\n\n\t\t\t// Get foreign key information\n\t\t\tconst foreignKeys: ForeignKeyInfo[] = await db.all(\n\t\t\t\t`PRAGMA foreign_key_list(${tableName})`,\n\t\t\t);\n\n\t\t\t// Process regular columns\n\t\t\tfor (const column of columns) {\n\t\t\t\tconst fieldName = column.name;\n\t\t\t\tconst sqliteType = column.type.toUpperCase();\n\n\t\t\t\t// Map SQLite types to more generic types\n\t\t\t\tconst mappedType = mapSQLiteType(sqliteType);\n\n\t\t\t\t// Primary key columns should never be nullable\n\t\t\t\tconst isNullable = column.pk === 1 ? false : column.notnull === 0;\n\n\t\t\t\tschema[tableName][fieldName] = {\n\t\t\t\t\ttype: mappedType,\n\t\t\t\t\tnullable: isNullable,\n\t\t\t\t};\n\n\t\t\t\t// Check if this column is a foreign key\n\t\t\t\tconst fkInfo = foreignKeys.find((fk) => fk.from === fieldName);\n\t\t\t\tif (fkInfo) {\n\t\t\t\t\t// Add many-to-one relationship for foreign key column\n\t\t\t\t\tschema[tableName][fieldName].relation = {\n\t\t\t\t\t\ttable: fkInfo.table,\n\t\t\t\t\t\tforeignKey: fieldName,\n\t\t\t\t\t\ttype: \"many-to-one\",\n\t\t\t\t\t};\n\n\t\t\t\t\t// Also create a convenience field using the field name without _id or Id suffix\n\t\t\t\t\tlet relationFieldName: string | null = null;\n\n\t\t\t\t\tif (fieldName.endsWith(\"_id\")) {\n\t\t\t\t\t\t// Remove _id suffix to create relation field name (e.g., user_id -> user)\n\t\t\t\t\t\trelationFieldName = fieldName.replace(/_id$/, \"\");\n\t\t\t\t\t} else if (fieldName.endsWith(\"Id\")) {\n\t\t\t\t\t\t// Remove Id suffix to create relation field name (e.g., customerId -> customer)\n\t\t\t\t\t\trelationFieldName = fieldName.replace(/Id$/, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (relationFieldName) {\n\t\t\t\t\t\tschema[tableName][relationFieldName] = {\n\t\t\t\t\t\t\ttype: \"OBJECT\",\n\t\t\t\t\t\t\trelation: {\n\t\t\t\t\t\t\t\ttable: fkInfo.table,\n\t\t\t\t\t\t\t\tforeignKey: fieldName,\n\t\t\t\t\t\t\t\ttype: \"many-to-one\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Second pass: Add one-to-many relationships\n\t\tfor (const table of tables) {\n\t\t\tconst tableName = table.name;\n\t\t\tconst foreignKeys: ForeignKeyInfo[] = await db.all(\n\t\t\t\t`PRAGMA foreign_key_list(${tableName})`,\n\t\t\t);\n\n\t\t\tfor (const fk of foreignKeys) {\n\t\t\t\tconst referencedTable = fk.table;\n\t\t\t\tconst referencedColumn = fk.to;\n\n\t\t\t\t// Add one-to-many relationship to the referenced table\n\t\t\t\tif (schema[referencedTable]) {\n\t\t\t\t\t// Use the exact table name as the collection field name\n\t\t\t\t\tconst collectionFieldName = tableName;\n\n\t\t\t\t\tschema[referencedTable][collectionFieldName] = {\n\t\t\t\t\t\ttype: \"ARRAY\",\n\t\t\t\t\t\trelation: {\n\t\t\t\t\t\t\ttable: tableName,\n\t\t\t\t\t\t\tforeignKey: fk.from,\n\t\t\t\t\t\t\ttype: \"one-to-many\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Third pass: Detect many-to-many relationships through junction tables\n\t\tawait detectManyToManyRelationships(db, schema, tables);\n\n\t\treturn schema;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to create schema from database: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n}\n\n/**\n * Maps SQLite data types to more generic type names\n */\nfunction mapSQLiteType(sqliteType: string): string {\n\tconst type = sqliteType.toUpperCase();\n\n\t// Handle types with parentheses (e.g., VARCHAR(255))\n\tconst baseType = type.split(\"(\")[0];\n\n\tswitch (baseType) {\n\t\tcase \"INTEGER\":\n\t\tcase \"INT\":\n\t\tcase \"TINYINT\":\n\t\tcase \"SMALLINT\":\n\t\tcase \"MEDIUMINT\":\n\t\tcase \"BIGINT\":\n\t\tcase \"UNSIGNED BIG INT\":\n\t\tcase \"INT2\":\n\t\tcase \"INT8\":\n\t\t\treturn \"INTEGER\";\n\n\t\tcase \"CHARACTER\":\n\t\tcase \"VARCHAR\":\n\t\tcase \"VARYING CHARACTER\":\n\t\tcase \"NCHAR\":\n\t\tcase \"NATIVE CHARACTER\":\n\t\tcase \"NVARCHAR\":\n\t\tcase \"TEXT\":\n\t\tcase \"CLOB\":\n\t\t\treturn \"TEXT\";\n\n\t\tcase \"REAL\":\n\t\tcase \"DOUBLE\":\n\t\tcase \"DOUBLE PRECISION\":\n\t\tcase \"FLOAT\":\n\t\tcase \"NUMERIC\":\n\t\tcase \"DECIMAL\":\n\t\t\treturn \"REAL\";\n\n\t\tcase \"BOOLEAN\":\n\t\t\treturn \"BOOLEAN\";\n\n\t\tcase \"DATE\":\n\t\t\treturn \"DATE\";\n\n\t\tcase \"DATETIME\":\n\t\tcase \"TIMESTAMP\":\n\t\t\treturn \"DATETIME\";\n\n\t\tcase \"BLOB\":\n\t\t\treturn \"BLOB\";\n\n\t\tdefault:\n\t\t\treturn \"TEXT\"; // Default fallback\n\t}\n}\n\n/**\n * Simple pluralization function\n */\nfunction pluralize(word: string): string {\n\treturn word;\n\t// // Basic pluralization rules\n\t// if (word.endsWith(\"y\")) {\n\t// \treturn word.slice(0, -1) + \"ies\";\n\t// } else if (\n\t// \tword.endsWith(\"s\") ||\n\t// \tword.endsWith(\"sh\") ||\n\t// \tword.endsWith(\"ch\") ||\n\t// \tword.endsWith(\"x\") ||\n\t// \tword.endsWith(\"z\")\n\t// ) {\n\t// \treturn word + \"es\";\n\t// } else {\n\t// \treturn word + \"s\";\n\t// }\n}\n\n/**\n * Detects many-to-many relationships through junction tables\n */\nasync function detectManyToManyRelationships(\n\tdb: DatabaseConnection,\n\tschema: Schema,\n\ttables: TableInfo[],\n): Promise<void> {\n\tfor (const table of tables) {\n\t\tconst tableName = table.name;\n\t\tconst columns: ColumnInfo[] = await db.all(\n\t\t\t`PRAGMA table_info(${tableName})`,\n\t\t);\n\t\tconst foreignKeys: ForeignKeyInfo[] = await db.all(\n\t\t\t`PRAGMA foreign_key_list(${tableName})`,\n\t\t);\n\n\t\t// Check if this could be a junction table (has exactly 2 foreign keys and possibly an ID)\n\t\tif (foreignKeys.length === 2) {\n\t\t\tconst nonFkColumns = columns.filter(\n\t\t\t\t(col) => !foreignKeys.some((fk) => fk.from === col.name),\n\t\t\t);\n\n\t\t\t// If table has only foreign keys or foreign keys + primary key, it might be a junction table\n\t\t\tif (nonFkColumns.length <= 1) {\n\t\t\t\tconst fk1 = foreignKeys[0];\n\t\t\t\tconst fk2 = foreignKeys[1];\n\n\t\t\t\t// Add many-to-many relationships to both referenced tables\n\t\t\t\tif (fk1 && fk2 && schema[fk1.table] && schema[fk2.table]) {\n\t\t\t\t\t// Add relationship from table1 to table2\n\t\t\t\t\tconst table2CollectionName = pluralize(fk2.table);\n\t\t\t\t\tconst table1Schema = schema[fk1.table];\n\t\t\t\t\tif (table1Schema) {\n\t\t\t\t\t\ttable1Schema[table2CollectionName] = {\n\t\t\t\t\t\t\ttype: \"ARRAY\",\n\t\t\t\t\t\t\trelation: {\n\t\t\t\t\t\t\t\ttable: fk2.table,\n\t\t\t\t\t\t\t\tforeignKey: fk1.from,\n\t\t\t\t\t\t\t\ttype: \"many-to-many\",\n\t\t\t\t\t\t\t\tjoinTable: tableName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add relationship from table2 to table1\n\t\t\t\t\tconst table1CollectionName = pluralize(fk1.table);\n\t\t\t\t\tconst table2Schema = schema[fk2.table];\n\t\t\t\t\tif (table2Schema) {\n\t\t\t\t\t\ttable2Schema[table1CollectionName] = {\n\t\t\t\t\t\t\ttype: \"ARRAY\",\n\t\t\t\t\t\t\trelation: {\n\t\t\t\t\t\t\t\ttable: fk1.table,\n\t\t\t\t\t\t\t\tforeignKey: fk2.from,\n\t\t\t\t\t\t\t\ttype: \"many-to-many\",\n\t\t\t\t\t\t\t\tjoinTable: tableName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Utility function to create schema from database file path (Node.js environments)\n * This is an example implementation using sqlite3 package\n */\nexport async function createSchemaFromFile(dbPath: string): Promise<Schema> {\n\t// This would require the sqlite3 package to be installed\n\t// npm install sqlite3 @types/sqlite3\n\n\tconst Database = require(\"sqlite3\").Database;\n\n\treturn new Promise((resolve, reject) => {\n\t\tconst db = new Database(dbPath, (err: Error | null) => {\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dbWrapper: DatabaseConnection = {\n\t\t\t\tall: (query: string) => {\n\t\t\t\t\treturn new Promise((resolveQuery, rejectQuery) => {\n\t\t\t\t\t\tdb.all(query, [], (err: Error | null, rows: unknown[]) => {\n\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\trejectQuery(err);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresolveQuery(rows);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tcreateSchemaFromDatabase(dbWrapper)\n\t\t\t\t.then((schema) => {\n\t\t\t\t\tdb.close();\n\t\t\t\t\tresolve(schema);\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tdb.close();\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t});\n\t});\n}\n\n// Example usage:\n/*\nimport { createSchemaFromDatabase, createSchemaFromFile } from './schema-generator';\n\n// Using with a database connection\nconst schema = await createSchemaFromDatabase(dbConnection);\n\n// Using with a file path (Node.js)\nconst schema = await createSchemaFromFile('./database.sqlite');\n\nconsole.log(JSON.stringify(schema, null, 2));\n*/\n"
],
"mappings": "qEAaA,eAAsB,CAAwB,CAC7C,EACkB,CAClB,IAAM,EAAiB,CAAC,EAExB,GAAI,CAEH,IAAM,EAAsB,MAAM,EAAG,IACpC,+HAKD,EAGA,QAAW,KAAS,EAAQ,CAC3B,IAAM,EAAY,EAAM,KACxB,EAAO,GAAa,CAAC,EAGrB,IAAM,EAAwB,MAAM,EAAG,IACtC,qBAAqB,IACtB,EAGM,EAAgC,MAAM,EAAG,IAC9C,2BAA2B,IAC5B,EAGA,QAAW,KAAU,EAAS,CAC7B,IAAM,EAAY,EAAO,KACnB,EAAa,EAAO,KAAK,YAAY,EAGrC,EAAa,EAAc,CAAU,EAGrC,EAAa,EAAO,KAAO,EAAI,GAAQ,EAAO,UAAY,EAEhE,EAAO,GAAW,GAAa,CAC9B,KAAM,EACN,SAAU,CACX,EAGA,IAAM,EAAS,EAAY,KAAK,CAAC,IAAO,EAAG,OAAS,CAAS,EAC7D,GAAI,EAAQ,CAEX,EAAO,GAAW,GAAW,SAAW,CACvC,MAAO,EAAO,MACd,WAAY,EACZ,KAAM,aACP,EAGA,IAAI,EAAmC,KAEvC,GAAI,EAAU,SAAS,KAAK,EAE3B,EAAoB,EAAU,QAAQ,OAAQ,EAAE,EAC1C,QAAI,EAAU,SAAS,IAAI,EAEjC,EAAoB,EAAU,QAAQ,MAAO,EAAE,EAGhD,GAAI,EACH,EAAO,GAAW,GAAqB,CACtC,KAAM,SACN,SAAU,CACT,MAAO,EAAO,MACd,WAAY,EACZ,KAAM,aACP,CACD,IAOJ,QAAW,KAAS,EAAQ,CAC3B,IAAM,EAAY,EAAM,KAClB,EAAgC,MAAM,EAAG,IAC9C,2BAA2B,IAC5B,EAEA,QAAW,KAAM,EAAa,CAC7B,IAA2B,MAArB,EACsB,GAAtB,GAAmB,EAGzB,GAAI,EAAO,GAAkB,CAE5B,IAAM,EAAsB,EAE5B,EAAO,GAAiB,GAAuB,CAC9C,KAAM,QACN,SAAU,CACT,MAAO,EACP,WAAY,EAAG,KACf,KAAM,aACP,CACD,IAQH,OAFA,MAAM,EAA8B,EAAI,EAAQ,CAAM,EAE/C,EACN,MAAO,EAAO,CACf,MAAM,IAAI,MACT,0CAA0C,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAChG,GAOF,SAAS,CAAa,CAAC,EAA4B,CAMlD,OALa,EAAW,YAAY,EAGd,MAAM,GAAG,EAAE,QAG3B,cACA,UACA,cACA,eACA,gBACA,aACA,uBACA,WACA,OACJ,MAAO,cAEH,gBACA,cACA,wBACA,YACA,uBACA,eACA,WACA,OACJ,MAAO,WAEH,WACA,aACA,uBACA,YACA,cACA,UACJ,MAAO,WAEH,UACJ,MAAO,cAEH,OACJ,MAAO,WAEH,eACA,YACJ,MAAO,eAEH,OACJ,MAAO,eAGP,MAAO,QAOV,SAAS,CAAS,CAAC,EAAsB,CACxC,OAAO,EAoBR,eAAe,CAA6B,CAC3C,EACA,EACA,EACgB,CAChB,QAAW,KAAS,EAAQ,CAC3B,IAAM,EAAY,EAAM,KAClB,EAAwB,MAAM,EAAG,IACtC,qBAAqB,IACtB,EACM,EAAgC,MAAM,EAAG,IAC9C,2BAA2B,IAC5B,EAGA,GAAI,EAAY,SAAW,GAM1B,GALqB,EAAQ,OAC5B,CAAC,KAAS,EAAY,KAAK,CAAC,IAAO,EAAG,OAAS,EAAI,IAAI,CACxD,EAGiB,QAAU,EAAG,CAC7B,IAAM,EAAM,EAAY,GAClB,EAAM,EAAY,GAGxB,GAAI,GAAO,GAAO,EAAO,EAAI,QAAU,EAAO,EAAI,OAAQ,CAEzD,IAAM,EAAuB,EAAU,EAAI,KAAK,EAC1C,EAAe,EAAO,EAAI,OAChC,GAAI,EACH,EAAa,GAAwB,CACpC,KAAM,QACN,SAAU,CACT,MAAO,EAAI,MACX,WAAY,EAAI,KAChB,KAAM,eACN,UAAW,CACZ,CACD,EAID,IAAM,EAAuB,EAAU,EAAI,KAAK,EAC1C,EAAe,EAAO,EAAI,OAChC,GAAI,EACH,EAAa,GAAwB,CACpC,KAAM,QACN,SAAU,CACT,MAAO,EAAI,MACX,WAAY,EAAI,KAChB,KAAM,eACN,UAAW,CACZ,CACD,MAYN,eAAsB,CAAoB,CAAC,EAAiC,CAI3E,IAAM,eAA8B,SAEpC,OAAO,IAAI,QAAQ,CAAC,EAAS,IAAW,CACvC,IAAM,EAAK,IAAI,EAAS,EAAQ,CAAC,IAAsB,CACtD,GAAI,EAAK,CACR,EAAO,CAAG,EACV,OAiBD,EAdsC,CACrC,IAAK,CAAC,IAAkB,CACvB,OAAO,IAAI,QAAQ,CAAC,EAAc,IAAgB,CACjD,EAAG,IAAI,EAAO,CAAC,EAAG,CAAC,EAAmB,IAAoB,CACzD,GAAI,EACH,EAAY,CAAG,EAEf,OAAa,CAAI,EAElB,EACD,EAEH,CAEkC,EAChC,KAAK,CAAC,IAAW,CACjB,EAAG,MAAM,EACT,EAAQ,CAAM,EACd,EACA,MAAM,CAAC,IAAU,CACjB,EAAG,MAAM,EACT,EAAO,CAAK,EACZ,EACF,EACD",
"debugId": "171EA47C4758D8C164756E2164756E21",
"names": []
}
{"version":3,"file":"schema-generator.js","sourceRoot":"","sources":["../src/schema-generator.ts"],"names":[],"mappings":"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"}

@@ -10,4 +10,12 @@ /**

foreignKey: string;
type: "one-to-many" | "many-to-one" | "many-to-many";
type: "one-to-one" | "one-to-many" | "many-to-one" | "many-to-many";
sourceTable?: string;
sourceColumn?: string;
targetTable?: string;
targetColumn?: string;
joinTable?: string;
joinSourceColumn?: string;
joinTargetColumn?: string;
joinSourceTargetColumn?: string;
joinTargetTargetColumn?: string;
};

@@ -33,3 +41,5 @@ }

fieldName: string;
outputName?: string;
isRelation: boolean;
flatten?: boolean;
nestedSelections?: ProcessedSelection[];

@@ -36,0 +46,0 @@ relationInfo?: NonNullable<SchemaField["relation"]>;

@@ -1,1 +0,1 @@

{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}

@@ -1,3 +0,5 @@

//# debugId=B814F336E460240064756E2164756E21
//# sourceMappingURL=./publictypes.js.map
/**
* Core type definitions for GQLite - GraphQL to SQLite Converter
*/
export {};
//# sourceMappingURL=types.js.map

@@ -1,9 +0,1 @@

{
"version": 3,
"sources": [],
"sourcesContent": [
],
"mappings": "",
"debugId": "B814F336E460240064756E2164756E21",
"names": []
}
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
{
"name": "@gqlite/gql2sql",
"description": "GraphQL => SQL (SQLite)",
"version": "0.1.4",
"publishConfig": {
"access": "public"
},
"module": "dist/index.js",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"type": "module",
"files": [
"dist"
],
"scripts": {
"build": "tsc -p tsconfig.build.json",
"test": "bun run-tests.ts",
"test:verbose": "bun run-tests.ts --verbose",
"test:filter": "bun run-tests.ts --filter",
"test:single": "bun test"
},
"peerDependencies": {
"graphql": "^16.11.0"
},
"devDependencies": {
"@types/bun": "latest",
"graphql": "^16.11.0"
}
"name": "@gqlite/gql2sql",
"description": "GraphQL => SQL (SQLite)",
"version": "1.0.0",
"publishConfig": {
"access": "public"
},
"module": "dist/index.js",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js"
}
},
"type": "module",
"files": [
"dist"
],
"scripts": {
"build": "tsc -p tsconfig.build.json",
"test": "bun run-tests.ts",
"test:verbose": "bun run-tests.ts --verbose",
"test:filter": "bun run-tests.ts --filter",
"test:single": "bun test"
},
"peerDependencies": {
"graphql": "^16.11.0"
},
"devDependencies": {
"@types/bun": "latest",
"graphql": "^16.11.0"
}
}
+87
-15

@@ -7,11 +7,40 @@ # gql2sql - GraphQL to SQLite Converter

✅ **GraphQL to SQL Conversion** - Convert GraphQL queries to optimized SQLite SQL
✅ **Automatic Schema Generation** - Generate GraphQL schema from existing SQLite databases
✅ **Relationship Handling** - Support for one-to-many, many-to-one relationships
✅ **Deep Nesting Support** - Handle complex nested queries with unlimited depth
✅ **WHERE Operators** - Advanced filtering with `>`, `<`, `>=`, `<=`, `like`, `!=` operators
✅ **SQL Injection Protection** - Prepared statements with parameter binding
✅ **N+1 Problem Prevention** - Optimized JOIN queries to avoid N+1 issues
✅ **JSON Response Format** - Clean JSON output using SQLite's JSON functions
- ✅ **GraphQL to SQL Conversion** - Convert GraphQL queries to optimized SQLite SQL
- ✅ **Automatic Schema Generation** - Generate GraphQL schema from existing SQLite databases
- ✅ **Relationship Handling** - Support for one-to-many, many-to-one, one-to-one, and many-to-many relationships
- ✅ **Deep Nesting Support** - Handle complex nested queries with unlimited depth
- ✅ **WHERE Operators** - Advanced filtering with `>`, `<`, `>=`, `<=`, `like`, `!=` operators
- ✅ **SQL Injection Protection** - Prepared statements with parameter binding
- ✅ **N+1 Problem Prevention** - Optimized JOIN queries to avoid N+1 issues
- ✅ **JSON Response Format** - Clean JSON output using SQLite's JSON functions
- ✅ **Persisted Query Compilation** - Generate stable operation registries, readable manifests, and compact server maps
## `@flatten` Directive
`@flatten` can be used on root `many-to-one` or `one-to-one` relation fields to inline selected child scalar fields into the parent row.
```graphql
query {
profiles {
id
user @flatten {
userName: name
}
}
}
```
Result:
```json
[{ "id": 1, "userName": "Ada" }]
```
Current limits:
- `@flatten` is only supported on root relation fields.
- `one-to-many` and `many-to-many` array relations are rejected.
- flattened child selections must be scalar fields.
- flattened output names must not conflict with parent fields.
## Quick Start

@@ -21,7 +50,10 @@

import { Database } from "bun:sqlite";
import { graphqlToSqlite } from "./src/gq2sql";
import { createSchemaFromDatabase } from "./src/schema-generator";
import { createSchemaFromDatabase, graphqlToSqlite } from "@gqlite/gql2sql";
const db = new Database("database.sqlite");
const schema = await createSchemaFromDatabase(db);
const schema = await createSchemaFromDatabase({
async all(sql) {
return db.query(sql).all();
},
});

@@ -98,3 +130,3 @@ const query = `

```typescript
import { createSchemaFromDatabase } from "./src/schema-generator";
import { createSchemaFromDatabase } from "@gqlite/gql2sql";

@@ -112,3 +144,6 @@ const dbConnection = {

- Table structures and column types
- Foreign key relationships
- Foreign key relationships
- One-to-one relationships from unique foreign keys
- Many-to-many relationships from junction tables, including payload-column junction tables
- Non-`id` source/target columns for relation joins
- Primary keys and constraints

@@ -216,6 +251,6 @@ - Nullable fields

# Using Bun
bun add graphql
bun add @gqlite/gql2sql graphql
# Using npm
npm install graphql
npm install @gqlite/gql2sql graphql
```

@@ -302,2 +337,39 @@

### `compilePersistedOperations(operations, schema, registry?, options?)`
Compile GraphQL operations into persisted query artifacts.
**Parameters:**
- `operations`: array of `{ graphql, operationName?, paramNames? }`.
- `schema`: generated `Schema` object.
- `registry`: existing `PersistedOperationRegistry`; use `createEmptyPersistedOperationRegistry()` for a new project.
- `options`: optional `{ schemaHash, compilerVersion, now }`.
**Returns:** `PersistedCompileResult` with:
- `registry`: stable integer ID registry keyed by canonical GraphQL hash.
- `manifest`: readable manifest with plan kind, SQL, and params.
- `compactMap`: compact runtime map for `@gqlite/tag` server execution.
- `assignments`: operation ID assignments for the current compile.
Single-root operations compile to `single-sql`. Multi-root operations compile to `multi-step`.
```ts
import {
compilePersistedOperations,
createEmptyPersistedOperationRegistry,
} from "@gqlite/gql2sql";
const result = compilePersistedOperations(
[{ graphql: "query ListUsers { users { id name } }" }],
schema,
createEmptyPersistedOperationRegistry(),
);
```
### `validatePersistedRegistry(registry)`
Validate a persisted operation registry before using it in CI or build hooks. The check rejects invalid hash keys, hash/query mismatches, duplicate or invalid IDs, and `nextId` values that would reuse an existing ID.
## Testing

@@ -304,0 +376,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display