1 | import chalk from 'chalk'
|
2 | import morphers from './morphers.js'
|
3 | import prettier from 'prettier'
|
4 |
|
5 | export 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 |
|
23 | local,
|
24 |
|
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 |
|
48 | export 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 | }
|