|
2 | 2 | const esprima = require('esprima'); |
3 | 3 | const estraverse = require('estraverse'); |
4 | 4 | const escodegen = require('escodegen'); |
5 | | -const path = require('path'); |
6 | 5 | const _ = require('lodash'); |
7 | | -const fs = require('fs'); |
8 | | -const fetch = require('isomorphic-fetch'); |
9 | 6 |
|
10 | | - |
11 | | -// react files |
12 | | -const useReducerfile = '/node_modules/react/cjs/react.development.js'; |
13 | | -const commitAllHostEffectsfile = '/node_modules/react-dom/cjs/react-dom.development.js'; |
14 | | - |
15 | | -// generated file names |
16 | | -const genReactDev = 'generatedReact.development.js'; |
17 | | -const genReactDom = 'generatedReact-dom.development.js'; |
18 | | - |
19 | | -// convert file to string and parse |
20 | | -function parseFile(file) { |
21 | | - const dir = path.join(__dirname, file); |
22 | | - const fileString = fs.readFile(dir, { encoding: 'utf-8' }); |
23 | | - const ast = esprima.parseModule(fileString); |
24 | | - return ast; |
25 | | -} |
26 | 7 | // declare functions to insert |
27 | 8 | // TODO: Un-comment timeTravelTracker |
28 | 9 | function useReducerReplacement() { |
@@ -141,57 +122,34 @@ function commitAllHostEffectsReplacement() { |
141 | 122 |
|
142 | 123 | // traverse ast to find method and replace body with our node's body |
143 | 124 | function traverseTree(replacementNode, functionName, ast) { |
144 | | - // let completed = false; |
145 | 125 | estraverse.replace(ast, { |
146 | 126 | enter(node) { |
147 | 127 | if (node.type === 'FunctionDeclaration') { |
148 | 128 | if (node.id.name === functionName) { |
149 | | - console.log('found', functionName); |
150 | 129 | node.body = replacementNode.body[0].body; |
151 | | - // completed = true; |
152 | 130 | } |
153 | 131 | } |
154 | 132 | }, |
155 | 133 | }); |
156 | | - // return completed; |
157 | | -} |
158 | | - |
159 | | -function generateFile(filename, ast) { |
160 | | - const code = escodegen.generate(ast); |
161 | | - fs.writeFileSync(filename, code, (err) => { |
162 | | - if (err) throw new Error(err.message); |
163 | | - }); |
164 | 134 | } |
165 | 135 |
|
166 | | -const parseAndGenerate = () => { |
167 | | - // first file |
168 | | - // let ast = parseFile(useReducerfile); |
169 | | - fetch('https://unpkg.com/react-dom@16/umd/react-dom.development.js') |
170 | | - .then(r => r.text()) |
171 | | - .then((codeString) => { |
172 | | - console.log(codeString); |
173 | | - if (codeString.search('react')) { |
174 | | - console.log('react result', codeString.search('react')); |
175 | | - const ast = esprima.parseModule(codeString); |
176 | | - if (codeString.search('react-dom')) { |
177 | | - console.log('react-DOM result', codeString.search('react-dom')); |
178 | | - const injectableCommitAllHostEffects = esprima.parseScript(commitAllHostEffectsReplacement.toString()); |
179 | | - traverseTree(injectableCommitAllHostEffects, 'commitAllHostEffects', ast); |
180 | | - } else { |
181 | | - const injectableUseReducer = esprima.parseScript(useReducerReplacement.toString()); |
182 | | - traverseTree(injectableUseReducer, 'useReducer', ast); |
183 | | - } |
184 | | - const code = escodegen.generate(ast); |
185 | | - // console.log(code); |
186 | | - // return code; |
187 | | - fs.writeFileSync('dom.js', code, (err) => { |
188 | | - if (err) throw new Error(err.message); |
189 | | - }); |
190 | | - } |
191 | | - return -1; |
192 | | - }); |
| 136 | +const parseAndGenerate = (codeString) => { |
| 137 | + if (codeString.search('react')) { |
| 138 | + const ast = esprima.parseModule(codeString); |
| 139 | + // parse react-dom code |
| 140 | + if (codeString.search('react-dom')) { |
| 141 | + const injectableCommitAllHostEffects = esprima.parseScript(commitAllHostEffectsReplacement.toString()); |
| 142 | + traverseTree(injectableCommitAllHostEffects, 'commitAllHostEffects', ast); |
| 143 | + } else { |
| 144 | + // parse react code |
| 145 | + const injectableUseReducer = esprima.parseScript(useReducerReplacement.toString()); |
| 146 | + traverseTree(injectableUseReducer, 'useReducer', ast); |
| 147 | + } |
| 148 | + const code = escodegen.generate(ast); |
| 149 | + return code; |
| 150 | + } |
| 151 | + return -1; |
193 | 152 | }; |
194 | | -parseAndGenerate(); |
195 | 153 |
|
196 | 154 | // } |
197 | 155 | module.exports = parseAndGenerate; |
0 commit comments