@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.

Files changed (77) hide show
  1. package/dist/generators/rls-auditor.d.ts +39 -0
  2. package/dist/generators/rls-auditor.d.ts.map +1 -0
  3. package/dist/generators/rls-auditor.js +505 -0
  4. package/dist/generators/rls-auditor.js.map +1 -0
  5. package/dist/generators/rls-checker.d.ts +94 -0
  6. package/dist/generators/rls-checker.d.ts.map +1 -0
  7. package/dist/generators/rls-checker.js +215 -0
  8. package/dist/generators/rls-checker.js.map +1 -0
  9. package/dist/generators/rls-generator.d.ts +77 -0
  10. package/dist/generators/rls-generator.d.ts.map +1 -0
  11. package/dist/generators/rls-generator.js +402 -0
  12. package/dist/generators/rls-generator.js.map +1 -0
  13. package/dist/generators/rpc/detail-rpc-generator.d.ts +58 -0
  14. package/dist/generators/rpc/detail-rpc-generator.d.ts.map +1 -0
  15. package/dist/generators/rpc/detail-rpc-generator.js +163 -0
  16. package/dist/generators/rpc/detail-rpc-generator.js.map +1 -0
  17. package/dist/generators/rpc/index.d.ts +24 -0
  18. package/dist/generators/rpc/index.d.ts.map +1 -0
  19. package/dist/generators/rpc/index.js +20 -0
  20. package/dist/generators/rpc/index.js.map +1 -0
  21. package/dist/generators/rpc/rpc-generator.d.ts +150 -0
  22. package/dist/generators/rpc/rpc-generator.d.ts.map +1 -0
  23. package/dist/generators/rpc/rpc-generator.js +743 -0
  24. package/dist/generators/rpc/rpc-generator.js.map +1 -0
  25. package/dist/generators/rpc/templates/array.d.ts +29 -0
  26. package/dist/generators/rpc/templates/array.d.ts.map +1 -0
  27. package/dist/generators/rpc/templates/array.js +40 -0
  28. package/dist/generators/rpc/templates/array.js.map +1 -0
  29. package/dist/generators/rpc/templates/auth.d.ts +85 -0
  30. package/dist/generators/rpc/templates/auth.d.ts.map +1 -0
  31. package/dist/generators/rpc/templates/auth.js +233 -0
  32. package/dist/generators/rpc/templates/auth.js.map +1 -0
  33. package/dist/generators/rpc/templates/column.d.ts +39 -0
  34. package/dist/generators/rpc/templates/column.d.ts.map +1 -0
  35. package/dist/generators/rpc/templates/column.js +97 -0
  36. package/dist/generators/rpc/templates/column.js.map +1 -0
  37. package/dist/generators/rpc/templates/enum.d.ts +33 -0
  38. package/dist/generators/rpc/templates/enum.d.ts.map +1 -0
  39. package/dist/generators/rpc/templates/enum.js +93 -0
  40. package/dist/generators/rpc/templates/enum.js.map +1 -0
  41. package/dist/generators/rpc/templates/nullable.d.ts +31 -0
  42. package/dist/generators/rpc/templates/nullable.d.ts.map +1 -0
  43. package/dist/generators/rpc/templates/nullable.js +50 -0
  44. package/dist/generators/rpc/templates/nullable.js.map +1 -0
  45. package/dist/generators/rpc/templates/related.d.ts +47 -0
  46. package/dist/generators/rpc/templates/related.d.ts.map +1 -0
  47. package/dist/generators/rpc/templates/related.js +182 -0
  48. package/dist/generators/rpc/templates/related.js.map +1 -0
  49. package/dist/generators/rpc/templates/search.d.ts +42 -0
  50. package/dist/generators/rpc/templates/search.d.ts.map +1 -0
  51. package/dist/generators/rpc/templates/search.js +81 -0
  52. package/dist/generators/rpc/templates/search.js.map +1 -0
  53. package/dist/generators/rpc/templates/time.d.ts +44 -0
  54. package/dist/generators/rpc/templates/time.d.ts.map +1 -0
  55. package/dist/generators/rpc/templates/time.js +143 -0
  56. package/dist/generators/rpc/templates/time.js.map +1 -0
  57. package/dist/generators/rpc/utils.d.ts +58 -0
  58. package/dist/generators/rpc/utils.d.ts.map +1 -0
  59. package/dist/generators/rpc/utils.js +92 -0
  60. package/dist/generators/rpc/utils.js.map +1 -0
  61. package/dist/generators/rpc/validator.d.ts +21 -0
  62. package/dist/generators/rpc/validator.d.ts.map +1 -0
  63. package/dist/generators/rpc/validator.js +398 -0
  64. package/dist/generators/rpc/validator.js.map +1 -0
  65. package/dist/index.d.ts +9 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +6 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/shared/auth/index.d.ts +1 -1
  70. package/dist/shared/auth/index.d.ts.map +1 -1
  71. package/dist/shared/auth/routes.d.ts +4 -1
  72. package/dist/shared/auth/routes.d.ts.map +1 -1
  73. package/dist/shared/auth/routes.js +83 -1
  74. package/dist/shared/auth/routes.js.map +1 -1
  75. package/dist/shared/auth/types.d.ts +24 -0
  76. package/dist/shared/auth/types.d.ts.map +1 -1
  77. 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"}