Giter VIP home page Giter VIP logo

forgjs's Introduction

Hello world noframework

This is an empty project to start with noframework

Getting started:

Dev:

  1. git clone https://github.com/oussamahamdaoui/start-noframework.git
  2. npm i
  3. npm run watch

Build:

npm run build

forgjs's People

Contributors

benjaminvanryseghem avatar dependabot[bot] avatar jason-cooke avatar jayjamesjay avatar l1wulf avatar lucianbuzzo avatar mecm1993 avatar morpheus7cs avatar muturgan avatar netshade avatar nevoss avatar oussamahamdaoui avatar robpethick avatar xx-nf-xx avatar yoda6 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

forgjs's Issues

Error message as fucntions

Hey, I did a quick scan for the repo and I like what I see, I have written a Form library and I was seeking for some package like this one to fill out the validation part (didn't find something that I like so I write some light validation class inside my library). so I thinking about using this library,

some feature that I think will be great is to set the error message as a function for example:

const createMinIntRule = (num) => {
 return new Rule(
   { type: 'integer', min: num }, 
   (key, value) => `${key} must be greater then ${num}, ${value} is not enough` 
  )
}

and then you can create more reusability in your rules, let me know what do you think about it, I will love to make a pull request with implementation,

of course there that the option of a string as an error message will be still working.

changing the order of the rule properties causes an error

const { Validator, Rule } = require('@cesium133/forgjs');


// test: use type at the start -- this will works
let validator = new Validator({
    name: new Rule({ type: 'string', optional: false, notEmpty: true, minLength: 1 }),
    description: new Rule({ type: 'string', optional: true }),
    done: new Rule({ type: 'boolean', optional: true })
});
validator.test({ description: 'Just with description.' }); // return false


// test: use type at the end -- this will throw an Error
validator = new Validator({
    name: new Rule({ optional: false, notEmpty: true, minLength: 1, type: 'string' }),
    description: new Rule({ type: 'string', optional: true }),
    done: new Rule({ type: 'boolean', optional: true })
});

validator.test({ description: 'Just with description.' }); // this throw an Error

Type boolean?

This might be a stupid question, but how can I add a boolean rule in a validator?

in other words, if I have an object {a:1, b:true} I can test for a to be an integer, but how do I test for b to be a boolean?

Support for validating Nested Objects

Hey there. Loved the repo! I had a question though. How do you support nested Objects. Just for an example, if we have a object like

{ name: { first_name: 'John', last_name: 'Doe' }, address: { city: 'Mumbai', country: 'India' } }

How do we go about validating this?

throw errors

imagine
I want to validate any data, and show any message to user on error
so I must to do somethink like:

const result = prettyValidator.test(data);

if (!result) {
   const errors = prettyValidator.getErrors(data);
   procassErrors(errors); // in my case -> res.status(422).send(errors);
   return;
}

go on...

so I must to go through this cycle twice on error. and my data can contains lot of fields.

well, i can do this:

const errors= prettyValidator.getErrors(data);

if (errors.length > 0) {
   res.status(422).send(errors);
   return;
}

go on...

these performance is better, but the syntax is not semantic - looks like I expect an error.
and the result is not semantic - I expect an empty array on success

I recommend you to generate the errorArray in the test method too, but return true on success and throw errorArray on error.

this will allow to use try/catch and write more clean code

Typos in readme

Error handeling -> Error handling

Left TO DO for next relese -> Left TO DO for next release

example in README fails due to typos

Hello
there are a few mistakes in the example on README, I found the following - please see below the corrected code.

  1. the object passed to the Validator included 'pasword' instead of 'password'
  2. the email was set to 'my-email' not 'dedede' which made the test fail

Corrected code:

const { Validator, Rule } = require('@cesium133/forgjs');

const emailRule = new Rule({
    type: 'email',
    user: user => user === 'dedede',
    domain: domain => ['outlook', 'gmail', 'yahoo'].indexOf(domain) !== -1,
}, null);

const passwordRule = new Rule({
    type: 'password',
    minLength: 8,
    uppercase: 1,
    numbers: 1,
    matchesOneOf: ['@', '_', '-', '.', '!'],
}, null);

const vComplexe = new Validator({
    age: new Rule({ type: 'int', min: 18, max: 99 }),
    dateOfBirth: new Rule({ type: 'date' }),
    array: new Rule({ type: 'array', of: new Rule({ type: 'string' }) }),
    email: emailRule,
    password: passwordRule
});

vComplexe.test({
    age: 26,
    dateOfBirth: new Date(1995, 10, 3),
    array: ['1'],
    email: '[email protected];',
    password: 'ad1_A@@Axs',
}); /// returns true

Incorrect error message returned on nested array rules

Example

    const validator = new Validator({
        users: new Rule({
            type: "array",
            of: new Rule({type: "int", oneOf: [2, 3, 4, 5]}, "User ID does not exist")
        }, "Users' ID not provided"),
    });


validator.getErrors([2,4,7,10])  // returns Users' ID not provided

The equal value of rule

The doc says type string has a equal check, which value should be int. But the code actually checks if the string value is exactly equal to the parameter.
screen shot 2018-12-16 at 11 07 02 am

Validating a null property will cause an error

Validating a null property will cause an error, e.g.:

const { Validator, Rule } = require('@cesium133/forgjs');


let validator = new Validator({
    name: new Rule({ type: 'string', optional: false, notEmpty: true, minLength: 1 }),
});

// this will works
validator.test({ name: 'ok' }); // return true


// this will throw an exception
validator.test({ name: null }); // this throw an Error

Validating an undefined property will cause an error

Validating an undefined property will cause an error, e.g.:

const { Validator, Rule } = require('@cesium133/forgjs');


let validator = new Validator({
    name: new Rule({ type: 'string', optional: false, notEmpty: true, minLength: 1 }),
});

// this will works
validator.test({ name: 'ok' }); // return true


// this will throw an exception
validator.test({ name: null }); // this throw an Error

(I'm using @cesium133/forgjs version "1.1.9)

allowed fields

this package is awesome. thnk you!

suggestion for the functionality extands.

it will be very usefull to check required and allowed keys in anobject

Duplicate error messages when check for multiple types.

Example:

const { Validator, Rule } = require('@cesium133/forgjs');

const validator = new Validator({
  value: new Rule(
    {
      type: 'int|float',
      min: 1
    },
    'Error message'
  ),
});

validator.getErrors({
  value: 0,
});  // [ 'Error message', 'Error message' ]

One rule, one custom error message, but multiple errors in array.

I was trying to fix it and send a PR, but it seems like you have unfinished or undocumented work there.

errorMessages is empty array when validation fails due to unexpected field

Example:

const event = new Validator({
  employeeId: new Rule({ type: 'string' }),
  duration: new Rule({ type: 'int' })
})

event.test({
	employeeId: '123',
	duration: 10,
	shouldNotBeHere: true
})

// returns false, this is OK

events.getErrors({
	employeeId: '123',
	duration: 10,
	shouldNotBeHere: true
})

// returns [], this is not OK I think, should return at least [undefined] or even better: ['Unknown property found: "shouldNotBeThere"']

Optional property to support "empty" values

Hi! I have the following example:

// value is one of "", "ABCD1234"
const discountCode = new Rule({
  type: 'string',
  match: /^[A-Z0-9]$/,
  optional: true,
  minLength: 8,
  maxLength: 8
}).test(value)

Setting the optional property does not work here right now, because it requires the value to be either undefined or something that matches the Rule. I was curious if there is a possibility to state somewhere that "" should be also acceptable? I could do either value = "" || ... or

Rule({
  type: 'string',
  match: /^$|^[A-Z0-9]{8}$/
})

, just curious if there is a cleaner way?

Validator.getErrors()

Validator.getErrors() methods returns a function definition for me and not a string.

Suggestions

Hey every one, If you have suggestions or ideas to improuve the code please feel free to let a comment here.
Rulles:

1 Please use this template wich will help developers to test and better understend your request:

const someRule= new Rule({
    type: 'yourType',
    prop1: val1,
    prop2: val2, ...
  }, null);

  someRule.test(validValue) // returns true
  someRule.test(invalidValue) // returns false

2 Please if you think a comment is a good feature to be added like the coment insted of creating a new one.

3 Before submitting a new comment check if the same comment is not allready present

4 If you submit a PR (pull request) and you only change the Readme plese add [ci skip] to your commit message

5 If you have any questions ask them in the FAQ

6 Please have fun, and if you feel like not following the rulles then don't follow them

code with love ❤️

create-react-app + forgJS

Hi there,
I'm trying to use forgJS with create-react-app but unfortunately it raise the error:

1!] Error: 'Rule' is not exported by node_modules/@cesium133/forgjs/index.js

this is how I used:

import * as React from 'react';
import { Rule } from '@cesium133/forgjs';
import styles from './styles.css';

const ExampleComponent = ({ text }: any) => {
  const floatRule = new Rule(
    {
      type: 'float',
      min: 100,
    },
    null
  );
  const result = floatRule.test(200.3);
  console.log(result);

  return <div className={styles.test}>Example Component: {text}</div>;
};

export default ExampleComponent;

To have a working example is enough to do:
npx create-react-library
and then install the package forgJs.

Can someone help me on that please?

Validator.getErrors() throws an error on undefined fields

Example:

const validator = new Validator({
  str: new Rule(
    { type: 'string' },
    'Error message'
  )
});

validator.getErrors({
  str: undefined,
}); // Error thrown: Cannot read property 'constructor' of undefined

Expected behavior: [ 'Error message' ]

P.S. null and undefined have no constructor in JS

Repo Improvements

Hi, I saw a reddit post asking for improvement suggestions in this repo. Here goes:

  1. Use Rultor for automating merge/deploy/release operations.
  2. Use Puzzle Driven Development and 0pdd for task management.

If it sounds interesting and want more details, feel free to ask, I'll be glad to help.

Have fun!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.