UNPKG

1.44 kBJavaScriptView Raw
1import chalk from 'chalk'
2import morphers from './morphers.js'
3import prettier from 'prettier'
4
5export default function maybeMorph({
6 as,
7 getFontImport,
8 getSystemImport,
9 local,
10 track,
11 tools,
12 view,
13 viewsById,
14 viewsToFiles,
15 verbose,
16}) {
17 let result = null
18 try {
19 result = morphers[as]({
20 getFontImport,
21 getSystemImport,
22 // isStory,
23 local,
24 // localSupported,
25 track,
26 tools,
27 view,
28 viewsById,
29 viewsToFiles,
30 })
31
32 view.version++
33
34 verbose &&
35 console.log(
36 `${chalk.green('M')} ${view.id}@${view.version}:${chalk.dim(view.file)}`
37 )
38
39 return prettier.format(result.code, {
40 parser: 'babel',
41 singleQuote: true,
42 trailingComma: 'es5',
43 })
44 } catch (error) {
45 console.error(chalk.red('M'), view, error.codeFrame || error)
46 return `import { useEffect } from 'react'
47
48export default function ${view.id}() {
49 useEffect(() => {
50 console.error({
51 type: 'morph',
52 view: '${view.id}',
53 file: '${view.file}',
54 todo: "Report to https://github.com/viewstools/morph/issues/new with .view and .view.js files and what changed when it failed. This will help us improve the morpher. Thanks!",
55 })
56 }, [])
57
58 return "😳 Can't morph '${view.id}'. See console for more details."
59}
60
61/*
62>>> CODE
63${result && result.code.replace(/(\/\*|\*\/)/g, '')}
64
65
66>>> ERROR
67${error.message}
68${error.stack}
69*/`
70 }
71}