Add prompt type parser
This commit is contained in:
7
pnpm-lock.yaml
generated
7
pnpm-lock.yaml
generated
@@ -4745,7 +4745,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lilconfig: 3.0.0
|
lilconfig: 3.0.0
|
||||||
postcss: 8.4.33
|
postcss: 8.4.33
|
||||||
yaml: 2.3.4
|
yaml: 2.4.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/postcss-nested@6.0.1(postcss@8.4.33):
|
/postcss-nested@6.0.1(postcss@8.4.33):
|
||||||
@@ -6267,9 +6267,10 @@ packages:
|
|||||||
/yallist@4.0.0:
|
/yallist@4.0.0:
|
||||||
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||||
|
|
||||||
/yaml@2.3.4:
|
/yaml@2.4.2:
|
||||||
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
|
resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/yargs-parser@18.1.3:
|
/yargs-parser@18.1.3:
|
||||||
|
|||||||
@@ -1468,3 +1468,49 @@ async function editDisplay(text){
|
|||||||
}
|
}
|
||||||
return rt
|
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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user