@cedarjs/gqlorm 2.6.1-next.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/cjs/generator/graphqlGenerator.d.ts +24 -0
  4. package/dist/cjs/generator/graphqlGenerator.d.ts.map +1 -0
  5. package/dist/cjs/generator/graphqlGenerator.js +421 -0
  6. package/dist/cjs/live/types.d.ts +262 -0
  7. package/dist/cjs/live/types.d.ts.map +1 -0
  8. package/dist/cjs/live/types.js +16 -0
  9. package/dist/cjs/package.json +1 -0
  10. package/dist/cjs/parser/queryParser.d.ts +27 -0
  11. package/dist/cjs/parser/queryParser.d.ts.map +1 -0
  12. package/dist/cjs/parser/queryParser.js +338 -0
  13. package/dist/cjs/queryBuilder.d.ts +106 -0
  14. package/dist/cjs/queryBuilder.d.ts.map +1 -0
  15. package/dist/cjs/queryBuilder.js +225 -0
  16. package/dist/cjs/react/useLiveQuery.d.ts +12 -0
  17. package/dist/cjs/react/useLiveQuery.d.ts.map +1 -0
  18. package/dist/cjs/react/useLiveQuery.js +62 -0
  19. package/dist/cjs/types/ast.d.ts +80 -0
  20. package/dist/cjs/types/ast.d.ts.map +1 -0
  21. package/dist/cjs/types/ast.js +16 -0
  22. package/dist/cjs/types/orm.d.ts +157 -0
  23. package/dist/cjs/types/orm.d.ts.map +1 -0
  24. package/dist/cjs/types/orm.js +16 -0
  25. package/dist/cjs/types/orm_for_testing.d.ts +44 -0
  26. package/dist/cjs/types/orm_for_testing.d.ts.map +1 -0
  27. package/dist/cjs/types/orm_for_testing.js +16 -0
  28. package/dist/cjs/types/schema.d.ts +4 -0
  29. package/dist/cjs/types/schema.d.ts.map +1 -0
  30. package/dist/cjs/types/schema.js +16 -0
  31. package/dist/cjs/types/typeUtils.d.ts +10 -0
  32. package/dist/cjs/types/typeUtils.d.ts.map +1 -0
  33. package/dist/cjs/types/typeUtils.js +65 -0
  34. package/dist/generator/graphqlGenerator.d.ts +24 -0
  35. package/dist/generator/graphqlGenerator.d.ts.map +1 -0
  36. package/dist/generator/graphqlGenerator.js +399 -0
  37. package/dist/live/types.d.ts +262 -0
  38. package/dist/live/types.d.ts.map +1 -0
  39. package/dist/live/types.js +0 -0
  40. package/dist/parser/queryParser.d.ts +27 -0
  41. package/dist/parser/queryParser.d.ts.map +1 -0
  42. package/dist/parser/queryParser.js +312 -0
  43. package/dist/queryBuilder.d.ts +106 -0
  44. package/dist/queryBuilder.d.ts.map +1 -0
  45. package/dist/queryBuilder.js +196 -0
  46. package/dist/react/useLiveQuery.d.ts +12 -0
  47. package/dist/react/useLiveQuery.d.ts.map +1 -0
  48. package/dist/react/useLiveQuery.js +38 -0
  49. package/dist/types/ast.d.ts +80 -0
  50. package/dist/types/ast.d.ts.map +1 -0
  51. package/dist/types/ast.js +0 -0
  52. package/dist/types/orm.d.ts +157 -0
  53. package/dist/types/orm.d.ts.map +1 -0
  54. package/dist/types/orm.js +0 -0
  55. package/dist/types/orm_for_testing.d.ts +44 -0
  56. package/dist/types/orm_for_testing.d.ts.map +1 -0
  57. package/dist/types/orm_for_testing.js +0 -0
  58. package/dist/types/schema.d.ts +4 -0
  59. package/dist/types/schema.d.ts.map +1 -0
  60. package/dist/types/schema.js +0 -0
  61. package/dist/types/typeUtils.d.ts +10 -0
  62. package/dist/types/typeUtils.d.ts.map +1 -0
  63. package/dist/types/typeUtils.js +34 -0
  64. package/package.json +163 -0
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Main query builder entry point that combines parsing and generation
3
+ * This is the primary API that users will interact with
4
+ */
5
+ import { GraphQLGenerateError } from './generator/graphqlGenerator.js';
6
+ import type { GraphQLQuery } from './generator/graphqlGenerator.js';
7
+ import { QueryParseError } from './parser/queryParser.js';
8
+ import type { QueryAST, QueryOperation } from './types/ast.js';
9
+ import { type FindFirstArgs, type FindManyArgs, type FindUniqueArgs, type FrameworkDbClient, type QueryFunction } from './types/orm.js';
10
+ import type { ModelSchema } from './types/schema.js';
11
+ export declare class QueryBuilderError extends Error {
12
+ cause?: Error | undefined;
13
+ constructor(message: string, cause?: Error | undefined);
14
+ }
15
+ type GenericQueryArgs = FindManyArgs<unknown> | FindUniqueArgs<unknown> | FindFirstArgs<unknown>;
16
+ export interface QueryBuilderOptions {
17
+ /**
18
+ * Whether to validate queries against schema (future feature)
19
+ */
20
+ readonly validateSchema?: boolean;
21
+ /**
22
+ * Whether to optimize queries (future feature)
23
+ */
24
+ readonly optimizeQueries?: boolean;
25
+ /**
26
+ * Custom field name mappings (future feature)
27
+ */
28
+ fieldMappings?: Record<string, string>;
29
+ /**
30
+ * Whether to automatically add @live directive to queries
31
+ * @default false
32
+ */
33
+ readonly enableLiveQueries?: boolean;
34
+ /**
35
+ * Whether to force @live directive on all queries (overrides
36
+ * enableLiveQueries)
37
+ * @default false
38
+ */
39
+ readonly forceLiveQueries?: boolean;
40
+ /**
41
+ * Model schema defining scalar fields for each model
42
+ */
43
+ readonly schema?: ModelSchema;
44
+ }
45
+ export declare class QueryBuilder {
46
+ #private;
47
+ constructor(options?: QueryBuilderOptions);
48
+ /**
49
+ * Build GraphQL query from ORM-style query
50
+ */
51
+ build(model: string, operation: QueryOperation, args?: GenericQueryArgs, options?: {
52
+ isLive?: boolean;
53
+ }): GraphQLQuery;
54
+ /**
55
+ * Build GraphQL query from a query function (used with useLiveQuery)
56
+ */
57
+ buildFromFunction<T, TDb extends object = FrameworkDbClient>(queryFn: QueryFunction<T, TDb>, options?: {
58
+ isLive?: boolean;
59
+ }): GraphQLQuery;
60
+ /**
61
+ * Capture query details from a query function using a proxy
62
+ */
63
+ private captureQuery;
64
+ /**
65
+ * Create a proxy database client that captures method calls
66
+ */
67
+ private createProxyDatabase;
68
+ /**
69
+ * Create a proxy model delegate that captures method calls
70
+ */
71
+ private createModelDelegate;
72
+ /**
73
+ * Parse AST from query (exposed for advanced usage)
74
+ */
75
+ parseAST(model: string, operation: QueryOperation, args?: GenericQueryArgs): QueryAST;
76
+ /**
77
+ * Generate GraphQL from AST (exposed for advanced usage)
78
+ */
79
+ generateGraphQL(ast: QueryAST): GraphQLQuery;
80
+ /**
81
+ * Get query builder options
82
+ */
83
+ getOptions(): QueryBuilderOptions;
84
+ /**
85
+ * Update query builder options
86
+ */
87
+ updateOptions(newOptions: Partial<QueryBuilderOptions>): void;
88
+ }
89
+ export declare const queryBuilder: QueryBuilder;
90
+ export declare function buildQuery(model: string, operation: QueryOperation, args?: GenericQueryArgs, options?: {
91
+ isLive?: boolean;
92
+ }): GraphQLQuery;
93
+ export declare function buildQueryFromFunction<T, TDb extends object = FrameworkDbClient>(queryFn: QueryFunction<T, TDb>, options?: {
94
+ isLive?: boolean;
95
+ }): GraphQLQuery;
96
+ /**
97
+ * Build a live GraphQL query from ORM-style query (convenience function)
98
+ */
99
+ export declare function buildLiveQuery(model: string, operation: QueryOperation, args?: GenericQueryArgs): GraphQLQuery;
100
+ /**
101
+ * Build a live GraphQL query from a query function (convenience function)
102
+ */
103
+ export declare function buildLiveQueryFromFunction<T, TDb extends object = FrameworkDbClient>(queryFn: QueryFunction<T, TDb>): GraphQLQuery;
104
+ export { GraphQLGenerateError, QueryParseError };
105
+ export type { GraphQLQuery, QueryAST, QueryOperation, ModelSchema };
106
+ //# sourceMappingURL=queryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryBuilder.d.ts","sourceRoot":"","sources":["../../src/queryBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var queryBuilder_exports = {};
20
+ __export(queryBuilder_exports, {
21
+ GraphQLGenerateError: () => import_graphqlGenerator.GraphQLGenerateError,
22
+ QueryBuilder: () => QueryBuilder,
23
+ QueryBuilderError: () => QueryBuilderError,
24
+ QueryParseError: () => import_queryParser.QueryParseError,
25
+ buildLiveQuery: () => buildLiveQuery,
26
+ buildLiveQueryFromFunction: () => buildLiveQueryFromFunction,
27
+ buildQuery: () => buildQuery,
28
+ buildQueryFromFunction: () => buildQueryFromFunction,
29
+ queryBuilder: () => queryBuilder
30
+ });
31
+ module.exports = __toCommonJS(queryBuilder_exports);
32
+ var import_graphqlGenerator = require("./generator/graphqlGenerator.js");
33
+ var import_queryParser = require("./parser/queryParser.js");
34
+ class QueryBuilderError extends Error {
35
+ constructor(message, cause) {
36
+ super(message);
37
+ this.cause = cause;
38
+ this.name = "QueryBuilderError";
39
+ }
40
+ }
41
+ class QueryBuilder {
42
+ #parser = new import_queryParser.QueryParser();
43
+ #generator;
44
+ #options;
45
+ constructor(options = {}) {
46
+ this.#options = structuredClone(options);
47
+ this.#generator = new import_graphqlGenerator.GraphQLGenerator(options.schema);
48
+ }
49
+ /**
50
+ * Build GraphQL query from ORM-style query
51
+ */
52
+ build(model, operation, args, options) {
53
+ try {
54
+ const ast = this.#parser.parseQuery(model, operation, args);
55
+ const isLive = this.#shouldUseLiveQuery(options?.isLive);
56
+ if (isLive) {
57
+ ast.isLive = true;
58
+ }
59
+ this.#parser.validateAST(ast);
60
+ const graphqlQuery = this.#generator.generate(ast);
61
+ return graphqlQuery;
62
+ } catch (error) {
63
+ if (error instanceof import_queryParser.QueryParseError || error instanceof import_graphqlGenerator.GraphQLGenerateError) {
64
+ throw new QueryBuilderError(
65
+ `Failed to build query: ${error.message}`,
66
+ error
67
+ );
68
+ }
69
+ throw error;
70
+ }
71
+ }
72
+ buildFromFunction(queryFn, options) {
73
+ const capturedQuery = this.captureQuery(queryFn);
74
+ if (!capturedQuery) {
75
+ throw new QueryBuilderError(
76
+ "No query was captured from the provided function"
77
+ );
78
+ }
79
+ return this.build(
80
+ capturedQuery.model,
81
+ capturedQuery.operation,
82
+ capturedQuery.args,
83
+ options
84
+ );
85
+ }
86
+ /**
87
+ * Capture query details from a query function using a proxy
88
+ */
89
+ captureQuery(queryFn) {
90
+ let capturedQuery = null;
91
+ const proxyDb = this.createProxyDatabase((model, operation, args) => {
92
+ capturedQuery = { model, operation, args };
93
+ return {};
94
+ });
95
+ try {
96
+ queryFn(proxyDb);
97
+ return capturedQuery;
98
+ } catch (error) {
99
+ const e = error instanceof Error ? error : new Error(String(error));
100
+ throw new QueryBuilderError("Failed to capture query from function", e);
101
+ }
102
+ }
103
+ /**
104
+ * Create a proxy database client that captures method calls
105
+ */
106
+ createProxyDatabase(onQuery) {
107
+ const proxyTarget = {};
108
+ return new Proxy(proxyTarget, {
109
+ get: (_, modelName) => {
110
+ if (typeof modelName !== "string") {
111
+ return void 0;
112
+ }
113
+ return this.createModelDelegate(modelName, onQuery);
114
+ }
115
+ });
116
+ }
117
+ /**
118
+ * Create a proxy model delegate that captures method calls
119
+ */
120
+ createModelDelegate(model, onQuery) {
121
+ return {
122
+ findMany: (args) => {
123
+ onQuery(model, "findMany", args);
124
+ return Promise.resolve([]);
125
+ },
126
+ findUnique: (args) => {
127
+ onQuery(model, "findUnique", args);
128
+ return Promise.resolve(null);
129
+ },
130
+ findFirst: (args) => {
131
+ onQuery(model, "findFirst", args);
132
+ return Promise.resolve(null);
133
+ },
134
+ findUniqueOrThrow: (args) => {
135
+ onQuery(model, "findUniqueOrThrow", args);
136
+ return Promise.resolve(void 0);
137
+ },
138
+ findFirstOrThrow: (args) => {
139
+ onQuery(model, "findFirstOrThrow", args);
140
+ return Promise.resolve(void 0);
141
+ }
142
+ };
143
+ }
144
+ /**
145
+ * Parse AST from query (exposed for advanced usage)
146
+ */
147
+ parseAST(model, operation, args) {
148
+ try {
149
+ return this.#parser.parseQuery(model, operation, args);
150
+ } catch (error) {
151
+ if (error instanceof import_queryParser.QueryParseError) {
152
+ throw new QueryBuilderError(
153
+ `Failed to parse query: ${error.message}`,
154
+ error
155
+ );
156
+ }
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Generate GraphQL from AST (exposed for advanced usage)
162
+ */
163
+ generateGraphQL(ast) {
164
+ try {
165
+ return this.#generator.generate(ast);
166
+ } catch (error) {
167
+ if (error instanceof import_graphqlGenerator.GraphQLGenerateError) {
168
+ throw new QueryBuilderError(
169
+ `Failed to generate GraphQL: ${error.message}`,
170
+ error
171
+ );
172
+ }
173
+ throw error;
174
+ }
175
+ }
176
+ /**
177
+ * Get query builder options
178
+ */
179
+ getOptions() {
180
+ return structuredClone(this.#options);
181
+ }
182
+ /**
183
+ * Update query builder options
184
+ */
185
+ updateOptions(newOptions) {
186
+ this.#options = { ...this.#options, ...newOptions };
187
+ }
188
+ /**
189
+ * Determine if a query should use @live directive
190
+ */
191
+ #shouldUseLiveQuery(explicitIsLive) {
192
+ if (explicitIsLive !== void 0) {
193
+ return explicitIsLive;
194
+ }
195
+ if (this.#options.forceLiveQueries) {
196
+ return true;
197
+ }
198
+ return this.#options.enableLiveQueries || false;
199
+ }
200
+ }
201
+ const queryBuilder = new QueryBuilder();
202
+ function buildQuery(model, operation, args, options) {
203
+ return queryBuilder.build(model, operation, args, options);
204
+ }
205
+ function buildQueryFromFunction(queryFn, options) {
206
+ return queryBuilder.buildFromFunction(queryFn, options);
207
+ }
208
+ function buildLiveQuery(model, operation, args) {
209
+ return queryBuilder.build(model, operation, args, { isLive: true });
210
+ }
211
+ function buildLiveQueryFromFunction(queryFn) {
212
+ return queryBuilder.buildFromFunction(queryFn, { isLive: true });
213
+ }
214
+ // Annotate the CommonJS export names for ESM import in node:
215
+ 0 && (module.exports = {
216
+ GraphQLGenerateError,
217
+ QueryBuilder,
218
+ QueryBuilderError,
219
+ QueryParseError,
220
+ buildLiveQuery,
221
+ buildLiveQueryFromFunction,
222
+ buildQuery,
223
+ buildQueryFromFunction,
224
+ queryBuilder
225
+ });
@@ -0,0 +1,12 @@
1
+ /**
2
+ * React hook for live data fetching using GraphQL queries with `@live`
3
+ * generated from Prisma-like query functions.
4
+ */
5
+ import { useQuery as cedarUseQuery } from '@cedarjs/web';
6
+ import type { FrameworkDbClient, QueryFunction } from '../types/orm.js';
7
+ export type UseLiveQueryOptions = Omit<NonNullable<Parameters<typeof cedarUseQuery>[1]>, 'variables'>;
8
+ export type UseLiveQueryResult<T> = Omit<ReturnType<typeof cedarUseQuery>, 'data'> & {
9
+ data: T | undefined;
10
+ };
11
+ export declare function useLiveQuery<T, TDb extends object = FrameworkDbClient>(queryFn: QueryFunction<T, TDb>, options?: UseLiveQueryOptions): UseLiveQueryResult<T>;
12
+ //# sourceMappingURL=useLiveQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveQuery.d.ts","sourceRoot":"","sources":["../../../src/react/useLiveQuery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKvE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,WAAW,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAChD,WAAW,CACZ,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,IAAI,CACtC,UAAU,CAAC,OAAO,aAAa,CAAC,EAChC,MAAM,CACP,GAAG;IACF,IAAI,EAAE,CAAC,GAAG,SAAS,CAAA;CACpB,CAAA;AAYD,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,SAAS,MAAM,GAAG,iBAAiB,EACpE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,EAC9B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,kBAAkB,CAAC,CAAC,CAAC,CA4BvB"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var useLiveQuery_exports = {};
20
+ __export(useLiveQuery_exports, {
21
+ useLiveQuery: () => useLiveQuery
22
+ });
23
+ module.exports = __toCommonJS(useLiveQuery_exports);
24
+ var import_react = require("react");
25
+ var import_graphql = require("graphql");
26
+ var import_web = require("@cedarjs/web");
27
+ var import_queryBuilder = require("../queryBuilder.js");
28
+ function extractRootFieldData(payload) {
29
+ if (!payload) {
30
+ return void 0;
31
+ }
32
+ return Object.values(payload)[0];
33
+ }
34
+ function useLiveQuery(queryFn, options) {
35
+ const { query, variables } = (0, import_react.useMemo)(() => {
36
+ try {
37
+ const graphqlQuery = import_queryBuilder.queryBuilder.buildFromFunction(queryFn, {
38
+ isLive: true
39
+ });
40
+ return {
41
+ query: graphqlQuery.query,
42
+ variables: graphqlQuery.variables ?? {}
43
+ };
44
+ } catch (error) {
45
+ const errorMsg = error instanceof Error ? error.message : String(error);
46
+ throw new Error(`Failed to build GraphQL query: ${errorMsg}`);
47
+ }
48
+ }, [queryFn]);
49
+ const document = (0, import_react.useMemo)(() => (0, import_graphql.parse)(query), [query]);
50
+ const queryResult = (0, import_web.useQuery)(document, {
51
+ ...options ?? {},
52
+ variables
53
+ });
54
+ return {
55
+ ...queryResult,
56
+ data: extractRootFieldData(queryResult.data)
57
+ };
58
+ }
59
+ // Annotate the CommonJS export names for ESM import in node:
60
+ 0 && (module.exports = {
61
+ useLiveQuery
62
+ });
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Abstract Syntax Tree (AST) types for representing parsed ORM queries
3
+ * These types form the intermediate representation between ORM syntax and
4
+ * GraphQL queries
5
+ */
6
+ export interface ASTNode {
7
+ type: string;
8
+ }
9
+ export type QueryOperation = 'findMany' | 'findUnique' | 'findFirst' | 'findUniqueOrThrow' | 'findFirstOrThrow';
10
+ export interface QueryAST extends ASTNode {
11
+ type: 'Query';
12
+ model: string;
13
+ operation: QueryOperation;
14
+ args?: QueryArgsAST;
15
+ isLive?: boolean;
16
+ }
17
+ export interface QueryArgsAST extends ASTNode {
18
+ type: 'QueryArgs';
19
+ where?: WhereAST;
20
+ select?: SelectAST;
21
+ include?: IncludeAST;
22
+ orderBy?: OrderByAST;
23
+ take?: number;
24
+ skip?: number;
25
+ }
26
+ export interface WhereAST extends ASTNode {
27
+ type: 'Where';
28
+ conditions: WhereCondition[];
29
+ }
30
+ export type WhereCondition = FieldCondition | LogicalCondition | RelationCondition;
31
+ export interface FieldCondition extends ASTNode {
32
+ type: 'FieldCondition';
33
+ field: string;
34
+ operator: ComparisonOperator;
35
+ value: any;
36
+ }
37
+ export interface LogicalCondition extends ASTNode {
38
+ type: 'LogicalCondition';
39
+ operator: LogicalOperator;
40
+ conditions: WhereCondition[];
41
+ }
42
+ export interface RelationCondition extends ASTNode {
43
+ type: 'RelationCondition';
44
+ relation: string;
45
+ condition: WhereAST;
46
+ }
47
+ export type ComparisonOperator = 'equals' | 'not' | 'in' | 'notIn' | 'lt' | 'lte' | 'gt' | 'gte' | 'contains' | 'startsWith' | 'endsWith' | 'isNull' | 'isNotNull';
48
+ export type LogicalOperator = 'AND' | 'OR' | 'NOT';
49
+ export interface SelectAST extends ASTNode {
50
+ type: 'Select';
51
+ fields: FieldSelection[];
52
+ }
53
+ export interface FieldSelection extends ASTNode {
54
+ type: 'FieldSelection';
55
+ field: string;
56
+ selected: boolean;
57
+ nested?: SelectAST | IncludeAST;
58
+ }
59
+ export interface IncludeAST extends ASTNode {
60
+ type: 'Include';
61
+ relations: RelationInclusion[];
62
+ }
63
+ export interface RelationInclusion extends ASTNode {
64
+ type: 'RelationInclusion';
65
+ relation: string;
66
+ included: boolean;
67
+ nested?: IncludeAST;
68
+ args?: QueryArgsAST;
69
+ }
70
+ export interface OrderByAST extends ASTNode {
71
+ type: 'OrderBy';
72
+ fields: OrderByField[];
73
+ }
74
+ export interface OrderByField extends ASTNode {
75
+ type: 'OrderByField';
76
+ field: string;
77
+ direction: 'asc' | 'desc';
78
+ }
79
+ export type ASTNodeType = QueryAST | QueryArgsAST | WhereAST | SelectAST | IncludeAST | OrderByAST | FieldCondition | LogicalCondition | RelationCondition | FieldSelection | RelationInclusion | OrderByField;
80
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../src/types/ast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var ast_exports = {};
16
+ module.exports = __toCommonJS(ast_exports);
@@ -0,0 +1,157 @@
1
+ /**
2
+ * ORM query interface types that define the Prisma-like API surface
3
+ * These types represent the input format that users will write
4
+ */
5
+ export type Scalar = string | number | boolean | Date | null;
6
+ export interface StringFilter {
7
+ equals?: string;
8
+ not?: string | StringFilter;
9
+ in?: string[];
10
+ notIn?: string[];
11
+ lt?: string;
12
+ lte?: string;
13
+ gt?: string;
14
+ gte?: string;
15
+ contains?: string;
16
+ startsWith?: string;
17
+ endsWith?: string;
18
+ }
19
+ export interface NumberFilter {
20
+ equals?: number;
21
+ not?: number | NumberFilter;
22
+ in?: number[];
23
+ notIn?: number[];
24
+ lt?: number;
25
+ lte?: number;
26
+ gt?: number;
27
+ gte?: number;
28
+ }
29
+ export interface BooleanFilter {
30
+ equals?: boolean;
31
+ not?: boolean | BooleanFilter;
32
+ }
33
+ export interface DateFilter {
34
+ equals?: Date;
35
+ not?: Date | DateFilter;
36
+ in?: Date[];
37
+ notIn?: Date[];
38
+ lt?: Date;
39
+ lte?: Date;
40
+ gt?: Date;
41
+ gte?: Date;
42
+ }
43
+ export type Filter<T> = T extends string ? string | StringFilter : T extends number ? number | NumberFilter : T extends boolean ? boolean | BooleanFilter : T extends Date ? Date | DateFilter : T extends null ? null : never;
44
+ export interface LogicalOperators<T> {
45
+ AND?: T[];
46
+ OR?: T[];
47
+ NOT?: T;
48
+ }
49
+ export type WhereInput<T> = {
50
+ [K in keyof T]?: Filter<T[K]>;
51
+ } & LogicalOperators<WhereInput<T>>;
52
+ export type FlexibleWhereInput = {
53
+ [key: string]: any;
54
+ AND?: FlexibleWhereInput[];
55
+ OR?: FlexibleWhereInput[];
56
+ NOT?: FlexibleWhereInput;
57
+ };
58
+ export type AnyWhereInput<T = any> = T extends Record<string, any> ? WhereInput<T> : FlexibleWhereInput;
59
+ export type SortOrder = 'asc' | 'desc';
60
+ export type OrderByInput<T> = {
61
+ [K in keyof T]?: SortOrder;
62
+ };
63
+ export type SelectInput<T> = {
64
+ [K in keyof T]?: boolean;
65
+ };
66
+ export type IncludeInput<T = any> = {
67
+ [K in keyof T]?: boolean | {
68
+ select?: SelectInput<any>;
69
+ include?: IncludeInput<any>;
70
+ where?: AnyWhereInput<any>;
71
+ orderBy?: OrderByInput<any>;
72
+ take?: number;
73
+ skip?: number;
74
+ };
75
+ } & {
76
+ [key: string]: boolean | {
77
+ select?: SelectInput<any>;
78
+ include?: IncludeInput<any>;
79
+ where?: AnyWhereInput<any>;
80
+ orderBy?: OrderByInput<any>;
81
+ take?: number;
82
+ skip?: number;
83
+ };
84
+ };
85
+ export interface BaseQueryArgs<T = any> {
86
+ where?: AnyWhereInput<T>;
87
+ select?: SelectInput<T>;
88
+ include?: IncludeInput<T>;
89
+ orderBy?: OrderByInput<T> | OrderByInput<T>[];
90
+ }
91
+ export interface FindManyArgs<T> extends BaseQueryArgs<T> {
92
+ take?: number;
93
+ skip?: number;
94
+ }
95
+ export interface FindUniqueArgs<T> {
96
+ where: WhereUniqueInput<T>;
97
+ select?: SelectInput<T>;
98
+ include?: IncludeInput<T>;
99
+ }
100
+ export type FindFirstArgs<T> = BaseQueryArgs<T>;
101
+ export type WhereUniqueInput<T> = {
102
+ [K in keyof T]?: T[K];
103
+ };
104
+ export interface ModelDelegate<T = any> {
105
+ findMany(args?: FindManyArgs<T>): Promise<T[]>;
106
+ findUnique(args: FindUniqueArgs<T>): Promise<T | null>;
107
+ findFirst(args?: FindFirstArgs<T>): Promise<T | null>;
108
+ findUniqueOrThrow(args: FindUniqueArgs<T>): Promise<T>;
109
+ findFirstOrThrow(args?: FindFirstArgs<T>): Promise<T>;
110
+ }
111
+ export interface DatabaseClient {
112
+ [modelName: string]: ModelDelegate<any>;
113
+ }
114
+ /**
115
+ * Framework-level type map that can be module-augmented by Cedar generated
116
+ * types. This lets Cedar inject `typeof db` without users writing wrappers.
117
+ *
118
+ * Example augmentation:
119
+ * declare module '@cedarjs/gqlorm/types/orm' {
120
+ * interface GqlormTypeMap {
121
+ * db: typeof db
122
+ * }
123
+ * }
124
+ */
125
+ export interface GqlormTypeMap {
126
+ }
127
+ type DefaultDbClient = GqlormTypeMap extends {
128
+ db: infer TDb;
129
+ } ? TDb : DatabaseClient;
130
+ type ModelDelegatePropertyName<TDb> = {
131
+ [K in keyof TDb]-?: K extends string ? K extends `$${string}` ? never : TDb[K] extends ModelDelegate<any> ? K : never : never;
132
+ }[keyof TDb];
133
+ export type ModelDelegatesOnly<TDb> = [ModelDelegatePropertyName<TDb>] extends [
134
+ never
135
+ ] ? DatabaseClient : Pick<TDb, ModelDelegatePropertyName<TDb>>;
136
+ export type FrameworkDbClient = ModelDelegatesOnly<DefaultDbClient>;
137
+ export interface QueryContext<TDb extends object = FrameworkDbClient> {
138
+ db: TDb;
139
+ }
140
+ export type QueryFunction<T, TDb extends object = FrameworkDbClient> = (db: TDb) => Promise<T> | T;
141
+ export interface QueryResult<T> {
142
+ data: T;
143
+ loading: boolean;
144
+ error?: Error;
145
+ }
146
+ export interface PaginatedResult<T> {
147
+ data: T[];
148
+ pageInfo: {
149
+ hasNextPage: boolean;
150
+ hasPreviousPage: boolean;
151
+ startCursor?: string;
152
+ endCursor?: string;
153
+ };
154
+ totalCount?: number;
155
+ }
156
+ export {};
157
+ //# sourceMappingURL=orm.d.ts.map