-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcode-impl.ts
More file actions
96 lines (92 loc) · 3 KB
/
code-impl.ts
File metadata and controls
96 lines (92 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { Codegen } from './codegen/Codegen'
import { exportDevup, importDevup } from './commands/devup'
import { exportAssets } from './commands/exportAssets'
import { exportComponents } from './commands/exportComponents'
export function registerCodegen(ctx: typeof figma) {
if (ctx.editorType === 'dev' && ctx.mode === 'codegen') {
ctx.codegen.on('generate', async ({ node, language, ...rest }) => {
console.info(rest, node)
switch (language) {
case 'devup-ui': {
const time = Date.now()
const codegen = new Codegen(node)
await codegen.run()
const componentsCodes = codegen.getComponentsCodes()
console.info(`[benchmark] devup-ui end ${Date.now() - time}ms`)
return [
...(node.type === 'COMPONENT' ||
node.type === 'COMPONENT_SET' ||
node.type === 'INSTANCE'
? []
: [
{
title: node.name,
language: 'TYPESCRIPT',
code: codegen.getCode(),
} as const,
]),
...(componentsCodes.length > 0
? ([
{
title: `${node.name} - Components`,
language: 'TYPESCRIPT',
code: componentsCodes.map((code) => code[1]).join('\n\n'),
},
{
title: `${node.name} - Components CLI`,
language: 'BASH',
code: componentsCodes
.map(
([componentName, code]) =>
`echo '${code}' > ${componentName}.tsx`,
)
.join('\n'),
},
] as const)
: []),
]
}
}
return []
})
}
}
export function runCommand(ctx: typeof figma = figma) {
switch (ctx.command) {
case 'export-devup':
exportDevup('json').finally(() => ctx.closePlugin())
break
case 'export-devup-without-treeshaking':
exportDevup('json', false).finally(() => ctx.closePlugin())
break
case 'export-devup-excel':
exportDevup('excel').finally(() => ctx.closePlugin())
break
case 'export-devup-excel-without-treeshaking':
exportDevup('excel', false).finally(() => ctx.closePlugin())
break
case 'import-devup':
importDevup('json').finally(() => ctx.closePlugin())
break
case 'import-devup-excel':
importDevup('excel').finally(() => ctx.closePlugin())
break
case 'export-assets':
exportAssets().finally(() => ctx.closePlugin())
break
case 'export-components':
exportComponents().finally(() => ctx.closePlugin())
break
}
}
export function run(ctx: typeof figma) {
if (typeof ctx !== 'undefined') {
registerCodegen(ctx)
runCommand(ctx)
}
}
export function autoRun(ctx: typeof figma | undefined = figma) {
if (typeof ctx !== 'undefined') {
run(ctx)
}
}