UNPKG

costreamjs

Version:

A high-performance streaming programming language for parallel architecture. This repo (js-version) is created for better using & reading & debugging.

31 lines (30 loc) 1.34 kB
const defaultDescriptor = { configurable: true, enumerable: false, value: undefined, writable: true } /** * 定义 target 的 key 属性为私有属性, 例如 一个 node 的 this._source 和 this._loc */ export function definePrivate(target, key) { var descriptor = Object.getOwnPropertyDescriptor(target, key) || defaultDescriptor descriptor.enumerable = false Object.defineProperty(target, key, descriptor) } /** * 输入一段带有'{' '}'的字符串,然后按照层级在\n 的后面添加空格, 来美化输出 */ String.prototype.beautify = function (space_num = 2) { var space = (x) => Array(x).fill(' ').join('') var stage = 0, result = '' var str = this.replace(/\{(?![ \t]*\n)/g, '{\n') // 在 { 右侧添加换行符 str = str.replace(/\}/g, '\n\}').replace(/\}(?![ \t;]*\n)/g, '}\n') // 在 } 的左右两侧都添加换行符,除非右侧已经有换行符或者右侧有个紧挨着的';'(全局 declareNode 的特例) var stmts = str.split('\n').map(x => x.trim()).filter((str,idx,arr)=>str || arr[idx+1] !== '}') // 移除右花括号}前的空行(若该行trim为空且下一行为}则删去) for (var s of stmts) { if (/\}/.test(s)) stage-- result += space(stage * space_num) + s + '\n' if (/\{$/.test(s)) stage++ } return result }