@eide/uniformgen 0.1.3 → 0.1.5
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/dist/commands/login.js +6 -6
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +44 -6
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +15 -4
- package/dist/fetcher/fetch-schemas.d.ts.map +1 -1
- package/dist/fetcher/fetch-schemas.js +6 -4
- package/dist/generators/admin/queries.d.ts.map +1 -1
- package/dist/generators/admin/queries.js +15 -12
- package/dist/generators/documents/entity-models.d.ts.map +1 -1
- package/dist/generators/documents/entity-models.js +2 -1
- package/dist/generators/types/entity-models.d.ts.map +1 -1
- package/dist/generators/types/entity-models.js +2 -1
- package/dist/graphql/generated/graphql.d.ts +87 -371
- package/dist/graphql/generated/graphql.d.ts.map +1 -1
- package/dist/graphql/generated/graphql.js +0 -6
- package/dist/utils/field-mapping.d.ts.map +1 -1
- package/dist/utils/field-mapping.js +24 -5
- package/package.json +14 -14
package/dist/commands/login.js
CHANGED
|
@@ -100,20 +100,20 @@ export async function login(options) {
|
|
|
100
100
|
reject(new Error('Invalid state parameter'));
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
|
-
// Derive
|
|
103
|
+
// Derive main URL from API URL (api.foir.build -> foir.build)
|
|
104
104
|
const apiHost = new URL(options.apiUrl).host;
|
|
105
|
-
const
|
|
106
|
-
const
|
|
105
|
+
const mainHost = apiHost.replace(/^api\./, '');
|
|
106
|
+
const mainUrl = `https://${mainHost}`;
|
|
107
107
|
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
108
108
|
res.end(`
|
|
109
109
|
<html>
|
|
110
110
|
<head>
|
|
111
|
-
<meta http-equiv="refresh" content="2;url=${
|
|
111
|
+
<meta http-equiv="refresh" content="2;url=${mainUrl}">
|
|
112
112
|
</head>
|
|
113
113
|
<body style="font-family: system-ui; text-align: center; padding: 50px;">
|
|
114
114
|
<h1>Authentication successful!</h1>
|
|
115
|
-
<p>Redirecting
|
|
116
|
-
<p style="color: #666; font-size: 14px;">If not redirected, <a href="${
|
|
115
|
+
<p>Redirecting...</p>
|
|
116
|
+
<p style="color: #666; font-size: 14px;">If not redirected, <a href="${mainUrl}">click here</a>.</p>
|
|
117
117
|
</body>
|
|
118
118
|
</html>
|
|
119
119
|
`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAaA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAaA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmXD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8J9D"}
|
package/dist/commands/push.js
CHANGED
|
@@ -41,17 +41,46 @@ async function fetchRemoteSchemas(apiUrl, accessToken, tenantId, projectId) {
|
|
|
41
41
|
`,
|
|
42
42
|
}),
|
|
43
43
|
});
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
// Parse response body regardless of status code
|
|
45
|
+
// GraphQL can return errors with 200 or 500 status
|
|
46
|
+
const responseText = await response.text().catch(() => 'No response body');
|
|
47
|
+
let result;
|
|
48
|
+
try {
|
|
49
|
+
result = JSON.parse(responseText);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
46
52
|
console.error(`[Debug] API URL: ${apiUrl}`);
|
|
47
53
|
console.error(`[Debug] Response status: ${response.status}`);
|
|
48
|
-
console.error(`[Debug] Response body: ${
|
|
49
|
-
throw new Error(`Failed to fetch schemas:
|
|
54
|
+
console.error(`[Debug] Response body: ${responseText.substring(0, 500)}`);
|
|
55
|
+
throw new Error(`Failed to fetch schemas: Invalid JSON response`);
|
|
50
56
|
}
|
|
51
|
-
|
|
57
|
+
// Check for GraphQL errors
|
|
52
58
|
if (result.errors && result.errors.length > 0) {
|
|
59
|
+
const firstError = result.errors[0];
|
|
60
|
+
const errorCode = firstError?.extensions?.code;
|
|
61
|
+
const errorMessage = firstError?.message ?? 'Unknown error';
|
|
62
|
+
console.error(`[Debug] API URL: ${apiUrl}`);
|
|
63
|
+
console.error(`[Debug] Response status: ${response.status}`);
|
|
53
64
|
console.error(`[Debug] GraphQL errors:`, JSON.stringify(result.errors, null, 2));
|
|
54
|
-
|
|
65
|
+
// Provide helpful hints for common errors
|
|
66
|
+
if (errorCode === 'UNAUTHENTICATED' || errorMessage.includes('Session expired')) {
|
|
67
|
+
throw new Error(`Authentication failed: ${errorMessage}\n` +
|
|
68
|
+
`Your session may have expired. Run 'uniformgen login' to re-authenticate.`);
|
|
69
|
+
}
|
|
70
|
+
if (errorMessage === 'Unexpected error.' || errorMessage === 'Unexpected error') {
|
|
71
|
+
throw new Error(`Server error: The API returned an unexpected error.\n` +
|
|
72
|
+
`This may be a temporary issue. If it persists, check:\n` +
|
|
73
|
+
` - Your session is valid (run 'uniformgen login')\n` +
|
|
74
|
+
` - The API is accessible at ${apiUrl}\n` +
|
|
75
|
+
` - You have access to the selected project`);
|
|
76
|
+
}
|
|
77
|
+
throw new Error(`GraphQL error: ${errorMessage}`);
|
|
78
|
+
}
|
|
79
|
+
// Check HTTP status after checking for GraphQL errors
|
|
80
|
+
if (!response.ok && !result.data) {
|
|
81
|
+
console.error(`[Debug] API URL: ${apiUrl}`);
|
|
82
|
+
console.error(`[Debug] Response status: ${response.status}`);
|
|
83
|
+
throw new Error(`Failed to fetch schemas: ${response.statusText}`);
|
|
55
84
|
}
|
|
56
85
|
const models = new Map();
|
|
57
86
|
for (const model of result.data?.entityModels?.items ?? []) {
|
|
@@ -241,6 +270,15 @@ export async function push(options) {
|
|
|
241
270
|
console.log('No project selected. Run `uniformgen select-project` first.');
|
|
242
271
|
process.exit(1);
|
|
243
272
|
}
|
|
273
|
+
// Validate that accessToken looks like a session token, not an API key
|
|
274
|
+
// Session tokens are typically UUIDs or similar, not prefixed with pk_/sk_
|
|
275
|
+
if (credentials.accessToken.startsWith('pk_') || credentials.accessToken.startsWith('sk_')) {
|
|
276
|
+
console.log(chalk.red('Error: Invalid access token format.'));
|
|
277
|
+
console.log(chalk.yellow('Your credentials file contains an API key instead of a session token.\n' +
|
|
278
|
+
'This can happen if credentials were manually edited.\n\n' +
|
|
279
|
+
'To fix this, run `uniformgen logout` then `uniformgen login` to get fresh credentials.'));
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
244
282
|
console.log(`Syncing schemas to project: ${credentials.selectedProject.name}\n`);
|
|
245
283
|
// Load local schemas
|
|
246
284
|
console.log(`Loading schemas from ${options.schemasDir}...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAgEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAgEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmY9D"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -69,10 +69,21 @@ export async function sync(options) {
|
|
|
69
69
|
if (entityModels.length > 0) {
|
|
70
70
|
const modelsDir = join(config.output.types, 'models');
|
|
71
71
|
for (const model of entityModels) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
try {
|
|
73
|
+
files.push({
|
|
74
|
+
path: join(modelsDir, `${model.key}.ts`),
|
|
75
|
+
content: generateEntityModelTypes(model, entityModels),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(chalk.red(`\nError generating types for model: ${model.key}`));
|
|
80
|
+
console.error(chalk.gray(` Model name: ${model.name}`));
|
|
81
|
+
console.error(chalk.gray(` Fields: ${model.fields?.length ?? 0}`));
|
|
82
|
+
if (model.fields?.length > 0) {
|
|
83
|
+
console.error(chalk.gray(` Field keys: ${model.fields.map(f => f.key).join(', ')}`));
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
76
87
|
}
|
|
77
88
|
files.push({
|
|
78
89
|
path: join(modelsDir, 'index.ts'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-schemas.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetch-schemas.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fetch-schemas.d.ts","sourceRoot":"","sources":["../../src/fetcher/fetch-schemas.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAsGD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,UAAU,EAAE;QACV,iDAAiD;QACjD,QAAQ,EAAE,MAAM,CAAC;QACjB,gDAAgD;QAChD,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA8CD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAiD9B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CA0CzB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,WAAW,EAAE,CAAC,CA4CxB"}
|
|
@@ -41,12 +41,14 @@ function getInternalGraphQLEndpoint(apiUrl) {
|
|
|
41
41
|
* Extracts CMS config from extensions.cms (flattened structure)
|
|
42
42
|
*/
|
|
43
43
|
function transformEntityModel(raw) {
|
|
44
|
+
// Defensive: metadata might be null/undefined in some edge cases
|
|
45
|
+
const metadata = raw.metadata ?? {};
|
|
44
46
|
return {
|
|
45
47
|
key: raw.key,
|
|
46
|
-
name:
|
|
47
|
-
pluralName:
|
|
48
|
-
description:
|
|
49
|
-
category:
|
|
48
|
+
name: metadata.name ?? raw.key, // Fall back to key if name is missing
|
|
49
|
+
pluralName: metadata.pluralName,
|
|
50
|
+
description: metadata.description,
|
|
51
|
+
category: metadata.category,
|
|
50
52
|
tier: raw.schema?.tier ?? 2, // Default to tier 2 (versioned, no variants)
|
|
51
53
|
editorMode: raw.editorMode,
|
|
52
54
|
fields: raw.schema?.fields || [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/generators/admin/queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAIlE;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,WAAW,EAAE,GACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/generators/admin/queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAIlE;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,WAAW,EAAE,GACxB,MAAM,CA4VR;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,UAAU,EAAE,WAAW,EAAE,GACxB,MAAM,CAmJR"}
|
|
@@ -22,12 +22,14 @@ export function generateAdminQueriesReact(model, _allModels) {
|
|
|
22
22
|
const pluralName = model.pluralName
|
|
23
23
|
? toCamelCase(model.pluralName.replace(/\s+/g, ''))
|
|
24
24
|
: `${camelName}s`;
|
|
25
|
+
// Use model.name with fallback for JSDoc comments
|
|
26
|
+
const displayName = model.name ?? model.key;
|
|
25
27
|
const lines = [];
|
|
26
28
|
// File header
|
|
27
29
|
lines.push(`/**`);
|
|
28
|
-
lines.push(` * ${
|
|
30
|
+
lines.push(` * ${displayName} - Admin Query Hooks`);
|
|
29
31
|
lines.push(` *`);
|
|
30
|
-
lines.push(` * React hooks for querying ${
|
|
32
|
+
lines.push(` * React hooks for querying ${displayName} records in admin UIs.`);
|
|
31
33
|
lines.push(` *`);
|
|
32
34
|
lines.push(` * @generated by UniformGen - DO NOT EDIT MANUALLY`);
|
|
33
35
|
lines.push(` */`);
|
|
@@ -52,7 +54,7 @@ export function generateAdminQueriesReact(model, _allModels) {
|
|
|
52
54
|
lines.push(`} from './types/${model.key}.js';`);
|
|
53
55
|
lines.push('');
|
|
54
56
|
// List result interface
|
|
55
|
-
lines.push(`/** List result for ${
|
|
57
|
+
lines.push(`/** List result for ${displayName} records */`);
|
|
56
58
|
lines.push(`export interface ${typeName}ListResult {`);
|
|
57
59
|
lines.push(` items: ${typeName}Record[];`);
|
|
58
60
|
lines.push(` total: number;`);
|
|
@@ -231,7 +233,7 @@ export function generateAdminQueriesReact(model, _allModels) {
|
|
|
231
233
|
lines.push('');
|
|
232
234
|
// use{Model}Records hook
|
|
233
235
|
lines.push(`/**`);
|
|
234
|
-
lines.push(` * List ${
|
|
236
|
+
lines.push(` * List ${displayName} records with optional filtering`);
|
|
235
237
|
lines.push(` *`);
|
|
236
238
|
lines.push(` * @example`);
|
|
237
239
|
lines.push(` * const { ${pluralName}, loading } = use${typeName}Records({`);
|
|
@@ -281,7 +283,7 @@ export function generateAdminQueriesReact(model, _allModels) {
|
|
|
281
283
|
lines.push('');
|
|
282
284
|
// use{Model}Record hook
|
|
283
285
|
lines.push(`/**`);
|
|
284
|
-
lines.push(` * Get a single ${
|
|
286
|
+
lines.push(` * Get a single ${displayName} record with all variants`);
|
|
285
287
|
lines.push(` *`);
|
|
286
288
|
lines.push(` * @example`);
|
|
287
289
|
lines.push(` * const { ${camelName}, loading } = use${typeName}Record('record-id');`);
|
|
@@ -309,7 +311,7 @@ export function generateAdminQueriesReact(model, _allModels) {
|
|
|
309
311
|
lines.push('');
|
|
310
312
|
// use{Model}Versions hook
|
|
311
313
|
lines.push(`/**`);
|
|
312
|
-
lines.push(` * Get version history for a ${
|
|
314
|
+
lines.push(` * Get version history for a ${displayName} variant`);
|
|
313
315
|
lines.push(` *`);
|
|
314
316
|
lines.push(` * @example`);
|
|
315
317
|
lines.push(` * const { versions, loading } = use${typeName}Versions('variant-id', { limit: 10 });`);
|
|
@@ -349,12 +351,13 @@ export function generateAdminQueriesRemix(model, _allModels) {
|
|
|
349
351
|
return '';
|
|
350
352
|
}
|
|
351
353
|
const typeName = toPascalCase(model.key);
|
|
354
|
+
const displayName = model.name ?? model.key;
|
|
352
355
|
const lines = [];
|
|
353
356
|
// File header
|
|
354
357
|
lines.push(`/**`);
|
|
355
|
-
lines.push(` * ${
|
|
358
|
+
lines.push(` * ${displayName} - Admin Query Functions`);
|
|
356
359
|
lines.push(` *`);
|
|
357
|
-
lines.push(` * Server-side functions for querying ${
|
|
360
|
+
lines.push(` * Server-side functions for querying ${displayName} records.`);
|
|
358
361
|
lines.push(` * Use in Remix loaders or Hydrogen server functions.`);
|
|
359
362
|
lines.push(` *`);
|
|
360
363
|
lines.push(` * @generated by UniformGen - DO NOT EDIT MANUALLY`);
|
|
@@ -384,7 +387,7 @@ export function generateAdminQueriesRemix(model, _allModels) {
|
|
|
384
387
|
lines.push(`}`);
|
|
385
388
|
lines.push('');
|
|
386
389
|
// List result interface
|
|
387
|
-
lines.push(`/** List result for ${
|
|
390
|
+
lines.push(`/** List result for ${displayName} records */`);
|
|
388
391
|
lines.push(`export interface ${typeName}ListResult {`);
|
|
389
392
|
lines.push(` items: ${typeName}Record[];`);
|
|
390
393
|
lines.push(` total: number;`);
|
|
@@ -438,7 +441,7 @@ export function generateAdminQueriesRemix(model, _allModels) {
|
|
|
438
441
|
lines.push(`// ============================================================================`);
|
|
439
442
|
lines.push('');
|
|
440
443
|
lines.push(`/**`);
|
|
441
|
-
lines.push(` * List ${
|
|
444
|
+
lines.push(` * List ${displayName} records`);
|
|
442
445
|
lines.push(` */`);
|
|
443
446
|
lines.push(`export async function list${typeName}Records(`);
|
|
444
447
|
lines.push(` client: GraphQLClient,`);
|
|
@@ -454,7 +457,7 @@ export function generateAdminQueriesRemix(model, _allModels) {
|
|
|
454
457
|
lines.push(`}`);
|
|
455
458
|
lines.push('');
|
|
456
459
|
lines.push(`/**`);
|
|
457
|
-
lines.push(` * Get a single ${
|
|
460
|
+
lines.push(` * Get a single ${displayName} record with variants`);
|
|
458
461
|
lines.push(` */`);
|
|
459
462
|
lines.push(`export async function get${typeName}Record(client: GraphQLClient, id: string): Promise<${typeName}RecordWithVariants | null> {`);
|
|
460
463
|
lines.push(` const result = await client.request<{ entityRecord: any }>(GET_${typeName.toUpperCase()}_RECORD, { id });`);
|
|
@@ -462,7 +465,7 @@ export function generateAdminQueriesRemix(model, _allModels) {
|
|
|
462
465
|
lines.push(`}`);
|
|
463
466
|
lines.push('');
|
|
464
467
|
lines.push(`/**`);
|
|
465
|
-
lines.push(` * Get version history for a ${
|
|
468
|
+
lines.push(` * Get version history for a ${displayName} variant`);
|
|
466
469
|
lines.push(` */`);
|
|
467
470
|
lines.push(`export async function get${typeName}Versions(`);
|
|
468
471
|
lines.push(` client: GraphQLClient,`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-models.d.ts","sourceRoot":"","sources":["../../../src/generators/documents/entity-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGlE;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"entity-models.d.ts","sourceRoot":"","sources":["../../../src/generators/documents/entity-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGlE;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAmFvE"}
|
|
@@ -8,7 +8,8 @@ export function generateEntityModelDocuments(model) {
|
|
|
8
8
|
const pluralName = model.pluralName
|
|
9
9
|
? toPascalCase(model.pluralName.replace(/\s+/g, ''))
|
|
10
10
|
: `${typeName}s`;
|
|
11
|
-
|
|
11
|
+
const displayName = model.name ?? model.key;
|
|
12
|
+
return `# Generated GraphQL operations for ${displayName}
|
|
12
13
|
# @generated by UniformGen - DO NOT EDIT MANUALLY
|
|
13
14
|
|
|
14
15
|
fragment ${typeName}Fields on EntityRecord {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-models.d.ts","sourceRoot":"","sources":["../../../src/generators/types/entity-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,gCAAgC,CAAC;AA+B/E;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,WAAW,EAAE,GACvB,MAAM,CAiCR;
|
|
1
|
+
{"version":3,"file":"entity-models.d.ts","sourceRoot":"","sources":["../../../src/generators/types/entity-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,gCAAgC,CAAC;AA+B/E;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,WAAW,EAAE,GACvB,MAAM,CAiCR;AA8ND;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAsBvE"}
|
|
@@ -89,9 +89,10 @@ function generateConfigObject(model, fields, configName) {
|
|
|
89
89
|
lines.push(` * @generated from entity model '${model.key}'`);
|
|
90
90
|
lines.push(' */');
|
|
91
91
|
// Config object
|
|
92
|
+
const escapedName = (model.name ?? model.key).replace(/'/g, "\\'");
|
|
92
93
|
lines.push(`export const ${configName} = {`);
|
|
93
94
|
lines.push(` key: '${model.key}',`);
|
|
94
|
-
lines.push(` name: '${
|
|
95
|
+
lines.push(` name: '${escapedName}',`);
|
|
95
96
|
if (model.description) {
|
|
96
97
|
lines.push(` description: '${model.description.replace(/'/g, "\\'")}',`);
|
|
97
98
|
}
|