Skip to content

Repository files navigation

fakeStoreJs 🚧 Build Statusinstall sizeLanguage grade: JavaScriptdevDependencies Status

fakeStoreJs make mocking easy, quickly create a CRUD access to any object

  • Create multiple store in less than a heartbeat ! ♥️
  • Come with a unique id attribution ! 💥
  • Extends CRUD method using resolvers ! 🔓
  • Persistent data ! 🆕
  • Easy to use ! 🔥

If something doesn’t work, please file an issue 🐛.

QuickStart 🚀

Install

$ npm install fakestorejs or yarn install fakestorejs

Use it Now !

Start importing createStore from fakeStoreJs.

constcreateStore=require('fakestorejs');

Create a store from any object.

conststore=createStore({book: {data: [{title: 'Speaking JavaScript',author: 'Dr. Axel Raushmayer'},{title: 'Effective JavaScript',author: 'David Herman'},{title: 'Eloquent Javascript',author: 'Marijin Haverbeke'},{title: 'You-Dont-Know-JS',author: 'Kyle Simpson'}]}});

🎉 Start using it 🎉

store.book.get();// { sucess: true, data: [ { uid: "000000" author: "Speaking JavaScript", title: "Dr. Axel Raushmayer" }, ...] }

Usage

Requirements

fakeStoreJs need an object with at least on key. Each key represent a collection name (or table name) and they must provide an array of data or a schema, look at the example below.

conststore=createStore({dragon: {data: [],// can be empty or fill with any objectschema: functionDragon(){},// deprecated use of anonymous functionoptions: {useSchema: true}// Must be specified or it will create a schema from the data given see next example (schemaless)}});

Or

conststore=createStore({dragon: {data: [{name: 'Frizzly',type: 'Ice'}]// Must have at least one object inside the data field}});

Let's now have a deeper look at what are schema.

Schema

A schema is the 'constructor' used by fakestorejs to create new object.

Example : You want to create a store of users, each user should have a username build from its lastname and firstname, you need to specified it :

conststore=createStore({user: {data: [],schema: functionUser({ firstname, lastname }){this.firstname=firstname;this.lastname=lastname;this.username=`${firstname[0]}.${${lastname}}`// Usualy schema are used to create 'calculated' properties otherwise use fakeStoreJs schemaless strategy},options: {useSchema: true}}});

Schemaless strategy

Most of the time when mocking data you don't need complexity properties like in the schema model, this is the schemaless fakeStoreJs strategy.

conststore=createStore({user: {data: [{firstname: 'David',lastname: 'Herman'}]// fakeStoreJs will automatically create a schema that take every key from your first object inside your data array}});

Methods

fakeStoreJs comes with embedded crud like method : However you can override them and or create new one using resolvers !

MethodParameterssucesserror
post()obj: Object{ sucess: Boolean, data: Object }{ sucess: Boolean, error: String }
get()None{ sucess: Boolean, data: Object }{ sucess: Boolean, error: String }
put()uid: String, obj: Object{ sucess: Boolean, data: Object }{ sucess: Boolean, error: String }
delete()uid: String{ sucess: Boolean}{ sucess: Boolean, error: String }

FakeStoreJs will add a unique identifier(uid) for each item.

Resolvers

Resolvers allow custom methods by adding a key inside your object call resolvers :

conststore=createStore({book: {data: [{title: 'Speaking JavaScript',author: 'Dr. Axel Raushmayer'},{title: 'Effective JavaScript',author: 'David Herman'},{title: 'Eloquent Javascript',author: 'Marijin Haverbeke'},{title: 'You-Dont-Know-JS',author: 'Kyle Simpson'}],resolvers: {// Add your own methods !!getById: function(uid){// do not use arrow functionconstitem=this.collection.find(item=>item.uid===uid);returnitem
? {sucess: true,data: item}
: {sucess: false,error: 'couldnt match the uid'};},multiplePost: function(arrayOfObj){leterror=false;constcollectionPreviousState=this.collection;for(let[i,obj]ofarrayOfObj.entries()){try{obj=this.Book(obj);// use of the schema context, 'collection': book with 'schema': Bookthis.collection=[...this.collection,obj];}catch(e){error={sucess: false,error: e};break;}arrayOfObj[i]=obj;}if(error){this.collection=collectionPreviousState;returnerror;}elsereturn{sucess: true,data: arrayOfObj};}}}});

fakeStoreJs bind the resolvers with a neat context : { collection: Array, schema: Function } where :

  • collection is the table from your store(database).
  • schema is your schema from the createStore().

Nb: schema will always be your collection name capitalized.

example: book schema will be Book

Options

It is possible to add options to fakeStoreJs using the key : options :

conststore=createStore({book: {data: [{title: 'Speaking JavaScript',author: 'Dr. Axel Raushmayer'},{title: 'Effective JavaScript',author: 'David Herman'},{title: 'Eloquent Javascript',author: 'Marijin Haverbeke'},{title: 'You-Dont-Know-JS',author: 'Kyle Simpson'}],schema: functionBook({ author, title }){this.author=author;this.title=title;},options: {idLabel: 'id',useSchema: true}}});
MethodTypeinformationsDefault
idLabelStringUse as 'key name' for the generate identifier'uid'
useSchemaBooleanSwitch beetween embedded schema constructor or your own schemafalse
isPersistentBooleanKeep the data even after a restartfalse
isDataDeletableBooleanDelete the initial data from the data fieldfalse

Contributing

This project welcome any new contribution.

About

FakeStoreJs is a javascript library, quickly create a CRUD acess to any object

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages