cordova-plugin-uiwebview-engine
Version:
Cordova UIWebView Engine Plugin
67 lines (55 loc) • 1.82 kB
JavaScript
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
}