@slightning/anything-to-string
Version:
Converts anything to a string.
81 lines (80 loc) • 2.97 kB
JavaScript
import { getIndentString } from "../utils";
import { AnythingRule } from "./anything";
import { LesserObjectRule, MajorObjectRule, MaximumObjectRule } from "./object";
function isSet(data) {
return typeof Set != "undefined" && data instanceof Set;
}
export class MinimumSetRule {
constructor() {
this.test = isSet;
}
toString(data, __config, __context) {
return `Set(${data.size})`;
}
}
export class LesserSetRule {
constructor() {
this.test = isSet;
}
prepare(data, config, context) {
new LesserObjectRule().prepare(data, config, context);
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new LesserObjectRule({
specialValue: {
"[[Values]]": data.size == 0 ? "None" : Array.from(data).map((value) => {
return `${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config)}`);
}).map((line, index) => `\n${getIndentString(config)}${index}: ${line}`).join("")
}
}).toString(data, config, context);
}
}
export class MajorSetRule {
constructor() {
this.test = isSet;
}
prepare(data, config, context) {
new MajorObjectRule().prepare(data, config, context);
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new MajorObjectRule({
specialValue: {
"[[Values]]": data.size == 0 ? "None" : Array.from(data).map((value) => {
return `${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config)}`);
}).map((line, index) => `\n${getIndentString(config)}${index}: ${line}`).join("")
}
}).toString(data, config, context);
}
}
export class MaximumSetRule {
constructor() {
this.test = isSet;
}
prepare(data, config, context) {
new MaximumObjectRule().prepare(data, config, context);
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new MaximumObjectRule({
specialValue: {
"[[Values]]": data.size == 0 ? "None" : Array.from(data).map((value) => {
return `${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config)}`);
}).map((line, index) => `\n${getIndentString(config)}${index}: ${line}`).join("")
}
}).toString(data, config, context);
}
}