11import { request } from 'obsidian' ;
2- // import { create } from 'xmlbuilder2';
3- // import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
4- import { get , isArray , isBoolean , isDate , isNumber , isObject , isSafeInteger } from 'lodash-es' ;
2+ import { isArray , isBoolean , isDate , isNumber , isObject , isSafeInteger } from 'lodash-es' ;
53import { format , parse } from 'date-fns' ;
64import { SafeAny } from './utils' ;
75
@@ -53,39 +51,7 @@ export class XmlRpcClient {
5351 ) : Promise < unknown > {
5452 console . log ( `Endpoint: ${ this . endpoint } , ${ method } ` , params ) ;
5553
56- // const pv = [
57- // 0,
58- // 'devbean',
59- // 'password',
60- // [
61- // 'aaa',
62- // 'bbb'
63- // ],
64- // 1.234,
65- // {
66- // command: 'whoami',
67- // params: [
68- // '-?'
69- // ]
70- // },
71- // new Date(),
72- // false
73- // ];
74- // const xml = this.objectToXml(method, params).end({ prettyPrint: true });
7554 const xml = this . objectToXml ( method , params ) ;
76- // console.log(xml);
77- //
78- // const xml_str = '<?xml version="1.0"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>4</int></value></member><member><name>faultString</name><value><string>Too many parameters.</string></value></member></struct></value></fault></methodResponse>';
79- // const xml_obj = this.responseXmlToObject(xml_str);
80- // console.log(xml_obj);
81- // const xml_str2 = '<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><array><data><value><i4>0</i4></value><value><string><![CDATA[devbean]]></string></value><value><string><![CDATA[password]]></string></value><value><array><data><value><string><![CDATA[aaa]]></string></value><value><string><![CDATA[bbb]]></string></value></data></array></value><value><double>1.234</double></value><value><struct><member><name>command</name><value><string><![CDATA[whoami]]></string></value></member><member><name>params</name><value><array><data><value><string><![CDATA[-?]]></string></value></data></array></value></member></struct></value><value><dateTime.iso8601>20230407168084385892113:04:18</dateTime.iso8601></value><value><boolean>0</boolean></value></data></array></value></param></params></methodResponse>';
82- // const xml_obj2 = this.responseXmlToObject(xml_str2);
83- // console.log(xml_obj2);
84- // const xml_str3 = '<?xml version="1.0" encoding="UTF-8"?><methodResponse><params><param><value><i4>123</i4><string>xyz</string></value></param></params></methodResponse>';
85- // const xml_obj3 = this.responseXmlToObject(xml_str3);
86- // console.log(xml_obj3);
87- // throw new Error('xxx');
88-
8955 return request ( {
9056 url : this . endpoint ,
9157 method : 'POST' ,
@@ -115,26 +81,12 @@ export class XmlRpcClient {
11581 return new XMLSerializer ( ) . serializeToString ( doc ) ;
11682 }
11783
118- // private objectToXml(method: string, ...obj: unknown[]): XMLBuilder {
119- // const xml = create({ version: '1.0' })
120- // .ele('methodCall')
121- // .ele('methodName').txt(method).up()
122- // .ele('params');
123- // obj.forEach(it => this.createParam(it, xml));
124- // return xml;
125- // }
126-
12784 private createParam ( obj : unknown , params : HTMLElement , doc : XMLDocument ) : void {
12885 const param = doc . createElement ( 'param' ) ;
12986 params . appendChild ( param ) ;
13087 this . createValue ( obj , param , doc ) ;
13188 }
13289
133- // private createParam(obj: unknown, xml: XMLBuilder): void {
134- // const param = xml.ele('param');
135- // this.createValue(obj, param);
136- // }
137-
13890 private createValue ( data : unknown , parent : HTMLElement , doc : XMLDocument ) : void {
13991 const value = doc . createElement ( 'value' ) ;
14092 parent . appendChild ( value ) ;
@@ -179,45 +131,6 @@ export class XmlRpcClient {
179131 }
180132 }
181133
182- // private createValue(data: unknown, param: XMLBuilder): void {
183- // const value = param.ele('value');
184- // if (isSafeInteger(data)) {
185- // value.ele('i4').txt((data as SafeAny).toString());
186- // } else if (isNumber(data)) {
187- // value.ele('double').txt(data.toString());
188- // } else if (isBoolean(data)) {
189- // value.ele('boolean').txt(data ? '1' : '0');
190- // } else if (isDate(data)) {
191- // value.ele('dateTime.iso8601').txt(format(data as Date, 'yyyyMMddTHH:mm:ss'));
192- // } else if (isArray(data)) {
193- // const array = value
194- // .ele('array')
195- // .ele('data');
196- // (data as unknown[]).forEach(it => this.createValue(it, array));
197- // } else if (isObject(data)) {
198- // const struct = value.ele('struct');
199- // for (const [ prop, value] of Object.entries(data)) {
200- // const member = struct
201- // .ele('member')
202- // .ele('name').txt(prop)
203- // .up();
204- // this.createValue(value, member);
205- // }
206- // } else {
207- // value.ele('string').dat((data as SafeAny).toString());
208- // }
209- // }
210-
211- // private responseToObject(response: string): unknown {
212- // const res = create(response).end({ format: 'object' });
213- // if (get(res, 'methodResponse.params')) {
214- // return this.fromValue(get(res, 'methodResponse.params.param.value'));
215- // } else if (get(res, 'methodResponse.fault')) {
216- // return this.fromValue(get(res, 'methodResponse.fault.value'));
217- // }
218- // throw new Error('Invalid XML-RPC response.');
219- // }
220-
221134 private responseXmlToObject ( xml : string ) : unknown {
222135 const parser = new DOMParser ( ) ;
223136 const doc = parser . parseFromString ( xml , 'application/xml' ) ;
@@ -236,13 +149,6 @@ export class XmlRpcClient {
236149 . children ;
237150 return this . fromValue ( responseValue ) ;
238151 }
239- throw new Error ( 'Invalid XML-RPC response.' ) ;
240- // if (get(doc, 'methodResponse.params')) {
241- // return this.fromValue(get(doc, 'methodResponse.params.param.value'));
242- // } else if (get(doc, 'methodResponse.fault')) {
243- // return this.fromValue(get(doc, 'methodResponse.fault.value'));
244- // }
245- // throw new Error('Invalid XML-RPC response.');
246152 }
247153
248154 private fromValue ( collection : HTMLCollection ) : unknown {
@@ -293,50 +199,4 @@ export class XmlRpcClient {
293199 }
294200 }
295201
296- // private fromValue(value: unknown): unknown {
297- // if (get(value, 'i4') || get(value, 'int')) {
298- // return get(value, 'i4') || get(value, 'int');
299- // } else if (get(value, 'double')) {
300- // return get(value, 'double');
301- // } else if (get(value, 'boolean')) {
302- // return get(value, 'boolean') === '1';
303- // } else if (get(value, 'dateTime.iso8601')) {
304- // const datetime = get(value, 'dateTime.iso8601');
305- // if (datetime) {
306- // return parse(datetime, "yyyyMMdd'T'HH:mm:ss", new Date());
307- // } else {
308- // return new Date();
309- // }
310- // } else if (get(value, 'array')) {
311- // const array: unknown[] = [];
312- // const data: unknown = get(value, 'array.data.value');
313- // if (isArray(data)) {
314- // data.forEach((it: unknown) => {
315- // array.push(this.fromValue(it));
316- // });
317- // } else {
318- // array.push(this.fromValue(data));
319- // }
320- // return array;
321- // } else if (get(value, 'struct')) {
322- // const struct: SafeAny = {};
323- // const members: unknown = get(value, 'struct.member');
324- // if (isArray(members)) {
325- // members.forEach((member: unknown) => {
326- // const name = get(member, 'name');
327- // if (name) {
328- // struct[name] = this.fromValue(get(member, 'value'));
329- // }
330- // });
331- // } else {
332- // const name = get(members, 'name');
333- // if (name) {
334- // struct[name] = this.fromValue(get(members, 'value'));
335- // }
336- // }
337- // return struct;
338- // } else {
339- // return get(value, 'string');
340- // }
341- // }
342202}
0 commit comments