├── .gitignore ├── .npmignore ├── README.md ├── rnst.js ├── package.json └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | *.map 2 | node_modules/ 3 | bower_components/ -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.map 2 | *.coffee 3 | test/ 4 | node_modules/ 5 | bower_components/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | react-native-sm-transformer 2 | -------- 3 | 4 | DEPRECATED. Broken since RN 0.43. 5 | -------------------------------------------------------------------------------- /rnst.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require("child_process").execSync( 4 | "react-native start server --transformer node_modules/react-native-sm-transformer/index", 5 | { 6 | stdio: [0, 1, 2] 7 | } 8 | ); 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-sm-transformer", 3 | "version": "1.0.3", 4 | "description": "handles source map transformation for react native server", 5 | "main": "index.js", 6 | "bin": { 7 | "rnst": "./rnst.js" 8 | }, 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/mhzed/react-native-sm-transformer.git" 15 | }, 16 | "keywords": [ 17 | "react", 18 | "native", 19 | "source", 20 | "map", 21 | "transform" 22 | ], 23 | "author": "mhzedd@gmail.com", 24 | "license": "ISC", 25 | "bugs": { 26 | "url": "https://github.com/mhzed/react-native-sm-transformer/issues" 27 | }, 28 | "homepage": "https://github.com/mhzed/react-native-sm-transformer#readme" 29 | } 30 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // react-native start --transformer ./smTransform.js 2 | 3 | var transformer = require('react-native/packager/transformer'); 4 | var fs = require("fs"); 5 | var sourceMap = require("source-map"); 6 | var path = require('path'); 7 | 8 | const lc = (str) => { 9 | let c = 0 10 | for (let ch of str) { 11 | if (ch === "\n") c++; 12 | } 13 | return c 14 | } 15 | 16 | // line to line mapping of sourcemap 17 | const smOneToOne = (srcfile, src) => { 18 | "use strict"; 19 | let map = new sourceMap.SourceMapGenerator({file: srcfile}) 20 | let n = lc(src) 21 | for (let line = 1; line <= n + 1; line++) { 22 | map.addMapping({ 23 | source: srcfile, 24 | original: {line, column: 0}, 25 | generated: {line, column: 0} 26 | }) 27 | } 28 | return map.toJSON() 29 | } 30 | 31 | module.exports = function (data, callback) { 32 | let smfile = data.filename + ".map"; 33 | 34 | if (fs.existsSync(smfile)) { 35 | transformer(data, (err, mod) => { // eslint-disable-line 36 | "use strict"; 37 | if (mod) { 38 | var smap = JSON.parse(fs.readFileSync(smfile).toString()); 39 | 40 | // Use absolute paths so further transformations would be able to resolve original files 41 | smap.sources = smap.sources.map(source => { 42 | return path.join(path.dirname(smfile), source); 43 | }); 44 | 45 | mod.map = smap; 46 | } 47 | callback(null, mod); 48 | }) 49 | } else { 50 | transformer(data, (err, mod) => { 51 | "use strict"; 52 | if (mod && !mod.map) { 53 | mod.map = smOneToOne(mod.filename, mod.code) 54 | } 55 | return callback(err, mod); 56 | }); 57 | } 58 | }; 59 | --------------------------------------------------------------------------------