@slightning/anything-to-string
Version:
Converts anything to a string.
90 lines (89 loc) • 3.58 kB
JavaScript
import { getIndentString } from "../utils";
import { AnythingRule } from "./anything";
import { LesserObjectRule, MajorObjectRule, MaximumObjectRule } from "./object";
function isMap(data) {
return typeof Map != "undefined" && data instanceof Map;
}
export class MinimumMapRule {
constructor() {
this.test = isMap;
}
toString(data, __config, __context) {
return `Map(${data.size})`;
}
}
export class LesserMapRule {
constructor() {
this.test = isMap;
}
prepare(data, config, context) {
new LesserObjectRule().prepare(data, config, context);
for (const key of data.keys()) {
new AnythingRule().prepare(key, config, context);
}
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new LesserObjectRule({
specialValue: {
"[[Entries]]": data.size == 0 ? "None" : Array.from(data.entries().map(([key, value]) => {
return `${new AnythingRule().toString(key, config, context)}: ${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config)}`);
}).map((line) => `\n${getIndentString(config)}${line}`)).join("")
}
}).toString(data, config, context);
}
}
export class MajorMapRule {
constructor() {
this.test = isMap;
}
prepare(data, config, context) {
new MajorObjectRule().prepare(data, config, context);
for (const key of data.keys()) {
new AnythingRule().prepare(key, config, context);
}
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new MajorObjectRule({
specialValue: {
"[[Entries]]": data.size == 0 ? "None" : Array.from(data.entries().map(([key, value]) => {
return `${"\n"}key: ${new AnythingRule().toString(key, config, context)}${"\n"}value: ${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config).repeat(2)}`);
}).map((line, index) => `\n${getIndentString(config)}${index}: ${line}`)).join("")
}
}).toString(data, config, context);
}
}
export class MaximumMapRule {
constructor() {
this.test = isMap;
}
prepare(data, config, context) {
new MaximumObjectRule().prepare(data, config, context);
for (const key of data.keys()) {
new AnythingRule().prepare(key, config, context);
}
for (const value of data.values()) {
new AnythingRule().prepare(value, config, context);
}
}
toString(data, config, context) {
return new MaximumObjectRule({
specialValue: {
"[[Entries]]": data.size == 0 ? "None" : Array.from(data.entries().map(([key, value]) => {
return `${"\n"}key: ${new AnythingRule().toString(key, config, context)}${"\n"}value: ${new AnythingRule().toString(value, config, context)}`
.split("\n")
.join(`\n${getIndentString(config).repeat(2)}`);
}).map((line, index) => `\n${getIndentString(config)}${index}: ${line}`)).join("")
}
}).toString(data, config, context);
}
}