@trokky/client 2.0.3
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 +833 -0
- package/dist/cache/manager.d.ts +47 -0
- package/dist/cache/manager.d.ts.map +1 -0
- package/dist/cache/manager.js +100 -0
- package/dist/cache/manager.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +159 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client.d.ts +221 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +310 -0
- package/dist/client.js.map +1 -0
- package/dist/document/client.d.ts +57 -0
- package/dist/document/client.d.ts.map +1 -0
- package/dist/document/client.js +176 -0
- package/dist/document/client.js.map +1 -0
- package/dist/generator/document-generator.d.ts +50 -0
- package/dist/generator/document-generator.d.ts.map +1 -0
- package/dist/generator/document-generator.js +329 -0
- package/dist/generator/document-generator.js.map +1 -0
- package/dist/generator/index.d.ts +121 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +559 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/http/client.d.ts +117 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +411 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/media/helper.d.ts +89 -0
- package/dist/media/helper.d.ts.map +1 -0
- package/dist/media/helper.js +197 -0
- package/dist/media/helper.js.map +1 -0
- package/dist/media/url-builder.d.ts +142 -0
- package/dist/media/url-builder.d.ts.map +1 -0
- package/dist/media/url-builder.js +280 -0
- package/dist/media/url-builder.js.map +1 -0
- package/dist/query/builder.d.ts +270 -0
- package/dist/query/builder.d.ts.map +1 -0
- package/dist/query/builder.js +731 -0
- package/dist/query/builder.js.map +1 -0
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +5 -0
- package/dist/query/index.js.map +1 -0
- package/dist/react/hooks.d.ts +42 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +59 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/react/index.d.ts +6 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +6 -0
- package/dist/react/index.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/media-proxy.d.ts +102 -0
- package/dist/server/media-proxy.d.ts.map +1 -0
- package/dist/server/media-proxy.js +160 -0
- package/dist/server/media-proxy.js.map +1 -0
- package/dist/shortcodes/index.d.ts +11 -0
- package/dist/shortcodes/index.d.ts.map +1 -0
- package/dist/shortcodes/index.js +10 -0
- package/dist/shortcodes/index.js.map +1 -0
- package/dist/shortcodes/parser.d.ts +32 -0
- package/dist/shortcodes/parser.d.ts.map +1 -0
- package/dist/shortcodes/parser.js +88 -0
- package/dist/shortcodes/parser.js.map +1 -0
- package/dist/shortcodes/resolver.d.ts +57 -0
- package/dist/shortcodes/resolver.d.ts.map +1 -0
- package/dist/shortcodes/resolver.js +97 -0
- package/dist/shortcodes/resolver.js.map +1 -0
- package/dist/shortcodes/types.d.ts +17 -0
- package/dist/shortcodes/types.d.ts.map +1 -0
- package/dist/shortcodes/types.js +6 -0
- package/dist/shortcodes/types.js.map +1 -0
- package/dist/types/index.d.ts +134 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Type Generator
|
|
3
|
+
* Generates TypeScript types from Trokky schema definitions
|
|
4
|
+
*/
|
|
5
|
+
export class TypeGenerator {
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.options = {
|
|
8
|
+
outputDir: options.outputDir,
|
|
9
|
+
schemaUrl: options.schemaUrl,
|
|
10
|
+
namespace: options.namespace || 'Trokky',
|
|
11
|
+
fileExtension: options.fileExtension || 'ts',
|
|
12
|
+
includeValidation: options.includeValidation ?? true,
|
|
13
|
+
authToken: options.authToken,
|
|
14
|
+
username: options.username,
|
|
15
|
+
password: options.password
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate TypeScript types from schema URL
|
|
20
|
+
*/
|
|
21
|
+
async generateFromUrl() {
|
|
22
|
+
const schema = await this.fetchSchema();
|
|
23
|
+
await this.generateTypes(schema);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generate TypeScript types from schema object
|
|
27
|
+
*/
|
|
28
|
+
async generateFromSchema(schema) {
|
|
29
|
+
await this.generateTypes(schema);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Fetch schema from remote URL
|
|
33
|
+
*/
|
|
34
|
+
async fetchSchema() {
|
|
35
|
+
try {
|
|
36
|
+
// Use the schemaUrl directly, which should point to /api/collections
|
|
37
|
+
const apiUrl = this.options.schemaUrl;
|
|
38
|
+
// Handle authentication
|
|
39
|
+
let authToken = this.options.authToken;
|
|
40
|
+
// If no token but username/password provided, login first
|
|
41
|
+
if (!authToken && this.options.username && this.options.password) {
|
|
42
|
+
const loginUrl = apiUrl.replace('/api/collections', '/api/auth/login');
|
|
43
|
+
const loginResponse = await fetch(loginUrl, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json'
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify({
|
|
49
|
+
credentials: {
|
|
50
|
+
username: this.options.username,
|
|
51
|
+
password: this.options.password
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
if (!loginResponse.ok) {
|
|
56
|
+
throw new Error(`Authentication failed: ${loginResponse.status} ${loginResponse.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const loginData = await loginResponse.json();
|
|
59
|
+
if (loginData.success && loginData.data?.token) {
|
|
60
|
+
authToken = loginData.data.token;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw new Error('Authentication failed: No token received');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Prepare headers
|
|
67
|
+
const headers = {};
|
|
68
|
+
if (authToken) {
|
|
69
|
+
headers['Authorization'] = `Bearer ${authToken}`;
|
|
70
|
+
}
|
|
71
|
+
const response = await fetch(apiUrl, { headers });
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
throw new Error(`Failed to fetch schema: ${response.status} ${response.statusText}`);
|
|
74
|
+
}
|
|
75
|
+
const data = await response.json();
|
|
76
|
+
// Transform Trokky API response to ProjectSchema format
|
|
77
|
+
if (data.success && data.data && data.data.collections) {
|
|
78
|
+
const collections = data.data.collections;
|
|
79
|
+
return {
|
|
80
|
+
name: 'TrokkyProject',
|
|
81
|
+
version: '1.0.0',
|
|
82
|
+
documents: collections.map((collection) => ({
|
|
83
|
+
name: collection.name,
|
|
84
|
+
title: collection.title || collection.name,
|
|
85
|
+
description: collection.description,
|
|
86
|
+
fields: this.transformFields(collection.fields || {})
|
|
87
|
+
}))
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Fallback: try to parse as direct ProjectSchema format
|
|
91
|
+
return data;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
throw new Error(`Failed to fetch schema from ${this.options.schemaUrl}: ${error}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Transform Trokky field format to generator field format
|
|
99
|
+
*/
|
|
100
|
+
transformFields(fields) {
|
|
101
|
+
// Handle array format (nested fields in objects/arrays)
|
|
102
|
+
if (Array.isArray(fields)) {
|
|
103
|
+
return fields.map(field => ({
|
|
104
|
+
name: field.name,
|
|
105
|
+
type: field.type,
|
|
106
|
+
title: field.title,
|
|
107
|
+
description: field.description,
|
|
108
|
+
required: field.required,
|
|
109
|
+
validation: field.validation,
|
|
110
|
+
options: field.options,
|
|
111
|
+
// Handle new field formats
|
|
112
|
+
fields: field.fields ? this.transformFields(field.fields) : undefined,
|
|
113
|
+
of: field.of ? this.transformSingleField(field.of) : undefined,
|
|
114
|
+
to: field.to
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
// Handle Record format (modern ObjectField format: Record<string, NestedFieldDefinition>)
|
|
118
|
+
return Object.entries(fields).map(([name, field]) => ({
|
|
119
|
+
name,
|
|
120
|
+
type: field.type,
|
|
121
|
+
title: field.title,
|
|
122
|
+
description: field.description,
|
|
123
|
+
required: field.required,
|
|
124
|
+
validation: field.validation,
|
|
125
|
+
options: field.options,
|
|
126
|
+
// Handle nested fields for object types (Record format)
|
|
127
|
+
fields: field.fields ? this.transformFields(field.fields) : undefined,
|
|
128
|
+
of: field.of ? this.transformSingleField(field.of) : undefined,
|
|
129
|
+
to: field.to
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Transform a single field (used for array 'of' property)
|
|
134
|
+
*/
|
|
135
|
+
transformSingleField(field) {
|
|
136
|
+
return {
|
|
137
|
+
name: field.name || 'item', // fallback name for array items
|
|
138
|
+
type: field.type,
|
|
139
|
+
title: field.title,
|
|
140
|
+
description: field.description,
|
|
141
|
+
required: field.required,
|
|
142
|
+
validation: field.validation,
|
|
143
|
+
options: field.options,
|
|
144
|
+
// Handle new field formats
|
|
145
|
+
fields: field.fields ? this.transformFields(field.fields) : undefined,
|
|
146
|
+
of: field.of ? this.transformSingleField(field.of) : undefined,
|
|
147
|
+
to: field.to
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Generate TypeScript types from schema
|
|
152
|
+
*/
|
|
153
|
+
async generateTypes(schema) {
|
|
154
|
+
const fs = await import('fs/promises');
|
|
155
|
+
const path = await import('path');
|
|
156
|
+
// Ensure output directory exists
|
|
157
|
+
await fs.mkdir(this.options.outputDir, { recursive: true });
|
|
158
|
+
// Generate document types
|
|
159
|
+
for (const document of schema.documents) {
|
|
160
|
+
const typeContent = this.generateDocumentType(document);
|
|
161
|
+
const filename = `${this.camelToKebab(document.name)}.${this.options.fileExtension}`;
|
|
162
|
+
const filepath = path.join(this.options.outputDir, filename);
|
|
163
|
+
await fs.writeFile(filepath, typeContent, 'utf8');
|
|
164
|
+
}
|
|
165
|
+
// Generate index file
|
|
166
|
+
const indexContent = this.generateIndex(schema.documents);
|
|
167
|
+
const indexFilepath = path.join(this.options.outputDir, `index.${this.options.fileExtension}`);
|
|
168
|
+
await fs.writeFile(indexFilepath, indexContent, 'utf8');
|
|
169
|
+
console.log(`Generated TypeScript types for ${schema.documents.length} documents in ${this.options.outputDir}`);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Generate TypeScript interface for a document
|
|
173
|
+
*/
|
|
174
|
+
generateDocumentType(document) {
|
|
175
|
+
const imports = ['BaseDocument'];
|
|
176
|
+
// Check if we need MediaFieldValue import
|
|
177
|
+
const hasMediaFields = this.hasMediaFields(document.fields);
|
|
178
|
+
if (hasMediaFields) {
|
|
179
|
+
imports.push('MediaFieldValue');
|
|
180
|
+
}
|
|
181
|
+
const interfaceName = `${document.name}Document`;
|
|
182
|
+
let content = `/**\n * ${document.title || document.name}\n`;
|
|
183
|
+
if (document.description) {
|
|
184
|
+
content += ` * ${document.description}\n`;
|
|
185
|
+
}
|
|
186
|
+
content += ` * Generated from Trokky schema\n */\n\n`;
|
|
187
|
+
// Add imports
|
|
188
|
+
content += `import type { ${imports.join(', ')} } from '@trokky/trokky/types'\n\n`;
|
|
189
|
+
// Generate field interfaces if needed
|
|
190
|
+
const complexFields = document.fields.filter(field => field.type === 'object' || field.type === 'array' || field.type === 'reference');
|
|
191
|
+
for (const field of complexFields) {
|
|
192
|
+
content += this.generateFieldInterface(field, document.name);
|
|
193
|
+
content += '\n\n';
|
|
194
|
+
}
|
|
195
|
+
// Generate main document interface
|
|
196
|
+
content += `export interface ${interfaceName} extends BaseDocument {\n`;
|
|
197
|
+
content += ` _type: '${document.name}'\n`;
|
|
198
|
+
for (const field of document.fields) {
|
|
199
|
+
const fieldType = this.mapFieldType(field, document.name);
|
|
200
|
+
const optional = field.required ? '' : '?';
|
|
201
|
+
content += ` ${field.name}${optional}: ${fieldType}\n`;
|
|
202
|
+
}
|
|
203
|
+
content += '}\n';
|
|
204
|
+
// Generate validation schema if requested
|
|
205
|
+
if (this.options.includeValidation) {
|
|
206
|
+
content += '\n';
|
|
207
|
+
content += this.generateValidationSchema(document);
|
|
208
|
+
}
|
|
209
|
+
return content;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if document has media fields (recursively)
|
|
213
|
+
*/
|
|
214
|
+
hasMediaFields(fields) {
|
|
215
|
+
for (const field of fields) {
|
|
216
|
+
// Check for all media field types
|
|
217
|
+
if (['media', 'image', 'audio', 'video', 'document'].includes(field.type)) {
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
// Check nested fields in objects (both array and Record formats)
|
|
221
|
+
if (field.type === 'object') {
|
|
222
|
+
const objectFields = field.fields || field.options?.fields;
|
|
223
|
+
if (objectFields) {
|
|
224
|
+
// Handle Record format
|
|
225
|
+
if (!Array.isArray(objectFields)) {
|
|
226
|
+
const fieldArray = Object.values(objectFields);
|
|
227
|
+
if (this.hasMediaFields(fieldArray)) {
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Handle array format
|
|
232
|
+
else if (this.hasMediaFields(objectFields)) {
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Check array item types
|
|
238
|
+
if (field.type === 'array') {
|
|
239
|
+
const arrayItemDef = field.of || field.items;
|
|
240
|
+
if (arrayItemDef && ['media', 'image', 'audio', 'video', 'document'].includes(arrayItemDef.type)) {
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
// Check if array contains objects with media fields
|
|
244
|
+
if (arrayItemDef && arrayItemDef.type === 'object') {
|
|
245
|
+
const arrayObjectFields = arrayItemDef.fields || arrayItemDef.options?.fields;
|
|
246
|
+
if (arrayObjectFields) {
|
|
247
|
+
// Handle Record format
|
|
248
|
+
if (!Array.isArray(arrayObjectFields)) {
|
|
249
|
+
const fieldArray = Object.values(arrayObjectFields);
|
|
250
|
+
if (this.hasMediaFields(fieldArray)) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// Handle array format
|
|
255
|
+
else if (this.hasMediaFields(arrayObjectFields)) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate TypeScript interface for complex field types
|
|
266
|
+
*/
|
|
267
|
+
generateFieldInterface(field, documentName) {
|
|
268
|
+
const interfaceName = `${documentName}${this.capitalize(field.name)}`;
|
|
269
|
+
let content = `export interface ${interfaceName} {\n`;
|
|
270
|
+
if (field.type === 'object') {
|
|
271
|
+
// Handle both Record format and array format
|
|
272
|
+
const objectFields = field.fields || field.options?.fields;
|
|
273
|
+
if (objectFields) {
|
|
274
|
+
// Handle Record format (modern ObjectField format)
|
|
275
|
+
if (!Array.isArray(objectFields)) {
|
|
276
|
+
for (const [fieldName, subField] of Object.entries(objectFields)) {
|
|
277
|
+
const subFieldSchema = subField;
|
|
278
|
+
const fieldType = this.mapFieldType({ ...subFieldSchema, name: fieldName }, documentName);
|
|
279
|
+
const optional = subFieldSchema.required ? '' : '?';
|
|
280
|
+
content += ` ${fieldName}${optional}: ${fieldType}\n`;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// Handle array format (legacy)
|
|
284
|
+
else {
|
|
285
|
+
for (const subField of objectFields) {
|
|
286
|
+
const fieldType = this.mapFieldType(subField, documentName);
|
|
287
|
+
const optional = subField.required ? '' : '?';
|
|
288
|
+
content += ` ${subField.name}${optional}: ${fieldType}\n`;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
else if (field.type === 'reference') {
|
|
294
|
+
content += ` _ref: string\n`;
|
|
295
|
+
// Updated to handle new reference format: field.to instead of field.options?.to
|
|
296
|
+
const refType = field.to || field.options?.to || 'reference';
|
|
297
|
+
if (Array.isArray(refType)) {
|
|
298
|
+
content += ` _type: ${refType.map(t => `'${t}'`).join(' | ')}\n`;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
content += ` _type: '${refType}'\n`;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
content += '}';
|
|
305
|
+
return content;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Map field type to TypeScript type
|
|
309
|
+
*/
|
|
310
|
+
mapFieldType(field, documentName) {
|
|
311
|
+
switch (field.type) {
|
|
312
|
+
case 'string':
|
|
313
|
+
case 'text':
|
|
314
|
+
case 'slug':
|
|
315
|
+
case 'email':
|
|
316
|
+
case 'url':
|
|
317
|
+
case 'password':
|
|
318
|
+
return 'string';
|
|
319
|
+
case 'number':
|
|
320
|
+
return 'number';
|
|
321
|
+
case 'boolean':
|
|
322
|
+
return 'boolean';
|
|
323
|
+
case 'date':
|
|
324
|
+
case 'datetime':
|
|
325
|
+
return 'string | Date';
|
|
326
|
+
case 'array':
|
|
327
|
+
// Support both legacy format (items) and new format (of)
|
|
328
|
+
const arrayItemDef = field.of || field.items;
|
|
329
|
+
const itemType = arrayItemDef ? this.mapFieldType(arrayItemDef, documentName) : 'any';
|
|
330
|
+
return `${itemType}[]`;
|
|
331
|
+
case 'object':
|
|
332
|
+
return `${documentName}${this.capitalize(field.name)}`;
|
|
333
|
+
case 'reference':
|
|
334
|
+
// Updated to handle new reference format: field.to instead of field.options?.to
|
|
335
|
+
const refType = field.to || field.options?.to || 'any';
|
|
336
|
+
// Handle multiple reference types
|
|
337
|
+
if (Array.isArray(refType)) {
|
|
338
|
+
const types = refType.map(t => `${t}Document`).join(' | ');
|
|
339
|
+
return `string | ${types}`;
|
|
340
|
+
}
|
|
341
|
+
return `string | ${refType}Document`;
|
|
342
|
+
case 'media':
|
|
343
|
+
case 'image':
|
|
344
|
+
case 'audio':
|
|
345
|
+
case 'video':
|
|
346
|
+
case 'document':
|
|
347
|
+
return 'MediaFieldValue | null';
|
|
348
|
+
case 'file':
|
|
349
|
+
return 'string | { _ref: string; url?: string; metadata?: Record<string, any> }';
|
|
350
|
+
case 'portableText':
|
|
351
|
+
return 'any[] // Portable Text blocks';
|
|
352
|
+
case 'richText':
|
|
353
|
+
case 'richtext':
|
|
354
|
+
return 'any[] // Rich text blocks';
|
|
355
|
+
default:
|
|
356
|
+
return 'any';
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Generate validation schema
|
|
361
|
+
*/
|
|
362
|
+
generateValidationSchema(document) {
|
|
363
|
+
const schemaName = `${document.name}ValidationSchema`;
|
|
364
|
+
let content = `export const ${schemaName} = {\n`;
|
|
365
|
+
content += ` type: '${document.name}',\n`;
|
|
366
|
+
content += ` fields: {\n`;
|
|
367
|
+
for (const field of document.fields) {
|
|
368
|
+
content += ` ${field.name}: {\n`;
|
|
369
|
+
content += ` type: '${field.type}',\n`;
|
|
370
|
+
if (field.required) {
|
|
371
|
+
content += ` required: true,\n`;
|
|
372
|
+
}
|
|
373
|
+
if (field.validation) {
|
|
374
|
+
for (const [key, value] of Object.entries(field.validation)) {
|
|
375
|
+
content += ` ${key}: ${JSON.stringify(value)},\n`;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
content += ` },\n`;
|
|
379
|
+
}
|
|
380
|
+
content += ' }\n';
|
|
381
|
+
content += '}';
|
|
382
|
+
return content;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Generate index file
|
|
386
|
+
*/
|
|
387
|
+
generateIndex(documents) {
|
|
388
|
+
let content = `/**\n * Generated TypeScript types for Trokky CMS\n * Auto-generated - do not edit manually\n */\n\n`;
|
|
389
|
+
// Export document types (no .js extension for better compatibility)
|
|
390
|
+
for (const document of documents) {
|
|
391
|
+
const filename = this.camelToKebab(document.name);
|
|
392
|
+
content += `export * from './${filename}'\n`;
|
|
393
|
+
}
|
|
394
|
+
// Export utility types
|
|
395
|
+
content += '\n// Utility types\n';
|
|
396
|
+
content += 'export type DocumentTypes = \n';
|
|
397
|
+
content += documents.map(doc => ` | '${doc.name}'`).join('\n');
|
|
398
|
+
content += '\n\n';
|
|
399
|
+
content += 'export type AllDocuments = \n';
|
|
400
|
+
content += documents.map(doc => ` | ${doc.name}Document`).join('\n');
|
|
401
|
+
content += '\n';
|
|
402
|
+
return content;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Utility functions
|
|
406
|
+
*/
|
|
407
|
+
capitalize(str) {
|
|
408
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
409
|
+
}
|
|
410
|
+
camelToKebab(str) {
|
|
411
|
+
return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* CLI function for generating types from URL
|
|
416
|
+
*/
|
|
417
|
+
export async function generateTypes(options) {
|
|
418
|
+
const generator = new TypeGenerator(options);
|
|
419
|
+
await generator.generateFromUrl();
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Generate types from local schema files
|
|
423
|
+
*
|
|
424
|
+
* @example
|
|
425
|
+
* ```typescript
|
|
426
|
+
* await generateTypesFromPath({
|
|
427
|
+
* schemaPath: '../cms/schemas',
|
|
428
|
+
* outputDir: './src/types/cms'
|
|
429
|
+
* })
|
|
430
|
+
* ```
|
|
431
|
+
*/
|
|
432
|
+
export async function generateTypesFromPath(options) {
|
|
433
|
+
const fs = await import('fs/promises');
|
|
434
|
+
const path = await import('path');
|
|
435
|
+
const { pathToFileURL } = await import('url');
|
|
436
|
+
const schemaDir = path.resolve(options.schemaPath);
|
|
437
|
+
// Check if schemas/index.ts exists
|
|
438
|
+
const indexPath = path.join(schemaDir, 'index.ts');
|
|
439
|
+
const indexJsPath = path.join(schemaDir, 'index.js');
|
|
440
|
+
let schemas = [];
|
|
441
|
+
// Try to import from index file first
|
|
442
|
+
try {
|
|
443
|
+
// Check which file exists
|
|
444
|
+
let importPath;
|
|
445
|
+
try {
|
|
446
|
+
await fs.access(indexJsPath);
|
|
447
|
+
importPath = indexJsPath;
|
|
448
|
+
}
|
|
449
|
+
catch {
|
|
450
|
+
// If .js doesn't exist, try .ts via tsx or direct import
|
|
451
|
+
importPath = indexPath;
|
|
452
|
+
}
|
|
453
|
+
const fileUrl = pathToFileURL(importPath).href;
|
|
454
|
+
const module = await import(/* @vite-ignore */ fileUrl);
|
|
455
|
+
if (module.schemas && Array.isArray(module.schemas)) {
|
|
456
|
+
schemas = module.schemas;
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
// Try to find all exported schemas
|
|
460
|
+
schemas = Object.values(module).filter((exp) => exp && typeof exp === 'object' && exp.name && exp.fields);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
catch (err) {
|
|
464
|
+
// Fallback: read individual schema files
|
|
465
|
+
console.log('Could not import schemas/index, scanning individual files...');
|
|
466
|
+
const files = await fs.readdir(schemaDir);
|
|
467
|
+
const schemaFiles = files.filter(f => (f.endsWith('.ts') || f.endsWith('.js')) &&
|
|
468
|
+
f !== 'index.ts' &&
|
|
469
|
+
f !== 'index.js' &&
|
|
470
|
+
!f.startsWith('utils'));
|
|
471
|
+
for (const file of schemaFiles) {
|
|
472
|
+
try {
|
|
473
|
+
const filePath = path.join(schemaDir, file);
|
|
474
|
+
const fileUrl = pathToFileURL(filePath).href;
|
|
475
|
+
const module = await import(/* @vite-ignore */ fileUrl);
|
|
476
|
+
// Find schema export (usually named *Schema)
|
|
477
|
+
const schemaExport = Object.values(module).find((exp) => exp && typeof exp === 'object' && exp.name && exp.fields);
|
|
478
|
+
if (schemaExport) {
|
|
479
|
+
schemas.push(schemaExport);
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
catch (fileErr) {
|
|
483
|
+
console.warn(`Warning: Could not import ${file}:`, fileErr);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (schemas.length === 0) {
|
|
488
|
+
throw new Error(`No schemas found in ${schemaDir}`);
|
|
489
|
+
}
|
|
490
|
+
console.log(`Found ${schemas.length} schemas`);
|
|
491
|
+
// Transform to ProjectSchema format
|
|
492
|
+
const projectSchema = {
|
|
493
|
+
name: 'TrokkyProject',
|
|
494
|
+
version: '1.0.0',
|
|
495
|
+
documents: schemas.map(schema => ({
|
|
496
|
+
name: schema.name,
|
|
497
|
+
title: schema.title || schema.name,
|
|
498
|
+
description: schema.description,
|
|
499
|
+
fields: transformSchemaFields(schema.fields)
|
|
500
|
+
}))
|
|
501
|
+
};
|
|
502
|
+
// Generate types using existing generator
|
|
503
|
+
const generator = new TypeGenerator({
|
|
504
|
+
schemaUrl: '', // Not used
|
|
505
|
+
outputDir: options.outputDir,
|
|
506
|
+
namespace: options.namespace || 'Trokky',
|
|
507
|
+
fileExtension: options.fileExtension || 'ts',
|
|
508
|
+
includeValidation: options.includeValidation ?? true
|
|
509
|
+
});
|
|
510
|
+
await generator.generateFromSchema(projectSchema);
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Transform Trokky schema fields to generator format
|
|
514
|
+
*/
|
|
515
|
+
function transformSchemaFields(fields) {
|
|
516
|
+
// Handle array format
|
|
517
|
+
if (Array.isArray(fields)) {
|
|
518
|
+
return fields.map(field => transformSingleField(field.name, field));
|
|
519
|
+
}
|
|
520
|
+
// Handle Record format (modern ObjectField format)
|
|
521
|
+
return Object.entries(fields).map(([name, field]) => transformSingleField(name, field));
|
|
522
|
+
}
|
|
523
|
+
function transformSingleField(name, field) {
|
|
524
|
+
const result = {
|
|
525
|
+
name,
|
|
526
|
+
type: field.type,
|
|
527
|
+
title: field.title,
|
|
528
|
+
description: field.description,
|
|
529
|
+
required: field.required,
|
|
530
|
+
validation: field.validation,
|
|
531
|
+
options: field.options
|
|
532
|
+
};
|
|
533
|
+
// Handle nested object fields
|
|
534
|
+
if (field.type === 'object' && field.fields) {
|
|
535
|
+
result.fields = transformSchemaFields(field.fields);
|
|
536
|
+
}
|
|
537
|
+
// Handle array 'of' field
|
|
538
|
+
if (field.type === 'array' && field.of) {
|
|
539
|
+
result.of = transformSingleField('item', field.of);
|
|
540
|
+
}
|
|
541
|
+
// Handle reference 'to' field
|
|
542
|
+
if (field.type === 'reference' && field.to) {
|
|
543
|
+
result.to = field.to;
|
|
544
|
+
}
|
|
545
|
+
return result;
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Generate types from schema object
|
|
549
|
+
*/
|
|
550
|
+
export async function generateTypesFromSchema(schema, options) {
|
|
551
|
+
const generator = new TypeGenerator({
|
|
552
|
+
...options,
|
|
553
|
+
schemaUrl: '' // Not used when generating from schema object
|
|
554
|
+
});
|
|
555
|
+
await generator.generateFromSchema(schema);
|
|
556
|
+
}
|
|
557
|
+
// Document generation exports (development only)
|
|
558
|
+
export { DocumentGenerator, generateDocuments } from './document-generator.js';
|
|
559
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
|