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.
- package/dist/__tests__/factory.test.d.ts +2 -0
- package/dist/__tests__/factory.test.d.ts.map +1 -0
- package/dist/__tests__/factory.test.js +45 -0
- package/dist/__tests__/factory.test.js.map +1 -0
- package/dist/__tests__/postgrest_adapter.test.d.ts +2 -0
- package/dist/__tests__/postgrest_adapter.test.d.ts.map +1 -0
- package/dist/__tests__/postgrest_adapter.test.js +32 -0
- package/dist/__tests__/postgrest_adapter.test.js.map +1 -0
- package/dist/__tests__/query_builder.test.d.ts +2 -0
- package/dist/__tests__/query_builder.test.d.ts.map +1 -0
- package/dist/__tests__/query_builder.test.js +35 -0
- package/dist/__tests__/query_builder.test.js.map +1 -0
- package/dist/adapters/base-adapter.d.ts +69 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +121 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/file-adapter.d.ts +50 -0
- package/dist/adapters/file-adapter.d.ts.map +1 -0
- package/dist/adapters/file-adapter.js +62 -0
- package/dist/adapters/file-adapter.js.map +1 -0
- package/dist/adapters/postgrest-adapter.d.ts +60 -0
- package/dist/adapters/postgrest-adapter.d.ts.map +1 -0
- package/dist/adapters/postgrest-adapter.js +252 -0
- package/dist/adapters/postgrest-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +49 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +61 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/adapters/supabase-adapter.d.ts +50 -0
- package/dist/adapters/supabase-adapter.d.ts.map +1 -0
- package/dist/adapters/supabase-adapter.js +62 -0
- package/dist/adapters/supabase-adapter.js.map +1 -0
- package/dist/factory.d.ts +15 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +89 -0
- package/dist/factory.js.map +1 -0
- package/dist/helpers.d.ts +76 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +151 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/query-builder.d.ts +143 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +216 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/types.d.ts +117 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- 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"}
|
package/dist/helpers.js
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"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"}
|