@truto/ginger 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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +597 -0
  3. package/dist/adapters/bun-sqlite.d.ts +37 -0
  4. package/dist/adapters/bun-sqlite.d.ts.map +1 -0
  5. package/dist/adapters/bun-sqlite.js +136 -0
  6. package/dist/adapters/bun-sqlite.js.map +1 -0
  7. package/dist/adapters/durable-object.d.ts +40 -0
  8. package/dist/adapters/durable-object.d.ts.map +1 -0
  9. package/dist/adapters/durable-object.js +142 -0
  10. package/dist/adapters/durable-object.js.map +1 -0
  11. package/dist/adapters/index.d.ts +5 -0
  12. package/dist/adapters/index.d.ts.map +1 -0
  13. package/dist/adapters/index.js +3 -0
  14. package/dist/adapters/index.js.map +1 -0
  15. package/dist/crypto.d.ts +40 -0
  16. package/dist/crypto.d.ts.map +1 -0
  17. package/dist/crypto.js +148 -0
  18. package/dist/crypto.js.map +1 -0
  19. package/dist/errors.d.ts +64 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +90 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/example.d.ts +119 -0
  24. package/dist/example.d.ts.map +1 -0
  25. package/dist/example.js +297 -0
  26. package/dist/example.js.map +1 -0
  27. package/dist/index.d.ts +54 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +62 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/pagination.d.ts +31 -0
  32. package/dist/pagination.d.ts.map +1 -0
  33. package/dist/pagination.js +173 -0
  34. package/dist/pagination.js.map +1 -0
  35. package/dist/service.d.ts +81 -0
  36. package/dist/service.d.ts.map +1 -0
  37. package/dist/service.js +615 -0
  38. package/dist/service.js.map +1 -0
  39. package/dist/sql-builder.d.ts +48 -0
  40. package/dist/sql-builder.d.ts.map +1 -0
  41. package/dist/sql-builder.js +230 -0
  42. package/dist/sql-builder.js.map +1 -0
  43. package/dist/types.d.ts +266 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +2 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +94 -0
@@ -0,0 +1,31 @@
1
+ import { sql } from '@truto/sqlite-builder';
2
+ import type { CursorToken, OrderBy } from './types.js';
3
+ /**
4
+ * Encode a cursor token to an opaque base64 string
5
+ */
6
+ export declare function encodeCursor(token: CursorToken): string;
7
+ /**
8
+ * Decode an opaque cursor string back to a cursor token
9
+ */
10
+ export declare function decodeCursor(cursor: string): CursorToken;
11
+ /**
12
+ * Create a cursor token from a row and order specification
13
+ */
14
+ export declare function createCursor(row: Record<string, unknown>, orderBy: OrderBy[], direction: 'next' | 'prev'): CursorToken;
15
+ /**
16
+ * Generate WHERE conditions for cursor-based pagination
17
+ */
18
+ export declare function buildCursorConditions(cursor: CursorToken, tableName?: string): ReturnType<typeof sql>;
19
+ /**
20
+ * Get default ordering for a table
21
+ */
22
+ export declare function getDefaultOrderBy(primaryKey: string | string[], defaultOrderBy?: OrderBy): OrderBy[];
23
+ /**
24
+ * Validate order by columns against allowed columns
25
+ */
26
+ export declare function validateOrderBy(orderBy: OrderBy[], allowedColumns: string[]): void;
27
+ /**
28
+ * Reverse the direction of OrderBy for previous page navigation
29
+ */
30
+ export declare function reverseOrderBy(orderBy: OrderBy[]): OrderBy[];
31
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAUvD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CA0CxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,OAAO,EAAE,EAClB,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,WAAW,CAiBb;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU,CAAC,OAAO,GAAG,CAAC,CAiFxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,EAC7B,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,EAAE,CAUX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAAE,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAK5D"}
@@ -0,0 +1,173 @@
1
+ import { sql } from '@truto/sqlite-builder';
2
+ import { CursorError } from './errors.js';
3
+ /**
4
+ * Encode a cursor token to an opaque base64 string
5
+ */
6
+ export function encodeCursor(token) {
7
+ try {
8
+ const json = JSON.stringify(token);
9
+ return btoa(json);
10
+ }
11
+ catch (error) {
12
+ throw new CursorError(`Failed to encode cursor: ${error instanceof Error ? error.message : 'Unknown error'}`, { token, error });
13
+ }
14
+ }
15
+ /**
16
+ * Decode an opaque cursor string back to a cursor token
17
+ */
18
+ export function decodeCursor(cursor) {
19
+ try {
20
+ const json = atob(cursor);
21
+ const parsed = JSON.parse(json);
22
+ // Validate cursor structure
23
+ if (!parsed || typeof parsed !== 'object') {
24
+ throw new Error('Invalid cursor structure');
25
+ }
26
+ if (!Array.isArray(parsed.orderBy)) {
27
+ throw new Error('Invalid orderBy in cursor');
28
+ }
29
+ if (!Array.isArray(parsed.values)) {
30
+ throw new Error('Invalid values in cursor');
31
+ }
32
+ if (!parsed.direction || !['next', 'prev'].includes(parsed.direction)) {
33
+ throw new Error('Invalid direction in cursor');
34
+ }
35
+ // Validate orderBy structure
36
+ for (const order of parsed.orderBy) {
37
+ if (!order || typeof order !== 'object') {
38
+ throw new Error('Invalid order object in cursor');
39
+ }
40
+ if (!order.column || typeof order.column !== 'string') {
41
+ throw new Error('Invalid column in cursor orderBy');
42
+ }
43
+ if (!order.direction || !['asc', 'desc'].includes(order.direction)) {
44
+ throw new Error('Invalid direction in cursor orderBy');
45
+ }
46
+ }
47
+ return parsed;
48
+ }
49
+ catch (error) {
50
+ throw new CursorError(`Failed to decode cursor: ${error instanceof Error ? error.message : 'Unknown error'}`, { cursor, error });
51
+ }
52
+ }
53
+ /**
54
+ * Create a cursor token from a row and order specification
55
+ */
56
+ export function createCursor(row, orderBy, direction) {
57
+ const values = orderBy.map((order) => {
58
+ const value = row[order.column];
59
+ if (value === undefined) {
60
+ throw new CursorError(`Column "${order.column}" not found in row for cursor creation`, { row, orderBy, column: order.column });
61
+ }
62
+ return value;
63
+ });
64
+ return {
65
+ orderBy,
66
+ values,
67
+ direction,
68
+ };
69
+ }
70
+ /**
71
+ * Generate WHERE conditions for cursor-based pagination
72
+ */
73
+ export function buildCursorConditions(cursor, tableName) {
74
+ const { orderBy, values, direction } = cursor;
75
+ if (orderBy.length !== values.length) {
76
+ throw new CursorError('Cursor orderBy and values arrays must have the same length', { orderBy, values });
77
+ }
78
+ if (orderBy.length === 0) {
79
+ return sql ``;
80
+ }
81
+ // Build comparison conditions for cursor pagination
82
+ // For next: use > or < based on sort direction
83
+ // For prev: use < or > based on sort direction (opposite)
84
+ const conditions = [];
85
+ for (let i = 0; i < orderBy.length; i++) {
86
+ const order = orderBy[i];
87
+ const value = values[i];
88
+ // Build column identifier safely
89
+ const columnIdent = tableName
90
+ ? sql.ident(`${tableName}.${order.column}`)
91
+ : sql.ident(order.column);
92
+ // Determine comparison operator
93
+ let operator;
94
+ if (direction === 'next') {
95
+ operator = order.direction === 'asc' ? '>' : '<';
96
+ }
97
+ else {
98
+ operator = order.direction === 'asc' ? '<' : '>';
99
+ }
100
+ if (i === orderBy.length - 1) {
101
+ // Last column: simple comparison
102
+ const operatorFragment = sql.raw(operator);
103
+ conditions.push(sql `${columnIdent} ${operatorFragment} ${value}`);
104
+ }
105
+ else {
106
+ // Multi-column: build composite condition
107
+ // (col1 = ? AND col2 = ? AND ... AND colN > ?) OR
108
+ // (col1 = ? AND col2 = ? AND ... AND colN-1 > ?) OR
109
+ // ...
110
+ // (col1 > ?)
111
+ const equalityConditions = [];
112
+ for (let j = 0; j <= i; j++) {
113
+ const currentOrder = orderBy[j];
114
+ const currentValue = values[j];
115
+ // Build current column identifier safely
116
+ const currentColumnIdent = tableName
117
+ ? sql.ident(`${tableName}.${currentOrder.column}`)
118
+ : sql.ident(currentOrder.column);
119
+ if (j === i) {
120
+ // Last condition in this group: use comparison
121
+ let currentOperator;
122
+ if (direction === 'next') {
123
+ currentOperator = currentOrder.direction === 'asc' ? '>' : '<';
124
+ }
125
+ else {
126
+ currentOperator = currentOrder.direction === 'asc' ? '<' : '>';
127
+ }
128
+ const currentOperatorFragment = sql.raw(currentOperator);
129
+ equalityConditions.push(sql `${currentColumnIdent} ${currentOperatorFragment} ${currentValue}`);
130
+ }
131
+ else {
132
+ // Earlier conditions: use equality
133
+ equalityConditions.push(sql `${currentColumnIdent} = ${currentValue}`);
134
+ }
135
+ }
136
+ const compositeCondition = sql.join(equalityConditions, ' AND ');
137
+ conditions.push(sql `(${compositeCondition})`);
138
+ }
139
+ }
140
+ return conditions.length > 0 ? sql.join(conditions, ' OR ') : sql ``;
141
+ }
142
+ /**
143
+ * Get default ordering for a table
144
+ */
145
+ export function getDefaultOrderBy(primaryKey, defaultOrderBy) {
146
+ if (defaultOrderBy) {
147
+ return [defaultOrderBy];
148
+ }
149
+ if (Array.isArray(primaryKey)) {
150
+ return primaryKey.map((key) => ({ column: key, direction: 'asc' }));
151
+ }
152
+ return [{ column: primaryKey, direction: 'asc' }];
153
+ }
154
+ /**
155
+ * Validate order by columns against allowed columns
156
+ */
157
+ export function validateOrderBy(orderBy, allowedColumns) {
158
+ for (const order of orderBy) {
159
+ if (!allowedColumns.includes(order.column)) {
160
+ throw new CursorError(`Invalid order column "${order.column}". Allowed columns: ${allowedColumns.join(', ')}`, { column: order.column, allowedColumns });
161
+ }
162
+ }
163
+ }
164
+ /**
165
+ * Reverse the direction of OrderBy for previous page navigation
166
+ */
167
+ export function reverseOrderBy(orderBy) {
168
+ return orderBy.map((order) => ({
169
+ ...order,
170
+ direction: order.direction === 'asc' ? 'desc' : 'asc',
171
+ }));
172
+ }
173
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import type { z } from 'zod/v4';
2
+ import type { BaseCtx, BaseService, ComputeJoins, CountParams, CreateParams, Database, DeleteParams, GetParams, JoinDef, KeyProvider, ListParams, ListResult, MethodOptions, OrderBy, QueryParams, SecretFieldDef, ServiceOptions, UpdateParams } from './types.js';
3
+ /**
4
+ * Main service class that provides type-safe data access for SQLite databases
5
+ */
6
+ export declare class Service<TRow extends z.ZodTypeAny, TCreate extends z.ZodTypeAny, TUpdate extends z.ZodTypeAny, TJoins extends Record<string, JoinDef>, TSecrets extends readonly SecretFieldDef[] | undefined> implements BaseService<TRow, TCreate, TUpdate, TJoins, TSecrets> {
7
+ readonly table: string;
8
+ readonly db: Database;
9
+ readonly rowSchema: TRow;
10
+ readonly createSchema: TCreate;
11
+ readonly updateSchema: TUpdate;
12
+ readonly joins: TJoins | undefined;
13
+ readonly secrets: TSecrets | undefined;
14
+ readonly primaryKey: string | string[];
15
+ readonly defaultOrderBy: OrderBy | undefined;
16
+ readonly keyProvider: KeyProvider;
17
+ readonly deps: Record<string, BaseService<any, any, any, any, any>>;
18
+ private readonly hooks;
19
+ constructor(options: ServiceOptions<TRow, TCreate, TUpdate, TJoins, TSecrets>);
20
+ /**
21
+ * List records with cursor-based pagination
22
+ */
23
+ list(params?: ListParams & MethodOptions): Promise<ListResult<z.infer<TRow> & ComputeJoins<TJoins, ListParams['include']>>>;
24
+ /**
25
+ * Get a single record by ID
26
+ */
27
+ get(id: string | number, opts?: GetParams & MethodOptions): Promise<(z.infer<TRow> & ComputeJoins<TJoins, GetParams['include']>) | null>;
28
+ /**
29
+ * Create a new record
30
+ */
31
+ create(data: z.infer<TCreate>, opts?: CreateParams & MethodOptions): Promise<z.infer<TRow> & ComputeJoins<TJoins, CreateParams['include']>>;
32
+ /**
33
+ * Update a record by ID
34
+ */
35
+ update(id: string | number, data: Partial<z.infer<TUpdate>>, opts?: UpdateParams & MethodOptions): Promise<(z.infer<TRow> & ComputeJoins<TJoins, UpdateParams['include']>) | null>;
36
+ /**
37
+ * Delete a record by ID
38
+ */
39
+ delete(id: string | number, opts?: DeleteParams & MethodOptions): Promise<boolean>;
40
+ /**
41
+ * Count records matching criteria
42
+ */
43
+ count(params?: CountParams & MethodOptions): Promise<number>;
44
+ /**
45
+ * Execute custom SQL query
46
+ */
47
+ query<T = z.infer<TRow>>(query: string, opts?: QueryParams & MethodOptions, ...sqlParams: unknown[]): Promise<T[]>;
48
+ /**
49
+ * Run hooks with context for a specific method
50
+ */
51
+ protected runHooks<TMethod extends string>(phase: 'before' | 'after' | 'error', method: TMethod, ctx: BaseCtx): Promise<void>;
52
+ /**
53
+ * Get columns to select based on secrets configuration
54
+ */
55
+ private getSelectColumns;
56
+ /**
57
+ * Get allowed columns for ordering
58
+ */
59
+ private getAllowedColumns;
60
+ /**
61
+ * Encrypt secrets in data
62
+ */
63
+ private encryptDataSecrets;
64
+ /**
65
+ * Decrypt secrets in a row
66
+ */
67
+ private decryptRowSecrets;
68
+ /**
69
+ * Process joined rows by extracting join data
70
+ */
71
+ private processJoinedRows;
72
+ /**
73
+ * Extract only join data from processed row
74
+ */
75
+ private extractJoinData;
76
+ /**
77
+ * Fetch one-to-many joins using separate queries
78
+ */
79
+ private fetchOneToManyJoins;
80
+ }
81
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}