@rationalbloks/frontblok-crud 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -2,34 +2,7 @@
2
2
 
3
3
  **Universal CRUD API Layer for RationalBloks Frontends**
4
4
 
5
- The TypeScript equivalent of `builderblok` - a single, generic API layer that works with ANY entity schema.
6
-
7
- ---
8
-
9
- ## 🎯 Philosophy
10
-
11
- ```
12
- ┌─────────────────────────────────────────────────────────────────────────┐
13
- │ THE BUILDERBLOK PATTERN │
14
- ├─────────────────────────────────────────────────────────────────────────┤
15
- │ │
16
- │ BACKEND (builderblok) FRONTEND (frontblok-crud) │
17
- │ ═══════════════════ ════════════════════════ │
18
- │ │
19
- │ JSON Schema JSON Schema │
20
- │ │ │ │
21
- │ ▼ ▼ │
22
- │ entities.py ◄── ONLY GENERATED entities.ts ◄── ONLY GENERATED │
23
- │ │ │ │
24
- │ ▼ ▼ │
25
- │ models.py ─┐ api.ts ──────┐ │
26
- │ crud.py ───┼── 100% GENERIC hooks.ts ────┼── 100% GENERIC │
27
- │ routes.py ─┘ utils.ts ────┘ │
28
- │ │
29
- └─────────────────────────────────────────────────────────────────────────┘
30
- ```
31
-
32
- **Only ONE file is generated** (`entities.ts`). Everything else is generic and works with ANY schema.
5
+ A generic API layer that works with any entity schema — define your types once, get full CRUD operations everywhere.
33
6
 
34
7
  ---
35
8
 
@@ -201,21 +174,13 @@ export type EntityName = keyof Entities;
201
174
 
202
175
  ### Files in this package:
203
176
 
204
- | File | Purpose | Generated? |
205
- |------|---------|------------|
206
- | `api.ts` | Universal CRUD API client | ❌ NO (generic) |
207
- | `hooks.ts` | React hooks for data fetching | ❌ NO (generic) |
208
- | `types.ts` | TypeScript type definitions | ❌ NO (generic) |
209
- | `utils.ts` | Helper functions | ❌ NO (generic) |
210
- | `generator.ts` | Generates entities.ts | NO (used by MCP) |
211
-
212
- ### What gets generated in user's project:
213
-
214
- | File | Purpose | Generated? |
215
- |------|---------|------------|
216
- | `entities.ts` | TypeScript interfaces + entity registry | ✅ YES |
217
-
218
- **That's it. ONE file. ~50 lines.**
177
+ | File | Purpose |
178
+ |------|---------|
179
+ | `api.ts` | Universal CRUD API client |
180
+ | `hooks.ts` | React hooks for data fetching |
181
+ | `types.ts` | TypeScript type definitions |
182
+ | `utils.ts` | Helper functions |
183
+ | `generator.ts` | Generates entities.ts from schema |
219
184
 
220
185
  ---
221
186
 
@@ -223,43 +188,9 @@ export type EntityName = keyof Entities;
223
188
 
224
189
  This package builds on top of `@rationalbloks/frontblok-auth`:
225
190
 
226
- ```
227
- ┌─────────────────────────────────────────────────────────────────────────┐
228
- │ USER'S PROJECT │
229
- ├─────────────────────────────────────────────────────────────────────────┤
230
- │ │
231
- │ ┌───────────────────────────────────────────────────────────────────┐ │
232
- │ │ UI LAYER (user's choice) │ │
233
- │ │ - React components │ │
234
- │ │ - Routing (react-router) │ │
235
- │ │ - Styling (MUI, Tailwind, etc.) │ │
236
- │ └───────────────────────────────────────────────────────────────────┘ │
237
- │ │ │
238
- │ ▼ │
239
- │ ┌───────────────────────────────────────────────────────────────────┐ │
240
- │ │ @rationalbloks/frontblok-crud │ │
241
- │ │ - entities.ts (GENERATED - types + metadata) │ │
242
- │ │ - api.ts (GENERIC - universal CRUD) │ │
243
- │ │ - hooks.ts (GENERIC - React data hooks) │ │
244
- │ └───────────────────────────────────────────────────────────────────┘ │
245
- │ │ │
246
- │ ▼ │
247
- │ ┌───────────────────────────────────────────────────────────────────┐ │
248
- │ │ @rationalbloks/frontblok-auth │ │
249
- │ │ - BaseApi (HTTP client with auth) │ │
250
- │ │ - Auth hooks │ │
251
- │ │ - Token management │ │
252
- │ └───────────────────────────────────────────────────────────────────┘ │
253
- │ │ │
254
- └───────────────────────────────┼─────────────────────────────────────────┘
255
-
256
-
257
- ┌──────────────────────┐
258
- │ RationalBloks API │
259
- │ (generated by │
260
- │ builderblok) │
261
- └──────────────────────┘
262
- ```
191
+ - **frontblok-auth** handles authentication, tokens, and HTTP requests
192
+ - **frontblok-crud** adds CRUD operations on top of that HTTP layer
193
+ - **entities.ts** in your project defines your data types and entity registry
263
194
 
264
195
  ---
265
196
 
package/dist/api.d.ts CHANGED
@@ -1,115 +1,23 @@
1
1
  import type { BaseEntity } from './types.js';
2
- /**
3
- * Minimal interface for the auth API client.
4
- * Matches frontblok-auth's BaseApi.request() signature.
5
- */
6
2
  export interface AuthApiClient {
7
3
  request<T>(endpoint: string, options?: RequestInit): Promise<T>;
8
4
  }
9
5
  export declare class UniversalApi {
10
6
  private authApi;
11
7
  constructor(authApi: AuthApiClient);
12
- /**
13
- * Get all entities of a type.
14
- *
15
- * @param entityName - The entity/table name (e.g., 'tasks', 'projects')
16
- * @param options - Optional query parameters
17
- * @returns Array of entities
18
- *
19
- * @example
20
- * const tasks = await api.getAll<Task>('tasks');
21
- * const activeTasks = await api.getAll<Task>('tasks', { status: 'active' });
22
- */
23
8
  getAll<T extends BaseEntity>(entityName: string, options?: {
24
9
  skip?: number;
25
10
  limit?: number;
26
11
  [key: string]: unknown;
27
12
  }): Promise<T[]>;
28
- /**
29
- * Get a single entity by ID.
30
- *
31
- * @param entityName - The entity/table name
32
- * @param id - Entity UUID
33
- * @returns The entity or throws if not found
34
- *
35
- * @example
36
- * const task = await api.getOne<Task>('tasks', 'uuid-here');
37
- */
38
13
  getOne<T extends BaseEntity>(entityName: string, id: string): Promise<T>;
39
- /**
40
- * Create a new entity.
41
- *
42
- * @param entityName - The entity/table name
43
- * @param data - Entity data (without id, created_at, updated_at)
44
- * @returns The created entity with all fields
45
- *
46
- * @example
47
- * const task = await api.create<Task>('tasks', { title: 'New Task', status: 'pending' });
48
- */
49
14
  create<T extends BaseEntity>(entityName: string, data: Partial<Omit<T, 'id' | 'created_at' | 'updated_at'>>): Promise<T>;
50
- /**
51
- * Update an existing entity.
52
- *
53
- * @param entityName - The entity/table name
54
- * @param id - Entity UUID
55
- * @param data - Partial entity data to update
56
- * @returns The updated entity
57
- *
58
- * @example
59
- * const task = await api.update<Task>('tasks', 'uuid-here', { status: 'done' });
60
- */
61
15
  update<T extends BaseEntity>(entityName: string, id: string, data: Partial<Omit<T, 'id' | 'created_at' | 'updated_at'>>): Promise<T>;
62
- /**
63
- * Delete an entity.
64
- *
65
- * @param entityName - The entity/table name
66
- * @param id - Entity UUID
67
- *
68
- * @example
69
- * await api.remove('tasks', 'uuid-here');
70
- */
71
16
  remove(entityName: string, id: string): Promise<void>;
72
- /**
73
- * Smart pluralization that matches builderblok's routes.py.
74
- * Mirrors the Python `pluralize()` function exactly.
75
- */
76
17
  private pluralize;
77
18
  }
78
- /**
79
- * Initialize the global CRUD API instance.
80
- * Call this once at app startup (e.g., in main.tsx).
81
- *
82
- * @param authApi - The frontblok-auth BaseApi instance (from createAuthApi)
83
- * @returns The initialized UniversalApi instance
84
- *
85
- * @example
86
- * // In main.tsx or App.tsx
87
- * import { createAuthApi } from '@rationalbloks/frontblok-auth';
88
- * import { initApi } from '@rationalbloks/frontblok-crud';
89
- *
90
- * const authApi = createAuthApi(import.meta.env.VITE_DATABASE_API_URL);
91
- * initApi(authApi);
92
- */
93
19
  export declare function initApi(authApi: AuthApiClient): UniversalApi;
94
- /**
95
- * Get the global CRUD API instance.
96
- * Throws if initApi hasn't been called.
97
- *
98
- * @returns The UniversalApi instance
99
- *
100
- * @example
101
- * import { getApi } from '@rationalbloks/frontblok-crud';
102
- *
103
- * const tasks = await getApi().getAll<Task>('tasks';
104
- */
105
20
  export declare function getApi(): UniversalApi;
106
- /**
107
- * Check if the API has been initialized.
108
- * Useful for conditional rendering or lazy initialization.
109
- */
110
21
  export declare function isApiInitialized(): boolean;
111
- /**
112
- * Reset the API instance (useful for testing).
113
- */
114
22
  export declare function resetApi(): void;
115
23
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAQD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAUlC;;;;;;;;;;OAUG;IACG,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,CAAC,EAAE,CAAC;IAmBf;;;;;;;;;OASG;IACG,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9E;;;;;;;;;OASG;IACG,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC;IAOb;;;;;;;;;;OAUG;IACG,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC;IAOb;;;;;;;;OAQG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D;;;OAGG;IACH,OAAO,CAAC,SAAS;CA2BlB;AAUD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAG5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,IAAI,YAAY,CAYrC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAE/B"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjE;AAQD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAY5B,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAClE,OAAO,CAAC,CAAC,EAAE,CAAC;IAqBT,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAMxE,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC;IASP,MAAM,CAAC,CAAC,SAAS,UAAU,EAC/B,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,CAAC;IASP,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,OAAO,CAAC,SAAS;CA2BlB;AAiBD,wBAAgB,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAG5D;AAMD,wBAAgB,MAAM,IAAI,YAAY,CAYrC;AAID,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAGD,wBAAgB,QAAQ,IAAI,IAAI,CAE/B"}
package/dist/api.js CHANGED
@@ -1,20 +1,8 @@
1
1
  // ============================================================================
2
2
  // FRONTBLOK-CRUD - UNIVERSAL CRUD API CLIENT
3
3
  // ============================================================================
4
- // Single class that handles ALL CRUD operations for ANY entity type.
5
- // Uses frontblok-auth's BaseApi for HTTP requests - NO DUPLICATE LOGIC!
6
- //
7
- // ARCHITECTURE (THE ONE WAY):
8
- // ┌─────────────────────────────────────────────────────────────────────────┐
9
- // │ frontblok-auth.BaseApi → Auth + HTTP (the ONLY HTTP layer) │
10
- // │ frontblok-crud.UniversalApi → CRUD methods using BaseApi │
11
- // └─────────────────────────────────────────────────────────────────────────┘
12
- //
13
- // CHAIN OF EVENTS MANTRA:
14
- // - Errors propagate up to the caller (hooks handle them)
15
- // - No try/catch here - let errors bubble for consistent handling
16
- // - Single path, single way, the right way
17
- // - ONE WAY to make HTTP calls: through frontblok-auth's BaseApi
4
+ // Single class that handles all CRUD operations for any entity type.
5
+ // Uses frontblok-auth's BaseApi for HTTP requests.
18
6
  //
19
7
  // USAGE:
20
8
  // ```typescript
@@ -42,19 +30,10 @@ export class UniversalApi {
42
30
  // ==========================================================================
43
31
  // UNIVERSAL CRUD OPERATIONS
44
32
  // ==========================================================================
45
- // These methods work with ANY entity - just pass the entity name.
46
- // Mirrors builderblok's UniversalCRUD class methods.
47
- /**
48
- * Get all entities of a type.
49
- *
50
- * @param entityName - The entity/table name (e.g., 'tasks', 'projects')
51
- * @param options - Optional query parameters
52
- * @returns Array of entities
53
- *
54
- * @example
55
- * const tasks = await api.getAll<Task>('tasks');
56
- * const activeTasks = await api.getAll<Task>('tasks', { status: 'active' });
57
- */
33
+ // These methods work with any entity - just pass the entity name.
34
+ // Get all entities of a type.
35
+ // const tasks = await api.getAll<Task>('tasks');
36
+ // const activeTasks = await api.getAll<Task>('tasks', { status: 'active' });
58
37
  async getAll(entityName, options) {
59
38
  // Build query string from options
60
39
  let query = '';
@@ -72,61 +51,29 @@ export class UniversalApi {
72
51
  }
73
52
  return this.authApi.request(`/api/${this.pluralize(entityName)}/${query}`);
74
53
  }
75
- /**
76
- * Get a single entity by ID.
77
- *
78
- * @param entityName - The entity/table name
79
- * @param id - Entity UUID
80
- * @returns The entity or throws if not found
81
- *
82
- * @example
83
- * const task = await api.getOne<Task>('tasks', 'uuid-here');
84
- */
54
+ // Get a single entity by ID.
55
+ // const task = await api.getOne<Task>('tasks', 'uuid-here');
85
56
  async getOne(entityName, id) {
86
57
  return this.authApi.request(`/api/${this.pluralize(entityName)}/${id}`);
87
58
  }
88
- /**
89
- * Create a new entity.
90
- *
91
- * @param entityName - The entity/table name
92
- * @param data - Entity data (without id, created_at, updated_at)
93
- * @returns The created entity with all fields
94
- *
95
- * @example
96
- * const task = await api.create<Task>('tasks', { title: 'New Task', status: 'pending' });
97
- */
59
+ // Create a new entity.
60
+ // const task = await api.create<Task>('tasks', { title: 'New Task', status: 'pending' });
98
61
  async create(entityName, data) {
99
62
  return this.authApi.request(`/api/${this.pluralize(entityName)}/`, {
100
63
  method: 'POST',
101
64
  body: JSON.stringify(data),
102
65
  });
103
66
  }
104
- /**
105
- * Update an existing entity.
106
- *
107
- * @param entityName - The entity/table name
108
- * @param id - Entity UUID
109
- * @param data - Partial entity data to update
110
- * @returns The updated entity
111
- *
112
- * @example
113
- * const task = await api.update<Task>('tasks', 'uuid-here', { status: 'done' });
114
- */
67
+ // Update an existing entity.
68
+ // const task = await api.update<Task>('tasks', 'uuid-here', { status: 'done' });
115
69
  async update(entityName, id, data) {
116
70
  return this.authApi.request(`/api/${this.pluralize(entityName)}/${id}`, {
117
71
  method: 'PATCH',
118
72
  body: JSON.stringify(data),
119
73
  });
120
74
  }
121
- /**
122
- * Delete an entity.
123
- *
124
- * @param entityName - The entity/table name
125
- * @param id - Entity UUID
126
- *
127
- * @example
128
- * await api.remove('tasks', 'uuid-here');
129
- */
75
+ // Delete an entity.
76
+ // await api.remove('tasks', 'uuid-here');
130
77
  async remove(entityName, id) {
131
78
  await this.authApi.request(`/api/${this.pluralize(entityName)}/${id}`, {
132
79
  method: 'DELETE',
@@ -135,10 +82,7 @@ export class UniversalApi {
135
82
  // ==========================================================================
136
83
  // UTILITY METHODS
137
84
  // ==========================================================================
138
- /**
139
- * Smart pluralization that matches builderblok's routes.py.
140
- * Mirrors the Python `pluralize()` function exactly.
141
- */
85
+ // Smart pluralization for API endpoint paths.
142
86
  pluralize(word) {
143
87
  if (!word)
144
88
  return word;
@@ -170,36 +114,21 @@ export class UniversalApi {
170
114
  // Global API instance - initialized once, used everywhere.
171
115
  // THE ONE WAY: initApi(authApi) with frontblok-auth's BaseApi instance.
172
116
  let apiInstance = null;
173
- /**
174
- * Initialize the global CRUD API instance.
175
- * Call this once at app startup (e.g., in main.tsx).
176
- *
177
- * @param authApi - The frontblok-auth BaseApi instance (from createAuthApi)
178
- * @returns The initialized UniversalApi instance
179
- *
180
- * @example
181
- * // In main.tsx or App.tsx
182
- * import { createAuthApi } from '@rationalbloks/frontblok-auth';
183
- * import { initApi } from '@rationalbloks/frontblok-crud';
184
- *
185
- * const authApi = createAuthApi(import.meta.env.VITE_DATABASE_API_URL);
186
- * initApi(authApi);
187
- */
117
+ // Initialize the global CRUD API instance.
118
+ // Call this once at app startup (e.g., in main.tsx).
119
+ // // In main.tsx or App.tsx
120
+ // import { createAuthApi } from '@rationalbloks/frontblok-auth';
121
+ // import { initApi } from '@rationalbloks/frontblok-crud';
122
+ // const authApi = createAuthApi(import.meta.env.VITE_DATABASE_API_URL);
123
+ // initApi(authApi);
188
124
  export function initApi(authApi) {
189
125
  apiInstance = new UniversalApi(authApi);
190
126
  return apiInstance;
191
127
  }
192
- /**
193
- * Get the global CRUD API instance.
194
- * Throws if initApi hasn't been called.
195
- *
196
- * @returns The UniversalApi instance
197
- *
198
- * @example
199
- * import { getApi } from '@rationalbloks/frontblok-crud';
200
- *
201
- * const tasks = await getApi().getAll<Task>('tasks';
202
- */
128
+ // Get the global CRUD API instance.
129
+ // Throws if initApi hasn't been called.
130
+ // import { getApi } from '@rationalbloks/frontblok-crud';
131
+ // const tasks = await getApi().getAll<Task>('tasks');
203
132
  export function getApi() {
204
133
  if (!apiInstance) {
205
134
  throw new Error('API not initialized. Call initApi(authApi) first, typically in main.tsx or App.tsx.\n' +
@@ -211,16 +140,12 @@ export function getApi() {
211
140
  }
212
141
  return apiInstance;
213
142
  }
214
- /**
215
- * Check if the API has been initialized.
216
- * Useful for conditional rendering or lazy initialization.
217
- */
143
+ // Check if the API has been initialized.
144
+ // Useful for conditional rendering or lazy initialization.
218
145
  export function isApiInitialized() {
219
146
  return apiInstance !== null;
220
147
  }
221
- /**
222
- * Reset the API instance (useful for testing).
223
- */
148
+ // Reset the API instance (useful for testing).
224
149
  export function resetApi() {
225
150
  apiInstance = null;
226
151
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6CAA6C;AAC7C,+EAA+E;AAC/E,qEAAqE;AACrE,wEAAwE;AACxE,EAAE;AACF,8BAA8B;AAC9B,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,0BAA0B;AAC1B,0DAA0D;AAC1D,kEAAkE;AAClE,2CAA2C;AAC3C,iEAAiE;AACjE,EAAE;AACF,SAAS;AACT,gBAAgB;AAChB,iEAAiE;AACjE,mEAAmE;AACnE,GAAG;AACH,oCAAoC;AACpC,wEAAwE;AACxE,oBAAoB;AACpB,GAAG;AACH,kBAAkB;AAClB,sDAAsD;AACtD,4EAA4E;AAC5E,MAAM;AACN,+EAA+E;AAkB/E,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAC/E,qEAAqE;AACrE,wEAAwE;AAExE,MAAM,OAAO,YAAY;IAGvB,YAAY,OAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,6EAA6E;IAC7E,4BAA4B;IAC5B,6EAA6E;IAC7E,kEAAkE;IAClE,qDAAqD;IAErD;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,OAAmE;QAEnE,kCAAkC;QAClC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAM,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAuB,UAAkB,EAAE,EAAU;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,IAA0D;QAE1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE;YACpE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,CACV,UAAkB,EAClB,EAAU,EACV,IAA0D;QAE1D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE;YACzE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,EAAU;QACzC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAO,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE;YAC3E,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAE7E;;;OAGG;IACK,SAAS,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,+CAA+C;QAC/C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,OAAO,IAAI,GAAG,GAAG,CAAC;IACpB,CAAC;CACF;AAED,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAC/E,2DAA2D;AAC3D,wEAAwE;AAExE,IAAI,WAAW,GAAwB,IAAI,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,OAAO,CAAC,OAAsB;IAC5C,WAAW,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,MAAM;IACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,uFAAuF;YACvF,YAAY;YACZ,oEAAoE;YACpE,8DAA8D;YAC9D,6CAA6C;YAC7C,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,4 @@
1
1
  import type { Schema } from './types.js';
2
- /**
3
- * Generate complete entities.ts content from a schema.
4
- * This is THE ONLY generation function needed.
5
- *
6
- * @param schema - The database schema in FLAT format
7
- * @returns Complete TypeScript file content
8
- */
9
2
  export declare function generateEntitiesTs(schema: Schema): string;
10
- /**
11
- * Validate a schema before generation.
12
- * Returns array of error messages (empty if valid).
13
- */
14
3
  export declare function validateSchema(schema: Schema): string[];
15
4
  //# sourceMappingURL=generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,MAAM,EAAwC,MAAM,YAAY,CAAC;AAQ/E;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBzD;AA4ID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAuDvD"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,MAAM,EAAwC,MAAM,YAAY,CAAC;AAU/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAyBzD;AAsID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAuDvD"}
package/dist/generator.js CHANGED
@@ -1,15 +1,7 @@
1
1
  // ============================================================================
2
2
  // FRONTBLOK-CRUD - ENTITIES.TS GENERATOR
3
3
  // ============================================================================
4
- // THE ONLY FILE THAT GETS GENERATED!
5
- //
6
- // This module generates entities.ts from a JSON schema.
7
- // Mirrors builderblok/scripts/customizer_entities.py exactly.
8
- //
9
- // PHILOSOPHY:
10
- // - This is the ONLY code generation needed
11
- // - Everything else (api.ts, hooks.ts) is GENERIC
12
- // - The generated file is ~50 lines, not 500+
4
+ // Generates TypeScript interfaces and entity registry from a JSON schema.
13
5
  //
14
6
  // WHAT IT GENERATES:
15
7
  // 1. TypeScript interfaces for each entity
@@ -26,13 +18,8 @@
26
18
  // ```
27
19
  // ============================================================================
28
20
  import { toPascalCase, toSingular, toPlural, schemaTypeToTs, } from './utils.js';
29
- /**
30
- * Generate complete entities.ts content from a schema.
31
- * This is THE ONLY generation function needed.
32
- *
33
- * @param schema - The database schema in FLAT format
34
- * @returns Complete TypeScript file content
35
- */
21
+ // Generate complete entities.ts content from a schema.
22
+ // This is THE ONLY generation function needed.
36
23
  export function generateEntitiesTs(schema) {
37
24
  const lines = [
38
25
  '// ============================================================================',
@@ -56,9 +43,7 @@ export function generateEntitiesTs(schema) {
56
43
  lines.push(...generateEntityRegistry(schema));
57
44
  return lines.join('\n');
58
45
  }
59
- /**
60
- * Generate TypeScript interface for a single entity.
61
- */
46
+ // Generate TypeScript interface for a single entity.
62
47
  function generateEntityInterface(tableName, fields) {
63
48
  const typeName = toPascalCase(toSingular(tableName));
64
49
  const lines = [];
@@ -86,10 +71,8 @@ function generateEntityInterface(tableName, fields) {
86
71
  lines.push(`export type Update${typeName}Input = UpdateInput<${typeName}>;`);
87
72
  return lines;
88
73
  }
89
- /**
90
- * Get TypeScript type string for a field config.
91
- * Handles enums and basic types.
92
- */
74
+ // Get TypeScript type string for a field config.
75
+ // Handles enums and basic types.
93
76
  function getTypeScriptType(fieldConfig) {
94
77
  // Handle enum types
95
78
  if (fieldConfig.enum && fieldConfig.enum.length > 0) {
@@ -98,9 +81,7 @@ function getTypeScriptType(fieldConfig) {
98
81
  // Handle basic types
99
82
  return schemaTypeToTs(fieldConfig.type);
100
83
  }
101
- /**
102
- * Generate entity registry for runtime use.
103
- */
84
+ // Generate entity registry for runtime use.
104
85
  function generateEntityRegistry(schema) {
105
86
  const lines = [
106
87
  '// ============================================================================',
@@ -130,10 +111,8 @@ function generateEntityRegistry(schema) {
130
111
  lines.push('export type EntityName = keyof Entities;');
131
112
  return lines;
132
113
  }
133
- /**
134
- * Format fields object as TypeScript object literal.
135
- * Compact single-line format for readability.
136
- */
114
+ // Format fields object as TypeScript object literal.
115
+ // Compact single-line format for readability.
137
116
  function formatFieldsAsTs(fields) {
138
117
  const fieldEntries = [];
139
118
  for (const [fieldName, fieldConfig] of Object.entries(fields)) {
@@ -168,10 +147,8 @@ function formatFieldsAsTs(fields) {
168
147
  // ============================================================================
169
148
  // VALIDATION
170
149
  // ============================================================================
171
- /**
172
- * Validate a schema before generation.
173
- * Returns array of error messages (empty if valid).
174
- */
150
+ // Validate a schema before generation.
151
+ // Returns array of error messages (empty if valid).
175
152
  export function validateSchema(schema) {
176
153
  const errors = [];
177
154
  if (!schema || typeof schema !== 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAC/E,0EAA0E;AAC1E,EAAE;AACF,qBAAqB;AACrB,2CAA2C;AAC3C,uCAAuC;AACvC,uDAAuD;AACvD,EAAE;AACF,kBAAkB;AAClB,gBAAgB;AAChB,sEAAsE;AACtE,GAAG;AACH,2EAA2E;AAC3E,2CAA2C;AAC3C,6CAA6C;AAC7C,MAAM;AACN,+EAA+E;AAG/E,OAAO,EACL,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,uDAAuD;AACvD,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAa;QACtB,iFAAiF;QACjF,uBAAuB;QACvB,iFAAiF;QACjF,mCAAmC;QACnC,kDAAkD;QAClD,IAAI;QACJ,iBAAiB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QAC3C,iFAAiF;QACjF,EAAE;QACF,4GAA4G;QAC5G,EAAE;KACH,CAAC;IAEF,sCAAsC;IACtC,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,qDAAqD;AACrD,SAAS,uBAAuB,CAC9B,SAAiB,EACjB,MAAoB;IAEpB,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,iBAAiB;IACjB,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;IAC9F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,uBAAuB,CAAC,CAAC;IAEhE,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,uBAAuB;QACvB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExC,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACjD,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhF,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,QAAQ,KAAK,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,uBAAuB,QAAQ,IAAI,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,qBAAqB,QAAQ,uBAAuB,QAAQ,IAAI,CAAC,CAAC;IAE7E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iDAAiD;AACjD,iCAAiC;AACjC,SAAS,iBAAiB,CAAC,WAAwB;IACjD,oBAAoB;IACpB,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,qBAAqB;IACrB,OAAO,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,KAAK,GAAa;QACtB,iFAAiF;QACjF,oBAAoB;QACpB,iFAAiF;QACjF,oDAAoD;QACpD,0DAA0D;QAC1D,EAAE;QACF,2BAA2B;KAC5B,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAExC,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,IAAI,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,IAAI,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,eAAe,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,+BAA+B;IAC/B,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAEvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qDAAqD;AACrD,8CAA8C;AAC9C,SAAS,gBAAgB,CAAC,MAAoB;IAC5C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,uBAAuB;QACvB,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QAE1C,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,eAAe,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,iDAAiD;IACjD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAClE,CAAC;IAED,OAAO,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC/C,CAAC;AAED,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,uCAAuC;AACvC,oDAAoD;AACpD,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAgB;QAC9B,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QACtC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;KAC9C,CAAC;IAEF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,SAAS,6BAA6B,CAAC,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,gBAAgB;YAChB,IAAI,SAAS,KAAK,KAAK;gBAAE,SAAS;YAElC,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,kCAAkC,CAAC,CAAC;gBACzE,SAAS;YACX,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,2BAA2B,CAAC,CAAC;gBAClE,SAAS;YACX,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,mBAAmB,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;YAC/E,CAAC;YAED,sCAAsC;YACtC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC7D,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,mCAAmC,CAAC,CAAC;YAC5E,CAAC;YAED,gDAAgD;YAChD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,mCAAmC,CAAC,CAAC;gBAC5E,CAAC;gBACD,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,IAAI,SAAS,+BAA+B,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}