Files
memecoin-botV2/.pnpm-store/v10/files/59/cb3424525e890f6141a91cdc1c5683d916f57e8bca9283d07dc1e423d9687f9473a5cd3ec99f2e291a218fcbcc87ab3fbf9984f5ffa66b456848e01c165e7a

116 lines
3.3 KiB
Plaintext

'use strict';
const FilterBase = require('./FilterBase');
const withParser = require('../utils/withParser');
class Replace extends FilterBase {
static make(options) {
return new Replace(options);
}
static withParser(options) {
return withParser(Replace.make, options);
}
_checkChunk(chunk) {
switch (chunk.name) {
case 'startKey':
if (this._allowEmptyReplacement) {
this._transform = this._skipKeyChunks;
return true;
}
break;
case 'keyValue':
if (this._allowEmptyReplacement) return true;
break;
case 'startObject':
case 'startArray':
case 'startString':
case 'startNumber':
case 'nullValue':
case 'trueValue':
case 'falseValue':
case 'stringValue':
case 'numberValue':
if (this._filter(this._stack, chunk)) {
let replacement = this._replacement(this._stack, chunk);
if (this._allowEmptyReplacement) {
if (replacement.length) {
const key = this._stack[this._stack.length - 1];
if (typeof key == 'string') {
if (this._streamKeys) {
this.push({name: 'startKey'});
this.push({name: 'stringChunk', value: key});
this.push({name: 'endKey'});
}
this.push({name: 'keyValue', value: key});
}
}
} else {
if (!replacement.length) replacement = FilterBase.defaultReplacement;
}
replacement.forEach(value => this.push(value));
switch (chunk.name) {
case 'startObject':
case 'startArray':
this._transform = this._skipObject;
this._depth = 1;
break;
case 'startString':
this._transform = this._skipString;
break;
case 'startNumber':
this._transform = this._skipNumber;
break;
case 'nullValue':
case 'trueValue':
case 'falseValue':
case 'stringValue':
case 'numberValue':
this._transform = this._once ? this._pass : this._check;
break;
}
return true;
}
break;
}
// issue a key, if needed
if (this._allowEmptyReplacement) {
const key = this._stack[this._stack.length - 1];
if (typeof key == 'string') {
switch (chunk.name) {
case 'startObject':
case 'startArray':
case 'startString':
case 'startNumber':
case 'nullValue':
case 'trueValue':
case 'falseValue':
case 'stringValue':
case 'numberValue':
if (this._streamKeys) {
this.push({name: 'startKey'});
this.push({name: 'stringChunk', value: key});
this.push({name: 'endKey'});
}
this.push({name: 'keyValue', value: key});
break;
}
}
}
this.push(chunk);
return false;
}
_skipKeyChunks(chunk, _, callback) {
if (chunk.name === 'endKey') {
this._transform = this._check;
}
callback(null);
}
}
Replace.replace = Replace.make;
Replace.make.Constructor = Replace;
module.exports = Replace;