2.5.6 • Published 9 months ago

shinkansen-transmission v2.5.6

Weekly downloads
60
License
ISC
Repository
github
Last release
9 months ago

shinkansen-transmission

Shinkansen generates JSON Schema valid documents from user submissions with <html /> forms.

Transmission

Transmission transforms HTTP POST data into JSON Schema valid JSON documents (and back again).

It can also translate JSON Schema into Zashiki description format describing <html /> forms.

Installation

npm i -P shinkansen-transmission

Your schema should be dereferenced before it is transformed with Transmission (we recommend json-schema-ref-parser).

fromHashToDocument

const document = fromHashToDocument(values, rootSchema)

For applications accepting POST data.

The transformer walks the rootSchema and maps fields in values to another structure, which it returns.

  • values is a hash of keys and values
  • rootSchema is a JSON Schema

The return value is an object valid according to the Schema.

POST data is generally represented as a hash of keys and values, where the values are all strings, or arrays containing strings. fromHashToDocument transforms that hash into a document.

rootSchema
{
  type: 'object',
  properties: {
    company: {
      type: 'object',
      properties: {
        name: {
          type: 'string'
        },
        publisher: {
          type: 'object',
          properties: {
            firstName: {
              type: 'string'
            },
            lastName: {
              type: 'string'
            },
            age: {
              type: 'number'
            }
          }
        }
      }
    },
    active: {
      type: 'boolean'
    }
  }
}
values

An object.

{
  'company-name': 'Marvel',
  'company-publisher-firstName': 'Stan',
  'company-publisher-lastName': 'Lee',
  'company-publisher-age': '96',
  active: 'true'
}
document

An object.

{
  company: {
    name: 'Marvel',
    publisher: {
      firstName: 'Stan',
      lastName: 'Lee',
      age: 96
    }
  },
  active: true
}

fromDocumentToHash

const values = fromDocumentToHash(document, rootSchema)

For applications accepting POST data.

The transformer walks the document and maps its fields to another structure, which it returns.

  • document is an object valid according to the Schema
  • rootSchema is a JSON Schema

The return value is a hash of keys and values, where the values are all strings, or arrays containing strings.

POST data is generally represented as a hash of keys and values, where the values are all strings, or arrays containing strings. fromDocumentToHash transforms a document into that hash.

document

An object.

{
  company: {
    name: 'Marvel',
    publisher: {
      firstName: 'Stan',
      lastName: 'Lee',
      age: 96
    }
  },
  active: true
}
rootSchema
{
  type: 'object',
  properties: {
    company: {
      type: 'object',
      properties: {
        name: {
          type: 'string'
        },
        publisher: {
          type: 'object',
          properties: {
            firstName: {
              type: 'string'
            },
            lastName: {
              type: 'string'
            }
            age: {
              type: 'number'
            }
          }
        }
      }
    },
    active: {
      type: 'boolean'
    }
  }
}
values

A hash.

{
  'company-name': 'Marvel',
  'company-publisher-firstName': 'Stan',
  'company-publisher-lastName': 'Lee',
  'company-publisher-age': '96',
  active: 'true'
}

toZashiki

const zashiki = toZashiki(rootSchema, values, params)

The transformer walks the rootSchema and maps fields in values and params to Zashiki description format, which it returns.

  • rootSchema is a JSON Schema
  • values is a document valid according to the Schema
  • params are any other parameters for the transformer

The return value is an object with the fields meta and elements.

As you might expect, meta contains fields about the Schema, while elements contains fields to be rendered as HTML. (Transmission doesn't express any opinion on what those elements are to be, but assumes that a field will be rendered as an HTML <form /> element or some component which behaves like one.)

Transformed structure

{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean,
    defaultValue: /* Per `type` */,
    value: /* Per `type` */,
  },
  elements: {
    title: String,
    description: String,
    field: {
      isRequired: Boolean,
      value: /* Per `type` */,
      name: String
    }
  }
}
enum
{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean,
    selectedItems: Array
  },
  elements: {
    title: String,
    description: String,
    enum: {
      isRequired: Boolean,
      selectedItems: Array,
      items: Array,
      name: String
    }
  }
}
anyOf
{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean,
    selectedItems: Array
  },
  elements: {
    title: String,
    description: String,
    anyOf: {
      isRequired: Boolean,
      selectedItems: Array,
      items: Array,
      name: String
    }
  }
}
oneOf
{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean,
    selectedItems: Array
  },
  elements: {
    title: String,
    description: String,
    oneOf: {
      isRequired: Boolean,
      selectedItems: Array,
      items: Array,
      name: String
    }
  }
}
allOf
  • array or object
{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean
  },
  elements: {
    title: String,
    description: String,
    fields: Array
  }
}
  • Any other
{
  meta: {
    uri: String,
    name: String,
    type: String /* One of "object" "array" "string" "number" "boolean" "null" */,
    schema: Object,
    rootSchema: Object,
    isRequired: Boolean
  },
  elements: {
    title: String,
    description: String,
    field: Object
  }
}

See also

2.4.1

9 months ago

2.4.0

9 months ago

2.4.3

9 months ago

2.4.2

9 months ago

2.4.5

9 months ago

2.4.4

9 months ago

2.2.230

10 months ago

2.5.6

9 months ago

2.2.234

10 months ago

2.5.5

9 months ago

2.2.233

10 months ago

2.2.232

10 months ago

2.2.231

10 months ago

2.2.235

9 months ago

2.2.229

10 months ago

2.2.228

10 months ago

2.3.0

9 months ago

2.3.2

9 months ago

2.3.1

9 months ago

2.3.4

9 months ago

2.3.3

9 months ago

2.3.6

9 months ago

2.3.5

9 months ago

2.4.7

9 months ago

2.4.6

9 months ago

2.4.9

9 months ago

2.4.8

9 months ago

2.2.205

1 year ago

2.2.204

1 year ago

2.2.203

1 year ago

2.2.223

10 months ago

2.2.222

10 months ago

2.2.221

10 months ago

2.2.220

10 months ago

2.2.227

10 months ago

2.2.226

10 months ago

2.2.225

10 months ago

2.2.224

10 months ago

2.2.219

10 months ago

2.2.218

10 months ago

2.2.217

10 months ago

2.2.212

11 months ago

2.2.211

11 months ago

2.2.210

11 months ago

2.2.216

10 months ago

2.2.215

11 months ago

2.2.214

11 months ago

2.2.213

11 months ago

2.2.209

12 months ago

2.2.208

12 months ago

2.2.207

1 year ago

2.2.206

1 year ago

2.5.0

9 months ago

2.5.2

9 months ago

2.5.1

9 months ago

2.5.4

9 months ago

2.5.3

9 months ago

2.2.202

1 year ago

2.2.201

1 year ago

2.2.200

1 year ago

2.2.199

1 year ago

2.2.198

1 year ago

2.2.193

1 year ago

2.2.192

1 year ago

2.2.197

1 year ago

2.2.196

1 year ago

2.2.195

1 year ago

2.2.194

1 year ago

2.2.191

1 year ago

2.2.190

1 year ago

2.2.164

2 years ago

2.2.163

2 years ago

2.2.162

2 years ago

2.2.168

1 year ago

2.2.167

2 years ago

2.2.166

2 years ago

2.2.165

2 years ago

2.2.169

1 year ago

2.2.182

1 year ago

2.2.181

1 year ago

2.2.180

1 year ago

2.2.186

1 year ago

2.2.185

1 year ago

2.2.184

1 year ago

2.2.183

1 year ago

2.2.189

1 year ago

2.2.188

1 year ago

2.2.187

1 year ago

2.2.171

1 year ago

2.2.170

1 year ago

2.2.175

1 year ago

2.2.174

1 year ago

2.2.173

1 year ago

2.2.172

1 year ago

2.2.179

1 year ago

2.2.178

1 year ago

2.2.177

1 year ago

2.2.176

1 year ago

2.2.161

2 years ago

2.2.160

2 years ago

2.2.159

2 years ago

2.2.157

2 years ago

2.2.158

2 years ago

2.2.156

2 years ago

2.2.155

2 years ago

2.2.154

2 years ago

2.2.153

2 years ago

2.2.152

2 years ago

2.2.151

2 years ago

2.2.150

2 years ago

2.2.149

2 years ago

2.2.148

2 years ago

2.2.147

2 years ago

2.2.146

2 years ago

2.2.145

2 years ago

2.2.144

2 years ago

2.2.142

2 years ago

2.2.143

2 years ago

2.2.141

2 years ago

2.2.140

2 years ago

2.2.139

2 years ago

2.2.138

2 years ago

2.2.135

2 years ago

2.2.137

2 years ago

2.2.136

2 years ago

2.2.133

2 years ago

2.2.132

2 years ago

2.2.131

2 years ago

2.2.130

2 years ago

2.2.129

2 years ago

2.2.128

2 years ago

2.2.127

2 years ago

2.2.126

2 years ago

2.2.125

2 years ago

2.2.124

2 years ago

2.2.123

2 years ago

2.2.122

2 years ago

2.2.121

2 years ago

2.2.120

2 years ago

2.2.119

2 years ago

2.2.118

2 years ago

2.2.117

2 years ago

2.2.116

2 years ago

2.2.113

2 years ago

2.2.112

2 years ago

2.2.111

2 years ago

2.2.110

2 years ago

2.2.115

2 years ago

2.2.114

2 years ago

2.2.109

2 years ago

2.2.108

2 years ago

2.2.107

2 years ago

2.2.106

2 years ago

2.2.105

2 years ago

2.2.99

2 years ago

2.2.97

2 years ago

2.2.98

2 years ago

2.2.102

2 years ago

2.2.101

2 years ago

2.2.100

2 years ago

2.2.104

2 years ago

2.2.103

2 years ago

2.2.59

3 years ago

2.2.55

3 years ago

2.2.56

3 years ago

2.2.53

3 years ago

2.2.54

3 years ago

2.2.51

3 years ago

2.2.52

3 years ago

2.2.50

3 years ago

2.2.68

2 years ago

2.2.69

2 years ago

2.2.66

2 years ago

2.2.67

2 years ago

2.2.64

2 years ago

2.2.65

2 years ago

2.2.62

3 years ago

2.2.63

2 years ago

2.2.60

3 years ago

2.2.61

3 years ago

2.2.79

2 years ago

2.2.77

2 years ago

2.2.78

2 years ago

2.2.75

2 years ago

2.2.76

2 years ago

2.2.73

2 years ago

2.2.74

2 years ago

2.2.71

2 years ago

2.2.72

2 years ago

2.2.70

2 years ago

2.2.88

2 years ago

2.2.89

2 years ago

2.2.86

2 years ago

2.2.87

2 years ago

2.2.84

2 years ago

2.2.85

2 years ago

2.2.82

2 years ago

2.2.83

2 years ago

2.2.80

2 years ago

2.2.81

2 years ago

2.2.90

2 years ago

2.2.95

2 years ago

2.2.96

2 years ago

2.2.93

2 years ago

2.2.94

2 years ago

2.2.91

2 years ago

2.2.92

2 years ago

2.2.48

3 years ago

2.2.49

3 years ago

2.2.17

3 years ago

2.2.18

3 years ago

2.2.15

3 years ago

2.2.3

3 years ago

2.2.13

3 years ago

2.2.5

3 years ago

2.2.14

3 years ago

2.2.4

3 years ago

2.2.6

3 years ago

2.2.28

3 years ago

2.2.29

3 years ago

2.2.26

3 years ago

2.2.27

3 years ago

2.2.24

3 years ago

2.2.25

3 years ago

2.2.22

3 years ago

2.2.23

3 years ago

2.2.20

3 years ago

2.2.21

3 years ago

2.2.39

3 years ago

2.2.37

3 years ago

2.2.38

3 years ago

2.2.35

3 years ago

2.2.33

3 years ago

2.2.34

3 years ago

2.2.32

3 years ago

2.2.30

3 years ago

2.2.8

3 years ago

2.2.46

3 years ago

2.2.44

3 years ago

2.2.45

3 years ago

2.2.42

3 years ago

2.2.43

3 years ago

2.2.40

3 years ago

2.2.41

3 years ago

2.2.2

4 years ago

2.2.1

4 years ago

2.2.0

4 years ago

2.1.16

5 years ago

2.1.15

5 years ago

2.1.14

5 years ago

2.1.13

5 years ago

2.1.12

5 years ago

2.1.11

5 years ago

2.1.10

5 years ago

2.1.9

5 years ago

2.1.8

5 years ago

2.1.6

5 years ago

2.1.7

5 years ago

2.1.4

5 years ago

2.1.5

5 years ago

2.1.3

6 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.10

6 years ago

2.0.9

6 years ago

2.0.8

6 years ago

2.0.7

6 years ago

2.0.6

6 years ago

2.0.5

6 years ago

2.0.4

6 years ago

2.0.3

6 years ago

2.0.2

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

2.0.0

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago