123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- const dedent = require('dedent')
- const objectorarray = require('objectorarray')
- const parse = require('fast-json-parse')
-
- module.exports = endent
-
- const ENDENT_ID = 'twhZNwxI1aFG3r4'
-
- function endent (strings, ...values) {
- const raw = typeof strings === 'string' ? [strings] : strings.raw
-
- let result = ''
-
- for (let i = 0; i < raw.length; i++) {
- result += raw[i]
-
- if (i < values.length) {
- let value = values[i]
- let isJson = false
-
- if (parse(value).value) {
- value = parse(value).value
- isJson = true
- }
-
- if ((value && value[ENDENT_ID]) || isJson) {
- let rawlines = result.split('\n')
- let l = rawlines[rawlines.length - 1].search(/\S/)
- let endentation = l > 0 ? ' '.repeat(l) : ''
- let valueJson = isJson ? JSON.stringify(value, null, 2) : value[ENDENT_ID]
- let valueLines = valueJson.split('\n')
-
- valueLines.forEach((l, index) => {
- if (index > 0) {
- result += ('\n' + endentation + l)
- } else {
- result += l
- }
- })
- } else if (typeof value === 'string' && value.includes('\n')) {
- let endentations = result.match(/(?:^|\n)( *)$/)
-
- if (typeof value === 'string') {
- let endentation = endentations ? endentations[1] : ''
- result += value
- .split('\n')
- .map((str, i) => {
- str = (ENDENT_ID + str)
- return i === 0 ? str : `${endentation}${str}`
- })
- .join('\n')
- } else {
- result += value
- }
- } else {
- result += value
- }
- }
- }
- result = dedent(result)
- return result.split(ENDENT_ID).join('')
- }
-
- endent.pretty = (data) => {
- return objectorarray(data) ? {[ENDENT_ID]: JSON.stringify(data, null, 2)} : data
- }
|