@auto-engineer/frontend-generator-react-graphql 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/CHANGELOG.md +156 -0
- package/LICENSE +10 -0
- package/README.md +362 -0
- package/dist/builder.d.ts +7 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +189 -0
- package/dist/builder.js.map +1 -0
- package/dist/cli-manifest.d.ts +3 -0
- package/dist/cli-manifest.d.ts.map +1 -0
- package/dist/cli-manifest.js +10 -0
- package/dist/cli-manifest.js.map +1 -0
- package/dist/commands/copy-example.d.ts +59 -0
- package/dist/commands/copy-example.d.ts.map +1 -0
- package/dist/commands/copy-example.js +118 -0
- package/dist/commands/copy-example.js.map +1 -0
- package/dist/commands/generate-client.d.ts +60 -0
- package/dist/commands/generate-client.d.ts.map +1 -0
- package/dist/commands/generate-client.js +110 -0
- package/dist/commands/generate-client.js.map +1 -0
- package/dist/configure-starter.d.ts +2 -0
- package/dist/configure-starter.d.ts.map +1 -0
- package/dist/configure-starter.js +40 -0
- package/dist/configure-starter.js.map +1 -0
- package/dist/delete-directory.d.ts +2 -0
- package/dist/delete-directory.d.ts.map +1 -0
- package/dist/delete-directory.js +17 -0
- package/dist/delete-directory.js.map +1 -0
- package/dist/figma-helpers.d.ts +33 -0
- package/dist/figma-helpers.d.ts.map +1 -0
- package/dist/figma-helpers.js +99 -0
- package/dist/figma-helpers.js.map +1 -0
- package/dist/generator/generateComponents.d.ts +3 -0
- package/dist/generator/generateComponents.d.ts.map +1 -0
- package/dist/generator/generateComponents.js +111 -0
- package/dist/generator/generateComponents.js.map +1 -0
- package/dist/generator/templates/app.ejs +22 -0
- package/dist/generator/templates/component.ejs +18 -0
- package/dist/generator/templates/page.ejs +15 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/run-codegen.d.ts +2 -0
- package/dist/run-codegen.d.ts.map +1 -0
- package/dist/run-codegen.js +84 -0
- package/dist/run-codegen.js.map +1 -0
- package/dist/scaffold-gql-operations.d.ts +3 -0
- package/dist/scaffold-gql-operations.d.ts.map +1 -0
- package/dist/scaffold-gql-operations.js +77 -0
- package/dist/scaffold-gql-operations.js.map +1 -0
- package/dist/templates/createFile.d.ts +8 -0
- package/dist/templates/createFile.d.ts.map +1 -0
- package/dist/templates/createFile.js +66 -0
- package/dist/templates/createFile.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/write-graphql-schema.d.ts +2 -0
- package/dist/write-graphql-schema.d.ts.map +1 -0
- package/dist/write-graphql-schema.js +14 -0
- package/dist/write-graphql-schema.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-directory.d.ts","sourceRoot":"","sources":["../src/delete-directory.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAcxD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
export function deleteDirectory(targetPath) {
|
|
4
|
+
const resolvedPath = path.resolve(targetPath);
|
|
5
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
6
|
+
console.warn(`⚠️ Directory does not exist: ${resolvedPath}`);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
fs.rmSync(resolvedPath, { recursive: true, force: true });
|
|
11
|
+
console.log(`✅ Deleted directory: ${resolvedPath}`);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
console.error(`❌ Failed to delete directory: ${resolvedPath}`, error);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=delete-directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-directory.js","sourceRoot":"","sources":["../src/delete-directory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,wBAAwB,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
interface RGBA {
|
|
2
|
+
r: number;
|
|
3
|
+
g: number;
|
|
4
|
+
b: number;
|
|
5
|
+
a: number;
|
|
6
|
+
}
|
|
7
|
+
type VariableValue = {
|
|
8
|
+
type: 'VARIABLE_ALIAS';
|
|
9
|
+
id: string;
|
|
10
|
+
} | RGBA | string | number | boolean;
|
|
11
|
+
interface Variable {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
resolvedType: 'COLOR' | 'STRING' | 'FLOAT' | 'BOOLEAN' | string;
|
|
15
|
+
valuesByMode: Record<string, VariableValue>;
|
|
16
|
+
}
|
|
17
|
+
export interface VariableCollection {
|
|
18
|
+
name: string;
|
|
19
|
+
modes: {
|
|
20
|
+
modeId: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}[];
|
|
23
|
+
variables: Variable[];
|
|
24
|
+
}
|
|
25
|
+
interface ResolveResult {
|
|
26
|
+
unresolved: true;
|
|
27
|
+
aliasId: string;
|
|
28
|
+
modeId?: string;
|
|
29
|
+
}
|
|
30
|
+
type ResolvedValue = string | number | boolean | ResolveResult;
|
|
31
|
+
export declare function flattenFigmaVariables(jsonData: VariableCollection[]): Record<string, ResolvedValue>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=figma-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-helpers.d.ts","sourceRoot":"","sources":["../src/figma-helpers.ts"],"names":[],"mappings":"AAAA,UAAU,IAAI;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,KAAK,aAAa,GAAG;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/F,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAChE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC;AAgF/D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAwCnG"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Guard
|
|
2
|
+
function isRgba(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && 'r' in value && 'g' in value && 'b' in value && 'a' in value;
|
|
4
|
+
}
|
|
5
|
+
// RGBA → HSLA
|
|
6
|
+
function rgbaToHsl(rgba) {
|
|
7
|
+
const { r, g, b } = rgba;
|
|
8
|
+
const max = Math.max(r, g, b);
|
|
9
|
+
const min = Math.min(r, g, b);
|
|
10
|
+
let h = 0;
|
|
11
|
+
let s = 0;
|
|
12
|
+
const l = (max + min) / 2;
|
|
13
|
+
if (max !== min) {
|
|
14
|
+
const d = max - min;
|
|
15
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
16
|
+
switch (max) {
|
|
17
|
+
case r:
|
|
18
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
19
|
+
break;
|
|
20
|
+
case g:
|
|
21
|
+
h = (b - r) / d + 2;
|
|
22
|
+
break;
|
|
23
|
+
case b:
|
|
24
|
+
h = (r - g) / d + 4;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
h /= 6;
|
|
28
|
+
}
|
|
29
|
+
const hDeg = Math.round(h * 360);
|
|
30
|
+
const sPercent = Math.round(s * 100);
|
|
31
|
+
const lPercent = Math.round(l * 100);
|
|
32
|
+
return `${hDeg} ${sPercent}% ${lPercent}%`;
|
|
33
|
+
}
|
|
34
|
+
/* eslint-disable complexity */
|
|
35
|
+
function resolveAlias(aliasId, variablesById, modeId, visited = new Set()) {
|
|
36
|
+
if (visited.has(aliasId)) {
|
|
37
|
+
return { unresolved: true, aliasId };
|
|
38
|
+
}
|
|
39
|
+
visited.add(aliasId);
|
|
40
|
+
const variable = variablesById[aliasId];
|
|
41
|
+
if (variable === undefined) {
|
|
42
|
+
return { unresolved: true, aliasId };
|
|
43
|
+
}
|
|
44
|
+
let value = variable.valuesByMode[modeId];
|
|
45
|
+
if (value === undefined) {
|
|
46
|
+
const availableModes = Object.keys(variable.valuesByMode);
|
|
47
|
+
if (availableModes.length > 0) {
|
|
48
|
+
const fallbackMode = availableModes[0];
|
|
49
|
+
value = variable.valuesByMode[fallbackMode];
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return { unresolved: true, aliasId, modeId };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === 'object' && 'type' in value && value.type === 'VARIABLE_ALIAS') {
|
|
56
|
+
return resolveAlias(value.id, variablesById, modeId, visited);
|
|
57
|
+
}
|
|
58
|
+
if (variable.resolvedType === 'COLOR' && isRgba(value)) {
|
|
59
|
+
return rgbaToHsl(value);
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
/* eslint-enable complexity */
|
|
64
|
+
export function flattenFigmaVariables(jsonData) {
|
|
65
|
+
const flattened = {};
|
|
66
|
+
const variablesById = {};
|
|
67
|
+
jsonData.forEach((collection) => {
|
|
68
|
+
collection.variables.forEach((variable) => {
|
|
69
|
+
variablesById[variable.id] = variable;
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
jsonData.forEach((collection) => {
|
|
73
|
+
const collectionName = collection.name;
|
|
74
|
+
const modeNames = {};
|
|
75
|
+
collection.modes.forEach((mode) => {
|
|
76
|
+
modeNames[mode.modeId] = mode.name;
|
|
77
|
+
});
|
|
78
|
+
collection.variables.forEach((variable) => {
|
|
79
|
+
const variableName = variable.name;
|
|
80
|
+
Object.entries(variable.valuesByMode).forEach(([modeId, value]) => {
|
|
81
|
+
const modeName = modeNames[modeId] || modeId;
|
|
82
|
+
const key = `${collectionName}/${variableName}/${modeName.toLowerCase().replace(/\s+/g, '-')}`;
|
|
83
|
+
let resolvedValue;
|
|
84
|
+
if (typeof value === 'object' && 'type' in value && value.type === 'VARIABLE_ALIAS') {
|
|
85
|
+
resolvedValue = resolveAlias(value.id, variablesById, modeId);
|
|
86
|
+
}
|
|
87
|
+
else if (variable.resolvedType === 'COLOR' && isRgba(value)) {
|
|
88
|
+
resolvedValue = rgbaToHsl(value);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
resolvedValue = value;
|
|
92
|
+
}
|
|
93
|
+
flattened[key] = resolvedValue;
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
return flattened;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=figma-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-helpers.js","sourceRoot":"","sources":["../src/figma-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateComponents.d.ts","sourceRoot":"","sources":["../../src/generator/generateComponents.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,QAAQ,EAAE,MAAM,UAAU,CAAC;AA+GnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAYlE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import ejs from 'ejs';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import createDebug from 'debug';
|
|
6
|
+
const debug = createDebug('frontend-generator-react-graphql:generateComponents');
|
|
7
|
+
const debugTemplates = createDebug('frontend-generator-react-graphql:generateComponents:templates');
|
|
8
|
+
const debugOutput = createDebug('frontend-generator-react-graphql:generateComponents:output');
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
function generate(spec) {
|
|
12
|
+
debug('Starting component generation');
|
|
13
|
+
const files = [];
|
|
14
|
+
debugTemplates('Loading templates from: %s/templates', __dirname);
|
|
15
|
+
const componentTemplate = fs.readFileSync(path.resolve(__dirname, 'templates/component.ejs'), 'utf-8');
|
|
16
|
+
const pageTemplate = fs.readFileSync(path.resolve(__dirname, 'templates/page.ejs'), 'utf-8');
|
|
17
|
+
const appTemplate = fs.readFileSync(path.resolve(__dirname, 'templates/app.ejs'), 'utf-8');
|
|
18
|
+
debugTemplates('Templates loaded successfully');
|
|
19
|
+
// Molecules
|
|
20
|
+
debug('Generating %d molecule components', Object.keys(spec.molecules.items).length);
|
|
21
|
+
for (const [name, def] of Object.entries(spec.molecules.items)) {
|
|
22
|
+
debugOutput('Generating molecule: %s', name);
|
|
23
|
+
const content = ejs.render(componentTemplate, {
|
|
24
|
+
name,
|
|
25
|
+
description: def.description,
|
|
26
|
+
atoms: def.composition.atoms,
|
|
27
|
+
molecules: [],
|
|
28
|
+
organisms: [],
|
|
29
|
+
specs: def.specs ?? [],
|
|
30
|
+
dataRequirements: [],
|
|
31
|
+
});
|
|
32
|
+
files.push({
|
|
33
|
+
path: `output/components/molecules/${name}.tsx`,
|
|
34
|
+
content,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
// Organisms
|
|
38
|
+
debug('Generating %d organism components', Object.keys(spec.organisms.items).length);
|
|
39
|
+
for (const [name, def] of Object.entries(spec.organisms.items)) {
|
|
40
|
+
debugOutput('Generating organism: %s', name);
|
|
41
|
+
const content = ejs.render(componentTemplate, {
|
|
42
|
+
name,
|
|
43
|
+
description: def.description,
|
|
44
|
+
atoms: [],
|
|
45
|
+
molecules: def.composition.molecules,
|
|
46
|
+
organisms: [],
|
|
47
|
+
specs: def.specs ?? [],
|
|
48
|
+
dataRequirements: def.data_requirements ?? [],
|
|
49
|
+
});
|
|
50
|
+
files.push({
|
|
51
|
+
path: `output/components/organisms/${name}.tsx`,
|
|
52
|
+
content,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// Pages
|
|
56
|
+
debug('Generating %d page components', Object.keys(spec.pages.items).length);
|
|
57
|
+
for (const [name, def] of Object.entries(spec.pages.items)) {
|
|
58
|
+
debugOutput('Generating page: %s with route: %s', name, def.route);
|
|
59
|
+
const content = ejs.render(pageTemplate, {
|
|
60
|
+
name,
|
|
61
|
+
description: def.description,
|
|
62
|
+
organisms: def.layout.organisms,
|
|
63
|
+
route: def.route,
|
|
64
|
+
navigation: def.navigation ?? [],
|
|
65
|
+
specs: def.specs ?? [],
|
|
66
|
+
dataRequirements: def.data_requirements ?? [],
|
|
67
|
+
});
|
|
68
|
+
files.push({
|
|
69
|
+
path: `output/pages/${name}.tsx`,
|
|
70
|
+
content,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// App.tsx
|
|
74
|
+
debug('Generating App.tsx with %d pages', Object.keys(spec.pages.items).length);
|
|
75
|
+
const appContent = ejs.render(appTemplate, {
|
|
76
|
+
pages: Object.entries(spec.pages.items).map(([name, def]) => ({
|
|
77
|
+
name,
|
|
78
|
+
route: def.route,
|
|
79
|
+
})),
|
|
80
|
+
});
|
|
81
|
+
files.push({
|
|
82
|
+
path: 'output/App.tsx',
|
|
83
|
+
content: appContent,
|
|
84
|
+
});
|
|
85
|
+
debug('Generation complete - generated %d files', files.length);
|
|
86
|
+
return files;
|
|
87
|
+
}
|
|
88
|
+
function writeToDisk(files) {
|
|
89
|
+
debugOutput('Writing %d files to disk', files.length);
|
|
90
|
+
let filesWritten = 0;
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
const fullPath = path.resolve(file.path);
|
|
93
|
+
fs.mkdirSync(path.dirname(fullPath), { recursive: true });
|
|
94
|
+
fs.writeFileSync(fullPath, file.content);
|
|
95
|
+
filesWritten++;
|
|
96
|
+
debugOutput('Written file %d/%d: %s', filesWritten, files.length, file.path);
|
|
97
|
+
}
|
|
98
|
+
debugOutput('All files written successfully');
|
|
99
|
+
}
|
|
100
|
+
export function generateComponents(spec, basePath) {
|
|
101
|
+
debug('Starting generateComponents with basePath: %s', basePath);
|
|
102
|
+
const allFiles = generate(spec);
|
|
103
|
+
debug('Rewriting paths for %d files', allFiles.length);
|
|
104
|
+
const rewritten = allFiles.map((file) => ({
|
|
105
|
+
path: path.join(basePath, file.path.replace(/^output[\\/]/, '')),
|
|
106
|
+
content: file.content,
|
|
107
|
+
}));
|
|
108
|
+
writeToDisk(rewritten);
|
|
109
|
+
debug('Component generation complete');
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=generateComponents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateComponents.js","sourceRoot":"","sources":["../../src/generator/generateComponents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ApolloProvider } from '@apollo/client';
|
|
2
|
+
import { BrowserRouter, Route, Routes } from 'react-router-dom';
|
|
3
|
+
import { apolloClient } from '@/apolloClient';
|
|
4
|
+
import { Index } from '@/pages/Index';
|
|
5
|
+
import { NotFound } from '@/pages/NotFound';
|
|
6
|
+
<% pages.forEach(page => { -%>
|
|
7
|
+
import { <%= page.name %> } from '@/pages/<%= page.name %>';
|
|
8
|
+
<% }) -%>
|
|
9
|
+
|
|
10
|
+
export const App = () => (
|
|
11
|
+
<ApolloProvider client={apolloClient}>
|
|
12
|
+
<BrowserRouter>
|
|
13
|
+
<Routes>
|
|
14
|
+
<Route path="/" element={<Index />} />
|
|
15
|
+
<% pages.forEach(page => { -%>
|
|
16
|
+
<Route path="<%= page.route %>" element={<<%= page.name %> />} />
|
|
17
|
+
<% }) -%>
|
|
18
|
+
<Route path="*" element={<NotFound />} />
|
|
19
|
+
</Routes>
|
|
20
|
+
</BrowserRouter>
|
|
21
|
+
</ApolloProvider>
|
|
22
|
+
);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<% atoms.forEach(atom => { -%>
|
|
2
|
+
import { <%= atom %> } from "@/components/atoms/<%= atom.toLowerCase() %>";
|
|
3
|
+
<% }) -%>
|
|
4
|
+
<% molecules.forEach(mol => { -%>
|
|
5
|
+
import { <%= mol %> } from "@/components/molecules/<%= mol %>";
|
|
6
|
+
<% }) -%>
|
|
7
|
+
|
|
8
|
+
// <%= description %>
|
|
9
|
+
<% if (specs && specs.length) { -%>
|
|
10
|
+
// Specs:
|
|
11
|
+
<% specs.forEach(spec => { -%>
|
|
12
|
+
// - <%- spec %>
|
|
13
|
+
<% }) -%>
|
|
14
|
+
<% } -%>
|
|
15
|
+
|
|
16
|
+
export function <%= name %>() {
|
|
17
|
+
return <div />;
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% organisms.forEach(org => { -%>
|
|
2
|
+
import { <%= org %> } from "@/components/organisms/<%= org %>";
|
|
3
|
+
<% }) -%>
|
|
4
|
+
|
|
5
|
+
// <%= description %>
|
|
6
|
+
<% if (specs && specs.length) { -%>
|
|
7
|
+
// Specs:
|
|
8
|
+
<% specs.forEach(spec => { -%>
|
|
9
|
+
// - <%- spec %>
|
|
10
|
+
<% }) -%>
|
|
11
|
+
<% } -%>
|
|
12
|
+
|
|
13
|
+
export function <%= name %>() {
|
|
14
|
+
return <div />;
|
|
15
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function main(): Promise<string>;
|
|
2
|
+
export { CLI_MANIFEST } from './cli-manifest';
|
|
3
|
+
export * from './commands/generate-client';
|
|
4
|
+
export * from './commands/copy-example';
|
|
5
|
+
export * from './figma-helpers';
|
|
6
|
+
export * from './templates/createFile';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,wBAAsB,IAAI,oBAiDzB;AASD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { FrontendScaffoldBuilder } from './builder.js';
|
|
5
|
+
import { configureStarter } from './configure-starter.js'; // New import
|
|
6
|
+
import { generateComponents } from './generator/generateComponents.js';
|
|
7
|
+
import { writeGqlOperationsToFolder } from './scaffold-gql-operations.js';
|
|
8
|
+
import { generateSchemaFile } from './write-graphql-schema.js';
|
|
9
|
+
import { runCodegen } from './run-codegen.js';
|
|
10
|
+
import createDebug from 'debug';
|
|
11
|
+
const debug = createDebug('frontend-generator-react-graphql');
|
|
12
|
+
const debugMain = createDebug('frontend-generator-react-graphql:main');
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = path.dirname(__filename);
|
|
15
|
+
export async function main() {
|
|
16
|
+
const [, , starterDir, targetDir, iaSchemaPath, gqlSchemaPath, figmaVariablesPath] = process.argv;
|
|
17
|
+
debugMain('Starting main with args: starterDir=%s, targetDir=%s, iaSchemaPath=%s, gqlSchemaPath=%s, figmaVariablesPath=%s', starterDir, targetDir, iaSchemaPath, gqlSchemaPath, figmaVariablesPath);
|
|
18
|
+
if (!targetDir) {
|
|
19
|
+
debugMain('ERROR: Missing targetDir argument');
|
|
20
|
+
console.error('Usage: tsx src/index.ts <starter-dir> <target-dir> <ia-schema> <gql-schema> <figma-variables>');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
debugMain('Creating FrontendScaffoldBuilder');
|
|
24
|
+
const builder = new FrontendScaffoldBuilder();
|
|
25
|
+
debugMain('Cloning starter from: %s', starterDir);
|
|
26
|
+
await builder.cloneStarter(starterDir);
|
|
27
|
+
debugMain('Building to target: %s', targetDir);
|
|
28
|
+
await builder.build(targetDir);
|
|
29
|
+
debugMain('Configuring starter with Figma variables: %s', figmaVariablesPath);
|
|
30
|
+
configureStarter(figmaVariablesPath, targetDir);
|
|
31
|
+
const filePath = path.resolve(__dirname, iaSchemaPath);
|
|
32
|
+
debugMain('Reading IA schema from: %s', filePath);
|
|
33
|
+
const iaSchemeJsonFile = fs.readFileSync(filePath, 'utf-8');
|
|
34
|
+
const iaSchemeJson = JSON.parse(iaSchemeJsonFile);
|
|
35
|
+
debugMain('IA schema loaded successfully');
|
|
36
|
+
debugMain('Generating components to: %s/src', targetDir);
|
|
37
|
+
generateComponents(iaSchemeJson, `${targetDir}/src`);
|
|
38
|
+
debugMain('Writing GraphQL operations to: %s/src', targetDir);
|
|
39
|
+
writeGqlOperationsToFolder(iaSchemeJson, `${targetDir}/src`);
|
|
40
|
+
debugMain('Generating GraphQL schema file from: %s', gqlSchemaPath);
|
|
41
|
+
generateSchemaFile(gqlSchemaPath, targetDir);
|
|
42
|
+
debugMain('Running codegen in: %s', targetDir);
|
|
43
|
+
runCodegen(targetDir);
|
|
44
|
+
debugMain('Frontend scaffold generation complete');
|
|
45
|
+
return 'Frontend Scaffold is running!';
|
|
46
|
+
}
|
|
47
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
48
|
+
debug('Running as main module');
|
|
49
|
+
void main();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
debug('Module imported');
|
|
53
|
+
}
|
|
54
|
+
export { CLI_MANIFEST } from './cli-manifest.js';
|
|
55
|
+
export * from './commands/generate-client.js';
|
|
56
|
+
export * from './commands/copy-example.js';
|
|
57
|
+
export * from './figma-helpers.js';
|
|
58
|
+
export * from './templates/createFile.js';
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-codegen.d.ts","sourceRoot":"","sources":["../src/run-codegen.ts"],"names":[],"mappings":"AA4BA,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CA0DpD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import createDebug from 'debug';
|
|
5
|
+
const debug = createDebug('frontend-generator-react-graphql:codegen');
|
|
6
|
+
const debugCmd = createDebug('frontend-generator-react-graphql:codegen:cmd');
|
|
7
|
+
const QUERY_FILES = ['queries.ts', 'mutations.ts'];
|
|
8
|
+
const GRAPHQL_DIR = 'src/graphql';
|
|
9
|
+
function runCommand(cmd, cwd) {
|
|
10
|
+
debugCmd('Running command: %s in %s', cmd, cwd);
|
|
11
|
+
try {
|
|
12
|
+
const result = execSync(cmd, { cwd, encoding: 'utf-8', stdio: 'pipe' });
|
|
13
|
+
debugCmd('Command successful');
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
debugCmd('Command failed: %s', cmd);
|
|
18
|
+
const error = e;
|
|
19
|
+
let output = '';
|
|
20
|
+
if (error.stdout)
|
|
21
|
+
output += error.stdout.toString();
|
|
22
|
+
if (error.stderr)
|
|
23
|
+
output += error.stderr.toString();
|
|
24
|
+
if (!output && error.message != null)
|
|
25
|
+
output = error.message;
|
|
26
|
+
return output;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function runCodegen(projectPath) {
|
|
30
|
+
debug('Starting codegen for project: %s', projectPath);
|
|
31
|
+
const resolvedPath = path.resolve(projectPath);
|
|
32
|
+
debug('Resolved project path: %s', resolvedPath);
|
|
33
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
34
|
+
debug('ERROR: Project path does not exist: %s', resolvedPath);
|
|
35
|
+
throw new Error(`❌ Project path does not exist: ${resolvedPath}`);
|
|
36
|
+
}
|
|
37
|
+
const schemaPath = path.join(resolvedPath, 'schema.graphql');
|
|
38
|
+
debug('Checking for schema at: %s', schemaPath);
|
|
39
|
+
if (!fs.existsSync(schemaPath)) {
|
|
40
|
+
debug('ERROR: Schema file not found at %s', schemaPath);
|
|
41
|
+
throw new Error(`❌ Schema file not found at ${schemaPath}`);
|
|
42
|
+
}
|
|
43
|
+
debug('Schema file found');
|
|
44
|
+
const filePaths = QUERY_FILES.map((file) => path.join(resolvedPath, GRAPHQL_DIR, file));
|
|
45
|
+
debug('Checking for GraphQL operation files: %o', QUERY_FILES);
|
|
46
|
+
for (const file of filePaths) {
|
|
47
|
+
if (!fs.existsSync(file)) {
|
|
48
|
+
debug('File not found: %s', file);
|
|
49
|
+
console.warn(`⚠️ File not found, skipping: ${file}`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
debug('File found: %s', file);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
debug('Installing dependencies');
|
|
56
|
+
console.log('▶ Installing dependencies via `npx pnpm` in', resolvedPath);
|
|
57
|
+
const installOutput = runCommand('npx pnpm install --include=dev', resolvedPath);
|
|
58
|
+
console.log(installOutput);
|
|
59
|
+
debug('Dependencies installed');
|
|
60
|
+
// Fix execute permissions for node_modules/.bin files
|
|
61
|
+
const binDir = path.join(resolvedPath, 'node_modules', '.bin');
|
|
62
|
+
debug('Checking bin directory: %s', binDir);
|
|
63
|
+
if (fs.existsSync(binDir)) {
|
|
64
|
+
try {
|
|
65
|
+
debug('Fixing execute permissions for bin files');
|
|
66
|
+
runCommand('chmod +x node_modules/.bin/*', resolvedPath);
|
|
67
|
+
debug('Permissions fixed');
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
debug('Failed to fix permissions: %O', error);
|
|
71
|
+
console.warn('⚠️ Could not fix bin permissions:', error);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
debug('Bin directory does not exist, skipping permission fix');
|
|
76
|
+
}
|
|
77
|
+
debug('Running GraphQL codegen');
|
|
78
|
+
console.log('\n▶ Running codegen...');
|
|
79
|
+
const output = runCommand('npx pnpm codegen', resolvedPath);
|
|
80
|
+
console.log(output);
|
|
81
|
+
debug('Codegen completed successfully');
|
|
82
|
+
console.log('✅ Codegen completed.');
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=run-codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-codegen.js","sourceRoot":"","sources":["../src/run-codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-gql-operations.d.ts","sourceRoot":"","sources":["../src/scaffold-gql-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAgFnC,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAyB/E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
function extractOperationName(gql) {
|
|
4
|
+
const match = gql.match(/(query|mutation)\s+(\w+)/);
|
|
5
|
+
return match ? match[2] : 'UnknownOperation';
|
|
6
|
+
}
|
|
7
|
+
function isValidDataRequirement(req) {
|
|
8
|
+
return (typeof req === 'object' &&
|
|
9
|
+
req !== null &&
|
|
10
|
+
'type' in req &&
|
|
11
|
+
(req.type === 'query' || req.type === 'mutation') &&
|
|
12
|
+
'details' in req &&
|
|
13
|
+
typeof req.details === 'object' &&
|
|
14
|
+
req.details !== null &&
|
|
15
|
+
'gql' in req.details &&
|
|
16
|
+
typeof req.details.gql === 'string');
|
|
17
|
+
}
|
|
18
|
+
function processDataRequirements(record, operations) {
|
|
19
|
+
const dataReqs = record['data_requirements'];
|
|
20
|
+
if (!Array.isArray(dataReqs))
|
|
21
|
+
return;
|
|
22
|
+
for (const req of dataReqs) {
|
|
23
|
+
if (isValidDataRequirement(req)) {
|
|
24
|
+
operations.push({
|
|
25
|
+
operationType: req.type,
|
|
26
|
+
operationName: extractOperationName(req.details.gql),
|
|
27
|
+
raw: req.details.gql.trim(),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function walk(obj, operations) {
|
|
33
|
+
if (typeof obj !== 'object' || obj === null)
|
|
34
|
+
return;
|
|
35
|
+
if (Array.isArray(obj)) {
|
|
36
|
+
obj.forEach((item) => walk(item, operations));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const record = obj;
|
|
40
|
+
processDataRequirements(record, operations);
|
|
41
|
+
for (const value of Object.values(record)) {
|
|
42
|
+
walk(value, operations);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function extractGqlOperationsFromIAScheme(schema) {
|
|
46
|
+
const operations = [];
|
|
47
|
+
walk(schema, operations);
|
|
48
|
+
return operations;
|
|
49
|
+
}
|
|
50
|
+
function buildFileContent(operations) {
|
|
51
|
+
const header = `import { graphql } from '../gql';\n`;
|
|
52
|
+
const entries = operations.map((op) => {
|
|
53
|
+
return `\nexport const ${op.operationName} = graphql(\`\n${op.raw}\n\`);`;
|
|
54
|
+
});
|
|
55
|
+
return header + entries.join('\n');
|
|
56
|
+
}
|
|
57
|
+
export function writeGqlOperationsToFolder(iaScheme, outputDir) {
|
|
58
|
+
const allOperations = extractGqlOperationsFromIAScheme(iaScheme);
|
|
59
|
+
const uniqueSet = new Set();
|
|
60
|
+
const uniqueOperations = [];
|
|
61
|
+
for (const op of allOperations) {
|
|
62
|
+
const key = `${op.operationType}:${op.operationName}:${op.raw}`;
|
|
63
|
+
if (!uniqueSet.has(key)) {
|
|
64
|
+
uniqueOperations.push(op);
|
|
65
|
+
uniqueSet.add(key);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const queries = uniqueOperations.filter((op) => op.operationType === 'query');
|
|
69
|
+
const mutations = uniqueOperations.filter((op) => op.operationType === 'mutation');
|
|
70
|
+
const graphqlDir = path.join(outputDir, 'graphql');
|
|
71
|
+
fs.mkdirSync(graphqlDir, { recursive: true });
|
|
72
|
+
const queriesPath = path.join(graphqlDir, 'queries.ts');
|
|
73
|
+
const mutationsPath = path.join(graphqlDir, 'mutations.ts');
|
|
74
|
+
fs.writeFileSync(queriesPath, buildFileContent(queries), 'utf-8');
|
|
75
|
+
fs.writeFileSync(mutationsPath, buildFileContent(mutations), 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=scaffold-gql-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-gql-operations.js","sourceRoot":"","sources":["../src/scaffold-gql-operations.ts"],"names":[],"mappings":"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"}
|