@rlay/transform

0.3.1 • Public • Published

RlayTransform

RlayTransform transforms various data formats into Rlay Entity Objects. Currently supported data formats are:

  • JSON

Other data formats (e.g. XML) are indirectly supported by using an intermediate transformer that transforms to JSON and then using RlayTransform.

Usage

const { RlayTransform } = require('@rlay/transform');
const { Client } = require('@rlay/rlay-client-lib');

const rlayClient = new Client();

const json = {
  'undefined': undefined, // None
  'null': null, // DataProperty
  'string': 'abc', // DataProperty
  'stringempty': '', // DataProperty
  'number': 1, // DataProperty
  'boolean': true, // DataProperty
  'date': new Date(), // DataProperty
  'regex': new RegExp(), // DataProperty
  'object': { a: 1, B: 'b' }, // ObjectProperty, Class
  'objectEmpty': { }, // None
  'arrayWithObject': [
    {
      id: 1,
      value: 'a'
    },
    {
      id: 2,
      value: 'b'
    }
  ],
  'arrayWithNestedObject': [
    {
      id: 1,
      value: {
        subId: 3,
        subValue: 'c'
      }
    },
    {
      id: 2,
      value: [{
        subId: 3,
        subValue: 'c'
      }]
    },
  ],
  'arrayWithMixedElements': [null, 1, { a: 1, B: 'b' }],
  'arrayWithStrings': [null, 1, 'a', false],
  'arrayWithDuplicateObjects': [{ value: { subId: 3 } }, { value: { subId: 3 } }],
  'arrayEmpty': []
};

const entities = RlayTransform.toRlayEntityObjects(rlayClient, 'ExampleObject', json);

await Promise.all(entities.map(e => rlayClient.createEntity(e))));

.toUnorderedJson

The above example preserves the order of the arrays, this, however, might not always be desired. If the order of the elements is irrevant .toUnorderedJson replaces all arrays with dedulicated Sets. Calling .toUnorderedJson on the above json example would result in the following new json:

      {
        'undefined': undefined,
        'null': null, // DataProperty
        'string': 'abc', // DataProperty
        'stringempty': '', // DataProperty
        'number': 1, // DataProperty
        'boolean': true, // DataProperty
        'date': new Date(), // DataProperty
        'regex': new RegExp(), // DataProperty
        'object': { a: 1, B: 'b' }, // ObjectProperty, Class
        'objectEmpty': { }, // None
        'arrayWithObject': new Set([
          {
            id: 1,
            value: 'a'
          },
          {
            id: 2,
            value: 'b'
          }
        ]),
        'arrayWithNestedObject': new Set([
          {
            id: 1,
            value: {
              subId: 3,
              subValue: 'c'
            }
          },
          {
            id: 2,
            value: new Set([{
              subId: 3,
              subValue: 'c'
            }])
          },
        ]),
        'arrayWithMixedElements': new Set([null, 1, { a: 1, B: 'b' }]),
        'arrayWithStrings': new Set([null, 1, 'a', false]),
        'arrayWithDuplicateObjects': new Set([{ value: { subId: 3 } }]),
        'arrayEmpty': new Set([])
      }

The rest remains the same. Pseudo-example from above:

const unorderedJson = RlayTransform.toUnorderedJson(orderedJson);

const entities = RlayTransform.toRlayEntityObjects(rlayClient, 'ExampleObject', unorderedJson);

await Promise.all(entities.map(e => rlayClient.createEntity(e))));

Using .toUnorderedJson results in less entity payloads (~20%; depending on the json object) and therefore faster creation times.

Readme

Keywords

none

Package Sidebar

Install

npm i @rlay/transform

Weekly Downloads

1

Version

0.3.1

License

ISC

Unpacked Size

35.4 kB

Total Files

8

Last publish

Collaborators

  • hobofan
  • michaelhirn