import { LexInput } from "../lexer.js"; import {Command, ParseContext, StrTerm, unwrapString, wrapString} from "./command.js"; import {StrVM} from "../vm.js"; import {Awaitable} from "../../util/types.js"; export class Contains extends Command<{ find: StrTerm }> { attemptParse(context: ParseContext): { find: StrTerm } { return { find: context.popTerm(), } } getDisplayName(): string { return 'contains' } isParseCandidate(token: LexInput): boolean { return this.isKeyword(token, 'contains') } execute(vm: StrVM, data: { find: StrTerm }): Awaitable { return vm.tapInPlace(ctx => ctx.replaceSubjectAsString(sub => sub.includes(ctx.resolveString(data.find)) ? sub : '')) } }