1.3.5 • Published 4 months ago

good-cop v1.3.5

Weekly downloads
-
License
ISC
Repository
github
Last release
4 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

7 months ago

1.2.13

7 months ago

1.2.11

8 months ago

1.2.16

7 months ago

1.2.17

6 months ago

1.2.14

7 months ago

1.2.15

7 months ago

1.2.18

6 months ago

1.2.19

6 months ago

1.3.5

4 months ago

1.3.4

4 months ago

1.3.3

4 months ago

1.3.2

4 months ago

1.3.1

4 months ago

1.2.20

6 months ago

1.2.23

6 months ago

1.2.24

5 months ago

1.2.21

6 months ago

1.2.22

6 months ago

1.2.25

4 months ago

1.2.10

10 months 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

1 year ago

1.1.38

1 year ago

1.1.35

1 year ago

1.1.34

1 year ago

1.1.33

1 year ago

1.1.32

1 year ago

1.1.29

1 year ago

1.1.28

1 year ago

1.1.30

1 year ago

1.1.31

1 year ago

1.1.27

1 year ago

1.1.26

1 year ago

1.1.25

1 year ago

1.1.23

1 year ago

1.1.22

1 year ago

1.1.21

1 year ago

1.1.20

1 year ago

1.1.19

1 year ago

1.1.18

1 year ago

1.1.17

1 year ago

1.1.16

1 year 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