@constructorfleet/ultimate-govee
Version:
Library for interacting with Govee devices written in Typescript.
73 lines • 2.76 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CQRSLogger = void 0;
const common_1 = require("@nestjs/common");
var TokenType;
(function (TokenType) {
TokenType[TokenType["CATEGORY"] = 0] = "CATEGORY";
TokenType[TokenType["TYPE"] = 1] = "TYPE";
TokenType[TokenType["PLAIN"] = 2] = "PLAIN";
})(TokenType || (TokenType = {}));
const tokenize = (value) => value
.replace(/(IoT)|(CQRS)|(API)|([A-Z]+)/g, (substring) => ` ${substring}`)
.trim()
.split(' ');
const tokenTypes = {
Handler: TokenType.TYPE,
Command: TokenType.CATEGORY,
Event: TokenType.CATEGORY,
Query: TokenType.CATEGORY,
Sagas: TokenType.CATEGORY,
Service: TokenType.CATEGORY,
Client: TokenType.CATEGORY,
Factory: TokenType.CATEGORY,
Bus: TokenType.TYPE,
};
const processTokens = (tokens) => {
const tempTokens = [...tokens].reverse();
const tokenMetas = tempTokens.reduce((acc, token, index) => {
let tokenType = TokenType.PLAIN;
if (tokenTypes[token] !== undefined) {
tokenType = tokenTypes[token];
}
else if (index < tempTokens.length - 1 &&
tokenTypes[tempTokens[index + 1]]) {
if (index > 0 &&
tokenTypes[tempTokens[index + 1]] === acc[index - 1].type) {
// Found a plain token between two non-plain tokens, next matches previous, assume this token is that type
tokenType = acc[index - 1].type;
}
}
acc.push({
value: token,
type: tokenType,
});
return acc;
}, []);
return tokenMetas.reverse();
};
class CQRSLogger extends common_1.ConsoleLogger {
formatContext(context) {
const contextTokens = tokenize(context);
const processedTokens = processTokens(contextTokens);
const categoryString = processedTokens
.filter((token) => token.type === TokenType.CATEGORY)
.map((token) => token.value)
.join('');
const typeTokens = processedTokens
.filter((token) => token.type === TokenType.TYPE)
.map((token) => token.value);
const typeString = typeTokens.length > 0 ? `[${typeTokens.join('')}]` : '';
const plainString = processedTokens
.filter((token) => token.type === TokenType.PLAIN)
.map((token) => token.value)
.join('');
const separator = (categoryString.length > 0 || typeString.length > 0) &&
plainString.length > 0
? ' - '
: '';
return super.formatContext(`${categoryString}${typeString}${separator}${plainString}`);
}
}
exports.CQRSLogger = CQRSLogger;
//# sourceMappingURL=cqrs-logger.js.map