1.3.5 • Published 7 months ago

good-cop v1.3.5

Weekly downloads
-
License
ISC
Repository
github
Last release
7 months ago
          ,   
     _.-"` `'_  _________________________________________________________
 __ '._ __{}_/       __________  ____  ____     __________  ____        /\
||||  |'--.__\      / ____/ __ \/ __ \/ __ \   / ____/ __ \/ __ \      / /
|  L.(   ^ \^      / / __/ / / / / / / / / /  / /   / / / / /_/ /     / /
\ .-' |   _'|     / /_/ / /_/ / /_/ / /_/ /  / /___/ /_/ / ____/     / /
| |   )\___/      \____/\____/\____/_____/   \____/\____/_/         / /
|  \-'`:._] _______________________________________________________/ /
\__/;      '-. ____________________________________________________\/

This library is a personal work, actually used in production apps feel free to contact me via github to collaborate or for feature request

VALIDATION LIBRARY (zod like syntax)

  • Infer typescript types
  • Generate type as string for file generation
  • Generate mongo schemas from types
  • format and validation
  • Can return a different type (ts and validation) depending of a method (create, update, delete...).
    • Eg: When using .required(), you usually want to throw an error on create but not on update
    • Also, when required, the typescript prop type in an object will be required (myProp: val instead of myProp: val) so you wont have to check for undefined before accessing the value
    • Eg2: in a mongo model, you usually want _id field to be mandatory in an object type on read but not on write

Examples

import { _, InferType } from 'good-cop/frontend'

const strDef = _.string().optional()

const objDef = _.object({ 
  string: _.string().required(), 
  enum: _.enum(
    _.number().min(0).max(100).round2(),
    _.boolean()
  ),
  arr: [_.email()],
  otherArr: _.array(_.url()).maxLength(3).required(),
  subObj: {
    subField: _.genericObject('fieldName', { date: _.date() }), // tsType: { [fieldName: string]: { date: Date } }
    regexp: _.string().regexp(/my\sregexp/),
  }
})

type Obj = InferType<typeof objDef>
/*
{
  string: string
  enum?: [ number, boolean ]
  arr?: string[]
  otherArr: string[]
  subObj?: {
    subField?: { [fieldName: string]: { date: Date } }
    regexp?: string
  }
}
*/

Mongo models

import { _, InferTypeRead, InferTypeWrite } from 'good-cop/frontend'

const _ = new Definition<{
  default: { // instead of default you can also have multiple databases
    [modelName: 'user' | 'organization']: any 
  }
}>({ 
  default: {
    user,
    organization
  } 
}).init() // the .init is necessary for the types suggestions to work best

const user = _.mongoModel(
  ['creationDate'], // those fields will be autoCreated and will appear as always defined on read method but not required in write
  {
    firstName: _.string(),
    org: _.ref('organization')
  }
)

type userWrite = InferTypeWrite<typeof user> // this is the type that may be used in a create or an update function

type userRead = InferTypeRead<typeof user> // this is the default and may be used for data outputted by the database

const organization = _.mongoModel([], { name: _.string() }})

TODOS

  • make a way for types to work with population or provide a helper
1.2.12

10 months ago

1.2.13

10 months ago

1.2.11

11 months ago

1.2.16

10 months ago

1.2.17

10 months ago

1.2.14

10 months ago

1.2.15

10 months ago

1.2.18

10 months ago

1.2.19

10 months ago

1.3.5

7 months ago

1.3.4

7 months ago

1.3.3

7 months ago

1.3.2

7 months ago

1.3.1

7 months ago

1.2.20

10 months ago

1.2.23

9 months ago

1.2.24

9 months ago

1.2.21

9 months ago

1.2.22

9 months ago

1.2.25

7 months ago

1.2.10

1 year ago

1.2.8

1 year ago

1.2.7

1 year ago

1.2.6

1 year ago

1.2.9

1 year ago

1.2.5

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

2 years ago

1.1.38

2 years ago

1.1.35

2 years ago

1.1.34

2 years ago

1.1.33

2 years ago

1.1.32

2 years ago

1.1.29

2 years ago

1.1.28

2 years ago

1.1.30

2 years ago

1.1.31

2 years ago

1.1.27

2 years ago

1.1.26

2 years ago

1.1.25

2 years ago

1.1.23

2 years ago

1.1.22

2 years ago

1.1.21

2 years ago

1.1.20

2 years ago

1.1.19

2 years ago

1.1.18

2 years ago

1.1.17

2 years ago

1.1.16

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.0.9

2 years ago

1.1.7

2 years ago

1.0.8

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.15

2 years ago

1.1.14

2 years ago

1.1.13

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.12

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago