@soulbatical/tetra-core 0.1.13 → 0.1.15
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.
Potentially problematic release.
This version of @soulbatical/tetra-core might be problematic. Click here for more details.
- package/dist/generators/rls-auditor.d.ts +39 -0
- package/dist/generators/rls-auditor.d.ts.map +1 -0
- package/dist/generators/rls-auditor.js +505 -0
- package/dist/generators/rls-auditor.js.map +1 -0
- package/dist/generators/rls-checker.d.ts +94 -0
- package/dist/generators/rls-checker.d.ts.map +1 -0
- package/dist/generators/rls-checker.js +215 -0
- package/dist/generators/rls-checker.js.map +1 -0
- package/dist/generators/rls-generator.d.ts +77 -0
- package/dist/generators/rls-generator.d.ts.map +1 -0
- package/dist/generators/rls-generator.js +402 -0
- package/dist/generators/rls-generator.js.map +1 -0
- package/dist/generators/rpc/detail-rpc-generator.d.ts +58 -0
- package/dist/generators/rpc/detail-rpc-generator.d.ts.map +1 -0
- package/dist/generators/rpc/detail-rpc-generator.js +163 -0
- package/dist/generators/rpc/detail-rpc-generator.js.map +1 -0
- package/dist/generators/rpc/index.d.ts +24 -0
- package/dist/generators/rpc/index.d.ts.map +1 -0
- package/dist/generators/rpc/index.js +20 -0
- package/dist/generators/rpc/index.js.map +1 -0
- package/dist/generators/rpc/rpc-generator.d.ts +150 -0
- package/dist/generators/rpc/rpc-generator.d.ts.map +1 -0
- package/dist/generators/rpc/rpc-generator.js +743 -0
- package/dist/generators/rpc/rpc-generator.js.map +1 -0
- package/dist/generators/rpc/templates/array.d.ts +29 -0
- package/dist/generators/rpc/templates/array.d.ts.map +1 -0
- package/dist/generators/rpc/templates/array.js +40 -0
- package/dist/generators/rpc/templates/array.js.map +1 -0
- package/dist/generators/rpc/templates/auth.d.ts +85 -0
- package/dist/generators/rpc/templates/auth.d.ts.map +1 -0
- package/dist/generators/rpc/templates/auth.js +233 -0
- package/dist/generators/rpc/templates/auth.js.map +1 -0
- package/dist/generators/rpc/templates/column.d.ts +39 -0
- package/dist/generators/rpc/templates/column.d.ts.map +1 -0
- package/dist/generators/rpc/templates/column.js +97 -0
- package/dist/generators/rpc/templates/column.js.map +1 -0
- package/dist/generators/rpc/templates/enum.d.ts +33 -0
- package/dist/generators/rpc/templates/enum.d.ts.map +1 -0
- package/dist/generators/rpc/templates/enum.js +93 -0
- package/dist/generators/rpc/templates/enum.js.map +1 -0
- package/dist/generators/rpc/templates/nullable.d.ts +31 -0
- package/dist/generators/rpc/templates/nullable.d.ts.map +1 -0
- package/dist/generators/rpc/templates/nullable.js +50 -0
- package/dist/generators/rpc/templates/nullable.js.map +1 -0
- package/dist/generators/rpc/templates/related.d.ts +47 -0
- package/dist/generators/rpc/templates/related.d.ts.map +1 -0
- package/dist/generators/rpc/templates/related.js +182 -0
- package/dist/generators/rpc/templates/related.js.map +1 -0
- package/dist/generators/rpc/templates/search.d.ts +42 -0
- package/dist/generators/rpc/templates/search.d.ts.map +1 -0
- package/dist/generators/rpc/templates/search.js +81 -0
- package/dist/generators/rpc/templates/search.js.map +1 -0
- package/dist/generators/rpc/templates/time.d.ts +44 -0
- package/dist/generators/rpc/templates/time.d.ts.map +1 -0
- package/dist/generators/rpc/templates/time.js +143 -0
- package/dist/generators/rpc/templates/time.js.map +1 -0
- package/dist/generators/rpc/utils.d.ts +58 -0
- package/dist/generators/rpc/utils.d.ts.map +1 -0
- package/dist/generators/rpc/utils.js +92 -0
- package/dist/generators/rpc/utils.js.map +1 -0
- package/dist/generators/rpc/validator.d.ts +21 -0
- package/dist/generators/rpc/validator.d.ts.map +1 -0
- package/dist/generators/rpc/validator.js +398 -0
- package/dist/generators/rpc/validator.js.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/auth/index.d.ts +1 -1
- package/dist/shared/auth/index.d.ts.map +1 -1
- package/dist/shared/auth/routes.d.ts +4 -1
- package/dist/shared/auth/routes.d.ts.map +1 -1
- package/dist/shared/auth/routes.js +83 -1
- package/dist/shared/auth/routes.js.map +1 -1
- package/dist/shared/auth/types.d.ts +24 -0
- package/dist/shared/auth/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/rpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC3G,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,GACP,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Generator — Auto-generates SQL RPC functions from FeatureConfig
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { RPCGenerator, DetailRPCGenerator, validateConfig } from '@soulbatical/tetra-core';
|
|
7
|
+
*
|
|
8
|
+
* const generator = new RPCGenerator(ordersFeatureConfig, {
|
|
9
|
+
* aliasMap: { orders: 'o', orderitems: 'oi' },
|
|
10
|
+
* });
|
|
11
|
+
* const { resultsSQL, countsSQL } = generator.generate();
|
|
12
|
+
* generator.writeMigrations({ force: true });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export { RPCGenerator } from './rpc-generator.js';
|
|
16
|
+
export { DetailRPCGenerator } from './detail-rpc-generator.js';
|
|
17
|
+
export { validateConfig } from './validator.js';
|
|
18
|
+
export { generateAuthCheck, generateAuthWhereClause, generateAuthDeclarations } from './templates/auth.js';
|
|
19
|
+
export { generateTimestamp, getTableAlias, escapeIdentifier, capitalize, kebabToCamelCase, snakeToCamelCase, filterNameToCountsKey, indent, } from './utils.js';
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/rpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG3G,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,GACP,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Generator
|
|
3
|
+
* Auto-generates SQL RPC functions from FeatureConfig
|
|
4
|
+
*
|
|
5
|
+
* This is the core of the SQL Generator system. It takes a FeatureConfig
|
|
6
|
+
* and generates two SQL migration files:
|
|
7
|
+
* 1. get_<table>_results.sql - Results function (paginated, with includes)
|
|
8
|
+
* 2. get_<table>_counts.sql - Counts function (filter breakdowns)
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* const generator = new RPCGenerator(ordersFeatureConfig);
|
|
12
|
+
* const { resultsSQL, countsSQL } = generator.generate();
|
|
13
|
+
* generator.writeMigrations();
|
|
14
|
+
*/
|
|
15
|
+
import { FeatureConfig, FilterConfig } from '../../shared/types/feature-config.js';
|
|
16
|
+
export interface GeneratedSQL {
|
|
17
|
+
resultsSQL: string;
|
|
18
|
+
countsSQL: string;
|
|
19
|
+
filterSQL?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface FilterDefinition extends FilterConfig {
|
|
22
|
+
paramName: string;
|
|
23
|
+
paramType: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RPCGeneratorOptions {
|
|
26
|
+
/** Custom table alias map (e.g., { orders: 'o', orderitems: 'oi' }) */
|
|
27
|
+
aliasMap?: Record<string, string>;
|
|
28
|
+
/** User ID column name (default: 'user_id') */
|
|
29
|
+
userIdColumn?: string;
|
|
30
|
+
/** Search join config: map relation names to JOIN clauses */
|
|
31
|
+
searchJoins?: Record<string, (tableAlias: string) => string>;
|
|
32
|
+
}
|
|
33
|
+
export declare class RPCGenerator {
|
|
34
|
+
private config;
|
|
35
|
+
private tableName;
|
|
36
|
+
private tableAlias;
|
|
37
|
+
private aliasMap?;
|
|
38
|
+
private userIdColumn;
|
|
39
|
+
private searchJoins;
|
|
40
|
+
private readonly GENERATOR_VERSION;
|
|
41
|
+
private readonly ENABLE_RPC_INCLUDES;
|
|
42
|
+
constructor(config: FeatureConfig, options?: RPCGeneratorOptions);
|
|
43
|
+
/**
|
|
44
|
+
* Format validation errors for display
|
|
45
|
+
*/
|
|
46
|
+
private formatValidationErrors;
|
|
47
|
+
/**
|
|
48
|
+
* Parse filters from config
|
|
49
|
+
*/
|
|
50
|
+
parseFilters(): FilterDefinition[];
|
|
51
|
+
/**
|
|
52
|
+
* Get SQL parameter type for filter
|
|
53
|
+
*/
|
|
54
|
+
private getParamType;
|
|
55
|
+
/**
|
|
56
|
+
* Generate filter function signature
|
|
57
|
+
*/
|
|
58
|
+
generateFilterSignature(): string;
|
|
59
|
+
/**
|
|
60
|
+
* Generate org WHERE clause (includes system content where organization_id IS NULL)
|
|
61
|
+
*/
|
|
62
|
+
private generateOrgWhereClause;
|
|
63
|
+
/**
|
|
64
|
+
* Generate WHERE clause for a filter
|
|
65
|
+
*/
|
|
66
|
+
generateWhereClause(filter: FilterConfig): string;
|
|
67
|
+
/**
|
|
68
|
+
* Generate all WHERE clauses
|
|
69
|
+
*/
|
|
70
|
+
generateWhereClauses(): string;
|
|
71
|
+
/**
|
|
72
|
+
* Generate ORDER BY clause
|
|
73
|
+
*/
|
|
74
|
+
generateOrderBy(): string;
|
|
75
|
+
/**
|
|
76
|
+
* Detect required JOINs from searchFields
|
|
77
|
+
* v3.11: Add public. prefix for Postgres v17 compatibility
|
|
78
|
+
* v3.14: Also check filter-level searchFields (filter.sqlGeneration.searchFields)
|
|
79
|
+
*/
|
|
80
|
+
private detectJoins;
|
|
81
|
+
/**
|
|
82
|
+
* Generate complete filter function SQL
|
|
83
|
+
*/
|
|
84
|
+
generateFilterFunction(): string;
|
|
85
|
+
/**
|
|
86
|
+
* Generate counts query for a filter
|
|
87
|
+
*/
|
|
88
|
+
generateCountsQuery(filter: FilterConfig): string;
|
|
89
|
+
/**
|
|
90
|
+
* Generate all counts queries
|
|
91
|
+
*/
|
|
92
|
+
generateCountsQueries(): string;
|
|
93
|
+
/**
|
|
94
|
+
* Generate counts function signature
|
|
95
|
+
*/
|
|
96
|
+
generateCountsSignature(): string;
|
|
97
|
+
/**
|
|
98
|
+
* Generate complete counts function SQL
|
|
99
|
+
*/
|
|
100
|
+
generateCountsFunction(): string;
|
|
101
|
+
/**
|
|
102
|
+
* Generate JSONB aggregates for includes (v3.5)
|
|
103
|
+
* Returns LATERAL JOIN subqueries that aggregate related records as JSONB arrays
|
|
104
|
+
*/
|
|
105
|
+
private generateIncludeJoins;
|
|
106
|
+
/**
|
|
107
|
+
* Extract column name from foreign key constraint name
|
|
108
|
+
* Example: 'orders_user_id_fkey' → 'user_id'
|
|
109
|
+
* 'users_public_active_organization_id_fkey' → 'active_organization_id'
|
|
110
|
+
*/
|
|
111
|
+
private getForeignKeyColumn;
|
|
112
|
+
/**
|
|
113
|
+
* Generate SELECT columns with includes as JSONB fields (v3.5)
|
|
114
|
+
*/
|
|
115
|
+
private generateIncludesCases;
|
|
116
|
+
/**
|
|
117
|
+
* Generate all table columns for SELECT clause
|
|
118
|
+
*/
|
|
119
|
+
private generateTableColumns;
|
|
120
|
+
/**
|
|
121
|
+
* Generate SQL computed fields (v3.8)
|
|
122
|
+
* Returns computed field expressions for SELECT clause
|
|
123
|
+
*/
|
|
124
|
+
private generateSQLComputedFields;
|
|
125
|
+
/**
|
|
126
|
+
* Generate results function signature
|
|
127
|
+
*/
|
|
128
|
+
generateResultsSignature(): string;
|
|
129
|
+
/**
|
|
130
|
+
* Generate complete results function SQL (NEW - replaces filter + .in pattern!)
|
|
131
|
+
*/
|
|
132
|
+
generateResultsFunction(): string;
|
|
133
|
+
/**
|
|
134
|
+
* Generate both results and counts functions (NEW API)
|
|
135
|
+
*/
|
|
136
|
+
generate(): GeneratedSQL;
|
|
137
|
+
/**
|
|
138
|
+
* Write migrations to files (NEW - generates results + counts)
|
|
139
|
+
*/
|
|
140
|
+
writeMigrations(options?: {
|
|
141
|
+
force?: boolean;
|
|
142
|
+
outputDir?: string;
|
|
143
|
+
legacy?: boolean;
|
|
144
|
+
}): {
|
|
145
|
+
resultsFile: string;
|
|
146
|
+
countsFile: string;
|
|
147
|
+
filterFile?: string;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=rpc-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-generator.d.ts","sourceRoot":"","sources":["../../../src/generators/rpc/rpc-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAgBnF,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;CAC9D;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAyB;IAC1C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAiD;IACpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;gBAEhC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB;IA6BhE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACH,YAAY,IAAI,gBAAgB,EAAE;IAUlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAoBjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IA2BjD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAU9B;;OAEG;IACH,eAAe,IAAI,MAAM;IAiDzB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA4BnB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IA0ChC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAgCjD;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAW/B;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAkBjC;;OAEG;IACH,sBAAsB,IAAI,MAAM;IA4EhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA4H5B;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAmBlC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAyFjC;;OAEG;IACH,QAAQ,IAAI,YAAY;IAQxB;;OAEG;IACH,eAAe,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;CAyD3J"}
|