peggy-loader
Version:
Peggy loader for webpack
59 lines (46 loc) • 1.85 kB
JavaScript
Object.defineProperty(exports, '__esModule', {
value: true
});
exports['default'] = loader;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
var _peggy = require('peggy');
var peggy = _interopRequireWildcard(_peggy);
var _loaderUtils = require('loader-utils');
var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
function extractAllowedStartRules(query) {
if (typeof query.allowedStartRules === 'string') {
return [query.allowedStartRules];
}
if (Array.isArray(query.allowedStartRules)) {
return query.allowedStartRules;
}
return [];
}
function loader(source) {
if (this.cacheable) {
this.cacheable();
}
var query = _loaderUtils2['default'].parseQuery(this.query);
var cacheParserResults = !!query.cache;
var optimizeParser = query.optimize || 'speed';
var trace = !!query.trace;
var dependencies = JSON.parse(query.dependencies || '{}');
var allowedStartRules = extractAllowedStartRules(query);
// Description of Peggy options: https://peggyjs.org/documentation.html#generating-a-parser-javascript-api
var pegOptions = {
cache: cacheParserResults,
dependencies: dependencies,
format: 'commonjs',
optimize: optimizeParser,
output: 'source',
trace: trace
};
if (allowedStartRules.length > 0) {
pegOptions.allowedStartRules = allowedStartRules;
}
var methodName = typeof peggy.generate === 'function' ? 'generate' : 'buildParser';
return peggy[methodName](source, pegOptions);
}
module.exports = exports['default'];
;