dataless

0.0.3 • Public • Published

dataless

A javascript ORM with multiple adapters that aims to provide data access in browsers.


Features

  • Support multiple databases adapter
    • REST adapter
    • Local In-Memory adapter (WIP)
  • Entity abstraction layer with basic query operations
  • Support model definition
    • Basic definition
      • Define table
      • Primary Key
      • Date fields
      • Field to type casting
    • Basic Create / Read / Update / Delete operations
    • Model event hooks
    • Getter and Setter mutators
    • Define model relationships
      • BelongsTo
      • HasMany
      • HasOne
      • BelongsToMany
    • Perform advanced query on a relationship on a model
    • Eager load relationships
    • Call remote functions defined on remote entity (rest endpoint or db functions)
  • DOCS D:

Code example

// first import needed classes
import {DatabaseManager, Model} from 'dataless'
 
// configure your connection
DatabaseManager.addConnection('default', {
    driver: 'url',
    database: 'http://localhost:100/api/v1/'
});
DatabaseManager.addConnection('memory', {
    driver: 'memory'
});
 
// define your model
class User extends Model{
    // provide a table
    _table = 'auth/users';
 
    // a mutator
    getFullnameAttribute(){
        return this._attributes['name'] + ' ' + this._attributes['surname'];
    }
}
 
// define your model
class Profile extends Model{
    // provide a table
    _table = 'auth/profiles';
 
    // provide a connection
    _connection = 'default';
 
    // setup a relation
    founder(){
        return this.belongsTo('founder', User);
    }
}
 
// Another model in memory store
class Setting extends Model{
    _table = 'settings';
    _connection = 'memory';
}
 
// the app function will be executed once the db is ready
async function app(){ 
    // search profiles
    var theProfile = await Profile.query().with('founder').select('id', 'name', 'founder_id').find(4);
    var profiles = await Profile.query().with('founder').orderBy('id','DESC').where('logo', '=', null).limit(10).get();
    console.log(theProfile, profiles);
    console.log('Profile #4 is funded by ' + theProfile.get('founder').get('fullname'));
 
    // create a new record with some data
    var profile = new Profile();
    profile.set('name', 'Matt');
    profile.set('surname', 'Smith');
    await profile.save();
    
    // update it
    profile.set('nickname', '"The Doctor"');
    await profile.save();
    
    // access it
    console.log('Hello, my name is ' + profile.get('name') + ' ' + profile.get('surname') + ', also named '+ profile.get('nickname'));
    
    // destroy it
    await profile.destroy();
    
    // create a new record in the memory connection
    var setting = new Setting();
    setting.set('value', true);
    setting.set('name', 'fullscreen');
    await setting.save();
    
    // dump the memory store
    console.log('Memory store dump:', DatabaseManager.connection('memory').toObject());
}
 
// connect all the db and let it fly! :D
Promise.all([DatabaseManager.connect(), DatabaseManager.connect('memory')]).then(app, function(err){ console.log(err); });

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.0.3
    1
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.0.3
    1
  • 0.0.2
    0
  • 0.0.1
    0

Package Sidebar

Install

npm i dataless

Weekly Downloads

1

Version

0.0.3

License

MIT

Last publish

Collaborators

  • koderslab