hazo_connect 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/__tests__/factory.test.d.ts +2 -0
  2. package/dist/__tests__/factory.test.d.ts.map +1 -0
  3. package/dist/__tests__/factory.test.js +45 -0
  4. package/dist/__tests__/factory.test.js.map +1 -0
  5. package/dist/__tests__/postgrest_adapter.test.d.ts +2 -0
  6. package/dist/__tests__/postgrest_adapter.test.d.ts.map +1 -0
  7. package/dist/__tests__/postgrest_adapter.test.js +32 -0
  8. package/dist/__tests__/postgrest_adapter.test.js.map +1 -0
  9. package/dist/__tests__/query_builder.test.d.ts +2 -0
  10. package/dist/__tests__/query_builder.test.d.ts.map +1 -0
  11. package/dist/__tests__/query_builder.test.js +35 -0
  12. package/dist/__tests__/query_builder.test.js.map +1 -0
  13. package/dist/adapters/base-adapter.d.ts +69 -0
  14. package/dist/adapters/base-adapter.d.ts.map +1 -0
  15. package/dist/adapters/base-adapter.js +121 -0
  16. package/dist/adapters/base-adapter.js.map +1 -0
  17. package/dist/adapters/file-adapter.d.ts +50 -0
  18. package/dist/adapters/file-adapter.d.ts.map +1 -0
  19. package/dist/adapters/file-adapter.js +62 -0
  20. package/dist/adapters/file-adapter.js.map +1 -0
  21. package/dist/adapters/postgrest-adapter.d.ts +60 -0
  22. package/dist/adapters/postgrest-adapter.d.ts.map +1 -0
  23. package/dist/adapters/postgrest-adapter.js +252 -0
  24. package/dist/adapters/postgrest-adapter.js.map +1 -0
  25. package/dist/adapters/sqlite-adapter.d.ts +49 -0
  26. package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
  27. package/dist/adapters/sqlite-adapter.js +61 -0
  28. package/dist/adapters/sqlite-adapter.js.map +1 -0
  29. package/dist/adapters/supabase-adapter.d.ts +50 -0
  30. package/dist/adapters/supabase-adapter.d.ts.map +1 -0
  31. package/dist/adapters/supabase-adapter.js +62 -0
  32. package/dist/adapters/supabase-adapter.js.map +1 -0
  33. package/dist/factory.d.ts +15 -0
  34. package/dist/factory.d.ts.map +1 -0
  35. package/dist/factory.js +89 -0
  36. package/dist/factory.js.map +1 -0
  37. package/dist/helpers.d.ts +76 -0
  38. package/dist/helpers.d.ts.map +1 -0
  39. package/dist/helpers.js +151 -0
  40. package/dist/helpers.js.map +1 -0
  41. package/dist/index.d.ts +15 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +30 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/query-builder.d.ts +143 -0
  46. package/dist/query-builder.d.ts.map +1 -0
  47. package/dist/query-builder.js +216 -0
  48. package/dist/query-builder.js.map +1 -0
  49. package/dist/types.d.ts +117 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +33 -0
  52. package/dist/types.js.map +1 -0
  53. package/package.json +73 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Purpose: Helper utilities for working with Hazo Connect adapters
3
+ *
4
+ * These helpers provide reusable patterns for building queries,
5
+ * executing CRUD operations, and instrumenting interactions without
6
+ * embedding any project-specific knowledge. They allow downstream
7
+ * applications to compose higher-level services while keeping the
8
+ * hazo_connect component self-contained and reusable.
9
+ */
10
+ import { QueryBuilder } from './query-builder';
11
+ import type { HazoConnectAdapter, Logger } from './types';
12
+ /**
13
+ * Method signature supported by Hazo Connect adapters
14
+ */
15
+ export type QueryMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
16
+ /**
17
+ * Query builder with an execute helper bound to an adapter.
18
+ */
19
+ export type ExecutableQueryBuilder = QueryBuilder & {
20
+ execute: (method?: QueryMethod, body?: unknown) => Promise<unknown>;
21
+ };
22
+ /**
23
+ * Create a query builder for a table and attach the adapter execute method.
24
+ * @param adapter - Active Hazo Connect adapter
25
+ * @param table - Table name to query
26
+ * @param logger - Optional logger for diagnostics
27
+ * @returns Executable query builder
28
+ */
29
+ export declare function createTableQuery(adapter: HazoConnectAdapter, table: string, logger?: Logger): ExecutableQueryBuilder;
30
+ /**
31
+ * Attach execute helper to a query builder.
32
+ * @param builder - Query builder instance
33
+ * @param adapter - Active adapter
34
+ * @param logger - Optional logger for diagnostics
35
+ * @returns Executable query builder
36
+ */
37
+ export declare function attachExecute(builder: QueryBuilder, adapter: HazoConnectAdapter, logger?: Logger): ExecutableQueryBuilder;
38
+ /**
39
+ * Options when generating CRUD helpers.
40
+ */
41
+ export interface CrudServiceOptions {
42
+ primaryKeys?: string[];
43
+ logger?: Logger;
44
+ }
45
+ /**
46
+ * Minimal CRUD interface backed by hazo_connect.
47
+ */
48
+ export interface CrudService<T extends Record<string, unknown> = Record<string, unknown>> {
49
+ list(configure?: (qb: QueryBuilder) => QueryBuilder): Promise<T[]>;
50
+ findBy(criteria: Record<string, unknown>): Promise<T[]>;
51
+ findOneBy(criteria: Record<string, unknown>): Promise<T | null>;
52
+ findById(id: unknown): Promise<T | null>;
53
+ insert(data: Partial<T> | Partial<T>[]): Promise<T[]>;
54
+ updateById(id: unknown, patch: Partial<T>): Promise<T[]>;
55
+ deleteById(id: unknown): Promise<void>;
56
+ query(): ExecutableQueryBuilder;
57
+ }
58
+ /**
59
+ * Create a CRUD service wrapper for a PostgREST table.
60
+ * @param adapter - Hazo Connect adapter
61
+ * @param table - Table name
62
+ * @param options - CRUD helper options
63
+ * @returns CRUD service instance
64
+ */
65
+ export declare function createCrudService<T extends Record<string, unknown> = Record<string, unknown>>(adapter: HazoConnectAdapter, table: string, options?: CrudServiceOptions): CrudService<T>;
66
+ /**
67
+ * Execute a query builder with optional logging and error wrapping.
68
+ * @param adapter - Hazo Connect adapter
69
+ * @param builder - Configured query builder
70
+ * @param method - HTTP verb / operation
71
+ * @param body - Optional body payload
72
+ * @param logger - Optional logger for diagnostics
73
+ * @returns Result of adapter query
74
+ */
75
+ export declare function executeQuery(adapter: HazoConnectAdapter, builder: QueryBuilder, method?: QueryMethod, body?: unknown, logger?: Logger): Promise<unknown>;
76
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/lib/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEzD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG;IAClD,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CACpE,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,sBAAsB,CAGxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,kBAAkB,EAC3B,MAAM,CAAC,EAAE,MAAM,GACd,sBAAsB,CAWxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAClE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACvD,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAC/D,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACxC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACrD,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACxD,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,IAAI,sBAAsB,CAAA;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC3F,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAAC,CAAC,CAAC,CAyFhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,YAAY,EACrB,MAAM,GAAE,WAAmB,EAC3B,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAMlB"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * Purpose: Helper utilities for working with Hazo Connect adapters
4
+ *
5
+ * These helpers provide reusable patterns for building queries,
6
+ * executing CRUD operations, and instrumenting interactions without
7
+ * embedding any project-specific knowledge. They allow downstream
8
+ * applications to compose higher-level services while keeping the
9
+ * hazo_connect component self-contained and reusable.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createTableQuery = createTableQuery;
13
+ exports.attachExecute = attachExecute;
14
+ exports.createCrudService = createCrudService;
15
+ exports.executeQuery = executeQuery;
16
+ const query_builder_1 = require("./query-builder");
17
+ /**
18
+ * Create a query builder for a table and attach the adapter execute method.
19
+ * @param adapter - Active Hazo Connect adapter
20
+ * @param table - Table name to query
21
+ * @param logger - Optional logger for diagnostics
22
+ * @returns Executable query builder
23
+ */
24
+ function createTableQuery(adapter, table, logger) {
25
+ const builder = new query_builder_1.QueryBuilder().from(table);
26
+ return attachExecute(builder, adapter, logger);
27
+ }
28
+ /**
29
+ * Attach execute helper to a query builder.
30
+ * @param builder - Query builder instance
31
+ * @param adapter - Active adapter
32
+ * @param logger - Optional logger for diagnostics
33
+ * @returns Executable query builder
34
+ */
35
+ function attachExecute(builder, adapter, logger) {
36
+ const executable = builder;
37
+ executable.execute = async (method = 'GET', body) => {
38
+ logger?.debug?.('Executing Hazo Connect query', {
39
+ method,
40
+ table: builder.getTable(),
41
+ hasBody: Boolean(body)
42
+ });
43
+ return adapter.query(builder, method, body);
44
+ };
45
+ return executable;
46
+ }
47
+ /**
48
+ * Create a CRUD service wrapper for a PostgREST table.
49
+ * @param adapter - Hazo Connect adapter
50
+ * @param table - Table name
51
+ * @param options - CRUD helper options
52
+ * @returns CRUD service instance
53
+ */
54
+ function createCrudService(adapter, table, options = {}) {
55
+ const primaryKeys = options.primaryKeys && options.primaryKeys.length > 0 ? options.primaryKeys : ['id'];
56
+ const logger = options.logger;
57
+ function buildQuery() {
58
+ return createTableQuery(adapter, table, logger);
59
+ }
60
+ async function list(configure) {
61
+ let qb = buildQuery();
62
+ if (configure) {
63
+ qb = configure(qb);
64
+ }
65
+ const result = await qb.execute('GET');
66
+ return Array.isArray(result) ? result : [];
67
+ }
68
+ async function findBy(criteria) {
69
+ const qb = buildQuery();
70
+ for (const [field, value] of Object.entries(criteria)) {
71
+ qb.where(field, Array.isArray(value) ? 'in' : 'eq', value);
72
+ }
73
+ return list(() => qb);
74
+ }
75
+ async function findOneBy(criteria) {
76
+ const results = await findBy(criteria);
77
+ return results.length > 0 ? results[0] : null;
78
+ }
79
+ async function findById(id) {
80
+ if (primaryKeys.length !== 1) {
81
+ logger?.warn?.('findById called on multi-key table, falling back to first primary key', {
82
+ table,
83
+ primaryKeys
84
+ });
85
+ }
86
+ const key = primaryKeys[0];
87
+ return findOneBy({ [key]: id });
88
+ }
89
+ async function insert(data) {
90
+ const qb = buildQuery();
91
+ const payload = Array.isArray(data) ? data : [data];
92
+ const result = await qb.execute('POST', payload);
93
+ if (Array.isArray(result)) {
94
+ return result;
95
+ }
96
+ return payload;
97
+ }
98
+ async function updateById(id, patch) {
99
+ const qb = buildQuery();
100
+ if (primaryKeys.length !== 1) {
101
+ logger?.warn?.('updateById called on multi-key table, falling back to first primary key', {
102
+ table,
103
+ primaryKeys
104
+ });
105
+ }
106
+ qb.where(primaryKeys[0], 'eq', id);
107
+ const result = await qb.execute('PATCH', patch);
108
+ if (Array.isArray(result)) {
109
+ return result;
110
+ }
111
+ return [{ ...patch, [primaryKeys[0]]: id }];
112
+ }
113
+ async function deleteById(id) {
114
+ const qb = buildQuery();
115
+ if (primaryKeys.length !== 1) {
116
+ logger?.warn?.('deleteById called on multi-key table, falling back to first primary key', {
117
+ table,
118
+ primaryKeys
119
+ });
120
+ }
121
+ qb.where(primaryKeys[0], 'eq', id);
122
+ await qb.execute('DELETE');
123
+ }
124
+ return {
125
+ list,
126
+ findBy,
127
+ findOneBy,
128
+ findById,
129
+ insert,
130
+ updateById,
131
+ deleteById,
132
+ query: buildQuery
133
+ };
134
+ }
135
+ /**
136
+ * Execute a query builder with optional logging and error wrapping.
137
+ * @param adapter - Hazo Connect adapter
138
+ * @param builder - Configured query builder
139
+ * @param method - HTTP verb / operation
140
+ * @param body - Optional body payload
141
+ * @param logger - Optional logger for diagnostics
142
+ * @returns Result of adapter query
143
+ */
144
+ async function executeQuery(adapter, builder, method = 'GET', body, logger) {
145
+ logger?.debug?.('Executing query via executeQuery helper', {
146
+ method,
147
+ table: builder.getTable()
148
+ });
149
+ return adapter.query(builder, method, body);
150
+ }
151
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/lib/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Purpose: Main export file for Hazo Connect
3
+ *
4
+ * This file exports all public APIs for the Hazo Connect component.
5
+ * Zero dependencies - only re-exports from other modules.
6
+ */
7
+ export type { Logger, ConnectionType, HazoConnectConfig, HazoConnectAdapter, QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect, HazoConnectError } from './types';
8
+ export { ErrorCode, noOpLogger } from './types';
9
+ export { QueryBuilder } from './query-builder';
10
+ export { createHazoConnect } from './factory';
11
+ export { attachExecute, createCrudService, createTableQuery, executeQuery } from './helpers';
12
+ export type { CrudService, CrudServiceOptions, ExecutableQueryBuilder, QueryMethod } from './helpers';
13
+ export { BaseAdapter } from './adapters/base-adapter';
14
+ export { PostgrestAdapter } from './adapters/postgrest-adapter';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAG/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACb,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACZ,MAAM,WAAW,CAAA;AAGlB,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Purpose: Main export file for Hazo Connect
4
+ *
5
+ * This file exports all public APIs for the Hazo Connect component.
6
+ * Zero dependencies - only re-exports from other modules.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PostgrestAdapter = exports.BaseAdapter = exports.executeQuery = exports.createTableQuery = exports.createCrudService = exports.attachExecute = exports.createHazoConnect = exports.QueryBuilder = exports.noOpLogger = exports.ErrorCode = void 0;
10
+ var types_1 = require("./types");
11
+ Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return types_1.ErrorCode; } });
12
+ Object.defineProperty(exports, "noOpLogger", { enumerable: true, get: function () { return types_1.noOpLogger; } });
13
+ // Export query builder
14
+ var query_builder_1 = require("./query-builder");
15
+ Object.defineProperty(exports, "QueryBuilder", { enumerable: true, get: function () { return query_builder_1.QueryBuilder; } });
16
+ // Export factory
17
+ var factory_1 = require("./factory");
18
+ Object.defineProperty(exports, "createHazoConnect", { enumerable: true, get: function () { return factory_1.createHazoConnect; } });
19
+ // Export helpers
20
+ var helpers_1 = require("./helpers");
21
+ Object.defineProperty(exports, "attachExecute", { enumerable: true, get: function () { return helpers_1.attachExecute; } });
22
+ Object.defineProperty(exports, "createCrudService", { enumerable: true, get: function () { return helpers_1.createCrudService; } });
23
+ Object.defineProperty(exports, "createTableQuery", { enumerable: true, get: function () { return helpers_1.createTableQuery; } });
24
+ Object.defineProperty(exports, "executeQuery", { enumerable: true, get: function () { return helpers_1.executeQuery; } });
25
+ // Export adapters (for advanced usage)
26
+ var base_adapter_1 = require("./adapters/base-adapter");
27
+ Object.defineProperty(exports, "BaseAdapter", { enumerable: true, get: function () { return base_adapter_1.BaseAdapter; } });
28
+ var postgrest_adapter_1 = require("./adapters/postgrest-adapter");
29
+ Object.defineProperty(exports, "PostgrestAdapter", { enumerable: true, get: function () { return postgrest_adapter_1.PostgrestAdapter; } });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAgBH,iCAA+C;AAAtC,kGAAA,SAAS,OAAA;AAAE,mGAAA,UAAU,OAAA;AAE9B,uBAAuB;AACvB,iDAA8C;AAArC,6GAAA,YAAY,OAAA;AAErB,iBAAiB;AACjB,qCAA6C;AAApC,4GAAA,iBAAiB,OAAA;AAE1B,iBAAiB;AACjB,qCAKkB;AAJhB,wGAAA,aAAa,OAAA;AACb,4GAAA,iBAAiB,OAAA;AACjB,2GAAA,gBAAgB,OAAA;AAChB,uGAAA,YAAY,OAAA;AASd,uCAAuC;AACvC,wDAAqD;AAA5C,2GAAA,WAAW,OAAA;AACpB,kEAA+D;AAAtD,qHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Purpose: Query builder with fluent API supporting full PostgREST syntax
3
+ *
4
+ * This file provides a query builder class that supports PostgREST operators
5
+ * and syntax, including nested selects, joins, and complex filters.
6
+ * Zero dependencies - only uses types.
7
+ */
8
+ import type { QueryOperator, WhereCondition, OrderDirection, JoinType, NestedSelect } from './types';
9
+ /**
10
+ * Query builder class with fluent API
11
+ * Supports PostgREST syntax and operators
12
+ */
13
+ export declare class QueryBuilder {
14
+ private _table;
15
+ private _selectFields;
16
+ private _whereConditions;
17
+ private _whereOrConditions;
18
+ private _orderBy;
19
+ private _limitValue;
20
+ private _offsetValue;
21
+ private _joins;
22
+ private _nestedSelects;
23
+ /**
24
+ * Set the table name
25
+ * @param table - Table name
26
+ * @returns QueryBuilder instance for chaining
27
+ */
28
+ from(table: string): this;
29
+ /**
30
+ * Set fields to select
31
+ * @param fields - Field names (string or array)
32
+ * @returns QueryBuilder instance for chaining
33
+ */
34
+ select(fields: string | string[]): this;
35
+ /**
36
+ * Add a where condition
37
+ * @param field - Field name
38
+ * @param operator - Query operator
39
+ * @param value - Value to compare
40
+ * @returns QueryBuilder instance for chaining
41
+ */
42
+ where(field: string, operator: QueryOperator, value: any): this;
43
+ /**
44
+ * Add an IN condition
45
+ * @param field - Field name
46
+ * @param values - Array of values
47
+ * @returns QueryBuilder instance for chaining
48
+ */
49
+ whereIn(field: string, values: any[]): this;
50
+ /**
51
+ * Add OR conditions
52
+ * @param conditions - Array of condition objects
53
+ * @returns QueryBuilder instance for chaining
54
+ */
55
+ whereOr(conditions: Array<{
56
+ field: string;
57
+ operator: QueryOperator;
58
+ value: any;
59
+ }>): this;
60
+ /**
61
+ * Add ordering
62
+ * @param field - Field name
63
+ * @param direction - Order direction (asc or desc)
64
+ * @returns QueryBuilder instance for chaining
65
+ */
66
+ order(field: string, direction?: OrderDirection): this;
67
+ /**
68
+ * Set limit
69
+ * @param count - Number of records to return
70
+ * @returns QueryBuilder instance for chaining
71
+ */
72
+ limit(count: number): this;
73
+ /**
74
+ * Set offset
75
+ * @param count - Number of records to skip
76
+ * @returns QueryBuilder instance for chaining
77
+ */
78
+ offset(count: number): this;
79
+ /**
80
+ * Add a join
81
+ * @param table - Table to join
82
+ * @param on - Join condition
83
+ * @param type - Join type (inner, left, right)
84
+ * @returns QueryBuilder instance for chaining
85
+ */
86
+ join(table: string, on: string, type?: JoinType): this;
87
+ /**
88
+ * Add nested select (PostgREST syntax: table:related_table(field1,field2))
89
+ * @param table - Related table name
90
+ * @param fields - Fields to select from related table
91
+ * @returns QueryBuilder instance for chaining
92
+ */
93
+ nestedSelect(table: string, fields: string[]): this;
94
+ /**
95
+ * Get the table name
96
+ */
97
+ getTable(): string | null;
98
+ /**
99
+ * Get select fields
100
+ */
101
+ getSelectFields(): string[];
102
+ /**
103
+ * Get where conditions
104
+ */
105
+ getWhereConditions(): WhereCondition[];
106
+ /**
107
+ * Get OR conditions
108
+ */
109
+ getWhereOrConditions(): WhereCondition[][];
110
+ /**
111
+ * Get order by clauses
112
+ */
113
+ getOrderBy(): Array<{
114
+ field: string;
115
+ direction: OrderDirection;
116
+ }>;
117
+ /**
118
+ * Get limit value
119
+ */
120
+ getLimit(): number | null;
121
+ /**
122
+ * Get offset value
123
+ */
124
+ getOffset(): number | null;
125
+ /**
126
+ * Get joins
127
+ */
128
+ getJoins(): Array<{
129
+ table: string;
130
+ on: string;
131
+ type: JoinType;
132
+ }>;
133
+ /**
134
+ * Get nested selects
135
+ */
136
+ getNestedSelects(): NestedSelect[];
137
+ /**
138
+ * Clone the query builder
139
+ * @returns New QueryBuilder instance with same state
140
+ */
141
+ clone(): QueryBuilder;
142
+ }
143
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/lib/query-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,QAAQ,EACR,YAAY,EACb,MAAM,SAAS,CAAA;AAEhB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAA0D;IAC1E,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,MAAM,CAA2D;IACzE,OAAO,CAAC,cAAc,CAAqB;IAE3C;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAgBvC;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK/D;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;IAK3C;;;;OAIG;IACH,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,aAAa,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,GAAG,IAAI;IAUxF;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,cAAsB,GAAG,IAAI;IAK7D;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3B;;;;;;OAMG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,QAAkB,GAAG,IAAI;IAK/D;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnD;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;IAItC;;OAEG;IACH,oBAAoB,IAAI,cAAc,EAAE,EAAE;IAI1C;;OAEG;IACH,UAAU,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,cAAc,CAAA;KAAE,CAAC;IAIjE;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IAIhE;;OAEG;IACH,gBAAgB,IAAI,YAAY,EAAE;IAIlC;;;OAGG;IACH,KAAK,IAAI,YAAY;CAatB"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ /**
3
+ * Purpose: Query builder with fluent API supporting full PostgREST syntax
4
+ *
5
+ * This file provides a query builder class that supports PostgREST operators
6
+ * and syntax, including nested selects, joins, and complex filters.
7
+ * Zero dependencies - only uses types.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.QueryBuilder = void 0;
11
+ /**
12
+ * Query builder class with fluent API
13
+ * Supports PostgREST syntax and operators
14
+ */
15
+ class QueryBuilder {
16
+ constructor() {
17
+ this._table = null;
18
+ this._selectFields = [];
19
+ this._whereConditions = [];
20
+ this._whereOrConditions = [];
21
+ this._orderBy = [];
22
+ this._limitValue = null;
23
+ this._offsetValue = null;
24
+ this._joins = [];
25
+ this._nestedSelects = [];
26
+ }
27
+ /**
28
+ * Set the table name
29
+ * @param table - Table name
30
+ * @returns QueryBuilder instance for chaining
31
+ */
32
+ from(table) {
33
+ this._table = table;
34
+ return this;
35
+ }
36
+ /**
37
+ * Set fields to select
38
+ * @param fields - Field names (string or array)
39
+ * @returns QueryBuilder instance for chaining
40
+ */
41
+ select(fields) {
42
+ if (typeof fields === 'string') {
43
+ // Handle comma-separated string or single field
44
+ if (fields.includes(',')) {
45
+ this._selectFields = fields.split(',').map(f => f.trim());
46
+ }
47
+ else if (fields === '*') {
48
+ this._selectFields = ['*'];
49
+ }
50
+ else {
51
+ this._selectFields = [fields.trim()];
52
+ }
53
+ }
54
+ else {
55
+ this._selectFields = fields;
56
+ }
57
+ return this;
58
+ }
59
+ /**
60
+ * Add a where condition
61
+ * @param field - Field name
62
+ * @param operator - Query operator
63
+ * @param value - Value to compare
64
+ * @returns QueryBuilder instance for chaining
65
+ */
66
+ where(field, operator, value) {
67
+ this._whereConditions.push({ field, operator, value });
68
+ return this;
69
+ }
70
+ /**
71
+ * Add an IN condition
72
+ * @param field - Field name
73
+ * @param values - Array of values
74
+ * @returns QueryBuilder instance for chaining
75
+ */
76
+ whereIn(field, values) {
77
+ this._whereConditions.push({ field, operator: 'in', value: values });
78
+ return this;
79
+ }
80
+ /**
81
+ * Add OR conditions
82
+ * @param conditions - Array of condition objects
83
+ * @returns QueryBuilder instance for chaining
84
+ */
85
+ whereOr(conditions) {
86
+ const orConditions = conditions.map(c => ({
87
+ field: c.field,
88
+ operator: c.operator,
89
+ value: c.value
90
+ }));
91
+ this._whereOrConditions.push(orConditions);
92
+ return this;
93
+ }
94
+ /**
95
+ * Add ordering
96
+ * @param field - Field name
97
+ * @param direction - Order direction (asc or desc)
98
+ * @returns QueryBuilder instance for chaining
99
+ */
100
+ order(field, direction = 'asc') {
101
+ this._orderBy.push({ field, direction });
102
+ return this;
103
+ }
104
+ /**
105
+ * Set limit
106
+ * @param count - Number of records to return
107
+ * @returns QueryBuilder instance for chaining
108
+ */
109
+ limit(count) {
110
+ this._limitValue = count;
111
+ return this;
112
+ }
113
+ /**
114
+ * Set offset
115
+ * @param count - Number of records to skip
116
+ * @returns QueryBuilder instance for chaining
117
+ */
118
+ offset(count) {
119
+ this._offsetValue = count;
120
+ return this;
121
+ }
122
+ /**
123
+ * Add a join
124
+ * @param table - Table to join
125
+ * @param on - Join condition
126
+ * @param type - Join type (inner, left, right)
127
+ * @returns QueryBuilder instance for chaining
128
+ */
129
+ join(table, on, type = 'inner') {
130
+ this._joins.push({ table, on, type });
131
+ return this;
132
+ }
133
+ /**
134
+ * Add nested select (PostgREST syntax: table:related_table(field1,field2))
135
+ * @param table - Related table name
136
+ * @param fields - Fields to select from related table
137
+ * @returns QueryBuilder instance for chaining
138
+ */
139
+ nestedSelect(table, fields) {
140
+ this._nestedSelects.push({ table, fields });
141
+ return this;
142
+ }
143
+ /**
144
+ * Get the table name
145
+ */
146
+ getTable() {
147
+ return this._table;
148
+ }
149
+ /**
150
+ * Get select fields
151
+ */
152
+ getSelectFields() {
153
+ return this._selectFields;
154
+ }
155
+ /**
156
+ * Get where conditions
157
+ */
158
+ getWhereConditions() {
159
+ return this._whereConditions;
160
+ }
161
+ /**
162
+ * Get OR conditions
163
+ */
164
+ getWhereOrConditions() {
165
+ return this._whereOrConditions;
166
+ }
167
+ /**
168
+ * Get order by clauses
169
+ */
170
+ getOrderBy() {
171
+ return this._orderBy;
172
+ }
173
+ /**
174
+ * Get limit value
175
+ */
176
+ getLimit() {
177
+ return this._limitValue;
178
+ }
179
+ /**
180
+ * Get offset value
181
+ */
182
+ getOffset() {
183
+ return this._offsetValue;
184
+ }
185
+ /**
186
+ * Get joins
187
+ */
188
+ getJoins() {
189
+ return this._joins;
190
+ }
191
+ /**
192
+ * Get nested selects
193
+ */
194
+ getNestedSelects() {
195
+ return this._nestedSelects;
196
+ }
197
+ /**
198
+ * Clone the query builder
199
+ * @returns New QueryBuilder instance with same state
200
+ */
201
+ clone() {
202
+ const cloned = new QueryBuilder();
203
+ cloned._table = this._table;
204
+ cloned._selectFields = [...this._selectFields];
205
+ cloned._whereConditions = [...this._whereConditions];
206
+ cloned._whereOrConditions = this._whereOrConditions.map(conditions => [...conditions]);
207
+ cloned._orderBy = [...this._orderBy];
208
+ cloned._limitValue = this._limitValue;
209
+ cloned._offsetValue = this._offsetValue;
210
+ cloned._joins = [...this._joins];
211
+ cloned._nestedSelects = [...this._nestedSelects];
212
+ return cloned;
213
+ }
214
+ }
215
+ exports.QueryBuilder = QueryBuilder;
216
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../src/lib/query-builder.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAUH;;;GAGG;AACH,MAAa,YAAY;IAAzB;QACU,WAAM,GAAkB,IAAI,CAAA;QAC5B,kBAAa,GAAa,EAAE,CAAA;QAC5B,qBAAgB,GAAqB,EAAE,CAAA;QACvC,uBAAkB,GAAuB,EAAE,CAAA;QAC3C,aAAQ,GAAwD,EAAE,CAAA;QAClE,gBAAW,GAAkB,IAAI,CAAA;QACjC,iBAAY,GAAkB,IAAI,CAAA;QAClC,WAAM,GAAyD,EAAE,CAAA;QACjE,mBAAc,GAAmB,EAAE,CAAA;IA6M7C,CAAC;IA3MC;;;;OAIG;IACH,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAyB;QAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,gDAAgD;YAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC3D,CAAC;iBAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,CAAC,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,GAAG,MAAM,CAAA;QAC7B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAa,EAAE,QAAuB,EAAE,KAAU;QACtD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,KAAa,EAAE,MAAa;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACpE,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,UAAyE;QAC/E,MAAM,YAAY,GAAqB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAa,EAAE,YAA4B,KAAK;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QACxC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,KAAa,EAAE,EAAU,EAAE,OAAiB,OAAO;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,KAAa,EAAE,MAAgB;QAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAA;QACjC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC3B,MAAM,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAA;QAC9C,MAAM,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACpD,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAA;QACtF,MAAM,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QACrC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACvC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAA;QAChD,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAtND,oCAsNC"}