@zambelz/zhc
Version:
API Management Tools
59 lines (47 loc) • 1.49 kB
text/typescript
export const spacer = (length: number = 1) => {
return " ".repeat(length)
}
export const parseContent = (content: string): {
unparseable: {line: number, value: string}[],
parsed: Record<string, any>
} => {
const removeTrailingComma = (parseableContent: string): string => {
const contents = parseableContent.split("")
let targetIndex = contents.length - 1
while (
parseableContent[targetIndex] === "}"
|| parseableContent[targetIndex] === "\n") {
targetIndex--
}
if (targetIndex > 0 && parseableContent[targetIndex] === ",") {
return contents
.filter((_, index) => index !== targetIndex)
.join("")
}
return parseableContent
}
try {
const splitedContent = content.split("\n")
const unparseableContent: { line: number, value: string }[] = []
let parseableContent = ""
for (let i=0; i<splitedContent.length; i++) {
const line = splitedContent[i]
if (line.trim() === "") {
unparseableContent.push({ line: i, value: "\n" })
continue
}
if (line.trim().startsWith("//")) {
unparseableContent.push({ line: i, value: line })
continue
}
parseableContent += line
}
parseableContent = removeTrailingComma(parseableContent)
return {
unparseable: unparseableContent,
parsed: JSON.parse(parseableContent)
}
} catch (e) {
throw new Error(`Failed to parse content: ${content}\nError: ${e}`)
}
}