@gqlite/gql2sql
Advanced tools
| 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 +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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"} |
+3
-2
| 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"} |
+6
-4
@@ -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
@@ -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"} |
+318
-3
@@ -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": "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", | ||
| "debugId": "171EA47C4758D8C164756E2164756E21", | ||
| "names": [] | ||
| } | ||
| {"version":3,"file":"schema-generator.js","sourceRoot":"","sources":["../src/schema-generator.ts"],"names":[],"mappings":"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"} |
+11
-1
@@ -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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"} |
+5
-3
@@ -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"} |
+33
-27
| { | ||
| "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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
216635
31.23%26
18.18%2600
595.19%1
-80%433
19.94%13
1200%1
Infinity%