Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion components/persistor/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
export {Persistable, ContainsPersistable, Persistor} from './lib/persistable';
export {Supertype} from '@haventech/supertype';
export { Schema } from './lib/types/Schema';

export function property(props?: Object);
export function supertypeClass(target?: any);
4 changes: 3 additions & 1 deletion components/persistor/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
module.exports = require('./lib/index.js')
import * as index from './lib/index.js';
export default index.default;
export * from './lib/index.js';
19 changes: 11 additions & 8 deletions components/persistor/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,20 @@
*
*/

import { PersistorTransaction, RemoteDocConnectionOptions } from './types';
import { PersistorTransaction, RemoteDocConnectionOptions } from './types/index.js';
import * as supertypeRequire from '@haventech/supertype';
import Promise from 'bluebird';
// const {Promise} = bluebirdModule;
import * as _ from 'underscore';
import * as knexModule from 'knex';
const {knex }= knexModule;

module.exports = function (PersistObjectTemplate, baseClassForPersist) {


export default function (PersistObjectTemplate, baseClassForPersist) {
const moduleName = `persistor/lib/api`;
let supertypeRequire = require('@haventech/supertype');
let statsDHelper = supertypeRequire.StatsdHelper;

var Promise = require('bluebird');
var _ = require('underscore');

function getTime() {
return process.hrtime();
}
Expand Down Expand Up @@ -1280,7 +1284,7 @@ module.exports = function (PersistObjectTemplate, baseClassForPersist) {
PersistObjectTemplate.getPOJOFromMongoQuery(template, query, options, logger) :
PersistObjectTemplate.getPOJOsFromKnexQuery(template, [], query, options, undefined, logger).then(function (pojos) {
pojos.forEach(function (pojo) {
_.map(pojo, function (_val, prop) {
_.map(pojo, function (_val, prop: any) {
if (prop.match(RegExp('^' + prefix + '___'))) {
pojo[prop.replace(RegExp('^' + prefix + '___'), '')] = pojo[prop];
delete pojo[prop];
Expand Down Expand Up @@ -1354,7 +1358,6 @@ module.exports = function (PersistObjectTemplate, baseClassForPersist) {
* @returns {*}
*/
PersistObjectTemplate.connect = function (config, schema) {
var knex = require('knex');
var connection = knex(config);
this.setDB(connection, this.DB_Knex, config.client);
this.setRemoteDocConnection(config);
Expand Down
59 changes: 36 additions & 23 deletions components/persistor/lib/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,19 @@
*/
var nextId = 1;
var objectTemplate;
var supertype = require('@haventech/supertype');

module.exports = function (_ObjectTemplate, _RemoteObjectTemplate, baseClassForPersist) { //@TODO: Why is ObjectTemplate and RemoteObjectTemplate here?
import * as supertype from '@haventech/supertype';
import api from './api.js';
import schema from './schema.js';
import util from './util.js';
import mongoQuery from './mongo/query.js';
import mongoUpdate from './mongo/update.js';
import mongoDB from './mongo/db.js';
import knexQuery from './knex/query.js';
import knexUpdate from './knex/update.js';
import knexDB from './knex/db.js';
export { Schema } from './types/Schema.js';

export default function persist(_ObjectTemplate, _RemoteObjectTemplate, baseClassForPersist) { //@TODO: Why is ObjectTemplate and RemoteObjectTemplate here?
var PersistObjectTemplate = baseClassForPersist._createObject();

PersistObjectTemplate.__id__ = nextId++;
Expand All @@ -63,42 +73,44 @@ module.exports = function (_ObjectTemplate, _RemoteObjectTemplate, baseClassForP
PersistObjectTemplate.dirtyObjects = {};
PersistObjectTemplate.savedObjects = {};

require('./api.js')(PersistObjectTemplate, baseClassForPersist);
require('./schema.js')(PersistObjectTemplate);
require('./util.js')(PersistObjectTemplate);
require('./mongo/query.js')(PersistObjectTemplate);
require('./mongo/update.js')(PersistObjectTemplate);
require('./mongo/db.js')(PersistObjectTemplate);
require('./knex/query.js')(PersistObjectTemplate);
require('./knex/update.js')(PersistObjectTemplate);
require('./knex/db.js')(PersistObjectTemplate);
api(PersistObjectTemplate, baseClassForPersist);
schema(PersistObjectTemplate);
util(PersistObjectTemplate);
mongoQuery(PersistObjectTemplate);
mongoUpdate(PersistObjectTemplate);
mongoDB(PersistObjectTemplate);
knexQuery(PersistObjectTemplate);
knexUpdate(PersistObjectTemplate);
knexDB(PersistObjectTemplate);

objectTemplate = PersistObjectTemplate;

return PersistObjectTemplate;
}

module.exports.supertypeClass = function (target) {
export function supertypeClass(target) {
if (!objectTemplate) {
throw new Error('Please create PersisObjectTemplate before importing templates');
}
return supertype.supertypeClass(target, objectTemplate)
};
module.exports.Supertype = function () {
export function Supertype() {
if (!objectTemplate) {
throw new Error('Please create PersisObjectTemplate before importing templates');
}
return Reflect.construct( supertype.Supertype, [objectTemplate], this.constructor );
};
module.exports.Supertype.prototype = supertype.Supertype.prototype;
module.exports.property = function (props) {
Supertype.prototype = supertype.Supertype.prototype;

export function property(props) {
if (!objectTemplate) {
throw new Error('Please create PersisObjectTemplate before importing templates');
}
return supertype.property(props, objectTemplate);
return supertype.property(props);
}

var __extends = (this && this.__extends) || (function () {
// will need to come back here unblocked for now by removing this.
var __extends = (__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
Expand All @@ -110,7 +122,7 @@ var __extends = (this && this.__extends) || (function () {
})();


module.exports.Persistable = function (Base) {
export function Persistable(Base) {
return (function (_super) {
__extends(class_1, _super);
function class_1() {
Expand All @@ -121,12 +133,13 @@ module.exports.Persistable = function (Base) {
}

let ObjectTemplate = supertype.default;
module.exports.Persistor = {
create: function () {return module.exports(ObjectTemplate, null, ObjectTemplate)}
export const Persistor = {
create: function () {return persist(ObjectTemplate, null, ObjectTemplate)}
}

Object.defineProperty(module.exports.Persistable.prototype, 'persistor', {get: function () {
Object.defineProperty(Persistable.prototype, 'persistor', {get: function () {
return this.__objectTemplate__
}});

module.exports.Schema = require('./types/Schema')
// export Schema
// export default indexTemplate;
26 changes: 14 additions & 12 deletions components/persistor/lib/knex/db.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import {RemoteDocService} from "../remote-doc/RemoteDocService";
import {RemoteDocService} from "../remote-doc/RemoteDocService.js";
import bluebirdModule from 'bluebird';
const {Promise} = bluebirdModule;
import * as _ from 'underscore';

module.exports = function (PersistObjectTemplate) {
export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/knex/db`;
var Promise = require('bluebird');
var _ = require('underscore');


var processedList = [];
/**
Expand Down Expand Up @@ -297,7 +299,7 @@ module.exports = function (PersistObjectTemplate) {
}
var foreignKey = template.__schema__.children[property].id;
var goodList = [];
_.each(obj[property], function(o) {
_.each(obj[property], function(o: any) {
if (o._id)
goodList.push(o._id);
});
Expand Down Expand Up @@ -541,7 +543,7 @@ module.exports = function (PersistObjectTemplate) {
if (!callBack) return;
if (typeof callBack !== 'function')
throw new Error('persistor can only notify the field changes through a callback');
var fieldsChanged = _.reduce(_newFields, function(current, field, key) {
var fieldsChanged = _.reduce(_newFields, function(current, field: any, key) {
return field.type !== Array ? current + ',' + key : current;
}, '');

Expand Down Expand Up @@ -673,7 +675,7 @@ module.exports = function (PersistObjectTemplate) {
function processValues(template) {
var defineProperty = template.defineProperties ? template.defineProperties[prop] : null;
if (defineProperty && defineProperty.values)
_.each(defineProperty.values, function (val, key) {values[(defineProperty.values instanceof Array ? val : key)] = true;});
_.each(defineProperty.values, function (val, key) {values[(defineProperty.values instanceof Array ? val : key)as any] = true;});
if (template.__children__)
_.each(template.__children__, processValues);
}
Expand Down Expand Up @@ -839,7 +841,7 @@ module.exports = function (PersistObjectTemplate) {
};

var generateChanges = function (localtemplate, _value) {
return _.reduce(localtemplate.__children__, function (_curr, o) {
return _.reduce(localtemplate.__children__, function (_curr, o: any) {
return Promise.resolve()
.then(loadTableDef.bind(this, _dbschema, o.__name__))
.spread(diffTable)
Expand All @@ -848,11 +850,11 @@ module.exports = function (PersistObjectTemplate) {
};

var getFilteredTarget = function(src, target) {
return _.filter(target, function(o, _filterkey) {
return _.filter(target, function(o: any, _filterkey) {
var currName = _.reduce(o.def.columns, function (name, col) {
return name + '_' + col;
}, 'idx_' + tableName);
return !_.find(src, function(cached) {
return !_.find(src, function(cached: any) {
var cachedName = _.reduce(cached.def.columns, function (name, col) {
return name + '_' + col;
}, 'idx_' + tableName);
Expand All @@ -865,7 +867,7 @@ module.exports = function (PersistObjectTemplate) {
var dbChanges = {add: [], change: [], delete: []};
_.map(dbChanges, function(_object, key) {
_.each(_changes, function(change) {
var uniqChanges = _.uniq(change[key], function(o) {
var uniqChanges = _.uniq(change[key], function(o: any) {
return o.name;
});
var filtered = getFilteredTarget(dbChanges[key], uniqChanges);
Expand Down Expand Up @@ -1393,7 +1395,7 @@ module.exports = function (PersistObjectTemplate) {
activity: 'commit'
}
});
var knex = _.findWhere(this._db, {type: PersistObjectTemplate.DB_Knex}).connection;
var knex = (_.findWhere(this._db, {type: PersistObjectTemplate.DB_Knex})as any).connection;
var dirtyObjects = persistorTransaction.dirtyObjects;
var touchObjects = persistorTransaction.touchObjects;
var savedObjects = persistorTransaction.savedObjects;
Expand Down
20 changes: 10 additions & 10 deletions components/persistor/lib/knex/query.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { RemoteDocService } from '../remote-doc/RemoteDocService';
import { PersistorUtils } from '../utils/PersistorUtils';
import { RemoteDocService } from '../remote-doc/RemoteDocService.js';
import { PersistorUtils } from '../utils/PersistorUtils.js';
import bluebirdModule from 'bluebird';
const {Promise} = bluebirdModule;
import * as _ from 'underscore';

module.exports = function (PersistObjectTemplate) {
export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/knex/query`;
var Promise = require('bluebird');
var _ = require('underscore');

PersistObjectTemplate.concurrency = 10;

PersistObjectTemplate.getFromPersistWithKnexId = function (template, id, cascade, isTransient, idMap, isRefresh, logger, enableChangeTracking, projection) {
Expand Down Expand Up @@ -130,7 +130,7 @@ module.exports = function (PersistObjectTemplate) {
function processRequests() {
var segLength = requests.length;
//console.log("Processing " + segLength + " promises " + PersistObjectTemplate.concurrency);
return Promise.map(requests, function (request, _ix) {
return Promise.map(requests, function (request: any, _ix) {
return request();
}, {concurrency: PersistObjectTemplate.concurrency})
.then(function () {
Expand Down Expand Up @@ -420,7 +420,7 @@ module.exports = function (PersistObjectTemplate) {
}
function buildFilterQuery(query, foreignFilterKey, foreignFilterValue, alternateProps) {
if (alternateProps) {
query['$or'] = _.map(alternateProps, function(prop) {
query['$or'] = _.map(alternateProps, function(prop: any) {
var condition = {}
condition[prop.foreignFilterKey] = prop.foreignFilterValue;
return condition;
Expand Down Expand Up @@ -462,7 +462,7 @@ module.exports = function (PersistObjectTemplate) {
var closureType = defineProperty.type;
var closureDefineProperty = defineProperty;

var join = _.find(joins, function (j) {return j.prop == prop});
var join = _.find(joins, function (j) {return j.prop == prop}) as any;

requests.push(generateQueryRequest.bind(this, join, query, closureProp,
closurePersistorProp, closureCascade, closureForeignId, closureType, closureDefineProperty));
Expand Down Expand Up @@ -530,7 +530,7 @@ module.exports = function (PersistObjectTemplate) {
return obj[foreignFilterKey] == foreignFilterValue;
});
if (alternateProps)
_.each(alternateProps, function(alternateProp, alternatePropKey) {
_.each(alternateProps, function(alternateProp: any, alternatePropKey) {
obj[alternatePropKey] = _.filter(objs, function (obj) {
return obj[alternateProp.foreignFilterKey] == alternateProp.foreignFilterValue
})
Expand Down
17 changes: 9 additions & 8 deletions components/persistor/lib/knex/update.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { RemoteDocService, UploadDocumentResponse } from '../remote-doc/RemoteDocService';
import { PersistorTransaction } from '../types/PersistorTransaction';
import { PersistorUtils } from '../utils/PersistorUtils';

module.exports = function (PersistObjectTemplate) {
import { RemoteDocService, UploadDocumentResponse } from '../remote-doc/RemoteDocService.js';
import { PersistorTransaction } from '../types/PersistorTransaction.js';
import { PersistorUtils } from '../utils/PersistorUtils.js';
import bluebirdModule from 'bluebird';
const {Promise} = bluebirdModule;
import * as _ from 'underscore';

export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/knex/update`;
var Promise = require('bluebird');
var _ = require('underscore');

/**
* Save the object to persistent storage
Expand Down Expand Up @@ -109,7 +110,7 @@ module.exports = function (PersistObjectTemplate) {
throw new Error('Missing parent entry in ' + defineProperty.of.__name__ + ' for ' + templateName);

// Go through each of the parents in the schema to find the one matching this reference
_.each(defineProperty.of.__schema__.parents, function(parentSchemaEntry, parentProp) {
_.each(defineProperty.of.__schema__.parents, function(parentSchemaEntry: any, parentProp) {

if (parentSchemaEntry.id == childForeignKey) {

Expand Down
2 changes: 1 addition & 1 deletion components/persistor/lib/mongo/db.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = function (PersistObjectTemplate) {
export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/mongo/db`;
/* Mongo implementation of save */
PersistObjectTemplate.savePojoToMongo = function(obj, pojo, updateID, _txn, logger) {
Expand Down
5 changes: 3 additions & 2 deletions components/persistor/lib/mongo/query.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module.exports = function (PersistObjectTemplate) {
import bluebirdModule from 'bluebird';
const {Promise} = bluebirdModule;
export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/mongo/query`;
var Promise = require('bluebird');

PersistObjectTemplate.getFromPersistWithMongoId = function (template, id, cascade, isTransient, idMap, _logger) {
return this.getFromPersistWithMongoQuery(template, {_id: PersistObjectTemplate.ObjectID(id.toString())}, cascade, null, null, isTransient, idMap)
Expand Down
5 changes: 3 additions & 2 deletions components/persistor/lib/mongo/update.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module.exports = function (PersistObjectTemplate) {
import bluebirdModule from 'bluebird';
const {Promise} = bluebirdModule;
export default function (PersistObjectTemplate) {
const moduleName = `persistor/lib/mongo/update`;
var Promise = require('bluebird');

/**
* Save the object to persistent storage
Expand Down
6 changes: 3 additions & 3 deletions components/persistor/lib/remote-doc/RemoteDocService.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { RemoteDocClient } from './remote-doc-types/index';
import { LocalStorageDocClient } from './remote-doc-clients/LocalStorageDocClient';
import { S3RemoteDocClient } from './remote-doc-clients/S3RemoteDocClient';
import { RemoteDocClient } from './remote-doc-types/index.js';
import { LocalStorageDocClient } from './remote-doc-clients/LocalStorageDocClient.js';
import { S3RemoteDocClient } from './remote-doc-clients/S3RemoteDocClient.js';

export type UploadDocumentResponse = {
key: string,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as fs from 'fs';
import * as path from 'path';
import * as os from 'os';
import { RemoteDocClient } from '../remote-doc-types/index';
import { RemoteDocClient } from '../remote-doc-types/index.js';

/**
* mock remote object service - where we're writing these objects to the filesystem.
Expand Down
Loading