Nevertheless! Party Metaphorically

    commonform-flatten

    2.1.0 • Public • Published

    commonform-flatten

    Produces a useful intermediary representation for rendering in linear document formats, like Office Open XML and terminal listings.

    var flatten = require('commonform-flatten')
    var assert = require('assert')
    
    assert.deepStrictEqual(
      flatten(
        {
          content: [
            'some text ',
            { blank: '' },
            {
              heading: 'A',
              form: {
                conspicuous: 'yes',
                content: [
                  'before',
                  { form: { content: ['B'] } },
                  { form: { content: ['C'] } },
                  'between',
                  { form: { content: ['D'] } },
                  { form: { content: ['E'] } },
                  'after'
                ]
              }
            },
            'after',
            { use: 'A Defined Term' },
            {
              heading: 'Some Component',
              component: 'https://example.com/component',
              version: '1.0.0',
              substitutions: {
                terms: {},
                headings: {}
              }
            }
          ]
        },
        [{ blank: ['content', 1], value: 'NewCo' }]
      ),
      [
        {
          depth: 1,
          content: [
            'some text ',
            { blank: 'NewCo' }
          ]
        },
        {
          depth: 2,
          heading: 'A',
          content: ['before'],
          numbering: [
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 1 }
            }
          ],
          conspicuous: 'yes'
        },
        {
          depth: 3,
          content: ['B'],
          numbering: [
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 1 }
            },
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 2 }
            }
          ]
        },
        {
          depth: 3,
          content: ['C'],
          numbering: [
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 1 }
            },
            {
              series: { number: 1, of: 2 },
              element: { number: 2, of: 2 }
            }
          ]
        },
        {
          depth: 2,
          content: ['between'],
          conspicuous: 'yes'
        },
        {
          depth: 3,
          content: ['D'],
          numbering: [
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 1 }
            },
            {
              series: { number: 2, of: 2 },
              element: { number: 1, of: 2 }
            }
          ]
        },
        {
          depth: 3,
          content: ['E'],
          numbering: [
            {
              series: { number: 1, of: 2 },
              element: { number: 1, of: 1 }
            },
            {
              series: { number: 2, of: 2 },
              element: { number: 2, of: 2 }
            }
          ]
        },
        {
          depth: 2,
          content: ['after'],
          conspicuous: 'yes'
        },
        {
          depth: 1,
          content: [
            'after',
            { use: 'A Defined Term' }
          ]
        },
        {
          depth: 2,
          heading: 'Some Component',
          component: 'https://example.com/component',
          version: '1.0.0',
          substitutions: { terms: {}, headings: {} },
          numbering: [
            {
              series: { number: 2, of: 2 },
              element: { number: 1, of: 1 }
            }
          ]
        }
      ]
    )

    Preserves loaded component attributes:

    var form = { content: ['This is a test.'] }
    
    var reference = {
      component: 'https://example.com/component',
      version: '1.0.0',
      substitutions: { terms: {}, headings: {} }
    }
    
    var component = {
      publisher: 'Example Publisher',
      name: 'Example Component',
      version: '1.0.0'
    }
    
    assert.deepStrictEqual(
      flatten(
        {
          content: [
            {
              heading: 'Example Component',
              form: form,
              component: component,
              reference: reference
            }
          ]
        },
        [/* no blanks */]
      ),
      [
        {
          depth: 2,
          heading: 'Example Component',
          content: ['This is a test.'],
          reference: reference,
          component: component,
          numbering: [
            {
              element: { number: 1, of: 1 },
              series: { number: 1, of: 1 }
            }
          ]
        }
      ]
    )

    Install

    npm i commonform-flatten

    DownloadsWeekly Downloads

    1

    Version

    2.1.0

    License

    BlueOak-1.0.0

    Unpacked Size

    8.87 kB

    Total Files

    6

    Last publish

    Collaborators

    • kemitchell