UNPKG

laravelphp

Version:

laravel2js and js2laravel converter laravel php resource utils

57 lines 1.73 kB
import Engine from 'php-parser'; var laravel2jsClb = function laravel2jsClb(str, cb) { if (typeof str !== 'string') { var err = new Error('The first parameter was not a string'); if (!cb) throw err; return cb(err); } var parser = new Engine({ parser: { extractDoc: false, php7: true }, ast: { withPositions: false } }); try { var result = {}; var ast = parser.parseCode(str); if (ast && ast.children && ast.children.length > 0) { var returnElem = ast.children.find(function (ele) { return ele.kind === 'return'; }); if (returnElem && returnElem.expr && returnElem.expr.kind === 'array' && returnElem.expr.items) { ; (function parseArr(items, parent) { items.forEach(function (item) { if (item && item.kind === 'entry' && item.key && item.key.kind === 'string' && item.key.value && item.value) { if (item.value.kind === 'string') { parent[item.key.value] = item.value.value || ''; } if (item.value.kind === 'array' && item.value.items) { parent[item.key.value] = {}; parseArr(item.value.items, parent[item.key.value]); } } }); })(returnElem.expr.items, result); } } if (cb) return cb(null, result); return result; } catch (e) { if (cb) return cb(e); throw e; } }; export default function laravel2js(str, cb) { if (!cb) { return new Promise(function (resolve, reject) { return laravel2jsClb(str, function (err, ret) { return err ? reject(err) : resolve(ret); }); }); } return laravel2jsClb(str, cb); }