Coder Social home page Coder Social logo

sierrasoftworks / iridium Goto Github PK

View Code? Open in Web Editor NEW
569.0 17.0 25.0 3.31 MB

A high performance MongoDB ORM for Node.js

Home Page: http://sierrasoftworks.github.io/Iridium/

License: Other

JavaScript 1.26% TypeScript 98.74%
mongodb typescript iridium nodejs orm

iridium's People

Contributors

aikoven avatar dependabot[bot] avatar fduplessisduplessis avatar klokoy avatar lookfirst avatar louy avatar notheotherben avatar pgaubatz avatar pierrickp avatar ragibhasin avatar spartan563 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

iridium's Issues

How do I get nested documents working?

User Schema/Model.

function User() {
  Iridium.Instance.apply(this, arguments);

  this.addAddress = (address) => this.address.push(address);
}
require('util').inherits(User, Iridium.Instance);

User.schema = {
  _id: false,
  username: String,
  address: [Address.schema]
};
User.collection = 'users';

Address Schema/Model

Address.schema = {
  _id: false,
  ZipCode: { $type: String, $required: true }
};
Address.onCreating = (document) => console.log('Adding a new address');
Address.collection = 'address';

I have an Object like..

{
   username: "test",
   address: [{}]
}

it does not validate the address schema, and also how do I get the address document validated & inserted with an ObjectID as part of User? (like in Mongoose)

fields is undefined

@Collection('sectors')

class Sector extends Item {

    @Property(String)
    name

}
list.insert({name: 'trololo'})
let sector = await list.get(id)
console.log(sector.name) // undefined

image

but getter and setter exist in prototype

Update with set

A support question: How do I update an element with the set operator?

Background: I am implementing an CRUD Rest service. In the update case I don't receive all fields, so I am calling update only with a subset of the existing fields. I want to avoid a findOne followed by an update and want to do this in one operation.

Whats the standard way to do this in Iridium?
Thanks for your work!

how to work with relations?

Can you please give some examples on how to work with entities relation? For 1:1, 1:m and m:m relations when all entities are in separate tables in mongodb.

ES6: Class constructor Chunk cannot be invoked without 'new'

I was trying a simple example code:

interface ChunkDocument{
    _id?: string
  name: string
}

@Index({ name: 1 })
@Collection('chunks')
class Chunk extends Instance<ChunkDocument, Chunk> implements ChunkDocument{
    @ObjectID _id: string;
  @Property(/^.+$/)
  name: string;
}

class MyDatabase extends Core {
    Chunks = new Model<ChunkDocument, Chunk>(this, Chunk);
  // Houses = new Model<HouseDocument, House>(this, House);
}


var myDb = new MyDatabase({ database: 'avalon' });
myDb.connect().then(()=>{
    console.log("Database connected");
    myDb.Chunks.find().forEach((chunk: Chunk)=>{
        console.log("===>" + chunk._id + "  " + chunk.name);
        myDb.close();
     })
}); 

and if I compile it with "target": "es6" in tsconfig.json then I got this error on runtime:

Unhandled rejection TypeError: Class constructor Chunk cannot be invoked without 'new'
    at new ModelSpecificInstance.constructor (/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelSpecificInstance.js:18:22)
    at ModelHelpers.wrapDocument (/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelHelpers.js:35:16)
    at /home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.js:316:137
    at /home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelHandlers.js:33:31
    at tryCatcher (/home/set/www/avalon/server/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/set/www/avalon/server/node_modules/bluebird/js/release/promise.js:502:31)
    at Promise._settlePromise (/home/set/www/avalon/server/node_modules/bluebird/js/release/promise.js:559:18)
    at Promise._settlePromiseCtx (/home/set/www/avalon/server/node_modules/bluebird/js/release/promise.js:596:10)
    at Async._drainQueue (/home/set/www/avalon/server/node_modules/bluebird/js/release/async.js:143:12)
    at Async._drainQueues (/home/set/www/avalon/server/node_modules/bluebird/js/release/async.js:148:10)
    at Immediate.Async.drainQueues [as _onImmediate] (/home/set/www/avalon/server/node_modules/bluebird/js/release/async.js:17:14)
    at tryOnImmediate (timers.js:543:15)
    at processImmediate [as _immediateCallback] (timers.js:523:5)

ES6 analog

this is ES6

@Index({name: 1})
@Collection('sectors')

class Sector extends Item {

    @Property(true)
    name

    @Property(true)
    texture

}

instance getters name and texture not created

@Property decorator not works???

problem creating instance

In my game I have a chunk entity which declared something like this:

export interface Chunk{
    _id?: string
    name: string
    entities: GameEntity[]
    position: Vector2
    size: Vector2
}

@Index({ name: 1 })
@Collection('chunks')
export class Chunk extends Instance<Interfaces.Chunk, Chunk> implements Interfaces.Chunk{
    @ObjectID _id: string = ''
    @Property(String) name: string = ''
    @Property(GameEntity) entities: Interfaces.GameEntity[]
    @Property(Vector2) position: Vector2 = new Vector2()
    @Property(Vector2) size: Vector2 = new Vector2()
}

Now I want to have some unit test for Chunk and for this I have to make Chunk instance. From Iridium docs

Iridium models are created with a reference to their Core (which provides the database connection) and an InstanceType which is composed of a constructor function as well as a number of static properties providing configuration information for the instance.

So I'm trying something like this

var storage = kernel.default.getNamed<Interfaces.Storage>('IService', 'Storage');
var chunk = new Model<Interfaces.Chunk, Chunk>(storage, Chunk);

and then got error

Argument of type 'Storage' is not assignable to parameter of type 'Core'.
Property 'mongoConnectAsyc' is missing in type 'Storage'.

My storage declaration is simple as this

export class Storage extends Core implements Iterfaces.Storage{
    Accounts: Model<Iterfaces.Account, Account> = new Model<Iterfaces.Account, Account>(this, Account);
    Players: Model<Iterfaces.Player, Player> = new Model<Iterfaces.Player, Player>(this, Player);
    Chunks: Model<Iterfaces.Chunk, Chunk> = new Model<Iterfaces.Chunk, Chunk>(this, Chunk);
    init(){

    }
}

why am I getting that error and what am I doing wrong?

Update a single document with the _id

I want to update a single document with

    this.model.update(_id, item);

However I receive from MongoDB

    multi update only works with $ operators

I even receive the same error when I call

    this.model.update(_id, item, { multi: false });

How would I update a single document? When the id is given why is Iridium using the multi update mode?

Thank's for your work, regards,
Christian

What is the best way to get json from the model?

Say I have the following code:

var iridium = require('iridium');

var database = new iridium({
    database: 'demo'
});

database.register('User', new iridium.Model(database, 'user', {
    firstname: String,
    lastname: String
}));

database.connect(function (err, db) {
    if (err) throw err;

    db.User.create({
        firstname: 'Billy',
        lastname: 'Bob'
    }, function (err, user) {
        if (err) throw err;

        console.log(user);
    });
});

I would like to have logged

{
"firstname": "Billy",
"lastname": "Bob"
}

What is the easiest way to achive this?

What I do see is this:

{
  "domain":null,
  "_events":{},
  "_maxListeners":10,
  "__state":{
    "model":{
      "domain":null,
      "_events":{},
      "_maxListeners":10
    },
    "original":{
      "firstname":"Billy",
      "lastname":"Bob",
      "id":"52d42300cb5902827267e69e"
    },
    "modified":{
      "firstname":"Billy",
      "lastname":"Bob", 
      "id":"52d42300cb5902827267e69e"
    }
  },
  "id":"52d42300cb5902827267e69e"
}

Support for SQL?

I was looking at orms to support postgres database and nothing seems good enough for me so I thought as iridium already has a really good model layer wouldn't it be easy to add support for SQL databases as only the serialization and row fetching part has to be implemented. Is is possible to add that feature or should a new ORM specifically be created for this purpose.

Streamline Deployment Step

At the moment deployment requires us to comment out the first line in _references.d.ts to ensure that we don't break projects which include the definition files for the same libraries. It would be very nice to have this done automatically as part of the npm publish step - possibly as a prepublish and postpublish step in package.json.

TypeScript compile error

TypeScript 1.8.10

image

image

head in index.ts

/// <reference path="../typings/node/node.d.ts" />
/// <reference path="../typings/lib.es6/lib.es6.d.ts" />
/// <reference path="../typings/socket.io/socket.io.d.ts" />
/// <reference path="../typings/mongodb/mongodb.d.ts" />
/// <reference path="../typings/lodash/lodash.d.ts" />
/// <reference path="../typings/bluebird/bluebird.d.ts" />

tsconfig.json

{
  "compilerOptions": {
    "experimentalAsyncFunctions": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "moduleResolution": "node",
    "module": "commonjs",
    "sourceMap": true,
    "target": "ES6",
    "pretty": true
  },

  "externalTranspiler": "babel",

  "files": [
    "./server/index.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

Ship .ts files on npm?

I noticed that Iridium ships the .ts files with the npm package, not just d.ts files. Is this intended?

By default typescript compiler picks up those .ts files if not properly excluded which may lead to unexpected behaviour.

Question on Update Result

I see that only the nModified or result.n is being returned on update, here

Is there a way I can get the WriteResult object itself on update? Would like to use the nUpserted property

Use native Promises?

Is is possible for you to switch to using native promises instead of bluebird since node version 4 has promises inbuilt?
Since this is breaking my typechecking like this?

Type 'Bluebird<App>' is not assignable to type 'Promise<App>'.

Not required field in Property

I have this interface:

interface IBar {
    foo?: boolean;
}

and in my model, this property schema:

...
@Property({
    bar: Boolean
})
foo: IBar;
...

How can I make foo to not be required and not get this error message:
Expected foo.bar to be a defined non-null value but got undefined instead

Add Contributor's Guide

Should detail what is necessary to get a development environment set up as well as the best practices for making changes to the library.

So far it basically entails

npm install -g gulp
git clone [email protected]/SierraSoftworks/Iridium.git
cd Iridium
npm install
gulp

at which point you'll have a terminal open which builds and runs tests whenever you make changes. You can then fire up your favourite editor (currently I'm using VS Code) and start hacking away.

Pull requests are automatically built and tested on Travis-CI and we use CodeClimate and Coveralls for coverage checking - maximum allowable decrease in coverage from a pull request is 1% (changing number of lines - but you'll need to make sure all your code is thoroughly tested).

Update Changelog

The current changelog is somewhat out of date - lacking information on the changes between 4.x and 5.x - either start from scratch for the 5.x branch or include that information.
Also, start updating the changelog whenever we make changes to the library (possibly as part of an automated step whenever we run gulp version similar to the way Aurelia does it).

High complexity in Model implementation

Although the code itself is relatively straightforward, there is a lot of stuff going on in Model. Much of the helpers and handlers have been refactored into their own files, but it might be worth investigating moving each method into its own file to help further simplify maintenance in future.

Async hooks

I believe hooks should be able to return promises. Otherwise they become useless sometimes.

Access core in hooks

Correct me if I'm wrong, but I think there's no way to access Core (and therefore any Model) from hooks.
If I want to use the instance db that I create by calling new Core(...) I'd have a circular dependency as models must be defined before Core. (I have them in separate files)

My suggested solution is to pass core as the last argument to all hooks. Like this:

interface Hooks<TDocument, TInstance, TCore> {
  onCreating? (document: TDocument, core: TCore)
}

compilation errors

I'm getting this errors why trying to compile my project that uses iridium:

/home/set/www/avalon/server/node_modules/iridium/dist/lib/BSON.d.ts(3,44): error TS1110: Type expected.                                                                                                          
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Configuration.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.                                                                           
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.                                                                                    
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(40,14): error TS1005: '=' expected.                                                                                                          
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(40,21): error TS1005: ';' expected.                                                                                                          
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(40,29): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(46,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(46,22): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(46,38): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(52,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(52,24): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(52,33): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(57,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Core.d.ts(57,17): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Cursor.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/General.d.ts(23,6): error TS1138: Parameter declaration expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/General.d.ts(23,48): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/General.d.ts(23,49): error TS1131: Property or signature expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Hooks.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Instance.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Instance.d.ts(46,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Instance.d.ts(46,22): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Instance.d.ts(159,75): error TS1110: Type expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Instance.d.ts(168,52): error TS1110: Type expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/InstanceInterface.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(61,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(61,21): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(61,57): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(67,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(67,22): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(67,59): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(75,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(75,19): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(75,48): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(87,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(87,20): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(94,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(94,18): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(104,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(104,24): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(104,33): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(120,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(120,27): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(127,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(127,19): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(132,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(132,22): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(132,39): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(132,94): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(139,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(139,24): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(146,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(146,24): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(146,32): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(146,42): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(151,14): error TS1005: '=' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(151,21): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(151,23): error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(157,11): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(157,41): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(163,20): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(164,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(165,29): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(165,59): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(172,20): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(173,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(174,36): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(175,14): error TS1005: ']' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(175,22): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(175,23): error TS1136: Property assignment expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(175,31): error TS1005: ':' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(176,7): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(176,37): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(182,18): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(182,47): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(182,48): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(182,69): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(189,11): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(189,30): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(189,59): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(189,60): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(189,81): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(196,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(197,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(198,30): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(198,59): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(198,60): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(198,81): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,11): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,28): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,66): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,95): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,96): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(206,117): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(214,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(215,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(216,28): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(216,66): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(216,95): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(216,96): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(216,117): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(222,22): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(222,51): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(222,52): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(222,80): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(229,15): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(229,34): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(229,63): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(229,64): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(229,92): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(236,23): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(237,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(238,30): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(238,59): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(238,60): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(238,88): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,15): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,32): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,70): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,99): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,100): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(246,128): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(254,23): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(255,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(256,28): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(256,66): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(256,95): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(256,96): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(256,124): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(263,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(263,41): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(263,70): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(263,71): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(263,92): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,39): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,78): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,107): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,108): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(271,129): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(278,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(278,43): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(278,74): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(278,75): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(278,98): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,41): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,80): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,111): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,112): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(286,135): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(293,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(293,41): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(293,70): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(293,71): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(293,92): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,39): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,78): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,107): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,108): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(301,129): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(308,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(308,43): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(308,74): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(308,75): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(308,98): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,41): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,80): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,111): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,112): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(316,135): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(323,22): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(324,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(325,37): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(325,57): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(325,83): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(325,84): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(325,102): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(333,22): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(334,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,37): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,55): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,94): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,120): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,121): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(335,139): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(341,20): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(341,46): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(341,47): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(341,65): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(348,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(349,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(350,30): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(350,56): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(350,57): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(350,75): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(356,21): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(356,47): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(356,48): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(356,66): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(363,22): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(364,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(365,36): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(365,62): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(365,63): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(365,81): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(373,22): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(374,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(375,37): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(375,76): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(375,102): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(375,103): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(375,121): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(376,26): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(376,56): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(376,71): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(383,30): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(383,67): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(383,93): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(383,94): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(383,112): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,30): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,65): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,98): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,124): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,125): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(391,143): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(397,28): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(397,56): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(397,57): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(397,77): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(404,19): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(404,38): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(404,65): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(404,66): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(404,85): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(411,20): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(411,57): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(411,84): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(411,85): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(411,104): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(417,26): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(417,53): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(417,54): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(417,73): error TS1005: '(' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/Model.d.ts(418,1): error TS1128: Declaration or statement expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(13,43): error TS1110: Type expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(13,48): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(14,21): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(14,27): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(14,33): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelCache.d.ts(15,1): error TS1128: Declaration or statement expected.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/ModelHandlers.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/caches/MemoryCache.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/caches/NoOpCache.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/iridium/dist/lib/middleware/Express.d.ts(1,1): error TS1084: Invalid 'reference' directive syntax.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(49,47): error TS1005: ')' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(52,16): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(52,25): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(53,14): error TS1005: ',' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(53,33): error TS1109: Expression expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(53,42): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(54,3): error TS1128: Declaration or statement expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(54,22): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(54,33): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(54,41): error TS1005: ';' expected.
/home/set/www/avalon/server/node_modules/skmatc/index.d.ts(54,43): error TS1128: Declaration or statement expected.

my set up is:

iridium: ^7.0.0-alpha.15
node: 6.2.1
tsc: 1.8.10

@types npm scope

Hi,
awesome that you are using the new @types scope typings. It makes using iridium a breeze without having to postinstall typings dependencies. 👍

Here are some additional thoughts regarding the fairly new @types scope:

  1. You should use 0.0.x notation for all @types scoped packages that are below 0.1.0 as ^ will cause unpredictable behaviour in my experience for the below 0.1.0 version range.
  2. You should not use pinned @types packages that are not designed as proper modules as this will cause conflicts when different packages in a node project rely on the same types package -> it will throw typescript errors for double definitions.

Regards
Phil

Post action hooks

Similar to onCreating, onSaving, etc. I believe there should be onCreated, onSaved, etc. hooks.

Upsert with more options

Hi, I just wondering how can I do upsert with additional atomic operations such as:

collection.findOneAndUpdate(
            { user_id: user_id},
            { $inc: { amount: value } }, // do $inc when upsert
            {
                returnOriginal: false,
                upsert: true
            }

thanks!

How to install?

How to install Iridium when using Typescript?
Help should be provided in the Readme

Advanced data type

Hi,

sorry to bother but I am struggling to find out how to use some mongodb native data type like GeoJSON, Polygon etc... I did not find out in the wiki.
It will be great to have some examples or maybe it is not possible?

Greatings

which version of node.js do I need to run the latest release?

Hello,

I am currently running node version v4.4.7 and if I run the app with iridium I get either

.../node_modules/iridium/dist/lib/Model.js:205
    get(...args) {
        ^^^

SyntaxError: Unexpected token ...
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17) 

or if I run with --harmony flag:

.../node_modules/iridium/dist/lib/Instance.js:28
    constructor(model, document, isNew = true, isPartial = false) {

So basically the rest parameter works with only if I enable harmony features, the second one does not work at all. Should I update my node.js to later versions (I kind of prefer having LTS here but can update)? Or is there a version that compiles into ES5 perhaps?

Recoursion error

RangeError: Maximum call stack size exceeded
at isDate (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:18:29)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:77:42)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)
at calculateObjectSize (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:37:22)
at calculateElement (C:\localhost\ui-js\node_modules\bson\lib\bson\parser\calculate_size.js:120:77)

if i write model.add(data) and data has recoursive props, i get error

instance properties

After I create an instance of some model I can't read it's properties directly in instance, they are in acc.document. But wen I do Model.findOne in it's callback I got a TInstance object with all properties accessible directly in this object and also in TInstance.document:

var acc = new AccountInstance(authModule.storage.Accounts, {
    login: 'testUser'
});
console.log(acc.login);  // undefined
console.log(acc.document.login);  // 'testUser'
authModule.storage.Accounts.findOne().then((acc)=>{
    console.log(acc.login);  // 'testUser'
    console.log(acc.document.login);  // 'testUser'
    done();
});

Is this a bug or am I missing something? Is it possible to always have all properties in TInstance's root?

Lazy Loading.

Is there a way, to define create models without an active DB connection?

Something like how mongoose does?

Documentation for v5 is sparse

The documentation for the latest version of Iridium (v5.x) is terribly sparse compared to the documentation which was available for 4.x and earlier. Ideally it should be rewritten to the same standard but it would be even nicer if we could get an automated documentation generation tool going which pulled the information out of the code (which has most of the public API documented rather significantly).

See the nice-docs branch for attempts at getting that to work...

Multiple Host Support

MongoDB's driver includes support for multiple redundant hosts should one go down. It would be nice if Iridium included support for this.

A backwards compatible API could support receiving an array of existing configuration objects when instantiating an Iridium Core.

var iridium = require('iridium');

var database = new iridium({
    host: ['host1', 'host2', 'host3'],
    database: 'demo'
});

Core.connect is not async-safe

If connect is called multiple times prior to completing then the corresponding number of database connections will be opened, the last to open winning out as the current connection.

This should change to ensure that only one connection may be opened at a time, subsequent requests to connect returning a promise for the first connection.

How to populate Instance?

I have User Instance class:

class User extends Instance {
    @Property(true)
    name:string

    @Property([User])
    friends:User[]
}

when i add user to friend list to another user, and try to save:

    firstUser.friends.push(newUser)
    firstUser.save() //error

I get recursion error:

image

P.S. of course firstUser !== newUser and they have different ids

Format of Modified different from Original

_original:
 { _id: 5672568cf23db0741194b0a5,
   email: '[email protected]',
   username: 'test',
   users: [ [Object] ] },
_modified:
 { _id: { _bsontype: 'ObjectID', id: 'VrV?ò=°t\u0011?°¥' },
   email: '[email protected]',
   username: 'test',
   users: [ [Object] ] }

Why don't I get the '5672568cf23db0741194b0a5' as a MongoDB.ObjectID type in _modified, this effects "toJSON()" as well, I don't get the ObjectID as type ObjectID ("5672568cf23db0741194b0a5")

In the Iridium present ideological error

I write Iridium alternative, and I realized that something =)
In the Iridium present ideological error:

ORM is:

class User extends Model {
  this.name // document field
  sayName(){ alert(this.name) } // model method
  statiс insert(){} // collection method
  statiс update(){} // collection method
}

and

let user = await User.add({name:ololo})
user.sayName()

No need class UserS just a User =)

transforms:

class User {

  // from db document
  constructor(document){
    this.name = document.name
    this.date = new Date(document.date)
  }

  // to db document (call before save model in db)
  toDocument(){
    return {name: this.name, date: this.date.toString()}
  }

}

at least I do this ^ _ ^

Thus, javascript OOP, transparently reflected in the database.
What do you think about this?

Optional JSON field

I am not sure if this is a support question. Do you monitor Stackoverflow for future support requests?
What I want is to store an optional JSON in a document. The structure of the JSON is unknown.

@Property(String)
public field: string;

did not work since the data is optional. I received a

Expected field to be a defined non-null value but got undefined instead

The next thing I tried was

@Property({ asType: String, required: false })
public field: String;

However I still receive the error message above.

So I have two questions:

  • how would I model an optional field
  • what is the best data type to store JSON (in my case I chose string)

Kind regards, Christian

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.