django-vue3-admin-web/node_modules/prepin/lib/parser.js
2025-10-20 21:21:14 +08:00

79 lines
2.7 KiB
JavaScript

'use strict';
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _require = require('./utils'),
evaluate = _require.evaluate,
splitlines = _require.splitlines;
var PATTERN = /^\s*\/\/\s*#(if(?:def|ndef)?|elif|else|endif)\s*(.*)$/;
var COMMENT = '// # ';
var COMMENT_RE = /\/\/\s?#\s/;
var STATES = {
if: { elif: 1, else: 1, endif: 1 },
elif: { elif: 1, else: 1, endif: 1 },
else: { endif: 1 },
endif: { if: 1, ifdef: 1, ifndef: 1 }
};
STATES.ifdef = STATES.ifndef = STATES.if;
module.exports = Parser;
function Parser(macros) {
this._eval = evaluate(macros);
this._state = 'endif';
this._comment = this._if = false;
}
Parser.prototype = {
parse: function parse() {
var _this = this;
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
return splitlines(data).map(function (line) {
var _ref = PATTERN.exec(line) || [],
_ref2 = _slicedToArray(_ref, 3),
l = _ref2[0],
cmd = _ref2[1],
expr = _ref2[2]; // eslint-disable-line no-unused-vars
line = line.replace(COMMENT_RE, '');
if (_this._isCmd(cmd)) {
_this._expr(cmd, expr);
} else if (_this._comment) {
line = COMMENT + line;
}
return line;
});
},
_isCmd: function _isCmd(cmd) {
if (!cmd) return;
if (!STATES[this._state][cmd]) {
var exp = '#' + Object.keys(STATES[this._state]).join(', #');
throw new Error('got #' + cmd + ' expected ' + exp);
}
this._state = cmd;
return true;
},
_expr: function _expr(cmd, expr) {
if (/^(?:el)?if/.test(cmd)) {
if (!expr) {
throw new Error('macro is missing');
}
if (cmd === 'ifdef') {
expr = 'typeof ' + expr + ' !== \'undefined\'';
} else if (cmd === 'ifndef') {
expr = 'typeof ' + expr + ' === \'undefined\'';
}
var res = this._eval(expr);
this._if = this._if || res;
this._comment = !res;
} else if (cmd === 'else') {
this._comment = this._if;
} else if (cmd === 'endif') {
this._comment = this._if = false;
}
}
};