laravelphp
Version:
laravel2js and js2laravel converter laravel php resource utils
57 lines • 1.73 kB
JavaScript
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);
}