@vates/xml-rpc

1.0.0 • Public • Published

@vates/xml-rpc

Package Version License PackagePhobia Node compatibility

Parse and format XML-RPC messages, do not handle transport or XML

Install

Installation of the npm package:

npm install --save @vates/xml-rpc

Usage

Formatting

import { xmlRpcFormatter } from '@vates/xml-rpc/formatter'

// There is a dedicated method per XML-RPC tag (`array`, `string`, etc.)
xmlRpcFormatter.format_methodCall({
  methodName: 'examples.getStateName',
  params: [40],
})
// → {
//   name: 'methodCall',
//   children: [
//     {
//       name: 'methodName',
//       children: [ 'examples.getStateName' ]
//     },
//     {
//       name: 'params',
//       children: [
//         {
//           name: 'param',
//           children: [ { name: 'value', children: [ '40' ] } ]
//         }
//       ]
//     }
//   ]
// }

// There is a dedicated method to format a JS value
xmlRpcFormatter.format_js(new Date(900684535000))
// → {
//   name: 'dateTime.iso8601',
//   children: [ '1998-07-17T14:08:55.000Z' ]
// }

Formatting XML is out of this library's scope, but you can achieve it easily with @vates/xml:

import { formatXml } from '@vates/xml/format'

// it can now be passed to the XML-RPC parser
const tree = xmlRpcFormatter.format_methodCall({
  methodName: 'examples.getStateName',
  params: [40],
})

// avoid any indentation or new lines as it will confuse many XML-RPC parsers.
const xml = formatXml(tree, { indent: 0 })

Parsing

import { xmlRpcParser } from '@vates/xml-rpc/parser'

xmlRpcParser.parse({
  name: 'methodResponse',
  children: [
    {
      name: 'params',
      children: [
        {
          name: 'param',
          children: [
            {
              name: 'value',
              children: [
                {
                  name: 'string',
                  children: ['South Dakota'],
                },
              ],
            },
          ],
        },
      ],
    },
  ],
})
// { params: [ 'South Dakota' ] }

// There is a dedicated method per XML-RPC tag (`array`, `string`, etc.)
xmlRpcParser.parse_array({
  name: 'array',
  children: [
    {
      name: 'data',
      children: [
        {
          name: 'value',
          children: [{ name: 'boolean', children: ['1'] }],
        },
        {
          name: 'value',
          children: [{ name: 'int', children: ['42'] }],
        },
      ],
    },
  ],
})
// [ true, 42 ]

Parsing XML is out of this library's scope, but you can achieve it easily with @vates/xml:

import { parseXml } from '@vates/xml/parse'

const xml = `
<?xml version="1.0"?>
<methodResponse>
  <params>
    <param>
        <value><string>South Dakota</string></value>
    </param>
  </params>
</methodResponse>
`

const tree = parseXml(xml)

// it can now be passed to the XML-RPC parser
xmlRpcParser.parse(tree)

Contributions

Contributions are very welcomed, either on the documentation or on the code.

You may:

  • report any issue you've encountered;
  • fork and create a pull request.

License

ISC © Vates SAS

Readme

Keywords

none

Package Sidebar

Install

npm i @vates/xml-rpc

Weekly Downloads

16

Version

1.0.0

License

ISC

Unpacked Size

9.61 kB

Total Files

4

Last publish

Collaborators

  • mlssfrncjrg
  • b-nollet
  • arnogues
  • florent.beauchamp
  • mathieura
  • enishowk
  • tgoettelmann
  • julien-f
  • marsaud
  • olivierlambert
  • pdonias