textlint-rule-no-double-negative-ja
Version:
56 lines (47 loc) • 1.41 kB
JavaScript
// LICENSE : MIT
;
/**
* expectShape
* [expectShape | expectShape]
* にどれかにマッチするならtrueを返す
* @param {*} token
* @param {*|*[]} expectShape
* orでマッチしたい場合は配列を渡す
* @returns {boolean}
*/
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = expectTokenStream;
function matchToken(token, expectShape) {
if (Array.isArray(expectShape)) {
return expectShape.some(singleExpectShape => matchToken(token, singleExpectShape));
}
return Object.keys(expectShape).every(key => {
var actualValue = token[key]; // 値は複数の場合もある
var expectedValues = Array.isArray(expectShape[key]) ? expectShape[key] : [expectShape[key]];
return expectedValues.some(expectedValue => {
return actualValue === expectedValue;
});
});
}
function expectTokenStream(tokenStream) {
var currentTokenPosition = 0;
var tokenCount = tokenStream.length;
return token => {
var expectedToken = tokenStream[currentTokenPosition];
if (matchToken(token, expectedToken)) {
currentTokenPosition += 1;
} else {
// restart
currentTokenPosition = 0;
} // match
if (currentTokenPosition === tokenCount) {
// match -> reset
currentTokenPosition = 0;
return true;
}
return false;
};
}
//# sourceMappingURL=matchTokenStream.js.map