laravelphp
Version:
laravel2js and js2laravel converter laravel php resource utils
65 lines (64 loc) • 2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = laravel2js;
var _phpParser = _interopRequireDefault(require("php-parser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 _phpParser.default({
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;
}
};
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);
}
module.exports = exports.default;