All files generators.js

100% Statements 9/9
100% Branches 0/0
100% Functions 3/3
100% Lines 8/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43    1x         1x                                   1x 1x         1x   400x   12400x       1x      
import jsc from 'jsverify'
 
const errorEntry = jsc.record({
  target: jsc.asciinestring,
  message: jsc.string,
})
 
export const makeCrudReducerBase = resourceGenerator => ({
  changes: jsc.dict(jsc.json),
  errors: jsc.array(errorEntry),
  filters: jsc.dict(jsc.asciistring),
  loading: jsc.record({
    single: jsc.bool,
    index: jsc.bool,
    update: jsc.bool,
    delete: jsc.bool,
    create: jsc.bool,
  }),
  index: jsc.array(resourceGenerator),
  metaData: jsc.record({
    page: jsc.nat,
  }),
  single: jsc.dict(resourceGenerator),
})
 
export const crudReducerBase = makeCrudReducerBase(jsc.dict(jsc.json))
export const crudReducerState = jsc.record(crudReducerBase)
 
/**
 * Generates quasi-compliant v4 UUIDs
 */
export const uuid = jsc.bless({
  generator: () =>
    'xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx'.replace(
      /[xy]/g,
      () => Math.floor(Math.random() * 16).toString(16),
    ),
})
 
export const errorResponse = jsc.record({
  errors: jsc.array(errorEntry),
})