UNPKG

@slightning/anything-to-string

Version:
50 lines (49 loc) 1.54 kB
import { MaximumObjectRule } from "./object"; function isFunction(data) { return typeof data == "function"; } export class MinimumFunctionRule { constructor() { this.test = isFunction; } toString(data, __config, __context) { return data.name == "" ? "[Function]" : `[Function: ${data.name}]`; } } export class LesserFunctionRule { constructor() { this.test = isFunction; } toString(data, __config) { const functionString = Function.prototype.toString.call(data) .replace(/[\s]+/g, " "); if (functionString.length <= 64) { return functionString; } const marchResult = functionString.match(/^((function[\s]*[\S]+?[\s]*\([\s\S]*?\)|([\S]+?|\([\s\S]*?\))[\s]*=>|class[\s]*[\S]+?)[\s]*\{[\s]*)[\s\S]*?([\s]*\}[\s]*)$/); if (marchResult == null) { return functionString; } return `${marchResult[1]}...${marchResult[4]}`; } } export class MajorFunctionRule { constructor() { this.test = isFunction; } toString(data, __config, __context) { return Function.prototype.toString.call(data); } } export class MaximumFunctionRule { constructor() { this.test = isFunction; } prepare(data, config, context) { new MaximumObjectRule().prepare(data, config, context); } toString(data, config, context) { return Function.prototype.toString.call(data) + " " + new MaximumObjectRule().toString(data, config, context); } }