Add prompt type parser

This commit is contained in:
kwaroran
2024-04-30 04:11:04 +09:00
parent 3647985ca4
commit e9a84358fb
2 changed files with 50 additions and 3 deletions

7
pnpm-lock.yaml generated
View File

@@ -4745,7 +4745,7 @@ packages:
dependencies:
lilconfig: 3.0.0
postcss: 8.4.33
yaml: 2.3.4
yaml: 2.4.2
dev: true
/postcss-nested@6.0.1(postcss@8.4.33):
@@ -6267,9 +6267,10 @@ packages:
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
/yaml@2.4.2:
resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==}
engines: {node: '>= 14'}
hasBin: true
dev: true
/yargs-parser@18.1.3:

View File

@@ -1468,3 +1468,49 @@ async function editDisplay(text){
}
return rt
}
export type PromptParsed ={[key:string]:string|PromptParsed}
export async function promptTypeParser(prompt:string):Promise<string | PromptParsed>{
//XML type
try {
const parser = new DOMParser()
const dom = `<root>${prompt}</root>`
const xmlDoc = parser.parseFromString(dom, "text/xml")
const root = xmlDoc.documentElement
const errorNode = root.getElementsByTagName('parsererror')
if(errorNode.length > 0){
throw new Error('XML Parse Error') //fallback to other parser
}
const parseNode = (node:Element):string|PromptParsed => {
if(node.children.length === 0){
return node.textContent
}
const data:{[key:string]:string|PromptParsed} = {}
for(let i=0;i<node.children.length;i++){
const child = node.children[i]
data[child.tagName] = parseNode(child)
}
return data
}
const pnresult = parseNode(root)
if(typeof(pnresult) === 'string'){
throw new Error('XML Parse Error') //fallback to other parser
}
return pnresult
} catch (error) {
}
return prompt
}